mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-21 15:09:10 +00:00
refactor: timer strategy is default
This commit is contained in:
committed by
Carlos Valente
parent
cc5c097ddc
commit
ab847a324b
@@ -9,8 +9,6 @@ import {
|
|||||||
parseUserTime,
|
parseUserTime,
|
||||||
reorderArray,
|
reorderArray,
|
||||||
swapEventData,
|
swapEventData,
|
||||||
validateEndAction,
|
|
||||||
validateTimerType,
|
|
||||||
} from 'ontime-utils';
|
} from 'ontime-utils';
|
||||||
|
|
||||||
import { RUNDOWN } from '../api/constants';
|
import { RUNDOWN } from '../api/constants';
|
||||||
@@ -37,6 +35,7 @@ export const useEventAction = () => {
|
|||||||
const {
|
const {
|
||||||
defaultPublic,
|
defaultPublic,
|
||||||
linkPrevious,
|
linkPrevious,
|
||||||
|
defaultTimeStrategy,
|
||||||
defaultDuration,
|
defaultDuration,
|
||||||
defaultWarnTime,
|
defaultWarnTime,
|
||||||
defaultDangerTime,
|
defaultDangerTime,
|
||||||
@@ -116,11 +115,15 @@ export const useEventAction = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (newEvent.timerType === undefined) {
|
if (newEvent.timerType === undefined) {
|
||||||
newEvent.timerType = validateTimerType(defaultTimerType);
|
newEvent.timerType = defaultTimerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newEvent.endAction === undefined) {
|
if (newEvent.endAction === undefined) {
|
||||||
newEvent.endAction = validateEndAction(defaultEndAction);
|
newEvent.endAction = defaultEndAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newEvent.timeStrategy === undefined) {
|
||||||
|
newEvent.timeStrategy = defaultTimeStrategy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +145,7 @@ export const useEventAction = () => {
|
|||||||
defaultEndAction,
|
defaultEndAction,
|
||||||
defaultPublic,
|
defaultPublic,
|
||||||
defaultTimerType,
|
defaultTimerType,
|
||||||
|
defaultTimeStrategy,
|
||||||
defaultWarnTime,
|
defaultWarnTime,
|
||||||
linkPrevious,
|
linkPrevious,
|
||||||
queryClient,
|
queryClient,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { EndAction, TimerType } from 'ontime-types';
|
import { EndAction, TimerType, TimeStrategy } from 'ontime-types';
|
||||||
import { validateEndAction, validateTimerType } from 'ontime-utils';
|
import { validateEndAction, validateTimerType, validateTimeStrategy } from 'ontime-utils';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
|
|
||||||
import { booleanFromLocalStorage } from '../utils/localStorage';
|
import { booleanFromLocalStorage } from '../utils/localStorage';
|
||||||
@@ -7,6 +7,7 @@ import { booleanFromLocalStorage } from '../utils/localStorage';
|
|||||||
type EditorSettingsStore = {
|
type EditorSettingsStore = {
|
||||||
defaultDuration: string;
|
defaultDuration: string;
|
||||||
linkPrevious: boolean;
|
linkPrevious: boolean;
|
||||||
|
defaultTimeStrategy: TimeStrategy;
|
||||||
defaultWarnTime: string;
|
defaultWarnTime: string;
|
||||||
defaultDangerTime: string;
|
defaultDangerTime: string;
|
||||||
defaultPublic: boolean;
|
defaultPublic: boolean;
|
||||||
@@ -14,6 +15,7 @@ type EditorSettingsStore = {
|
|||||||
defaultEndAction: EndAction;
|
defaultEndAction: EndAction;
|
||||||
setDefaultDuration: (defaultDuration: string) => void;
|
setDefaultDuration: (defaultDuration: string) => void;
|
||||||
setLinkPrevious: (linkPrevious: boolean) => void;
|
setLinkPrevious: (linkPrevious: boolean) => void;
|
||||||
|
setTimeStrategy: (timeStrategy: TimeStrategy) => void;
|
||||||
setWarnTime: (warnTime: string) => void;
|
setWarnTime: (warnTime: string) => void;
|
||||||
setDangerTime: (dangerTime: string) => void;
|
setDangerTime: (dangerTime: string) => void;
|
||||||
setDefaultPublic: (defaultPublic: boolean) => void;
|
setDefaultPublic: (defaultPublic: boolean) => void;
|
||||||
@@ -24,6 +26,7 @@ type EditorSettingsStore = {
|
|||||||
export const editorSettingsDefaults = {
|
export const editorSettingsDefaults = {
|
||||||
duration: '00:10:00',
|
duration: '00:10:00',
|
||||||
linkPrevious: true,
|
linkPrevious: true,
|
||||||
|
timeStrategy: TimeStrategy.LockDuration,
|
||||||
warnTime: '00:02:00', // 120000 same as backend
|
warnTime: '00:02:00', // 120000 same as backend
|
||||||
dangerTime: '00:01:00', // 60000 same as backend
|
dangerTime: '00:01:00', // 60000 same as backend
|
||||||
isPublic: true,
|
isPublic: true,
|
||||||
@@ -34,6 +37,7 @@ export const editorSettingsDefaults = {
|
|||||||
enum EditorSettingsKeys {
|
enum EditorSettingsKeys {
|
||||||
DefaultDuration = 'ontime-default-duration',
|
DefaultDuration = 'ontime-default-duration',
|
||||||
LinkPrevious = 'ontime-link-previous',
|
LinkPrevious = 'ontime-link-previous',
|
||||||
|
DefaultTimeStrategy = 'ontime-time-strategy',
|
||||||
DefaultWarnTime = 'ontime-default-warn-time',
|
DefaultWarnTime = 'ontime-default-warn-time',
|
||||||
DefaultDangerTime = 'ontime-default-danger-time',
|
DefaultDangerTime = 'ontime-default-danger-time',
|
||||||
DefaultPublic = 'ontime-default-public',
|
DefaultPublic = 'ontime-default-public',
|
||||||
@@ -45,6 +49,10 @@ export const useEditorSettings = create<EditorSettingsStore>((set) => {
|
|||||||
return {
|
return {
|
||||||
defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,
|
defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,
|
||||||
linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),
|
linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),
|
||||||
|
defaultTimeStrategy: validateTimeStrategy(
|
||||||
|
localStorage.getItem(EditorSettingsKeys.DefaultTimeStrategy),
|
||||||
|
editorSettingsDefaults.timeStrategy,
|
||||||
|
),
|
||||||
defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,
|
defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,
|
||||||
defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,
|
defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,
|
||||||
defaultPublic: booleanFromLocalStorage(EditorSettingsKeys.DefaultPublic, editorSettingsDefaults.isPublic),
|
defaultPublic: booleanFromLocalStorage(EditorSettingsKeys.DefaultPublic, editorSettingsDefaults.isPublic),
|
||||||
@@ -68,6 +76,12 @@ export const useEditorSettings = create<EditorSettingsStore>((set) => {
|
|||||||
localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));
|
localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));
|
||||||
return { linkPrevious };
|
return { linkPrevious };
|
||||||
}),
|
}),
|
||||||
|
setTimeStrategy: (defaultTimeStrategy) =>
|
||||||
|
set(() => {
|
||||||
|
localStorage.setItem(EditorSettingsKeys.DefaultTimeStrategy, String(defaultTimeStrategy));
|
||||||
|
return { defaultTimeStrategy };
|
||||||
|
}),
|
||||||
|
|
||||||
setWarnTime: (defaultWarnTime) =>
|
setWarnTime: (defaultWarnTime) =>
|
||||||
set(() => {
|
set(() => {
|
||||||
localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));
|
localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));
|
||||||
|
|||||||
+30
-10
@@ -1,5 +1,5 @@
|
|||||||
import { Select, Switch } from '@chakra-ui/react';
|
import { Select, Switch } from '@chakra-ui/react';
|
||||||
import { EndAction, TimerType } from 'ontime-types';
|
import { EndAction, TimerType, TimeStrategy } from 'ontime-types';
|
||||||
import { parseUserTime } from 'ontime-utils';
|
import { parseUserTime } from 'ontime-utils';
|
||||||
|
|
||||||
import TimeInput from '../../../../common/components/input/time-input/TimeInput';
|
import TimeInput from '../../../../common/components/input/time-input/TimeInput';
|
||||||
@@ -10,6 +10,7 @@ export default function EditorSettingsForm() {
|
|||||||
const {
|
const {
|
||||||
defaultDuration,
|
defaultDuration,
|
||||||
linkPrevious,
|
linkPrevious,
|
||||||
|
defaultTimeStrategy,
|
||||||
defaultWarnTime,
|
defaultWarnTime,
|
||||||
defaultDangerTime,
|
defaultDangerTime,
|
||||||
defaultPublic,
|
defaultPublic,
|
||||||
@@ -17,6 +18,7 @@ export default function EditorSettingsForm() {
|
|||||||
defaultEndAction,
|
defaultEndAction,
|
||||||
setDefaultDuration,
|
setDefaultDuration,
|
||||||
setLinkPrevious,
|
setLinkPrevious,
|
||||||
|
setTimeStrategy,
|
||||||
setWarnTime,
|
setWarnTime,
|
||||||
setDangerTime,
|
setDangerTime,
|
||||||
setDefaultPublic,
|
setDefaultPublic,
|
||||||
@@ -36,15 +38,6 @@ export default function EditorSettingsForm() {
|
|||||||
<Panel.Section>
|
<Panel.Section>
|
||||||
<Panel.Title>Rundown defaults for new events</Panel.Title>
|
<Panel.Title>Rundown defaults for new events</Panel.Title>
|
||||||
<Panel.ListGroup>
|
<Panel.ListGroup>
|
||||||
<Panel.ListItem>
|
|
||||||
<Panel.Field title='Default duration' description='Default duration for new events' />
|
|
||||||
<TimeInput<'defaultDuration'>
|
|
||||||
name='defaultDuration'
|
|
||||||
submitHandler={(_field, value) => setDefaultDuration(value)}
|
|
||||||
time={durationInMs}
|
|
||||||
placeholder={editorSettingsDefaults.duration}
|
|
||||||
/>
|
|
||||||
</Panel.ListItem>
|
|
||||||
<Panel.ListItem>
|
<Panel.ListItem>
|
||||||
<Panel.Field
|
<Panel.Field
|
||||||
title='Link previous'
|
title='Link previous'
|
||||||
@@ -57,6 +50,33 @@ export default function EditorSettingsForm() {
|
|||||||
onChange={(event) => setLinkPrevious(event.target.checked)}
|
onChange={(event) => setLinkPrevious(event.target.checked)}
|
||||||
/>
|
/>
|
||||||
</Panel.ListItem>
|
</Panel.ListItem>
|
||||||
|
<Panel.ListItem>
|
||||||
|
<Panel.Field
|
||||||
|
title='Timer strategy'
|
||||||
|
description='Which time should be maintained when event schedule is recalculated'
|
||||||
|
/>
|
||||||
|
<Select
|
||||||
|
variant='ontime'
|
||||||
|
size='sm'
|
||||||
|
width='auto'
|
||||||
|
value={defaultTimeStrategy}
|
||||||
|
onChange={(event) => setTimeStrategy(event.target.value as TimeStrategy)}
|
||||||
|
>
|
||||||
|
<option value={TimeStrategy.LockDuration}>Duration</option>
|
||||||
|
<option value={TimeStrategy.LockEnd}>End Time</option>
|
||||||
|
</Select>
|
||||||
|
</Panel.ListItem>
|
||||||
|
</Panel.ListGroup>
|
||||||
|
<Panel.ListGroup>
|
||||||
|
<Panel.ListItem>
|
||||||
|
<Panel.Field title='Default duration' description='Default duration for new events' />
|
||||||
|
<TimeInput<'defaultDuration'>
|
||||||
|
name='defaultDuration'
|
||||||
|
submitHandler={(_field, value) => setDefaultDuration(value)}
|
||||||
|
time={durationInMs}
|
||||||
|
placeholder={editorSettingsDefaults.duration}
|
||||||
|
/>
|
||||||
|
</Panel.ListItem>
|
||||||
<Panel.ListItem>
|
<Panel.ListItem>
|
||||||
<Panel.Field title='Timer type' description='Default type of timer for new events' />
|
<Panel.Field title='Timer type' description='Default type of timer for new events' />
|
||||||
<Select
|
<Select
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { MaybeString, OntimeEvent, TimeStrategy } from 'ontime-types';
|
|||||||
import TimeInputWithButton from '../../../common/components/input/time-input/TimeInputWithButton';
|
import TimeInputWithButton from '../../../common/components/input/time-input/TimeInputWithButton';
|
||||||
import { useEventAction } from '../../../common/hooks/useEventAction';
|
import { useEventAction } from '../../../common/hooks/useEventAction';
|
||||||
import { cx } from '../../../common/utils/styleUtils';
|
import { cx } from '../../../common/utils/styleUtils';
|
||||||
import { tooltipDelayFast } from '../../../ontimeConfig';
|
import { tooltipDelayFast, tooltipDelayMid } from '../../../ontimeConfig';
|
||||||
|
|
||||||
import style from './TimeInputFlow.module.scss';
|
import style from './TimeInputFlow.module.scss';
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ const TimeInputFlow = (props: EventBlockTimerProps) => {
|
|||||||
placeholder='Start'
|
placeholder='Start'
|
||||||
disabled={Boolean(linkStart)}
|
disabled={Boolean(linkStart)}
|
||||||
>
|
>
|
||||||
<Tooltip label='Link start to previous end' shouldWrapChildren openDelay={0}>
|
<Tooltip label='Link start to previous end' openDelay={tooltipDelayMid}>
|
||||||
<InputRightElement className={activeStart} onClick={() => handleLink(!linkStart)}>
|
<InputRightElement className={activeStart} onClick={() => handleLink(!linkStart)}>
|
||||||
<span className={style.timeLabel}>S</span>
|
<span className={style.timeLabel}>S</span>
|
||||||
<span className={style.fourtyfive}>{linkStart ? <IoLink /> : <IoUnlink />}</span>
|
<span className={style.fourtyfive}>{linkStart ? <IoLink /> : <IoUnlink />}</span>
|
||||||
@@ -82,7 +82,7 @@ const TimeInputFlow = (props: EventBlockTimerProps) => {
|
|||||||
disabled={isLockedDuration}
|
disabled={isLockedDuration}
|
||||||
placeholder='End'
|
placeholder='End'
|
||||||
>
|
>
|
||||||
<Tooltip label='Lock end' shouldWrapChildren openDelay={0}>
|
<Tooltip label='Lock end' openDelay={tooltipDelayMid}>
|
||||||
<InputRightElement
|
<InputRightElement
|
||||||
className={activeEnd}
|
className={activeEnd}
|
||||||
onClick={() => handleChangeStrategy(TimeStrategy.LockEnd)}
|
onClick={() => handleChangeStrategy(TimeStrategy.LockEnd)}
|
||||||
@@ -101,7 +101,7 @@ const TimeInputFlow = (props: EventBlockTimerProps) => {
|
|||||||
disabled={isLockedEnd}
|
disabled={isLockedEnd}
|
||||||
placeholder='Duration'
|
placeholder='Duration'
|
||||||
>
|
>
|
||||||
<Tooltip label='Lock duration' shouldWrapChildren openDelay={0}>
|
<Tooltip label='Lock duration' openDelay={tooltipDelayMid}>
|
||||||
<InputRightElement
|
<InputRightElement
|
||||||
className={activeDuration}
|
className={activeDuration}
|
||||||
onClick={() => handleChangeStrategy(TimeStrategy.LockDuration)}
|
onClick={() => handleChangeStrategy(TimeStrategy.LockDuration)}
|
||||||
|
|||||||
Reference in New Issue
Block a user