Remove unused file

This commit is contained in:
Jan Zípek 2024-03-31 19:17:25 +02:00
parent f1cb72ccc8
commit ed71f7fb13
Signed by: kamen
GPG Key ID: A17882625B33AC31
1 changed files with 0 additions and 121 deletions

View File

@ -1,121 +0,0 @@
import { useCallback, useEffect, useRef, useState } from 'preact/hooks'
type BaseValue = Record<string, string>
type Props<TValue extends BaseValue> = {
onSubmit?: (value: TValue) => void
onChange?: (value: TValue) => void
defaultValue: TValue | (() => TValue)
}
type InternalState<TValue extends BaseValue> = {
onSubmit?: (value: TValue) => void
onChange?: (value: TValue) => void
subscribers: ((value: TValue) => void)[]
value: TValue
}
export const useForm = <TValue extends BaseValue = BaseValue>({
defaultValue,
onSubmit,
onChange,
}: Props<TValue>) => {
const firstRenderRef = useRef(true)
const internalRef = useRef(
(firstRenderRef.current
? {
onSubmit,
onChange,
subscribers: [],
value:
typeof defaultValue === 'function'
? (defaultValue as () => TValue)()
: defaultValue,
}
: {}) as InternalState<TValue>
)
internalRef.current = {
onSubmit,
onChange,
subscribers: internalRef.current.subscribers,
value: internalRef.current.value,
}
firstRenderRef.current = false
const handleInputRef = useCallback(
(ref: HTMLInputElement | HTMLSelectElement | null) => {
if (ref) {
const name = ref.name
const predefinedValue = internalRef.current.value[name]
if (predefinedValue) {
ref.value = predefinedValue
}
}
},
[]
)
const handleInputChange = useCallback((e: Event) => {
const target = e.target as HTMLSelectElement | HTMLInputElement
internalRef.current.value = {
...internalRef.current.value,
[target.name]: target.value,
}
internalRef.current.onChange?.(internalRef.current.value)
internalRef.current.subscribers.forEach((s) => s(internalRef.current.value))
}, [])
const register = useCallback(
(name: keyof TValue) => {
return {
name,
ref: handleInputRef,
onChange: handleInputChange,
value: internalRef.current.value[name] ?? '',
}
},
[handleInputChange]
)
const watch = useCallback(
<TName extends keyof TValue>(name: TName) => {
const [value, setValue] = useState(internalRef.current.value[name] ?? '')
useEffect(() => {
const cb = (v: TValue) => setValue(v[name])
internalRef.current.subscribers.push(cb)
return () => {
const index = internalRef.current.subscribers.indexOf(cb)
if (index >= 0) {
internalRef.current.subscribers.splice(index, 1)
}
}
}, [])
return value
},
[handleInputChange]
)
const handleSubmit = useCallback((e: Event) => {
e.preventDefault()
e.stopPropagation()
internalRef.current.onSubmit?.(internalRef.current.value)
}, [])
return {
register,
watch,
handleSubmit,
}
}