import { Popover } from '@base-ui/react/popover'; import { Toggle } from '@base-ui/react/toggle'; import { ToggleGroup } from '@base-ui/react/toggle-group'; import { Toolbar } from '@base-ui/react/toolbar'; import type { Column } from '@tanstack/react-table'; import { ReactNode } from 'react'; import { IoBookOutline, IoChevronDown, IoOptions } from 'react-icons/io5'; import Button from '../../../../common/components/buttons/Button'; import Checkbox from '../../../../common/components/checkbox/Checkbox'; import * as Editor from '../../../../common/components/editor-utils/EditorUtils'; import PopoverContents from '../../../../common/components/popover/Popover'; import type { ExtendedEntry } from '../../../../common/utils/rundownMetadata'; import { AppMode } from '../../../../ontimeConfig'; import { useCuesheetPermissions } from '../../useTablePermissions'; import CuesheetShareModal from './CuesheetShareModal'; import style from './CuesheetTableSettings.module.scss'; type TableHeaderOptionsStore = { hideTableSeconds: boolean; hideIndexColumn: boolean; showDelayedTimes: boolean; hideDelays: boolean; setOption: (key: K, value: TableHeaderOptionValues[K]) => void; }; type TableHeaderOptionValues = Pick< TableHeaderOptionsStore, 'hideTableSeconds' | 'hideIndexColumn' | 'showDelayedTimes' | 'hideDelays' >; type TableModeControls = { cuesheetMode: AppMode; setCuesheetMode: (mode: AppMode) => void; isCurrentRundown?: boolean; }; interface CuesheetTableHeaderToolbarProps { columns: Column[]; optionsStore: TableHeaderOptionsStore; handleResetResizing: () => void; handleResetReordering: () => void; handleClearToggles: () => void; insertElement?: ReactNode; modeControls?: TableModeControls; showShare?: boolean; } export default function CuesheetTableHeaderToolbar({ columns, optionsStore, handleResetResizing, handleResetReordering, handleClearToggles, insertElement, modeControls, showShare = false, }: CuesheetTableHeaderToolbarProps) { const canChangeMode = useCuesheetPermissions((state) => state.canChangeMode); const canShare = useCuesheetPermissions((state) => state.canShare); const toggleCuesheetMode = (mode: AppMode[]) => { const newValue = mode.at(0); if (!newValue || !modeControls) return; modeControls.setCuesheetMode(newValue); }; const isBackground = !(modeControls?.isCurrentRundown ?? true); return ( {modeControls && canChangeMode && (
{insertElement} } value={AppMode.Run} className={style.radioButton}> Run } value={AppMode.Edit} className={style.radioButton}> Edit
)} {showShare && canShare && ( <> )}
); } interface ViewSettingsProps { optionsStore: TableHeaderOptionsStore; } interface ColumnSettingsProps { columns: Column[]; handleResetResizing: () => void; handleResetReordering: () => void; handleClearToggles: () => void; } function ViewSettings({ optionsStore }: ViewSettingsProps) { return ( Settings } /> } />
Element visibility optionsStore.setOption('hideTableSeconds', checked)} /> Hide seconds in table optionsStore.setOption('hideIndexColumn', checked)} /> Hide index column
Table Behaviour optionsStore.setOption('showDelayedTimes', checked)} /> Show delayed times optionsStore.setOption('hideDelays', checked)} /> Hide delay entries
); } function ColumnSettings({ columns, handleResetResizing, handleResetReordering, handleClearToggles, }: ColumnSettingsProps) { return ( Columns } /> } />
Column visibility {columns.map((column) => { const columnHeader = column.columnDef.header; const visible = column.getIsVisible(); return ( {columnHeader as ReactNode} ); })}
Reset Options
); }