feat: optimize import export event tracker (#8652)

This commit is contained in:
donteatfriedrice
2024-11-01 08:37:00 +00:00
parent a776c1f82b
commit 0184328011
7 changed files with 65 additions and 7 deletions

View File

@@ -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(() => {

View File

@@ -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();

View File

@@ -200,7 +200,7 @@ export const PageHeaderMenuButton = ({
}, [duplicate, pageId]);
const handleOpenImportModal = useCallback(() => {
track.$.header.docOptions.import();
track.$.header.importModal.open();
setOpenImportModalAtom(true);
}, [setOpenImportModalAtom]);

View File

@@ -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();

View File

@@ -118,6 +118,7 @@ export const RootAppSidebar = (): ReactElement => {
}, [setOpenSettingModalAtom]);
const onOpenImportModal = useCallback(() => {
track.$.navigationPanel.importModal.open();
setOpenImportModalAtom(true);
}, [setOpenImportModalAtom]);