@labelbee/lb-components 1.2.3-alpha.7 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/components/annotationStepPopover/index.d.ts +1 -0
- package/dist/types/components/checkboxList/index.d.ts +1 -0
- package/dist/types/components/colorTag/index.d.ts +1 -0
- package/dist/types/views/MainView/sidebar/ClearIcon/index.d.ts +1 -0
- package/dist/types/views/MainView/sidebar/ImgAttributeInfo/index.d.ts +1 -0
- package/dist/types/views/MainView/sidebar/TextAreaFormat/index.d.ts +1 -0
- package/dist/types/views/MainView/sidebar/ToolStyle/index.d.ts +1 -0
- package/dist/types/views/MainView/toolFooter/HiddenTips/index.d.ts +1 -0
- package/dist/types/views/MainView/toolFooter/PageNumber/index.d.ts +1 -0
- package/es/components/AnnotationView/index.js.map +1 -1
- package/es/store/annotation/actionCreators.js.map +1 -1
- package/es/store/annotation/reducer.js.map +1 -1
- package/es/utils/ToolStyleUtils.js.map +1 -1
- package/es/views/MainView/toolHeader/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/AnnotationView/index.tsx"],"sourcesContent":["/**\n * 用于标注查看模式\n * @author laoluo\n */\n\nimport React, { useEffect, useRef, useImperativeHandle, useState } from 'react';\nimport { ViewOperation, ImgUtils } from '@labelbee/lb-annotation';\nimport { Spin } from 'antd/es';\n\ninterface IProps {\n src: string; // 图片路径\n size: {\n width: number;\n height: number;\n };\n style: {\n color?: string;\n fill?: string;\n thickness?: number;\n };\n annotations: any[]; // TODO\n zoomChange?: (zoom: number) => void;\n backgroundStyle: React.CSSProperties;\n onChange?: (type: 'hover' | 'selected', ids: string[]) => void;\n\n showLoading?: boolean;\n}\n\nconst DEFAULT_SIZE = {\n width: 1280,\n height: 720,\n};\n\nconst AnnotationView = (props: IProps, ref: any) => {\n const {\n size = DEFAULT_SIZE,\n src,\n annotations = [],\n style = {\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/AnnotationView/index.tsx"],"sourcesContent":["/**\n * 用于标注查看模式\n * @author laoluo\n */\n\nimport React, { useEffect, useRef, useImperativeHandle, useState } from 'react';\nimport { ViewOperation, ImgUtils } from '@labelbee/lb-annotation';\nimport { Spin } from 'antd/es';\n\ninterface IProps {\n src: string; // 图片路径\n size: {\n width: number;\n height: number;\n };\n style: {\n color?: string;\n fill?: string;\n thickness?: number;\n };\n annotations: any[]; // TODO\n zoomChange?: (zoom: number) => void;\n backgroundStyle: React.CSSProperties;\n onChange?: (type: 'hover' | 'selected', ids: string[]) => void;\n\n showLoading?: boolean;\n}\n\nconst DEFAULT_SIZE = {\n width: 1280,\n height: 720,\n};\n\nconst AnnotationView = (props: IProps, ref: any) => {\n const {\n size = DEFAULT_SIZE,\n src,\n annotations = [],\n style = {\n color: 'blue',\n thickness: 5,\n },\n zoomChange,\n backgroundStyle = {},\n onChange,\n showLoading = false,\n } = props;\n const [loading, setLoading] = useState(false);\n const annotationRef = useRef<HTMLDivElement>(null);\n const viewOperation = useRef<ViewOperation>();\n\n useImperativeHandle(\n ref,\n () => {\n const toolInstance = viewOperation.current;\n if (!toolInstance) {\n return {};\n }\n\n return {\n zoomIn: () => toolInstance.zoomChanged(true), // 放大\n zoomOut: () => toolInstance.zoomChanged(false), // 缩小\n initImgPos: () => toolInstance.initImgPos(),\n toolInstance,\n };\n },\n [viewOperation.current],\n );\n\n useEffect(() => {\n if (annotationRef.current) {\n viewOperation.current = new ViewOperation({\n container: annotationRef.current,\n size,\n style,\n annotations,\n config: '{}', // TODO,暂时不需要\n });\n\n viewOperation.current.init();\n }\n\n return () => {\n viewOperation.current?.destroy();\n };\n }, []);\n\n useEffect(() => {\n if (viewOperation.current) {\n setLoading(true);\n viewOperation.current?.setLoading(true);\n ImgUtils.load(src)\n .then((imgNode: HTMLImageElement) => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n\n viewOperation.current?.setImgNode(imgNode);\n })\n .catch(() => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n });\n }\n }, [src]);\n\n /**\n * 基础数据绘制监听\n */\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current.updateData(annotations);\n }\n }, [annotations]);\n\n /** 窗口大小监听 */\n useEffect(() => {\n const toolInstance = viewOperation.current;\n\n if (toolInstance?.setSize) {\n toolInstance.setSize(size);\n }\n }, [size?.width, size?.height]);\n\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current?.on('onChange', (...args: any) => {\n onChange?.apply(null, args);\n });\n\n viewOperation.current?.on('renderZoom', (zoom: number) => {\n if (zoomChange) {\n zoomChange(zoom);\n }\n });\n }\n return () => {\n viewOperation.current?.unbindAll('onChange');\n viewOperation.current?.unbindAll('renderZoom');\n };\n }, [zoomChange, onChange]);\n\n const mainRender = <div ref={annotationRef} style={{ ...size, ...backgroundStyle }} />;\n\n return (\n <Spin spinning={showLoading || loading} delay={300}>\n {mainRender}\n </Spin>\n );\n\n // return mainRender;\n};\n\nexport default React.forwardRef(AnnotationView);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AAAA;AAGV,MAAM,iBAAiB,CAAC,OAAe,QAAa;AAClD,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA,cAAc;AAAA,IACd,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA;AAAA,IAEb;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA,cAAc;AAAA,MACZ;AACJ,QAAM,CAAC,SAAS,cAAc,SAAS;AACvC,QAAM,gBAAgB,OAAuB;AAC7C,QAAM,gBAAgB;AAEtB,sBACE,KACA,MAAM;AACJ,UAAM,eAAe,cAAc;AACnC,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA;AAGT,WAAO;AAAA,MACL,QAAQ,MAAM,aAAa,YAAY;AAAA,MACvC,SAAS,MAAM,aAAa,YAAY;AAAA,MACxC,YAAY,MAAM,aAAa;AAAA,MAC/B;AAAA;AAAA,KAGJ,CAAC,cAAc;AAGjB,YAAU,MAAM;AACd,QAAI,cAAc,SAAS;AACzB,oBAAc,UAAU,IAAI,cAAc;AAAA,QACxC,WAAW,cAAc;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA;AAGV,oBAAc,QAAQ;AAAA;AAGxB,WAAO,MAAM;AAlFjB;AAmFM,0BAAc,YAAd,mBAAuB;AAAA;AAAA,KAExB;AAEH,YAAU,MAAM;AAvFlB;AAwFI,QAAI,cAAc,SAAS;AACzB,iBAAW;AACX,0BAAc,YAAd,mBAAuB,WAAW;AAClC,eAAS,KAAK,KACX,KAAK,CAAC,YAA8B;AA5F7C;AA6FU,6BAAc,YAAd,oBAAuB,WAAW;AAClC,mBAAW;AAEX,4BAAc,YAAd,mBAAuB,WAAW;AAAA,SAEnC,MAAM,MAAM;AAlGrB;AAmGU,6BAAc,YAAd,oBAAuB,WAAW;AAClC,mBAAW;AAAA;AAAA;AAAA,KAGhB,CAAC;AAKJ,YAAU,MAAM;AACd,QAAI,cAAc,SAAS;AACzB,oBAAc,QAAQ,WAAW;AAAA;AAAA,KAElC,CAAC;AAGJ,YAAU,MAAM;AACd,UAAM,eAAe,cAAc;AAEnC,QAAI,6CAAc,SAAS;AACzB,mBAAa,QAAQ;AAAA;AAAA,KAEtB,CAAC,6BAAM,OAAO,6BAAM;AAEvB,YAAU,MAAM;AA3HlB;AA4HI,QAAI,cAAc,SAAS;AACzB,0BAAc,YAAd,mBAAuB,GAAG,YAAY,IAAI,SAAc;AACtD,6CAAU,MAAM,MAAM;AAAA;AAGxB,0BAAc,YAAd,mBAAuB,GAAG,cAAc,CAAC,SAAiB;AACxD,YAAI,YAAY;AACd,qBAAW;AAAA;AAAA;AAAA;AAIjB,WAAO,MAAM;AAvIjB;AAwIM,2BAAc,YAAd,oBAAuB,UAAU;AACjC,2BAAc,YAAd,oBAAuB,UAAU;AAAA;AAAA,KAElC,CAAC,YAAY;AAEhB,QAAM,iDAAc,OAAD;AAAA,IAAK,KAAK;AAAA,IAAe,OAAO,kCAAK,OAAS;AAAA;AAEjE,6CACG,MAAD;AAAA,IAAM,UAAU,eAAe;AAAA,IAAS,OAAO;AAAA,KAC5C;AAAA;AAOP,YAAe,MAAM,WAAW;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actionCreators.js","sources":["../../../src/store/annotation/actionCreators.ts"],"sourcesContent":["import { ANNOTATION_ACTIONS } from '@/store/Actions';\nimport { IStepInfo } from '@/types/step';\nimport { GetFileData, IFileItem, OnSave, OnSubmit } from '@/types/data';\nimport { AnnotationActionTypes, ToolInstance } from './types';\nimport { LoadImageAndFileData, getStepConfig } from './reducer';\nimport { ESubmitType } from '@/constant';\nimport { EPageTurningOperation } from '@/data/enums/AnnotationSize';\nimport PageOperator from '@/utils/PageOperator';\nimport { jsonParser } from '@/utils';\n\nconst dispatchTasks = (dispatch: any, tasks: any[]) => tasks.map((task) => dispatch(task));\n\n/**\n * @param {pageTurningOperation} pageTurningOperation 翻页操作\n * @returns {ESubmitType} 提数据交类型\n */\nconst getSubmitByPageOperation = (pageTurningOperation: EPageTurningOperation) => {\n if (pageTurningOperation === EPageTurningOperation.Forward) {\n return ESubmitType.Forward;\n }\n\n if (pageTurningOperation === EPageTurningOperation.Backward) {\n return ESubmitType.Backward;\n }\n\n if (pageTurningOperation === EPageTurningOperation.Jump) {\n return ESubmitType.Jump;\n }\n\n return ESubmitType.Forward;\n};\n\nconst getBasicIndex = (annotationStore: any, basicIndex: number) => {\n const {imgList, imgIndex} = annotationStore;\n const { dataSourceStep } = getStepConfig(annotationStore.stepList, annotationStore.step);\n let backwardResult = jsonParser(imgList[imgIndex - 1].result)\n const index = backwardResult[`step_${dataSourceStep}`]?.result?.length - 1\n return index || basicIndex\n}\n\nexport function UpdateToolInstance(toolInstance: ToolInstance): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_TOOL_INSTANCE,\n payload: {\n toolInstance,\n },\n };\n}\n\nexport function UpdateImgList(imgList: IFileItem[]): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_IMG_LIST,\n payload: {\n imgList,\n },\n };\n}\n\nexport function UpdateAnnotationConfig(config: string): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ANNOTATION_CONFIG,\n payload: {\n config,\n },\n };\n}\n\nexport function SetTaskConfig({\n stepList,\n step,\n}: {\n stepList: IStepInfo[];\n step: number;\n}): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.SET_TASK_CONFIG,\n payload: {\n stepList,\n step,\n },\n };\n}\n\nexport function UpdateOnSubmit(onSubmit: OnSubmit): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ON_SUBMIT,\n payload: {\n onSubmit,\n },\n };\n}\n\nexport function UpdateOnSave(onSave: OnSave): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ON_SAVE,\n payload: {\n onSave,\n },\n };\n}\n\nexport function UpdateGetFileData(getFileData: GetFileData): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_GET_FILE_DATA,\n payload: {\n getFileData,\n },\n };\n}\n\nexport function UpdateRotate(): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ROTATE,\n };\n}\n\nexport function CopyBackWordResult(): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.COPY_BACKWARD_RESULT,\n };\n}\n\n/**\n * 初始化任务数据\n * @param param0\n */\nexport function InitTaskData({\n onSubmit,\n onSave,\n getFileData,\n imgList,\n step,\n stepList,\n initialIndex,\n}: any): any {\n const tasks: any[] = [];\n\n if (onSubmit) {\n tasks.push(UpdateOnSubmit(onSubmit));\n }\n if (onSave) {\n tasks.push(UpdateOnSave(onSave));\n }\n\n if (getFileData) {\n tasks.push(UpdateGetFileData(getFileData));\n }\n\n tasks.push(UpdateImgList(imgList));\n tasks.push(SetTaskConfig({ stepList, step }));\n tasks.push({\n type: ANNOTATION_ACTIONS.CALC_STEP_PROGRESS,\n });\n tasks.push({\n type: ANNOTATION_ACTIONS.INIT_TOOL,\n });\n\n tasks.push(LoadImageAndFileData(initialIndex));\n\n return (dispatch: any) => dispatchTasks(dispatch, tasks);\n}\n\n/** 获取下一步的step */\nconst getNextStep = (step: number, stepList: any) => {\n const currentStepIndex = stepList?.findIndex((element: any) => element?.step === step);\n return stepList[currentStepIndex + 1]?.step;\n};\n\n/** 切换到下一步 */\nexport const ToNextStep = (pageNumber?: number) => (dispatch: any, getState: any) => {\n const { annotation } = getState();\n const { step, stepList } = annotation;\n const nextStep = getNextStep(step, stepList);\n return [dispatch(UpdateProcessingStep(nextStep, pageNumber))];\n};\n\n/**\n * 更新当前操作的步骤\n * @param {number} toStep\n */\nexport const UpdateProcessingStep = (toStep: number, index?: number) => (dispatch: any, state: any) => {\n const imgIndex = state()?.annotation?.imgIndex ?? 0;\n return [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({\n type: ANNOTATION_ACTIONS.SUBMIT_FILE_DATA,\n payload: { submitType: ESubmitType.StepChanged },\n }),\n // ToSubmitFileData(ESubmitType.StepChanged),\n dispatch({ type: ANNOTATION_ACTIONS.SET_STEP, payload: { toStep } }),\n dispatch({ type: ANNOTATION_ACTIONS.CALC_STEP_PROGRESS }),\n // 切换步骤保持图片位置\n dispatch(LoadImageAndFileData(index ?? imgIndex, 0)),\n ];\n};\n\n/**\n * 提交当前的文件数据\n * @param submitType\n */\nexport const ToSubmitFileData = (submitType: ESubmitType) => (dispatch: any) =>\n [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_FILE_DATA, payload: { submitType } }),\n ];\n\n/**\n * 提交数据并且切换标注文件\n * @param dispatch\n * @param nextIndex\n * @param submitType\n * @param nextBasicIndex\n */\nconst SubmitAndChangeFileIndex = (\n dispatch: any,\n nextIndex: number,\n submitType: ESubmitType,\n nextBasicIndex?: number,\n) => [\n dispatch(ToSubmitFileData(submitType)),\n dispatch(LoadImageAndFileData(nextIndex, nextBasicIndex)),\n];\n\nconst ChangeBasicIndex = (dispatch: any, nextBasicIndex: number) => [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({ type: ANNOTATION_ACTIONS.SET_BASIC_INDEX, payload: { basicIndex: nextBasicIndex } }),\n];\n\nconst ChangeTriggerEventAfterIndexChanged = (\n dispatch: any,\n triggerEventAfterIndexChanged: boolean,\n) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED,\n payload: {\n triggerEventAfterIndexChanged,\n },\n });\n};\n\n/** 向前翻页 */\nexport const PageBackward =\n (triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Backward,\n triggerEventAfterIndexChanged,\n );\n };\n\n/** 向后翻页 */\nexport const PageForward =\n (triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Forward,\n triggerEventAfterIndexChanged,\n );\n };\n\n/**\n * 跳到指定文件索引\n * @param toIndex\n */\nexport const PageJump =\n (toIndex: number, triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n if (toIndex === getState().imgIndex) {\n return;\n }\n\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Jump,\n triggerEventAfterIndexChanged,\n toIndex,\n );\n };\n\n/**\n * 判断翻页还是切换依赖数据\n * @param dispatch\n * @param getState\n * @param pageTurningOperation\n * @param toIndex\n */\nexport const DispatcherTurning = (\n dispatch: any,\n getState: any,\n pageTurningOperation: EPageTurningOperation,\n triggerEventAfterIndexChanged = false,\n toIndex?: number,\n) => {\n const annotationStore = getState().annotation;\n const { fileIndexChanged, fileIndex, basicIndexChanged, basicIndex } =\n PageOperator.getNextPageInfo(pageTurningOperation, annotationStore, toIndex);\n\n const submitType: ESubmitType = getSubmitByPageOperation(pageTurningOperation);\n\n ChangeTriggerEventAfterIndexChanged(dispatch, triggerEventAfterIndexChanged);\n\n if (fileIndexChanged) {\n const index = submitType === ESubmitType.Backward ? getBasicIndex(annotationStore, basicIndex) : basicIndex;\n return SubmitAndChangeFileIndex(dispatch, fileIndex, submitType, index);\n }\n\n if (basicIndexChanged) {\n return ChangeBasicIndex(dispatch, basicIndex);\n }\n\n return dispatch(ToSubmitFileData(submitType));\n};\n\n/**\n * 保存当前页数据\n * */\nexport const ChangeSave = (dispatch: Function) => {\n dispatch(ToSubmitFileData(ESubmitType.Save));\n dispatch({ type: ANNOTATION_ACTIONS.SAVE_RESULT });\n};\n\nexport const SetAnnotationLoading = (dispatch: Function, loading: boolean) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_LOADING,\n payload: {\n loading,\n },\n });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actionCreators.js","sources":["../../../src/store/annotation/actionCreators.ts"],"sourcesContent":["import { ANNOTATION_ACTIONS } from '@/store/Actions';\nimport { IStepInfo } from '@/types/step';\nimport { GetFileData, IFileItem, OnSave, OnSubmit } from '@/types/data';\nimport { AnnotationActionTypes, ToolInstance } from './types';\nimport { LoadImageAndFileData, getStepConfig } from './reducer';\nimport { ESubmitType } from '@/constant';\nimport { EPageTurningOperation } from '@/data/enums/AnnotationSize';\nimport PageOperator from '@/utils/PageOperator';\nimport { jsonParser } from '@/utils';\n\nconst dispatchTasks = (dispatch: any, tasks: any[]) => tasks.map((task) => dispatch(task));\n\n/**\n * @param {pageTurningOperation} pageTurningOperation 翻页操作\n * @returns {ESubmitType} 提数据交类型\n */\nconst getSubmitByPageOperation = (pageTurningOperation: EPageTurningOperation) => {\n if (pageTurningOperation === EPageTurningOperation.Forward) {\n return ESubmitType.Forward;\n }\n\n if (pageTurningOperation === EPageTurningOperation.Backward) {\n return ESubmitType.Backward;\n }\n\n if (pageTurningOperation === EPageTurningOperation.Jump) {\n return ESubmitType.Jump;\n }\n\n return ESubmitType.Forward;\n};\n\nconst getBasicIndex = (annotationStore: any, basicIndex: number) => {\n const {imgList, imgIndex} = annotationStore;\n const { dataSourceStep } = getStepConfig(annotationStore.stepList, annotationStore.step);\n let backwardResult = jsonParser(imgList[imgIndex - 1].result)\n const index = backwardResult[`step_${dataSourceStep}`]?.result?.length - 1\n return index || basicIndex\n}\n\nexport function UpdateToolInstance(toolInstance: ToolInstance): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_TOOL_INSTANCE,\n payload: {\n toolInstance,\n },\n };\n}\n\nexport function UpdateImgList(imgList: IFileItem[]): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_IMG_LIST,\n payload: {\n imgList,\n },\n };\n}\n\nexport function UpdateAnnotationConfig(config: string): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ANNOTATION_CONFIG,\n payload: {\n config,\n },\n };\n}\n\nexport function SetTaskConfig({\n stepList,\n step,\n}: {\n stepList: IStepInfo[];\n step: number;\n}): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.SET_TASK_CONFIG,\n payload: {\n stepList,\n step,\n },\n };\n}\n\nexport function UpdateOnSubmit(onSubmit: OnSubmit): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ON_SUBMIT,\n payload: {\n onSubmit,\n },\n };\n}\n\nexport function UpdateOnSave(onSave: OnSave): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ON_SAVE,\n payload: {\n onSave,\n },\n };\n}\n\nexport function UpdateGetFileData(getFileData: GetFileData): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_GET_FILE_DATA,\n payload: {\n getFileData,\n },\n };\n}\n\nexport function UpdateRotate(): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.UPDATE_ROTATE,\n };\n}\n\nexport function CopyBackWordResult(): AnnotationActionTypes {\n return {\n type: ANNOTATION_ACTIONS.COPY_BACKWARD_RESULT,\n };\n}\n\n/**\n * 初始化任务数据\n * @param param0\n */\nexport function InitTaskData({\n onSubmit,\n onSave,\n getFileData,\n imgList,\n step,\n stepList,\n initialIndex,\n}: any): any {\n const tasks: any[] = [];\n\n if (onSubmit) {\n tasks.push(UpdateOnSubmit(onSubmit));\n }\n if (onSave) {\n tasks.push(UpdateOnSave(onSave));\n }\n\n if (getFileData) {\n tasks.push(UpdateGetFileData(getFileData));\n }\n\n tasks.push(UpdateImgList(imgList));\n tasks.push(SetTaskConfig({ stepList, step }));\n tasks.push({\n type: ANNOTATION_ACTIONS.CALC_STEP_PROGRESS,\n });\n tasks.push({\n type: ANNOTATION_ACTIONS.INIT_TOOL,\n });\n\n tasks.push(LoadImageAndFileData(initialIndex));\n\n return (dispatch: any) => dispatchTasks(dispatch, tasks);\n}\n\n/** 切换到下一步 */\nexport const ToNextStep = (pageNumber?: number) => (dispatch: any, getState: any) => {\n const { step } = getState().annotation;\n return [dispatch(UpdateProcessingStep(step + 1, pageNumber))];\n};\n\n/**\n * 更新当前操作的步骤\n * @param {number} toStep\n */\nexport const UpdateProcessingStep = (toStep: number, index?: number) => (dispatch: any, state: any) => {\n const imgIndex = state()?.annotation?.imgIndex ?? 0;\n return [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({\n type: ANNOTATION_ACTIONS.SUBMIT_FILE_DATA,\n payload: { submitType: ESubmitType.StepChanged },\n }),\n // ToSubmitFileData(ESubmitType.StepChanged),\n dispatch({ type: ANNOTATION_ACTIONS.SET_STEP, payload: { toStep } }),\n dispatch({ type: ANNOTATION_ACTIONS.CALC_STEP_PROGRESS }),\n // 切换步骤保持图片位置\n dispatch(LoadImageAndFileData(index ?? imgIndex, 0)),\n ];\n};\n\n/**\n * 提交当前的文件数据\n * @param submitType\n */\nexport const ToSubmitFileData = (submitType: ESubmitType) => (dispatch: any) =>\n [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_FILE_DATA, payload: { submitType } }),\n ];\n\n/**\n * 提交数据并且切换标注文件\n * @param dispatch\n * @param nextIndex\n * @param submitType\n * @param nextBasicIndex\n */\nconst SubmitAndChangeFileIndex = (\n dispatch: any,\n nextIndex: number,\n submitType: ESubmitType,\n nextBasicIndex?: number,\n) => [\n dispatch(ToSubmitFileData(submitType)),\n dispatch(LoadImageAndFileData(nextIndex, nextBasicIndex)),\n];\n\nconst ChangeBasicIndex = (dispatch: any, nextBasicIndex: number) => [\n dispatch({ type: ANNOTATION_ACTIONS.SUBMIT_RESULT }),\n dispatch({ type: ANNOTATION_ACTIONS.SET_BASIC_INDEX, payload: { basicIndex: nextBasicIndex } }),\n];\n\nconst ChangeTriggerEventAfterIndexChanged = (\n dispatch: any,\n triggerEventAfterIndexChanged: boolean,\n) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED,\n payload: {\n triggerEventAfterIndexChanged,\n },\n });\n};\n\n/** 向前翻页 */\nexport const PageBackward =\n (triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Backward,\n triggerEventAfterIndexChanged,\n );\n };\n\n/** 向后翻页 */\nexport const PageForward =\n (triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Forward,\n triggerEventAfterIndexChanged,\n );\n };\n\n/**\n * 跳到指定文件索引\n * @param toIndex\n */\nexport const PageJump =\n (toIndex: number, triggerEventAfterIndexChanged = false) =>\n (dispatch: any, getState: any) => {\n if (toIndex === getState().imgIndex) {\n return;\n }\n\n return DispatcherTurning(\n dispatch,\n getState,\n EPageTurningOperation.Jump,\n triggerEventAfterIndexChanged,\n toIndex,\n );\n };\n\n/**\n * 判断翻页还是切换依赖数据\n * @param dispatch\n * @param getState\n * @param pageTurningOperation\n * @param toIndex\n */\nexport const DispatcherTurning = (\n dispatch: any,\n getState: any,\n pageTurningOperation: EPageTurningOperation,\n triggerEventAfterIndexChanged = false,\n toIndex?: number,\n) => {\n const annotationStore = getState().annotation;\n const { fileIndexChanged, fileIndex, basicIndexChanged, basicIndex } =\n PageOperator.getNextPageInfo(pageTurningOperation, annotationStore, toIndex);\n\n const submitType: ESubmitType = getSubmitByPageOperation(pageTurningOperation);\n\n ChangeTriggerEventAfterIndexChanged(dispatch, triggerEventAfterIndexChanged);\n\n if (fileIndexChanged) {\n const index = submitType === ESubmitType.Backward ? getBasicIndex(annotationStore, basicIndex) : basicIndex;\n return SubmitAndChangeFileIndex(dispatch, fileIndex, submitType, index);\n }\n\n if (basicIndexChanged) {\n return ChangeBasicIndex(dispatch, basicIndex);\n }\n\n return dispatch(ToSubmitFileData(submitType));\n};\n\n/**\n * 保存当前页数据\n * */\nexport const ChangeSave = (dispatch: Function) => {\n dispatch(ToSubmitFileData(ESubmitType.Save));\n dispatch({ type: ANNOTATION_ACTIONS.SAVE_RESULT });\n};\n\nexport const SetAnnotationLoading = (dispatch: Function, loading: boolean) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_LOADING,\n payload: {\n loading,\n },\n });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.js","sources":["../../../src/store/annotation/reducer.ts"],"sourcesContent":["import { ANNOTATION_ACTIONS } from '@/store/Actions';\nimport _ from 'lodash';\nimport { composeResultWithBasicImgInfo, composeResult } from '@/utils/data';\nimport { jsonParser } from '@/utils';\nimport StepUtils from '@/utils/StepUtils';\nimport AnnotationDataUtils from '@/utils/AnnotationDataUtils';\nimport { ConfigUtils } from '@/utils/ConfigUtils';\nimport styleString from '@/constant/styleString';\nimport { getFormatSize } from '@/components/customResizeHook';\nimport { AnnotationEngine, CommonToolUtils, ImgUtils } from '@labelbee/lb-annotation';\nimport { AnnotationState, AnnotationActionTypes } from './types';\nimport { message } from 'antd/es';\nimport { SetAnnotationLoading } from './actionCreators';\n\nexport const getStepConfig = (stepList: any[], step: number) =>\n stepList.find((i) => i.step === step);\n\nconst initialState: AnnotationState = {\n annotationEngine: null,\n toolInstance: null,\n imgList: [],\n config: '{}',\n imgIndex: -1,\n basicIndex: 0,\n imgPageSize: 1,\n step: 1,\n stepList: [],\n imgNode: new Image(),\n basicResultList: [],\n resultList: [],\n stepProgress: 0,\n loading: false,\n triggerEventAfterIndexChanged: false,\n};\n\n/**\n * 获取当前文件列表的总页数\n * @param state\n */\nexport const getTotalPage = (state: AnnotationState) => {\n const { imgList, imgPageSize } = state;\n return Math.ceil(imgList.length / imgPageSize);\n};\n\nconst calcStepProgress = (fileList: any[], step: number) =>\n fileList.reduce((pre, i) => {\n const resultStr = i.result;\n const resultObject = jsonParser(resultStr);\n if (resultObject[`step_${step}`]) {\n return pre + 1;\n }\n return pre;\n }, 0) / fileList.length;\n\nconst updateToolInstance = (annotation: AnnotationState, imgNode: HTMLImageElement) => {\n const { step, stepList } = annotation;\n const stepConfig = StepUtils.getCurrentStepInfo(step, stepList);\n const config = ConfigUtils.jsonParser(stepConfig.config);\n\n const container = document.getElementById('toolContainer');\n\n if (!container) {\n throw `Not exist dom named id-toolContainer`;\n }\n\n const canvasSize = getFormatSize({ width: window.innerWidth, height: window.innerHeight });\n const annotationEngine = new AnnotationEngine({\n container,\n toolName: stepConfig.tool,\n size: canvasSize,\n imgNode,\n config,\n style: JSON.parse(styleString),\n });\n\n return { toolInstance: annotationEngine.toolInstance, annotationEngine };\n};\n\n/**\n * 初始化imgNode并加载数据\n * @param nextIndex\n * @param nextBasicIndex\n */\nexport const LoadImageAndFileData =\n (nextIndex: number, nextBasicIndex?: number) => async (dispatch: any, getState: any) => {\n const { getFileData, imgList, toolInstance } = getState().annotation;\n SetAnnotationLoading(dispatch, true);\n\n /** 支持外部传入获取文件接口 */\n if (getFileData) {\n const fileData = await getFileData(imgList[nextIndex], nextIndex);\n dispatch({\n type: ANNOTATION_ACTIONS.SET_FILE_DATA,\n payload: {\n fileData,\n index: nextIndex,\n },\n });\n }\n\n const { url } = imgList[nextIndex];\n\n return ImgUtils.load(url)\n .then((imgNode) => {\n SetAnnotationLoading(dispatch, false);\n\n dispatch({\n type: ANNOTATION_ACTIONS.LOAD_FILE_DATA,\n payload: {\n imgNode,\n nextIndex,\n nextBasicIndex,\n },\n });\n })\n .catch(() => {\n SetAnnotationLoading(dispatch, false);\n toolInstance.setErrorImg();\n dispatch({\n type: ANNOTATION_ACTIONS.LOAD_FILE_DATA,\n payload: {\n nextIndex,\n nextBasicIndex,\n },\n });\n });\n };\n\nexport const annotationReducer = (\n state = initialState,\n action: AnnotationActionTypes,\n): AnnotationState => {\n switch (action.type) {\n case ANNOTATION_ACTIONS.UPDATE_TOOL_INSTANCE: {\n return {\n ...state,\n toolInstance: action.payload.toolInstance,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_IMG_LIST: {\n return {\n ...state,\n imgList: action.payload.imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.CALC_STEP_PROGRESS: {\n const { imgList, step } = state;\n\n const stepProgress = calcStepProgress(imgList, step);\n\n return {\n ...state,\n stepProgress,\n };\n }\n\n case ANNOTATION_ACTIONS.SUBMIT_FILE_DATA: {\n const { imgList, imgIndex, step, stepList, toolInstance, onSubmit, resultList } = state;\n if (!toolInstance) {\n return state;\n }\n\n const oldResultString = imgList[imgIndex]?.result || '';\n const [, basicImgInfo] = toolInstance.exportData();\n\n const resultWithBasicInfo = composeResultWithBasicImgInfo(oldResultString, basicImgInfo);\n const newResultString = composeResult(\n resultWithBasicInfo,\n { step, stepList },\n { rect: resultList },\n );\n\n imgList[imgIndex].result = AnnotationDataUtils.dataCorrection(\n newResultString,\n oldResultString,\n step,\n stepList,\n );\n\n if (onSubmit) {\n onSubmit([imgList[imgIndex]], action.payload?.submitType, imgIndex);\n }\n\n const stepProgress = calcStepProgress(imgList, step);\n return {\n ...state,\n stepProgress,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.SAVE_RESULT: {\n const { imgList, imgIndex, onSave } = state;\n onSave?.(imgList[imgIndex], imgIndex, imgList);\n return {\n ...state,\n };\n }\n\n case ANNOTATION_ACTIONS.SUBMIT_RESULT: {\n const { imgList, basicIndex, resultList, annotationEngine, basicResultList } = state;\n if (!annotationEngine) {\n return state;\n }\n\n const [exportResult] = annotationEngine.toolInstance.exportData();\n\n let previousResultList = exportResult;\n\n if (basicResultList?.length > 0) {\n const sourceID = basicResultList[basicIndex]?.id;\n const newResultData = exportResult.map((i: any) => ({ ...i, sourceID }));\n previousResultList = _.cloneDeep(resultList).filter((i: any) => i.sourceID !== sourceID);\n previousResultList.push(...newResultData);\n }\n\n return {\n ...state,\n resultList: previousResultList,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_BASIC_INDEX: {\n const {\n toolInstance,\n step,\n imgList,\n imgIndex,\n stepList,\n annotationEngine,\n resultList,\n basicResultList,\n } = state;\n\n if (!toolInstance || !annotationEngine) {\n return state;\n }\n\n const nextBasicIndex = action.payload.basicIndex;\n const sourceID = basicResultList[nextBasicIndex]?.id;\n\n const fileResult = jsonParser(imgList[imgIndex]?.result);\n const result = (resultList || []).filter((i) => i.sourceID === sourceID);\n\n const stepConfig = getStepConfig(stepList, step);\n\n const { dataSourceStep, tool } = stepConfig;\n const dependStepConfig = getStepConfig(stepList, dataSourceStep);\n let stepBasicResultList = [];\n\n if (dataSourceStep && tool) {\n stepBasicResultList = fileResult[`step_${dataSourceStep}`]?.result;\n\n if (stepBasicResultList?.length > 0) {\n annotationEngine.setBasicInfo(dependStepConfig.tool, stepBasicResultList[nextBasicIndex]);\n annotationEngine.launchOperation();\n } else {\n annotationEngine.setBasicInfo(dependStepConfig.tool);\n annotationEngine.forbidOperation();\n message.info('当前文件不存在依赖数据');\n }\n }\n\n toolInstance.setResult(result);\n toolInstance.history.initRecord(result, true);\n\n return {\n ...state,\n basicIndex: nextBasicIndex,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED: {\n const { triggerEventAfterIndexChanged } = action.payload;\n return {\n ...state,\n triggerEventAfterIndexChanged: !!triggerEventAfterIndexChanged,\n };\n }\n\n case ANNOTATION_ACTIONS.LOAD_FILE_DATA: {\n const { imgList, step, toolInstance, annotationEngine, stepList } = state;\n if (!toolInstance || !annotationEngine) {\n return state;\n }\n\n const currentStepInfo = StepUtils.getCurrentStepInfo(step, stepList);\n\n const { nextIndex, imgNode, nextBasicIndex, imgError } = action.payload;\n const basicIndex = nextBasicIndex ?? 0;\n\n const fileResult = jsonParser(imgList[nextIndex]?.result);\n\n const stepResult = fileResult[`step_${step}`];\n\n const isInitData = !stepResult; // 是否为初始化数据\n\n const basicImgInfo = {\n rotate: fileResult.rotate ?? 0,\n valid: fileResult.valid ?? true,\n };\n\n if (imgNode && imgError !== true) {\n annotationEngine.setImgNode(imgNode, basicImgInfo);\n }\n\n const stepConfig = getStepConfig(stepList, step);\n\n const { dataSourceStep, tool } = stepConfig;\n const dependStepConfig = getStepConfig(stepList, dataSourceStep);\n const hasDataSourceStep = dataSourceStep && tool;\n const stepBasicResultList = fileResult[`step_${dataSourceStep}`]?.result ?? [];\n\n const result = AnnotationDataUtils.getInitialResultList(\n stepResult?.result,\n toolInstance,\n stepConfig,\n stepBasicResultList,\n isInitData,\n );\n\n annotationEngine.launchOperation();\n\n if (hasDataSourceStep) {\n if (stepBasicResultList?.length > 0) {\n annotationEngine.setBasicInfo(dependStepConfig.tool, stepBasicResultList[basicIndex]);\n } else {\n // TODO: 禁用绘制交互,有无依赖之间的操作切换\n annotationEngine.setBasicInfo(dependStepConfig.tool);\n annotationEngine.forbidOperation();\n message.info('当前文件不存在依赖数据');\n }\n }\n\n // TODO,非查看模式才允许添加数据\n if (currentStepInfo.tool !== 'check') {\n const sourceID = stepBasicResultList[basicIndex]?.id ?? '';\n const resultForBasicIndex = hasDataSourceStep\n ? result.filter((i: { sourceID: string | number }) =>\n CommonToolUtils.isSameSourceID(i.sourceID, sourceID),\n )\n : result;\n toolInstance.setResult(resultForBasicIndex);\n toolInstance.history.initRecord(result, true);\n }\n\n return {\n ...state,\n imgIndex: nextIndex,\n basicIndex,\n basicResultList: stepBasicResultList,\n resultList: result,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ANNOTATION_CONFIG: {\n return {\n ...state,\n config: action.payload.config ?? '{}',\n };\n }\n\n case ANNOTATION_ACTIONS.SET_TASK_CONFIG: {\n const { stepList, step } = action.payload;\n return {\n ...state,\n stepList,\n step,\n };\n }\n\n case ANNOTATION_ACTIONS.INIT_TOOL: {\n const { imgNode } = state;\n const { toolInstance, annotationEngine } = updateToolInstance(state, imgNode);\n return {\n ...state,\n toolInstance,\n annotationEngine,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ON_SUBMIT: {\n return {\n ...state,\n onSubmit: action.payload.onSubmit,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ON_SAVE: {\n return {\n ...state,\n onSave: action.payload.onSave,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_GET_FILE_DATA: {\n return {\n ...state,\n getFileData: action.payload.getFileData,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_FILE_DATA: {\n const { fileData, index } = action.payload;\n const { imgList } = state;\n imgList[index] = { ...imgList[index], ...fileData };\n\n return {\n ...state,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ROTATE: {\n const { toolInstance } = state;\n toolInstance?.updateRotate();\n\n return state;\n }\n\n case ANNOTATION_ACTIONS.COPY_BACKWARD_RESULT: {\n const { toolInstance, imgIndex, imgList, step } = state;\n if (!toolInstance) {\n return state;\n }\n\n if (imgIndex === 0 || imgIndex >= imgList.length) {\n console.error('无法复制边界外的内容');\n return state;\n }\n const backwardResult = imgList[imgIndex - 1].result;\n if (!backwardResult) {\n return state;\n }\n\n const newResult = AnnotationDataUtils.copyResultChange(\n backwardResult,\n step,\n imgList[imgIndex].result ?? '',\n );\n imgList[imgIndex].result = newResult;\n\n // 更新当前的结果\n const fileResult = jsonParser(newResult);\n const stepResult = fileResult[`step_${step}`];\n const result = stepResult?.result || [];\n\n toolInstance.setResult(result);\n toolInstance.history.pushHistory(result);\n\n return {\n ...state,\n imgList: [...imgList],\n };\n }\n\n case ANNOTATION_ACTIONS.SET_STEP: {\n const { stepList, annotationEngine } = state;\n const { toStep } = action.payload;\n\n if (!annotationEngine) {\n return state;\n }\n\n const stepConfig = getStepConfig(stepList, toStep);\n annotationEngine.setToolName(stepConfig.tool, stepConfig.config);\n\n return {\n ...state,\n step: toStep,\n toolInstance: annotationEngine.toolInstance,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_LOADING: {\n const { loading } = action.payload;\n\n return {\n ...state,\n loading: !!loading,\n };\n }\n\n // eslint-disable-next-line no-fallthrough\n default:\n return state;\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reducer.js","sources":["../../../src/store/annotation/reducer.ts"],"sourcesContent":["import { ANNOTATION_ACTIONS } from '@/store/Actions';\nimport _ from 'lodash';\nimport { composeResultWithBasicImgInfo, composeResult } from '@/utils/data';\nimport { jsonParser } from '@/utils';\nimport StepUtils from '@/utils/StepUtils';\nimport AnnotationDataUtils from '@/utils/AnnotationDataUtils';\nimport { ConfigUtils } from '@/utils/ConfigUtils';\nimport styleString from '@/constant/styleString';\nimport { getFormatSize } from '@/components/customResizeHook';\nimport { AnnotationEngine, CommonToolUtils, ImgUtils } from '@labelbee/lb-annotation';\nimport { AnnotationState, AnnotationActionTypes } from './types';\nimport { message } from 'antd/es';\nimport { SetAnnotationLoading } from './actionCreators';\n\nexport const getStepConfig = (stepList: any[], step: number) =>\n stepList.find((i) => i.step === step);\n\nconst initialState: AnnotationState = {\n annotationEngine: null,\n toolInstance: null,\n imgList: [],\n config: '{}',\n imgIndex: -1,\n basicIndex: 0,\n imgPageSize: 1,\n step: 1,\n stepList: [],\n imgNode: new Image(),\n basicResultList: [],\n resultList: [],\n stepProgress: 0,\n loading: false,\n triggerEventAfterIndexChanged: false,\n};\n\n/**\n * 获取当前文件列表的总页数\n * @param state\n */\nexport const getTotalPage = (state: AnnotationState) => {\n const { imgList, imgPageSize } = state;\n return Math.ceil(imgList.length / imgPageSize);\n};\n\nconst calcStepProgress = (fileList: any[], step: number) =>\n fileList.reduce((pre, i) => {\n const resultStr = i.result;\n const resultObject = jsonParser(resultStr);\n if (resultObject[`step_${step}`]) {\n return pre + 1;\n }\n return pre;\n }, 0) / fileList.length;\n\nconst updateToolInstance = (annotation: AnnotationState, imgNode: HTMLImageElement) => {\n const { step, stepList } = annotation;\n const stepConfig = StepUtils.getCurrentStepInfo(step, stepList);\n const config = ConfigUtils.jsonParser(stepConfig.config);\n\n const container = document.getElementById('toolContainer');\n\n if (!container) {\n throw `Not exist dom named id-toolContainer`;\n }\n\n const canvasSize = getFormatSize({ width: window.innerWidth, height: window.innerHeight });\n const annotationEngine = new AnnotationEngine({\n container,\n toolName: stepConfig.tool,\n size: canvasSize,\n imgNode,\n config,\n style: JSON.parse(styleString),\n });\n\n return { toolInstance: annotationEngine.toolInstance, annotationEngine };\n};\n\n/**\n * 初始化imgNode并加载数据\n * @param nextIndex\n * @param nextBasicIndex\n */\nexport const LoadImageAndFileData =\n (nextIndex: number, nextBasicIndex?: number) => async (dispatch: any, getState: any) => {\n const { getFileData, imgList, toolInstance } = getState().annotation;\n SetAnnotationLoading(dispatch, true);\n\n /** 支持外部传入获取文件接口 */\n if (getFileData) {\n const fileData = await getFileData(imgList[nextIndex], nextIndex);\n dispatch({\n type: ANNOTATION_ACTIONS.SET_FILE_DATA,\n payload: {\n fileData,\n index: nextIndex,\n },\n });\n }\n\n const { url } = imgList[nextIndex];\n\n return ImgUtils.load(url)\n .then((imgNode) => {\n SetAnnotationLoading(dispatch, false);\n\n dispatch({\n type: ANNOTATION_ACTIONS.LOAD_FILE_DATA,\n payload: {\n imgNode,\n nextIndex,\n nextBasicIndex,\n },\n });\n })\n .catch(() => {\n SetAnnotationLoading(dispatch, false);\n toolInstance.setErrorImg();\n dispatch({\n type: ANNOTATION_ACTIONS.LOAD_FILE_DATA,\n payload: {\n nextIndex,\n nextBasicIndex,\n },\n });\n });\n };\n\nexport const annotationReducer = (\n state = initialState,\n action: AnnotationActionTypes,\n): AnnotationState => {\n switch (action.type) {\n case ANNOTATION_ACTIONS.UPDATE_TOOL_INSTANCE: {\n return {\n ...state,\n toolInstance: action.payload.toolInstance,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_IMG_LIST: {\n return {\n ...state,\n imgList: action.payload.imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.CALC_STEP_PROGRESS: {\n const { imgList, step } = state;\n\n const stepProgress = calcStepProgress(imgList, step);\n\n return {\n ...state,\n stepProgress,\n };\n }\n\n case ANNOTATION_ACTIONS.SUBMIT_FILE_DATA: {\n const { imgList, imgIndex, step, stepList, toolInstance, onSubmit, resultList } = state;\n if (!toolInstance) {\n return state;\n }\n\n const oldResultString = imgList[imgIndex]?.result || '';\n const [, basicImgInfo] = toolInstance.exportData();\n\n const resultWithBasicInfo = composeResultWithBasicImgInfo(oldResultString, basicImgInfo);\n const newResultString = composeResult(\n resultWithBasicInfo,\n { step, stepList },\n { rect: resultList },\n );\n\n imgList[imgIndex].result = AnnotationDataUtils.dataCorrection(\n newResultString,\n oldResultString,\n step,\n stepList,\n );\n\n if (onSubmit) {\n onSubmit([imgList[imgIndex]], action.payload?.submitType, imgIndex);\n }\n\n const stepProgress = calcStepProgress(imgList, step);\n return {\n ...state,\n stepProgress,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.SAVE_RESULT: {\n const { imgList, imgIndex, onSave } = state;\n onSave?.(imgList[imgIndex], imgIndex, imgList);\n return {\n ...state,\n };\n }\n\n case ANNOTATION_ACTIONS.SUBMIT_RESULT: {\n const { imgList, basicIndex, resultList, annotationEngine, basicResultList } = state;\n if (!annotationEngine) {\n return state;\n }\n\n const [exportResult] = annotationEngine.toolInstance.exportData();\n\n let previousResultList = exportResult;\n\n if (basicResultList?.length > 0) {\n const sourceID = basicResultList[basicIndex]?.id;\n const newResultData = exportResult.map((i: any) => ({ ...i, sourceID }));\n previousResultList = _.cloneDeep(resultList).filter((i: any) => i.sourceID !== sourceID);\n previousResultList.push(...newResultData);\n }\n\n return {\n ...state,\n resultList: previousResultList,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_BASIC_INDEX: {\n const {\n toolInstance,\n step,\n imgList,\n imgIndex,\n stepList,\n annotationEngine,\n resultList,\n basicResultList,\n } = state;\n\n if (!toolInstance || !annotationEngine) {\n return state;\n }\n\n const nextBasicIndex = action.payload.basicIndex;\n const sourceID = basicResultList[nextBasicIndex]?.id;\n\n const fileResult = jsonParser(imgList[imgIndex]?.result);\n const result = (resultList || []).filter((i) => i.sourceID === sourceID);\n\n const stepConfig = getStepConfig(stepList, step);\n\n const { dataSourceStep, tool } = stepConfig;\n const dependStepConfig = getStepConfig(stepList, dataSourceStep);\n let stepBasicResultList = [];\n\n if (dataSourceStep && tool) {\n stepBasicResultList = fileResult[`step_${dataSourceStep}`]?.result;\n\n if (stepBasicResultList?.length > 0) {\n annotationEngine.setBasicInfo(dependStepConfig.tool, stepBasicResultList[nextBasicIndex]);\n annotationEngine.launchOperation();\n } else {\n annotationEngine.setBasicInfo(dependStepConfig.tool);\n annotationEngine.forbidOperation();\n message.info('当前文件不存在依赖数据');\n }\n }\n\n toolInstance.setResult(result);\n toolInstance.history.initRecord(result, true);\n\n return {\n ...state,\n basicIndex: nextBasicIndex,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED: {\n const { triggerEventAfterIndexChanged } = action.payload;\n return {\n ...state,\n triggerEventAfterIndexChanged: !!triggerEventAfterIndexChanged,\n };\n }\n\n case ANNOTATION_ACTIONS.LOAD_FILE_DATA: {\n const { imgList, step, toolInstance, annotationEngine, stepList } = state;\n if (!toolInstance || !annotationEngine) {\n return state;\n }\n\n const currentStepInfo = StepUtils.getCurrentStepInfo(step, stepList);\n\n const { nextIndex, imgNode, nextBasicIndex, imgError } = action.payload;\n const basicIndex = nextBasicIndex ?? 0;\n\n const fileResult = jsonParser(imgList[nextIndex]?.result);\n\n const stepResult = fileResult[`step_${step}`];\n\n const isInitData = !stepResult; // 是否为初始化数据\n\n const basicImgInfo = {\n rotate: fileResult.rotate ?? 0,\n valid: fileResult.valid ?? true,\n };\n\n if (imgNode && imgError !== true) {\n annotationEngine.setImgNode(imgNode, basicImgInfo);\n }\n\n const stepConfig = getStepConfig(stepList, step);\n\n const { dataSourceStep, tool } = stepConfig;\n const dependStepConfig = getStepConfig(stepList, dataSourceStep);\n const hasDataSourceStep = dataSourceStep && tool;\n const stepBasicResultList = fileResult[`step_${dataSourceStep}`]?.result ?? [];\n\n const result = AnnotationDataUtils.getInitialResultList(\n stepResult?.result,\n toolInstance,\n stepConfig,\n stepBasicResultList,\n isInitData,\n );\n\n annotationEngine.launchOperation();\n\n if (hasDataSourceStep) {\n if (stepBasicResultList?.length > 0) {\n annotationEngine.setBasicInfo(dependStepConfig.tool, stepBasicResultList[basicIndex]);\n } else {\n // TODO: 禁用绘制交互,有无依赖之间的操作切换\n annotationEngine.setBasicInfo(dependStepConfig.tool);\n annotationEngine.forbidOperation();\n message.info('当前文件不存在依赖数据');\n }\n }\n\n // TODO,非查看模式才允许添加数据\n if (currentStepInfo.tool !== 'check') {\n const sourceID = stepBasicResultList[basicIndex]?.id ?? '';\n const resultForBasicIndex = hasDataSourceStep\n ? result.filter((i: { sourceID: string | number }) =>\n CommonToolUtils.isSameSourceID(i.sourceID, sourceID),\n )\n : result;\n toolInstance.setResult(resultForBasicIndex);\n toolInstance.history.initRecord(result, true);\n }\n\n return {\n ...state,\n imgIndex: nextIndex,\n basicIndex,\n basicResultList: stepBasicResultList,\n resultList: result,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ANNOTATION_CONFIG: {\n return {\n ...state,\n config: action.payload.config ?? '{}',\n };\n }\n\n case ANNOTATION_ACTIONS.SET_TASK_CONFIG: {\n const { stepList, step } = action.payload;\n return {\n ...state,\n stepList,\n step,\n };\n }\n\n case ANNOTATION_ACTIONS.INIT_TOOL: {\n const { imgNode } = state;\n const { toolInstance, annotationEngine } = updateToolInstance(state, imgNode);\n return {\n ...state,\n toolInstance,\n annotationEngine,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ON_SUBMIT: {\n return {\n ...state,\n onSubmit: action.payload.onSubmit,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ON_SAVE: {\n return {\n ...state,\n onSave: action.payload.onSave,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_GET_FILE_DATA: {\n return {\n ...state,\n getFileData: action.payload.getFileData,\n };\n }\n\n case ANNOTATION_ACTIONS.SET_FILE_DATA: {\n const { fileData, index } = action.payload;\n const { imgList } = state;\n imgList[index] = { ...imgList[index], ...fileData };\n\n return {\n ...state,\n imgList,\n };\n }\n\n case ANNOTATION_ACTIONS.UPDATE_ROTATE: {\n const { toolInstance } = state;\n toolInstance?.updateRotate();\n\n return state;\n }\n\n case ANNOTATION_ACTIONS.COPY_BACKWARD_RESULT: {\n const { toolInstance, imgIndex, imgList, step } = state;\n if (!toolInstance) {\n return state;\n }\n\n if (imgIndex === 0 || imgIndex >= imgList.length) {\n console.error('无法复制边界外的内容');\n return state;\n }\n const backwardResult = imgList[imgIndex - 1].result;\n if (!backwardResult) {\n return state;\n }\n\n const newResult = AnnotationDataUtils.copyResultChange(\n backwardResult,\n step,\n imgList[imgIndex].result ?? '',\n );\n imgList[imgIndex].result = newResult;\n\n // 更新当前的结果\n const fileResult = jsonParser(newResult);\n const stepResult = fileResult[`step_${step}`];\n const result = stepResult?.result || [];\n\n toolInstance.setResult(result);\n toolInstance.history.pushHistory(result);\n\n return {\n ...state,\n imgList: [...imgList],\n };\n }\n\n case ANNOTATION_ACTIONS.SET_STEP: {\n const { stepList, annotationEngine } = state;\n const { toStep } = action.payload;\n\n if (!annotationEngine) {\n return state;\n }\n\n if (toStep <= stepList.length) {\n const stepConfig = getStepConfig(stepList, toStep);\n annotationEngine.setToolName(stepConfig.tool, stepConfig.config);\n\n return {\n ...state,\n step: toStep,\n toolInstance: annotationEngine.toolInstance,\n };\n }\n break;\n }\n\n case ANNOTATION_ACTIONS.SET_LOADING: {\n const { loading } = action.payload;\n\n return {\n ...state,\n loading: !!loading,\n };\n }\n\n // eslint-disable-next-line no-fallthrough\n default:\n return state;\n }\n\n return state;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolStyleUtils.js","sources":["../../src/utils/ToolStyleUtils.ts"],"sourcesContent":["import {\n CHANGE_COLOR,\n DEFAULT_COLOR,\n COLORS_ARRAY,\n NULL_COLOR,\n BORDER_OPACITY_LEVEL,\n FILL_OPACITY_LEVEL,\n} from '@/data/Style';\nimport _ from 'lodash';\n\nconst FILL_OPACITY = 0.8;\n\nexport class ToolStyleUtils {\n public static changeOpacity: { [a: number]: number } = {\n 1: 0.2,\n 3: 0.4,\n 5: 0.6,\n 7: 0.8,\n 9: 1.0,\n };\n\n public static colorSplit(color: string, opacity: number) {\n return color\n .split(' ')\n .join('')\n .replace(/,[0-9]+([.]{1}[0-9]+){0,1}\\)/, `,${opacity.toFixed(2)})`);\n }\n\n public static computeOpacity(opacity: number, color: string) {\n const s
|
|
1
|
+
{"version":3,"file":"ToolStyleUtils.js","sources":["../../src/utils/ToolStyleUtils.ts"],"sourcesContent":["import {\n CHANGE_COLOR,\n DEFAULT_COLOR,\n COLORS_ARRAY,\n NULL_COLOR,\n BORDER_OPACITY_LEVEL,\n FILL_OPACITY_LEVEL,\n} from '@/data/Style';\nimport _ from 'lodash';\n\nconst FILL_OPACITY = 0.8;\n\nexport class ToolStyleUtils {\n public static changeOpacity: { [a: number]: number } = {\n 1: 0.2,\n 3: 0.4,\n 5: 0.6,\n 7: 0.8,\n 9: 1.0,\n };\n\n public static colorSplit(color: string, opacity: number) {\n return color\n .split(' ')\n .join('')\n .replace(/,[0-9]+([.]{1}[0-9]+){0,1}\\)/, `,${opacity.toFixed(2)})`);\n }\n\n public static computeOpacity(opacity: number, color: string) {\n const s = color\n .split(' ')\n .join('')\n .match(/,[0-9]+([.]{1}[0-9]+){0,1}\\)/)?.[0] || '';\n let firstOpacity = s.match(/[0-9]+([.]{1}[0-9]+){0,1}/)?.[0]\n return opacity * Number(firstOpacity);\n }\n\n public static getToolColors(borderOpacityParam = 9, fillOpacityParam = 9) {\n const colorSplit = ToolStyleUtils.colorSplit;\n const computeOpacity = ToolStyleUtils.computeOpacity;\n\n const toolColor = _.cloneDeep(CHANGE_COLOR);\n const borderOpacity = BORDER_OPACITY_LEVEL[borderOpacityParam];\n const fillOpacity = FILL_OPACITY_LEVEL[fillOpacityParam];\n\n Object.keys(CHANGE_COLOR).forEach((color: any) => {\n const showColor = _.cloneDeep(DEFAULT_COLOR);\n showColor.valid.stroke = colorSplit(\n CHANGE_COLOR[color].valid,\n computeOpacity(borderOpacity, CHANGE_COLOR[color].valid),\n );\n showColor.valid.fill = colorSplit(\n CHANGE_COLOR[color].valid,\n computeOpacity(fillOpacity, CHANGE_COLOR[color].valid) * FILL_OPACITY,\n );\n showColor.validSelected.stroke = colorSplit(\n CHANGE_COLOR[color].select.stroke,\n computeOpacity(borderOpacity, CHANGE_COLOR[color].select.stroke),\n );\n showColor.validSelected.fill = colorSplit(\n CHANGE_COLOR[color].select.fill,\n computeOpacity(fillOpacity, CHANGE_COLOR[color].select.fill) * FILL_OPACITY,\n );\n showColor.validHover.stroke = colorSplit(\n CHANGE_COLOR[color].hover,\n computeOpacity(borderOpacity, CHANGE_COLOR[color].hover),\n );\n showColor.validHover.fill = colorSplit(\n CHANGE_COLOR[color].hover,\n computeOpacity(fillOpacity, CHANGE_COLOR[color].hover) * FILL_OPACITY,\n );\n\n // 无效的比例是一样的\n showColor.invalid.stroke = colorSplit(\n showColor.invalid.stroke,\n computeOpacity(borderOpacity, showColor.invalid.stroke),\n );\n showColor.invalid.fill = colorSplit(\n showColor.invalid.stroke,\n computeOpacity(fillOpacity, showColor.invalid.stroke) * FILL_OPACITY,\n );\n showColor.invalidSelected.stroke = colorSplit(\n showColor.invalidSelected.stroke,\n computeOpacity(borderOpacity, showColor.invalidSelected.stroke),\n );\n showColor.invalidSelected.fill = colorSplit(\n showColor.invalidSelected.fill,\n computeOpacity(fillOpacity, showColor.invalidSelected.fill) * FILL_OPACITY,\n );\n showColor.invalidHover.stroke = colorSplit(\n showColor.invalidHover.stroke,\n computeOpacity(borderOpacity, showColor.invalidHover.fill),\n );\n showColor.invalidHover.fill = colorSplit(\n showColor.invalidHover.fill,\n computeOpacity(fillOpacity, showColor.invalidHover.fill) * FILL_OPACITY,\n );\n toolColor[color] = showColor;\n });\n return toolColor;\n }\n\n public static getAttributeColors(borderOpacityParam = 9, fillOpacityParam = 9) {\n const colorSplit = ToolStyleUtils.colorSplit;\n const computeOpacity = ToolStyleUtils.computeOpacity;\n const borderOpacity = BORDER_OPACITY_LEVEL[borderOpacityParam];\n const fillOpacity = FILL_OPACITY_LEVEL[fillOpacityParam];\n\n let AttributeColorList: string[] = _.cloneDeep(COLORS_ARRAY);\n AttributeColorList.unshift(NULL_COLOR);\n AttributeColorList = AttributeColorList.map((item) => {\n const showColor = JSON.parse(JSON.stringify(DEFAULT_COLOR));\n showColor.valid.stroke = colorSplit(item, computeOpacity(borderOpacity, item));\n showColor.valid.fill = colorSplit(\n item,\n computeOpacity(fillOpacity, item) * FILL_OPACITY * 0.5,\n );\n showColor.validSelected.stroke = colorSplit(item, computeOpacity(borderOpacity, item));\n showColor.validSelected.fill = colorSplit(\n item,\n computeOpacity(fillOpacity, item) * FILL_OPACITY,\n );\n showColor.validHover.stroke = colorSplit(item, computeOpacity(borderOpacity, item));\n showColor.validHover.fill = colorSplit(\n item,\n computeOpacity(fillOpacity, item) * FILL_OPACITY,\n );\n showColor.invalid.stroke = colorSplit(\n showColor.invalid.stroke,\n computeOpacity(borderOpacity, item),\n );\n showColor.invalid.fill = colorSplit(\n showColor.invalid.fill,\n computeOpacity(fillOpacity, item) * FILL_OPACITY * 0.5,\n );\n showColor.invalidSelected.stroke = colorSplit(\n showColor.invalidSelected.stroke,\n computeOpacity(borderOpacity, item),\n );\n showColor.invalidSelected.fill = colorSplit(\n showColor.invalidSelected.fill,\n computeOpacity(fillOpacity, item) * FILL_OPACITY,\n );\n showColor.invalidHover.stroke = colorSplit(\n showColor.invalidHover.stroke,\n computeOpacity(borderOpacity, item),\n );\n showColor.invalidHover.fill = colorSplit(\n showColor.invalidHover.fill,\n computeOpacity(fillOpacity, item) * FILL_OPACITY,\n );\n return showColor;\n });\n return AttributeColorList;\n }\n\n public static getDefaultToolLineColors() {\n const toolColor: any = {};\n Object.keys(CHANGE_COLOR).forEach((color: any) => {\n toolColor[color] = CHANGE_COLOR[color].line;\n });\n return toolColor;\n }\n\n public static initByOpacity(borderOpacity: number, fillOpacity: number) {\n return {\n toolColor: this.getToolColors(borderOpacity, fillOpacity),\n attributeColor: this.getAttributeColors(borderOpacity, fillOpacity),\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/views/MainView/toolHeader/index.tsx"],"sourcesContent":["import React, { useReducer, useRef } from 'react';\nimport { LeftOutlined } from '@ant-design/icons';\nimport { connect, useDispatch } from 'react-redux';\nimport { store } from 'src';\nimport { IFileItem } from '@/types/data';\nimport { AppState } from '@/store';\nimport classNames from 'classnames';\nimport { ESubmitType, prefix } from '@/constant';\nimport ExportData from './ExportData';\nimport HeaderOption from './headerOption';\nimport { AnnotationEngine } from '@labelbee/lb-annotation';\nimport { Button, Tooltip } from 'antd/es';\nimport { ToNextStep, ToSubmitFileData } from '@/store/annotation/actionCreators';\nimport StepSwitch from './StepSwitch';\nimport { EToolName } from '@/data/enums/ToolType';\nimport { IStepInfo } from '@/types/step';\nimport { i18n } from '@labelbee/lb-utils';\nimport { useTranslation } from 'react-i18next';\nimport useSize from '@/hooks/useSize';\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/views/MainView/toolHeader/index.tsx"],"sourcesContent":["import React, { useReducer, useRef } from 'react';\nimport { LeftOutlined } from '@ant-design/icons';\nimport { connect, useDispatch } from 'react-redux';\nimport { store } from 'src';\nimport { IFileItem } from '@/types/data';\nimport { AppState } from '@/store';\nimport classNames from 'classnames';\nimport { ESubmitType, prefix } from '@/constant';\nimport ExportData from './ExportData';\nimport HeaderOption from './headerOption';\nimport { AnnotationEngine } from '@labelbee/lb-annotation';\nimport { Button, Tooltip } from 'antd/es';\nimport { ToNextStep, ToSubmitFileData } from '@/store/annotation/actionCreators';\nimport StepSwitch from './StepSwitch';\nimport { EToolName } from '@/data/enums/ToolType';\nimport { IStepInfo } from '@/types/step';\nimport { i18n } from '@labelbee/lb-utils';\nimport { useTranslation } from 'react-i18next';\nimport useSize from '@/hooks/useSize';\n\ninterface INextStep {\n stepProgress: number;\n stepList: IStepInfo[];\n step: number; // 当前步骤\n}\n\nconst NextButton: React.FC<{ disabled: boolean }> = ({ disabled }) => {\n const { t } = useTranslation();\n return (\n <Button\n type='primary'\n style={{\n marginLeft: 10,\n }}\n onClick={() => {\n store.dispatch(ToNextStep(0) as any);\n }}\n disabled={disabled}\n >\n {t('NextStep')}\n </Button>\n );\n};\n\nconst NextStep: React.FC<INextStep> = ({ step, stepProgress, stepList }) => {\n const { t } = useTranslation();\n\n if (stepList.length < 2 || step === stepList.length) {\n return null;\n }\n\n const disabled = stepProgress < 1;\n\n if (disabled) {\n return (\n <Tooltip title={t('StepNotFinishedNotify')}>\n <span>\n <NextButton disabled={disabled} />\n </span>\n </Tooltip>\n );\n }\n\n return <NextButton disabled={disabled} />;\n};\n\ninterface IToolHeaderProps {\n goBack?: (imgList?: IFileItem[]) => void;\n exportData?: (data: any[]) => void;\n headerName?: string;\n imgList: IFileItem[];\n annotationEngine: AnnotationEngine;\n stepProgress: number;\n toolName: EToolName;\n stepInfo: IStepInfo;\n stepList: IStepInfo[];\n step: number;\n}\n\nconst ToolHeader: React.FC<IToolHeaderProps> = ({\n goBack,\n exportData,\n headerName,\n imgList,\n stepProgress,\n stepInfo,\n stepList,\n step,\n annotationEngine,\n}) => {\n const dispatch = useDispatch();\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n const ref = useRef(null);\n\n const size = useSize(ref);\n\n // render 数据展示\n const currentOption = <ExportData exportData={exportData} />;\n\n const closeAnnotation = () => {\n dispatch(ToSubmitFileData(ESubmitType.Quit));\n\n if (goBack) {\n goBack(imgList);\n }\n };\n\n const changeLanguage = (lang: 'en' | 'cn') => {\n i18n.changeLanguage(lang);\n annotationEngine.setLang(lang);\n forceUpdate();\n };\n\n const curLang = i18n.language;\n\n const width = size?.width ?? window.innerWidth;\n\n return (\n <div className={classNames(`${prefix}-header`)} ref={ref}>\n <div className={`${prefix}-header__title`}>\n <LeftOutlined className={`${prefix}-header__icon`} onClick={closeAnnotation} />\n {headerName ? <span className={`${prefix}-header__name`}>{headerName}</span> : ''}\n {stepList.length > 1 && (\n <>\n <StepSwitch stepProgress={stepProgress} />\n <NextStep step={step} stepProgress={stepProgress} stepList={stepList} />\n </>\n )}\n\n {currentOption}\n <div\n id='operationNode'\n className={`${prefix}-header__operationNode`}\n style={{ left: width / 2 - 174 / 2 }}\n >\n <HeaderOption stepInfo={stepInfo} />\n </div>\n\n <div className={`${prefix}-header__titlePlacement`} />\n\n <div className={`${prefix}-header__lang`}>\n <span\n className={`${prefix}-langCN ${curLang === 'cn' ? 'active' : ''}`}\n onClick={() => changeLanguage('cn')}\n >\n 中文\n </span>\n {` / `}\n <span\n className={`${prefix}-langEN ${curLang === 'en' ? 'active' : ''}`}\n onClick={() => changeLanguage('en')}\n >\n En\n </span>\n </div>\n </div>\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n imgList: state.annotation.imgList,\n annotationEngine: state.annotation.annotationEngine,\n stepProgress: state.annotation.stepProgress,\n toolName: state.annotation.stepList[state.annotation.step - 1]?.tool,\n stepList: state.annotation.stepList,\n stepInfo: state.annotation.stepList[state.annotation.step - 1],\n step: state.annotation.step,\n});\n\nexport default connect(mapStateToProps)(ToolHeader);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AA0BA,MAAM,aAA8C,CAAC,CAAE,cAAe;AACpE,QAAM,CAAE,KAAM;AACd,6CACG,QAAD;AAAA,IACE,MAAK;AAAA,IACL,OAAO;AAAA,MACL,YAAY;AAAA;AAAA,IAEd,SAAS,MAAM;AACb,YAAM,SAAS,WAAW;AAAA;AAAA,IAE5B;AAAA,KAEC,EAAE;AAAA;AAKT,MAAM,WAAgC,CAAC,CAAE,MAAM,cAAc,cAAe;AAC1E,QAAM,CAAE,KAAM;AAEd,MAAI,SAAS,SAAS,KAAK,SAAS,SAAS,QAAQ;AACnD,WAAO;AAAA;AAGT,QAAM,WAAW,eAAe;AAEhC,MAAI,UAAU;AACZ,+CACG,SAAD;AAAA,MAAS,OAAO,EAAE;AAAA,2CACf,QAAD,0CACG,YAAD;AAAA,MAAY;AAAA;AAAA;AAMpB,6CAAQ,YAAD;AAAA,IAAY;AAAA;AAAA;AAgBrB,MAAM,aAAyC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,MACI;AAzFN;AA0FE,QAAM,WAAW;AACjB,QAAM,GAAG,eAAe,WAAW,CAAC,MAAM,IAAI,GAAG;AACjD,QAAM,MAAM,OAAO;AAEnB,QAAM,OAAO,QAAQ;AAGrB,QAAM,oDAAiB,YAAD;AAAA,IAAY;AAAA;AAElC,QAAM,kBAAkB,MAAM;AAC5B,aAAS,iBAAiB,YAAY;AAEtC,QAAI,QAAQ;AACV,aAAO;AAAA;AAAA;AAIX,QAAM,iBAAiB,CAAC,SAAsB;AAC5C,SAAK,eAAe;AACpB,qBAAiB,QAAQ;AACzB;AAAA;AAGF,QAAM,UAAU,KAAK;AAErB,QAAM,QAAQ,mCAAM,UAAN,YAAe,OAAO;AAEpC,6CACG,OAAD;AAAA,IAAK,WAAW,WAAW,GAAG;AAAA,IAAkB;AAAA,yCAC7C,OAAD;AAAA,IAAK,WAAW,GAAG;AAAA,yCAChB,cAAD;AAAA,IAAc,WAAW,GAAG;AAAA,IAAuB,SAAS;AAAA,MAC3D,iDAAc,QAAD;AAAA,IAAM,WAAW,GAAG;AAAA,KAAwB,cAAqB,IAC9E,SAAS,SAAS,mGAEd,YAAD;AAAA,IAAY;AAAA,0CACX,UAAD;AAAA,IAAU;AAAA,IAAY;AAAA,IAA4B;AAAA,OAIrD,mDACA,OAAD;AAAA,IACE,IAAG;AAAA,IACH,WAAW,GAAG;AAAA,IACd,OAAO,CAAE,MAAM,QAAQ,IAAI,MAAM;AAAA,yCAEhC,cAAD;AAAA,IAAc;AAAA,2CAGf,OAAD;AAAA,IAAK,WAAW,GAAG;AAAA,0CAElB,OAAD;AAAA,IAAK,WAAW,GAAG;AAAA,yCAChB,QAAD;AAAA,IACE,WAAW,GAAG,iBAAiB,YAAY,OAAO,WAAW;AAAA,IAC7D,SAAS,MAAM,eAAe;AAAA,KAC/B,iBAGA,2CACA,QAAD;AAAA,IACE,WAAW,GAAG,iBAAiB,YAAY,OAAO,WAAW;AAAA,IAC7D,SAAS,MAAM,eAAe;AAAA,KAC/B;AAAA;AASX,MAAM,kBAAkB,CAAC,UAAiB;AAhK1C;AAgK8C;AAAA,IAC5C,SAAS,MAAM,WAAW;AAAA,IAC1B,kBAAkB,MAAM,WAAW;AAAA,IACnC,cAAc,MAAM,WAAW;AAAA,IAC/B,UAAU,YAAM,WAAW,SAAS,MAAM,WAAW,OAAO,OAAlD,mBAAsD;AAAA,IAChE,UAAU,MAAM,WAAW;AAAA,IAC3B,UAAU,MAAM,WAAW,SAAS,MAAM,WAAW,OAAO;AAAA,IAC5D,MAAM,MAAM,WAAW;AAAA;AAAA;AAGzB,mBAAe,QAAQ,iBAAiB;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@labelbee/lb-components",
|
|
3
|
-
"version": "1.2.3
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "Provide a complete library of annotation components",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"es": "./es/index.js",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"email": "brady_luo.sz@foxmail.com"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@labelbee/lb-annotation": "1.5.4
|
|
45
|
+
"@labelbee/lb-annotation": "1.5.4",
|
|
46
46
|
"@ant-design/icons": "^4.6.2",
|
|
47
47
|
"classnames": "^2.3.0",
|
|
48
|
-
"@labelbee/lb-utils": "^1.0.4
|
|
48
|
+
"@labelbee/lb-utils": "^1.0.4",
|
|
49
49
|
"lodash": "^4.17.21",
|
|
50
50
|
"react-i18next": "^11.12.0",
|
|
51
51
|
"react-redux": "^7.2.3",
|