diff --git a/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx b/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx index 576dff849..9c8e33319 100644 --- a/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx +++ b/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx @@ -21,6 +21,7 @@ import { BehaviourTab } from './Tabs/BehaviourTab/BehaviourTab'; import { GeneralTab } from './Tabs/GeneralTab/GeneralTab'; import { IntegrationTab } from './Tabs/IntegrationTab/IntegrationTab'; import { NetworkTab } from './Tabs/NetworkTab/NetworkTab'; +import { DebouncedServiceIcon } from './Tabs/Shared/DebouncedServiceIcon'; import { EditServiceModalTab } from './Tabs/type'; const serviceUrlRegex = @@ -141,19 +142,7 @@ export const EditServiceModal = ({ ))} - {form.values.appearance.iconUrl ? ( - // disabled because image target is too dynamic for next image cache - // eslint-disable-next-line @next/next/no-img-element - service icon - ) : ( - - )} + {form.values.name ?? 'New Service'} diff --git a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx index 17dc43874..0edd79022 100644 --- a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx +++ b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx @@ -1,8 +1,8 @@ -import Image from 'next/image'; import { createStyles, Flex, Tabs, TextInput } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { useTranslation } from 'next-i18next'; import { ServiceType } from '../../../../../../types/service'; +import { DebouncedServiceIcon } from '../Shared/DebouncedServiceIcon'; import { IconSelector } from './IconSelector/IconSelector'; interface AppearanceTabProps { @@ -13,31 +13,13 @@ export const AppearanceTab = ({ form }: AppearanceTabProps) => { const { t } = useTranslation(''); const { classes } = useStyles(); - const PreviewImage = () => { - if (form.values.appearance.iconUrl !== undefined && form.values.appearance.iconUrl.length > 0) { - // disabled due to too many dynamic targets for next image cache - // eslint-disable-next-line @next/next/no-img-element - return ; - } - - return ( - - ); - }; - return ( } + icon={} label="Service Icon" description="Logo of your service displayed in your dashboard. Must return a body content containg an image" variant="default" @@ -63,9 +45,4 @@ const useStyles = createStyles(() => ({ textInput: { flexGrow: 1, }, - iconImage: { - objectFit: 'contain', - width: 20, - height: 20, - }, })); diff --git a/src/components/Dashboard/Modals/EditService/Tabs/Shared/DebouncedServiceIcon.tsx b/src/components/Dashboard/Modals/EditService/Tabs/Shared/DebouncedServiceIcon.tsx new file mode 100644 index 000000000..5f0aaf42d --- /dev/null +++ b/src/components/Dashboard/Modals/EditService/Tabs/Shared/DebouncedServiceIcon.tsx @@ -0,0 +1,59 @@ +// disabled due to too many dynamic targets for next image cache +/* eslint-disable @next/next/no-img-element */ +import Image from 'next/image'; +import { createStyles, Loader } from '@mantine/core'; +import { UseFormReturnType } from '@mantine/form'; +import { useDebouncedValue } from '@mantine/hooks'; +import { ServiceType } from '../../../../../../types/service'; + +interface DebouncedServiceIconProps { + width: number; + height: number; + form: UseFormReturnType ServiceType>; + debouncedWaitPeriod?: number; +} + +export const DebouncedServiceIcon = ({ + form, + width, + height, + debouncedWaitPeriod = 1000, +}: DebouncedServiceIconProps) => { + const { classes } = useStyles(); + const [debouncedIconImageUrl] = useDebouncedValue( + form.values.appearance.iconUrl, + debouncedWaitPeriod + ); + + if (debouncedIconImageUrl !== form.values.appearance.iconUrl) { + return ; + } + + if (debouncedIconImageUrl.length > 0) { + return ( + + ); + } + + return ( + + ); +}; + +const useStyles = createStyles(() => ({ + iconImage: { + objectFit: 'contain', + }, +}));