- Vite 마이그레이션, OpenLayers+Deck.gl 지도 연동 - STOMP WebSocket 선박 실시간 데이터 수신 - 선박 범례/필터/카운트, 다크시그널 처리 - Ctrl+Drag 박스선택, 우클릭 컨텍스트 메뉴 - 측정도구, 상세모달, 호버 툴팁 - darkSignalIds Set 패턴, INSHORE/OFFSHORE 타임아웃 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
29 lines
794 B
JavaScript
29 lines
794 B
JavaScript
import { create } from 'zustand';
|
|
|
|
/**
|
|
* UI 상태 관리 스토어
|
|
*/
|
|
export const useUIStore = create((set) => ({
|
|
// 사이드패널 열림 상태
|
|
isPanelOpen: true,
|
|
togglePanel: () => set((state) => ({ isPanelOpen: !state.isPanelOpen })),
|
|
setPanel: (isOpen) => set({ isPanelOpen: isOpen }),
|
|
|
|
// 활성 메뉴
|
|
activeMenu: 'ship',
|
|
setActiveMenu: (menu) => set({ activeMenu: menu }),
|
|
|
|
// 로딩 상태
|
|
isLoading: false,
|
|
setLoading: (loading) => set({ isLoading: loading }),
|
|
|
|
// 모달 상태
|
|
modals: {},
|
|
openModal: (modalId, data = null) => set((state) => ({
|
|
modals: { ...state.modals, [modalId]: { isOpen: true, data } },
|
|
})),
|
|
closeModal: (modalId) => set((state) => ({
|
|
modals: { ...state.modals, [modalId]: { isOpen: false, data: null } },
|
|
})),
|
|
}));
|