import { Flex, NumberInput, Select, Stack, Switch, Tabs } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; import { useDebouncedValue } from '@mantine/hooks'; import { useTranslation } from 'next-i18next'; import { useEffect, useRef } from 'react'; import { AppType } from '~/types/app'; import { IconSelector } from '~/components/IconSelector/IconSelector'; interface AppearanceTabProps { form: UseFormReturnType AppType>; disallowAppNamePropagation: () => void; allowAppNamePropagation: boolean; } export const AppearanceTab = ({ form, disallowAppNamePropagation, allowAppNamePropagation, }: AppearanceTabProps) => { const iconSelectorRef = useRef(); const [debouncedValue] = useDebouncedValue(form.values.name, 500); const { t } = useTranslation('layout/modals/add-app'); useEffect(() => { if (allowAppNamePropagation !== true) { return; } if (!iconSelectorRef.current) { return; } const currentRef = iconSelectorRef.current as { chooseFirstOrDefault: (debouncedValue: string) => void; }; currentRef.chooseFirstOrDefault(debouncedValue); }, [debouncedValue]); return ( { form.setFieldValue('appearance.iconUrl', value); disallowAppNamePropagation(); }} value={form.values.appearance.iconUrl} ref={iconSelectorRef} /> { form.setFieldValue('appearance.positionAppName', value); }} /> { form.setFieldValue('appearance.lineClampAppName', value); }} /> )} ); }; const replaceCharacters = (value: string) => value.toLowerCase().replaceAll('', '-');