fix: allow parsing other types than SchemaObject
This commit is contained in:
parent
35e67bd63a
commit
1c216723a0
@ -18,14 +18,12 @@ export function parseQuery<T extends SchemaItem>(model: T, query: URLSearchParam
|
|||||||
return model.parse(record, opts) as ReturnType<T['parse']>
|
return model.parse(record, opts) as ReturnType<T['parse']>
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseFormData<T extends SchemaObject>(model: T, data: FormData, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
|
export function parseFormData<T extends SchemaItem>(model: T, data: FormData, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
|
||||||
const record: Record<string, unknown> = {}
|
const record: Record<string, unknown> = {}
|
||||||
// console.log('VALIDATE FORM DATA data', data)
|
// console.log('VALIDATE FORM DATA data', data)
|
||||||
for (const [key, value] of data) {
|
for (const [key, value] of data) {
|
||||||
// console.log('parse', key, value)
|
const hasMultipleValues = data.getAll(key).length > 1
|
||||||
const isArray = model.model[key].isOfType([]) ?? false
|
objectSet(record, key.split('.').map((it) => /^\d+$/g.test(it) ? parseInt(it, 10) : it), hasMultipleValues ? data.getAll(key) : value)
|
||||||
// record[key] = isArray ? data.getAll(key) : value
|
|
||||||
objectSet(record, key.split('.').map((it) => /^\d+$/g.test(it) ? parseInt(it, 10) : it), isArray ? data.getAll(key) : value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// quick hack to handle FormData not returning Checkboxes
|
// quick hack to handle FormData not returning Checkboxes
|
||||||
@ -54,11 +52,13 @@ export function parseFormData<T extends SchemaObject>(model: T, data: FormData,
|
|||||||
handleBoolean(value as unknown as SchemaItem, [...keys, key])
|
handleBoolean(value as unknown as SchemaItem, [...keys, key])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (model instanceof SchemaObject) {
|
||||||
handleSchemaForBoolean(model.model)
|
handleSchemaForBoolean(model.model)
|
||||||
// console.log(JSON.stringify(record, undefined, 2))
|
}
|
||||||
return model.parse(record, opts) as ReturnType<T['parse']>
|
return model.parse(record, opts) as ReturnType<T['parse']>
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseForm<T extends SchemaObject>(model: T, form: HTMLFormElement, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
|
export function parseForm<T extends SchemaItem>(model: T, form: HTMLFormElement, opts?: Parameters<T['parse']>[1]): ReturnType<T['parse']> {
|
||||||
return parseFormData(model, new FormData(form), opts)
|
return parseFormData(model, new FormData(form), opts)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user