import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useDialog } from '@/hooks/use-dialog'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/dialog/dialog'; import { Button } from '@/components/button/button'; import type { SelectBoxOption } from '@/components/select-box/select-box'; import { SelectBox } from '@/components/select-box/select-box'; import type { BaseDialogProps } from '../common/base-dialog-props'; import { useTranslation } from 'react-i18next'; import type { ImageType } from '@/context/export-image-context/export-image-context'; import { useExportImage } from '@/hooks/use-export-image'; import { Checkbox } from '@/components/checkbox/checkbox'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@/components/accordion/accordion'; export interface ExportImageDialogProps extends BaseDialogProps { format: ImageType; } const DEFAULT_INCLUDE_PATTERN_BG = true; const DEFAULT_TRANSPARENT = false; const DEFAULT_SCALE = '2'; export const ExportImageDialog: React.FC = ({ dialog, format, }) => { const { t } = useTranslation(); const [scale, setScale] = useState(DEFAULT_SCALE); const [includePatternBG, setIncludePatternBG] = useState( DEFAULT_INCLUDE_PATTERN_BG ); const [transparent, setTransparent] = useState(DEFAULT_TRANSPARENT); const { exportImage } = useExportImage(); useEffect(() => { if (!dialog.open) return; setScale(DEFAULT_SCALE); setIncludePatternBG(DEFAULT_INCLUDE_PATTERN_BG); setTransparent(DEFAULT_TRANSPARENT); }, [dialog.open]); const { closeExportImageDialog } = useDialog(); const handleExport = useCallback(() => { exportImage(format, { transparent, includePatternBG, scale: Number(scale), }); }, [exportImage, format, includePatternBG, transparent, scale]); const scaleOptions: SelectBoxOption[] = useMemo( () => ['1', '2', '3', '4'].map((scale) => ({ value: scale, label: t(`export_image_dialog.scale_${scale}x`), })), [t] ); return ( { if (!open) { closeExportImageDialog(); } }} > {t('export_image_dialog.title')} {t('export_image_dialog.description')}
setScale(value as string)} /> {t('export_image_dialog.advanced_options')}
setIncludePatternBG( value as boolean ) } />
{t( 'export_image_dialog.pattern_description' )}
setTransparent(value as boolean) } />
{t( 'export_image_dialog.transparent_description' )}
); };