sort layers
This commit is contained in:
@@ -91,6 +91,7 @@ type EditorStoreType = {
|
||||
updateObject: (id: string, updates: Partial<EditorObject>) => void;
|
||||
deleteObject: (id: string) => void;
|
||||
duplicateObject: (id: string) => void;
|
||||
reorderObjects: (draggedId: string, targetId: string) => void;
|
||||
selectedObjectId: string | null;
|
||||
setSelectedObjectId: (id: string | null) => void;
|
||||
selectedObjectIds: string[];
|
||||
@@ -354,6 +355,38 @@ export const useEditorStore = create<EditorStoreType>((set, get) => {
|
||||
selectedObjectId: duplicatedObject.id,
|
||||
}));
|
||||
},
|
||||
reorderObjects: (draggedId, targetId) => {
|
||||
if (draggedId === targetId) return;
|
||||
|
||||
const reorder = (items: EditorObject[]) => {
|
||||
const fromIndex = items.findIndex((item) => item.id === draggedId);
|
||||
const toIndex = items.findIndex((item) => item.id === targetId);
|
||||
|
||||
if (fromIndex === -1 || toIndex === -1) return items;
|
||||
|
||||
const nextItems = [...items];
|
||||
const [movedItem] = nextItems.splice(fromIndex, 1);
|
||||
nextItems.splice(toIndex, 0, movedItem);
|
||||
return nextItems;
|
||||
};
|
||||
|
||||
const state = get();
|
||||
if (state.currentPageId) {
|
||||
set((state) => ({
|
||||
objects: reorder(state.objects),
|
||||
pages: state.pages.map((page) =>
|
||||
page.id === state.currentPageId
|
||||
? { ...page, objects: reorder(page.objects) }
|
||||
: page,
|
||||
),
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
set((state) => ({
|
||||
objects: reorder(state.objects),
|
||||
}));
|
||||
},
|
||||
selectedObjectId: null,
|
||||
setSelectedObjectId: (id) => {
|
||||
set({
|
||||
|
||||
Reference in New Issue
Block a user