mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-20 07:47:19 +08:00
feat: optimize import export event tracker (#8652)
This commit is contained in:
@@ -2,6 +2,7 @@ import { Button, IconButton, Modal } from '@affine/component';
|
||||
import { UrlService } from '@affine/core/modules/url';
|
||||
import { WorkbenchService } from '@affine/core/modules/workbench';
|
||||
import { useI18n } from '@affine/i18n';
|
||||
import track from '@affine/track';
|
||||
import {
|
||||
MarkdownTransformer,
|
||||
NotionHtmlTransformer,
|
||||
@@ -294,19 +295,35 @@ export const ImportModal = ({ ...modalProps }) => {
|
||||
}
|
||||
|
||||
setStatus('importing');
|
||||
track.$.importModal.$.import({
|
||||
type,
|
||||
status: 'importing',
|
||||
});
|
||||
|
||||
const pageIds = await importConfig.importFunction(docCollection, file);
|
||||
|
||||
setPageIds(pageIds);
|
||||
setStatus('success');
|
||||
track.$.importModal.$.import({
|
||||
type,
|
||||
status: 'success',
|
||||
result: {
|
||||
docCount: pageIds.length,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
setImportError(
|
||||
error instanceof Error ? error.message : 'Unknown error occurred'
|
||||
);
|
||||
setStatus('error');
|
||||
track.$.importModal.$.import({
|
||||
type,
|
||||
status: 'failed',
|
||||
error: importError || undefined,
|
||||
});
|
||||
}
|
||||
},
|
||||
[docCollection, t]
|
||||
[docCollection, t, importError]
|
||||
);
|
||||
|
||||
const handleComplete = useCallback(() => {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hoo
|
||||
import { useSystemOnline } from '@affine/core/components/hooks/use-system-online';
|
||||
import { DesktopApiService } from '@affine/core/modules/desktop-api/service';
|
||||
import { useI18n } from '@affine/i18n';
|
||||
import track from '@affine/track';
|
||||
import {
|
||||
useService,
|
||||
type Workspace,
|
||||
@@ -33,6 +34,9 @@ export const DesktopExportPanel = ({
|
||||
}
|
||||
setSaving(true);
|
||||
try {
|
||||
track.$.settingsPanel.workspace.export({
|
||||
type: 'workspace',
|
||||
});
|
||||
if (isOnline) {
|
||||
await workspace.engine.waitForDocSynced();
|
||||
await workspace.engine.blob.sync();
|
||||
|
||||
@@ -200,7 +200,7 @@ export const PageHeaderMenuButton = ({
|
||||
}, [duplicate, pageId]);
|
||||
|
||||
const handleOpenImportModal = useCallback(() => {
|
||||
track.$.header.docOptions.import();
|
||||
track.$.header.importModal.open();
|
||||
setOpenImportModalAtom(true);
|
||||
}, [setOpenImportModalAtom]);
|
||||
|
||||
|
||||
@@ -107,6 +107,11 @@ export const Snapshot = ({ className }: SnapshotProps) => {
|
||||
const file = await openFileOrFiles({ acceptType: 'Zip' });
|
||||
if (!file) return null;
|
||||
|
||||
track.$.header.snapshot.import({
|
||||
type: 'snapshot',
|
||||
status: 'importing',
|
||||
});
|
||||
|
||||
const importedDocs = (
|
||||
await ZipTransformer.importDocs(docCollection, file)
|
||||
).filter(doc => doc !== undefined);
|
||||
@@ -122,6 +127,13 @@ export const Snapshot = ({ className }: SnapshotProps) => {
|
||||
title: 'Imported Snapshot Successfully',
|
||||
message: `Imported ${importedDocs.length} doc(s)`,
|
||||
});
|
||||
track.$.header.snapshot.import({
|
||||
type: 'snapshot',
|
||||
status: 'success',
|
||||
result: {
|
||||
docCount: importedDocs.length,
|
||||
},
|
||||
});
|
||||
return importedDocs;
|
||||
} catch (error) {
|
||||
console.error('Error importing snapshot:', error);
|
||||
@@ -129,6 +141,11 @@ export const Snapshot = ({ className }: SnapshotProps) => {
|
||||
title: 'Import Snapshot Failed',
|
||||
message: 'Failed to import snapshot. Please try again.',
|
||||
});
|
||||
track.$.header.snapshot.import({
|
||||
type: 'snapshot',
|
||||
status: 'failed',
|
||||
error: error instanceof Error ? error.message : undefined,
|
||||
});
|
||||
return null;
|
||||
}
|
||||
}, [docCollection]);
|
||||
@@ -165,6 +182,9 @@ export const Snapshot = ({ className }: SnapshotProps) => {
|
||||
case 'import':
|
||||
return handleImportSnapshot();
|
||||
case 'export':
|
||||
track.$.header.snapshot.export({
|
||||
type: 'snapshot',
|
||||
});
|
||||
return exportHandler('snapshot');
|
||||
case 'disable':
|
||||
return disableSnapshotActionOption();
|
||||
|
||||
@@ -118,6 +118,7 @@ export const RootAppSidebar = (): ReactElement => {
|
||||
}, [setOpenSettingModalAtom]);
|
||||
|
||||
const onOpenImportModal = useCallback(() => {
|
||||
track.$.navigationPanel.importModal.open();
|
||||
setOpenImportModalAtom(true);
|
||||
}, [setOpenImportModalAtom]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user