This commit is contained in:
@@ -18,6 +18,12 @@ export type GuideModelInitialState = Readonly<{
|
||||
autoFloorSwitchActive: boolean
|
||||
}>
|
||||
|
||||
export type PoiDetailReturnContext = Readonly<{
|
||||
floorId: string
|
||||
resetMode: 'floor-baseline'
|
||||
requestId: number
|
||||
}>
|
||||
|
||||
// The object is frozen so callers cannot accidentally turn a captured baseline into live state.
|
||||
export const GUIDE_MODEL_INITIAL_STATE: GuideModelInitialState = Object.freeze({
|
||||
mode: '3d',
|
||||
@@ -38,8 +44,9 @@ export const GUIDE_MODEL_INITIAL_STATE: GuideModelInitialState = Object.freeze({
|
||||
})
|
||||
|
||||
const initialState = ref<GuideModelInitialState>(GUIDE_MODEL_INITIAL_STATE)
|
||||
const pendingModelResetAfterPoiDetail = ref(false)
|
||||
const pendingModelResetAfterPoiDetail = ref<PoiDetailReturnContext | null>(null)
|
||||
const requestGeneration = ref(0)
|
||||
let poiDetailRequestId = 0
|
||||
|
||||
export const useGuideModelState = () => {
|
||||
const initializeModel = (floorId: string) => {
|
||||
@@ -52,18 +59,24 @@ export const useGuideModelState = () => {
|
||||
return initialState.value
|
||||
}
|
||||
|
||||
const beginPoiDetailReturn = () => {
|
||||
pendingModelResetAfterPoiDetail.value = true
|
||||
const beginPoiDetailReturn = (floorId: string) => {
|
||||
const context = Object.freeze({
|
||||
floorId,
|
||||
resetMode: 'floor-baseline' as const,
|
||||
requestId: ++poiDetailRequestId
|
||||
})
|
||||
pendingModelResetAfterPoiDetail.value = context
|
||||
return context
|
||||
}
|
||||
|
||||
const cancelPoiDetailReturn = () => {
|
||||
pendingModelResetAfterPoiDetail.value = false
|
||||
pendingModelResetAfterPoiDetail.value = null
|
||||
}
|
||||
|
||||
const consumePoiDetailReturn = () => {
|
||||
if (!pendingModelResetAfterPoiDetail.value) return false
|
||||
pendingModelResetAfterPoiDetail.value = false
|
||||
return true
|
||||
const context = pendingModelResetAfterPoiDetail.value
|
||||
pendingModelResetAfterPoiDetail.value = null
|
||||
return context
|
||||
}
|
||||
|
||||
// All async focus/floor operations compare this generation before committing.
|
||||
|
||||
Reference in New Issue
Block a user