import { Fragment, RefObject, useMemo, useState } from 'react'; import RadioGroup from '../../../common/components/radio-group/RadioGroup'; import Switch from '../../../common/components/switch/Switch'; import useCustomFields from '../../../common/hooks-query/useCustomFields'; import { cuesheetDefaultColumns, makeCuesheetCustomColumns } from '../../../views/cuesheet/cuesheet.options'; import * as Panel from '../../app-settings/panel-utils/PanelUtils'; import style from './CuesheetLinkOptions.module.scss'; type AccessMode = 'full' | 'custom'; interface CuesheetLinkOptionsProps { readRef?: RefObject; writeRef?: RefObject; } export default function CuesheetLinkOptions({ readRef, writeRef }: CuesheetLinkOptionsProps) { const { data } = useCustomFields(); const customFieldColumns = useMemo(() => makeCuesheetCustomColumns(data), [data]); const [readPermissions, setReadPermissions] = useState('full'); const [writePermissions, setWritePermissions] = useState('full'); const [readSwitches, setReadSwitches] = useState>(() => { const initialState: Record = {}; [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => { initialState[column.value] = true; }); return initialState; }); const [writeSwitches, setWriteSwitches] = useState>(() => { const initialState: Record = {}; [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => { initialState[column.value] = true; }); return initialState; }); const handleReadModeChange = (value: AccessMode) => { setReadPermissions(value); setReadSwitches((prevReadSwitches) => { const updatedReadSwitches = { ...prevReadSwitches }; Object.keys(updatedReadSwitches).forEach((key) => { updatedReadSwitches[key] = true; }); return updatedReadSwitches; }); }; const handleWriteModeChange = (value: AccessMode) => { if (value === 'full') { setReadPermissions('full'); } setWritePermissions(value); setReadSwitches((prevReadSwitches) => { const updatedReadSwitches = { ...prevReadSwitches }; setWriteSwitches((prevWriteSwitches) => { const updatedWriteSwitches = { ...prevWriteSwitches }; [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => { updatedReadSwitches[column.value] = true; updatedWriteSwitches[column.value] = true; }); return updatedWriteSwitches; }); return updatedReadSwitches; }); }; const handleSwitchChange = (key: string, type: 'read' | 'write', value: boolean) => { if (type === 'read') { setReadSwitches((prevReadSwitches) => { const updatedReadSwitches = { ...prevReadSwitches, [key]: value }; return updatedReadSwitches; }); } else { setWriteSwitches((prevWriteSwitches) => { const updatedWriteSwitches = { ...prevWriteSwitches, [key]: value }; return updatedWriteSwitches; }); } }; const getReadPermissions = () => { if (readPermissions === 'full' || writePermissions === 'full') { return 'full'; } return Object.entries(readSwitches) .filter(([_, value]) => value) .map(([key]) => key) .join(','); }; const getWritePermissions = () => { if (writePermissions === 'full') { return 'full'; } return Object.entries(writeSwitches) .filter(([_, value]) => value) .map(([key]) => key) .join(','); }; return (
Ontime columns Read Write {cuesheetDefaultColumns.map((column) => (
{column.label}
handleSwitchChange(column.value, 'read', value)} disabled={readPermissions === 'full' || writePermissions === 'full'} data-testid={`read-${column.value}`} /> handleSwitchChange(column.value, 'write', value)} disabled={writePermissions === 'full'} data-testid={`write-${column.value}`} />
))}
{customFieldColumns.length > 0 && (
Custom fields Read Write {customFieldColumns.map((column) => ( {column.label} handleSwitchChange(column.value, 'read', value)} disabled={readPermissions === 'full' || writePermissions === 'full'} data-testid={`read-${column.value}`} /> handleSwitchChange(column.value, 'write', value)} disabled={writePermissions === 'full'} data-testid={`write-${column.value}`} /> ))}
)}
); }