diff --git a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx index 58f049a224..13723480b0 100644 --- a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx +++ b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx @@ -12,9 +12,12 @@ const ShoppingCart = observer(function ({ }: { model: HierarchicalTrackSelectorModel }) { + const session = getSession(model) const { selection } = model const { pluginManager } = getEnv(model) - const session = getSession(model) + const { adminMode, sessionTracks } = session + const s = new Set(sessionTracks?.map(t => t.trackId)) + const canEdit = (t: string) => adminMode || s.has(t) const items = pluginManager.evaluateExtensionPoint( 'TrackSelector-multiTrackMenuItems', [], @@ -25,11 +28,23 @@ const ShoppingCart = observer(function ({ { model.clearSelection() }, }, + ...(selection.every(elt => canEdit(elt.trackId)) + ? [ + { + label: 'Delete tracks', + onClick: () => { + // @ts-expect-error + selection.forEach(s => session.deleteTrackConf?.(s)) + }, + }, + ] + : []), + ...items.map(item => ({ ...item, ...('onClick' in item diff --git a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx index 97d9c08c96..2c82f9b74c 100644 --- a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx +++ b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx @@ -41,8 +41,8 @@ export default function TrackLabel({ data }: { data: NodeData }) { id, trackId, name, - onChange, selected, + onChange, } = data const description = readConfObject(conf, 'description') return ( @@ -53,6 +53,16 @@ export default function TrackLabel({ data }: { data: NodeData }) { > { + if (event.ctrlKey || event.metaKey) { + if (selected) { + model.removeFromSelection([conf]) + } else { + model.addToSelection([conf]) + } + event.preventDefault() + } + }} control={