mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
58 lines
1.5 KiB
TypeScript
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,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
}
|