UNPKG

@mantine/form

Version:

Mantine form management library

1 lines 3.8 kB
{"version":3,"file":"validate-field-value.mjs","names":[],"sources":["../../src/validate/validate-field-value.ts"],"sourcesContent":["import { getPath } from '../paths';\nimport { FormFieldValidationResult, FormValidateInput } from '../types';\nimport { getRuleForPath } from './get-rule-for-path';\nimport { validateValues } from './validate-values';\n\nconst defaultResolveError = (err: unknown): React.ReactNode =>\n err instanceof Error ? err.message : String(err);\n\nfunction fieldResultFromErrors(\n path: string,\n errors: Record<string, React.ReactNode>\n): FormFieldValidationResult {\n const pathInError = Object.keys(errors).find((errorKey) =>\n path.split('.').every((pathPart, i) => pathPart === errorKey.split('.')[i])\n );\n return { hasError: !!pathInError, error: pathInError ? errors[pathInError] : null };\n}\n\nexport function validateFieldValue<T>(\n path: unknown,\n rules: FormValidateInput<T> | undefined,\n values: T,\n resolveValidationError: (error: unknown) => React.ReactNode = defaultResolveError,\n signal: AbortSignal = new AbortController().signal\n): FormFieldValidationResult | Promise<FormFieldValidationResult> {\n if (typeof path !== 'string') {\n return { hasError: false, error: null };\n }\n\n if (typeof rules === 'function') {\n const results = validateValues(rules, values, resolveValidationError, signal);\n if (results instanceof Promise) {\n return results.then((r) => fieldResultFromErrors(path, r.errors));\n }\n return fieldResultFromErrors(path, results.errors);\n }\n\n const rule = getRuleForPath(path, rules);\n\n if (rule) {\n const value = getPath(path, values);\n try {\n const result = rule(value, values, path, signal);\n if (result instanceof Promise) {\n return result.then(\n (error) => {\n if (error) {\n return { hasError: true, error };\n }\n return { hasError: false, error: null };\n },\n (err) => ({ hasError: true, error: resolveValidationError(err) })\n );\n }\n if (result) {\n return { hasError: true, error: result };\n }\n return { hasError: false, error: null };\n } catch (err) {\n const error = resolveValidationError(err);\n return { hasError: true, error };\n }\n }\n\n const results = validateValues(rules, values, resolveValidationError, signal);\n if (results instanceof Promise) {\n return results.then((r) => fieldResultFromErrors(path, r.errors));\n }\n return fieldResultFromErrors(path, results.errors);\n}\n"],"mappings":";;;;;AAKA,MAAM,uBAAuB,QAC3B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAEjD,SAAS,sBACP,MACA,QAC2B;CAC3B,MAAM,cAAc,OAAO,KAAK,MAAM,EAAE,MAAM,aAC5C,KAAK,MAAM,GAAG,EAAE,OAAO,UAAU,MAAM,aAAa,SAAS,MAAM,GAAG,EAAE,EAAE,CAC5E;CACA,OAAO;EAAE,UAAU,CAAC,CAAC;EAAa,OAAO,cAAc,OAAO,eAAe;CAAK;AACpF;AAEA,SAAgB,mBACd,MACA,OACA,QACA,yBAA8D,qBAC9D,SAAsB,IAAI,gBAAgB,EAAE,QACoB;CAChE,IAAI,OAAO,SAAS,UAClB,OAAO;EAAE,UAAU;EAAO,OAAO;CAAK;CAGxC,IAAI,OAAO,UAAU,YAAY;EAC/B,MAAM,UAAU,eAAe,OAAO,QAAQ,wBAAwB,MAAM;EAC5E,IAAI,mBAAmB,SACrB,OAAO,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,MAAM,CAAC;EAElE,OAAO,sBAAsB,MAAM,QAAQ,MAAM;CACnD;CAEA,MAAM,OAAO,eAAe,MAAM,KAAK;CAEvC,IAAI,MAAM;EACR,MAAM,QAAQ,QAAQ,MAAM,MAAM;EAClC,IAAI;GACF,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM,MAAM;GAC/C,IAAI,kBAAkB,SACpB,OAAO,OAAO,MACX,UAAU;IACT,IAAI,OACF,OAAO;KAAE,UAAU;KAAM;IAAM;IAEjC,OAAO;KAAE,UAAU;KAAO,OAAO;IAAK;GACxC,IACC,SAAS;IAAE,UAAU;IAAM,OAAO,uBAAuB,GAAG;GAAE,EACjE;GAEF,IAAI,QACF,OAAO;IAAE,UAAU;IAAM,OAAO;GAAO;GAEzC,OAAO;IAAE,UAAU;IAAO,OAAO;GAAK;EACxC,SAAS,KAAK;GAEZ,OAAO;IAAE,UAAU;IAAM,OADX,uBAAuB,GACR;GAAE;EACjC;CACF;CAEA,MAAM,UAAU,eAAe,OAAO,QAAQ,wBAAwB,MAAM;CAC5E,IAAI,mBAAmB,SACrB,OAAO,QAAQ,MAAM,MAAM,sBAAsB,MAAM,EAAE,MAAM,CAAC;CAElE,OAAO,sBAAsB,MAAM,QAAQ,MAAM;AACnD"}