'use client'; import { useRouter } from 'next/navigation'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { useForm } from 'react-hook-form'; import type { z } from 'zod'; import type { TSiteSettingsBannerSchema } from '@documenso/lib/server-only/site-settings/schemas/banner'; import { SITE_SETTINGS_BANNER_ID, ZSiteSettingsBannerSchema, } from '@documenso/lib/server-only/site-settings/schemas/banner'; import { trpc as trpcReact } from '@documenso/trpc/react'; import { Button } from '@documenso/ui/primitives/button'; import { ColorPicker } from '@documenso/ui/primitives/color-picker'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Switch } from '@documenso/ui/primitives/switch'; import { Textarea } from '@documenso/ui/primitives/textarea'; import { useToast } from '@documenso/ui/primitives/use-toast'; const ZBannerFormSchema = ZSiteSettingsBannerSchema; type TBannerFormSchema = z.infer; export type BannerFormProps = { banner?: TSiteSettingsBannerSchema; }; export function BannerForm({ banner }: BannerFormProps) { const { toast } = useToast(); const { _ } = useLingui(); const router = useRouter(); const form = useForm({ resolver: zodResolver(ZBannerFormSchema), defaultValues: { id: SITE_SETTINGS_BANNER_ID, enabled: banner?.enabled ?? false, data: { content: banner?.data?.content ?? '', bgColor: banner?.data?.bgColor ?? '#000000', textColor: banner?.data?.textColor ?? '#FFFFFF', }, }, }); const enabled = form.watch('enabled'); const { mutateAsync: updateSiteSetting, isPending: isUpdateSiteSettingLoading } = trpcReact.admin.updateSiteSetting.useMutation(); const onBannerUpdate = async ({ id, enabled, data }: TBannerFormSchema) => { try { await updateSiteSetting({ id, enabled, data, }); toast({ title: _(msg`Banner Updated`), description: _(msg`Your banner has been updated successfully.`), duration: 5000, }); router.refresh(); } catch (err) { toast({ title: _(msg`An unknown error occurred`), variant: 'destructive', description: _( msg`We encountered an unknown error while attempting to update the banner. Please try again later.`, ), }); } }; return (

Site Banner

The site banner is a message that is shown at the top of the site. It can be used to display important information to your users.

( Enabled
)} />
( Background Color
)} /> ( Text Color
)} />
( Content