import { OntimeView, URLPreset } from 'ontime-types'; import { useState } from 'react'; import { IoAdd, IoOpenOutline, IoPencil, IoTrash } from 'react-icons/io5'; import { maybeAxiosError } from '../../../../common/api/utils'; import Button from '../../../../common/components/buttons/Button'; import IconButton from '../../../../common/components/buttons/IconButton'; import Info from '../../../../common/components/info/Info'; import ExternalLink from '../../../../common/components/link/external-link/ExternalLink'; import Switch from '../../../../common/components/switch/Switch'; import Tag from '../../../../common/components/tag/Tag'; import useUrlPresets, { useUpdateUrlPreset } from '../../../../common/hooks-query/useUrlPresets'; import { handleLinks } from '../../../../common/utils/linkUtils'; import * as Panel from '../../panel-utils/PanelUtils'; import URLPresetForm from './composite/URLPresetForm'; type FormState = { isOpen: boolean; preset?: URLPreset; }; const urlPresetsDocs = 'https://docs.getontime.no/features/url-presets/'; export default function URLPresets() { const [formState, setFormState] = useState({ isOpen: false, preset: undefined }); const [actionError, setActionError] = useState(null); const { data, status } = useUrlPresets(); const { updatePreset, deletePreset, isMutating } = useUpdateUrlPreset(); const openNewForm = () => setFormState({ isOpen: true }); const openEditForm = (preset: URLPreset) => setFormState({ isOpen: true, preset }); const closeForm = () => setFormState({ isOpen: false, preset: undefined }); const persistPreset = async (preset: URLPreset) => { setActionError(null); try { await updatePreset(preset.alias, preset); } catch (error) { setActionError(maybeAxiosError(error)); } }; return ( {formState.isOpen && } URL presets URL presets are user pre-defined aliases to Ontime URLs.
This URL can contain full configuration including parameters, or simply route to a specific view.

The easiest way to get started is to copy an URL from your browser and paste it into the form. See the docs
{actionError && {actionError}} Enabled Show in nav Target view Alias {data.length === 0 && ( Create preset } /> )} {data.map((preset, index) => { const isCuesheet = preset.target === OntimeView.Cuesheet; return ( persistPreset({ ...preset, enabled })} disabled={isMutating} aria-label='Toggle preset enabled' /> persistPreset({ ...preset, displayInNav: checked })} disabled={isMutating || isCuesheet} /> {preset.target} {preset.alias} handleLinks(preset.alias, event)} disabled={isMutating} > openEditForm(preset)} variant='ghosted-white' aria-label='Edit entry' data-testid={`field__edit_${index}`} disabled={isMutating} > deletePreset(preset.alias)} variant='ghosted-destructive' aria-label='Delete entry' data-testid={`field__delete_${index}`} disabled={isMutating} > ); })}
); }