Files
speckle-server/packages/frontend-2/lib/viewer/composables/setup/dev.ts
T
Kristaps Fabians Geikins 8dbd342a40 feat(fe2): view modes stored in saved views (and elsewhere) (#5320)
* feat(fe2): view modes stored in saved views (and elsewhere)

* lint fixes
2025-08-28 11:40:58 +03:00

93 lines
2.5 KiB
TypeScript

import { ViewerEvent } from '@speckle/viewer'
import {
StateApplyMode,
useApplySerializedState,
useStateSerialization
} from '~/lib/viewer/composables/serialization'
import { useInjectedViewerState } from '~~/lib/viewer/composables/setup'
import { useViewerEventListener } from '~~/lib/viewer/composables/viewer'
import type { SpeckleViewer } from '@speckle/shared'
import { get, isString } from 'lodash-es'
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function useDebugViewerEvents() {
const logger = useLogger()
for (const [key, val] of Object.entries(ViewerEvent)) {
useViewerEventListener(val, (...args) => logger.debug(key, ...args))
}
}
function useDebugViewer() {
const fullViewerState = useInjectedViewerState()
const apply = useApplySerializedState()
const { serialize } = useStateSerialization()
const {
viewer: { instance }
} = fullViewerState
const ensureObj = <O>(obj: O | string): O => {
return isString(obj) ? JSON.parse(obj) : obj
}
const applyState = (
state: SpeckleViewer.ViewerState.SerializedViewerState | string
) => {
return apply(ensureObj(state), StateApplyMode.ThreadFullContextOpen)
}
// Get current viewer instance
window.VIEWER = instance
// Get current viewer state
window.VIEWER_STATE = () => fullViewerState
// Get serialized version of current state as string
window.VIEWER_SERIALIZED_STATE = (...args: Parameters<typeof serialize>) => {
const serialized = serialize(...args)
return JSON.stringify(serialized)
}
// Get serialized version of current state as object
window.VIEWER_SERIALIZED_STATE_OBJECT = (...args: Parameters<typeof serialize>) => {
const serialized = serialize(...args)
return serialized
}
// Apply viewer state
window.APPLY_VIEWER_STATE = (
state: SpeckleViewer.ViewerState.SerializedViewerState
) => applyState(state)
// Apply DD user activity event
window.APPLY_VIEWER_DD_EVENT = (
event:
| {
content: {
attributes: {
context: {
message: { state: SpeckleViewer.ViewerState.SerializedViewerState }
}
}
}
}
| string
) => {
event = ensureObj(event)
const path = 'content.attributes.context.message.state'
const state = get(event, path)
if (!state) {
throw new Error('Cant find serialized state at path: ' + path)
}
return applyState(state)
}
}
export function setupDebugMode() {
if (import.meta.server) return
// useDebugViewerEvents()
useDebugViewer()
}