// Libraries import React, { ChangeEvent, useState, useCallback } from 'react'; // Components import { FormField } from '../FormField/FormField'; import { FormLabel } from '../FormLabel/FormLabel'; import { UnitPicker } from '../UnitPicker/UnitPicker'; // Types import { Field } from '../../types/data'; import { toIntegerOrUndefined } from '../../utils'; import { SelectOptionItem } from '../Select/Select'; import { VAR_SERIES_NAME, VAR_FIELD_NAME, VAR_CALC, VAR_CELL_PREFIX } from '../../utils/fieldDisplay'; const labelWidth = 6; export interface Props { showMinMax: boolean; value: Partial; onChange: (value: Partial, event?: React.SyntheticEvent) => void; } export const FieldPropertiesEditor: React.FC = ({ value, onChange, showMinMax }) => { const { unit, title } = value; const [decimals, setDecimals] = useState( value.decimals !== undefined && value.decimals !== null ? value.decimals.toString() : '' ); const [min, setMin] = useState(value.min !== undefined && value.min !== null ? value.min.toString() : ''); const [max, setMax] = useState(value.max !== undefined && value.max !== null ? value.max.toString() : ''); const onTitleChange = (event: ChangeEvent) => { onChange({ ...value, title: event.target.value }); }; const onDecimalChange = useCallback( (event: ChangeEvent) => { setDecimals(event.target.value); }, [value.decimals, onChange] ); const onMinChange = useCallback( (event: ChangeEvent) => { setMin(event.target.value); }, [value.min, onChange] ); const onMaxChange = useCallback( (event: ChangeEvent) => { setMax(event.target.value); }, [value.max, onChange] ); const onUnitChange = (unit: SelectOptionItem) => { onChange({ ...value, unit: unit.value }); }; const commitChanges = useCallback(() => { onChange({ ...value, decimals: toIntegerOrUndefined(decimals), min: toIntegerOrUndefined(min), max: toIntegerOrUndefined(max), }); }, [min, max, decimals]); const titleTooltip = (
Template Variables:
{'$' + VAR_SERIES_NAME}
{'$' + VAR_FIELD_NAME}
{'$' + VAR_CELL_PREFIX + '{N}'} / {'$' + VAR_CALC}
); return ( <>
Unit
{showMinMax && ( <> )} ); };