Files
labelimage/components/label/useOtherToolsStore.ts
2026-03-10 18:20:50 +08:00

109 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Comment } from "./api/label/typing"
import { create } from "zustand"
import { persist } from "zustand/middleware"
import { useLabelStore } from "./store"
import { useTopToolsStore } from "./useTopToolsStore"
interface OtherToolsState {
showContextMenu: boolean
position: {
top: number
right: number
bottom: number
left: number
}
imageId: string
operationId: string
id: number
setContextMenuId: (id: number) => void
setContextMenuOperationId: (operationId: string) => void
setShowContextMenu: (props: {
showContextMenu: boolean
position: {
top: number
left: number
}
imageId: string
operationId: string
id: number
}) => void
}
const initOtherToolsState = {
showContextMenu: false,
position: {
top: 0,
left: 0,
right: 0,
bottom: 0,
},
imageId: "",
operationId: "",
id: 0,
}
export const useOtherToolsStore = create(
persist<OtherToolsState>(
(set) => ({
showContextMenu: initOtherToolsState.showContextMenu,
position: initOtherToolsState.position,
imageId: initOtherToolsState.imageId,
operationId: initOtherToolsState.operationId,
id: initOtherToolsState.id,
setContextMenuId: (id) =>
set((state: OtherToolsState) => ({
...state,
id,
})),
setContextMenuOperationId: (operationId) =>
set((state: OtherToolsState) => ({
...state,
operationId,
})),
setShowContextMenu: ({
showContextMenu,
position,
imageId,
operationId,
id,
}) => {
if (
showContextMenu &&
useTopToolsStore.getState().currentTimeKey !== "label"
) {
// 打开子属性及批注弹窗时更新当前标注对象detail
const currentDetail = useLabelStore
.getState()
.getLabelDetailDataByKeys(imageId, operationId, id)
const { comment } = currentDetail
const updatedComment = comment.map((item: Comment, index: number) =>
index < comment.length - 1
? item
: {
...item,
comment_type: item.comment_type || 1,
}
)
useLabelStore
.getState()
.updateLabelDetailDataByKeys(imageId, operationId, id, {
...currentDetail,
comment: updatedComment,
})
}
return set((state: OtherToolsState) => ({
...state,
showContextMenu,
position: { ...position, bottom: 0, right: 0 },
imageId,
operationId,
id,
}))
},
}),
{
name: "other-tools",
}
)
)