import React, { KeyboardEvent } from 'react' import { Icon, Row } from '../../../atoms' import { getGlobalStyle } from '../../../../helpers' import styles from './styles.module.css' export interface EditableInputProps { handleCancelUpdateQuantity?: () => void handleSuccessUpdateQuantity?: () => void handleChangeQuantity?: (event: { target: { name: string; value: number } }) => void quantity?: string | number } /** * EditableInput component for editing product quantity. * - Accepts only positive integers * - Limits input to 4 digits * - Enter confirms change * - Escape cancels change * * @param {EditableInputProps} props * @returns {JSX.Element} */ export const EditableInput: React.FC = ({ handleChangeQuantity, handleCancelUpdateQuantity, handleSuccessUpdateQuantity, quantity = '' }) => { /** * Handles input value change with validation. */ const handleInputChange = ( event: React.ChangeEvent ): void => { const { value } = event.target if (!/^\d{0,4}$/.test(value)) return handleChangeQuantity?.({ target: { name: 'quantity', value: value === '' ? 0 : Number(value) } }) } /** * Handles keyboard interactions. */ const handleKeyDown = (event: KeyboardEvent): void => { if (event.key === 'Enter') { event.preventDefault() handleSuccessUpdateQuantity?.() } if (event.key === 'Escape') { event.preventDefault() handleCancelUpdateQuantity?.() } } return ( ) }