feat: cuesheet sharing

feat: locked presets

refactor: simplify locked param

refactor: create share links
This commit is contained in:
Carlos Valente
2025-07-22 05:45:20 +02:00
committed by Carlos Valente
parent 1695b4dc68
commit 6c6f5c2c0f
62 changed files with 1661 additions and 478 deletions
@@ -5,6 +5,7 @@ import { SupportedEntry } from 'ontime-types';
import { PositionedDropdownMenu } from '../../../../common/components/dropdown-menu/DropdownMenu';
import { useEntryActions } from '../../../../common/hooks/useEntryAction';
import { useCuesheetEditModal } from '../../cuesheet-edit-modal/useCuesheetEditModal';
import { useCuesheetPermissions } from '../../useTablePermissions';
import { useCuesheetTableMenu } from './useCuesheetTableMenu';
@@ -14,6 +15,7 @@ function CuesheetTableMenu() {
const { isOpen, entryId, entryIndex, parentId, flag, position, closeMenu } = useCuesheetTableMenu();
const { addEntry, clone, deleteEntry, move, updateEntry } = useEntryActions();
const showModal = useCuesheetEditModal((state) => state.setEditableEntry);
const permissions = useCuesheetPermissions();
if (!isOpen) {
return null;
@@ -24,14 +26,20 @@ function CuesheetTableMenu() {
isOpen
onClose={closeMenu}
items={[
{ type: 'item', label: 'Edit...', onClick: () => showModal(entryId), icon: IoOptions },
{
type: 'item',
label: 'Edit...',
onClick: () => showModal(entryId),
icon: IoOptions,
disabled: !permissions.canEditEntries,
},
{ type: 'divider' },
{
type: 'item',
label: flag ? 'Remove flag' : 'Add flag',
onClick: () => updateEntry({ id: entryId, flag: !flag }),
icon: IoDuplicateOutline,
disabled: flag === null,
disabled: flag === null || !permissions.canFlag,
},
{ type: 'divider' },
{
@@ -39,18 +47,21 @@ function CuesheetTableMenu() {
label: 'Add event above',
onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { before: entryId }),
icon: IoAdd,
disabled: !permissions.canCreateEntries,
},
{
type: 'item',
label: 'Add event below',
onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { after: entryId }),
icon: IoAdd,
disabled: !permissions.canCreateEntries,
},
{
type: 'item',
label: 'Clone event',
onClick: () => clone(entryId),
icon: IoDuplicateOutline,
disabled: !permissions.canCreateEntries,
},
{ type: 'divider' },
{
@@ -58,13 +69,14 @@ function CuesheetTableMenu() {
label: 'Move up',
onClick: () => move(entryId, 'up'),
icon: IoArrowUp,
disabled: entryIndex < 1,
disabled: entryIndex < 1 || !permissions.canEditEntries,
},
{
type: 'item',
label: 'Move down',
onClick: () => move(entryId, 'down'),
icon: IoArrowDown,
disabled: !permissions.canEditEntries,
},
{ type: 'divider' },
{
@@ -72,6 +84,7 @@ function CuesheetTableMenu() {
label: 'Delete',
onClick: () => deleteEntry([entryId]),
icon: IoTrash,
disabled: !permissions.canEditEntries,
},
]}
position={position}