import { SendButton } from '@/components/SendButton' import { CommandData } from '@/features/commands/types' import { InputSubmitContent } from '@/types' import { isMobile } from '@/utils/isMobileSignal' import type { NumberInputBlock } from '@indite.io/schemas' import { createSignal, onCleanup, onMount } from 'solid-js' import { numberInputHelper } from '../numberInputHelper' import { defaultNumberInputOptions } from '@indite.io/schemas/features/blocks/inputs/number/constants' type NumberInputProps = { block: NumberInputBlock defaultValue?: string onSubmit: (value: InputSubmitContent) => void } export const NumberInput = (props: NumberInputProps) => { const [inputValue, setInputValue] = createSignal( props.defaultValue ?? '' ) const [staticValue, bindValue, targetValue] = numberInputHelper(() => inputValue() ) let inputRef: HTMLInputElement | undefined const checkIfInputIsValid = () => inputRef?.value !== '' && inputRef?.reportValidity() const submit = () => { if (checkIfInputIsValid()) props.onSubmit({ type: 'text', value: inputRef?.value ?? inputValue().toString(), }) else inputRef?.focus() setInputValue('') } const submitWhenEnter = (e: KeyboardEvent) => { if (e.key === 'Enter') submit() } onMount(() => { if (!isMobile() && inputRef) inputRef.focus({ preventScroll: true }) window.addEventListener('message', processIncomingEvent) }) onCleanup(() => { window.removeEventListener('message', processIncomingEvent) }) const processIncomingEvent = (event: MessageEvent) => { const { data } = event if (!data.isFromBot) return if (data.command === 'setInputValue') setInputValue(data.value) } return (
{ setInputValue(targetValue(e.currentTarget)) }} type="number" min={props.block.options?.min} max={props.block.options?.max} step={props.block.options?.step ?? 'any'} />
{props.block.options?.labels?.button}
) }