🏗️ Migrate icons to tRPC

This commit is contained in:
Meier Lukas
2023-06-10 13:10:02 +02:00
parent c061426846
commit 458fea369c
4 changed files with 47 additions and 18 deletions

View File

@@ -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,
});

View File

@@ -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,
});

View File

@@ -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

View 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;
}),
});