import { create } from 'zustand'; import { immer } from 'zustand/middleware/immer'; import * as THREE from 'three'; interface SelectedEventSphereState { selectedEventSphere: THREE.Mesh | null; setSelectedEventSphere: (mesh: THREE.Mesh | null) => void; clearSelectedEventSphere: () => void; } export const useSelectedEventSphere = create()( immer((set) => ({ selectedEventSphere: null, setSelectedEventSphere: (mesh) => { set((state) => { state.selectedEventSphere = mesh; }); }, clearSelectedEventSphere: () => { set((state) => { state.selectedEventSphere = null; }); }, })) ); interface SelectedEventDataState { selectedEventData: { data: EventsSchema; selectedPoint: string } | undefined; setSelectedEventData: (data: EventsSchema, selectedPoint: string) => void; clearSelectedEventData: () => void; } export const useSelectedEventData = create()( immer((set) => ({ selectedEventData: undefined, setSelectedEventData: (data, selectedPoint) => { set((state) => { state.selectedEventData = { data, selectedPoint }; }); }, clearSelectedEventData: () => { set((state) => { state.selectedEventData = undefined; }); }, })) ); interface SelectedAssetState { selectedAsset: EventsSchema | undefined; setSelectedAsset: (EventData: EventsSchema) => void; clearSelectedAsset: () => void; } export const useSelectedAsset = create()( immer((set) => ({ selectedAsset: undefined, setSelectedAsset: (EventData) => { set((state) => { state.selectedAsset = EventData; }); }, clearSelectedAsset: () => { set((state) => { state.selectedAsset = undefined; }); }, })) ); interface SelectedProductState { selectedProduct: { productUuid: string; productName: string }; setSelectedProduct: (productUuid: string, productName: string) => void; clearSelectedProduct: () => void; } export const createSelectedProductStore = () => { return create()( immer((set) => ({ selectedProduct: { productUuid: '', productName: '' }, setSelectedProduct: (productUuid, productName) => { set((state) => { state.selectedProduct.productUuid = productUuid; state.selectedProduct.productName = productName; }); }, clearSelectedProduct: () => { set((state) => { state.selectedProduct.productUuid = ''; state.selectedProduct.productName = ''; }); }, })) ) } export type SelectedProductType = ReturnType; interface SelectedVersionState { selectedVersion: Version | null; setSelectedVersion: (version: Version) => void; clearSelectedVersion: () => void; } export const createSelectedVersionStore = () => { return create()( immer((set) => ({ selectedVersion: null, setSelectedVersion: (version) => { set((state) => { state.selectedVersion = version; }); }, clearSelectedVersion: () => { set((state) => { state.selectedVersion = null; }); }, })) ) } export type SelectedVersionType = ReturnType; interface SelectedActionState { selectedAction: { actionId: string | null; actionName: string | null }; setSelectedAction: (actionId: string, actionName: string) => void; clearSelectedAction: () => void; } export const useSelectedAction = create()( immer((set) => ({ selectedAction: { actionId: null, actionName: null }, setSelectedAction: (actionId, actionName) => { set((state) => { state.selectedAction.actionId = actionId; state.selectedAction.actionName = actionName; }); }, clearSelectedAction: () => { set((state) => { state.selectedAction.actionId = null; state.selectedAction.actionName = null; }); }, })) ); interface IsDraggingState { isDragging: "start" | "end" | null; setIsDragging: (state: "start" | "end" | null) => void; } export const useIsDragging = create()( immer((set) => ({ isDragging: null, setIsDragging: (state) => { set((s) => { s.isDragging = state; }); }, })) ); interface IsRotatingState { isRotating: "start" | "end" | null; setIsRotating: (state: "start" | "end" | null) => void; } export const useIsRotating = create()( immer((set) => ({ isRotating: null, setIsRotating: (state) => { set((s) => { s.isRotating = state; }); }, })) ); interface MainProductState { mainProduct: { productUuid: string; productName: string } | null; setMainProduct: (productUuid: string, productName: string) => void; clearMainProduct: () => void; } export const useMainProduct = create()( immer((set) => ({ mainProduct: null, setMainProduct: (productUuid: string, productName: string) => { set((state) => { state.mainProduct = { productUuid, productName }; }); }, clearMainProduct: () => { set((state) => { state.mainProduct = null; }); }, })) ); interface ComparisonProductState { comparisonProduct: { productUuid: string; productName: string } | null; setComparisonProduct: (productUuid: string, productName: string) => void; clearComparisonProduct: () => void; } export const useComparisonProduct = create()( immer((set) => ({ comparisonProduct: null, setComparisonProduct: (productUuid: string, productName: string) => { set((state) => { state.comparisonProduct = { productUuid, productName }; }); }, clearComparisonProduct: () => { set((state) => { state.comparisonProduct = null; }); }, })) );