|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import ObjectActions from '@/common/components/annotations/ObjectActions'; |
|
|
import ObjectPlaceholder from '@/common/components/annotations/ObjectPlaceholder'; |
|
|
import ObjectThumbnail from '@/common/components/annotations/ObjectThumbnail'; |
|
|
import ToolbarObjectContainer from '@/common/components/annotations/ToolbarObjectContainer'; |
|
|
import useVideo from '@/common/components/video/editor/useVideo'; |
|
|
import {BaseTracklet} from '@/common/tracker/Tracker'; |
|
|
import emptyFunction from '@/common/utils/emptyFunction'; |
|
|
import {activeTrackletObjectIdAtom} from '@/demo/atoms'; |
|
|
import {useSetAtom} from 'jotai'; |
|
|
|
|
|
type Props = { |
|
|
label: string; |
|
|
tracklet: BaseTracklet; |
|
|
isActive: boolean; |
|
|
isMobile?: boolean; |
|
|
onClick?: () => void; |
|
|
onThumbnailClick?: () => void; |
|
|
}; |
|
|
|
|
|
export default function ToolbarObject({ |
|
|
label, |
|
|
tracklet, |
|
|
isActive, |
|
|
isMobile = false, |
|
|
onClick, |
|
|
onThumbnailClick = emptyFunction, |
|
|
}: Props) { |
|
|
const video = useVideo(); |
|
|
const setActiveTrackletId = useSetAtom(activeTrackletObjectIdAtom); |
|
|
|
|
|
async function handleCancelNewObject() { |
|
|
try { |
|
|
await video?.deleteTracklet(tracklet.id); |
|
|
} catch (error) { |
|
|
reportError(error); |
|
|
} finally { |
|
|
setActiveTrackletId(null); |
|
|
} |
|
|
} |
|
|
|
|
|
if (!tracklet.isInitialized) { |
|
|
return ( |
|
|
<ToolbarObjectContainer |
|
|
alignItems="center" |
|
|
isActive={isActive} |
|
|
title="New object" |
|
|
subtitle="No object is currently selected. Click an object in the video." |
|
|
thumbnail={<ObjectPlaceholder showPlus={false} />} |
|
|
isMobile={isMobile} |
|
|
onClick={onClick} |
|
|
onCancel={handleCancelNewObject} |
|
|
/> |
|
|
); |
|
|
} |
|
|
|
|
|
return ( |
|
|
<ToolbarObjectContainer |
|
|
isActive={isActive} |
|
|
onClick={onClick} |
|
|
title={label} |
|
|
subtitle="" |
|
|
thumbnail={ |
|
|
<ObjectThumbnail |
|
|
thumbnail={tracklet.thumbnail} |
|
|
color={tracklet.color} |
|
|
onClick={onThumbnailClick} |
|
|
/> |
|
|
} |
|
|
isMobile={isMobile}> |
|
|
<ObjectActions objectId={tracklet.id} active={isActive} /> |
|
|
</ToolbarObjectContainer> |
|
|
); |
|
|
} |
|
|
|