import { useDialog } from "@/contexts/DialogProvider"; import { clearGraphicsStorage, cloudDisabled, setCloudStorage, thumbnailCaptureEnabled } from "@/features/collectionStorage"; import { useDangerStyles } from "@/hooks/useDangerStyles"; import useStorageInfo from "@/hooks/useStorageInfo"; import { Button, Field, InfoLabel, LabelProps, MessageBar, MessageBarBody, MessageBarTitle, ProgressBar, Switch } from "@fluentui/react-components"; import { ArrowDownload20Regular, ArrowUpload20Regular } from "@fluentui/react-icons"; import { Unwatch } from "wxt/utils/storage"; import { useOptionsStyles } from "../hooks/useOptionsStyles"; import exportData from "../utils/exportData"; import importData from "../utils/importData"; export default function StorageSection(): React.ReactElement { const { bytesInUse, storageQuota, usedStorageRatio } = useStorageInfo(); const [importResult, setImportResult] = useState(null); const [isCloudDisabled, setCloudDisabled] = useState(null!); const [isThumbnailCaptureEnabled, setThumbnailCaptureEnabled] = useState(null); const dialog = useDialog(); const cls = useOptionsStyles(); const dangerCls = useDangerStyles(); useEffect(() => { thumbnailCaptureEnabled.getValue().then(setThumbnailCaptureEnabled); cloudDisabled.getValue().then(setCloudDisabled); const unwatchCloud: Unwatch = cloudDisabled.watch(setCloudDisabled); const unwatchThumbnails: Unwatch = thumbnailCaptureEnabled.watch(setThumbnailCaptureEnabled); return () => { unwatchCloud(); unwatchThumbnails(); }; }, []); const handleSetThumbnailCapture = (enabled: boolean): void => { setThumbnailCaptureEnabled(null); thumbnailCaptureEnabled.setValue(enabled) .catch(() => setThumbnailCaptureEnabled(!enabled)); }; const handleClearThumbnails = (): void => dialog.pushPrompt({ title: i18n.t("options_page.storage.clear_thumbnails.title"), content: i18n.t("options_page.storage.clear_thumbnails.prompt"), confirmText: i18n.t("common.actions.delete"), destructive: true, onConfirm: () => clearGraphicsStorage() }); const handleImport = (): void => dialog.pushPrompt({ title: i18n.t("options_page.storage.import_prompt.title"), confirmText: i18n.t("options_page.storage.import_prompt.proceed"), onConfirm: () => importData().then(setImportResult), content: ( { i18n.t("options_page.storage.import_prompt.warning_title") } { i18n.t("options_page.storage.import_prompt.warning_text") } ) }); const handleDisableCloud = (): void => dialog.pushPrompt({ title: i18n.t("options_page.storage.disable"), content: i18n.t("options_page.storage.disable_prompt.text"), confirmText: i18n.t("options_page.storage.disable_prompt.action"), destructive: true, onConfirm: () => setCloudStorage(false) }); return ( <>
handleSetThumbnailCapture(e.checked as boolean) } label={ { children: (_: any, props: LabelProps) => { i18n.t("options_page.storage.thumbnail_capture_notice1") }

{ i18n.t("options_page.storage.thumbnail_capture_notice2") }

} /> } } />
{ isCloudDisabled === false && = 0.8 ? "error" : undefined } > } { isCloudDisabled === true && }
{ importResult !== null && { importResult === true ? i18n.t("options_page.storage.import_results.success") : i18n.t("options_page.storage.import_results.error") } } { isCloudDisabled === false &&
} ); }