// Copyright (C) 2022 Intel Corporation // Copyright (C) CVAT.ai corp // // SPDX-License-Identifier: MIT import React, { useCallback, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { CombinedState, ObjectType } from 'reducers'; import Text from 'antd/lib/typography/Text'; import Modal from 'antd/lib/modal'; import consts from 'consts'; import { removeObjectAsync, removeObject as removeObjectAction } from 'actions/annotation-actions'; export default function RemoveConfirmComponent(): JSX.Element | null { const [visible, setVisible] = useState(false); const [title, setTitle] = useState(''); const [description, setDescription] = useState(<>); const objectState = useSelector((state: CombinedState) => state.annotation.remove.objectState); const force = useSelector((state: CombinedState) => state.annotation.remove.force); const jobInstance = useSelector((state: CombinedState) => state.annotation.job.instance); const dispatch = useDispatch(); const onOk = useCallback(() => { dispatch(removeObjectAsync(jobInstance, objectState, true)); }, [jobInstance, objectState]); const onCancel = useCallback(() => { dispatch(removeObjectAction(null, false)); }, []); useEffect(() => { const newVisible = (!!objectState && !force && objectState.lock) || (objectState?.objectType === ObjectType.TRACK && !force); setTitle(objectState?.lock ? 'Object is locked' : 'Remove object'); let descriptionMessage: string | JSX.Element = 'Are you sure you want to remove it?'; if (objectState?.objectType === ObjectType.TRACK && !force) { descriptionMessage = ( <> { `The object you are trying to remove is a track. If you continue, it removes many drawn objects on different frames. If you want to hide it only on this frame, use the outside feature instead. ${descriptionMessage}` }
{/* eslint-disable-next-line */}
); } setDescription(descriptionMessage); setVisible(newVisible); if (!newVisible && objectState) { dispatch(removeObjectAsync(jobInstance, objectState, true)); } }, [objectState, force]); return (
{description}
); }