/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import PointsToggle from '@/common/components/annotations/PointsToggle'; import useVideo from '@/common/components/video/editor/useVideo'; import useReportError from '@/common/error/useReportError'; import { activeTrackletObjectIdAtom, isPlayingAtom, isStreamingAtom, } from '@/demo/atoms'; import { AddFilled, Select_02, SubtractFilled, TrashCan, } from '@carbon/icons-react'; import {useAtom, useAtomValue} from 'jotai'; import {useState} from 'react'; import type {ButtonProps} from 'react-daisyui'; import {Button} from 'react-daisyui'; type Props = { objectId: number; active: boolean; }; function CustomButton({className, ...props}: ButtonProps) { return ( ); } export default function ObjectActions({objectId, active}: Props) { const [isRemovingObject, setIsRemovingObject] = useState(false); const [activeTrackId, setActiveTrackletId] = useAtom( activeTrackletObjectIdAtom, ); const isStreaming = useAtomValue(isStreamingAtom); const isPlaying = useAtom(isPlayingAtom); const video = useVideo(); const reportError = useReportError(); async function handleRemoveObject( event: React.MouseEvent, ) { try { event.stopPropagation(); setIsRemovingObject(true); if (isStreaming) { await video?.abortStreamMasks(); } if (isPlaying) { video?.pause(); } await video?.deleteTracklet(objectId); } catch (error) { reportError(error); } finally { setIsRemovingObject(false); if (activeTrackId === objectId) { setActiveTrackletId(null); } } } return (
{active && (
Select to add areas to the object and to remove areas from the object in the video. Click on an existing point to delete it.
)}
{active ? ( ) : ( <> }> Edit selection }> Clear )}
); }