feat(mobile): create from template on mobile (#9968)

This commit is contained in:
CatsJuice
2025-02-07 09:52:58 +00:00
parent 527878a55c
commit 85d916f1eb
2 changed files with 37 additions and 8 deletions

View File

@@ -1,10 +1,13 @@
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
import { DocsService } from '@affine/core/modules/doc';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import { TemplateDocService } from '@affine/core/modules/template-doc';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { WorkspaceService } from '@affine/core/modules/workspace';
import track from '@affine/track';
import { EditIcon } from '@blocksuite/icons/rc';
import { useService } from '@toeverything/infra';
import { useCallback } from 'react';
import { useLiveData, useService } from '@toeverything/infra';
import type { AppTabCustomFCProps } from './data';
import { TabItem } from './tab-item';
@@ -12,17 +15,43 @@ import { TabItem } from './tab-item';
export const AppTabCreate = ({ tab }: AppTabCustomFCProps) => {
const workbench = useService(WorkbenchService).workbench;
const workspaceService = useService(WorkspaceService);
const featureFlagService = useService(FeatureFlagService);
const templateDocService = useService(TemplateDocService);
const docsService = useService(DocsService);
const currentWorkspace = workspaceService.workspace;
const pageHelper = usePageHelper(currentWorkspace.docCollection);
const enableTemplateDoc = useLiveData(
featureFlagService.flags.enable_template_doc.$
);
const enablePageTemplate = useLiveData(
templateDocService.setting.enablePageTemplate$
);
const pageTemplateDocId = useLiveData(
templateDocService.setting.pageTemplateDocId$
);
const createPage = useCallback(
(isActive: boolean) => {
const createPage = useAsyncCallback(
async (isActive: boolean) => {
if (isActive) return;
const doc = pageHelper.createPage(undefined, { show: false });
workbench.openDoc({ docId: doc.id, fromTab: 'true' });
if (enableTemplateDoc && enablePageTemplate && pageTemplateDocId) {
const docId =
await docsService.duplicateFromTemplate(pageTemplateDocId);
workbench.openDoc({ docId, fromTab: 'true' });
} else {
const doc = pageHelper.createPage(undefined, { show: false });
workbench.openDoc({ docId: doc.id, fromTab: 'true' });
}
track.$.navigationPanel.$.createDoc();
},
[pageHelper, workbench]
[
docsService,
enablePageTemplate,
enableTemplateDoc,
pageHelper,
pageTemplateDocId,
workbench,
]
);
return (

View File

@@ -236,7 +236,7 @@ export const AFFINE_FLAGS = {
displayName: 'Enable template doc',
description:
'Allow users to mark a doc as a template, and create new docs from it',
configurable: !isMobile,
configurable: true,
defaultState: isCanaryBuild,
},
// TODO(@L-Sun): remove this flag when ready