brf/client/shared/utils/serialize_form.ts

31 lines
807 B
TypeScript

export default function (form: HTMLFormElement, hook?: (...args: ANY[]) => ANY) {
const result = {}
for (const element of form.elements as unknown as HTMLInputElement[]) {
const { checked, name, type, value } = element
if (
(!hook || !hook(result, name, value, element)) &&
name &&
value &&
(checked || (type !== 'checkbox' && type !== 'radio'))
) {
if (
type === 'range' &&
((element.dataset.lower && element.min === value) || (!element.dataset.lower && element.max === value))
)
continue
if (result[name]) {
const arr = Array.isArray(result[name]) ? result[name] : [result[name]]
arr.push(value)
result[name] = arr
} else {
result[name] = value
}
}
}
return result
}