Ref처럼 첫 탭은 도시 툴팁만 표시하고 같은 도시의 두 번째 탭에서 이동하도록 한다. 한 번 탭 모드와 localStorage 보존, PC hover/click 회귀를 Chromium 테스트로 검증한다.
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
|
|
interface MapViewerState {
|
|
showCityName: boolean;
|
|
detailMode: boolean;
|
|
singleTapNavigation: boolean;
|
|
hoveredCityId: number | null;
|
|
selectedCityId: number | null;
|
|
}
|
|
|
|
const SINGLE_TAP_STORAGE_KEY = 'sam.toggleSingleTap';
|
|
|
|
const loadSingleTapNavigation = (): boolean => {
|
|
if (typeof window === 'undefined') return false;
|
|
return window.localStorage.getItem(SINGLE_TAP_STORAGE_KEY) === 'yes';
|
|
};
|
|
|
|
export const useMapViewerStore = defineStore('mapViewer', {
|
|
state: (): MapViewerState => ({
|
|
showCityName: true,
|
|
detailMode: true,
|
|
singleTapNavigation: loadSingleTapNavigation(),
|
|
hoveredCityId: null,
|
|
selectedCityId: null,
|
|
}),
|
|
actions: {
|
|
toggleCityName() {
|
|
this.showCityName = !this.showCityName;
|
|
},
|
|
toggleDetailMode() {
|
|
this.detailMode = !this.detailMode;
|
|
},
|
|
toggleSingleTapNavigation() {
|
|
this.singleTapNavigation = !this.singleTapNavigation;
|
|
if (typeof window !== 'undefined') {
|
|
window.localStorage.setItem(SINGLE_TAP_STORAGE_KEY, this.singleTapNavigation ? 'yes' : 'no');
|
|
}
|
|
},
|
|
setHoveredCity(cityId: number | null) {
|
|
this.hoveredCityId = cityId;
|
|
},
|
|
setSelectedCity(cityId: number | null) {
|
|
this.selectedCityId = cityId;
|
|
},
|
|
},
|
|
});
|