| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { ChevronRight } from 'lucide-react'
- import { useMemo, useState } from 'react'
- import type { UseFormReturn } from 'react-hook-form'
- import { Collapsible, CollapsibleContent, CollapsibleTrigger, FormField, Switch } from 'ui'
- import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
- import { DASHBOARD_LOG_CATEGORIES } from './dashboard-logs'
- import type { SupportFormValues } from './SupportForm.schema'
- interface DashboardLogsToggleProps {
- form: UseFormReturn<SupportFormValues>
- sanitizedLog: unknown[]
- align?: 'left' | 'right'
- className?: string
- }
- export function DashboardLogsToggle({
- form,
- sanitizedLog,
- align = 'left',
- className,
- }: DashboardLogsToggleProps) {
- const sanitizedLogJson = useMemo(() => JSON.stringify(sanitizedLog, null, 2), [sanitizedLog])
- const [isPreviewOpen, setIsPreviewOpen] = useState(false)
- if (!DASHBOARD_LOG_CATEGORIES.includes(form.getValues('category'))) return
- return (
- <FormField
- name="attachDashboardLogs"
- control={form.control}
- render={({ field }) => (
- <FormItemLayout
- hideMessage
- name="attachDashboardLogs"
- className={className}
- layout="flex"
- align={align}
- label={
- <div className="flex items-center gap-x-2">
- <span className="text-foreground">Include dashboard activity log</span>
- </div>
- }
- description={
- <div className="flex flex-col">
- <span className="text-foreground-light">
- Share sanitized logs of recent dashboard actions to help reproduce the issue.
- </span>
- <Collapsible className="mt-2" open={isPreviewOpen} onOpenChange={setIsPreviewOpen}>
- <CollapsibleTrigger
- className={
- 'group flex items-center gap-x-1 group-data-open:text-foreground hover:text-foreground transition'
- }
- >
- <ChevronRight
- size={14}
- className="transition-all group-data-open:rotate-90 text-foreground-muted -ml-1"
- />
- <span className="text-sm">Preview log</span>
- </CollapsibleTrigger>
- <CollapsibleContent className="mt-2">
- <pre className="bg-background-surface-200 border border-strong rounded-lg p-3 max-h-60 overflow-y-auto overflow-x-auto text-xs text-foreground-light whitespace-pre-wrap">
- {sanitizedLogJson}
- </pre>
- </CollapsibleContent>
- </Collapsible>
- </div>
- }
- >
- <Switch
- size="large"
- id="attachDashboardLogs"
- checked={field.value}
- onCheckedChange={field.onChange}
- />
- </FormItemLayout>
- )}
- />
- )
- }
|