import paper from "paper" import { useLabelStore, useObjectStore } from "../store" import { usePaperStore } from "../usePaperStore" import { useTopToolsStore } from "../useTopToolsStore" const getTagVisibility = (tagCategory?: string) => { const { showTags, showTagsConfigs } = useTopToolsStore.getState() if (!showTags) return false if (tagCategory === "mask") return showTagsConfigs.includes("外框") if (tagCategory === "point_text") return showTagsConfigs.includes("点ID") return true } const setSelectedItemFalse = (id: number) => { if (!id) return const sameIdItems = usePaperStore.getState().getItemsById(id) sameIdItems.forEach((item) => { if (item.data.type === "mask" || item.data.type === "text") { item.remove() } if (item.data.selected) item.data.selected = false }) } const syncObjectItemsVisibility = (objectId: number, hide: boolean) => { const sameIdItems = usePaperStore.getState().getItemsById(objectId) if (!sameIdItems?.length) return sameIdItems.forEach((item) => { if (hide) { item.visible = false return } if (item.data?.type === "tag") { item.visible = getTagVisibility(item.data?.tag_category) return } item.visible = true }) } export const toggleObjectHideByShortcut = ( imageId: string, operationId: string, objectId: number, hide: boolean ) => { const { updatePathStatus, updateOperationStatus } = useObjectStore.getState() const storeLabel = useLabelStore.getState().label if (hide) { updatePathStatus(imageId + objectId, "HIDE", hide) syncObjectItemsVisibility(objectId, hide) setSelectedItemFalse(objectId) const operationChildren = storeLabel.get(imageId)?.get(operationId) || [] const hasVisibleChild = operationChildren.some((child) => { const item = usePaperStore .getState() .getItemById(child[0]) as paper.Item | null return !!item?.visible }) if (!hasVisibleChild) { updateOperationStatus(imageId + operationId, "HIDE", hide) } return } updateOperationStatus(imageId + operationId, "HIDE", hide) updatePathStatus(imageId + objectId, "HIDE", hide) syncObjectItemsVisibility(objectId, hide) }