| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import React from "react";
- import InputRow from "../../values-form/InputRow";
- import useFormField from "../hooks/useFormField";
- import {
- GenericInputField,
- GetFinalVariablesFunction,
- InputField,
- StringInputFieldState,
- } from "../types";
- interface Props extends InputField {
- id: string;
- }
- const Input: React.FC<Props> = ({
- id,
- variable,
- label,
- required,
- placeholder,
- info,
- settings,
- isReadOnly,
- }) => {
- const {
- state,
- variables,
- setVars,
- setValidation,
- } = useFormField<StringInputFieldState>(id, {
- initValidation: {
- validated: settings?.default != undefined,
- },
- initVars: {
- [variable]: settings?.default,
- },
- });
- if (state == undefined) {
- return <></>;
- }
- const curValue =
- settings?.type == "number"
- ? !isNaN(parseFloat(variables[variable]))
- ? parseFloat(variables[variable])
- : ""
- : variables[variable] || "";
- return (
- <InputRow
- width="100%"
- type={settings?.type || "text"}
- value={curValue}
- unit={settings?.unit}
- setValue={(x: string | number) => {
- setVars((vars) => {
- return {
- ...vars,
- [variable]: x,
- };
- });
- setValidation((prev) => {
- return {
- ...prev,
- validated:
- settings?.type == "number"
- ? !isNaN(x as number)
- : !!(x as string).trim(),
- };
- });
- }}
- label={label}
- isRequired={required}
- placeholder={placeholder}
- info={info}
- disabled={isReadOnly}
- />
- );
- };
- export const getFinalVariablesForStringInput: GetFinalVariablesFunction = (
- vars,
- props: InputField
- ) => {
- if (vars[props.variable])
- return {
- [props.variable]:
- props.settings?.unit && !props.settings?.omitUnitFromValue
- ? vars[props.variable] + props.settings.unit
- : vars[props.variable],
- };
- return {
- [props.variable]: props.settings?.default,
- };
- };
- export default Input;
|