Add select for default board in preferences

This commit is contained in:
Manuel
2023-08-01 17:56:56 +02:00
parent 70c942e4cb
commit 6ae89140a9
3 changed files with 27 additions and 1 deletions

View File

@@ -1,4 +1,10 @@
{ {
"boards": {
"title": "Boards",
"defaultBoard": {
"label": "Default board"
}
},
"accessibility": { "accessibility": {
"disablePulse": { "disablePulse": {
"label": "Disable ping pulse", "label": "Disable ping pulse",

View File

@@ -17,6 +17,7 @@ import { updateSettingsValidationSchema } from '~/validations/user';
const PreferencesPage = ({ locale }: InferGetServerSidePropsType<typeof getServerSideProps>) => { const PreferencesPage = ({ locale }: InferGetServerSidePropsType<typeof getServerSideProps>) => {
const { data } = api.user.withSettings.useQuery(); const { data } = api.user.withSettings.useQuery();
const { data: boardsData } = api.boards.all.useQuery();
return ( return (
<ManageLayout> <ManageLayout>
@@ -25,7 +26,7 @@ const PreferencesPage = ({ locale }: InferGetServerSidePropsType<typeof getServe
</Head> </Head>
<Title mb="xl">Preferences</Title> <Title mb="xl">Preferences</Title>
{data && <SettingsComponent settings={data.settings} />} {data && boardsData && <SettingsComponent settings={data.settings} boardsData={boardsData} />}
</ManageLayout> </ManageLayout>
); );
}; };
@@ -35,8 +36,10 @@ export const [FormProvider, useFormContext, useForm] =
const SettingsComponent = ({ const SettingsComponent = ({
settings, settings,
boardsData,
}: { }: {
settings: RouterOutputs['user']['withSettings']['settings']; settings: RouterOutputs['user']['withSettings']['settings'];
boardsData: RouterOutputs['boards']['all'];
}) => { }) => {
const languagesData = languages.map((language) => ({ const languagesData = languages.map((language) => ({
image: 'https://img.icons8.com/clouds/256/000000/futurama-bender.png', image: 'https://img.icons8.com/clouds/256/000000/futurama-bender.png',
@@ -55,6 +58,7 @@ const SettingsComponent = ({
disablePingPulse: settings.disablePingPulse, disablePingPulse: settings.disablePingPulse,
replaceDotsWithIcons: settings.replacePingWithIcons, replaceDotsWithIcons: settings.replacePingWithIcons,
language: settings.language, language: settings.language,
defaultBoard: settings.defaultBoard,
}, },
validate: i18nZodResolver(updateSettingsValidationSchema), validate: i18nZodResolver(updateSettingsValidationSchema),
validateInputOnBlur: true, validateInputOnBlur: true,
@@ -72,6 +76,21 @@ const SettingsComponent = ({
<form onSubmit={form.onSubmit(handleSubmit)}> <form onSubmit={form.onSubmit(handleSubmit)}>
<Stack spacing={5}> <Stack spacing={5}>
<Title order={2} size="lg"> <Title order={2} size="lg">
{t('boards.title')}
</Title>
<Select
label={t('boards.defaultBoard.label')}
data={boardsData.map((board) => board.name)}
searchable
maxDropdownHeight={400}
filter={(value, item) => item.label!.toLowerCase().includes(value.toLowerCase().trim())}
withAsterisk
mb="xs"
{...form.getInputProps('defaultBoard')}
/>
<Title order={2} size="lg" mt="lg">
{t('localization.language.label')} {t('localization.language.label')}
</Title> </Title>

View File

@@ -44,4 +44,5 @@ export const updateSettingsValidationSchema = z.object({
disablePingPulse: z.boolean(), disablePingPulse: z.boolean(),
replaceDotsWithIcons: z.boolean(), replaceDotsWithIcons: z.boolean(),
language: z.string(), language: z.string(),
defaultBoard: z.string()
}); });