Openstatus www.openstatus.dev
at main 74 lines 2.3 kB view raw
1"use client"; 2 3import { FormCard, FormCardGroup } from "@/components/forms/form-card"; 4import { 5 FormSheetContent, 6 FormSheetDescription, 7 FormSheetFooter, 8 FormSheetHeader, 9 FormSheetTitle, 10 FormSheetTrigger, 11 FormSheetWithDirtyProtection, 12} from "@/components/forms/form-sheet"; 13import { 14 FormStatusReport, 15 type FormValues, 16} from "@/components/forms/status-report/form"; 17import { Button } from "@/components/ui/button"; 18import { Separator } from "@/components/ui/separator"; 19import type { PageComponent } from "@openstatus/db/src/schema"; 20import { useState } from "react"; 21 22export function FormSheetStatusReport({ 23 children, 24 defaultValues, 25 onSubmit, 26 pageComponents, 27 warning, 28}: Omit<React.ComponentProps<typeof FormSheetTrigger>, "onSubmit"> & { 29 defaultValues?: FormValues; 30 onSubmit: (values: FormValues) => Promise<void>; 31 pageComponents: Pick<PageComponent, "id" | "name" | "type">[]; 32 warning?: React.ReactNode; 33}) { 34 const [open, setOpen] = useState(false); 35 36 return ( 37 <FormSheetWithDirtyProtection open={open} onOpenChange={setOpen}> 38 <FormSheetTrigger asChild>{children}</FormSheetTrigger> 39 <FormSheetContent className="sm:max-w-lg"> 40 <FormSheetHeader> 41 <FormSheetTitle>Status Report</FormSheetTitle> 42 <FormSheetDescription> 43 Configure and update the status of your report. 44 </FormSheetDescription> 45 </FormSheetHeader> 46 {warning ? ( 47 <> 48 <p className="px-4 py-4 text-sm text-warning">{warning}</p> 49 <Separator /> 50 </> 51 ) : null} 52 <FormCardGroup className="overflow-y-scroll"> 53 <FormCard className="overflow-auto rounded-none border-none"> 54 <FormStatusReport 55 id="status-report-form" 56 className="my-4" 57 onSubmit={async (values) => { 58 await onSubmit(values); 59 setOpen(false); 60 }} 61 defaultValues={defaultValues} 62 pageComponents={pageComponents} 63 /> 64 </FormCard> 65 </FormCardGroup> 66 <FormSheetFooter> 67 <Button type="submit" form="status-report-form"> 68 Submit 69 </Button> 70 </FormSheetFooter> 71 </FormSheetContent> 72 </FormSheetWithDirtyProtection> 73 ); 74}