197 lines
5.8 KiB
TypeScript
197 lines
5.8 KiB
TypeScript
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<SelectedEventSphereState>()(
|
|
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<SelectedEventDataState>()(
|
|
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<SelectedAssetState>()(
|
|
immer((set) => ({
|
|
selectedAsset: undefined,
|
|
setSelectedAsset: (EventData) => {
|
|
set((state) => {
|
|
state.selectedAsset = EventData;
|
|
});
|
|
},
|
|
clearSelectedAsset: () => {
|
|
set((state) => {
|
|
state.selectedAsset = undefined;
|
|
});
|
|
},
|
|
}))
|
|
);
|
|
|
|
interface SelectedProductState {
|
|
selectedProduct: { productId: string; productName: string };
|
|
setSelectedProduct: (productId: string, productName: string) => void;
|
|
clearSelectedProduct: () => void;
|
|
}
|
|
|
|
export const createSelectedProductStore = () => {
|
|
return create<SelectedProductState>()(
|
|
immer((set) => ({
|
|
selectedProduct: { productId: '', productName: '' },
|
|
setSelectedProduct: (productId, productName) => {
|
|
set((state) => {
|
|
state.selectedProduct.productId = productId;
|
|
state.selectedProduct.productName = productName;
|
|
});
|
|
},
|
|
clearSelectedProduct: () => {
|
|
set((state) => {
|
|
state.selectedProduct.productId = '';
|
|
state.selectedProduct.productName = '';
|
|
});
|
|
},
|
|
}))
|
|
)
|
|
}
|
|
|
|
export type SelectedProductType = ReturnType<typeof createSelectedProductStore>;
|
|
|
|
interface SelectedActionState {
|
|
selectedAction: { actionId: string | null; actionName: string | null };
|
|
setSelectedAction: (actionId: string, actionName: string) => void;
|
|
clearSelectedAction: () => void;
|
|
}
|
|
|
|
export const useSelectedAction = create<SelectedActionState>()(
|
|
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<IsDraggingState>()(
|
|
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<IsRotatingState>()(
|
|
immer((set) => ({
|
|
isRotating: null,
|
|
setIsRotating: (state) => {
|
|
set((s) => {
|
|
s.isRotating = state;
|
|
});
|
|
},
|
|
}))
|
|
);
|
|
|
|
interface MainProductState {
|
|
mainProduct: { productId: string; productName: string } | null;
|
|
setMainProduct: (productId: string, productName: string) => void;
|
|
clearMainProduct: () => void;
|
|
}
|
|
|
|
export const useMainProduct = create<MainProductState>()(
|
|
immer((set) => ({
|
|
mainProduct: null,
|
|
setMainProduct: (productId: string, productName: string) => {
|
|
set((state) => {
|
|
state.mainProduct = { productId, productName };
|
|
});
|
|
},
|
|
clearMainProduct: () => {
|
|
set((state) => {
|
|
state.mainProduct = null;
|
|
});
|
|
},
|
|
}))
|
|
);
|
|
|
|
interface ComparisonProductState {
|
|
comparisonProduct: { productId: string; productName: string } | null;
|
|
setComparisonProduct: (productId: string, productName: string) => void;
|
|
clearComparisonProduct: () => void;
|
|
}
|
|
|
|
export const useComparisonProduct = create<ComparisonProductState>()(
|
|
immer((set) => ({
|
|
comparisonProduct: null,
|
|
setComparisonProduct: (productId: string, productName: string) => {
|
|
set((state) => {
|
|
state.comparisonProduct = { productId, productName };
|
|
});
|
|
},
|
|
clearComparisonProduct: () => {
|
|
set((state) => {
|
|
state.comparisonProduct = null;
|
|
});
|
|
},
|
|
}))
|
|
); |