go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/nodes/static/_nextjs/src/components/editValue.tsx (about)

     1  /**
     2   * Copyright (c) 2024 - Present. Will Charczuk. All rights reserved.
     3   * Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository.
     4   */
     5  import { FormGroup, HTMLSelect, TextArea, InputGroup, NumericInput } from "@blueprintjs/core";
     6  import * as api from "../api/nodes";
     7  import { valueScalarNumberTypes } from "../refdata/nodeTypes";
     8  
     9  export interface EditValueProps {
    10    value?: api.NativeValueType;
    11    valueType?: string;
    12    tabIndex?: number;
    13    onValueChanged: (v: api.NativeValueType) => void;
    14  }
    15  
    16  const numbers = new Set(valueScalarNumberTypes)
    17  
    18  export function EditValue({ tabIndex, value, valueType, onValueChanged }: EditValueProps) {
    19    const onChange = (e: any) => {
    20      onValueChanged(e.target.value);
    21    }
    22    const valueTypeOrDefault = valueType || 'string';
    23    return (
    24      <FormGroup label="Value" labelInfo="(required)" labelFor="value-input" inline={true}>
    25        {valueTypeOrDefault === 'bool' && (<HTMLSelect tabIndex={tabIndex} id="value-input" name="value" options={['true', 'false']} value={String(value)} onChange={onChange} fill={true} />)}
    26        {numbers.has(valueTypeOrDefault) && (<NumericInput tabIndex={tabIndex} id="value-input" name="value" value={value !== undefined ? Number(value) : 0} onChange={onChange} fill={true} allowNumericCharactersOnly={true} />)}
    27        {valueTypeOrDefault !== 'bool' && !numbers.has(valueTypeOrDefault) && (<TextArea tabIndex={tabIndex} id="value-input" name="value" value={value === undefined ? '' : String(value)} onChange={onChange} placeholder="Please enter a value ..." fill={true} autoResize={true} />)}
    28      </FormGroup>
    29    )
    30  }