mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-12 19:03:47 +00:00
ae15f3cdc5
* refactor: align header columns * refactor: improve scrollbar visibility * refactor: center align table elements * refactor: make param elements stateful * fix: issue with collapsed elements not loosing value * fix: prevent search params containing multiple alias references * fix: the issue where a file disappears if it is both migrated and recovered in the same load operation (#1744) * refactor: disable group action for elements in groups * refactor: move context menu items into the event element (#1747) * feat: sheet import new features for v4 (#1730) * import milestone * fixup! import milestone * test: milestone import * add entries to group stop on new group or on group-end type * fixup! add entries to group * cleanup * add event target duration * link start if undefined * add skip import type * extract some to the excel paresing functions * tweaks to presentation * move file --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * fix: notify runtimeStore of events bieng groupd * fix: improve authentication and stage detection in demo * chore: ship logo with project * fix: client is referenced by name * fix: prevent reflow in event editor * fix: stale render on selected event due to ref mismatch * Create/Load/Delete multiple rundowns (#1696) * refactor: restore last loaded rundown * refactor: initialise rundown in ProjectService * feat: allow switching rundowns ensure on coordination between the db object and the working object server provide list of rundowns implement switch in the UI implement delete implement new rundown button * fix: render order for floating button * refactor: appropriate names to service * refactor: rundown endpoints * refactor: save last loaded rundown ID * refactor: rundown management UI * refactor: emit refetch all on project load --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * feat: recover single event subscription * fixup! feat: sheet import new features for v4 (#1730) * fix: prevent dropping a group inside another * fixup! refactor: move context menu items into the event element (#1747) * fix: prevent stale references to custom fields * fix: propagate updates to all rundowns * refactor: client rundown metadata (#1728) * generate metadata in the hook * move test * ensure there is always a last element * use for-loop * update metadata in useEfect * fully extract metadata generation * use direct assignment * cleanup --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * refactor: small imporvement and tests for coerce functions (#1752) * refactor: small imporvement and tests for coerce functions add test `coerceString` add test `coerceBoolean` add test `coerceColour` * remove old todo * fix: consistent quick add behaviour * refactor: create flat rundown with metadata * fix: show add buttons on top * feat: allow editing milestones * refactor: style tweaks to rundown elements refactor: milestones are full width refactor: cuesheet header alignment fix: editor styling in cuesheet * refactor: virtualise table * refactor: improve overscan (#1758) * bump version to 4.0.0-alpha.5 --------- Co-authored-by: Alex Christoffer Rasmussen <ac@omnivox.dk>
100 lines
3.2 KiB
TypeScript
100 lines
3.2 KiB
TypeScript
import { FormEvent, memo } from 'react';
|
|
import { IoClose } from 'react-icons/io5';
|
|
import { useSearchParams } from 'react-router';
|
|
import { Dialog } from '@base-ui-components/react/dialog';
|
|
import { OntimeView } from 'ontime-types';
|
|
|
|
import useViewSettings from '../../hooks-query/useViewSettings';
|
|
import Button from '../buttons/Button';
|
|
import IconButton from '../buttons/IconButton';
|
|
import Info from '../info/Info';
|
|
|
|
import { ViewOption } from './viewParams.types';
|
|
import { getURLSearchParamsFromObj } from './viewParams.utils';
|
|
import { useViewParamsEditorStore } from './viewParamsEditor.store';
|
|
import { ViewParamsPresets } from './ViewParamsPresets';
|
|
import ViewParamsSection from './ViewParamsSection';
|
|
|
|
import style from './ViewParamsEditor.module.scss';
|
|
|
|
interface EditFormDrawerProps {
|
|
target: OntimeView;
|
|
viewOptions: ViewOption[];
|
|
}
|
|
|
|
export default memo(ViewParamsEditor);
|
|
function ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {
|
|
const [_, setSearchParams] = useSearchParams();
|
|
const { data: viewSettings } = useViewSettings();
|
|
const { isOpen, close } = useViewParamsEditorStore();
|
|
|
|
const handleClose = () => {
|
|
close();
|
|
};
|
|
|
|
const resetParams = () => {
|
|
setSearchParams();
|
|
};
|
|
|
|
const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {
|
|
formEvent.preventDefault();
|
|
|
|
const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));
|
|
const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);
|
|
setSearchParams(newSearchParams);
|
|
};
|
|
|
|
return (
|
|
<Dialog.Root
|
|
open={isOpen}
|
|
onOpenChange={(open) => {
|
|
if (!open) {
|
|
handleClose();
|
|
}
|
|
}}
|
|
>
|
|
<Dialog.Portal>
|
|
<Dialog.Backdrop className={style.backdrop} />
|
|
<Dialog.Popup className={style.drawer}>
|
|
<div className={style.header}>
|
|
<Dialog.Title>Customise</Dialog.Title>
|
|
<IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>
|
|
<IoClose />
|
|
</IconButton>
|
|
</div>
|
|
<div className={style.body}>
|
|
{viewSettings.overrideStyles && (
|
|
<Info className={style.info}>This view style is being modified by a custom CSS file.</Info>
|
|
)}
|
|
<ViewParamsPresets target={target} />
|
|
<form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>
|
|
{viewOptions.map((section) => (
|
|
<ViewParamsSection
|
|
key={section.title}
|
|
title={section.title}
|
|
collapsible={section.collapsible}
|
|
options={section.options}
|
|
/>
|
|
))}
|
|
</form>
|
|
</div>
|
|
<div className={style.footer}>
|
|
<Button variant='subtle' size='large' onClick={resetParams} type='reset'>
|
|
Reset to default
|
|
</Button>
|
|
<Button
|
|
variant='primary'
|
|
size='large'
|
|
form='edit-params-form'
|
|
type='submit'
|
|
data-testid='apply-view-params'
|
|
>
|
|
Apply
|
|
</Button>
|
|
</div>
|
|
</Dialog.Popup>
|
|
</Dialog.Portal>
|
|
</Dialog.Root>
|
|
);
|
|
}
|