forked from zhouruizhe/gmTouringMiniApp
Initial commit: gmTouringMiniApp project
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import type { GeoPoint, MapViewport } from '@/domain/poi'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
export const DEFAULT_GUANGMING_VIEWPORT: MapViewport = {
|
||||
longitude: 113.935,
|
||||
latitude: 22.748,
|
||||
scale: 11,
|
||||
}
|
||||
|
||||
interface MapSessionState {
|
||||
categoryCode: string | null
|
||||
selectedPoiId: string | null
|
||||
viewport: MapViewport
|
||||
}
|
||||
|
||||
function isFinitePoint(point: GeoPoint): boolean {
|
||||
return Number.isFinite(point.longitude) && Number.isFinite(point.latitude)
|
||||
}
|
||||
|
||||
export const useMapStore = defineStore('map-session', {
|
||||
state: (): MapSessionState => ({
|
||||
categoryCode: null,
|
||||
selectedPoiId: null,
|
||||
viewport: { ...DEFAULT_GUANGMING_VIEWPORT },
|
||||
}),
|
||||
actions: {
|
||||
setCategory(categoryCode: string | null) {
|
||||
this.categoryCode = categoryCode
|
||||
},
|
||||
selectPoi(poiId: string | null) {
|
||||
this.selectedPoiId = poiId
|
||||
},
|
||||
updateViewport(viewport: MapViewport) {
|
||||
if (!isFinitePoint(viewport) || !Number.isFinite(viewport.scale) || viewport.scale <= 0)
|
||||
return
|
||||
|
||||
this.viewport = { ...viewport }
|
||||
},
|
||||
resetViewport(viewport: MapViewport = DEFAULT_GUANGMING_VIEWPORT) {
|
||||
this.viewport = { ...viewport }
|
||||
},
|
||||
resetSession(viewport: MapViewport = DEFAULT_GUANGMING_VIEWPORT) {
|
||||
this.categoryCode = null
|
||||
this.selectedPoiId = null
|
||||
this.viewport = { ...viewport }
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user