DashboardToggle.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import type { ReactNode } from 'react'
  2. import type { FieldValues, Path, UseFormReturn } from 'react-hook-form'
  3. import { CardContent, FormControl, FormField, Switch } from 'ui'
  4. import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
  5. interface DashboardToggleProps<T extends FieldValues> {
  6. form: UseFormReturn<T>
  7. name: Path<T>
  8. label: string
  9. description: ReactNode
  10. onToggle: (value: boolean) => void
  11. isLast?: boolean
  12. }
  13. export function DashboardToggle<T extends FieldValues>({
  14. form,
  15. name,
  16. label,
  17. description,
  18. onToggle,
  19. isLast,
  20. }: DashboardToggleProps<T>) {
  21. return (
  22. <CardContent className={isLast ? undefined : 'border-b'}>
  23. <FormField
  24. control={form.control}
  25. name={name}
  26. render={({ field }) => (
  27. <FormItemLayout layout="flex-row-reverse" label={label} description={description}>
  28. <FormControl>
  29. <Switch
  30. checked={field.value}
  31. onCheckedChange={(value) => {
  32. field.onChange(value)
  33. onToggle(value)
  34. }}
  35. />
  36. </FormControl>
  37. </FormItemLayout>
  38. )}
  39. />
  40. </CardContent>
  41. )
  42. }