list pages and dublicate + ....
This commit is contained in:
@@ -74,6 +74,7 @@ type EditorStoreType = {
|
||||
addObject: (object: EditorObject) => void;
|
||||
updateObject: (id: string, updates: Partial<EditorObject>) => void;
|
||||
deleteObject: (id: string) => void;
|
||||
duplicateObject: (id: string) => void;
|
||||
selectedObjectId: string | null;
|
||||
setSelectedObjectId: (id: string | null) => void;
|
||||
selectedTableId: string | null;
|
||||
@@ -240,6 +241,52 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
|
||||
state.selectedTableId === id ? null : state.selectedTableId,
|
||||
}));
|
||||
},
|
||||
duplicateObject: (id) => {
|
||||
const state = get();
|
||||
const objectToDuplicate = state.objects.find((obj) => obj.id === id);
|
||||
if (!objectToDuplicate) return;
|
||||
|
||||
const duplicatedObject: EditorObject = {
|
||||
...objectToDuplicate,
|
||||
id: `${objectToDuplicate.id}-${crypto.randomUUID()}`,
|
||||
x: (objectToDuplicate.x || 0) + 20,
|
||||
y: (objectToDuplicate.y || 0) + 20,
|
||||
...(objectToDuplicate.tableData && {
|
||||
tableData: {
|
||||
...objectToDuplicate.tableData,
|
||||
id: `table-${crypto.randomUUID()}`,
|
||||
cells: Object.fromEntries(
|
||||
Object.entries(objectToDuplicate.tableData.cells).map(
|
||||
([key, cell]) => [
|
||||
key,
|
||||
{
|
||||
...cell,
|
||||
id: `cell-${crypto.randomUUID()}`,
|
||||
},
|
||||
]
|
||||
)
|
||||
),
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
if (state.currentPageId) {
|
||||
set((state) => ({
|
||||
objects: [...state.objects, duplicatedObject],
|
||||
pages: state.pages.map((p) =>
|
||||
p.id === state.currentPageId
|
||||
? { ...p, objects: [...p.objects, duplicatedObject] }
|
||||
: p
|
||||
),
|
||||
selectedObjectId: duplicatedObject.id,
|
||||
}));
|
||||
return;
|
||||
}
|
||||
set((state) => ({
|
||||
objects: [...state.objects, duplicatedObject],
|
||||
selectedObjectId: duplicatedObject.id,
|
||||
}));
|
||||
},
|
||||
selectedObjectId: null,
|
||||
setSelectedObjectId: (id) => set({ selectedObjectId: id }),
|
||||
selectedTableId: null,
|
||||
|
||||
Reference in New Issue
Block a user