feat: 초기 기본값 변경(좌측 노선패널 OFF · 시설등급 1·2종만)
- 좌측 RoutePanel 기본 숨김(showRoutePanel=false) - 시설등급 기타 기본 해제(1종·2종만 체크) - persist version 1 + migrate: 과거 저장본 최초 1회 두 값 강제 재설정 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -15,14 +15,14 @@ import { persist } from 'zustand/middleware';
|
|||||||
export const KNOWN_GRADES = ['1종', '2종', '3종', '기타'] as const;
|
export const KNOWN_GRADES = ['1종', '2종', '3종', '기타'] as const;
|
||||||
|
|
||||||
interface SettingsStore {
|
interface SettingsStore {
|
||||||
/** 시설종별별 표시 여부. 기본 1종☑ 2종☑ 3종☐. */
|
/** 시설종별별 표시 여부. 기본 1종☑ 2종☑ 3종☐ 기타☐ (초기 구동 시 1·2종만 체크). */
|
||||||
gradeFilter: Record<string, boolean>;
|
gradeFilter: Record<string, boolean>;
|
||||||
/** 특정 시설종별 체크 토글. */
|
/** 특정 시설종별 체크 토글. */
|
||||||
setGradeFilter: (grade: string, checked: boolean) => void;
|
setGradeFilter: (grade: string, checked: boolean) => void;
|
||||||
/** 화면 POI 겹침제외(겹치면 1개만). true=겹친 것 숨김(기본), false=모든 POI 표시. */
|
/** 화면 POI 겹침제외(겹치면 1개만). true=겹친 것 숨김(기본), false=모든 POI 표시. */
|
||||||
poiOverlapExclude: boolean;
|
poiOverlapExclude: boolean;
|
||||||
setPoiOverlapExclude: (v: boolean) => void;
|
setPoiOverlapExclude: (v: boolean) => void;
|
||||||
/** 좌측 노선 패널(RoutePanel) 표시 여부. '화면표시 옵션' 토글로 제어. 기본 표시. */
|
/** 좌측 노선 패널(RoutePanel) 표시 여부. '화면표시 옵션' 토글로 제어. 기본 숨김(OFF). */
|
||||||
showRoutePanel: boolean;
|
showRoutePanel: boolean;
|
||||||
setShowRoutePanel: (v: boolean) => void;
|
setShowRoutePanel: (v: boolean) => void;
|
||||||
/** 측점 진단 HUD(드론 GPS·투영측점) 하단바 표시 여부. 기본 off. */
|
/** 측점 진단 HUD(드론 GPS·투영측점) 하단바 표시 여부. 기본 off. */
|
||||||
@@ -46,7 +46,7 @@ const DEFAULT_GRADE_FILTER: Record<string, boolean> = {
|
|||||||
'1종': true,
|
'1종': true,
|
||||||
'2종': true,
|
'2종': true,
|
||||||
'3종': false,
|
'3종': false,
|
||||||
'기타': true,
|
'기타': false,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useSettingsStore = create<SettingsStore>()(
|
export const useSettingsStore = create<SettingsStore>()(
|
||||||
@@ -57,7 +57,7 @@ export const useSettingsStore = create<SettingsStore>()(
|
|||||||
set((s) => ({ gradeFilter: { ...s.gradeFilter, [grade]: checked } })),
|
set((s) => ({ gradeFilter: { ...s.gradeFilter, [grade]: checked } })),
|
||||||
poiOverlapExclude: true,
|
poiOverlapExclude: true,
|
||||||
setPoiOverlapExclude: (v) => set({ poiOverlapExclude: v }),
|
setPoiOverlapExclude: (v) => set({ poiOverlapExclude: v }),
|
||||||
showRoutePanel: true,
|
showRoutePanel: false,
|
||||||
setShowRoutePanel: (v) => set({ showRoutePanel: v }),
|
setShowRoutePanel: (v) => set({ showRoutePanel: v }),
|
||||||
showStationDiag: false,
|
showStationDiag: false,
|
||||||
setShowStationDiag: (v) => set({ showStationDiag: v }),
|
setShowStationDiag: (v) => set({ showStationDiag: v }),
|
||||||
@@ -72,6 +72,16 @@ export const useSettingsStore = create<SettingsStore>()(
|
|||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: 'ghivideo.settings',
|
name: 'ghivideo.settings',
|
||||||
|
// 시작 기본값 변경(좌측패널 OFF + 시설등급 1·2종만) 반영 —
|
||||||
|
// 과거 저장본(version 0)은 최초 1회 해당 두 값을 기본으로 강제 재설정한다.
|
||||||
|
version: 1,
|
||||||
|
migrate: (persisted, version) => {
|
||||||
|
const p = (persisted ?? {}) as Partial<SettingsStore>;
|
||||||
|
if (version < 1) {
|
||||||
|
return { ...p, showRoutePanel: false, gradeFilter: { ...DEFAULT_GRADE_FILTER } } as SettingsStore;
|
||||||
|
}
|
||||||
|
return p as SettingsStore;
|
||||||
|
},
|
||||||
// 과거 저장본에 누락된 종별 키가 있으면 기본값으로 보충(스키마 진화 대비).
|
// 과거 저장본에 누락된 종별 키가 있으면 기본값으로 보충(스키마 진화 대비).
|
||||||
merge: (persisted, current) => {
|
merge: (persisted, current) => {
|
||||||
const p = (persisted ?? {}) as Partial<SettingsStore>;
|
const p = (persisted ?? {}) as Partial<SettingsStore>;
|
||||||
|
|||||||
Reference in New Issue
Block a user