@scbt-ecom/ui 0.154.1 → 0.154.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/shared/validation/dadata/dadata.constants.js +1 -1
- package/dist/lib/shared/validation/dadata/dadata.constants.js.map +1 -1
- package/dist/lib/shared/validation/dadata/fio.validators.js +1 -1
- package/dist/lib/shared/validation/dadata/fio.validators.js.map +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js.map +1 -1
- package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js +1 -1
- package/dist/lib/widgets/dynamicFormDialog/DynamicFormDialog.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types/lib/shared/validation/dadata/dadata.constants.d.ts +2 -0
- package/dist/types/lib/widgets/dynamicForm/DynamicForm.d.ts +2 -1
- package/dist/types/lib/widgets/dynamicFormDialog/DynamicFormDialog.d.ts +2 -1
- package/dist/types/lib/widgets/model/helpers.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
const A={NON_EMPTY:()=>"Поле обязательно для заполнения",VALUE_NO_WHITESPACE:()=>"Укажите фамилию, имя и отчество через пробел",ONLY_CYRILLIC:()=>"Данные должны быть написаны кириллицей",NAME_OR_SURNAME_NON_EMPTY:()=>"Укажите имя и фамилию",INVALID_NAME:()=>"Неверно введено имя",INVALID_SURNAME:()=>"Неверно введена фамилия",INVALID_PATRONYMIC:()=>"Неверно введено отчество",ONLY_ALLOWED_CHARS:()=>"Разрешена только кириллица, пробелы и тире"},N={ONLY_CYRILLIC:/[\u0400-\u04FF\u00CB\u00EB -]/g,ONLY_ALLOWED_CHARS:/^[а-яА-ЯёЁ\s-]+$/,CHECK_HYPHEN:/^(?:[^-]+(?:-[^-]+){0,4}|[^-]+)$/,PATRONYMIC:/^[a-zA-Zа-яА-ЯёЁ]+(?:\s*-\s*[a-zA-Zа-яА-ЯёЁ]+){0,4}(?:\s+[a-zA-Zа-яА-ЯёЁ]+(?:\s*-\s*[a-zA-Zа-яА-ЯёЁ]+){0,4})?$/i};export{A as fioDefaultMessages,N as fioRegex};
|
|
2
2
|
//# sourceMappingURL=dadata.constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dadata.constants.js","sources":["../../../../../lib/shared/validation/dadata/dadata.constants.ts"],"sourcesContent":["export const fioDefaultMessages = {\n NON_EMPTY: () => 'Поле обязательно для заполнения',\n VALUE_NO_WHITESPACE: () => 'Укажите фамилию, имя и отчество через пробел',\n ONLY_CYRILLIC: () => 'Данные должны быть написаны кириллицей',\n NAME_OR_SURNAME_NON_EMPTY: () => 'Укажите имя и фамилию',\n INVALID_NAME: () => 'Неверно введено имя',\n INVALID_SURNAME: () => 'Неверно введена фамилия',\n INVALID_PATRONYMIC: () => 'Неверно введено отчество'\n}\n\nexport const fioRegex = {\n ONLY_CYRILLIC: /[\\u0400-\\u04FF\\u00CB\\u00EB -]/g,\n CHECK_HYPHEN: /^(?:[^-]+(?:-[^-]+){0,4}|[^-]+)$/,\n PATRONYMIC: /^[a-zA-Zа-яА-ЯёЁ]+(?:\\s*-\\s*[a-zA-Zа-яА-ЯёЁ]+){0,4}(?:\\s+[a-zA-Zа-яА-ЯёЁ]+(?:\\s*-\\s*[a-zA-Zа-яА-ЯёЁ]+){0,4})?$/i\n}\n"],"names":["fioDefaultMessages","fioRegex"],"mappings":"AAAO,MAAMA,EAAqB,CAChC,UAAW,IAAM,kCACjB,oBAAqB,IAAM,+CAC3B,cAAe,IAAM,yCACrB,0BAA2B,IAAM,wBACjC,aAAc,IAAM,sBACpB,gBAAiB,IAAM,0BACvB,mBAAoB,IAAM,
|
|
1
|
+
{"version":3,"file":"dadata.constants.js","sources":["../../../../../lib/shared/validation/dadata/dadata.constants.ts"],"sourcesContent":["export const fioDefaultMessages = {\n NON_EMPTY: () => 'Поле обязательно для заполнения',\n VALUE_NO_WHITESPACE: () => 'Укажите фамилию, имя и отчество через пробел',\n ONLY_CYRILLIC: () => 'Данные должны быть написаны кириллицей',\n NAME_OR_SURNAME_NON_EMPTY: () => 'Укажите имя и фамилию',\n INVALID_NAME: () => 'Неверно введено имя',\n INVALID_SURNAME: () => 'Неверно введена фамилия',\n INVALID_PATRONYMIC: () => 'Неверно введено отчество',\n ONLY_ALLOWED_CHARS: () => 'Разрешена только кириллица, пробелы и тире'\n}\n\nexport const fioRegex = {\n ONLY_CYRILLIC: /[\\u0400-\\u04FF\\u00CB\\u00EB -]/g,\n ONLY_ALLOWED_CHARS: /^[а-яА-ЯёЁ\\s-]+$/,\n CHECK_HYPHEN: /^(?:[^-]+(?:-[^-]+){0,4}|[^-]+)$/,\n PATRONYMIC: /^[a-zA-Zа-яА-ЯёЁ]+(?:\\s*-\\s*[a-zA-Zа-яА-ЯёЁ]+){0,4}(?:\\s+[a-zA-Zа-яА-ЯёЁ]+(?:\\s*-\\s*[a-zA-Zа-яА-ЯёЁ]+){0,4})?$/i\n}\n"],"names":["fioDefaultMessages","fioRegex"],"mappings":"AAAO,MAAMA,EAAqB,CAChC,UAAW,IAAM,kCACjB,oBAAqB,IAAM,+CAC3B,cAAe,IAAM,yCACrB,0BAA2B,IAAM,wBACjC,aAAc,IAAM,sBACpB,gBAAiB,IAAM,0BACvB,mBAAoB,IAAM,2BAC1B,mBAAoB,IAAM,4CAC5B,EAEaC,EAAW,CACtB,cAAe,iCACf,mBAAoB,mBACpB,aAAc,mCACd,WAAY,iHACd"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import i from"zod";import{fioRegex as r,fioDefaultMessages as o}from"./dadata.constants.js";const C=s=>{const[e,a,...d]=s.trim().replace(/\s+/g," ").split(" "),m=d.join(" ");return{surname:e,name:a,patronymic:m}},_=s=>{const{message:e}=s||{},{nameOrSurnameEmpty:a,invalidSurname:d,invalidPatronymic:m,invalidName:l}=e||{};return i.string().superRefine((n,t)=>{const{name:g,surname:u,patronymic:I}=C(n);r.ONLY_CYRILLIC.test(n)||t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:o.ONLY_CYRILLIC()}),(!g||!u)&&t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:a||o.NAME_OR_SURNAME_NON_EMPTY()}),r.ONLY_ALLOWED_CHARS.test(n)||t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:o.ONLY_ALLOWED_CHARS()}),r.CHECK_HYPHEN.test(g)||t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:l||o.INVALID_NAME()}),r.CHECK_HYPHEN.test(u)||t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:d||o.INVALID_SURNAME()}),I&&(r.PATRONYMIC.test(I)||t.addIssue({code:i.ZodIssueCode.invalid_string,validation:"regex",message:m||o.INVALID_PATRONYMIC()}))}).transform(n=>n.trimEnd()).default("")},N=s=>_(s).optional().transform(e=>e?.length?e:void 0);function L(s){const{required:e=!0,...a}=s||{};return e?_(a):N(a)}export{L as getFioSchema};
|
|
2
2
|
//# sourceMappingURL=fio.validators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fio.validators.js","sources":["../../../../../lib/shared/validation/dadata/fio.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { fioDefaultMessages, fioRegex } from './dadata.constants'\n\nconst getFioParts = (value: string) => {\n const [surname, name, ...patronymicParts] = value.trim().replace(/\\s+/g, ' ').split(' ')\n const patronymic = patronymicParts.join(' ')\n\n return { surname, name, patronymic }\n}\n\nexport type FioValidationOptions<Required extends boolean> = {\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n message?: {\n root?: string\n nameOrSurnameEmpty?: string\n invalidName?: string\n invalidSurname?: string\n invalidPatronymic?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля автозаполнения ФИО\n */\nconst getFioRequired = (props?: Omit<FioValidationOptions<true>, 'required'>) => {\n const { message } = props || {}\n\n const { nameOrSurnameEmpty, invalidSurname, invalidPatronymic, invalidName } = message || {}\n\n return z\n .string()\n .superRefine((value, context) => {\n const { name, surname, patronymic } = getFioParts(value)\n\n if (!fioRegex.ONLY_CYRILLIC.test(value)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: fioDefaultMessages.ONLY_CYRILLIC()\n })\n }\n\n if (!name || !surname) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: nameOrSurnameEmpty || fioDefaultMessages.NAME_OR_SURNAME_NON_EMPTY()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(name)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidName || fioDefaultMessages.INVALID_NAME()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(surname)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidSurname || fioDefaultMessages.INVALID_SURNAME()\n })\n }\n\n if (patronymic) {\n if (!fioRegex.PATRONYMIC.test(patronymic)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidPatronymic || fioDefaultMessages.INVALID_PATRONYMIC()\n })\n }\n }\n })\n .transform((value) => value.trimEnd())\n .default('')\n}\ntype FioRequiredSchema = ReturnType<typeof getFioRequired>\n\n/**\n * Схема валидации опционального поля автозаполнения ФИО\n */\nconst getFioOptional = (props?: Omit<FioValidationOptions<false>, 'required'>) => {\n return getFioRequired(props)\n .optional()\n .transform((value) => (!value?.length ? undefined : value))\n}\ntype FioOptionalSchema = ReturnType<typeof getFioOptional>\n\n/**\n * Схема валидации поля автозаполнения ФИО\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getFioSchema(props?: FioValidationOptions<true>): FioRequiredSchema\nexport function getFioSchema(props?: FioValidationOptions<false>): FioOptionalSchema\nexport function getFioSchema<Required extends boolean>(\n props?: FioValidationOptions<Required>\n): FioRequiredSchema | FioOptionalSchema {\n const { required = true, ...restProps } = props || {}\n\n return required ? getFioRequired(restProps) : getFioOptional(restProps)\n}\n"],"names":["getFioParts","value","surname","name","patronymicParts","patronymic","getFioRequired","props","message","nameOrSurnameEmpty","invalidSurname","invalidPatronymic","invalidName","z","context","fioRegex","fioDefaultMessages","getFioOptional","getFioSchema","required","restProps"],"mappings":"4FAGA,MAAMA,EAAeC,GAAkB,CACrC,KAAM,CAACC,EAASC,EAAM,GAAGC,CAAe,EAAIH,EAAM,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAAE,MAAM,GAAG,EACjFI,EAAaD,EAAgB,KAAK,GAAG,EAE3C,MAAO,CAAE,QAAAF,EAAS,KAAAC,EAAM,WAAAE,CAAA,CAC1B,EAoBMC,EAAkBC,GAAyD,CAC/E,KAAM,CAAE,QAAAC,GAAYD,GAAS,CAAA,EAEvB,CAAE,mBAAAE,EAAoB,eAAAC,EAAgB,kBAAAC,EAAmB,YAAAC,CAAA,EAAgBJ,GAAW,CAAA,EAE1F,OAAOK,EACJ,OAAA,EACA,YAAY,CAACZ,EAAOa,IAAY,CAC/B,KAAM,CAAE,KAAAX,EAAM,QAAAD,EAAS,WAAAG,CAAA,EAAeL,EAAYC,CAAK,EAElDc,EAAS,cAAc,KAAKd,CAAK,GACpCa,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASG,EAAmB,cAAA,CAAc,CAC3C,GAGC,CAACb,GAAQ,CAACD,IACZY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASJ,GAAsBO,EAAmB,0BAAA,CAA0B,CAC7E,EAGED,EAAS,aAAa,KAAKZ,CAAI,GAClCW,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASD,GAAeI,EAAmB,aAAA,CAAa,CACzD,EAGED,EAAS,aAAa,KAAKb,CAAO,GACrCY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASH,GAAkBM,EAAmB,gBAAA,CAAgB,CAC/D,EAGCX,IACGU,EAAS,WAAW,KAAKV,CAAU,GACtCS,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASF,GAAqBK,EAAmB,mBAAA,CAAmB,CACrE,EAGP,CAAC,EACA,UAAWf,GAAUA,EAAM,QAAA,CAAS,EACpC,QAAQ,EAAE,CACf,EAMMgB,EAAkBV,GACfD,EAAeC,CAAK,EACxB,SAAA,EACA,UAAWN,GAAYA,GAAO,OAAqBA,EAAZ,MAAkB,EAwBvD,SAASiB,EACdX,EACuC,CACvC,KAAM,CAAE,SAAAY,EAAW,GAAM,GAAGC,CAAA,EAAcb,GAAS,CAAA,EAEnD,OAAOY,EAAWb,EAAec,CAAS,EAAIH,EAAeG,CAAS,CACxE"}
|
|
1
|
+
{"version":3,"file":"fio.validators.js","sources":["../../../../../lib/shared/validation/dadata/fio.validators.ts"],"sourcesContent":["import z from 'zod'\nimport { fioDefaultMessages, fioRegex } from './dadata.constants'\n\nconst getFioParts = (value: string) => {\n const [surname, name, ...patronymicParts] = value.trim().replace(/\\s+/g, ' ').split(' ')\n const patronymic = patronymicParts.join(' ')\n\n return { surname, name, patronymic }\n}\n\nexport type FioValidationOptions<Required extends boolean> = {\n /**\n * указывает что поле обязательное\n * @default true\n */\n required?: Required\n message?: {\n root?: string\n nameOrSurnameEmpty?: string\n invalidName?: string\n invalidSurname?: string\n invalidPatronymic?: string\n }\n}\n\n/**\n * Схема валидации обязательного поля автозаполнения ФИО\n */\nconst getFioRequired = (props?: Omit<FioValidationOptions<true>, 'required'>) => {\n const { message } = props || {}\n\n const { nameOrSurnameEmpty, invalidSurname, invalidPatronymic, invalidName } = message || {}\n\n return z\n .string()\n .superRefine((value, context) => {\n const { name, surname, patronymic } = getFioParts(value)\n\n if (!fioRegex.ONLY_CYRILLIC.test(value)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: fioDefaultMessages.ONLY_CYRILLIC()\n })\n }\n\n if (!name || !surname) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: nameOrSurnameEmpty || fioDefaultMessages.NAME_OR_SURNAME_NON_EMPTY()\n })\n }\n\n if (!fioRegex.ONLY_ALLOWED_CHARS.test(value)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: fioDefaultMessages.ONLY_ALLOWED_CHARS()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(name)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidName || fioDefaultMessages.INVALID_NAME()\n })\n }\n\n if (!fioRegex.CHECK_HYPHEN.test(surname)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidSurname || fioDefaultMessages.INVALID_SURNAME()\n })\n }\n\n if (patronymic) {\n if (!fioRegex.PATRONYMIC.test(patronymic)) {\n context.addIssue({\n code: z.ZodIssueCode.invalid_string,\n validation: 'regex',\n message: invalidPatronymic || fioDefaultMessages.INVALID_PATRONYMIC()\n })\n }\n }\n })\n .transform((value) => value.trimEnd())\n .default('')\n}\ntype FioRequiredSchema = ReturnType<typeof getFioRequired>\n\n/**\n * Схема валидации опционального поля автозаполнения ФИО\n */\nconst getFioOptional = (props?: Omit<FioValidationOptions<false>, 'required'>) => {\n return getFioRequired(props)\n .optional()\n .transform((value) => (!value?.length ? undefined : value))\n}\ntype FioOptionalSchema = ReturnType<typeof getFioOptional>\n\n/**\n * Схема валидации поля автозаполнения ФИО\n * @param {DateValidationOptions} props настройки схемы\n * @typeParam `required` - `boolean`\n * @returns схема валидации поля в соответствии с настройками\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema()\n * })\n * // will returns z.string()\n *\n * @example with required value\n * z.object({\n * field: zodValidators.base.getFioSchema({ required: false })\n * })\n * // will returns z.string().optional()\n */\nexport function getFioSchema(props?: FioValidationOptions<true>): FioRequiredSchema\nexport function getFioSchema(props?: FioValidationOptions<false>): FioOptionalSchema\nexport function getFioSchema<Required extends boolean>(\n props?: FioValidationOptions<Required>\n): FioRequiredSchema | FioOptionalSchema {\n const { required = true, ...restProps } = props || {}\n\n return required ? getFioRequired(restProps) : getFioOptional(restProps)\n}\n"],"names":["getFioParts","value","surname","name","patronymicParts","patronymic","getFioRequired","props","message","nameOrSurnameEmpty","invalidSurname","invalidPatronymic","invalidName","z","context","fioRegex","fioDefaultMessages","getFioOptional","getFioSchema","required","restProps"],"mappings":"4FAGA,MAAMA,EAAeC,GAAkB,CACrC,KAAM,CAACC,EAASC,EAAM,GAAGC,CAAe,EAAIH,EAAM,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAAE,MAAM,GAAG,EACjFI,EAAaD,EAAgB,KAAK,GAAG,EAE3C,MAAO,CAAE,QAAAF,EAAS,KAAAC,EAAM,WAAAE,CAAA,CAC1B,EAoBMC,EAAkBC,GAAyD,CAC/E,KAAM,CAAE,QAAAC,GAAYD,GAAS,CAAA,EAEvB,CAAE,mBAAAE,EAAoB,eAAAC,EAAgB,kBAAAC,EAAmB,YAAAC,CAAA,EAAgBJ,GAAW,CAAA,EAE1F,OAAOK,EACJ,OAAA,EACA,YAAY,CAACZ,EAAOa,IAAY,CAC/B,KAAM,CAAE,KAAAX,EAAM,QAAAD,EAAS,WAAAG,CAAA,EAAeL,EAAYC,CAAK,EAElDc,EAAS,cAAc,KAAKd,CAAK,GACpCa,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASG,EAAmB,cAAA,CAAc,CAC3C,GAGC,CAACb,GAAQ,CAACD,IACZY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASJ,GAAsBO,EAAmB,0BAAA,CAA0B,CAC7E,EAGED,EAAS,mBAAmB,KAAKd,CAAK,GACzCa,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASG,EAAmB,mBAAA,CAAmB,CAChD,EAGED,EAAS,aAAa,KAAKZ,CAAI,GAClCW,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASD,GAAeI,EAAmB,aAAA,CAAa,CACzD,EAGED,EAAS,aAAa,KAAKb,CAAO,GACrCY,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASH,GAAkBM,EAAmB,gBAAA,CAAgB,CAC/D,EAGCX,IACGU,EAAS,WAAW,KAAKV,CAAU,GACtCS,EAAQ,SAAS,CACf,KAAMD,EAAE,aAAa,eACrB,WAAY,QACZ,QAASF,GAAqBK,EAAmB,mBAAA,CAAmB,CACrE,EAGP,CAAC,EACA,UAAWf,GAAUA,EAAM,QAAA,CAAS,EACpC,QAAQ,EAAE,CACf,EAMMgB,EAAkBV,GACfD,EAAeC,CAAK,EACxB,SAAA,EACA,UAAWN,GAAYA,GAAO,OAAqBA,EAAZ,MAAkB,EAwBvD,SAASiB,EACdX,EACuC,CACvC,KAAM,CAAE,SAAAY,EAAW,GAAM,GAAGC,CAAA,EAAcb,GAAS,CAAA,EAEnD,OAAOY,EAAWb,EAAec,CAAS,EAAIH,EAAeG,CAAS,CACxE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useState as
|
|
1
|
+
import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useState as I,createElement as L}from"react";import{getDynamicSchema as M}from"../../../src/shared/utils/getDynamicSchema.js";import{ZodUtils as R}from"../../shared/validation/utils/zodUtils.js";import{getFieldsProgress as Z,withAuthProvider as k,withApprovement as z}from"./model/helpers.js";import{useFieldsProgress as A}from"../../shared/hooks/useFieldsProgress.js";import{QueryClientProvider as Q}from"../queryClientProvider/QueryClientProvider.js";import{cn as t}from"../../shared/utils/cn.js";import{ProgressBar as U}from"../../shared/ui/progressBar/ProgressBar.js";import{HTMLRenderer as f}from"../htmlParser/HTMLRenderer.js";import{FieldMapper as q}from"../fieldMapper/FieldMapper.js";import{useControlledForm as J}from"../../shared/hooks/useControlledForm.js";import{widgetIds as y}from"../model/helpers.js";import{ResponsiveContainer as K}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";import{Icon as O}from"../../shared/ui/icon/Icon.js";import{Heading as w}from"../../shared/ui/heading/Heading.js";import{Button as T}from"../../shared/ui/button/Button.js";const fe=({fields:s,title:p,progress:r,approvement:i,chips:m,submitProps:N,auth:h,classes:o,buttonGroup:a,ssoAuthorizationTop:g=!1,backgroundColor:u,disabledButtons:S})=>{const{submitCallback:x,onErrorCallback:P}=N||{},[n,C]=I(i.type==="checkbox"?i.defaultValue:!1),c=M(s),v=R.getZodDefaults(c),{control:b,handleSubmit:B,formState:{isValid:F}}=J({schema:c,defaultValues:v,mode:"onBlur"}),j=Z(r,s),D=A({control:b,fields:j||[],schema:c}),V=l=>{x&&x({...l,agree:n})};return e(Q,{children:e("section",{id:y.form,"data-test-id":y.form,className:t("w-full",o?.root,u&&"desktop:py-[80px]"),style:{backgroundColor:u},children:d(K,{className:t("border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14","relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border"),children:[m.enabled&&d("div",{className:t("desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute","bg-color-blue-grey-100 px-2 py-1 text-color-tetriary","right-4 top-4 w-max",o?.chips?.root),children:[m.image&&e(O,{name:m.image,className:t("size-6",o?.chips?.icon)}),m.content]}),e(w,{as:"h2",className:t("text-color-dark desktop:hidden",o?.title),children:p}),e(w,{as:"h3",className:t("text-color-dark mobile:hidden",o?.title),children:p}),g&&k(h),d("form",{"data-valid":F,onSubmit:B(V,l=>P?.(l)),className:t("flex w-full flex-col gap-y-6","desktop:gap-y-8",o?.form),children:[r.enabled&&e(U,{progress:D,topContent:e(f,{html:r.title}),leftSubtitle:e(f,{html:r.leftSubtitle}),rightSubtitle:e(f,{html:r.rightSubtitle}),maxPercent:r.maxPercent,classes:o?.progressBar}),e(q,{control:b,fields:s}),d("div",{className:t("mob-body-regular-s flex flex-col items-start justify-between gap-4",{"desktop:flex-row desktop:items-center":a.length===1}),children:[z(i,n,C,o?.approvement),e("div",{className:t("flex w-full flex-col items-center justify-between gap-4 desktop:flex-row",{"desktop:w-fit":a.length===1}),children:a?.map((l,E)=>{const H=l.type==="submit"&&i.type==="checkbox"?!n:!1;return L(T,{...l,size:"lg",key:E,disabled:S||H,className:t("w-full whitespace-nowrap",{"desktop:!w-fit":a.length===1},{"w-full":!!i},o?.submit)})})})]}),!g&&k(h)]})]})})})};export{fe as DynamicForm,fe as default};
|
|
2
2
|
//# sourceMappingURL=DynamicForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport { widgetIds } from '../model'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Auth,\n type AuthMode,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement,\n withAuthProvider\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n backgroundColor?: BackgroundColors\n}\n\nexport const DynamicForm = <\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n auth,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor\n}: DynamicFormProps<AType, CType, PType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n formState: { isValid }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section\n id={widgetIds.form}\n data-test-id={widgetIds.form}\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const disabled = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","auth","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","submitCallback","onErrorCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","isValid","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","jsx","widgetIds","cn","jsxs","ResponsiveContainer","Icon","Heading","withAuthProvider","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","disabled","createElement","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { HTMLRenderer } from '../htmlParser'\nimport { widgetIds } from '../model'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Auth,\n type AuthMode,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement,\n withAuthProvider\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n backgroundColor?: BackgroundColors\n disabledButtons?: boolean\n}\n\nexport const DynamicForm = <\n AType extends ApprovementType,\n CType extends ChipsType,\n PType extends ProgressType,\n AuthType extends AuthMode\n>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n auth,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor,\n disabledButtons\n}: DynamicFormProps<AType, CType, PType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n formState: { isValid }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <section\n id={widgetIds.form}\n data-test-id={widgetIds.form}\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","auth","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","disabledButtons","submitCallback","onErrorCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","isValid","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","QueryClientProvider","jsx","widgetIds","cn","jsxs","ResponsiveContainer","Icon","Heading","withAuthProvider","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","isDisabledByLogic","createElement","Button"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as o,jsxs as
|
|
1
|
+
import{jsx as o,jsxs as g}from"react/jsx-runtime";import{useState as j,createElement as v}from"react";import{getDynamicSchema as A}from"../../../src/shared/utils/getDynamicSchema.js";import{QueryClientProvider as P}from"../queryClientProvider/QueryClientProvider.js";import{Dialog as E}from"../../shared/ui/dialog/Dialog.js";import{TypeGuards as L}from"../../shared/utils/typeGuards.js";import{FieldMapper as M}from"../fieldMapper/FieldMapper.js";import{cn as x}from"../../shared/utils/cn.js";import{HTMLRenderer as p}from"../htmlParser/HTMLRenderer.js";import{ZodUtils as Z}from"../../shared/validation/utils/zodUtils.js";import{useControlledForm as H}from"../../shared/hooks/useControlledForm.js";import{Button as I}from"../../shared/ui/button/Button.js";import{AuthProvider as s}from"../authProvider/AuthProvider.js";import{CheckboxBase as Q}from"../../shared/ui/formElements/uncontrolled/checkbox/Checkbox.js";const R=(e,l,t,m)=>e.type==="off"?null:e.type==="text"?o(p,{html:e.message,as:"div",className:m?.content}):g("label",{className:x("mob-body-regular-s text-color-dark","desktop:desk-body-regular-m desktop:gap-x-4","flex items-center justify-items-start gap-x-3"),children:[o(Q,{classes:m?.checkbox,checked:l,onCheckedChange:t}),o(p,{html:e.content,as:"div",className:m?.content})]}),b=e=>{switch(e.mode){case"esia":return o(s,{...e,mode:e.mode});case"mobileId":return o(s,{...e,mode:e.mode});case"combine":return o(s,{...e,mode:e.mode});case"off":return null}},re=({fields:e,title:l,approvement:t,submitProps:m,dialogId:h,classes:c,auth:a,buttonGroup:n,ssoAuthorizationTop:d=!1,disabledButtons:y,...k})=>{const{submitCallback:f,onErrorCallback:w}=m??{},[i,C]=j(!1),u=A(e),D=Z.getZodDefaults(u),{control:N,handleSubmit:S}=H({schema:u,defaultValues:D,mode:"onBlur"});return o(P,{children:o(E,{id:h,title:l,...k,children:g("form",{onSubmit:S(r=>{f&&f({...r,agree:i})},r=>w?.(r)),className:"flex flex-col gap-6",children:[d&&b(a),o(M,{control:N,fields:e}),R(t,i,C,c?.approvement),L.isArrayFilled(n)&&o("div",{className:"flex flex-col gap-4",children:n?.map((r,B)=>{const F=r.type==="submit"&&t.type==="checkbox"?!i:!1;return v(I,{...r,size:"lg",key:B,disabled:y||F,className:x("w-full whitespace-nowrap",{"w-full":!!t},c?.submit)})})}),!d&&b(a)]})})})};export{re as DynamicFormDialog,re as default};
|
|
2
2
|
//# sourceMappingURL=DynamicFormDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["'use client'\nimport { useState } from 'react'\nimport type { Control, FieldValues, SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { AuthProvider } from '../authProvider'\nimport { type Auth, type AuthMode } from '../dynamicForm/model'\nimport { HTMLRenderer } from '../htmlParser'\nimport type { Approvement, ApprovementType } from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, type ButtonProps, CheckboxBase, type CheckedState, Dialog } from '$/shared/ui'\nimport { cn, TypeGuards } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n onErrorCallback?: <T extends FieldValues>(error: T) => void\n}\n\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormDialogClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n approvement?: ApprovementClasses\n submit?: string\n}\n\nexport type DynamicFormDialogProps<\n AType extends ApprovementType,\n AuthType extends AuthMode\n> = React.DialogHTMLAttributes<HTMLDialogElement> & {\n fields: FieldElement<any, any, { validation: FieldValidation }>[]\n title: string\n approvement: Approvement<AType>\n dialogId: string\n submitProps?: SubmitProps\n classes?: DynamicFormDialogClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n ssoAuthorizationTop?: boolean\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n) => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nconst withAuthProvider = <Mode extends AuthMode>(auth: Auth<Mode>) => {\n switch (auth.mode) {\n case 'esia':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'mobileId':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'combine':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'off':\n return null\n }\n}\n\nexport const DynamicFormDialog = <AType extends ApprovementType, AuthType extends AuthMode>({\n fields,\n title,\n approvement,\n submitProps,\n dialogId,\n classes,\n auth,\n buttonGroup,\n ssoAuthorizationTop = false,\n ...props\n}: DynamicFormDialogProps<AType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps ?? {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <Dialog id={dialogId} title={title} {...props}>\n <form onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))} className='flex flex-col gap-6'>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n {TypeGuards.isArrayFilled(buttonGroup) && (\n <div className='flex flex-col gap-4'>\n {buttonGroup?.map((button, index) => {\n const
|
|
1
|
+
{"version":3,"file":"DynamicFormDialog.js","sources":["../../../../lib/widgets/dynamicFormDialog/DynamicFormDialog.tsx"],"sourcesContent":["'use client'\nimport { useState } from 'react'\nimport type { Control, FieldValues, SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { AuthProvider } from '../authProvider'\nimport { type Auth, type AuthMode } from '../dynamicForm/model'\nimport { HTMLRenderer } from '../htmlParser'\nimport type { Approvement, ApprovementType } from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { useControlledForm } from '$/shared/hooks'\nimport { Button, type ButtonProps, CheckboxBase, type CheckedState, Dialog } from '$/shared/ui'\nimport { cn, TypeGuards } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\ntype SubmitProps = {\n submitCallback: <T extends FieldValues>(values: T) => void\n onErrorCallback?: <T extends FieldValues>(error: T) => void\n}\n\ntype ApprovementClasses = {\n checkbox?: React.ComponentProps<typeof CheckboxBase>['classes']\n content?: string\n}\n\ntype DynamicFormDialogClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n approvement?: ApprovementClasses\n submit?: string\n}\n\nexport type DynamicFormDialogProps<\n AType extends ApprovementType,\n AuthType extends AuthMode\n> = React.DialogHTMLAttributes<HTMLDialogElement> & {\n fields: FieldElement<any, any, { validation: FieldValidation }>[]\n title: string\n approvement: Approvement<AType>\n dialogId: string\n submitProps?: SubmitProps\n classes?: DynamicFormDialogClasses\n buttonGroup: ButtonProps[]\n auth: Auth<AuthType>\n ssoAuthorizationTop?: boolean\n disabledButtons?: boolean\n}\n\nconst withApprovement = <Type extends ApprovementType>(\n approvement: Approvement<Type>,\n checked: CheckedState,\n onCheckedChange: (checked: CheckedState) => void,\n classes?: ApprovementClasses\n) => {\n if (approvement.type === 'off') return null\n\n if (approvement.type === 'text') {\n return <HTMLRenderer html={approvement.message} as='div' className={classes?.content} />\n }\n\n return (\n <label\n className={cn(\n 'mob-body-regular-s text-color-dark',\n 'desktop:desk-body-regular-m desktop:gap-x-4',\n 'flex items-center justify-items-start gap-x-3'\n )}\n >\n <CheckboxBase classes={classes?.checkbox} checked={checked} onCheckedChange={onCheckedChange} />\n <HTMLRenderer html={approvement.content} as='div' className={classes?.content} />\n </label>\n )\n}\n\nconst withAuthProvider = <Mode extends AuthMode>(auth: Auth<Mode>) => {\n switch (auth.mode) {\n case 'esia':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'mobileId':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'combine':\n return <AuthProvider {...auth} mode={auth.mode} />\n case 'off':\n return null\n }\n}\n\nexport const DynamicFormDialog = <AType extends ApprovementType, AuthType extends AuthMode>({\n fields,\n title,\n approvement,\n submitProps,\n dialogId,\n classes,\n auth,\n buttonGroup,\n ssoAuthorizationTop = false,\n disabledButtons,\n ...props\n}: DynamicFormDialogProps<AType, AuthType>) => {\n const { submitCallback, onErrorCallback } = submitProps ?? {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const { control, handleSubmit } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n return (\n <QueryClientProvider>\n <Dialog id={dialogId} title={title} {...props}>\n <form onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))} className='flex flex-col gap-6'>\n {ssoAuthorizationTop && withAuthProvider(auth)}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n {TypeGuards.isArrayFilled(buttonGroup) && (\n <div className='flex flex-col gap-4'>\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n )}\n {/*<Button {...buttonProps} type='submit' disabled={approvement.type === 'checkbox' ? !checked : false} className='w-full'>*/}\n {/* {children ?? 'Отправить форму'}*/}\n {/*</Button>*/}\n {!ssoAuthorizationTop && withAuthProvider(auth)}\n </form>\n </Dialog>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicFormDialog\n"],"names":["withApprovement","approvement","checked","onCheckedChange","classes","jsx","HTMLRenderer","jsxs","cn","CheckboxBase","withAuthProvider","auth","AuthProvider","DynamicFormDialog","fields","title","submitProps","dialogId","buttonGroup","ssoAuthorizationTop","disabledButtons","props","submitCallback","onErrorCallback","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","useControlledForm","QueryClientProvider","Dialog","values","error","FieldMapper","TypeGuards","button","index","isDisabledByLogic","createElement","Button"],"mappings":"k5BAmDA,MAAMA,EAAkB,CACtBC,EACAC,EACAC,EACAC,IAEIH,EAAY,OAAS,MAAc,KAEnCA,EAAY,OAAS,OAChBI,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,EAItFG,EAAC,QAAA,CACC,UAAWC,EACT,qCACA,8CACA,+CAAA,EAGF,SAAA,CAAAH,EAACI,EAAA,CAAa,QAASL,GAAS,SAAU,QAAAF,EAAkB,gBAAAC,EAAkC,EAC9FE,EAACC,GAAa,KAAML,EAAY,QAAS,GAAG,MAAM,UAAWG,GAAS,OAAA,CAAS,CAAA,CAAA,CAAA,EAK/EM,EAA2CC,GAAqB,CACpE,OAAQA,EAAK,KAAA,CACX,IAAK,OACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,WACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,UACH,SAAQC,EAAA,CAAc,GAAGD,EAAM,KAAMA,EAAK,KAAM,EAClD,IAAK,MACH,OAAO,IAAA,CAEb,EAEaE,GAAoB,CAA2D,CAC1F,OAAAC,EACA,MAAAC,EACA,YAAAd,EACA,YAAAe,EACA,SAAAC,EACA,QAAAb,EACA,KAAAO,EACA,YAAAO,EACA,oBAAAC,EAAsB,GACtB,gBAAAC,EACA,GAAGC,CACL,IAA+C,CAC7C,KAAM,CAAE,eAAAC,EAAgB,gBAAAC,CAAA,EAAoBP,GAAe,CAAA,EAErD,CAACd,EAASC,CAAe,EAAIqB,EAAuB,EAAK,EAEzDC,EAASC,EAAiBZ,CAAM,EAChCa,EAAgBC,EAAS,eAAeH,CAAM,EAE9C,CAAE,QAAAI,EAAS,aAAAC,CAAA,EAAiBC,EAAkB,CAClD,OAAAN,EACA,cAAAE,EACA,KAAM,QAAA,CACP,EAMD,OACEtB,EAAC2B,GACC,SAAA3B,EAAC4B,EAAA,CAAO,GAAIhB,EAAU,MAAAF,EAAe,GAAGM,EACtC,SAAAd,EAAC,QAAK,SAAUuB,EAPkCI,GAAW,CAC7DZ,GAAgBA,EAAe,CAAE,GAAGY,EAAQ,MAAOhC,EAAS,CAClE,EAK8CiC,GAAUZ,IAAkBY,CAAK,CAAC,EAAG,UAAU,sBACpF,SAAA,CAAAhB,GAAuBT,EAAiBC,CAAI,EAC7CN,EAAC+B,EAAA,CAAY,QAAAP,EAAwC,OAAAf,CAAA,CAAgB,EACpEd,EAAgBC,EAAaC,EAASC,EAAiBC,GAAS,WAAW,EAC3EiC,EAAW,cAAcnB,CAAW,GACnCb,EAAC,MAAA,CAAI,UAAU,sBACZ,SAAAa,GAAa,IAAI,CAACoB,EAAQC,IAAU,CACnC,MAAMC,EAAoBF,EAAO,OAAS,UAAYrC,EAAY,OAAS,WAAa,CAACC,EAAU,GAInG,OACEuC,EAACC,EAAA,CACE,GAAGJ,EACJ,KAAK,KACL,IAAKC,EACL,SAPanB,GAAmBoB,EAQhC,UAAWhC,EACT,2BACA,CACE,SAAU,EAAQP,CAAW,EAE/BG,GAAS,MAAA,CACX,CAAA,CAGN,CAAC,CAAA,CACH,EAKD,CAACe,GAAuBT,EAAiBC,CAAI,CAAA,CAAA,CAChD,EACF,EACF,CAEJ"}
|