import { SITE_SETTINGS_BANNER_ID, type TSiteSettingsBannerSchema, 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'; import { zodResolver } from '@hookform/resolvers/zod'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { useForm } from 'react-hook-form'; import { useRevalidator } from 'react-router'; import type { z } from 'zod'; import { useCspNonce } from '~/utils/nonce'; const ZBannerFormSchema = ZSiteSettingsBannerSchema; type TBannerFormSchema = z.infer; type AdminSiteBannerSectionProps = { banner: TSiteSettingsBannerSchema | undefined; }; export const AdminSiteBannerSection = ({ banner }: AdminSiteBannerSectionProps) => { const nonce = useCspNonce(); const { toast } = useToast(); const { _ } = useLingui(); const { revalidate } = useRevalidator(); 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, }); await revalidate(); } 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