Files
AFFiNE-Mirror/libs/components/board-commands/src/delete-shapes.ts
T
2022-08-13 02:45:04 +08:00

67 lines
1.9 KiB
TypeScript

import type { TldrawApp } from '@toeverything/components/board-state';
import type {
TDAsset,
TDAssets,
TldrawCommand,
} from '@toeverything/components/board-types';
import { removeShapesFromPage } from './shared/remove-shapes-from-page';
const removeAssetsFromDocument = (assets: TDAssets, idsToRemove: string[]) => {
const afterAssets: Record<string, TDAsset | undefined> = { ...assets };
idsToRemove.forEach(id => (afterAssets[id] = undefined));
return afterAssets;
};
export function deleteShapes(
app: TldrawApp,
ids: string[],
pageId = app.currentPageId
): TldrawCommand {
const {
pageState,
selectedIds,
document: { assets: beforeAssets },
} = app;
const { before, after, assetsToRemove } = removeShapesFromPage(
app.state,
ids,
pageId
);
const afterAssets = removeAssetsFromDocument(beforeAssets, assetsToRemove);
return {
id: 'delete',
before: {
document: {
assets: beforeAssets,
pages: {
[pageId]: before,
},
pageStates: {
[pageId]: { selectedIds: [...app.selectedIds] },
},
},
},
after: {
document: {
assets: afterAssets,
pages: {
[pageId]: after,
},
pageStates: {
[pageId]: {
selectedIds: selectedIds.filter(
id => !ids.includes(id)
),
hoveredId:
pageState.hoveredId &&
ids.includes(pageState.hoveredId)
? undefined
: pageState.hoveredId,
},
},
},
},
};
}