mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-10 15:35:55 +01:00
🏗️ Migrate icons to tRPC
This commit is contained in:
@@ -15,9 +15,9 @@ import {
|
|||||||
} from '@mantine/core';
|
} from '@mantine/core';
|
||||||
import { IconSearch } from '@tabler/icons-react';
|
import { IconSearch } from '@tabler/icons-react';
|
||||||
import { useTranslation } from 'next-i18next';
|
import { useTranslation } from 'next-i18next';
|
||||||
import { useGetDashboardIcons } from '../../hooks/icons/useGetDashboardIcons';
|
|
||||||
import { humanFileSize } from '../../tools/humanFileSize';
|
import { humanFileSize } from '../../tools/humanFileSize';
|
||||||
import { DebouncedImage } from './DebouncedImage';
|
import { DebouncedImage } from './DebouncedImage';
|
||||||
|
import { api } from '~/utils/api';
|
||||||
|
|
||||||
export const IconSelector = forwardRef(
|
export const IconSelector = forwardRef(
|
||||||
(
|
(
|
||||||
@@ -175,3 +175,12 @@ interface ItemProps extends SelectItemProps {
|
|||||||
size: number;
|
size: number;
|
||||||
copyright: string | undefined;
|
copyright: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const useGetDashboardIcons = () =>
|
||||||
|
api.icon.all.useQuery(undefined, {
|
||||||
|
refetchOnMount: false,
|
||||||
|
// Cache for infinity, refetch every so often.
|
||||||
|
cacheTime: Infinity,
|
||||||
|
staleTime: 1000 * 60 * 5, // 5 minutes
|
||||||
|
refetchOnWindowFocus: false,
|
||||||
|
});
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
|
||||||
import { NormalizedIconRepositoryResult } from '../../tools/server/images/abstract-icons-repository';
|
|
||||||
|
|
||||||
export const useGetDashboardIcons = () =>
|
|
||||||
useQuery({
|
|
||||||
queryKey: ['repository-icons'],
|
|
||||||
queryFn: async () => {
|
|
||||||
const response = await fetch('/api/icons/');
|
|
||||||
const data = await response.json();
|
|
||||||
return data as NormalizedIconRepositoryResult[];
|
|
||||||
},
|
|
||||||
refetchOnMount: false,
|
|
||||||
// Cache for infinity, refetch every so often.
|
|
||||||
cacheTime: Infinity,
|
|
||||||
staleTime: 1000 * 60 * 5, // 5 minutes
|
|
||||||
refetchOnWindowFocus: false,
|
|
||||||
});
|
|
||||||
@@ -3,6 +3,7 @@ import { appRouter } from './routers/app';
|
|||||||
import { rssRouter } from './routers/rss';
|
import { rssRouter } from './routers/rss';
|
||||||
import { configRouter } from './routers/config';
|
import { configRouter } from './routers/config';
|
||||||
import { dockerRouter } from './routers/docker/router';
|
import { dockerRouter } from './routers/docker/router';
|
||||||
|
import { iconRouter } from './routers/icon';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the primary router for your server.
|
* This is the primary router for your server.
|
||||||
@@ -14,6 +15,7 @@ export const rootRouter = createTRPCRouter({
|
|||||||
rss: rssRouter,
|
rss: rssRouter,
|
||||||
config: configRouter,
|
config: configRouter,
|
||||||
docker: dockerRouter,
|
docker: dockerRouter,
|
||||||
|
icon: iconRouter,
|
||||||
});
|
});
|
||||||
|
|
||||||
// export type definition of API
|
// export type definition of API
|
||||||
|
|||||||
35
src/server/api/routers/icon.ts
Normal file
35
src/server/api/routers/icon.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { LocalIconsRepository } from '~/tools/server/images/local-icons-repository';
|
||||||
|
import { createTRPCRouter, publicProcedure } from '../trpc';
|
||||||
|
import { JsdelivrIconsRepository } from '~/tools/server/images/jsdelivr-icons-repository';
|
||||||
|
import { UnpkgIconsRepository } from '~/tools/server/images/unpkg-icons-repository';
|
||||||
|
|
||||||
|
export const iconRouter = createTRPCRouter({
|
||||||
|
all: publicProcedure.query(async () => {
|
||||||
|
const respositories = [
|
||||||
|
new LocalIconsRepository(),
|
||||||
|
new JsdelivrIconsRepository(
|
||||||
|
JsdelivrIconsRepository.tablerRepository,
|
||||||
|
'Walkxcode Dashboard Icons',
|
||||||
|
'Walkxcode on Github'
|
||||||
|
),
|
||||||
|
new UnpkgIconsRepository(
|
||||||
|
UnpkgIconsRepository.tablerRepository,
|
||||||
|
'Tabler Icons',
|
||||||
|
'Tabler Icons - GitHub (MIT)'
|
||||||
|
),
|
||||||
|
new JsdelivrIconsRepository(
|
||||||
|
JsdelivrIconsRepository.papirusRepository,
|
||||||
|
'Papirus Icons',
|
||||||
|
'Papirus Development Team on GitHub (Apache 2.0)'
|
||||||
|
),
|
||||||
|
new JsdelivrIconsRepository(
|
||||||
|
JsdelivrIconsRepository.homelabSvgAssetsRepository,
|
||||||
|
'Homelab Svg Assets',
|
||||||
|
'loganmarchione on GitHub (MIT)'
|
||||||
|
),
|
||||||
|
];
|
||||||
|
const fetches = respositories.map((rep) => rep.fetch());
|
||||||
|
const data = await Promise.all(fetches);
|
||||||
|
return data;
|
||||||
|
}),
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user