From 5c8b499979a0d2c4b4ae89af0ff9885e141b59c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EC=84=B1=EC=9D=BC?= Date: Thu, 9 Jul 2026 11:20:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=EA=B0=92=20=EB=B3=80=EA=B2=BD(=EC=A2=8C=EC=B8=A1=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=ED=8C=A8=EB=84=90=20OFF=20=C2=B7=20=EC=8B=9C=EC=84=A4?= =?UTF-8?q?=EB=93=B1=EA=B8=89=201=C2=B72=EC=A2=85=EB=A7=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 좌측 RoutePanel 기본 숨김(showRoutePanel=false) - 시설등급 기타 기본 해제(1종·2종만 체크) - persist version 1 + migrate: 과거 저장본 최초 1회 두 값 강제 재설정 Co-Authored-By: Claude Opus 4.8 --- client/src/store/settingsStore.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/client/src/store/settingsStore.ts b/client/src/store/settingsStore.ts index 37b83a2..d19ece2 100644 --- a/client/src/store/settingsStore.ts +++ b/client/src/store/settingsStore.ts @@ -15,14 +15,14 @@ import { persist } from 'zustand/middleware'; export const KNOWN_GRADES = ['1종', '2종', '3종', '기타'] as const; interface SettingsStore { - /** 시설종별별 표시 여부. 기본 1종☑ 2종☑ 3종☐. */ + /** 시설종별별 표시 여부. 기본 1종☑ 2종☑ 3종☐ 기타☐ (초기 구동 시 1·2종만 체크). */ gradeFilter: Record; /** 특정 시설종별 체크 토글. */ setGradeFilter: (grade: string, checked: boolean) => void; /** 화면 POI 겹침제외(겹치면 1개만). true=겹친 것 숨김(기본), false=모든 POI 표시. */ poiOverlapExclude: boolean; setPoiOverlapExclude: (v: boolean) => void; - /** 좌측 노선 패널(RoutePanel) 표시 여부. '화면표시 옵션' 토글로 제어. 기본 표시. */ + /** 좌측 노선 패널(RoutePanel) 표시 여부. '화면표시 옵션' 토글로 제어. 기본 숨김(OFF). */ showRoutePanel: boolean; setShowRoutePanel: (v: boolean) => void; /** 측점 진단 HUD(드론 GPS·투영측점) 하단바 표시 여부. 기본 off. */ @@ -46,7 +46,7 @@ const DEFAULT_GRADE_FILTER: Record = { '1종': true, '2종': true, '3종': false, - '기타': true, + '기타': false, }; export const useSettingsStore = create()( @@ -57,7 +57,7 @@ export const useSettingsStore = create()( set((s) => ({ gradeFilter: { ...s.gradeFilter, [grade]: checked } })), poiOverlapExclude: true, setPoiOverlapExclude: (v) => set({ poiOverlapExclude: v }), - showRoutePanel: true, + showRoutePanel: false, setShowRoutePanel: (v) => set({ showRoutePanel: v }), showStationDiag: false, setShowStationDiag: (v) => set({ showStationDiag: v }), @@ -72,6 +72,16 @@ export const useSettingsStore = create()( }), { name: 'ghivideo.settings', + // 시작 기본값 변경(좌측패널 OFF + 시설등급 1·2종만) 반영 — + // 과거 저장본(version 0)은 최초 1회 해당 두 값을 기본으로 강제 재설정한다. + version: 1, + migrate: (persisted, version) => { + const p = (persisted ?? {}) as Partial; + if (version < 1) { + return { ...p, showRoutePanel: false, gradeFilter: { ...DEFAULT_GRADE_FILTER } } as SettingsStore; + } + return p as SettingsStore; + }, // 과거 저장본에 누락된 종별 키가 있으면 기본값으로 보충(스키마 진화 대비). merge: (persisted, current) => { const p = (persisted ?? {}) as Partial;