fix(core): importing template with default mode (#8250)
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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!;
|
||||||
|
|||||||
@@ -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()}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|||||||
@@ -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()}`
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user