import clsx from "clsx"; import React, { ChangeEvent, InputHTMLAttributes, useState } from "react"; import { ManagedProperty } from "./ManagedObject.js"; import { Styles } from "@vertesia/ui/core"; interface InputProps extends InputHTMLAttributes { object: ManagedProperty; } const Input = React.forwardRef(({ object, type = 'text', onChange, ...props }, ref) => { const [actualValue, setValue] = useState(object.value != null ? String(object.value) : ''); const [booleanValue, setBooleanValue] = useState(object.schema.isBoolean && object.value === true); if (props.className) { props.className = clsx(Styles.INPUT, props.className); } else { props.className = Styles.INPUT; } const _onChange = (ev: ChangeEvent) => { if (props.disabled) return; setValue(ev.target.value); if (object.schema.isBoolean) { object.value = (ev.target as HTMLInputElement).checked; setBooleanValue(object.value) } else { object.value = ev.target.value; } onChange && onChange(ev); } if (type === 'textarea') { return (