import { ChangeEvent, useEffect, useRef, useState } from 'react'; import styled from '@emotion/styled'; import { useRegisterInputEvents } from '@/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents'; import { TEXT_INPUT_STYLE } from '@/ui/theme/constants/TextInputStyle'; export const StyledTextInput = styled.input` margin: 0; ${TEXT_INPUT_STYLE} width: 100%; `; type TextInputProps = { placeholder?: string; autoFocus?: boolean; value: string; onEnter: (newText: string) => void; onEscape: (newText: string) => void; onTab?: (newText: string) => void; onShiftTab?: (newText: string) => void; onClickOutside: (event: MouseEvent | TouchEvent, inputValue: string) => void; hotkeyScope: string; onChange?: (newText: string) => void; }; export const TextInput = ({ placeholder, autoFocus, value, hotkeyScope, onEnter, onEscape, onTab, onShiftTab, onClickOutside, onChange, }: TextInputProps) => { const [internalText, setInternalText] = useState(value); const wrapperRef = useRef(null); const handleChange = (event: ChangeEvent) => { setInternalText(event.target.value); onChange?.(event.target.value); }; useEffect(() => { setInternalText(value); }, [value]); useRegisterInputEvents({ inputRef: wrapperRef, inputValue: internalText, onEnter, onEscape, onClickOutside, onTab, onShiftTab, hotkeyScope, }); return ( ); };