import { ref } from 'vue' import { autoSetModeCallback, createTemploraryID } from './sys' import { getFuseModel, getFuseModelShowVariable } from './fuse-model' import { custom } from '@/env' import { fetchTaggingPositions, postAddTaggingPosition, postDeleteTaggingPosition, postUpdateTaggingPosition, } from '@/api' import { deleteStoreItem, addStoreItem, updateStoreItem, saveStoreItems, recoverStoreItems } from '@/utils' import type { TaggingPosition, TaggingPositions } from '@/api' import type { Tagging } from './tagging' export type { TaggingPosition, TaggingPositions } export const taggingPositions = ref([]) export const createTaggingPosition = (position: Partial = {}): TaggingPosition => ({ id: createTemploraryID(), taggingId: '', modelId: '', localPos: { x: 0, y: 0, z: 0 }, ...position }) export const getTaggingPositions = (tagging: Tagging) => taggingPositions.value.filter(position => position.taggingId === tagging.id) || [] export const getTaggingPositionIsShow = (position: TaggingPosition) => { const model = getFuseModel(position.modelId) return custom.showTaggings && model && model.loaded && getFuseModelShowVariable(model).value } let bcPositions: TaggingPositions = [] export const getBackupTaggingPositions = () => bcPositions export const backupTaggingPositions = () => { bcPositions = taggingPositions.value.map(position => ({ ...position, localPos: { ...position.localPos }, })) } export const initTaggingPositionsByTagging = async (tagging: Tagging) => { const positions = await fetchTaggingPositions(tagging.id) taggingPositions.value = taggingPositions.value .filter(position => position.taggingId !== tagging.id) .concat(positions) backupTaggingPositions() } export const recoverTaggingPositions = recoverStoreItems(taggingPositions, getBackupTaggingPositions) export const addTaggingPosition = addStoreItem(taggingPositions, postAddTaggingPosition) export const updateTaggingPosition = updateStoreItem(taggingPositions, postUpdateTaggingPosition) export const deleteTaggingPosition = deleteStoreItem(taggingPositions, postDeleteTaggingPosition) export const saveTaggingPositions = saveStoreItems( taggingPositions, getBackupTaggingPositions, { add: addTaggingPosition, update: updateTaggingPosition, delete: deleteTaggingPosition, } ) export const autoSaveTaggingPositions = autoSetModeCallback(taggingPositions, { backup: backupTaggingPositions, recovery: recoverTaggingPositions, save: saveTaggingPositions, })