fix(core): importing template with default mode (#8250)

This commit is contained in:
pengx17
2024-09-13 12:54:20 +00:00
parent ae3f48d0cc
commit d2bd39a1c7
5 changed files with 21 additions and 4 deletions

View File

@@ -1,8 +1,10 @@
import type { DocMode } from '@blocksuite/blocks';
import { Entity, LiveData } from '@toeverything/infra'; import { Entity, LiveData } from '@toeverything/infra';
interface TemplateOptions { interface TemplateOptions {
templateName: string; templateName: string;
snapshotUrl: string; snapshotUrl: string;
templateMode: DocMode;
} }
export class ImportTemplateDialog extends Entity { export class ImportTemplateDialog extends Entity {

View File

@@ -1,5 +1,5 @@
import type { WorkspaceFlavour } from '@affine/env/workspace'; import type { WorkspaceFlavour } from '@affine/env/workspace';
import { ZipTransformer } from '@blocksuite/blocks'; import { type DocMode, ZipTransformer } from '@blocksuite/blocks';
import type { WorkspaceMetadata, WorkspacesService } from '@toeverything/infra'; import type { WorkspaceMetadata, WorkspacesService } from '@toeverything/infra';
import { DocsService, Service } from '@toeverything/infra'; import { DocsService, Service } from '@toeverything/infra';
@@ -10,7 +10,8 @@ export class ImportTemplateService extends Service {
async importToWorkspace( async importToWorkspace(
workspaceMetadata: WorkspaceMetadata, workspaceMetadata: WorkspaceMetadata,
docBinary: Uint8Array docBinary: Uint8Array,
mode: DocMode
) { ) {
const { workspace, dispose: disposeWorkspace } = const { workspace, dispose: disposeWorkspace } =
this.workspacesService.open({ this.workspacesService.open({
@@ -26,7 +27,7 @@ export class ImportTemplateService extends Service {
const docsService = workspace.scope.get(DocsService); const docsService = workspace.scope.get(DocsService);
if (importedDoc) { if (importedDoc) {
// only support page mode for now // only support page mode for now
docsService.list.setPrimaryMode(importedDoc.id, 'page'); docsService.list.setPrimaryMode(importedDoc.id, mode);
disposeWorkspace(); disposeWorkspace();
return importedDoc.id; return importedDoc.id;
} else { } else {
@@ -38,6 +39,7 @@ export class ImportTemplateService extends Service {
flavour: WorkspaceFlavour, flavour: WorkspaceFlavour,
workspaceName: string, workspaceName: string,
docBinary: Uint8Array docBinary: Uint8Array
// todo: support doc mode on init
) { ) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
let docId: string = null!; let docId: string = null!;

View File

@@ -5,6 +5,7 @@ import { useWorkspaceName } from '@affine/core/components/hooks/use-workspace-in
import { WorkspaceSelector } from '@affine/core/components/workspace-selector'; import { WorkspaceSelector } from '@affine/core/components/workspace-selector';
import { WorkspaceFlavour } from '@affine/env/workspace'; import { WorkspaceFlavour } from '@affine/env/workspace';
import { useI18n } from '@affine/i18n'; import { useI18n } from '@affine/i18n';
import type { DocMode } from '@blocksuite/blocks';
import { AllDocsIcon } from '@blocksuite/icons/rc'; import { AllDocsIcon } from '@blocksuite/icons/rc';
import { import {
useLiveData, useLiveData,
@@ -24,10 +25,12 @@ import * as styles from './dialog.css';
const Dialog = ({ const Dialog = ({
templateName, templateName,
templateMode,
snapshotUrl, snapshotUrl,
onClose, onClose,
}: { }: {
templateName: string; templateName: string;
templateMode: DocMode;
snapshotUrl: string; snapshotUrl: string;
onClose?: () => void; onClose?: () => void;
}) => { }) => {
@@ -70,6 +73,8 @@ const Dialog = ({
'/template/import?' + '/template/import?' +
'&name=' + '&name=' +
templateName + templateName +
'&mode=' +
templateMode +
'&snapshotUrl=' + '&snapshotUrl=' +
snapshotUrl snapshotUrl
); );
@@ -82,6 +87,7 @@ const Dialog = ({
onClose, onClose,
snapshotUrl, snapshotUrl,
templateName, templateName,
templateMode,
]); ]);
useEffect(() => { useEffect(() => {
@@ -108,7 +114,8 @@ const Dialog = ({
try { try {
const docId = await importTemplateService.importToWorkspace( const docId = await importTemplateService.importToWorkspace(
selectedWorkspace, selectedWorkspace,
templateDownloader.data$.value templateDownloader.data$.value,
templateMode
); );
openPage(selectedWorkspace.id, docId); openPage(selectedWorkspace.id, docId);
onClose?.(); onClose?.();
@@ -124,6 +131,7 @@ const Dialog = ({
openPage, openPage,
selectedWorkspace, selectedWorkspace,
templateDownloader.data$.value, templateDownloader.data$.value,
templateMode,
]); ]);
const handleImportToNewWorkspace = useAsyncCallback(async () => { const handleImportToNewWorkspace = useAsyncCallback(async () => {
@@ -235,6 +243,7 @@ export const ImportTemplateDialogProvider = () => {
{template && ( {template && (
<Dialog <Dialog
templateName={template.templateName} templateName={template.templateName}
templateMode={template.templateMode}
snapshotUrl={template.snapshotUrl} snapshotUrl={template.snapshotUrl}
onClose={() => importTemplateDialogService.dialog.close()} onClose={() => importTemplateDialogService.dialog.close()}
/> />

View File

@@ -1,3 +1,4 @@
import type { DocMode } from '@blocksuite/blocks';
import { useService } from '@toeverything/infra'; import { useService } from '@toeverything/infra';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
@@ -12,6 +13,7 @@ export const Component = () => {
useEffect(() => { useEffect(() => {
importTemplateDialogService.dialog.open({ importTemplateDialogService.dialog.open({
templateName: searchParams.get('name') ?? '', templateName: searchParams.get('name') ?? '',
templateMode: (searchParams.get('mode') as DocMode) ?? 'page',
snapshotUrl: searchParams.get('snapshotUrl') ?? '', snapshotUrl: searchParams.get('snapshotUrl') ?? '',
}); });
}, [importTemplateDialogService.dialog, jumpToIndex, searchParams]); }, [importTemplateDialogService.dialog, jumpToIndex, searchParams]);

View File

@@ -101,6 +101,7 @@ export const topLevelRoutes = [
const workspaceId = url.searchParams.get('workspaceId'); const workspaceId = url.searchParams.get('workspaceId');
const docId = url.searchParams.get('docId'); const docId = url.searchParams.get('docId');
const templateName = url.searchParams.get('name'); const templateName = url.searchParams.get('name');
const templateMode = url.searchParams.get('mode');
const snapshotUrl = url.searchParams.get('snapshotUrl'); const snapshotUrl = url.searchParams.get('snapshotUrl');
return redirect( return redirect(
@@ -108,6 +109,7 @@ export const topLevelRoutes = [
isTemplate: 'true', isTemplate: 'true',
templateName: templateName ?? '', templateName: templateName ?? '',
snapshotUrl: snapshotUrl ?? '', snapshotUrl: snapshotUrl ?? '',
templateMode: templateMode ?? 'page',
}).toString()}` }).toString()}`
); );
}, },