feat: bump blocksuite (#5953)

This commit is contained in:
regischen
2024-02-29 14:33:50 +08:00
committed by GitHub
parent fa534869e1
commit d1e6b23e1a
121 changed files with 665 additions and 674 deletions
@@ -238,8 +238,8 @@ export const CreateWorkspaceModal = ({
workspaceFlavour,
async workspace => {
workspace.meta.setName(name);
const page = workspace.createPage();
workspace.setPageMeta(page.id, {
const page = workspace.createDoc();
workspace.setDocMeta(page.id, {
jumpOnce: true,
});
initEmptyPage(page);
@@ -1,4 +1,4 @@
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteWorkspacePage } from '@affine/core/hooks/use-block-suite-workspace-page';
import { timestampToLocalDate } from '@affine/core/utils';
import { DebugLogger } from '@affine/debug';
@@ -27,7 +27,7 @@ const logger = new DebugLogger('page-history');
type DocHistory = ListHistoryQuery['workspace']['histories'][number];
export const usePageSnapshotList = (workspaceId: string, pageDocId: string) => {
export const useDocSnapshotList = (workspaceId: string, pageDocId: string) => {
const pageSize = 10;
const { data, loadingMore, loadMore } = useQueryInfinite({
query: listHistoryQuery,
@@ -154,16 +154,16 @@ export const useSnapshotPage = (
}
const pageId = pageDocId + '-' + ts;
const historyShellWorkspace = getOrCreateShellWorkspace(workspace.id);
let page = historyShellWorkspace.getPage(pageId);
let page = historyShellWorkspace.getDoc(pageId);
if (!page && snapshot) {
page = historyShellWorkspace.createPage({
page = historyShellWorkspace.createDoc({
id: pageId,
});
page.awarenessStore.setReadonly(page, true);
const spaceDoc = page.spaceDoc;
page.load(() => {
applyUpdate(spaceDoc, new Uint8Array(snapshot));
historyShellWorkspace.schema.upgradePage(0, {}, spaceDoc);
historyShellWorkspace.schema.upgradeDoc(0, {}, spaceDoc);
}); // must load before applyUpdate
}
return page ?? undefined;
@@ -197,7 +197,7 @@ export const useRestorePage = (workspace: Workspace, pageId: string) => {
const { trigger: recover, isMutating } = useMutation({
mutation: recoverDocMutation,
});
const { getPageMeta, setPageTitle } = usePageMetaHelper(workspace);
const { getDocMeta, setDocTitle } = useDocMetaHelper(workspace);
const onRestore = useMemo(() => {
return async (version: string, update: Uint8Array) => {
@@ -211,10 +211,10 @@ export const useRestorePage = (workspace: Workspace, pageId: string) => {
});
// should also update the page title, since it may be changed in the history
const title = page.meta.title;
const title = page.meta?.title ?? '';
if (getPageMeta(pageId)?.title !== title) {
setPageTitle(pageId, title);
if (getDocMeta(pageId)?.title !== title) {
setDocTitle(pageId, title);
}
await recover({
@@ -232,12 +232,12 @@ export const useRestorePage = (workspace: Workspace, pageId: string) => {
logger.info('Page restored', pageDocId, version);
};
}, [
getPageMeta,
getDocMeta,
mutateQueryResource,
page,
pageId,
recover,
setPageTitle,
setDocTitle,
workspace.id,
]);
@@ -10,11 +10,11 @@ import { useWorkspaceQuota } from '@affine/core/hooks/use-workspace-quota';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloseIcon, ToggleCollapseIcon } from '@blocksuite/icons';
import type { Page as BlockSuitePage } from '@blocksuite/store';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
import { type Workspace as BlockSuiteWorkspace } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
import type { DialogContentProps } from '@radix-ui/react-dialog';
import { Page, type PageMode, Workspace } from '@toeverything/infra';
import { Doc, type PageMode, Workspace } from '@toeverything/infra';
import { useService } from '@toeverything/infra/di';
import { atom, useAtom, useSetAtom } from 'jotai';
import {
@@ -39,7 +39,7 @@ import {
import { AffineErrorBoundary } from '../affine-error-boundary';
import {
historyListGroupByDay,
usePageSnapshotList,
useDocSnapshotList,
useRestorePage,
useSnapshotPage,
} from './data';
@@ -90,7 +90,7 @@ const ModalContainer = ({
interface HistoryEditorPreviewProps {
ts?: string;
snapshotPage?: BlockSuitePage;
snapshotPage?: BlockSuiteDoc;
mode: PageMode;
onModeChange: (mode: PageMode) => void;
title: string;
@@ -251,7 +251,7 @@ const PageHistoryList = ({
activeVersion?: string;
onVersionChange: (version: string) => void;
}) => {
const [historyList, loadMore, loadingMore] = usePageSnapshotList(
const [historyList, loadMore, loadingMore] = useDocSnapshotList(
workspaceId,
pageDocId
);
@@ -425,7 +425,7 @@ const PageHistoryManager = ({
const [activeVersion, setActiveVersion] = useState<string>();
const pageDocId = useMemo(() => {
return workspace.getPage(pageId)?.spaceDoc.guid ?? pageId;
return workspace.getDoc(pageId)?.spaceDoc.guid ?? pageId;
}, [pageId, workspace]);
const snapshotPage = useSnapshotPage(workspace, pageDocId, activeVersion);
@@ -447,7 +447,7 @@ const PageHistoryManager = ({
[activeVersion, onClose, onRestore, snapshotPage]
);
const page = useService(Page);
const page = useService(Doc);
const [mode, setMode] = useState<PageMode>(page.mode.value);
const title = useBlockSuiteWorkspacePageTitle(workspace, pageId);
@@ -124,7 +124,7 @@ export class PagePropertiesMetaManager {
// returns page schema properties -> related page
getPropertyStatistics() {
const mapping = new Map<string, Set<string>>();
for (const page of this.adapter.workspace.blockSuiteWorkspace.pages.values()) {
for (const page of this.adapter.workspace.blockSuiteWorkspace.docs.values()) {
const properties = this.adapter.getPageProperties(page.id);
for (const id of Object.keys(properties.custom)) {
if (!mapping.has(id)) mapping.set(id, new Set());
@@ -169,7 +169,7 @@ export class PagePropertiesManager {
}
get page() {
return this.adapter.workspace.blockSuiteWorkspace.getPage(this.pageId);
return this.adapter.workspace.blockSuiteWorkspace.getDoc(this.pageId);
}
get intrinsicMeta() {
@@ -1,5 +1,5 @@
import { Checkbox, DatePicker, Menu } from '@affine/component';
import { useAllBlockSuitePageMeta } from '@affine/core/hooks/use-all-block-suite-page-meta';
import { useAllBlockSuiteDocMeta } from '@affine/core/hooks/use-all-block-suite-page-meta';
import { WorkspaceLegacyProperties } from '@affine/core/modules/workspace';
import type {
PageInfoCustomProperty,
@@ -9,7 +9,7 @@ import type {
import { timestampToLocalDate } from '@affine/core/utils';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { Page, useLiveData, useService, Workspace } from '@toeverything/infra';
import { Doc, useLiveData, useService, Workspace } from '@toeverything/infra';
import { noop } from 'lodash-es';
import {
type ChangeEventHandler,
@@ -176,9 +176,9 @@ export const NumberValue = ({ property }: PropertyRowValueProps) => {
export const TagsValue = () => {
const workspace = useService(Workspace);
const page = useService(Page);
const page = useService(Doc);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const pageMetas = useAllBlockSuitePageMeta(blockSuiteWorkspace);
const pageMetas = useAllBlockSuiteDocMeta(blockSuiteWorkspace);
const legacyProperties = useService(WorkspaceLegacyProperties);
const options = useLiveData(legacyProperties.tagOptions$);
@@ -199,7 +199,7 @@ export const TagsValue = () => {
placeholder={t['com.affine.page-properties.property-value-placeholder']()}
value={tagIds}
options={options}
readonly={page.blockSuitePage.readonly}
readonly={page.blockSuiteDoc.readonly}
onChange={onChange}
onOptionsChange={legacyProperties.updateTagOptions}
/>
@@ -27,7 +27,7 @@ import {
ToggleExpandIcon,
ViewIcon,
} from '@blocksuite/icons';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import {
DndContext,
type DragEndEvent,
@@ -1027,7 +1027,7 @@ const PagePropertiesTableInner = () => {
);
};
const usePagePropertiesManager = (page: Page) => {
const usePagePropertiesManager = (page: Doc) => {
// the workspace properties adapter adapter is reactive,
// which means it's reference will change when any of the properties change
// also it will trigger a re-render of the component
@@ -1040,7 +1040,7 @@ const usePagePropertiesManager = (page: Page) => {
// this is the main component that renders the page properties table at the top of the page below
// the page title
export const PagePropertiesTable = ({ page }: { page: Page }) => {
export const PagePropertiesTable = ({ page }: { page: Doc }) => {
const manager = usePagePropertiesManager(page);
// if the given page is not in the current workspace, then we don't render anything
@@ -1,4 +1,4 @@
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useJournalHelper } from '@affine/core/hooks/use-journal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { LinkedPageIcon, TodayIcon } from '@blocksuite/icons';
@@ -10,7 +10,7 @@ import * as styles from './styles.css';
export interface PageReferenceRendererOptions {
pageId: string;
pageMetaHelper: ReturnType<typeof usePageMetaHelper>;
pageMetaHelper: ReturnType<typeof useDocMetaHelper>;
journalHelper: ReturnType<typeof useJournalHelper>;
t: ReturnType<typeof useAFFiNEI18N>;
}
@@ -22,7 +22,7 @@ export function pageReferenceRenderer({
t,
}: PageReferenceRendererOptions) {
const { isPageJournal, getLocalizedJournalDateString } = journalHelper;
const referencedPage = pageMetaHelper.getPageMeta(pageId);
const referencedPage = pageMetaHelper.getDocMeta(pageId);
let title =
referencedPage?.title ?? t['com.affine.editor.reference-not-found']();
let icon = <LinkedPageIcon className={styles.pageReferenceIcon} />;
@@ -35,7 +35,9 @@ export function pageReferenceRenderer({
return (
<>
{icon}
<span className="affine-reference-title">{title}</span>
<span className="affine-reference-title">
{title ? title : 'Untitled'}
</span>
</>
);
}
@@ -49,7 +51,7 @@ export function AffinePageReference({
pageId: string;
wrapper?: React.ComponentType<PropsWithChildren>;
}) {
const pageMetaHelper = usePageMetaHelper(workspace);
const pageMetaHelper = useDocMetaHelper(workspace);
const journalHelper = useJournalHelper(workspace);
const t = useAFFiNEI18N();
const el = pageReferenceRenderer({
@@ -1,6 +1,6 @@
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { WorkspaceFlavour } from '@affine/env/workspace';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import { type Workspace, WorkspaceManager } from '@toeverything/infra';
import { useService } from '@toeverything/infra';
import { useState } from 'react';
@@ -11,7 +11,7 @@ import { ShareMenu } from './share-menu';
type SharePageModalProps = {
workspace: Workspace;
page: Page;
page: Doc;
isJournal?: boolean;
};
@@ -4,7 +4,7 @@ import { ExportMenuItems } from '@affine/core/components/page-list';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { LinkIcon } from '@blocksuite/icons';
import { Page, useLiveData } from '@toeverything/infra';
import { Doc, useLiveData } from '@toeverything/infra';
import { useService } from '@toeverything/infra/di';
import { useExportPage } from '../../../../hooks/affine/use-export-page';
@@ -17,7 +17,7 @@ export const ShareExport = ({
currentPage,
}: ShareMenuProps) => {
const t = useAFFiNEI18N();
const page = useService(Page);
const page = useService(Doc);
const workspaceId = workspace.id;
const pageId = currentPage.id;
const { sharingUrl, onClickCopyLink } = useSharingUrl({
@@ -4,7 +4,7 @@ import { Menu } from '@affine/component/ui/menu';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { WebIcon } from '@blocksuite/icons';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import type { WorkspaceMetadata } from '@toeverything/infra';
import clsx from 'clsx';
@@ -15,7 +15,7 @@ import { SharePage } from './share-page';
export interface ShareMenuProps {
workspaceMetadata: WorkspaceMetadata;
currentPage: Page;
currentPage: Doc;
isJournal?: boolean;
onEnableAffineCloud: () => void;
}
@@ -15,7 +15,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowRightSmallIcon } from '@blocksuite/icons';
import { useService } from '@toeverything/infra';
import { useLiveData } from '@toeverything/infra';
import { Page, type PageMode } from '@toeverything/infra';
import { Doc, type PageMode } from '@toeverything/infra';
import { useMemo, useState } from 'react';
import { useCallback } from 'react';
@@ -56,7 +56,7 @@ export const AffineSharePage = (props: ShareMenuProps) => {
currentPage,
} = props;
const pageId = currentPage.id;
const page = useService(Page);
const page = useService(Doc);
const [showDisable, setShowDisable] = useState(false);
const {
isSharedPage,
@@ -1,10 +1,10 @@
import type { BlockElement } from '@blocksuite/lit';
import type {
AffineEditorContainer,
DocEditor,
EdgelessEditor,
PageEditor,
} from '@blocksuite/presets';
import { type Page, Slot } from '@blocksuite/store';
import { type Doc, Slot } from '@blocksuite/store';
import type { PageMode } from '@toeverything/infra';
import clsx from 'clsx';
import type React from 'react';
@@ -37,7 +37,7 @@ function forwardSlot<T extends Record<string, Slot<any>>>(
}
interface BlocksuiteEditorContainerProps {
page: Page;
page: Doc;
mode: PageMode;
className?: string;
style?: React.CSSProperties;
@@ -48,7 +48,7 @@ interface BlocksuiteEditorContainerProps {
// mimic the interface of the webcomponent and expose slots & host
type BlocksuiteEditorContainerRef = Pick<
(typeof AffineEditorContainer)['prototype'],
'mode' | 'page' | 'slots' | 'host'
'mode' | 'doc' | 'slots' | 'host'
> &
HTMLDivElement;
@@ -100,14 +100,14 @@ export const BlocksuiteEditorContainer = forwardRef<
ref
) {
const rootRef = useRef<HTMLDivElement>(null);
const docRef = useRef<DocEditor>(null);
const docRef = useRef<PageEditor>(null);
const edgelessRef = useRef<EdgelessEditor>(null);
const slots: BlocksuiteEditorContainerRef['slots'] = useMemo(() => {
return {
pageLinkClicked: new Slot(),
pageModeSwitched: new Slot(),
pageUpdated: new Slot(),
docLinkClicked: new Slot(),
editorModeSwitched: new Slot(),
docUpdated: new Slot(),
tagClicked: new Slot(),
};
}, []);
@@ -115,11 +115,10 @@ export const BlocksuiteEditorContainer = forwardRef<
// forward the slot to the webcomponent
useLayoutEffect(() => {
requestAnimationFrame(() => {
const docPage = rootRef.current?.querySelector('affine-doc-page');
const docPage = rootRef.current?.querySelector('affine-page-root');
const edgelessPage = rootRef.current?.querySelector(
'affine-edgeless-page'
'affine-edgeless-root'
);
('affine-edgeless-page');
if (docPage) {
forwardSlot(docPage.slots, slots);
}
@@ -131,12 +130,12 @@ export const BlocksuiteEditorContainer = forwardRef<
}, [page, slots]);
useLayoutEffect(() => {
slots.pageUpdated.emit({ newPageId: page.id });
}, [page, slots.pageUpdated]);
slots.docUpdated.emit({ newDocId: page.id });
}, [page, slots.docUpdated]);
useLayoutEffect(() => {
slots.pageModeSwitched.emit(mode);
}, [mode, slots.pageModeSwitched]);
slots.editorModeSwitched.emit(mode);
}, [mode, slots.editorModeSwitched]);
/**
* mimic an AffineEditorContainer using proxy
@@ -1,10 +1,10 @@
import { EditorLoading } from '@affine/component/page-detail-skeleton';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useJournalHelper } from '@affine/core/hooks/use-journal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import type { AffineEditorContainer } from '@blocksuite/presets';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import { use } from 'foxact/use';
import type { CSSProperties, ReactElement } from 'react';
import {
@@ -30,7 +30,7 @@ export type ErrorBoundaryProps = {
};
export type EditorProps = {
page: Page;
page: Doc;
mode: 'page' | 'edgeless';
defaultSelectedBlockId?: string;
// on Editor instance instantiated
@@ -39,7 +39,7 @@ export type EditorProps = {
className?: string;
};
function usePageRoot(page: Page) {
function usePageRoot(page: Doc) {
if (!page.ready) {
page.load();
}
@@ -81,7 +81,7 @@ const customRenderersFactory: (
* TODO: Define error to unexpected state together in the future.
*/
export class NoPageRootError extends Error {
constructor(public page: Page) {
constructor(public page: Doc) {
super('Page root not found when render editor!');
// Log info to let sentry collect more message
@@ -138,7 +138,7 @@ const BlockSuiteEditorImpl = forwardRef<AffineEditorContainer, EditorProps>(
};
}, []);
const pageMetaHelper = usePageMetaHelper(page.workspace);
const pageMetaHelper = useDocMetaHelper(page.workspace);
const journalHelper = useJournalHelper(page.workspace);
const t = useAFFiNEI18N();
@@ -1,10 +1,10 @@
import { useJournalInfoHelper } from '@affine/core/hooks/use-journal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import * as styles from './styles.css';
export const BlocksuiteEditorJournalDocTitle = ({ page }: { page: Page }) => {
export const BlocksuiteEditorJournalDocTitle = ({ page }: { page: Doc }) => {
const { localizedJournalDate, isTodayJournal, journalDate } =
useJournalInfoHelper(page.workspace, page.id);
const t = useAFFiNEI18N();
@@ -1,14 +1,13 @@
import { createReactComponentFromLit } from '@affine/component';
import { useJournalInfoHelper } from '@affine/core/hooks/use-journal';
import type { DocPageService } from '@blocksuite/blocks';
import {
BiDirectionalLinkPanel,
DocEditor,
DocMetaTags,
DocTitle,
EdgelessEditor,
PageMetaTags,
PageEditor,
} from '@blocksuite/presets';
import { type Page } from '@blocksuite/store';
import { type Doc } from '@blocksuite/store';
import clsx from 'clsx';
import React, {
forwardRef,
@@ -32,7 +31,7 @@ import * as styles from './styles.css';
const adapted = {
DocEditor: createReactComponentFromLit({
react: React,
elementClass: DocEditor,
elementClass: PageEditor,
}),
DocTitle: createReactComponentFromLit({
react: React,
@@ -40,7 +39,7 @@ const adapted = {
}),
PageMetaTags: createReactComponentFromLit({
react: React,
elementClass: PageMetaTags,
elementClass: DocMetaTags,
}),
EdgelessEditor: createReactComponentFromLit({
react: React,
@@ -53,23 +52,23 @@ const adapted = {
};
interface BlocksuiteDocEditorProps {
page: Page;
page: Doc;
customRenderers?: InlineRenderers;
// todo: add option to replace docTitle with custom component (e.g., for journal page)
}
export const BlocksuiteDocEditor = forwardRef<
DocEditor,
PageEditor,
BlocksuiteDocEditorProps
>(function BlocksuiteDocEditor({ page, customRenderers }, ref) {
const titleRef = useRef<DocTitle>(null);
const docRef = useRef<DocEditor | null>(null);
const docRef = useRef<PageEditor | null>(null);
const [docPage, setDocPage] =
useState<HTMLElementTagNameMap['affine-doc-page']>();
useState<HTMLElementTagNameMap['affine-page-root']>();
const { isJournal } = useJournalInfoHelper(page.workspace, page.id);
const onDocRef = useCallback(
(el: DocEditor) => {
(el: PageEditor) => {
docRef.current = el;
if (ref) {
if (typeof ref === 'function') {
@@ -89,7 +88,7 @@ export const BlocksuiteDocEditor = forwardRef<
useEffect(() => {
// auto focus the title
setTimeout(() => {
const docPage = docRef.current?.querySelector('affine-doc-page');
const docPage = docRef.current?.querySelector('affine-page-root');
if (docPage) {
setDocPage(docPage);
}
@@ -105,11 +104,11 @@ export const BlocksuiteDocEditor = forwardRef<
return (
<div className={styles.docEditorRoot}>
<div
className={clsx('affine-doc-viewport', styles.affineDocViewport)}
className={clsx('affine-page-viewport', styles.affineDocViewport)}
data-doc-viewport={true}
>
{!isJournal ? (
<adapted.DocTitle page={page} ref={titleRef} />
<adapted.DocTitle doc={page} ref={titleRef} />
) : (
<BlocksuiteEditorJournalDocTitle page={page} />
)}
@@ -117,7 +116,7 @@ export const BlocksuiteDocEditor = forwardRef<
<adapted.DocEditor
className={styles.docContainer}
ref={onDocRef}
page={page}
doc={page}
specs={specs}
hasViewport={false}
/>
@@ -125,14 +124,12 @@ export const BlocksuiteDocEditor = forwardRef<
<div
className={styles.docEditorGap}
onClick={() => {
(
docPage.std.spec.getService('affine:page') as DocPageService
).appendParagraph();
docPage.std.spec.getService('affine:page').appendParagraph();
}}
></div>
) : null}
{docPage ? (
<adapted.BiDirectionalLinkPanel page={page} docPageBlock={docPage} />
<adapted.BiDirectionalLinkPanel doc={page} pageRoot={docPage} />
) : null}
</div>
</div>
@@ -146,5 +143,5 @@ export const BlocksuiteEdgelessEditor = forwardRef<
const specs = useMemo(() => {
return patchSpecs(edgelessModeSpecs, customRenderers);
}, [customRenderers]);
return <adapted.EdgelessEditor ref={ref} page={page} specs={specs} />;
return <adapted.EdgelessEditor ref={ref} doc={page} specs={specs} />;
});
@@ -1,12 +1,12 @@
import type { BlockSpec } from '@blocksuite/block-std';
import type { PageService, ParagraphService } from '@blocksuite/blocks';
import type { ParagraphService, RootService } from '@blocksuite/blocks';
import {
AttachmentService,
CanvasTextFonts,
DocEditorBlockSpecs,
DocPageService,
EdgelessEditorBlockSpecs,
EdgelessPageService,
EdgelessRootService,
PageEditorBlockSpecs,
PageRootService,
} from '@blocksuite/blocks';
import bytes from 'bytes';
import { html, unsafeStatic } from 'lit/static-html.js';
@@ -20,7 +20,7 @@ class CustomAttachmentService extends AttachmentService {
}
}
function customLoadFonts(service: PageService): void {
function customLoadFonts(service: RootService): void {
const officialDomains = new Set(['app.affine.pro', 'affine.fail']);
if (!officialDomains.has(window.location.host)) {
const fonts = CanvasTextFonts.map(font => ({
@@ -34,12 +34,12 @@ function customLoadFonts(service: PageService): void {
}
}
class CustomDocPageService extends DocPageService {
class CustomDocPageService extends PageRootService {
override loadFonts(): void {
customLoadFonts(this);
}
}
class CustomEdgelessPageService extends EdgelessPageService {
class CustomEdgelessPageService extends EdgelessRootService {
override loadFonts(): void {
customLoadFonts(this);
}
@@ -97,7 +97,7 @@ export function patchSpecs(
return newSpecs;
}
export const docModeSpecs = DocEditorBlockSpecs.map(spec => {
export const docModeSpecs = PageEditorBlockSpecs.map(spec => {
if (spec.schema.model.flavour === 'affine:attachment') {
return {
...spec,
@@ -5,7 +5,7 @@ export const docEditorRoot = style({
background: cssVar('backgroundPrimaryColor'),
});
// brings styles of .affine-doc-viewport from blocksuite
// brings styles of .affine-page-viewport from blocksuite
export const affineDocViewport = style({
display: 'flex',
flexDirection: 'column',
@@ -1,6 +1,6 @@
import { FavoriteTag } from '@affine/core/components/page-list';
import { useBlockSuiteMetaHelper } from '@affine/core/hooks/affine/use-block-suite-meta-helper';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { toast } from '@affine/core/utils';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
@@ -16,10 +16,10 @@ export const useFavorite = (pageId: string) => {
const t = useAFFiNEI18N();
const workspace = useService(Workspace);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const currentPage = blockSuiteWorkspace.getPage(pageId);
const currentPage = blockSuiteWorkspace.getDoc(pageId);
assertExists(currentPage);
const pageMeta = useBlockSuitePageMeta(blockSuiteWorkspace).find(
const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find(
meta => meta.id === pageId
);
const favorite = pageMeta?.favorite ?? false;
@@ -4,13 +4,13 @@ import {
useJournalRouteHelper,
} from '@affine/core/hooks/use-journal';
import type { BlockSuiteWorkspace } from '@affine/core/shared';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import dayjs from 'dayjs';
import { useEffect, useRef, useState } from 'react';
export interface JournalWeekDatePickerProps {
workspace: BlockSuiteWorkspace;
page: Page;
page: Doc;
}
const weekStyle = { maxWidth: 800, width: '100%' };
@@ -11,7 +11,7 @@ import { Export, MoveToTrash } from '@affine/core/components/page-list';
import { useBlockSuiteMetaHelper } from '@affine/core/hooks/affine/use-block-suite-meta-helper';
import { useExportPage } from '@affine/core/hooks/affine/use-export-page';
import { useTrashModalHelper } from '@affine/core/hooks/affine/use-trash-modal-helper';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
@@ -25,7 +25,7 @@ import {
ImportIcon,
PageIcon,
} from '@blocksuite/icons';
import { Page, useLiveData, useService, Workspace } from '@toeverything/infra';
import { Doc, useLiveData, useService, Workspace } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useState } from 'react';
@@ -48,13 +48,13 @@ export const PageHeaderMenuButton = ({
const workspace = useService(Workspace);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const currentPage = blockSuiteWorkspace.getPage(pageId);
const currentPage = blockSuiteWorkspace.getDoc(pageId);
assertExists(currentPage);
const pageMeta = useBlockSuitePageMeta(blockSuiteWorkspace).find(
const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find(
meta => meta.id === pageId
);
const page = useService(Page);
const page = useService(Doc);
const currentMode = useLiveData(page.mode);
const { favorite, toggleFavorite } = useFavorite(pageId);
@@ -1,7 +1,7 @@
import { InlineEdit, type InlineEditProps } from '@affine/component';
import {
useBlockSuitePageMeta,
usePageMetaHelper,
useBlockSuiteDocMeta,
useDocMetaHelper,
} from '@affine/core/hooks/use-block-suite-page-meta';
import type { BlockSuiteWorkspace } from '@affine/core/shared';
import type { HTMLAttributes } from 'react';
@@ -27,18 +27,18 @@ export const BlocksuiteHeaderTitle = (props: BlockSuiteHeaderTitleProps) => {
isPublic,
inputHandleRef,
} = props;
const currentPage = workspace.getPage(pageId);
const pageMeta = useBlockSuitePageMeta(workspace).find(
const currentPage = workspace.getDoc(pageId);
const pageMeta = useBlockSuiteDocMeta(workspace).find(
meta => meta.id === currentPage?.id
);
const title = pageMeta?.title;
const { setPageTitle } = usePageMetaHelper(workspace);
const { setDocTitle } = useDocMetaHelper(workspace);
const onChange = useCallback(
(v: string) => {
setPageTitle(currentPage?.id || '', v);
setDocTitle(currentPage?.id || '', v);
},
[currentPage?.id, setPageTitle]
[currentPage?.id, setDocTitle]
);
return (
@@ -1,8 +1,8 @@
import { Tooltip } from '@affine/component/ui/tooltip';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import {
Page,
Doc,
type PageMode,
useLiveData,
useService,
@@ -42,11 +42,11 @@ export const EditorModeSwitch = ({
publicMode,
}: EditorModeSwitchProps) => {
const t = useAFFiNEI18N();
const pageMeta = useBlockSuitePageMeta(blockSuiteWorkspace).find(
const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find(
meta => meta.id === pageId
);
const trash = pageMeta?.trash ?? false;
const page = useService(Page);
const page = useService(Doc);
const currentMode = useLiveData(page.mode);
@@ -1,6 +1,6 @@
import { toast } from '@affine/component';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { WorkspaceSubPath } from '@affine/core/shared';
import { useService } from '@toeverything/infra';
@@ -13,8 +13,8 @@ import type { BlockSuiteWorkspace } from '../../../shared';
export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
const { openPage, jumpToSubPath } = useNavigateHelper();
const { createPage } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace);
const { setPageMeta } = usePageMetaHelper(blockSuiteWorkspace);
const { createDoc } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace);
const { setDocMeta } = useDocMetaHelper(blockSuiteWorkspace);
const pageRecordList = useService(PageRecordList);
const isPreferredEdgeless = useCallback(
@@ -25,13 +25,13 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
const createPageAndOpen = useCallback(
(mode?: 'page' | 'edgeless') => {
const page = createPage();
const page = createDoc();
initEmptyPage(page);
pageRecordList.record(page.id).value?.setMode(mode || 'page');
openPage(blockSuiteWorkspace.id, page.id);
return page;
},
[blockSuiteWorkspace.id, createPage, openPage, pageRecordList]
[blockSuiteWorkspace.id, createDoc, openPage, pageRecordList]
);
const createEdgelessAndOpen = useCallback(() => {
@@ -64,7 +64,7 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
async (pageId: string) => {
const page = createPageAndOpen();
page.load();
const parentPage = blockSuiteWorkspace.getPage(pageId);
const parentPage = blockSuiteWorkspace.getDoc(pageId);
if (parentPage) {
parentPage.load();
const text = parentPage.Text.fromDelta([
@@ -80,10 +80,10 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
]);
const [frame] = parentPage.getBlockByFlavour('affine:note');
frame && parentPage.addBlock('affine:paragraph', { text }, frame.id);
setPageMeta(page.id, {});
setDocMeta(page.id, {});
}
},
[blockSuiteWorkspace, createPageAndOpen, setPageMeta]
[blockSuiteWorkspace, createPageAndOpen, setDocMeta]
);
return useMemo(() => {
@@ -1,7 +1,7 @@
import { Button } from '@affine/component/ui/button';
import { useActiveBlocksuiteEditor } from '@affine/core/hooks/use-block-suite-editor';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { EdgelessPageService } from '@blocksuite/blocks';
import type { EdgelessRootService } from '@blocksuite/blocks';
import { PresentationIcon } from '@blocksuite/icons';
import { useCallback, useEffect, useState } from 'react';
@@ -18,18 +18,18 @@ export const PresentButton = () => {
// TODO: use surfaceService subAtom
const enterPresentationMode = () => {
const edgelessPageService = editorHost.spec.getService(
const edgelessRootService = editorHost.spec.getService(
'affine:page'
) as EdgelessPageService;
) as EdgelessRootService;
if (
!edgelessPageService ||
edgelessPageService.tool.edgelessTool.type === 'frameNavigator'
!edgelessRootService ||
edgelessRootService.tool.edgelessTool.type === 'frameNavigator'
) {
return;
}
edgelessPageService.tool.setEdgelessTool({ type: 'frameNavigator' });
edgelessRootService.tool.setEdgelessTool({ type: 'frameNavigator' });
};
enterPresentationMode();
@@ -42,7 +42,7 @@ export const PresentButton = () => {
const editorHost = editor?.host;
if (!editorHost) return;
const edgelessPage = editorHost?.querySelector('affine-edgeless-page');
const edgelessPage = editorHost?.querySelector('affine-edgeless-root');
if (!edgelessPage) return;
edgelessPage.slots.edgelessToolUpdated.on(() => {
@@ -96,7 +96,7 @@ const ImagePreviewModalImpl = (
if (!hasPlayedAnimation) {
setHasPlayedAnimation(true);
}
const page = workspace.getPage(props.pageId);
const page = workspace.getDoc(props.pageId);
assertExists(page);
const block = page.getBlockById(blockId);
assertExists(block);
@@ -116,7 +116,7 @@ const ImagePreviewModalImpl = (
(blockId: string | null) => {
assertExists(blockId);
const workspace = props.workspace;
const page = workspace.getPage(props.pageId);
const page = workspace.getDoc(props.pageId);
assertExists(page);
const block = page.getBlockById(blockId);
assertExists(block);
@@ -137,7 +137,7 @@ const ImagePreviewModalImpl = (
(blockId: string) => {
const { pageId, workspace, onClose } = props;
const page = workspace.getPage(pageId);
const page = workspace.getDoc(pageId);
assertExists(page);
const block = page.getBlockById(blockId);
assertExists(block);
@@ -186,7 +186,7 @@ const ImagePreviewModalImpl = (
const downloadHandler = useCallback(
async (blockId: string | null) => {
const workspace = props.workspace;
const page = workspace.getPage(props.pageId);
const page = workspace.getDoc(props.pageId);
assertExists(page);
if (typeof blockId === 'string') {
const block = page.getBlockById(blockId) as ImageBlockModel;
@@ -240,14 +240,14 @@ const ImagePreviewModalImpl = (
[props.pageId, props.workspace]
);
const [caption, setCaption] = useState(() => {
const page = props.workspace.getPage(props.pageId);
const page = props.workspace.getDoc(props.pageId);
assertExists(page);
const block = page.getBlockById(props.blockId) as ImageBlockModel;
assertExists(block);
return block?.caption;
});
useEffect(() => {
const page = props.workspace.getPage(props.pageId);
const page = props.workspace.getDoc(props.pageId);
assertExists(page);
const block = page.getBlockById(props.blockId) as ImageBlockModel;
assertExists(block);
@@ -257,7 +257,7 @@ const ImagePreviewModalImpl = (
['workspace', 'image', props.pageId, props.blockId],
{
fetcher: ([_, __, pageId, blockId]) => {
const page = props.workspace.getPage(pageId);
const page = props.workspace.getDoc(pageId);
assertExists(page);
const block = page.getBlockById(blockId) as ImageBlockModel;
assertExists(block);
@@ -510,7 +510,7 @@ export const ImagePreviewModal = (
const workspace = props.workspace;
const page = workspace.getPage(props.pageId);
const page = workspace.getDoc(props.pageId);
assertExists(page);
const block = page.getBlockById(blockId);
assertExists(block);
@@ -11,7 +11,7 @@ export const editor = style({
},
});
globalStyle(
`${editor} .affine-doc-viewport:not(.affine-embed-synced-doc-editor)`,
`${editor} .affine-page-viewport:not(.affine-embed-synced-doc-editor)`,
{
paddingBottom: '150px',
}
@@ -5,9 +5,9 @@ import { useBlockSuiteWorkspacePage } from '@affine/core/hooks/use-block-suite-w
import { assertExists, DisposableGroup } from '@blocksuite/global/utils';
import type { AffineEditorContainer } from '@blocksuite/presets';
import type { Workspace } from '@blocksuite/store';
import type { Page as BlockSuitePage } from '@blocksuite/store';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
import {
Page,
Doc,
type PageMode,
useLiveData,
useService,
@@ -28,7 +28,7 @@ declare global {
}
export type OnLoadEditor = (
page: BlockSuitePage,
page: BlockSuiteDoc,
editor: AffineEditorContainer
) => () => void;
@@ -49,8 +49,8 @@ const PageDetailEditorMain = memo(function PageDetailEditorMain({
onLoad,
isPublic,
publishMode,
}: PageDetailEditorProps & { page: BlockSuitePage }) {
const currentMode = useLiveData(useService(Page).mode);
}: PageDetailEditorProps & { page: BlockSuiteDoc }) {
const currentMode = useLiveData(useService(Doc).mode);
const mode = useMemo(() => {
const shareMode = publishMode || currentMode;
@@ -81,7 +81,7 @@ const PageDetailEditorMain = memo(function PageDetailEditorMain({
const disposableGroup = new DisposableGroup();
disposableGroup.add(
page.slots.blockUpdated.once(() => {
page.workspace.setPageMeta(page.id, {
page.workspace.setDocMeta(page.id, {
updatedDate: Date.now(),
});
})
@@ -5,7 +5,7 @@ import 'fake-indexeddb/auto';
import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import { assertExists } from '@blocksuite/global/utils';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import { Schema, Workspace as BlockSuiteWorkspace } from '@blocksuite/store';
import { renderHook } from '@testing-library/react';
import { useAtomValue } from 'jotai';
@@ -21,8 +21,8 @@ schema.register(AffineSchemas).register(__unstableSchemas);
beforeEach(async () => {
vi.useFakeTimers({ toFake: ['requestIdleCallback'] });
blockSuiteWorkspace = new BlockSuiteWorkspace({ id: 'test', schema });
const initPage = async (page: Page) => {
page.waitForLoaded();
const initPage = async (page: Doc) => {
page.load();
expect(page).not.toBeNull();
assertExists(page);
const pageBlockId = page.addBlock('affine:page', {
@@ -31,12 +31,12 @@ beforeEach(async () => {
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
};
await initPage(blockSuiteWorkspace.createPage({ id: 'page0' }));
await initPage(blockSuiteWorkspace.createDoc({ id: 'page0' }));
});
describe('useBlockSuitePagePreview', () => {
test('basic', async () => {
const page = blockSuiteWorkspace.getPage('page0') as Page;
const page = blockSuiteWorkspace.getDoc('page0') as Doc;
const id = page.addBlock(
'affine:paragraph',
{
@@ -1,11 +1,11 @@
import { toast } from '@affine/component';
import { useBlockSuiteMetaHelper } from '@affine/core/hooks/affine/use-block-suite-meta-helper';
import { useTrashModalHelper } from '@affine/core/hooks/affine/use-trash-modal-helper';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import type { Collection, Filter } from '@affine/env/filter';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { PageMeta, Tag } from '@blocksuite/store';
import type { DocMeta, Tag } from '@blocksuite/store';
import { useService } from '@toeverything/infra';
import { Workspace } from '@toeverything/infra';
import { useCallback, useMemo, useRef, useState } from 'react';
@@ -37,7 +37,7 @@ const usePageOperationsRenderer = () => {
const t = useAFFiNEI18N();
const pageOperationsRenderer = useCallback(
(page: PageMeta) => {
(page: DocMeta) => {
const onDisablePublicSharing = () => {
toast('Successfully disabled', {
portal: document.body,
@@ -90,14 +90,14 @@ export const VirtualizedPageList = ({
collection?: Collection;
filters?: Filter[];
config?: AllPageListConfig;
listItem?: PageMeta[];
listItem?: DocMeta[];
setHideHeaderCreateNewPage?: (hide: boolean) => void;
}) => {
const listRef = useRef<ItemListHandle>(null);
const [showFloatingToolbar, setShowFloatingToolbar] = useState(false);
const [selectedPageIds, setSelectedPageIds] = useState<string[]>([]);
const currentWorkspace = useService(Workspace);
const pageMetas = useBlockSuitePageMeta(currentWorkspace.blockSuiteWorkspace);
const pageMetas = useBlockSuiteDocMeta(currentWorkspace.blockSuiteWorkspace);
const pageOperations = usePageOperationsRenderer();
const { isPreferredEdgeless } = usePageHelper(
currentWorkspace.blockSuiteWorkspace
@@ -125,7 +125,7 @@ export const VirtualizedPageList = ({
const pageOperationRenderer = useCallback(
(item: ListItem) => {
const page = item as PageMeta;
const page = item as DocMeta;
return pageOperations(page);
},
[pageOperations]
@@ -10,7 +10,7 @@ import {
ToggleCollapseIcon,
ViewLayersIcon,
} from '@blocksuite/icons';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
import clsx from 'clsx';
import { selectAtom } from 'jotai/utils';
@@ -223,7 +223,7 @@ const listsPropsAtom = selectAtom(
export const PageListItemRenderer = (item: ListItem) => {
const props = useAtomValue(listsPropsAtom);
const { selectionActive } = useAtomValue(selectionStateAtom);
const page = item as PageMeta;
const page = item as DocMeta;
return (
<PageListItem
{...pageMetaToListItemProp(page, {
@@ -294,8 +294,8 @@ const UnifiedPageIcon = ({
};
function pageMetaToListItemProp(
item: PageMeta,
props: RequiredProps<PageMeta>
item: DocMeta,
props: RequiredProps<DocMeta>
): PageListItemProps {
const toggleSelection = props.onSelectedIdsChange
? () => {
@@ -1,9 +1,9 @@
import type { Collection, Tag } from '@affine/env/filter';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import type { PropsWithChildren, ReactNode } from 'react';
import type { To } from 'react-router-dom';
export type ListItem = PageMeta | CollectionMeta | TagMeta;
export type ListItem = DocMeta | CollectionMeta | TagMeta;
export interface CollectionMeta extends Collection {
title: string;
@@ -1,13 +1,13 @@
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import type { Atom } from 'jotai';
import { atom } from 'jotai';
const MAX_PREVIEW_LENGTH = 150;
const MAX_SEARCH_BLOCK_COUNT = 30;
const weakMap = new WeakMap<Page, Atom<string>>();
const weakMap = new WeakMap<Doc, Atom<string>>();
export const getPagePreviewText = (page: Page) => {
export const getPagePreviewText = (page: Doc) => {
const pageRoot = page.root;
if (!pageRoot) {
return '';
@@ -56,7 +56,7 @@ export const getPagePreviewText = (page: Page) => {
const emptyAtom = atom<string>('');
export function useBlockSuitePagePreview(page: Page | null): Atom<string> {
export function useBlockSuitePagePreview(page: Doc | null): Atom<string> {
if (page === null) {
return emptyAtom;
} else if (weakMap.has(page)) {
@@ -1,26 +1,26 @@
import { DisposableGroup } from '@blocksuite/global/utils';
import type { Page, Workspace } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { useEffect, useState } from 'react';
export function useBlockSuiteWorkspacePage(
blockSuiteWorkspace: Workspace,
pageId: string | null
): Page | null {
): Doc | null {
const [page, setPage] = useState(
pageId ? blockSuiteWorkspace.getPage(pageId) : null
pageId ? blockSuiteWorkspace.getDoc(pageId) : null
);
useEffect(() => {
const group = new DisposableGroup();
group.add(
blockSuiteWorkspace.slots.pageAdded.on(id => {
blockSuiteWorkspace.slots.docAdded.on(id => {
if (pageId === id) {
setPage(blockSuiteWorkspace.getPage(id));
setPage(blockSuiteWorkspace.getDoc(id));
}
})
);
group.add(
blockSuiteWorkspace.slots.pageRemoved.on(id => {
blockSuiteWorkspace.slots.docRemoved.on(id => {
if (pageId === id) {
setPage(null);
}
@@ -39,7 +39,7 @@ export function useBlockSuiteWorkspacePage(
useEffect(() => {
if (page?.id !== pageId) {
setPage(pageId ? blockSuiteWorkspace.getPage(pageId) : null);
setPage(pageId ? blockSuiteWorkspace.getDoc(pageId) : null);
}
}, [blockSuiteWorkspace, page?.id, pageId]);
@@ -1,5 +1,5 @@
import type { Collection, Filter, VariableMap } from '@affine/env/filter';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import { evalFilterList } from './filter';
@@ -20,7 +20,7 @@ export const filterByFilterList = (filterList: Filter[], varMap: VariableMap) =>
evalFilterList(filterList, varMap);
export type PageDataForFilter = {
meta: PageMeta;
meta: DocMeta;
publicMode: undefined | 'page' | 'edgeless';
};
@@ -1,5 +1,5 @@
import type { Collection, Filter } from '@affine/env/filter';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import type { Workspace } from '@toeverything/infra';
import { useMemo } from 'react';
@@ -8,7 +8,7 @@ import { filterPage, filterPageByRules } from './use-collection-manager';
export const useFilteredPageMetas = (
workspace: Workspace,
pageMetas: PageMeta[],
pageMetas: DocMeta[],
options: {
trash?: boolean;
filters?: Filter[];
@@ -1,14 +1,11 @@
import type { PageMeta, Tag, Workspace } from '@blocksuite/store';
import type { DocMeta, Tag, Workspace } from '@blocksuite/store';
import { useCallback, useMemo } from 'react';
interface TagUsageCounts {
[key: string]: number;
}
export function useTagMetas(
currentWorkspace: Workspace,
pageMetas: PageMeta[]
) {
export function useTagMetas(currentWorkspace: Workspace, pageMetas: DocMeta[]) {
const tags = useMemo(() => {
return currentWorkspace.meta.properties.tags?.options || [];
}, [currentWorkspace]);
@@ -6,7 +6,7 @@ import {
} from '@affine/component';
import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import type { DialogContentProps } from '@radix-ui/react-dialog';
import { type ReactNode, useCallback, useMemo, useState } from 'react';
@@ -198,13 +198,13 @@ export const EditCollection = ({
};
export type AllPageListConfig = {
allPages: PageMeta[];
allPages: DocMeta[];
workspace: Workspace;
isEdgeless: (id: string) => boolean;
/**
* Return `undefined` if the page is not public
*/
getPublicMode: (id: string) => undefined | 'page' | 'edgeless';
getPage: (id: string) => PageMeta | undefined;
favoriteRender: (page: PageMeta) => ReactNode;
getPage: (id: string) => DocMeta | undefined;
favoriteRender: (page: DocMeta) => ReactNode;
};
@@ -2,7 +2,7 @@ import { Menu } from '@affine/component';
import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FilterIcon } from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import clsx from 'clsx';
import { type ReactNode, useCallback } from 'react';
@@ -56,7 +56,7 @@ export const PagesMode = ({
}, [collection, updateCollection]);
const pageOperationsRenderer = useCallback(
(item: ListItem) => {
const page = item as PageMeta;
const page = item as DocMeta;
return allPageListConfig.favoriteRender(page);
},
[allPageListConfig]
@@ -8,7 +8,7 @@ import {
PlusIcon,
ToggleCollapseIcon,
} from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import clsx from 'clsx';
import { type ReactNode, useCallback, useEffect, useState } from 'react';
@@ -38,8 +38,8 @@ export const RulesMode = ({
}) => {
const t = useAFFiNEI18N();
const [showPreview, setShowPreview] = useState(true);
const allowListPages: PageMeta[] = [];
const rulesPages: PageMeta[] = [];
const allowListPages: DocMeta[] = [];
const rulesPages: DocMeta[] = [];
const [showTips, setShowTips] = useState(false);
useEffect(() => {
setShowTips(!localStorage.getItem('hide-rules-mode-include-page-tips'));
@@ -85,7 +85,7 @@ export const RulesMode = ({
);
const operationsRenderer = useCallback(
(item: ListItem) => {
const page = item as PageMeta;
const page = item as DocMeta;
return allPageListConfig.favoriteRender(page);
},
[allPageListConfig]
@@ -2,7 +2,7 @@ import { Button, Menu } from '@affine/component';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FilterIcon } from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import clsx from 'clsx';
import { useCallback, useState } from 'react';
@@ -53,7 +53,7 @@ export const SelectPage = ({
const operationsRenderer = useCallback(
(item: ListItem) => {
const page = item as PageMeta;
const page = item as DocMeta;
return allPageListConfig.favoriteRender(page);
},
[allPageListConfig]
@@ -1,7 +1,7 @@
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import { useState } from 'react';
export const useSearch = (list: PageMeta[]) => {
export const useSearch = (list: DocMeta[]) => {
const [value, onChange] = useState('');
return {
searchText: value,
@@ -1,6 +1,6 @@
import {
useBlockSuitePageMeta,
usePageMetaHelper,
useBlockSuiteDocMeta,
useDocMetaHelper,
} from '@affine/core/hooks/use-block-suite-page-meta';
import { useGetBlockSuiteWorkspacePageTitle } from '@affine/core/hooks/use-block-suite-workspace-page-title';
import { useJournalHelper } from '@affine/core/hooks/use-journal';
@@ -14,9 +14,9 @@ import {
TodayIcon,
ViewLayersIcon,
} from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import {
Page,
Doc,
PageRecordList,
useLiveData,
Workspace,
@@ -79,7 +79,7 @@ function getAllCommand(context: CommandContext) {
const useWorkspacePages = () => {
const workspace = useService(Workspace);
const pages = useBlockSuitePageMeta(workspace.blockSuiteWorkspace);
const pages = useBlockSuiteDocMeta(workspace.blockSuiteWorkspace);
return pages;
};
@@ -92,13 +92,13 @@ const useRecentPages = () => {
const page = pages.find(page => page.id === pageId);
return page;
})
.filter((p): p is PageMeta => !!p);
.filter((p): p is DocMeta => !!p);
}, [recentPageIds, pages]);
};
export const pageToCommand = (
category: CommandCategory,
page: PageMeta,
page: DocMeta,
navigationHelper: ReturnType<typeof useNavigateHelper>,
getPageTitle: ReturnType<typeof useGetBlockSuiteWorkspacePageTitle>,
isPageJournal: (pageId: string) => boolean,
@@ -152,7 +152,7 @@ export const usePageCommands = () => {
const pages = useWorkspacePages();
const workspace = useService(Workspace);
const pageHelper = usePageHelper(workspace.blockSuiteWorkspace);
const pageMetaHelper = usePageMetaHelper(workspace.blockSuiteWorkspace);
const pageMetaHelper = useDocMetaHelper(workspace.blockSuiteWorkspace);
const query = useAtomValue(cmdkQueryAtom);
const navigationHelper = useNavigateHelper();
const journalHelper = useJournalHelper(workspace.blockSuiteWorkspace);
@@ -260,7 +260,7 @@ export const usePageCommands = () => {
run: async () => {
const page = pageHelper.createPage();
page.load();
pageMetaHelper.setPageTitle(page.id, query);
pageMetaHelper.setDocTitle(page.id, query);
},
icon: <PageIcon />,
});
@@ -275,7 +275,7 @@ export const usePageCommands = () => {
run: async () => {
const page = pageHelper.createEdgeless();
page.load();
pageMetaHelper.setPageTitle(page.id, query);
pageMetaHelper.setDocTitle(page.id, query);
},
icon: <EdgelessIcon />,
});
@@ -357,7 +357,7 @@ export const useCMDKCommandGroups = () => {
const pageCommands = usePageCommands();
const collectionCommands = useCollectionsCommands();
const currentPage = useServiceOptional(Page);
const currentPage = useServiceOptional(Doc);
const currentPageMode = useLiveData(currentPage?.mode);
const affineCommands = useMemo(() => {
return getAllCommand({
@@ -3,7 +3,7 @@ import { formatDate } from '@affine/core/components/page-list';
import { useSyncEngineStatus } from '@affine/core/hooks/affine/use-sync-engine-status';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import { SyncEngineStep } from '@toeverything/infra';
import type { CommandCategory } from '@toeverything/infra/command';
import clsx from 'clsx';
@@ -155,7 +155,7 @@ export const CMDKContainer = ({
open: boolean;
className?: string;
query: string;
pageMeta?: PageMeta;
pageMeta?: DocMeta;
groups: ReturnType<typeof useCMDKCommandGroups>;
onQueryChange: (query: string) => void;
}>) => {
@@ -235,7 +235,7 @@ const CMDKQuickSearchModalInner = ({
pageMeta,
open,
...props
}: CMDKModalProps & { pageMeta?: PageMeta }) => {
}: CMDKModalProps & { pageMeta?: DocMeta }) => {
const [query, setQuery] = useAtom(cmdkQueryAtom);
useLayoutEffect(() => {
if (open) {
@@ -261,7 +261,7 @@ export const CMDKQuickSearchModal = ({
pageMeta,
open,
...props
}: CMDKModalProps & { pageMeta?: PageMeta }) => {
}: CMDKModalProps & { pageMeta?: DocMeta }) => {
return (
<CMDKModal open={open} {...props}>
<Suspense fallback={<Command.Loading />}>
@@ -2,7 +2,7 @@ import { Tooltip } from '@affine/component/ui/tooltip';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloseIcon, NewIcon } from '@blocksuite/icons';
import { useLiveData, useServiceOptional } from '@toeverything/infra';
import { Page } from '@toeverything/infra';
import { Doc } from '@toeverything/infra';
import { useSetAtom } from 'jotai/react';
import { useCallback, useState } from 'react';
@@ -28,7 +28,7 @@ type IslandItemNames = 'whatNew' | 'contact' | 'shortcuts';
const showList = environment.isDesktop ? DESKTOP_SHOW_LIST : DEFAULT_SHOW_LIST;
export const HelpIsland = () => {
const page = useServiceOptional(Page);
const page = useServiceOptional(Doc);
const pageId = page?.id;
const mode = useLiveData(page?.mode);
const setOpenSettingModalAtom = useSetAtom(openSettingModalAtom);
@@ -1,7 +1,7 @@
import { Button } from '@affine/component/ui/button';
import { ConfirmModal } from '@affine/component/ui/modal';
import { Tooltip } from '@affine/component/ui/tooltip';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { DeleteIcon, ResetIcon } from '@blocksuite/icons';
@@ -23,7 +23,7 @@ export const TrashPageFooter = ({ pageId }: { pageId: string }) => {
);
assertExists(workspace);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const pageMeta = useBlockSuitePageMeta(blockSuiteWorkspace).find(
const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find(
meta => meta.id === pageId
);
assertExists(pageMeta);
@@ -45,7 +45,7 @@ export const TrashPageFooter = ({ pageId }: { pageId: string }) => {
const onConfirmDelete = useCallback(() => {
jumpToSubPath(workspace.id, WorkspaceSubPath.ALL);
blockSuiteWorkspace.removePage(pageId);
blockSuiteWorkspace.removeDoc(pageId);
toast(t['com.affine.toastMessage.permanentlyDeleted']());
}, [blockSuiteWorkspace, jumpToSubPath, pageId, workspace.id, t]);
@@ -11,7 +11,7 @@ import { CollectionService } from '@affine/core/modules/collection';
import type { Collection, DeleteCollectionInfo } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { MoreHorizontalIcon, ViewLayersIcon } from '@blocksuite/icons';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
import * as Collapsible from '@radix-ui/react-collapsible';
import { useService } from '@toeverything/infra';
@@ -20,7 +20,7 @@ import { useCallback, useMemo, useState } from 'react';
import { useAllPageListConfig } from '../../../../hooks/affine/use-all-page-list-config';
import { getDropItemId } from '../../../../hooks/affine/use-sidebar-drag';
import { useBlockSuitePageMeta } from '../../../../hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '../../../../hooks/use-block-suite-page-meta';
import { Workbench } from '../../../../modules/workbench';
import { WorkbenchLink } from '../../../../modules/workbench/workbench-link';
import type { CollectionsListProps } from '../index';
@@ -34,7 +34,7 @@ const CollectionRenderer = ({
info,
}: {
collection: Collection;
pages: PageMeta[];
pages: DocMeta[];
workspace: Workspace;
info: DeleteCollectionInfo;
}) => {
@@ -173,7 +173,7 @@ export const CollectionsList = ({
info,
onCreate,
}: CollectionsListProps) => {
const metas = useBlockSuitePageMeta(workspace);
const metas = useBlockSuiteDocMeta(workspace);
const collections = useLiveData(useService(CollectionService).collections);
const t = useAFFiNEI18N();
if (collections.length === 0) {
@@ -2,7 +2,7 @@ import { MenuItem as CollectionItem } from '@affine/component/app-sidebar';
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import { useDraggable } from '@dnd-kit/core';
import * as Collapsible from '@radix-ui/react-collapsible';
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
@@ -23,11 +23,11 @@ export const Page = ({
inAllowList,
removeFromAllowList,
}: {
page: PageMeta;
page: DocMeta;
inAllowList: boolean;
removeFromAllowList: (id: string) => void;
workspace: Workspace;
allPageMeta: Record<string, PageMeta>;
allPageMeta: Record<string, DocMeta>;
}) => {
const [collapsed, setCollapsed] = React.useState(true);
const params = useParams();
@@ -1,6 +1,6 @@
import { toast } from '@affine/component';
import { RenameModal } from '@affine/component/rename-modal';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { Workspace } from '@blocksuite/store';
import { useCallback, useState } from 'react';
@@ -23,15 +23,15 @@ export const PostfixItem = ({ ...props }: PostfixItemProps) => {
const { workspace, pageId, pageTitle } = props;
const t = useAFFiNEI18N();
const [open, setOpen] = useState(false);
const { setPageTitle } = usePageMetaHelper(workspace);
const { setDocTitle } = useDocMetaHelper(workspace);
const handleRename = useCallback(
(newName: string) => {
setPageTitle(pageId, newName);
setDocTitle(pageId, newName);
setOpen(false);
toast(t['com.affine.toastMessage.rename']());
},
[pageId, setPageTitle, t]
[pageId, setDocTitle, t]
);
return (
@@ -2,7 +2,7 @@ import { MenuLinkItem } from '@affine/component/app-sidebar';
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
import { type PageMeta, type Workspace } from '@blocksuite/store';
import { type DocMeta, type Workspace } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
import { useMemo, useState } from 'react';
@@ -13,7 +13,7 @@ import { PostfixItem } from './postfix-item';
export interface ReferencePageProps {
workspace: Workspace;
pageId: string;
metaMapping: Record<string, PageMeta>;
metaMapping: Record<string, DocMeta>;
parentIds: Set<string>;
}
@@ -1,6 +1,6 @@
import { IconButton } from '@affine/component/ui/button';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { PlusIcon } from '@blocksuite/icons';
import type { Workspace } from '@blocksuite/store';
@@ -16,7 +16,7 @@ export const AddFavouriteButton = ({
pageId,
}: AddFavouriteButtonProps) => {
const { createPage, createLinkedPage } = usePageHelper(workspace);
const { setPageMeta } = usePageMetaHelper(workspace);
const { setDocMeta } = useDocMetaHelper(workspace);
const handleAddFavorite = useAsyncCallback(
async e => {
if (pageId) {
@@ -26,10 +26,10 @@ export const AddFavouriteButton = ({
} else {
const page = createPage();
page.load();
setPageMeta(page.id, { favorite: true });
setDocMeta(page.id, { favorite: true });
}
},
[pageId, createLinkedPage, createPage, setPageMeta]
[pageId, createLinkedPage, createPage, setDocMeta]
);
return (
@@ -1,5 +1,5 @@
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import type { PageMeta } from '@blocksuite/store';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import type { DocMeta } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
import { useMemo } from 'react';
@@ -12,7 +12,7 @@ import * as styles from './styles.css';
const emptyPageIdSet = new Set<string>();
export const FavoriteList = ({ workspace }: FavoriteListProps) => {
const metas = useBlockSuitePageMeta(workspace);
const metas = useBlockSuiteDocMeta(workspace);
const dropItemId = getDropItemId('favorites');
const favoriteList = useMemo(
@@ -27,7 +27,7 @@ export const FavoriteList = ({ workspace }: FavoriteListProps) => {
acc[meta.id] = meta;
return acc;
},
{} as Record<string, PageMeta>
{} as Record<string, DocMeta>
),
[metas]
);
@@ -17,7 +17,7 @@ import { CollectionService } from '@affine/core/modules/collection';
import { apis, events } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FolderIcon, SettingsIcon } from '@blocksuite/icons';
import { type Page } from '@blocksuite/store';
import { type Doc } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
import { useLiveData, useService, type Workspace } from '@toeverything/infra';
import { useAtom, useAtomValue } from 'jotai';
@@ -57,7 +57,7 @@ export type RootAppSidebarProps = {
onOpenSettingModal: () => void;
currentWorkspace: Workspace;
openPage: (pageId: string) => void;
createPage: () => Page;
createPage: () => Doc;
paths: {
all: (workspaceId: string) => string;
trash: (workspaceId: string) => string;
@@ -114,7 +114,7 @@ export const RootAppSidebar = ({
const onClickNewPage = useAsyncCallback(async () => {
const page = createPage();
page.waitForLoaded();
page.load();
openPage(page.id);
}, [createPage, openPage]);
@@ -6,7 +6,7 @@ import {
import type { BlockSuiteWorkspace } from '@affine/core/shared';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { TodayIcon, TomorrowIcon, YesterdayIcon } from '@blocksuite/icons';
import { Page, useServiceOptional } from '@toeverything/infra';
import { Doc, useServiceOptional } from '@toeverything/infra';
import { useParams } from 'react-router-dom';
interface AppSidebarJournalButtonProps {
@@ -17,7 +17,7 @@ export const AppSidebarJournalButton = ({
workspace,
}: AppSidebarJournalButtonProps) => {
const t = useAFFiNEI18N();
const currentPage = useServiceOptional(Page);
const currentPage = useServiceOptional(Doc);
const { openToday } = useJournalRouteHelper(workspace);
const { journalDate, isJournal } = useJournalInfoHelper(
workspace,