import { CustomField, CustomFieldKey } from 'ontime-types'; import { useState } from 'react'; import { IoAdd } from 'react-icons/io5'; import { deleteCustomField, editCustomField, postCustomField } from '../../../../common/api/customFields'; import Button from '../../../../common/components/buttons/Button'; import Info from '../../../../common/components/info/Info'; import AppLink from '../../../../common/components/link/app-link/AppLink'; import ExternalLink from '../../../../common/components/link/external-link/ExternalLink'; import useCustomFields from '../../../../common/hooks-query/useCustomFields'; import { customFieldsDocsUrl } from '../../../../externals'; import * as Panel from '../../panel-utils/PanelUtils'; import CustomFieldEntry from './composite/CustomFieldEntry'; import CustomFieldForm from './composite/CustomFieldForm'; type CustomFieldEntity = CustomField & { key: CustomFieldKey }; type FormState = { isOpen: boolean; field?: CustomFieldEntity; }; export default function CustomFieldSettings() { const { data, refetch } = useCustomFields(); const [formState, setFormState] = useState({ isOpen: false, field: undefined }); const openNewForm = () => setFormState({ isOpen: true }); const openEditForm = (field: CustomFieldEntity) => setFormState({ isOpen: true, field }); const closeForm = () => setFormState({ isOpen: false, field: undefined }); const handleSubmit = async (customField: CustomField) => { const editing = formState.field; if (editing) { await editCustomField(editing.key, customField); } else { await postCustomField(customField); } refetch(); closeForm(); }; const handleDelete = async (key: CustomFieldKey) => { try { await deleteCustomField(key); refetch(); } catch (_error) { /** we do not handle errors here */ } }; const entries = Object.entries(data); return ( {formState.isOpen && ( )} Custom fields Custom fields allow for additional information to be added to an event. To use custom fields as a data source in an{' '} Automation, please note the generated key. See the docs Colour Type Name Key (used in Automations) {entries.length === 0 && ( Create custom field } /> )} {entries.map(([key, { colour, label, type }]) => { return ( openEditForm({ key, colour, label, type })} onDelete={handleDelete} /> ); })} ); }