list pages and dublicate + ....

This commit is contained in:
hamid zarghami
2025-12-31 12:29:57 +03:30
parent bcb66039d2
commit 26d0f5eb53
3 changed files with 53 additions and 5 deletions
+47
View File
@@ -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,