save guide line

This commit is contained in:
hamid zarghami
2026-04-26 10:56:26 +03:30
parent 4feccbf1f9
commit 333955fdf3
2 changed files with 47 additions and 11 deletions
+38 -3
View File
@@ -72,13 +72,22 @@ export type Page = {
id: string;
name: string;
objects: EditorObject[];
guides: PageGuide[];
};
export type PageGuide = {
id: string;
orientation: "vertical" | "horizontal";
position: number;
};
type EditorStoreType = {
tool: ToolType;
setTool: (tool: ToolType) => void;
objects: EditorObject[];
guides: PageGuide[];
addObject: (object: EditorObject) => void;
setGuides: (guides: PageGuide[]) => void;
updateObject: (id: string, updates: Partial<EditorObject>) => void;
deleteObject: (id: string) => void;
duplicateObject: (id: string) => void;
@@ -177,6 +186,7 @@ const createInitialPage = (name: string): Page => ({
id: `page-${crypto.randomUUID?.()}`,
name,
objects: [],
guides: [],
});
export const useEditorStore = create<EditorStoreType>((set, get) => {
@@ -189,6 +199,7 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
selectedObjectId: tool === "select" ? state.selectedObjectId : null,
})),
objects: [],
guides: [],
addObject: (object) => {
const state = get();
if (state.currentPageId) {
@@ -209,6 +220,19 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
}
set((state) => ({ objects: [...state.objects, object] }));
},
setGuides: (guides) => {
const state = get();
if (state.currentPageId) {
set((state) => ({
guides,
pages: state.pages.map((p) =>
p.id === state.currentPageId ? { ...p, guides } : p,
),
}));
return;
}
set({ guides });
},
updateObject: (id, updates) => {
const state = get();
if (state.currentPageId) {
@@ -578,6 +602,7 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
pages: [...state.pages, newPage],
currentPageId: newPage.id,
objects: [],
guides: [],
selectedObjectId: null,
}));
},
@@ -595,6 +620,7 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
id: `page-${crypto.randomUUID?.()}`,
name: `${pageToDuplicate.name} (کپی)`,
objects: duplicatedObjects,
guides: [...pageToDuplicate.guides],
};
set((state) => ({
@@ -617,6 +643,7 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
pages: newPages,
currentPageId: newCurrentPageId,
objects: newCurrentPage?.objects || [],
guides: newCurrentPage?.guides || [],
selectedObjectId: null,
});
},
@@ -628,7 +655,9 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
// Save current objects to current page before switching
const updatedPages = state.currentPageId
? state.pages.map((p) =>
p.id === state.currentPageId ? { ...p, objects: state.objects } : p,
p.id === state.currentPageId
? { ...p, objects: state.objects, guides: state.guides }
: p,
)
: state.pages;
@@ -639,6 +668,7 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
pages: updatedPages,
currentPageId: pageId,
objects: targetPageFromUpdated.objects,
guides: targetPageFromUpdated.guides || [],
selectedObjectId: null,
});
},
@@ -939,11 +969,16 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
},
loadPages: (pages) => {
if (pages.length === 0) return;
const firstPage = pages[0];
const normalizedPages = pages.map((page) => ({
...page,
guides: page.guides || [],
}));
const firstPage = normalizedPages[0];
set({
pages,
pages: normalizedPages,
currentPageId: firstPage.id,
objects: firstPage.objects,
guides: firstPage.guides || [],
selectedObjectId: null,
selectedObjectIds: [],
});