mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-24 05:48:59 +08:00
feat: bump blocksuite (#5953)
This commit is contained in:
@@ -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);
|
||||
|
||||
+2
-2
@@ -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() {
|
||||
|
||||
+5
-5
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -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({
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+14
-15
@@ -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
|
||||
|
||||
+6
-6
@@ -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();
|
||||
|
||||
|
||||
+2
-2
@@ -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();
|
||||
|
||||
+17
-20
@@ -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',
|
||||
|
||||
+3
-3
@@ -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;
|
||||
|
||||
+2
-2
@@ -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
-5
@@ -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]);
|
||||
|
||||
+4
-4
@@ -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
-2
@@ -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]);
|
||||
|
||||
|
||||
+4
-4
@@ -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) {
|
||||
|
||||
+3
-3
@@ -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();
|
||||
|
||||
+4
-4
@@ -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
-2
@@ -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>;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -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 (
|
||||
|
||||
+4
-4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user