Files
Homarr/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/AppereanceTab.tsx

63 lines
1.9 KiB
TypeScript
Raw Normal View History

import { Autocomplete, createStyles, Flex, Tabs, TextInput } from '@mantine/core';
2022-12-04 21:19:40 +01:00
import { UseFormReturnType } from '@mantine/form';
import { useQuery } from '@tanstack/react-query';
2022-12-04 21:19:40 +01:00
import { useTranslation } from 'next-i18next';
import { AppType } from '../../../../../../types/app';
import { DebouncedAppIcon } from '../Shared/DebouncedAppIcon';
import { IconSelector } from './IconSelector/IconSelector';
2022-12-04 21:19:40 +01:00
interface AppearanceTabProps {
form: UseFormReturnType<AppType, (values: AppType) => AppType>;
disallowAppNameProgagation: () => void;
allowAppNamePropagation: boolean;
2022-12-04 21:19:40 +01:00
}
export const AppearanceTab = ({
form,
disallowAppNameProgagation,
allowAppNamePropagation,
}: AppearanceTabProps) => {
2022-12-20 11:34:07 +09:00
const { t } = useTranslation('layout/modals/add-app');
const { classes } = useStyles();
const { isLoading, error, data } = useQuery({
queryKey: ['autocompleteLocale'],
queryFn: () => fetch('/api/getLocalImages').then((res) => res.json()),
});
2022-12-04 21:19:40 +01:00
return (
<Tabs.Panel value="appearance" pt="lg">
<Flex gap={5}>
<Autocomplete
className={classes.textInput}
icon={<DebouncedAppIcon form={form} width={20} height={20} />}
2022-12-20 11:34:07 +09:00
label={t('appearance.icon.label')}
description={t('appearance.icon.description')}
variant="default"
2023-01-28 23:01:15 +01:00
data={data.files ?? []}
withAsterisk
required
{...form.getInputProps('appearance.iconUrl')}
/>
<IconSelector
onChange={(item) => {
form.setValues({
appearance: {
iconUrl: item.url,
},
});
disallowAppNameProgagation();
}}
allowAppNamePropagation={allowAppNamePropagation}
form={form}
/>
</Flex>
2022-12-04 21:19:40 +01:00
</Tabs.Panel>
);
};
const useStyles = createStyles(() => ({
textInput: {
flexGrow: 1,
},
}));