169 похожих чатов

Import React, { createContext, useState } from 'react' import { validations

} from 'utils/validations'

export const FormCtx = createContext({
fields: {},
errors: {},
editFields: () => {
},
})
const Form = ({ children, ...props }) => {
const [fields, setFields] = useState({})
const [errors, setErrors] = useState({
...props.customError,
})
const [isSubmit, setSubmit] = useState(false)
const removeField = (id) => {
delete fields[id]
delete errors[id]
}
const addField = ({ field, value }) => {
if (field && field.id) {
setFields(prevState => ({
...prevState,
[field.id]: { value, ...field },
}))
return
}
throw new Error(`please add field "id" for ${field}`)
}
const editFields = (event, { id, value }) => {
if (event) {
event.persist()
}
const field = fields[id]
let val = event ? event.currentTarget.value : value
setFields((prevState) => {
return {
...prevState,
[field.id]: {
...field,
value: val,
},
}
})
return val
}
const validateField = (id, additionValidation) => {
let error = ''
let { value: fieldValue, validate, displayName, customrules = {} } = fields[id]
if (additionValidation) {
validate += '|' + additionValidation
}
const rules = validate ? validate.split('|') : ''
if (rules.length) {
for (const rule in rules) {
if (rules.hasOwnProperty(rule)) {
let ruleName = rules[rule]
let length = ''
if (rules[rule].includes('minLength') || rules[rule].includes('maxLength')) {
length = ruleName.substr(9)
ruleName = ruleName.substr(0, 9)
}
const validation = validations[ruleName] || {
rule: customrules[ruleName].rule,
formatted: customrules.formatted,
}
const isRuleSatisfied = ruleName !== 'required' && !fieldValue
? true
: validation.rule(length).test(fieldValue.toString())
if (!isRuleSatisfied) {
error = validation.formatted.apply(null, [displayName || id, length])
}
if (error !== '') {
break
}
}
}
setErrors(prevState => ({
...prevState,
[id]: error,
}))
}
}
console.log(fields)
return <form action='' className={props.classNames}>
<FormCtx.Provider value={{
fields, errors, setErrors, addField,
editFields, validateField, isSubmit, setSubmit, removeField
}}>
{children}
</FormCtx.Provider>
</form>
}
export default Form

1 ответов

11 просмотров

выложи эту простыню в песочницу, в телеге такое читать невозможно

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта