import { Button, Group, Select, Stack, Text, Title } from '@mantine/core'; import { createFormContext } from '@mantine/form'; import type { InferGetServerSidePropsType } from 'next'; import { GetServerSidePropsContext } from 'next'; import { forwardRef } from 'react'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { AccessibilitySettings } from '~/components/Settings/Customization/Accessibility/AccessibilitySettings'; import { MainLayout } from '~/components/layout/admin/main-admin.layout'; import { CommonHeader } from '~/components/layout/common-header'; import { languages } from '~/tools/language'; import { getServerSideTranslations } from '~/tools/server/getServerSideTranslations'; import { manageNamespaces } from '~/tools/server/translation-namespaces'; import { RouterOutputs, api } from '~/utils/api'; import { useI18nZodResolver } from '~/utils/i18n-zod-resolver'; import { updateSettingsValidationSchema } from '~/validations/user'; const PreferencesPage = ({ locale }: InferGetServerSidePropsType) => { const { data } = api.user.getWithSettings.useQuery(); return ( Preferences • Homarr Preferences {data && } ); }; export const [FormProvider, useFormContext, useForm] = createFormContext>(); const SettingsComponent = ({ settings, }: { settings: RouterOutputs['user']['getWithSettings']['settings']; }) => { const languagesData = languages.map((language) => ({ image: 'https://img.icons8.com/clouds/256/000000/futurama-bender.png', label: language.originalName, description: language.translatedName, value: language.shortName, country: language.country, })); const { t } = useTranslation('user/preferences'); const { i18nZodResolver } = useI18nZodResolver(); const form = useForm({ initialValues: { disablePingPulse: settings.disablePingPulse, replaceDotsWithIcons: settings.replacePingWithIcons, language: settings.language, }, validate: i18nZodResolver(updateSettingsValidationSchema), validateInputOnBlur: true, validateInputOnChange: true, }); const { mutate } = api.user.updateSettings.useMutation(); const handleSubmit = () => { mutate(form.values); }; return (
{t('localization.language.label')} Accessibility
); }; interface ItemProps extends React.ComponentPropsWithoutRef<'div'> { image: string; label: string; description: string; country: string; } const SelectItem = forwardRef( ({ image, label, description, country, ...others }: ItemProps, ref) => (
{label} {description}
) ); export async function getServerSideProps({ req, res, locale }: GetServerSidePropsContext) { const translations = await getServerSideTranslations(manageNamespaces, locale, undefined, undefined); return { props: { ...translations, locale: locale, }, }; } export default PreferencesPage;