ERP-node/frontend/stores/modalDataStore.ts

164 lines
4.3 KiB
TypeScript
Raw Normal View History

"use client";
import { create } from "zustand";
import { devtools } from "zustand/middleware";
/**
*
*
* :
* 1.
* 2.
* 3.
*/
export interface ModalDataItem {
/**
* ID ( ID나 )
*/
id: string | number;
/**
* ( )
*/
originalData: Record<string, any>;
/**
* ( )
*/
additionalData?: Record<string, any>;
}
interface ModalDataState {
/**
*
* key: 소스 ID (: "table-list-123")
* value: 선택된
*/
dataRegistry: Record<string, ModalDataItem[]>;
/**
* ( )
* @param sourceId ID
* @param items
*/
setData: (sourceId: string, items: ModalDataItem[]) => void;
/**
* ( )
* @param sourceId ID
* @returns ( )
*/
getData: (sourceId: string) => ModalDataItem[];
/**
* ( )
* @param sourceId ID
*/
clearData: (sourceId: string) => void;
/**
*
*/
clearAll: () => void;
/**
*
* @param sourceId ID
* @param itemId ID
* @param additionalData
*/
updateItemData: (sourceId: string, itemId: string | number, additionalData: Record<string, any>) => void;
}
export const useModalDataStore = create<ModalDataState>()(
devtools(
(set, get) => ({
dataRegistry: {},
setData: (sourceId, items) => {
console.log("📦 [ModalDataStore] 데이터 저장:", { sourceId, itemCount: items.length, items });
set((state) => ({
dataRegistry: {
...state.dataRegistry,
[sourceId]: items,
},
}));
},
getData: (sourceId) => {
const items = get().dataRegistry[sourceId] || [];
console.log("📭 [ModalDataStore] 데이터 조회:", { sourceId, itemCount: items.length });
return items;
},
clearData: (sourceId) => {
console.log("🗑️ [ModalDataStore] 데이터 정리:", { sourceId });
set((state) => {
const { [sourceId]: _, ...rest } = state.dataRegistry;
return { dataRegistry: rest };
});
},
clearAll: () => {
console.log("🗑️ [ModalDataStore] 모든 데이터 정리");
set({ dataRegistry: {} });
},
updateItemData: (sourceId, itemId, additionalData) => {
set((state) => {
const items = state.dataRegistry[sourceId] || [];
const updatedItems = items.map((item) =>
item.id === itemId
? { ...item, additionalData: { ...item.additionalData, ...additionalData } }
: item
);
console.log("✏️ [ModalDataStore] 항목 데이터 업데이트:", { sourceId, itemId, additionalData });
return {
dataRegistry: {
...state.dataRegistry,
[sourceId]: updatedItems,
},
};
});
},
}),
{ name: "ModalDataStore" }
)
);
/**
* Hook
*
* @example
* const items = useModalData("table-list-123");
*/
export const useModalData = (sourceId: string) => {
return useModalDataStore((state) => state.getData(sourceId));
};
/**
* Hook
*
* @example
* const setModalData = useSetModalData();
* setModalData("table-list-123", selectedItems);
*/
export const useSetModalData = () => {
return useModalDataStore((state) => state.setData);
};
/**
* Hook
*
* @example
* const clearModalData = useClearModalData();
* clearModalData("table-list-123");
*/
export const useClearModalData = () => {
return useModalDataStore((state) => state.clearData);
};