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

44 lines
1.0 KiB
TypeScript

import type {
TldrawCommand,
TDShape,
} from '@toeverything/components/board-types';
import { TLDR } from '@toeverything/components/board-state';
import type { TldrawApp } from '@toeverything/components/board-state';
export function updateShapes(
app: TldrawApp,
updates: ({ id: string } & Partial<TDShape>)[],
pageId: string
): TldrawCommand {
const ids = updates.map(update => update.id);
const change = TLDR.mutate_shapes(
app.state,
ids.filter(id => !app.getShape(id, pageId).isLocked),
(shape, i) => updates[i],
pageId
);
return {
id: 'update',
before: {
document: {
pages: {
[pageId]: {
shapes: change.before,
},
},
},
},
after: {
document: {
pages: {
[pageId]: {
shapes: change.after,
},
},
},
},
};
}