Files
AFFiNE-Mirror/libs/components/board-commands/src/delete-page.ts
2022-07-22 15:49:21 +08:00

58 lines
1.5 KiB
TypeScript

import type { TldrawCommand } from '@toeverything/components/board-types';
import type { TldrawApp } from '@toeverything/components/board-state';
export function deletePage(app: TldrawApp, pageId: string): TldrawCommand {
const {
currentPageId,
document: { pages, pageStates },
} = app;
const pagesArr = Object.values(pages).sort(
(a, b) => (a.childIndex || 0) - (b.childIndex || 0)
);
const currentIndex = pagesArr.findIndex(page => page.id === pageId);
let nextCurrentPageId: string;
if (pageId === currentPageId) {
if (currentIndex === pagesArr.length - 1) {
nextCurrentPageId = pagesArr[pagesArr.length - 2].id;
} else {
nextCurrentPageId = pagesArr[currentIndex + 1].id;
}
} else {
nextCurrentPageId = currentPageId;
}
return {
id: 'delete_page',
before: {
appState: {
currentPageId: pageId,
},
document: {
pages: {
[pageId]: { ...pages[pageId] },
},
pageStates: {
[pageId]: { ...pageStates[pageId] },
},
},
},
after: {
appState: {
currentPageId: nextCurrentPageId,
},
document: {
pages: {
[pageId]: undefined,
},
pageStates: {
[pageId]: undefined,
},
},
},
};
}