@itcase/forms 1.0.37 → 1.0.38

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.
@@ -1 +1,2339 @@
1
- "use strict";var e=require("libphonenumber-js"),t=require("react"),a=require("final-form"),r=require("react-final-form"),i=require("prop-types"),o=require("clsx"),l=require("@itcase/ui/components/Checkbox"),s=require("@itcase/ui/components/Divider"),n=require("@itcase/ui/components/Text"),u=require("@itcase/ui/hooks/useDeviceTargetClass"),d=require("@itcase/ui/hooks/useStyles"),m=require("@itcase/ui/components/Choice"),c=require("@itcase/ui/components/Code"),f=require("@itcase/ui/components/DatePicker"),p=require("axios"),b=require("react-dropzone"),g=require("file-selector"),h=require("lodash/castArray"),x=require("@itcase/common"),_=require("@itcase/ui/components/Loader"),T=require("@itcase/ui/components/Title"),v=require("@itcase/ui/components/Input"),y=require("@itcase/ui/components/Icon"),C=require("@itcase/ui/components/RadioButton"),S=require("@itcase/ui/components/Segmented"),E=require("@itcase/ui/components/Select"),F=require("@itcase/ui/components/Switch"),N=require("@itcase/ui/components/Textarea"),P=require("@itcase/ui/components/Button"),z=require("@itcase/ui/components/Group"),k=require("@itcase/ui/components/Notification"),R=require("final-form-focus");function q(e){return e&&e.__esModule?e:{default:e}}var j=q(t),B=q(i),M=q(o),W=q(p),O=q(h),D=q(R);const w=(e,t)=>a.setIn(e,t.path,t.message),L=Object.create(null);function V(e,a){const r=t.useMemo((()=>e&&(e=>async function(t){try{await e.validate(t,{abortEarly:!1})}catch(e){if(e.inner)return e.inner.reduce(w,L);console.warn("itcase-forms schema.validate error: An error not related to the form occurred during validation. Validation ignored.")}})(e)),[e,a]);return r}function I(e){const{after:a,afterItem:r,before:i,beforeItem:o,children:l,className:m,desc:c,descTextSize:f,descTextColor:p,descTextWidth:b,divider:g,dividerDirection:h,dividerFill:x,dividerSize:_,dividerWidth:T,fieldClassName:v,id:y,inputName:C,inputValue:S,isRequired:E,label:F,labelTextSize:N,labelTextColor:P,labelTextWidth:z,errorMessageTextSize:k,errorMessageTextWeight:R,errorMessageTextColor:q,message:B,messageTextSize:W,messageTextColor:O,messageTextWeight:D,metaActive:w,metaError:L,metaModifiedSinceLastSubmit:V,metaSubmitError:I,metaSubmitFailed:A,metaTouched:$,metaValid:H,set:G,type:K,hideMessage:U,isHidden:J,tag:Y,dataTour:Q,showErrorsOnSubmit:X}=e,Z=L||!V&&I||!1,ee=t.useMemo((()=>X?A&&$&&Z:$&&Z),[X,A,$,Z]),te=t.useMemo((()=>(Array.isArray(S)?S.length:S)&&(H||!L&&I&&V)),[S,H,L,I,V]),ae=t.useMemo((()=>M.default(m,ee&&"form__item_state_error",te&&"form__item_state_success",E&&"form__item_state_required",w&&"form__item_state_focus",S&&"form__item_state_filled")),[m,ee,te,E,w,S]),re=t.useMemo((()=>M.default(v,ee&&`${v}_state_error`,te&&`${v}_state_success`,w&&`${v}_state_focus`,S&&`${v}_state_filled`)),[v,ee,te,w,S]),ie=u.useDeviceTargetClass(e,{prefix:"form-field_size_",propsKey:"size"}),oe=u.useDeviceTargetClass(e,{prefix:"fill_",propsKey:"fill"}),le=u.useDeviceTargetClass(e,{prefix:"fill_",propsKey:"inputFill"}),se=u.useDeviceTargetClass(e,{prefix:"form-field_shape_",propsKey:"shape"}),ne=u.useDeviceTargetClass(e,{prefix:"form-field__item-value_shape_",propsKey:"inputShape"}),ue=u.useDeviceTargetClass(e,{prefix:"direction_",propsKey:"direction"}),de=u.useDeviceTargetClass(e,{prefix:"width_",propsKey:"width"}),{styles:me}=d.useStyles(e);return j.default.createElement(Y,{className:M.default(ae,"form__item","form-field",K&&`form-field_type_${K}`,G&&`form-field_set_${G}`,ie,oe,se,J&&"form-field_state_hidden",ue,de),"data-tour":Q,style:me},i,F&&j.default.createElement("div",{htmlFor:y,className:"form-field__label"},j.default.createElement(n.Text,{size:N,textWeight:z,textColor:P},F)),c&&j.default.createElement("div",{className:"form-field__desc"},j.default.createElement(n.Text,{size:f,textWeight:b,textColor:p},c)),j.default.createElement("div",{className:M.default("form-field__content",le,ne)},j.default.createElement("div",{className:M.default("form-field__content-inner",re)},o,l,r),g&&j.default.createElement(s.Divider,{className:"form-field__item-divider",width:T,direction:h,size:_,fill:x})),!U&&j.default.createElement("div",{className:"form-field__message"},Boolean(ee)&&j.default.createElement(n.Text,{className:"form-field__message-item form-field__message-item_type-error",size:k,textWeight:R,textColor:q,id:`${C}-error`},Z),Boolean(B)&&!ee&&j.default.createElement(n.Text,{className:"form-field__message-item form-field__message-item_type_message",size:W,textWeight:D,textColor:O},B),Boolean(!ee)&&Boolean(!B)&&j.default.createElement(n.Text,{className:"form-field__message-item form-field__message-item_type_message",size:W}," ")),a)}function A(e){const{inputName:a}=e,{change:i}=r.useForm();return t.useEffect((()=>()=>{i(a,void 0)}),[]),j.default.createElement(I,e)}I.defaultProps={tag:"div",type:"normal",errorMessageTextSize:"s",errorMessageTextColor:"errorTextSecondary"},I.propTypes={after:B.default.any,afterItem:B.default.any,autoComplete:B.default.string,before:B.default.any,beforeItem:B.default.any,children:B.default.any,className:B.default.string,desc:B.default.string,descTextSize:B.default.string,descTextColor:B.default.string,descTextWidth:B.default.string,dividerDirection:B.default.string,dividerFill:B.default.string,dividerSize:B.default.string,dividerWidth:B.default.string,fieldClassName:B.default.string,id:B.default.string,inputName:B.default.string,inputOnBlur:B.default.func,inputOnChange:B.default.func,inputOnFocus:B.default.func,inputValue:B.default.any,isRequired:B.default.bool,itemType:B.default.string,label:B.default.any,labelTextSize:B.default.string,labelTextColor:B.default.string,labelTextWidth:B.default.string,errorMessageTextSize:B.default.string,errorMessageTextWidth:B.default.string,errorMessageTextColor:B.default.string,message:B.default.string,messageSize:B.default.string,messageTextColor:B.default.string,messageTextWidth:B.default.string,metaActive:B.default.bool,metaError:B.default.string,metaModifiedSinceLastSubmit:B.default.bool,metaSubmitError:B.default.string,metaSubmitFailed:B.default.bool,metaTouched:B.default.bool,metaValid:B.default.bool,set:B.default.string,showErrorsOnSubmit:B.default.bool,type:B.default.string},A.propTypes={autoComplete:B.default.string,children:B.default.any,className:B.default.string,fieldClassName:B.default.string,hint:B.default.string,inputName:B.default.string,inputOnBlur:B.default.func,inputOnChange:B.default.func,inputOnFocus:B.default.func,inputValue:B.default.any,isRequired:B.default.bool,itemType:B.default.string,label:B.default.any,metaActive:B.default.bool,metaError:B.default.string,metaModifiedSinceLastSubmit:B.default.bool,metaSubmitError:B.default.string,metaSubmitFailed:B.default.bool,metaTouched:B.default.bool,metaValid:B.default.bool,showErrorsOnSubmit:B.default.bool};const $=j.default.memo((function(e){const{name:a,isRequired:i,onChange:o,fieldProps:s,inputProps:n,classNameGroupItem:u,hideMessage:d}=e;return j.default.createElement(r.Field,{name:a,type:"checkbox"},(({input:e,meta:a})=>{const r=t.useCallback((t=>{e.onChange(t),o&&o(t.target.checked,e.name)}),[o]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_checkbox","form__item_type_checkbox",u),fieldClassName:"form-checkbox",inputName:e.name,inputValue:e.checked,isRequired:i,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,tag:"label",hideMessage:d},s),j.default.createElement(l.Checkbox,Object.assign({autoComplete:"nope",checked:e.checked,name:e.name,type:"checkbox",onBlur:e.onBlur,onChange:r,onFocus:e.onFocus},n)))}))}));$.defaultProps={inputProps:{},fieldProps:{}},$.propTypes={fieldProps:B.default.object,inputProps:B.default.object,isRequired:B.default.bool,name:B.default.string,onChange:B.default.func};const H=j.default.memo((function(e){const{options:a,classNameGroupItem:i,fieldProps:o,inputProps:l,isMultiple:s,isRequired:n,initialValue:u,label:d,name:c,messageType:f,hideMessage:p,placeholder:b}=e,{change:g}=r.useForm();return j.default.createElement(r.Field,{name:c,initialValue:u},(({input:e,meta:r})=>{const u=t.useMemo((()=>{const t={value:null,label:null};if(e.value){return a.find((t=>t.value===e.value))||t}return t}),[e.value]),h=t.useCallback((e=>{g(c,e.value)}),[g]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_choice","form__item_type_choice",i),fieldClassName:"form-choice",inputName:e.name,inputValue:e.value||[],isRequired:n,label:d,messageType:f,metaActive:r.active,metaError:r.error,metaModifiedSinceLastSubmit:r.modifiedSinceLastSubmit,metaSubmitError:r.submitError,metaSubmitFailed:r.submitFailed,metaTouched:r.touched,metaValid:r.valid,hideMessage:p},o),j.default.createElement(m.Choice,Object.assign({className:M.default(r.active&&"form-choice_state_focus",r.error&&r.touched&&"form-choice_state_error"),options:a,inputName:e.name,inputValue:e.value||[],isMultiple:s,isRequired:n,placeholder:b,active:u,setActiveSegment:h},l)))}))}));H.propTypes={options:B.default.array.isRequired,name:B.default.string.isRequired,className:B.default.string,inputClass:B.default.string,isMultiple:B.default.bool,isRequired:B.default.bool,label:B.default.string,placeholder:B.default.string};const G=j.default.memo((function(e){const{Component:t,isRequired:a,name:i,fieldProps:o,classNameGroupItem:l,hideMessage:s}=e;return j.default.createElement(r.Field,{name:i},(({input:r,meta:i})=>j.default.createElement(A,Object.assign({className:M.default("form-field_type_custom","form__item_type_custom",l),fieldClassName:"form-custom",inputName:r.name,inputValue:r.value,isRequired:a,metaActive:i.active,metaError:i.error,metaModifiedSinceLastSubmit:i.modifiedSinceLastSubmit,metaSubmitError:i.submitError,metaSubmitFailed:i.submitFailed,metaTouched:i.touched,metaValid:i.valid,hideMessage:s},o),j.default.createElement(t,Object.assign({},e,{input:r,meta:i})))))}));G.defaultProps={inputProps:{},fieldProps:{}},G.propTypes={name:B.default.string.isRequired,isRequired:B.default.bool,fieldProps:B.default.object,inputProps:B.default.object};const K=j.default.memo((function(e){const{isRequired:t,name:a,fieldProps:i,inputProps:o,classNameGroupItem:l,hideMessage:s}=e;return j.default.createElement(r.Field,{name:a},(({input:e,meta:a})=>j.default.createElement(A,Object.assign({className:M.default("form-field_type_code","form__item_type_code",l),fieldClassName:"form-code",inputName:e.name,inputValue:e.value,isRequired:t,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,hideMessage:s},i),j.default.createElement(c.Code,Object.assign({autoComplete:"nope",name:e.name,value:e.value,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus},o)))))}));function U(e){const{isRequired:a,fieldProps:i,inputProps:o,datePickerProps:l,name:s,iconSize:n,iconBorder:u,iconBorderHover:d,iconFill:m,iconFillHover:c,iconRevealableShow:p,iconRevealableHide:b,iconShape:g,hideMessage:h,onChange:x,classNameGroupItem:_}=e;return j.default.createElement(r.Field,{name:s},(({input:e,meta:r})=>{const s=t.useCallback((t=>{e.onChange(t),x&&x(t,e.name)}),[x]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_datepicker","form__item_type_datepicker",_),fieldClassName:"form-datepicker",inputName:e.name,inputValue:e.value||"",isRequired:a,metaActive:r.active,metaError:r.error,metaModifiedSinceLastSubmit:r.modifiedSinceLastSubmit,metaSubmitError:r.submitError,metaSubmitFailed:r.submitFailed,metaTouched:r.touched,metaValid:r.valid,hideMessage:h},i),j.default.createElement(f.DatePickerInput,{name:e.name,value:e.value||"",onBlur:e.onBlur,onChange:s,onFocus:e.onFocus,inputProps:o,datePickerProps:l}))}))}async function J(e){try{const t=await W.default({url:`/api/${e}/`,responseType:"blob"}),a=t.data,r=t.headers["content-disposition"]?.split("filename=")[1];let i=r?.substring(1).slice(0,-1);if(!i){const e=a.type.split("/"),t=e[e.length-1];i=`${(new Date).getTime()}.${t}`}return new File([a],i,{type:a.type})}catch(e){return console.log("error: ",e),null}}function Y(e,t){t=t||(()=>{});const a=new FileReader;a._readedFile=e,a.onabort=()=>t(),a.onerror=()=>t(),a.onload=e=>{e.target._readedFile.dataURL=a.result,t()},e instanceof File?a.readAsDataURL(e):t()}K.defaultProps={inputProps:{},fieldProps:{}},K.propTypes={name:B.default.string.isRequired,isRequired:B.default.bool,fieldProps:B.default.object,inputProps:B.default.object},U.defaultProps={inputProps:{},fieldProps:{}},U.propTypes={fieldProps:B.default.object,inputProps:B.default.object,isRequired:B.default.bool,name:B.default.string.isRequired,onChange:B.default.func};const Q=j.default.memo((function(e){const{inputName:a,size:i,className:o,fileErrorText:l,hintTitleTextSize:s,removeThumbTextSize:d,removeThumbTextColor:m,removeThumbTextWeight:c,thumbNameTextSize:f,thumbNameTextColor:p,removeThumbTextHoverColor:h,thumbNameTextWrap:T,thumbNameTextWeight:v,hintTitleTextColor:y,hintTitleTextWrap:C,thumbColumn:S,hintTitleTextWeight:E,hintDescriptionTextSize:F,hintDescriptionTextColor:N,hintDescriptionTextWrap:P,hintDescriptionTextWeight:z,errorMessageTextSize:k,errorMessageTextWeight:R,errorMessageTextColor:q,inputValue:B,maxFiles:W,maxSize:D,removeThumbText:w,hintTitle:L,hintDescription:V,isShowFilename:I,isPreviews:A,loadingText:$,dropzoneProps:H={},onAddFiles:G,onDeleteFile:K}=e,[U,Q]=t.useState(""),[X,Z]=t.useState(!1),[ee,te]=t.useState(B?O.default(B):[]),{change:ae}=r.useForm(),re=t.useCallback((e=>{const t=1==H.maxFiles?e[0]:e;return ae(a,t),t}),[H,ae]),{getRootProps:ie,getInputProps:oe}=b.useDropzone({maxSize:D||10485760,maxFiles:W||5,...H,getFilesFromEvent:async e=>{const t=(await g.fromEvent(e)).filter((e=>e instanceof File));return[...ee,...t]},onDropAccepted:(e,t)=>{A&&e.forEach((e=>{e.error||(e.preview=URL.createObjectURL(e))})),te(e),Q("");const r=e.map((e=>new Promise((t=>Y(e,t)))));Promise.all(r).then((()=>{const t=re(e);G&&G(t,a)}))},onDropRejected:(e,t)=>{if(e.length){const t=e[0].errors[0]?.message;Q(t||"Error on adding file")}else Q("")}}),le=t.useCallback(((e,t)=>{e.stopPropagation(),e.preventDefault();const r=[...ee];r.splice(t,1),K&&K(ee[t],a),re(r)}),[ee,re,K]),se=t.useCallback((async e=>{Z(!0);const t=await async function(e,t){const a=[];for await(const r of O.default(e)){let e=null;const i="string"==typeof r&&r.includes("/");(r.image||i)&&(e=await J(r.image||r),e&&Y(e)),r.dataURL&&(e=x.createFileFromDataURL(r.name||r.path,r.dataURL),e.dataURL=r.dataURL),e&&(e.id=r.id,t&&(e.preview=URL.createObjectURL(e)),a.push(e))}return a}(e,A);return Z(!1),te(t),t}),[A]);t.useEffect((()=>{se(B).then((e=>re(e)))}),[]),t.useEffect((()=>{B?se(B):te([])}),[B]),t.useEffect((()=>()=>ee.forEach((e=>URL.revokeObjectURL(e?.preview)))),[]);const ne=u.useDeviceTargetClass(e,{prefix:"fill_",propsKey:"fill"}),ue=u.useDeviceTargetClass(e,{prefix:"fill_hover_",propsKey:"fillHover"}),de=u.useDeviceTargetClass(e,{prefix:"border-width_",propsKey:"borderWidth"}),me=u.useDeviceTargetClass(e,{prefix:"border-color_",propsKey:"borderColor"}),ce=u.useDeviceTargetClass(e,{prefix:"border-color_hover_",propsKey:"borderColorHover"}),fe=u.useDeviceTargetClass(e,{prefix:"border_type_",propsKey:"borderType"}),pe=u.useDeviceTargetClass(e,{prefix:"form-dropzone_shape_",propsKey:"shape"}),be=u.useDeviceTargetClass(e,{prefix:"border-width_",propsKey:"thumbBorderWidth"}),ge=u.useDeviceTargetClass(e,{prefix:"form-dropzone__thumb_direction_",propsKey:"thumbDirection"}),he=u.useDeviceTargetClass(e,{prefix:"border-color_",propsKey:"thumbBorderColor"}),xe=u.useDeviceTargetClass(e,{prefix:"border-color_hover_",propsKey:"thumbBorderColorHover"}),_e=u.useDeviceTargetClass(e,{prefix:"border_type_",propsKey:"thumbBorderType"});return j.default.createElement(j.default.Fragment,null,j.default.createElement("div",ie({className:`form-dropzone__dropzone dropzone ${o} thumbColumn form-dropzone__dropzone_size_${i} ${pe}`}),j.default.createElement("input",Object.assign({},oe(),{name:a})),j.default.createElement("div",{className:M.default("form-dropzone__dropzone-wrapper",S&&`form-dropzone__dropzone-wrapper_column_${S}`,ne,ue,de,me,ce,fe)},ee.map(((e,t)=>j.default.createElement("aside",{className:M.default("form-dropzone__thumb",ne,ge,be,he,xe,_e),key:`${e.id||`${e.name}_${t}`||"i"+t}`},A&&!e.error&&j.default.createElement("div",{className:"form-dropzone__thumb-image"},j.default.createElement("img",{className:"form-dropzone__thumb-image-inner",src:e.preview||e.image,onLoad:()=>{URL.revokeObjectURL(e.preview)}})),e.error&&j.default.createElement("div",null,j.default.createElement(n.Text,{size:f,textColor:p,textWrap:T,textWeight:v},l||e.error)),I&&j.default.createElement("div",{className:"form-dropzone__thumb-name"},j.default.createElement(n.Text,{size:f,textColor:p,textWrap:T,textWeight:v,className:"form-dropzone__thumb-name-inner"},e.name)),X&&j.default.createElement("div",{className:"form-dropzone__thumb-loader"},j.default.createElement(_.Loader,{fill:"surfacePrimary",height:"fill",itemFill:"surfaceItemAccent",set:"simple",width:"fill"})),j.default.createElement("div",{className:"form-dropzone__thumb-remove",onClick:e=>le(e,t)},j.default.createElement(n.Text,{size:d,textColor:m,textWeight:c,textColorHover:h,className:"form-dropzone__thumb-remove-text"},w||"Remove"))))),ee.length?j.default.createElement("div",{className:"form-dropzone__hint form-dropzone__hint_type_add-more"},j.default.createElement(n.Text,{size:s,textColor:y,textWrap:C,textWeight:E,className:"form-dropzone__hint-title"},L||"Select a file or drag in form"),j.default.createElement(n.Text,{size:F,textColor:N,textWrap:P,textWeight:z,className:"form-dropzone__hint-text"},V)):j.default.createElement("div",{className:"form-dropzone__hint"},j.default.createElement(n.Text,{size:s,textColor:y,textWrap:C,textWeight:E,className:"form-dropzone__hint-title"},L||"Select a file or drag in form"),j.default.createElement(n.Text,{size:F,textColor:N,textWrap:P,textWeight:z,className:"form-dropzone__hint-text"},V)))),U&&j.default.createElement("div",{className:"form-field__message"},j.default.createElement(n.Text,{className:"form-field__message-item form-field__message-item_type_message",size:k,textWeight:R,textColor:q},U)))}));Q.propTypes={dropzoneProps:B.default.object,hintDescription:B.default.string,hintTitle:B.default.string,inputName:B.default.string,inputValue:B.default.any,isPreviews:B.default.bool,isShowFilename:B.default.bool,loadingText:B.default.string,metaError:B.default.string,metaTouched:B.default.bool,removeThumbText:B.default.string,onAddFiles:B.default.func,onDeleteFile:B.default.func};const X=j.default.memo((function(e){const{name:t,shape:a,size:i,borderWidth:o,borderColor:l,borderColorHover:s,borderType:n,label:u,thumbBorderWidth:d,thumbBorderColor:m,thumbBorderColorHover:c,thumbBorderType:f,removeThumbTextHoverColor:p,labelTextColor:b,fill:g,fillHover:h,className:x,removeThumbText:_,thumbNameTextSize:T,thumbNameTextColor:v,thumbNameTextWrap:y,thumbNameTextWeight:C,removeThumbTextSize:S,removeThumbTextColor:E,removeThumbTextWeight:F,hintTitle:N,errorMessageTextSize:P,errorMessageTextWeight:z,errorMessageTextColor:k,fieldProps:R,hintTitleTextSize:q,hintTitleTextColor:B,hintTitleTextWrap:W,hintTitleTextWeight:O,hintDescriptionTextSize:D,hintDescriptionTextColor:w,hintDescriptionTextWrap:L,hintDescriptionTextWeight:V,hideMessage:I,thumbDirection:$,hintDescription:H,isShowFilename:G,fileErrorText:K,dropzoneProps:U,maxFiles:J,maxSize:Y,thumbColumn:X,isRequired:Z,isPreviews:ee,onAddFiles:te,onDeleteFile:ae,classNameGroupItem:re}=e;return j.default.createElement(r.Field,{name:t},(({input:e,meta:t})=>j.default.createElement(A,Object.assign({className:M.default("form-field_type_dropzone","form__item_type_dropzone",re),fieldClassName:"form-dropzone",inputName:e.name,inputValue:e.value,isRequired:Z,label:u,labelTextColor:b,metaActive:t.active,metaError:t.error,metaModifiedSinceLastSubmit:t.modifiedSinceLastSubmit,metaSubmitError:t.submitError,metaSubmitFailed:t.submitFailed,metaTouched:t.touched,metaValid:t.valid,hideMessage:I},R),j.default.createElement(Q,{dropzoneProps:U,hintDescription:H,hintTitle:N,borderWidth:o,borderColor:l,borderColorHover:s,borderType:n,thumbBorderWidth:d,thumbBorderColor:m,thumbBorderColorHover:c,thumbBorderType:f,fileErrorText:K,fill:g,size:i,maxFiles:J,maxSize:Y,removeThumbTextHoverColor:p,fillHover:h,className:x,thumbColumn:X,thumbDirection:$,inputName:e.name,inputValue:e.value,thumbNameTextSize:T,thumbNameTextColor:v,thumbNameTextWrap:y,thumbNameTextWeight:C,hintTitleTextSize:q,hintTitleTextColor:B,hintTitleTextWrap:W,hintTitleTextWeight:O,removeThumbTextSize:S,removeThumbTextColor:E,removeThumbTextWeight:F,hintDescriptionTextSize:D,hintDescriptionTextColor:w,hintDescriptionTextWrap:L,hintDescriptionTextWeight:V,errorMessageTextSize:P,errorMessageWeight:z,errorMessageTextColor:k,isPreviews:ee,shape:a,isShowFilename:G,metaError:t.error,metaTouched:t.touched,removeThumbText:_,onAddFiles:te,onDeleteFile:ae}))))}));X.defaultProps={errorMessageTextSize:"s",errorMessageTextColor:"errorTextPrimary",thumbColumn:1,thumbDirection:"vertical"},X.propTypes={name:B.default.string.isRequired,className:B.default.string,classNameGroupItem:B.default.string,classNameInput:B.default.string,classNameInputWrapper:B.default.string,dropzoneProps:B.default.object,hintDescription:B.default.string,hintTitle:B.default.string,inputClass:B.default.string,isPreviews:B.default.bool,isRequired:B.default.bool,isShowFilename:B.default.bool,label:B.default.any,removeThumbText:B.default.string,onAddFiles:B.default.func,onDeleteFile:B.default.func};const Z=j.default.memo((function(e){const{after:a,before:i,className:o,label:l,labelTextColor:s,labelTextSize:u,labelTextWeight:d,message:m,errorMessageTextSize:c,errorMessageTextWeight:f,errorMessageTextColor:p,messageTextSize:b,messageTextWeight:g,messageTextColor:h,children:x,dataTour:_,hideMessage:v,name:y,showErrorsOnSubmit:C}=e;return j.default.createElement(r.Field,{name:y},(({input:e,meta:r})=>{const S=r.error||!r.modifiedSinceLastSubmit&&r.submitError||!1,E=t.useMemo((()=>C?r.submitFailed&&r.touched&&S:r.touched&&S),[C,r.submitFailed,r.touched,S]);return j.default.createElement("div",{className:M.default("form__group",o),"data-tour":_},j.default.createElement("div",{className:"form__group-wrapper"},i,j.default.createElement("div",{className:"form__group-label"},j.default.createElement(T.Title,{textColor:s,size:u,textWeight:d},l)),j.default.createElement("div",{className:"form__group-items"},x),a),!v&&j.default.createElement(j.default.Fragment,null,Boolean(E)&&j.default.createElement(n.Text,{className:"form__group-message form__group-message_type-error",size:c,textWeight:f,textColor:p,id:`${y}-error`},S),Boolean(m)&&!E&&j.default.createElement(n.Text,{className:"form__group-message",size:b,textWeight:g,textColor:h},m),Boolean(!E)&&Boolean(!m)&&j.default.createElement(n.Text,{className:"form__group-message",size:b}," ")))}))}));Z.defaultProps={inputProps:{},fieldProps:{},type:"normal",errorMessageTextSize:"s",errorMessageTextColor:"errorTextPrimary",messageTextSize:"s",messageTextColor:"surfaceTextTertiary"},Z.propTypes={name:B.default.string.isRequired,isRequired:B.default.bool,fieldProps:B.default.object,inputProps:B.default.object};const ee=j.default.memo((function(e){const{isPassword:a,isRequired:i,fieldProps:o,inputProps:l,isRevealable:s,name:n,parse:u,iconSize:d,iconBorder:m,iconBorderHover:c,iconFill:f,iconFillHover:p,iconRevealableShow:b,iconRevealableHide:g,iconShape:h,hideMessage:x,onChange:_,classNameGroupItem:T}=e,[C,S]=t.useState(!1),E=t.useMemo((()=>a?C?"text":"password":"text"),[C,a]),F=t.useCallback((e=>{e.preventDefault(),S((e=>!e))}),[S]);return j.default.createElement(r.Field,{name:n,parse:u},(({input:e,meta:a})=>{const r=t.useCallback((t=>{e.onChange(t),_&&_(t.target.value,e.name)}),[_]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_input","form__item_type_input",T),fieldClassName:s?"form-password":"form-input",inputName:e.name,inputValue:e.value||"",isRequired:i,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,hideMessage:x},o),j.default.createElement(v.Input,Object.assign({className:M.default(a.active&&"input_state_focus",a.error&&a.touched&&"input_state_error"),autoComplete:"nope",name:e.name,type:E,value:e.value||"",onBlur:e.onBlur,onChange:r,onFocus:e.onFocus},l)),s&&j.default.createElement(y.Icon,{className:"form-field__icon",iconFill:f,iconFillHover:p,SvgImage:C?g:b,imageSrc:C?g:b,shape:h,size:d,onClick:F}))}))}));function te(e){const{input:a,option:r,onChange:i,inputProps:o}=e,l=t.useCallback((e=>{e.target.checked&&i(r.value)}),[]);return j.default.createElement(C.RadioButton,Object.assign({className:"form-radio__item",checked:r.value===a.value,name:a.name,type:"radio",value:r.value,onBlur:a.onBlur,onChange:l,onFocus:a.onFocus,label:r.label},o))}function ae(e){const{input:a,value:r,onChange:i}=e,o=t.useCallback((e=>i(e.target.value)),[i]);return j.default.createElement(v.Input,Object.assign({autoComplete:"nope",name:a.name,onBlur:a.onBlur,onChange:o,onFocus:a.onFocus,value:r},e))}function re(e){const{input:a,options:r,editableProps:i,onChange:o,inputProps:l}=e,[s,n]=t.useState((()=>r.find((e=>e.value===a.value))?"":a.value));t.useEffect((()=>{if(a.value){const e=r.find((e=>e.value===a.value&&!e.editable));n(e?"":a.value)}else n("")}),[a.value]);const u=t.useCallback((e=>{a.onChange(e),o&&o(e,a.name)}),[a,o]),d=t.useCallback((e=>{n(""),u(e)}),[u]),m=t.useCallback((e=>{n(e),u(e)}),[u]);return j.default.createElement(j.default.Fragment,null,r.map((e=>e.editable?j.default.createElement(ae,{key:e.label,input:a,value:s,option:e,onChange:m,editableProps:i,inputProps:l}):j.default.createElement(te,{key:e.value,input:a,option:e,onChange:d,inputProps:l}))))}ee.defaultProps={inputProps:{},fieldProps:{}},ee.propTypes={fieldProps:B.default.object,inputProps:B.default.object,isPassword:B.default.bool,isRequired:B.default.bool,isRevealable:B.default.bool,name:B.default.string.isRequired,onChange:B.default.func},te.propTypes={inputProps:B.default.object,onChange:B.default.func,option:B.default.shape({label:B.default.string,value:B.default.string}),input:B.default.shape({name:B.default.string,value:B.default.string,onBlur:B.default.func,onFocus:B.default.func,onChange:B.default.func})},ae.propTypes={input:B.default.string,value:B.default.string,editableProps:B.default.object,onChange:B.default.func},re.propTypes={editableProps:B.default.object,input:B.default.object,inputProps:B.default.object,onChange:B.default.object,options:B.default.object};const ie=j.default.memo((function(e){const{isRequired:t,name:a,options:i,fieldProps:o,editableProps:l,inputProps:s,onChange:n,hideMessage:u}=e;return j.default.createElement(r.Field,{name:a},(({input:e,meta:a})=>j.default.createElement(A,Object.assign({className:"form__item_type_radio",fieldClassName:"form-radio",inputName:e.name,inputValue:e.value||"",isRequired:t,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,hideMessage:u},o),j.default.createElement(re,{input:e,options:i,onChange:n,editableProps:l,inputProps:s}))))}));function oe(e){const{options:a,isRequired:i,name:o,fieldProps:l,inputProps:s,hideMessage:n}=e,{change:u}=r.useForm();return j.default.createElement(r.Field,{name:o},(({input:e,meta:r})=>{const d=t.useMemo((()=>{const t={value:null,label:null};if(e.value){return a.find((t=>t.value===e.value))||t}return t}),[e.value]),m=t.useCallback((e=>{u(o,e.value)}),[u]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_segmented","form__item_type_segmented"),fieldClassName:"form-segmented",inputName:e.name,inputValue:e.value||[],isRequired:i,metaActive:r.active,metaError:r.error,metaModifiedSinceLastSubmit:r.modifiedSinceLastSubmit,metaSubmitError:r.submitError,metaSubmitFailed:r.submitFailed,metaTouched:r.touched,metaValid:r.valid,hideMessage:n},l),j.default.createElement(S.Segmented,Object.assign({segments:a,setActiveSegment:m,activeSegment:d},s)))}))}function le(e,t){const a=Array.isArray(t)?t:[t];let r=[];return e.forEach((e=>{const i=a.includes(e.value),o=a.includes(e.label);let l=[];e.options&&(l=le(e.options,t)),i||o?r.push(e):l.length&&(r=r.concat(l))})),r}ie.defaultProps={fieldProps:{},editableProps:{},inputProps:{},options:[]},ie.propTypes={name:B.default.string.isRequired,fieldProps:B.default.object,inputProps:B.default.object,editableProps:B.default.object,isRequired:B.default.bool,options:B.default.array,onChange:B.default.func},oe.propTypes={options:B.default.array.isRequired,name:B.default.string.isRequired,className:B.default.string,inputClass:B.default.string,isRequired:B.default.bool,label:B.default.string,placeholder:B.default.string,fieldProps:B.default.object,inputProps:B.default.object};const se=j.default.memo((function(e){const{isRequired:a,key:i,name:o,options:l,fieldProps:s,selectProps:n,selectRef:u,onChange:d,classNameGroupItem:m,hideMessage:c}=e;return j.default.createElement(r.Field,{name:o},(({input:e,meta:r})=>{const o=t.useCallback((t=>{e.onChange(t),d&&d(t,e.name)}),[d]),[f,p]=t.useState(null),b=t.useMemo((()=>{const t=le(l,e.value);return!t.length&&e.value?.length&&t.push({value:e.value,label:e.value}),t}),[e.value]);t.useEffect((()=>p(b)),[b]);const g=t.useCallback(((e,t)=>{const a=Array.isArray(e)?e.map((e=>e.value)):e?.value||null;p(e),o(a)}),[o]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_select","form__item_type_select",m),fieldClassName:"form-select",inputName:e.name,inputValue:e.value,isRequired:a,metaActive:r.active,metaError:r.error,metaModifiedSinceLastSubmit:r.modifiedSinceLastSubmit,metaSubmitError:r.submitError,metaSubmitFailed:r.submitFailed,metaTouched:r.touched,metaValid:r.valid,hideMessage:c},s),j.default.createElement(E.Select,Object.assign({className:"form-select-item",instanceId:`id_${e.name}`,value:f,onChange:g,options:l,ref:u,key:i},n)))}))}));se.propTypes={name:B.default.string.isRequired,selectProps:B.default.object,isRequired:B.default.bool,label:B.default.any,messageType:B.default.string,options:B.default.array,onChange:B.default.func};const ne=j.default.memo((function(e){const{name:a,isRequired:i,onChange:o,fieldProps:l,inputProps:s,classNameGroupItem:n,hideMessage:u}=e;return j.default.createElement(r.Field,{name:a,type:"checkbox"},(({input:e,meta:a})=>{const r=t.useCallback((t=>{e.onChange(t),o&&o(t.target.checked,e.name)}),[o]);return j.default.createElement(A,Object.assign({className:M.default("form-field_type_switch","form__item_type_switch",n),fieldClassName:"form-switch",inputName:e.name,inputValue:e.checked,isRequired:i,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,hideMessage:u,tag:"label"},l),j.default.createElement(F.Switch,Object.assign({autoComplete:"nope",checked:e.checked,name:e.name,type:"checkbox",onBlur:e.onBlur,onChange:r,onFocus:e.onFocus},s)))}))}));ne.defaultProps={inputProps:{},fieldProps:{}},ne.propTypes={fieldProps:B.default.object,inputProps:B.default.object,isRequired:B.default.bool,name:B.default.string,onChange:B.default.func};const ue=j.default.memo((function(e){const{isRequired:t,name:a,fieldProps:i,inputProps:o,classNameGroupItem:l,hideMessage:s}=e;return j.default.createElement(r.Field,{name:a},(({input:e,meta:a})=>j.default.createElement(A,Object.assign({className:M.default("form-field_type_textarea","form__item_type_textarea",l),fieldClassName:"form-textarea",inputName:e.name,inputValue:e.value,isRequired:t,metaActive:a.active,metaError:a.error,metaModifiedSinceLastSubmit:a.modifiedSinceLastSubmit,metaSubmitError:a.submitError,metaSubmitFailed:a.submitFailed,metaTouched:a.touched,metaValid:a.valid,hideMessage:s},i),j.default.createElement(N.Textarea,Object.assign({autoComplete:"nope",name:e.name,value:e.value,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus},o)))))}));ue.defaultProps={inputProps:{},fieldProps:{}},ue.propTypes={name:B.default.string.isRequired,isRequired:B.default.bool,fieldProps:B.default.object,inputProps:B.default.object};const de=(e,t)=>{const r=Object.keys(t).map((e=>e===a.FORM_ERROR?"notification__item_status_error":`react-select-id_${e}-input`)),i=e.find((e=>e.name?a.getIn(t,e.name):r.includes(e.id))),o=Object.keys(t);if(!i&&o.length){let e;try{const t=o[0];t===a.FORM_ERROR?e=document.querySelector("notification__item_status_error"):(e=document.querySelector(`#${t}-error`),e||(e=document.querySelector(`#id_${t}`)))}catch(e){console.warn(e)}e&&e.scrollIntoView({block:"center"})}return i&&i.scrollIntoView({block:"center"}),null},me=D.default(null,de),ce={checkbox:"checkbox",custom:"custom",choice:"choice",code:"code",datePicker:"datePicker",dateRangePicker:"dateRangePicker",fileInput:"fileInput",group:"group",radioGroup:"radioGroup",segmented:"segmented",select:"select",switch:"switch",text:"text",textarea:"textarea"};function fe(e,t,a){switch(e.type){case ce.checkbox:return j.default.createElement($,Object.assign({key:t.key},e,a));case ce.choice:return j.default.createElement(H,Object.assign({key:t.key},e,a));case ce.code:return j.default.createElement(K,Object.assign({key:t.key},e,a));case ce.switch:return j.default.createElement(ne,Object.assign({key:t.key},e,a));case ce.segmented:return j.default.createElement(oe,Object.assign({key:t.key},e,a));case ce.datePicker:return j.default.createElement(U,Object.assign({key:t.key},e,a));case ce.fileInput:return j.default.createElement(X,Object.assign({key:t.key},e,a));case ce.radioGroup:return j.default.createElement(ie,Object.assign({key:t.key},e,a));case ce.select:return j.default.createElement(se,Object.assign({key:t.key},e,a));case ce.text:return j.default.createElement(ee,Object.assign({key:t.key},e,a));case ce.textarea:return j.default.createElement(ue,Object.assign({key:t.key},e,a));case ce.custom:return j.default.createElement(G,Object.assign({key:t.key},e,a));case ce.group:return j.default.createElement(Z,Object.assign({key:t.key},e,a),Object.entries(e.group).map((([t,r])=>fe({...r,hideMessage:e.hideMessage,classNameGroupItem:r.classNameGroupItem||"form__group-item"},{key:t+"_form_group"},a))))}}const pe=j.default.forwardRef((function(e,a){const{additionalProps:i,after:o,before:l,buttonDirection:s,buttonGap:m,buttonPadding:c,groupGap:f,className:p,config:b,description:g,descriptionSize:h,descriptionTextColor:x,descriptionTextWeight:v,disableFieldsAutoComplete:y,fieldsGap:C,formName:S,initialValues:E,initialValuesEqual:F,isLoading:N,loader:R,loaderSet:q,loaderFill:B,loaderItemFill:W,loaderText:O,language:D,mutators:w,onChangeFormValues:L,onClickSecondaryButton:I,onClickTertiaryButton:A,onSubmit:$,primaryButton:H,primaryButtonLabel:G,secondaryButton:K,secondaryButtonLabel:U,primaryButtonFill:J,primaryButtonFillHover:Y,secondaryButtonFill:Q,secondaryButtonFillHover:X,primaryButtonSize:Z,primaryButtonLabelTextColor:ee,primaryButtonLabelSize:te,primaryButtonLabelTextWeight:ae,secondaryButtonSize:re,secondaryButtonLabelTextColor:ie,secondaryButtonLabelSize:oe,secondaryButtonLabelTextWeight:le,tertiaryButton:se,tertiaryButtonFill:ne,tertiaryButtonFillHover:ue,tertiaryButtonSize:de,tertiaryButtonLabelTextColor:ce,tertiaryButtonLabelSize:pe,tertiaryButtonLabelTextWeight:be,tertiaryButtonLabel:ge,set:he,type:xe,buttonJustifyContent:_e,title:Te,notificationType:ve,buttonFill:ye,titleTextSize:Ce,titleTextColor:Se,titleTextWeight:Ee,validationSchema:Fe,dataTour:Ne,dataTourButtons:Pe,dataTourPrimaryButton:ze,dataTourSecondaryButton:ke,dataTourTertiaryButton:Re}=e,qe=V(Fe,D),je=t.useCallback((e=>{a&&(a.current=e)}),[a]),Be=u.useDeviceTargetClass(e,{prefix:"fill_",propsKey:"fill"}),Me=u.useDeviceTargetClass(e,{prefix:"direction_",propsKey:"direction"}),We=u.useDeviceTargetClass(e,{prefix:"shape_",propsKey:"shape"}),Oe=u.useDeviceTargetClass(e,{prefix:"elevation_",propsKey:"elevation"}),{styles:De}=d.useStyles(e);return j.default.createElement(r.Form,{decorators:[me],initialValues:E,initialValuesEqual:F,mutators:w,render:({handleSubmit:e,submitError:t,modifiedSinceLastSubmit:a,form:u})=>j.default.createElement("form",{style:De,className:M.default(p,"form",he&&`form_set_${he}`,xe&&`form_type_${xe}`,Me,Be,We,Oe),name:S,"data-tour":Ne,ref:()=>je(u),onSubmit:e,autoComplete:y?"off":void 0,autoCorrect:y?"off":void 0,autoCapitalize:y?"off":void 0,spellCheck:y?"false":void 0},l,Te&&j.default.createElement(T.Title,{className:"form__title",size:Ce,textColor:Se,textWeight:Ee},Te),g&&j.default.createElement(n.Text,{className:"form__description",size:h,textColor:x,textWeight:v},g),t&&!a&&j.default.createElement("div",{className:M.default("notification","form-notification",ve?`form-notification_type_${ve}`:"form-notification_type_global")},j.default.createElement(k.NotificationItem,{className:"form-notification__item",titleTextSize:"h6",title:u.getState().submitError,set:"form",status:"error"})),L&&j.default.createElement(r.FormSpy,{subscription:{values:!0},onChange:L}),Boolean(Object.keys(b).length)&&j.default.createElement(z.Group,{direction:"vertical",gap:C||f,className:"form__wrapper"},Object.keys(b).map((e=>fe(b[e],{key:e},i[b[e].name]))),N&&(R||j.default.createElement(_.Loader,{className:"form__loader",set:q,fill:B,itemFill:W,text:O}))),(G||H||U||K||se||ge)&&j.default.createElement(z.Group,{fill:ye,justifyContent:_e,direction:s,padding:c,gap:m,className:"form__button",dataTour:Pe},G?j.default.createElement(P.Button,{width:"fill",className:"form__button-item",fill:J,fillHover:Y,size:Z,labelTextColor:ee,labelSize:te,labelTextWeight:ae,label:G,dataTour:ze}):H,U?j.default.createElement(P.Button,{width:"fill",className:"form__button-item",fill:Q,fillHover:X,size:re,labelTextColor:ie,labelSize:oe,labelTextWeight:le,label:U,onClick:I,dataTour:ke}):K,ge?j.default.createElement(P.Button,{width:"fill",className:"form__button-item",fill:ne,fillHover:ue,size:de,labelTextColor:ce,labelSize:pe,labelTextWeight:be,label:ge,onClick:A,dataTour:Re}):se),o),subscription:{submitting:!0,pristine:!0,modifiedSinceLastSubmit:!0,submitError:!0},validate:qe,onSubmit:$})}));pe.propTypes={additionalProps:B.default.object,after:B.default.any,before:B.default.any,buttonGap:B.default.string,className:B.default.string,config:B.default.object,description:B.default.string,descriptionSize:B.default.string,descriptionTextColor:B.default.string,descriptionTextWeight:B.default.string,disableFieldsAutoComplete:B.default.string,fieldsGap:B.default.string,formName:B.default.string,initialValues:B.default.any,initialValuesEqual:B.default.any,language:B.default.string,isLoading:B.default.bool,loaderText:B.default.string,mutators:B.default.any,onChangeFormValues:B.default.func,onClickSecondaryButton:B.default.func,onSubmit:B.default.func,primaryButton:B.default.string,primaryButtonFill:B.default.string,primaryButtonLabel:B.default.string,secondaryButton:B.default.string,secondaryButtonFill:B.default.string,secondaryButtonLabel:B.default.string,set:B.default.string,title:B.default.string,titleSize:B.default.string,titleTextColor:B.default.string,titleTextWeight:B.default.string,validationSchema:B.default.object},pe.defaultProps={additionalProps:{},isLoading:!1,loaderSet:"simple",loaderFill:"surfacePrimary",loaderItemFill:"surfaceItemAccent",language:"en",titleSize:"h1",buttonDirection:"vertical",direction:"vertical",disableFieldsAutoComplete:!1},Object.defineProperty(exports,"Field",{enumerable:!0,get:function(){return r.Field}}),Object.defineProperty(exports,"useForm",{enumerable:!0,get:function(){return r.useForm}}),Object.defineProperty(exports,"useFormState",{enumerable:!0,get:function(){return r.useFormState}}),exports.Checkbox=$,exports.ChoiceField=H,exports.CodeField=K,exports.CustomField=G,exports.DatePickerField=U,exports.FieldWrapper=A,exports.FieldWrapperBase=I,exports.FileInput=X,exports.FinalForm=pe,exports.Group=Z,exports.InputField=ee,exports.RadioGroup=ie,exports.SegmentedField=oe,exports.SelectField=se,exports.Switch=ne,exports.Textarea=ue,exports.addRequiredFieldsParamToSchema=e=>{const t=Object.entries(e.fields);return e.requiredFields=t.reduce(((e,[t,a])=>(a.exclusiveTests?.required&&e.push(t),e)),[]),e},exports.emailValidation=(e,t)=>{if(!e)return!0;return/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/.test(String(e).toLowerCase())},exports.focusOnError=de,exports.focusOnErrorDecorator=me,exports.formTypes=ce,exports.generateField=fe,exports.phoneValidation=(t,a)=>!t||e.isPossiblePhoneNumber(t,"RU"),exports.sendFormDataToServer=async(e,t)=>{try{return{success:!0,response:await W.default({url:e,method:"POST",data:t})}}catch(e){const t={};return"string"==typeof e.response?.data&&(t[a.FORM_ERROR]="Something went wrong"),"object"==typeof e.response?.data&&Object.entries(e.response.data).forEach((([e,a])=>{t[e]=a[0]})),{success:!1,formErrors:t,error:e}}},exports.setErrorsMutator=(e,t)=>{const[a,r]=e,i=r.submitError,o=r.error;if("non_field_errors"===a)t.formState.error=o,t.formState.submitError=i;else if(a in t.fields){if(o){const e=Object.assign({},t.formState.errors,{[a]:o});t.fields[a].touched=!0,t.fields[a].error=o,t.formState.errors=e}if(i){const e=Object.assign({},t.formState.submitErrors,{[a]:i});t.fields[a].submitError=i,t.formState.submitErrors=e,t.formState.submitFailed=!0,t.formState.submitSucceeded=!1,t.formState.lastSubmittedValues=t.formState.values}}},exports.useYupValidationSchema=V;
1
+ 'use strict';
2
+
3
+ var libphonenumberJs = require('libphonenumber-js');
4
+ var React = require('react');
5
+ var finalForm = require('final-form');
6
+ var reactFinalForm = require('react-final-form');
7
+ var PropTypes = require('prop-types');
8
+ var clsx = require('clsx');
9
+ var Checkbox = require('@itcase/ui/components/Checkbox');
10
+ var Divider = require('@itcase/ui/components/Divider');
11
+ var Text = require('@itcase/ui/components/Text');
12
+ var useDeviceTargetClass = require('@itcase/ui/hooks/useDeviceTargetClass');
13
+ var useStyles = require('@itcase/ui/hooks/useStyles');
14
+ var Choice = require('@itcase/ui/components/Choice');
15
+ var Code = require('@itcase/ui/components/Code');
16
+ var DatePicker = require('@itcase/ui/components/DatePicker');
17
+ var axios = require('axios');
18
+ var reactDropzone = require('react-dropzone');
19
+ var fileSelector = require('file-selector');
20
+ var castArray = require('lodash/castArray');
21
+ var common = require('@itcase/common');
22
+ var Loader = require('@itcase/ui/components/Loader');
23
+ var Title = require('@itcase/ui/components/Title');
24
+ var Input = require('@itcase/ui/components/Input');
25
+ var Icon = require('@itcase/ui/components/Icon');
26
+ var RadioButton = require('@itcase/ui/components/RadioButton');
27
+ var Segmented = require('@itcase/ui/components/Segmented');
28
+ var Select = require('@itcase/ui/components/Select');
29
+ var Switch = require('@itcase/ui/components/Switch');
30
+ var Textarea = require('@itcase/ui/components/Textarea');
31
+ var Button = require('@itcase/ui/components/Button');
32
+ var Group$1 = require('@itcase/ui/components/Group');
33
+ var Notification = require('@itcase/ui/components/Notification');
34
+ var createDecorator = require('final-form-focus');
35
+
36
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
37
+
38
+ var React__default = /*#__PURE__*/_interopDefault(React);
39
+ var PropTypes__default = /*#__PURE__*/_interopDefault(PropTypes);
40
+ var clsx__default = /*#__PURE__*/_interopDefault(clsx);
41
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
42
+ var castArray__default = /*#__PURE__*/_interopDefault(castArray);
43
+ var createDecorator__default = /*#__PURE__*/_interopDefault(createDecorator);
44
+
45
+ const phoneValidation = (value, context) => {
46
+ if (!value) {
47
+ return true;
48
+ }
49
+ return libphonenumberJs.isPossiblePhoneNumber(value, 'RU');
50
+ };
51
+ const emailValidation = (value, context) => {
52
+ // from https://emailregex.com/
53
+ if (!value) {
54
+ return true;
55
+ }
56
+ // eslint-disable-next-line
57
+ const regexp = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;
58
+ return regexp.test(String(value).toLowerCase());
59
+ };
60
+ const addRequiredFieldsParamToSchema = schema => {
61
+ const fields = Object.entries(schema.fields);
62
+ schema.requiredFields = fields.reduce((list, [fieldName, validationProps]) => {
63
+ if (validationProps.exclusiveTests?.required) {
64
+ list.push(fieldName);
65
+ }
66
+ return list;
67
+ }, []);
68
+ return schema;
69
+ };
70
+
71
+ /**
72
+ * Sets the `innerError.message` in an `errors` object at the key
73
+ * defined by `innerError.path`.
74
+ * @param {Object} errors The object to set the error in.
75
+ * @param {{ path: string, message: string }} innerError A `yup` field error.
76
+ * @returns {Object} The result of setting the new error message onto `errors`.
77
+ */
78
+ const setInError = (errors, innerError) => {
79
+ return finalForm.setIn(errors, innerError.path, innerError.message);
80
+ };
81
+
82
+ /**
83
+ * Empty object map with no prototype. Used as default
84
+ * value for reducing the `err.inner` array of errors
85
+ * from a `yup~ValidationError`.
86
+ */
87
+ const emptyObj = Object.create(null);
88
+
89
+ /**
90
+ * Takes a `yup` validation schema and returns a function that expects
91
+ * a map of values to validate. If the validation passes, the function resolves to `undefined`
92
+ * (signalling that the values are valid). If the validation doesn't pass, it resolves
93
+ * to a map of invalid field names to errors.
94
+ * @param {import('yup').ObjectSchema} schema `yup` schema definition.
95
+ * @returns {(values: Object) => Promise<?Object>} An async function that expects some `values`
96
+ * and resolves to either `undefined` or a map of field names to error messages.
97
+ */
98
+
99
+ const makeValidate = schema => {
100
+ return async function validate(values) {
101
+ try {
102
+ await schema.validate(values, {
103
+ abortEarly: false
104
+ });
105
+ } catch (error) {
106
+ if (error.inner) {
107
+ return error.inner.reduce(setInError, emptyObj);
108
+ } else {
109
+ console.warn('itcase-forms schema.validate error: An error not related to the form occurred during validation. Validation ignored.');
110
+ }
111
+ }
112
+ };
113
+ };
114
+ function useYupValidationSchema(schema, language) {
115
+ const validate = React.useMemo(() => schema && makeValidate(schema), [schema, language]);
116
+ return validate;
117
+ }
118
+
119
+ function FieldWrapperBase(props) {
120
+ const {
121
+ after,
122
+ afterItem,
123
+ before,
124
+ beforeItem,
125
+ children,
126
+ className,
127
+ desc,
128
+ descTextSize,
129
+ descTextColor,
130
+ descTextWidth,
131
+ divider,
132
+ dividerDirection,
133
+ dividerFill,
134
+ dividerSize,
135
+ dividerWidth,
136
+ fieldClassName,
137
+ id,
138
+ inputName,
139
+ inputValue,
140
+ isRequired,
141
+ label,
142
+ labelTextSize,
143
+ labelTextColor,
144
+ labelTextWidth,
145
+ errorMessageTextSize,
146
+ errorMessageTextWeight,
147
+ errorMessageTextColor,
148
+ message,
149
+ messageTextSize,
150
+ messageTextColor,
151
+ messageTextWeight,
152
+ metaActive,
153
+ metaError,
154
+ metaModifiedSinceLastSubmit,
155
+ metaSubmitError,
156
+ metaSubmitFailed,
157
+ metaTouched,
158
+ metaValid,
159
+ set,
160
+ type,
161
+ hideMessage,
162
+ isHidden,
163
+ tag: Tag,
164
+ dataTour,
165
+ showErrorsOnSubmit
166
+ } = props;
167
+ const error = metaError || !metaModifiedSinceLastSubmit && metaSubmitError || false;
168
+ const showError = React.useMemo(() => {
169
+ if (showErrorsOnSubmit) {
170
+ return metaSubmitFailed && metaTouched && error;
171
+ } else {
172
+ return metaTouched && error;
173
+ }
174
+ }, [showErrorsOnSubmit, metaSubmitFailed, metaTouched, error]);
175
+ const showValid = React.useMemo(() => {
176
+ const hasValue = Array.isArray(inputValue) ? inputValue.length : inputValue;
177
+ const isModifiedAfterSubmit = !metaError && metaSubmitError && metaModifiedSinceLastSubmit;
178
+ return hasValue && (metaValid || isModifiedAfterSubmit);
179
+ }, [inputValue, metaValid, metaError, metaSubmitError, metaModifiedSinceLastSubmit]);
180
+ const formFieldClass = React.useMemo(() => clsx__default.default(className, showError && 'form__item_state_error', showValid && 'form__item_state_success', isRequired && 'form__item_state_required', metaActive && 'form__item_state_focus', inputValue && 'form__item_state_filled'), [className, showError, showValid, isRequired, metaActive, inputValue]);
181
+ const fieldClass = React.useMemo(() => clsx__default.default(fieldClassName, showError && `${fieldClassName}_state_error`, showValid && `${fieldClassName}_state_success`, metaActive && `${fieldClassName}_state_focus`, inputValue && `${fieldClassName}_state_filled`), [fieldClassName, showError, showValid, metaActive, inputValue]);
182
+ const sizeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
183
+ prefix: 'form-field_size_',
184
+ propsKey: 'size'
185
+ });
186
+ const fillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
187
+ prefix: 'fill_',
188
+ propsKey: 'fill'
189
+ });
190
+ const inputFillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
191
+ prefix: 'fill_',
192
+ propsKey: 'inputFill'
193
+ });
194
+ const shapeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
195
+ prefix: 'form-field_shape_',
196
+ propsKey: 'shape'
197
+ });
198
+ const inputShapeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
199
+ prefix: 'form-field__item-value_shape_',
200
+ propsKey: 'inputShape'
201
+ });
202
+ const directionClass = useDeviceTargetClass.useDeviceTargetClass(props, {
203
+ prefix: 'direction_',
204
+ propsKey: 'direction'
205
+ });
206
+ const widthClass = useDeviceTargetClass.useDeviceTargetClass(props, {
207
+ prefix: 'width_',
208
+ propsKey: 'width'
209
+ });
210
+ const {
211
+ styles: formFieldStyles
212
+ } = useStyles.useStyles(props);
213
+ return /*#__PURE__*/React__default.default.createElement(Tag, {
214
+ className: clsx__default.default(formFieldClass, 'form__item', 'form-field', type && `form-field_type_${type}`, set && `form-field_set_${set}`, sizeClass, fillClass, shapeClass, isHidden && `form-field_state_hidden`, directionClass, widthClass),
215
+ "data-tour": dataTour,
216
+ style: formFieldStyles
217
+ }, before, label && /*#__PURE__*/React__default.default.createElement("div", {
218
+ htmlFor: id,
219
+ className: "form-field__label"
220
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
221
+ size: labelTextSize,
222
+ textWeight: labelTextWidth,
223
+ textColor: labelTextColor
224
+ }, label)), desc && /*#__PURE__*/React__default.default.createElement("div", {
225
+ className: "form-field__desc"
226
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
227
+ size: descTextSize,
228
+ textWeight: descTextWidth,
229
+ textColor: descTextColor
230
+ }, desc)), /*#__PURE__*/React__default.default.createElement("div", {
231
+ className: clsx__default.default('form-field__content', inputFillClass, inputShapeClass)
232
+ }, /*#__PURE__*/React__default.default.createElement("div", {
233
+ className: clsx__default.default('form-field__content-inner', fieldClass)
234
+ }, beforeItem, children, afterItem), divider && /*#__PURE__*/React__default.default.createElement(Divider.Divider, {
235
+ className: "form-field__item-divider",
236
+ width: dividerWidth,
237
+ direction: dividerDirection,
238
+ size: dividerSize,
239
+ fill: dividerFill
240
+ })), !hideMessage && /*#__PURE__*/React__default.default.createElement("div", {
241
+ className: "form-field__message"
242
+ }, Boolean(showError) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
243
+ className: "form-field__message-item form-field__message-item_type-error",
244
+ size: errorMessageTextSize,
245
+ textWeight: errorMessageTextWeight,
246
+ textColor: errorMessageTextColor,
247
+ id: `${inputName}-error`
248
+ }, error), Boolean(message) && !showError && /*#__PURE__*/React__default.default.createElement(Text.Text, {
249
+ className: "form-field__message-item form-field__message-item_type_message",
250
+ size: messageTextSize,
251
+ textWeight: messageTextWeight,
252
+ textColor: messageTextColor
253
+ }, message), Boolean(!showError) && Boolean(!message) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
254
+ className: "form-field__message-item form-field__message-item_type_message",
255
+ size: messageTextSize
256
+ }, '\u00A0')), after);
257
+ }
258
+ FieldWrapperBase.defaultProps = {
259
+ tag: 'div',
260
+ type: 'normal',
261
+ errorMessageTextSize: 's',
262
+ errorMessageTextColor: 'errorTextSecondary'
263
+ };
264
+ FieldWrapperBase.propTypes = {
265
+ after: PropTypes__default.default.any,
266
+ afterItem: PropTypes__default.default.any,
267
+ autoComplete: PropTypes__default.default.string,
268
+ before: PropTypes__default.default.any,
269
+ beforeItem: PropTypes__default.default.any,
270
+ children: PropTypes__default.default.any,
271
+ className: PropTypes__default.default.string,
272
+ desc: PropTypes__default.default.string,
273
+ descTextSize: PropTypes__default.default.string,
274
+ descTextColor: PropTypes__default.default.string,
275
+ descTextWidth: PropTypes__default.default.string,
276
+ dividerDirection: PropTypes__default.default.string,
277
+ dividerFill: PropTypes__default.default.string,
278
+ dividerSize: PropTypes__default.default.string,
279
+ dividerWidth: PropTypes__default.default.string,
280
+ fieldClassName: PropTypes__default.default.string,
281
+ id: PropTypes__default.default.string,
282
+ inputName: PropTypes__default.default.string,
283
+ inputOnBlur: PropTypes__default.default.func,
284
+ inputOnChange: PropTypes__default.default.func,
285
+ inputOnFocus: PropTypes__default.default.func,
286
+ inputValue: PropTypes__default.default.any,
287
+ isRequired: PropTypes__default.default.bool,
288
+ itemType: PropTypes__default.default.string,
289
+ label: PropTypes__default.default.any,
290
+ labelTextSize: PropTypes__default.default.string,
291
+ labelTextColor: PropTypes__default.default.string,
292
+ labelTextWidth: PropTypes__default.default.string,
293
+ errorMessageTextSize: PropTypes__default.default.string,
294
+ errorMessageTextWidth: PropTypes__default.default.string,
295
+ errorMessageTextColor: PropTypes__default.default.string,
296
+ message: PropTypes__default.default.string,
297
+ messageSize: PropTypes__default.default.string,
298
+ messageTextColor: PropTypes__default.default.string,
299
+ messageTextWidth: PropTypes__default.default.string,
300
+ metaActive: PropTypes__default.default.bool,
301
+ metaError: PropTypes__default.default.string,
302
+ metaModifiedSinceLastSubmit: PropTypes__default.default.bool,
303
+ metaSubmitError: PropTypes__default.default.string,
304
+ metaSubmitFailed: PropTypes__default.default.bool,
305
+ metaTouched: PropTypes__default.default.bool,
306
+ metaValid: PropTypes__default.default.bool,
307
+ set: PropTypes__default.default.string,
308
+ showErrorsOnSubmit: PropTypes__default.default.bool,
309
+ type: PropTypes__default.default.string
310
+ };
311
+ function FieldWrapper(props) {
312
+ const {
313
+ inputName
314
+ } = props;
315
+ const {
316
+ change
317
+ } = reactFinalForm.useForm(); // , mutators
318
+
319
+ React.useEffect(() => {
320
+ return () => {
321
+ change(inputName, undefined);
322
+ };
323
+ }, []);
324
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapperBase, props);
325
+ }
326
+ FieldWrapper.propTypes = {
327
+ autoComplete: PropTypes__default.default.string,
328
+ children: PropTypes__default.default.any,
329
+ className: PropTypes__default.default.string,
330
+ fieldClassName: PropTypes__default.default.string,
331
+ hint: PropTypes__default.default.string,
332
+ inputName: PropTypes__default.default.string,
333
+ inputOnBlur: PropTypes__default.default.func,
334
+ inputOnChange: PropTypes__default.default.func,
335
+ inputOnFocus: PropTypes__default.default.func,
336
+ inputValue: PropTypes__default.default.any,
337
+ isRequired: PropTypes__default.default.bool,
338
+ itemType: PropTypes__default.default.string,
339
+ label: PropTypes__default.default.any,
340
+ metaActive: PropTypes__default.default.bool,
341
+ metaError: PropTypes__default.default.string,
342
+ metaModifiedSinceLastSubmit: PropTypes__default.default.bool,
343
+ metaSubmitError: PropTypes__default.default.string,
344
+ metaSubmitFailed: PropTypes__default.default.bool,
345
+ metaTouched: PropTypes__default.default.bool,
346
+ metaValid: PropTypes__default.default.bool,
347
+ showErrorsOnSubmit: PropTypes__default.default.bool
348
+ };
349
+
350
+ const CheckboxField = /*#__PURE__*/React__default.default.memo(function CheckboxField(props) {
351
+ const {
352
+ name,
353
+ isRequired,
354
+ onChange,
355
+ fieldProps,
356
+ inputProps,
357
+ classNameGroupItem,
358
+ hideMessage
359
+ } = props;
360
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
361
+ name: name,
362
+ type: "checkbox"
363
+ }, ({
364
+ input,
365
+ meta
366
+ }) => {
367
+ const onChangeField = React.useCallback(event => {
368
+ input.onChange(event);
369
+ if (onChange) {
370
+ onChange(event.target.checked, input.name);
371
+ }
372
+ }, [onChange]);
373
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
374
+ className: clsx__default.default('form-field_type_checkbox', 'form__item_type_checkbox', classNameGroupItem),
375
+ fieldClassName: "form-checkbox",
376
+ inputName: input.name,
377
+ inputValue: input.checked,
378
+ isRequired: isRequired,
379
+ metaActive: meta.active,
380
+ metaError: meta.error,
381
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
382
+ metaSubmitError: meta.submitError,
383
+ metaSubmitFailed: meta.submitFailed,
384
+ metaTouched: meta.touched,
385
+ metaValid: meta.valid,
386
+ tag: "label",
387
+ hideMessage: hideMessage
388
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Checkbox.Checkbox, Object.assign({
389
+ autoComplete: "nope",
390
+ checked: input.checked,
391
+ name: input.name,
392
+ type: "checkbox",
393
+ onBlur: input.onBlur,
394
+ onChange: onChangeField,
395
+ onFocus: input.onFocus
396
+ }, inputProps)));
397
+ });
398
+ });
399
+ CheckboxField.defaultProps = {
400
+ inputProps: {},
401
+ fieldProps: {}
402
+ };
403
+ CheckboxField.propTypes = {
404
+ fieldProps: PropTypes__default.default.object,
405
+ inputProps: PropTypes__default.default.object,
406
+ isRequired: PropTypes__default.default.bool,
407
+ name: PropTypes__default.default.string,
408
+ onChange: PropTypes__default.default.func
409
+ };
410
+
411
+ const ChoiceField = /*#__PURE__*/React__default.default.memo(function ChoiceField(props) {
412
+ const {
413
+ options,
414
+ classNameGroupItem,
415
+ fieldProps,
416
+ inputProps,
417
+ isMultiple,
418
+ isRequired,
419
+ initialValue,
420
+ label,
421
+ name,
422
+ messageType,
423
+ hideMessage,
424
+ placeholder
425
+ } = props;
426
+ const {
427
+ change
428
+ } = reactFinalForm.useForm();
429
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
430
+ name: name,
431
+ initialValue: initialValue
432
+ }, ({
433
+ input,
434
+ meta
435
+ }) => {
436
+ const activeOption = React.useMemo(() => {
437
+ const emptyOption = {
438
+ value: null,
439
+ label: null
440
+ };
441
+ if (input.value) {
442
+ const currentOption = options.find(option => option.value === input.value);
443
+ return currentOption || emptyOption;
444
+ }
445
+ return emptyOption;
446
+ }, [input.value]);
447
+ const setActiveSegment = React.useCallback(option => {
448
+ change(name, option.value);
449
+ }, [change]);
450
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
451
+ className: clsx__default.default('form-field_type_choice', 'form__item_type_choice', classNameGroupItem),
452
+ fieldClassName: "form-choice",
453
+ inputName: input.name,
454
+ inputValue: input.value || [],
455
+ isRequired: isRequired,
456
+ label: label,
457
+ messageType: messageType,
458
+ metaActive: meta.active,
459
+ metaError: meta.error,
460
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
461
+ metaSubmitError: meta.submitError,
462
+ metaSubmitFailed: meta.submitFailed,
463
+ metaTouched: meta.touched,
464
+ metaValid: meta.valid,
465
+ hideMessage: hideMessage
466
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Choice.Choice, Object.assign({
467
+ className: clsx__default.default(meta.active && 'form-choice_state_focus', meta.error && meta.touched && 'form-choice_state_error'),
468
+ options: options,
469
+ inputName: input.name,
470
+ inputValue: input.value || [],
471
+ isMultiple: isMultiple,
472
+ isRequired: isRequired,
473
+ placeholder: placeholder,
474
+ active: activeOption,
475
+ setActiveSegment: setActiveSegment
476
+ }, inputProps)));
477
+ });
478
+ });
479
+ ChoiceField.propTypes = {
480
+ options: PropTypes__default.default.array.isRequired,
481
+ name: PropTypes__default.default.string.isRequired,
482
+ className: PropTypes__default.default.string,
483
+ inputClass: PropTypes__default.default.string,
484
+ isMultiple: PropTypes__default.default.bool,
485
+ isRequired: PropTypes__default.default.bool,
486
+ label: PropTypes__default.default.string,
487
+ placeholder: PropTypes__default.default.string
488
+ };
489
+
490
+ const CustomField = /*#__PURE__*/React__default.default.memo(function CustomField(props) {
491
+ const {
492
+ Component,
493
+ isRequired,
494
+ name,
495
+ fieldProps,
496
+ classNameGroupItem,
497
+ hideMessage
498
+ } = props;
499
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
500
+ name: name
501
+ }, ({
502
+ input,
503
+ meta
504
+ }) => /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
505
+ className: clsx__default.default('form-field_type_custom', 'form__item_type_custom', classNameGroupItem),
506
+ fieldClassName: 'form-custom',
507
+ inputName: input.name,
508
+ inputValue: input.value,
509
+ isRequired: isRequired,
510
+ metaActive: meta.active,
511
+ metaError: meta.error,
512
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
513
+ metaSubmitError: meta.submitError,
514
+ metaSubmitFailed: meta.submitFailed,
515
+ metaTouched: meta.touched,
516
+ metaValid: meta.valid,
517
+ hideMessage: hideMessage
518
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Component, Object.assign({}, props, {
519
+ input: input,
520
+ meta: meta
521
+ }))));
522
+ });
523
+ CustomField.defaultProps = {
524
+ inputProps: {},
525
+ fieldProps: {}
526
+ };
527
+ CustomField.propTypes = {
528
+ name: PropTypes__default.default.string.isRequired,
529
+ isRequired: PropTypes__default.default.bool,
530
+ fieldProps: PropTypes__default.default.object,
531
+ inputProps: PropTypes__default.default.object
532
+ };
533
+
534
+ const CodeField = /*#__PURE__*/React__default.default.memo(function CodeField(props) {
535
+ const {
536
+ isRequired,
537
+ name,
538
+ fieldProps,
539
+ inputProps,
540
+ classNameGroupItem,
541
+ hideMessage
542
+ } = props;
543
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
544
+ name: name
545
+ }, ({
546
+ input,
547
+ meta
548
+ }) => /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
549
+ className: clsx__default.default('form-field_type_code', 'form__item_type_code', classNameGroupItem),
550
+ fieldClassName: 'form-code',
551
+ inputName: input.name,
552
+ inputValue: input.value,
553
+ isRequired: isRequired,
554
+ metaActive: meta.active,
555
+ metaError: meta.error,
556
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
557
+ metaSubmitError: meta.submitError,
558
+ metaSubmitFailed: meta.submitFailed,
559
+ metaTouched: meta.touched,
560
+ metaValid: meta.valid,
561
+ hideMessage: hideMessage
562
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Code.Code, Object.assign({
563
+ autoComplete: "nope",
564
+ name: input.name,
565
+ value: input.value,
566
+ onBlur: input.onBlur,
567
+ onChange: input.onChange,
568
+ onFocus: input.onFocus
569
+ }, inputProps))));
570
+ });
571
+ CodeField.defaultProps = {
572
+ inputProps: {},
573
+ fieldProps: {}
574
+ };
575
+ CodeField.propTypes = {
576
+ name: PropTypes__default.default.string.isRequired,
577
+ isRequired: PropTypes__default.default.bool,
578
+ fieldProps: PropTypes__default.default.object,
579
+ inputProps: PropTypes__default.default.object
580
+ };
581
+
582
+ function DatePickerField(props) {
583
+ const {
584
+ isRequired,
585
+ fieldProps,
586
+ inputProps,
587
+ datePickerProps,
588
+ name,
589
+ iconSize,
590
+ iconBorder,
591
+ iconBorderHover,
592
+ iconFill,
593
+ iconFillHover,
594
+ iconRevealableShow,
595
+ iconRevealableHide,
596
+ iconShape,
597
+ hideMessage,
598
+ onChange,
599
+ classNameGroupItem
600
+ } = props;
601
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
602
+ name: name
603
+ }, ({
604
+ input,
605
+ meta
606
+ }) => {
607
+ const onChangeField = React.useCallback(value => {
608
+ input.onChange(value);
609
+ if (onChange) {
610
+ onChange(value, input.name);
611
+ }
612
+ }, [onChange]);
613
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
614
+ className: clsx__default.default('form-field_type_datepicker', 'form__item_type_datepicker', classNameGroupItem),
615
+ fieldClassName: "form-datepicker",
616
+ inputName: input.name,
617
+ inputValue: input.value || '',
618
+ isRequired: isRequired,
619
+ metaActive: meta.active,
620
+ metaError: meta.error,
621
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
622
+ metaSubmitError: meta.submitError,
623
+ metaSubmitFailed: meta.submitFailed,
624
+ metaTouched: meta.touched,
625
+ metaValid: meta.valid,
626
+ hideMessage: hideMessage
627
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(DatePicker.DatePickerInput, {
628
+ name: input.name,
629
+ value: input.value || '',
630
+ onBlur: input.onBlur,
631
+ onChange: onChangeField,
632
+ onFocus: input.onFocus,
633
+ inputProps: inputProps,
634
+ datePickerProps: datePickerProps
635
+ }));
636
+ });
637
+ }
638
+ DatePickerField.defaultProps = {
639
+ inputProps: {},
640
+ fieldProps: {}
641
+ };
642
+ DatePickerField.propTypes = {
643
+ fieldProps: PropTypes__default.default.object,
644
+ inputProps: PropTypes__default.default.object,
645
+ isRequired: PropTypes__default.default.bool,
646
+ name: PropTypes__default.default.string.isRequired,
647
+ onChange: PropTypes__default.default.func
648
+ };
649
+
650
+ async function getFileByURL(url) {
651
+ try {
652
+ const response = await axios__default.default({
653
+ url: `/api/${url}/`,
654
+ responseType: 'blob'
655
+ });
656
+ const blobObject = response.data;
657
+ const dirtyFilename = response.headers['content-disposition']?.split('filename=')[1];
658
+ // Remove double quotes
659
+ let filename = dirtyFilename?.substring(1).slice(0, -1);
660
+ if (!filename) {
661
+ const typeParts = blobObject.type.split('/');
662
+ const fileType = typeParts[typeParts.length - 1];
663
+ filename = `${new Date().getTime()}.${fileType}`;
664
+ }
665
+ return new File([blobObject], filename, {
666
+ type: blobObject.type
667
+ });
668
+ } catch (error) {
669
+ console.log('error: ', error);
670
+ return null;
671
+ }
672
+ }
673
+ async function convertToFiles(inputValue, isPreviews) {
674
+ const newFiles = [];
675
+ for await (const value of castArray__default.default(inputValue)) {
676
+ let newFile = null;
677
+
678
+ // Download image by url and save as File instance
679
+ const isURL = typeof value === 'string' && value.includes('/');
680
+ if (value.image || isURL) {
681
+ newFile = await getFileByURL(value.image || value);
682
+ if (newFile) {
683
+ setFileDataURL(newFile);
684
+ }
685
+ }
686
+
687
+ // Convert dataURL to File instance
688
+ if (value.dataURL) {
689
+ newFile = common.createFileFromDataURL(value.name || value.path, value.dataURL);
690
+ newFile.dataURL = value.dataURL;
691
+ }
692
+
693
+ // Save new File to state
694
+ if (newFile) {
695
+ newFile.id = value.id;
696
+ if (isPreviews) {
697
+ newFile.preview = URL.createObjectURL(newFile);
698
+ }
699
+ newFiles.push(newFile);
700
+ }
701
+
702
+ // else if (value) {
703
+ // newFiles.push({
704
+ // name: value,
705
+ // error: 'File is unavailable',
706
+ // })
707
+ // }
708
+ }
709
+
710
+ return newFiles;
711
+ }
712
+ function setFileDataURL(file, resolve) {
713
+ resolve = resolve || (() => {});
714
+ // Init reader and save his file
715
+ const reader = new FileReader();
716
+ reader._readedFile = file;
717
+
718
+ // Set handlers
719
+ reader.onabort = () => resolve();
720
+ reader.onerror = () => resolve();
721
+ reader.onload = event => {
722
+ event.target._readedFile.dataURL = reader.result;
723
+ resolve();
724
+ };
725
+ // Run reader
726
+ if (file instanceof File) {
727
+ reader.readAsDataURL(file);
728
+ } else {
729
+ resolve();
730
+ }
731
+ }
732
+ const FileInputDropzone = /*#__PURE__*/React__default.default.memo(function FileInputDropzone(props) {
733
+ const {
734
+ inputName,
735
+ size,
736
+ className,
737
+ fileErrorText,
738
+ hintTitleTextSize,
739
+ removeThumbTextSize,
740
+ removeThumbTextColor,
741
+ removeThumbTextWeight,
742
+ thumbNameTextSize,
743
+ thumbNameTextColor,
744
+ removeThumbTextHoverColor,
745
+ thumbNameTextWrap,
746
+ thumbNameTextWeight,
747
+ hintTitleTextColor,
748
+ hintTitleTextWrap,
749
+ thumbColumn,
750
+ hintTitleTextWeight,
751
+ hintDescriptionTextSize,
752
+ hintDescriptionTextColor,
753
+ hintDescriptionTextWrap,
754
+ hintDescriptionTextWeight,
755
+ errorMessageTextSize,
756
+ errorMessageTextWeight,
757
+ errorMessageTextColor,
758
+ inputValue,
759
+ maxFiles,
760
+ maxSize,
761
+ removeThumbText,
762
+ hintTitle,
763
+ hintDescription,
764
+ isShowFilename,
765
+ isPreviews,
766
+ loadingText,
767
+ dropzoneProps = {},
768
+ onAddFiles,
769
+ onDeleteFile
770
+ } = props;
771
+ const [fileError, setFileError] = React.useState('');
772
+ const [fileIsLoading, setFileIsLoading] = React.useState(false);
773
+ // State with instances of "File" type
774
+ const [files, setFiles] = React.useState(inputValue ? castArray__default.default(inputValue) : []);
775
+
776
+ // Save to mobx state
777
+ const {
778
+ change
779
+ } = reactFinalForm.useForm();
780
+ const changeFormState = React.useCallback(newFiles => {
781
+ // If max files in dropzone is 1 - return file as it self, else as array of files
782
+ // ps: for old projects compatibility
783
+ const toSave = dropzoneProps.maxFiles == 1 ? newFiles[0] : newFiles;
784
+ change(inputName, toSave);
785
+ return toSave;
786
+ }, [dropzoneProps, change]);
787
+
788
+ // Create dropzone options
789
+ const {
790
+ getRootProps,
791
+ getInputProps
792
+ } = reactDropzone.useDropzone({
793
+ maxSize: maxSize || 10485760,
794
+ // 10mb
795
+ maxFiles: maxFiles || 5,
796
+ // accept: { 'image/*': [] },
797
+ ...dropzoneProps,
798
+ getFilesFromEvent: async event => {
799
+ const result = await fileSelector.fromEvent(event);
800
+ const newFiles = result.filter(item => item instanceof File);
801
+ // Add exists and new files to accepted(or rejected)
802
+ return [...files, ...newFiles];
803
+ },
804
+ onDropAccepted: (acceptedFiles, event) => {
805
+ // If dropped files has accepted and we need a previews
806
+ if (isPreviews) {
807
+ // Add preview to every file
808
+ acceptedFiles.forEach(file => {
809
+ if (!file.error) {
810
+ file.preview = URL.createObjectURL(file);
811
+ }
812
+ });
813
+ }
814
+ // Save to form data (including empty when files are not valid)
815
+ setFiles(acceptedFiles);
816
+ setFileError('');
817
+
818
+ // Save DataURL for all files
819
+ const readerPromisesList = acceptedFiles.map(file => {
820
+ return new Promise(resolve => setFileDataURL(file, resolve));
821
+ });
822
+ // Save files to form values
823
+ Promise.all(readerPromisesList).then(() => {
824
+ const filesToSave = changeFormState(acceptedFiles);
825
+ if (onAddFiles) {
826
+ onAddFiles(filesToSave, inputName);
827
+ }
828
+ });
829
+ },
830
+ onDropRejected: (rejectedFiles, event) => {
831
+ // If dropped files has rejected
832
+ if (rejectedFiles.length) {
833
+ const firstFileError = rejectedFiles[0].errors[0]?.message;
834
+ // Show error
835
+ setFileError(firstFileError || 'Error on adding file');
836
+ } else {
837
+ // Else clean error
838
+ setFileError('');
839
+ }
840
+ }
841
+ });
842
+
843
+ // Delete file from dropzone
844
+ const removeFile = React.useCallback((event, index) => {
845
+ event.stopPropagation();
846
+ event.preventDefault();
847
+ const newFiles = [...files];
848
+ newFiles.splice(index, 1);
849
+ if (onDeleteFile) {
850
+ onDeleteFile(files[index], inputName);
851
+ }
852
+ changeFormState(newFiles);
853
+ }, [files, changeFormState, onDeleteFile]);
854
+
855
+ //
856
+ const convertFiledValueAndSaveAsFiles = React.useCallback(async newInputValue => {
857
+ setFileIsLoading(true);
858
+ const newFiles = await convertToFiles(newInputValue, isPreviews);
859
+ setFileIsLoading(false);
860
+ setFiles(newFiles);
861
+ return newFiles;
862
+ }, [isPreviews]);
863
+ React.useEffect(() => {
864
+ // First time convert value to Files and save to local and form state
865
+ convertFiledValueAndSaveAsFiles(inputValue).then(newFiles => changeFormState(newFiles));
866
+ }, []); // eslint-disable-line
867
+
868
+ React.useEffect(() => {
869
+ // Everytime convert value to Files and save to local state
870
+ if (!inputValue) {
871
+ setFiles([]);
872
+ } else {
873
+ convertFiledValueAndSaveAsFiles(inputValue);
874
+ }
875
+ // only "inputValue"
876
+ }, [inputValue]); // eslint-disable-line
877
+
878
+ React.useEffect(() => {
879
+ // Make sure to revoke the data uris to avoid memory leaks, will run on unmount
880
+ return () => files.forEach(file => URL.revokeObjectURL(file?.preview));
881
+ }, []); // eslint-disable-line
882
+
883
+ const fillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
884
+ prefix: 'fill_',
885
+ propsKey: 'fill'
886
+ });
887
+ const fillHoverClass = useDeviceTargetClass.useDeviceTargetClass(props, {
888
+ prefix: 'fill_hover_',
889
+ propsKey: 'fillHover'
890
+ });
891
+ const borderWidthClass = useDeviceTargetClass.useDeviceTargetClass(props, {
892
+ prefix: 'border-width_',
893
+ propsKey: 'borderWidth'
894
+ });
895
+ const borderColorClass = useDeviceTargetClass.useDeviceTargetClass(props, {
896
+ prefix: 'border-color_',
897
+ propsKey: 'borderColor'
898
+ });
899
+ const borderColorHoverClass = useDeviceTargetClass.useDeviceTargetClass(props, {
900
+ prefix: 'border-color_hover_',
901
+ propsKey: 'borderColorHover'
902
+ });
903
+ const borderTypeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
904
+ prefix: 'border_type_',
905
+ propsKey: 'borderType'
906
+ });
907
+ const shapeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
908
+ prefix: 'form-dropzone_shape_',
909
+ propsKey: 'shape'
910
+ });
911
+ const thumbBorderWidthClass = useDeviceTargetClass.useDeviceTargetClass(props, {
912
+ prefix: 'border-width_',
913
+ propsKey: 'thumbBorderWidth'
914
+ });
915
+ const thumbDirectionClass = useDeviceTargetClass.useDeviceTargetClass(props, {
916
+ prefix: 'form-dropzone__thumb_direction_',
917
+ propsKey: 'thumbDirection'
918
+ });
919
+ const thumbBorderColorClass = useDeviceTargetClass.useDeviceTargetClass(props, {
920
+ prefix: 'border-color_',
921
+ propsKey: 'thumbBorderColor'
922
+ });
923
+ const thumbBorderColorHoverClass = useDeviceTargetClass.useDeviceTargetClass(props, {
924
+ prefix: 'border-color_hover_',
925
+ propsKey: 'thumbBorderColorHover'
926
+ });
927
+ const thumbBorderTypeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
928
+ prefix: 'border_type_',
929
+ propsKey: 'thumbBorderType'
930
+ });
931
+ return /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, /*#__PURE__*/React__default.default.createElement("div", getRootProps({
932
+ className: `form-dropzone__dropzone dropzone ${className} thumbColumn form-dropzone__dropzone_size_${size} ${shapeClass}`
933
+ }), /*#__PURE__*/React__default.default.createElement("input", Object.assign({}, getInputProps(), {
934
+ name: inputName
935
+ })), /*#__PURE__*/React__default.default.createElement("div", {
936
+ className: clsx__default.default('form-dropzone__dropzone-wrapper', thumbColumn && `form-dropzone__dropzone-wrapper_column_${thumbColumn}`, fillClass, fillHoverClass, borderWidthClass, borderColorClass, borderColorHoverClass, borderTypeClass)
937
+ }, files.map((file, i) => /*#__PURE__*/React__default.default.createElement("aside", {
938
+ className: clsx__default.default('form-dropzone__thumb', fillClass, thumbDirectionClass, thumbBorderWidthClass, thumbBorderColorClass, thumbBorderColorHoverClass, thumbBorderTypeClass),
939
+ key: `${file.id || `${file.name}_${i}` || 'i' + i}`
940
+ }, isPreviews && !file.error && /*#__PURE__*/React__default.default.createElement("div", {
941
+ className: "form-dropzone__thumb-image"
942
+ }, /*#__PURE__*/React__default.default.createElement("img", {
943
+ className: "form-dropzone__thumb-image-inner",
944
+ src: file.preview || file.image,
945
+ onLoad: () => {
946
+ // Revoke data uri after image is loaded
947
+ URL.revokeObjectURL(file.preview);
948
+ }
949
+ })), file.error && /*#__PURE__*/React__default.default.createElement("div", null, /*#__PURE__*/React__default.default.createElement(Text.Text, {
950
+ size: thumbNameTextSize,
951
+ textColor: thumbNameTextColor,
952
+ textWrap: thumbNameTextWrap,
953
+ textWeight: thumbNameTextWeight
954
+ }, fileErrorText || file.error)), isShowFilename && /*#__PURE__*/React__default.default.createElement("div", {
955
+ className: "form-dropzone__thumb-name"
956
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
957
+ size: thumbNameTextSize,
958
+ textColor: thumbNameTextColor,
959
+ textWrap: thumbNameTextWrap,
960
+ textWeight: thumbNameTextWeight,
961
+ className: "form-dropzone__thumb-name-inner"
962
+ }, file.name)), fileIsLoading && /*#__PURE__*/React__default.default.createElement("div", {
963
+ className: "form-dropzone__thumb-loader"
964
+ }, /*#__PURE__*/React__default.default.createElement(Loader.Loader, {
965
+ fill: "surfacePrimary",
966
+ height: "fill",
967
+ itemFill: "surfaceItemAccent",
968
+ set: "simple",
969
+ width: "fill"
970
+ })), /*#__PURE__*/React__default.default.createElement("div", {
971
+ className: "form-dropzone__thumb-remove",
972
+ onClick: event => removeFile(event, i)
973
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
974
+ size: removeThumbTextSize,
975
+ textColor: removeThumbTextColor,
976
+ textWeight: removeThumbTextWeight,
977
+ textColorHover: removeThumbTextHoverColor,
978
+ className: "form-dropzone__thumb-remove-text"
979
+ }, removeThumbText || 'Remove')))), !files.length ? /*#__PURE__*/React__default.default.createElement("div", {
980
+ className: "form-dropzone__hint"
981
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
982
+ size: hintTitleTextSize,
983
+ textColor: hintTitleTextColor,
984
+ textWrap: hintTitleTextWrap,
985
+ textWeight: hintTitleTextWeight,
986
+ className: "form-dropzone__hint-title"
987
+ }, hintTitle || 'Select a file or drag in form'), /*#__PURE__*/React__default.default.createElement(Text.Text, {
988
+ size: hintDescriptionTextSize,
989
+ textColor: hintDescriptionTextColor,
990
+ textWrap: hintDescriptionTextWrap,
991
+ textWeight: hintDescriptionTextWeight,
992
+ className: "form-dropzone__hint-text"
993
+ }, hintDescription)) : /*#__PURE__*/React__default.default.createElement("div", {
994
+ className: "form-dropzone__hint form-dropzone__hint_type_add-more"
995
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
996
+ size: hintTitleTextSize,
997
+ textColor: hintTitleTextColor,
998
+ textWrap: hintTitleTextWrap,
999
+ textWeight: hintTitleTextWeight,
1000
+ className: "form-dropzone__hint-title"
1001
+ }, hintTitle || 'Select a file or drag in form'), /*#__PURE__*/React__default.default.createElement(Text.Text, {
1002
+ size: hintDescriptionTextSize,
1003
+ textColor: hintDescriptionTextColor,
1004
+ textWrap: hintDescriptionTextWrap,
1005
+ textWeight: hintDescriptionTextWeight,
1006
+ className: "form-dropzone__hint-text"
1007
+ }, hintDescription)))), fileError && /*#__PURE__*/React__default.default.createElement("div", {
1008
+ className: "form-field__message"
1009
+ }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
1010
+ className: "form-field__message-item form-field__message-item_type_message",
1011
+ size: errorMessageTextSize,
1012
+ textWeight: errorMessageTextWeight,
1013
+ textColor: errorMessageTextColor
1014
+ }, fileError)));
1015
+ });
1016
+ FileInputDropzone.propTypes = {
1017
+ dropzoneProps: PropTypes__default.default.object,
1018
+ hintDescription: PropTypes__default.default.string,
1019
+ hintTitle: PropTypes__default.default.string,
1020
+ inputName: PropTypes__default.default.string,
1021
+ inputValue: PropTypes__default.default.any,
1022
+ isPreviews: PropTypes__default.default.bool,
1023
+ isShowFilename: PropTypes__default.default.bool,
1024
+ loadingText: PropTypes__default.default.string,
1025
+ metaError: PropTypes__default.default.string,
1026
+ metaTouched: PropTypes__default.default.bool,
1027
+ removeThumbText: PropTypes__default.default.string,
1028
+ onAddFiles: PropTypes__default.default.func,
1029
+ onDeleteFile: PropTypes__default.default.func
1030
+ };
1031
+
1032
+ const FileInput = /*#__PURE__*/React__default.default.memo(function FileInput(props) {
1033
+ const {
1034
+ name,
1035
+ shape,
1036
+ size,
1037
+ borderWidth,
1038
+ borderColor,
1039
+ borderColorHover,
1040
+ borderType,
1041
+ label,
1042
+ thumbBorderWidth,
1043
+ thumbBorderColor,
1044
+ thumbBorderColorHover,
1045
+ thumbBorderType,
1046
+ removeThumbTextHoverColor,
1047
+ labelTextColor,
1048
+ fill,
1049
+ fillHover,
1050
+ className,
1051
+ removeThumbText,
1052
+ thumbNameTextSize,
1053
+ thumbNameTextColor,
1054
+ thumbNameTextWrap,
1055
+ thumbNameTextWeight,
1056
+ removeThumbTextSize,
1057
+ removeThumbTextColor,
1058
+ removeThumbTextWeight,
1059
+ hintTitle,
1060
+ errorMessageTextSize,
1061
+ errorMessageTextWeight,
1062
+ errorMessageTextColor,
1063
+ fieldProps,
1064
+ hintTitleTextSize,
1065
+ hintTitleTextColor,
1066
+ hintTitleTextWrap,
1067
+ hintTitleTextWeight,
1068
+ hintDescriptionTextSize,
1069
+ hintDescriptionTextColor,
1070
+ hintDescriptionTextWrap,
1071
+ hintDescriptionTextWeight,
1072
+ hideMessage,
1073
+ thumbDirection,
1074
+ hintDescription,
1075
+ isShowFilename,
1076
+ fileErrorText,
1077
+ dropzoneProps,
1078
+ maxFiles,
1079
+ maxSize,
1080
+ thumbColumn,
1081
+ isRequired,
1082
+ isPreviews,
1083
+ onAddFiles,
1084
+ onDeleteFile,
1085
+ classNameGroupItem
1086
+ } = props;
1087
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1088
+ name: name
1089
+ }, ({
1090
+ input,
1091
+ meta
1092
+ }) => /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1093
+ className: clsx__default.default('form-field_type_dropzone', 'form__item_type_dropzone', classNameGroupItem),
1094
+ fieldClassName: "form-dropzone",
1095
+ inputName: input.name,
1096
+ inputValue: input.value,
1097
+ isRequired: isRequired,
1098
+ label: label,
1099
+ labelTextColor: labelTextColor,
1100
+ metaActive: meta.active,
1101
+ metaError: meta.error,
1102
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1103
+ metaSubmitError: meta.submitError,
1104
+ metaSubmitFailed: meta.submitFailed,
1105
+ metaTouched: meta.touched,
1106
+ metaValid: meta.valid,
1107
+ hideMessage: hideMessage
1108
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(FileInputDropzone, {
1109
+ dropzoneProps: dropzoneProps,
1110
+ hintDescription: hintDescription,
1111
+ hintTitle: hintTitle,
1112
+ borderWidth: borderWidth,
1113
+ borderColor: borderColor,
1114
+ borderColorHover: borderColorHover,
1115
+ borderType: borderType,
1116
+ thumbBorderWidth: thumbBorderWidth,
1117
+ thumbBorderColor: thumbBorderColor,
1118
+ thumbBorderColorHover: thumbBorderColorHover,
1119
+ thumbBorderType: thumbBorderType,
1120
+ fileErrorText: fileErrorText,
1121
+ fill: fill,
1122
+ size: size,
1123
+ maxFiles: maxFiles,
1124
+ maxSize: maxSize,
1125
+ removeThumbTextHoverColor: removeThumbTextHoverColor,
1126
+ fillHover: fillHover,
1127
+ className: className,
1128
+ thumbColumn: thumbColumn,
1129
+ thumbDirection: thumbDirection,
1130
+ inputName: input.name,
1131
+ inputValue: input.value,
1132
+ thumbNameTextSize: thumbNameTextSize,
1133
+ thumbNameTextColor: thumbNameTextColor,
1134
+ thumbNameTextWrap: thumbNameTextWrap,
1135
+ thumbNameTextWeight: thumbNameTextWeight,
1136
+ hintTitleTextSize: hintTitleTextSize,
1137
+ hintTitleTextColor: hintTitleTextColor,
1138
+ hintTitleTextWrap: hintTitleTextWrap,
1139
+ hintTitleTextWeight: hintTitleTextWeight,
1140
+ removeThumbTextSize: removeThumbTextSize,
1141
+ removeThumbTextColor: removeThumbTextColor,
1142
+ removeThumbTextWeight: removeThumbTextWeight,
1143
+ hintDescriptionTextSize: hintDescriptionTextSize,
1144
+ hintDescriptionTextColor: hintDescriptionTextColor,
1145
+ hintDescriptionTextWrap: hintDescriptionTextWrap,
1146
+ hintDescriptionTextWeight: hintDescriptionTextWeight,
1147
+ errorMessageTextSize: errorMessageTextSize,
1148
+ errorMessageWeight: errorMessageTextWeight,
1149
+ errorMessageTextColor: errorMessageTextColor,
1150
+ isPreviews: isPreviews,
1151
+ shape: shape,
1152
+ isShowFilename: isShowFilename,
1153
+ metaError: meta.error,
1154
+ metaTouched: meta.touched,
1155
+ removeThumbText: removeThumbText,
1156
+ onAddFiles: onAddFiles,
1157
+ onDeleteFile: onDeleteFile
1158
+ })));
1159
+ });
1160
+ FileInput.defaultProps = {
1161
+ errorMessageTextSize: 's',
1162
+ errorMessageTextColor: 'errorTextPrimary',
1163
+ thumbColumn: 1,
1164
+ thumbDirection: 'vertical'
1165
+ };
1166
+ FileInput.propTypes = {
1167
+ name: PropTypes__default.default.string.isRequired,
1168
+ className: PropTypes__default.default.string,
1169
+ classNameGroupItem: PropTypes__default.default.string,
1170
+ classNameInput: PropTypes__default.default.string,
1171
+ classNameInputWrapper: PropTypes__default.default.string,
1172
+ dropzoneProps: PropTypes__default.default.object,
1173
+ hintDescription: PropTypes__default.default.string,
1174
+ hintTitle: PropTypes__default.default.string,
1175
+ inputClass: PropTypes__default.default.string,
1176
+ isPreviews: PropTypes__default.default.bool,
1177
+ isRequired: PropTypes__default.default.bool,
1178
+ isShowFilename: PropTypes__default.default.bool,
1179
+ label: PropTypes__default.default.any,
1180
+ removeThumbText: PropTypes__default.default.string,
1181
+ onAddFiles: PropTypes__default.default.func,
1182
+ onDeleteFile: PropTypes__default.default.func
1183
+ };
1184
+
1185
+ const Group = /*#__PURE__*/React__default.default.memo(function Group(props) {
1186
+ const {
1187
+ after,
1188
+ before,
1189
+ className,
1190
+ label,
1191
+ labelTextColor,
1192
+ labelTextSize,
1193
+ labelTextWeight,
1194
+ message,
1195
+ errorMessageTextSize,
1196
+ errorMessageTextWeight,
1197
+ errorMessageTextColor,
1198
+ messageTextSize,
1199
+ messageTextWeight,
1200
+ messageTextColor,
1201
+ children,
1202
+ dataTour,
1203
+ hideMessage,
1204
+ name,
1205
+ showErrorsOnSubmit
1206
+ } = props;
1207
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1208
+ name: name
1209
+ }, ({
1210
+ input,
1211
+ meta
1212
+ }) => {
1213
+ const error = meta.error || !meta.modifiedSinceLastSubmit && meta.submitError || false;
1214
+ const showError = React.useMemo(() => {
1215
+ if (showErrorsOnSubmit) {
1216
+ return meta.submitFailed && meta.touched && error;
1217
+ } else {
1218
+ return meta.touched && error;
1219
+ }
1220
+ }, [showErrorsOnSubmit, meta.submitFailed, meta.touched, error]);
1221
+ return /*#__PURE__*/React__default.default.createElement("div", {
1222
+ className: clsx__default.default('form__group', className),
1223
+ "data-tour": dataTour
1224
+ }, /*#__PURE__*/React__default.default.createElement("div", {
1225
+ className: "form__group-wrapper"
1226
+ }, before, /*#__PURE__*/React__default.default.createElement("div", {
1227
+ className: "form__group-label"
1228
+ }, /*#__PURE__*/React__default.default.createElement(Title.Title, {
1229
+ textColor: labelTextColor,
1230
+ size: labelTextSize,
1231
+ textWeight: labelTextWeight
1232
+ }, label)), /*#__PURE__*/React__default.default.createElement("div", {
1233
+ className: "form__group-items"
1234
+ }, children), after), !hideMessage && /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, Boolean(showError) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
1235
+ className: "form__group-message form__group-message_type-error",
1236
+ size: errorMessageTextSize,
1237
+ textWeight: errorMessageTextWeight,
1238
+ textColor: errorMessageTextColor,
1239
+ id: `${name}-error`
1240
+ }, error), Boolean(message) && !showError && /*#__PURE__*/React__default.default.createElement(Text.Text, {
1241
+ className: "form__group-message",
1242
+ size: messageTextSize,
1243
+ textWeight: messageTextWeight,
1244
+ textColor: messageTextColor
1245
+ }, message), Boolean(!showError) && Boolean(!message) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
1246
+ className: "form__group-message",
1247
+ size: messageTextSize
1248
+ }, '\u00A0')));
1249
+ });
1250
+ });
1251
+ Group.defaultProps = {
1252
+ inputProps: {},
1253
+ fieldProps: {},
1254
+ type: 'normal',
1255
+ errorMessageTextSize: 's',
1256
+ errorMessageTextColor: 'errorTextPrimary',
1257
+ messageTextSize: 's',
1258
+ messageTextColor: 'surfaceTextTertiary'
1259
+ };
1260
+ Group.propTypes = {
1261
+ name: PropTypes__default.default.string.isRequired,
1262
+ isRequired: PropTypes__default.default.bool,
1263
+ fieldProps: PropTypes__default.default.object,
1264
+ inputProps: PropTypes__default.default.object
1265
+ };
1266
+
1267
+ const InputField = /*#__PURE__*/React__default.default.memo(function InputField(props) {
1268
+ const {
1269
+ isPassword,
1270
+ isRequired,
1271
+ fieldProps,
1272
+ inputProps,
1273
+ isRevealable,
1274
+ name,
1275
+ parse,
1276
+ iconSize,
1277
+ iconBorder,
1278
+ iconBorderHover,
1279
+ iconFill,
1280
+ iconFillHover,
1281
+ iconRevealableShow,
1282
+ iconRevealableHide,
1283
+ iconShape,
1284
+ hideMessage,
1285
+ onChange,
1286
+ classNameGroupItem
1287
+ } = props;
1288
+ const [isRevealed, setIsRevealed] = React.useState(false);
1289
+ const inputType = React.useMemo(() => {
1290
+ if (isPassword) {
1291
+ return isRevealed ? 'text' : 'password';
1292
+ } else {
1293
+ return 'text';
1294
+ }
1295
+ }, [isRevealed, isPassword]);
1296
+ const revealeHandler = React.useCallback(e => {
1297
+ e.preventDefault();
1298
+ setIsRevealed(prev => !prev);
1299
+ }, [setIsRevealed]);
1300
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1301
+ name: name,
1302
+ parse: parse
1303
+ }, ({
1304
+ input,
1305
+ meta
1306
+ }) => {
1307
+ const onChangeField = React.useCallback(event => {
1308
+ input.onChange(event);
1309
+ if (onChange) {
1310
+ onChange(event.target.value, input.name);
1311
+ }
1312
+ }, [onChange]);
1313
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1314
+ className: clsx__default.default('form-field_type_input', 'form__item_type_input', classNameGroupItem),
1315
+ fieldClassName: isRevealable ? 'form-password' : 'form-input',
1316
+ inputName: input.name,
1317
+ inputValue: input.value || '',
1318
+ isRequired: isRequired,
1319
+ metaActive: meta.active,
1320
+ metaError: meta.error,
1321
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1322
+ metaSubmitError: meta.submitError,
1323
+ metaSubmitFailed: meta.submitFailed,
1324
+ metaTouched: meta.touched,
1325
+ metaValid: meta.valid,
1326
+ hideMessage: hideMessage
1327
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Input.Input, Object.assign({
1328
+ className: clsx__default.default(meta.active && 'input_state_focus', meta.error && meta.touched && 'input_state_error'),
1329
+ autoComplete: "nope",
1330
+ name: input.name,
1331
+ type: inputType,
1332
+ value: input.value || '',
1333
+ onBlur: input.onBlur,
1334
+ onChange: onChangeField,
1335
+ onFocus: input.onFocus
1336
+ }, inputProps)), isRevealable && /*#__PURE__*/React__default.default.createElement(Icon.Icon, {
1337
+ className: "form-field__icon",
1338
+ iconFill: iconFill,
1339
+ iconFillHover: iconFillHover,
1340
+ SvgImage: isRevealed ? iconRevealableHide : iconRevealableShow,
1341
+ imageSrc: isRevealed ? iconRevealableHide : iconRevealableShow,
1342
+ shape: iconShape,
1343
+ size: iconSize,
1344
+ onClick: revealeHandler
1345
+ }));
1346
+ });
1347
+ });
1348
+ InputField.defaultProps = {
1349
+ inputProps: {},
1350
+ fieldProps: {}
1351
+ };
1352
+ InputField.propTypes = {
1353
+ fieldProps: PropTypes__default.default.object,
1354
+ inputProps: PropTypes__default.default.object,
1355
+ isPassword: PropTypes__default.default.bool,
1356
+ isRequired: PropTypes__default.default.bool,
1357
+ isRevealable: PropTypes__default.default.bool,
1358
+ name: PropTypes__default.default.string.isRequired,
1359
+ onChange: PropTypes__default.default.func
1360
+ };
1361
+
1362
+ function RadioGroupItem(props) {
1363
+ const {
1364
+ input,
1365
+ option,
1366
+ onChange,
1367
+ inputProps
1368
+ } = props;
1369
+ const onChangeField = React.useCallback(event => {
1370
+ if (event.target.checked) {
1371
+ onChange(option.value);
1372
+ }
1373
+ }, []);
1374
+ return /*#__PURE__*/React__default.default.createElement(RadioButton.RadioButton, Object.assign({
1375
+ className: "form-radio__item",
1376
+ checked: option.value === input.value,
1377
+ name: input.name,
1378
+ type: "radio",
1379
+ value: option.value,
1380
+ onBlur: input.onBlur,
1381
+ onChange: onChangeField,
1382
+ onFocus: input.onFocus,
1383
+ label: option.label
1384
+ }, inputProps));
1385
+ }
1386
+ RadioGroupItem.propTypes = {
1387
+ inputProps: PropTypes__default.default.object,
1388
+ onChange: PropTypes__default.default.func,
1389
+ option: PropTypes__default.default.shape({
1390
+ label: PropTypes__default.default.string,
1391
+ value: PropTypes__default.default.string
1392
+ }),
1393
+ input: PropTypes__default.default.shape({
1394
+ name: PropTypes__default.default.string,
1395
+ value: PropTypes__default.default.string,
1396
+ onBlur: PropTypes__default.default.func,
1397
+ onFocus: PropTypes__default.default.func,
1398
+ onChange: PropTypes__default.default.func
1399
+ })
1400
+ };
1401
+
1402
+ function RadioGroupInput(props) {
1403
+ const {
1404
+ input,
1405
+ value,
1406
+ onChange
1407
+ } = props;
1408
+ const onChangeField = React.useCallback(event => onChange(event.target.value), [onChange]);
1409
+ return /*#__PURE__*/React__default.default.createElement(Input.Input, Object.assign({
1410
+ autoComplete: "nope",
1411
+ name: input.name,
1412
+ onBlur: input.onBlur,
1413
+ onChange: onChangeField,
1414
+ onFocus: input.onFocus,
1415
+ value: value
1416
+ }, props));
1417
+ }
1418
+ RadioGroupInput.propTypes = {
1419
+ input: PropTypes__default.default.string,
1420
+ value: PropTypes__default.default.string,
1421
+ editableProps: PropTypes__default.default.object,
1422
+ onChange: PropTypes__default.default.func
1423
+ };
1424
+
1425
+ function RadioGroupList(props) {
1426
+ const {
1427
+ input,
1428
+ options,
1429
+ editableProps,
1430
+ onChange,
1431
+ inputProps
1432
+ } = props;
1433
+ const [editableValue, setEditableValue] = React.useState(() => {
1434
+ const isRadioValue = options.find(option => option.value === input.value);
1435
+ if (!isRadioValue) {
1436
+ return input.value;
1437
+ }
1438
+ return '';
1439
+ });
1440
+ React.useEffect(() => {
1441
+ // When a new value from outside enters the form
1442
+ if (input.value) {
1443
+ // Check value for radio type
1444
+ const isRadioValue = options.find(option => option.value === input.value && !option.editable);
1445
+ // If new value not in radio list - set to editable input
1446
+ setEditableValue(isRadioValue ? '' : input.value);
1447
+ } else {
1448
+ // If new value is empty - clear editable input
1449
+ setEditableValue('');
1450
+ }
1451
+ }, [input.value]);
1452
+
1453
+ // Callback for value changes
1454
+ const onChangeSomeInput = React.useCallback(value => {
1455
+ // Save to form values
1456
+ input.onChange(value);
1457
+ if (onChange) {
1458
+ // Pass to custom event
1459
+ onChange(value, input.name);
1460
+ }
1461
+ }, [input, onChange]);
1462
+
1463
+ // Handle for radio inputs
1464
+ const onChangeRadio = React.useCallback(value => {
1465
+ setEditableValue('');
1466
+ onChangeSomeInput(value);
1467
+ }, [onChangeSomeInput]);
1468
+
1469
+ // Handle for text input
1470
+ const onChangeEditable = React.useCallback(value => {
1471
+ setEditableValue(value);
1472
+ onChangeSomeInput(value);
1473
+ }, [onChangeSomeInput]);
1474
+ return /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, options.map(option => option.editable ? /*#__PURE__*/React__default.default.createElement(RadioGroupInput, {
1475
+ key: option.label,
1476
+ input: input,
1477
+ value: editableValue,
1478
+ option: option,
1479
+ onChange: onChangeEditable,
1480
+ editableProps: editableProps,
1481
+ inputProps: inputProps
1482
+ }) : /*#__PURE__*/React__default.default.createElement(RadioGroupItem, {
1483
+ key: option.value,
1484
+ input: input,
1485
+ option: option,
1486
+ onChange: onChangeRadio,
1487
+ inputProps: inputProps
1488
+ })));
1489
+ }
1490
+ RadioGroupList.propTypes = {
1491
+ editableProps: PropTypes__default.default.object,
1492
+ input: PropTypes__default.default.object,
1493
+ inputProps: PropTypes__default.default.object,
1494
+ onChange: PropTypes__default.default.object,
1495
+ options: PropTypes__default.default.object
1496
+ };
1497
+
1498
+ const RadioGroup = /*#__PURE__*/React__default.default.memo(function RadioGroup(props) {
1499
+ const {
1500
+ isRequired,
1501
+ name,
1502
+ options,
1503
+ fieldProps,
1504
+ editableProps,
1505
+ inputProps,
1506
+ onChange,
1507
+ hideMessage
1508
+ } = props;
1509
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1510
+ name: name
1511
+ }, ({
1512
+ input,
1513
+ meta
1514
+ }) => /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1515
+ className: "form__item_type_radio",
1516
+ fieldClassName: 'form-radio',
1517
+ inputName: input.name,
1518
+ inputValue: input.value || '',
1519
+ isRequired: isRequired,
1520
+ metaActive: meta.active,
1521
+ metaError: meta.error,
1522
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1523
+ metaSubmitError: meta.submitError,
1524
+ metaSubmitFailed: meta.submitFailed,
1525
+ metaTouched: meta.touched,
1526
+ metaValid: meta.valid,
1527
+ hideMessage: hideMessage
1528
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(RadioGroupList, {
1529
+ input: input,
1530
+ options: options,
1531
+ onChange: onChange,
1532
+ editableProps: editableProps,
1533
+ inputProps: inputProps
1534
+ })));
1535
+ });
1536
+ RadioGroup.defaultProps = {
1537
+ fieldProps: {},
1538
+ editableProps: {},
1539
+ inputProps: {},
1540
+ options: []
1541
+ };
1542
+ RadioGroup.propTypes = {
1543
+ name: PropTypes__default.default.string.isRequired,
1544
+ fieldProps: PropTypes__default.default.object,
1545
+ inputProps: PropTypes__default.default.object,
1546
+ editableProps: PropTypes__default.default.object,
1547
+ isRequired: PropTypes__default.default.bool,
1548
+ options: PropTypes__default.default.array,
1549
+ onChange: PropTypes__default.default.func
1550
+ };
1551
+
1552
+ // const SegmentedField = React.memo(
1553
+ function SegmentedField(props) {
1554
+ const {
1555
+ options,
1556
+ isRequired,
1557
+ name,
1558
+ fieldProps,
1559
+ inputProps,
1560
+ hideMessage
1561
+ } = props;
1562
+ const {
1563
+ change
1564
+ } = reactFinalForm.useForm();
1565
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1566
+ name: name
1567
+ }, ({
1568
+ input,
1569
+ meta
1570
+ }) => {
1571
+ const activeOption = React.useMemo(() => {
1572
+ const emptyOption = {
1573
+ value: null,
1574
+ label: null
1575
+ };
1576
+ if (input.value) {
1577
+ const currentOption = options.find(option => option.value === input.value);
1578
+ return currentOption || emptyOption;
1579
+ }
1580
+ return emptyOption;
1581
+ }, [input.value]);
1582
+ const setActiveSegment = React.useCallback(option => {
1583
+ change(name, option.value);
1584
+ }, [change]);
1585
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1586
+ className: clsx__default.default('form-field_type_segmented', 'form__item_type_segmented'),
1587
+ fieldClassName: "form-segmented",
1588
+ inputName: input.name,
1589
+ inputValue: input.value || [],
1590
+ isRequired: isRequired,
1591
+ metaActive: meta.active,
1592
+ metaError: meta.error,
1593
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1594
+ metaSubmitError: meta.submitError,
1595
+ metaSubmitFailed: meta.submitFailed,
1596
+ metaTouched: meta.touched,
1597
+ metaValid: meta.valid,
1598
+ hideMessage: hideMessage
1599
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Segmented.Segmented, Object.assign({
1600
+ segments: options,
1601
+ setActiveSegment: setActiveSegment,
1602
+ activeSegment: activeOption
1603
+ }, inputProps)));
1604
+ });
1605
+ }
1606
+ // )
1607
+
1608
+ SegmentedField.propTypes = {
1609
+ options: PropTypes__default.default.array.isRequired,
1610
+ name: PropTypes__default.default.string.isRequired,
1611
+ className: PropTypes__default.default.string,
1612
+ inputClass: PropTypes__default.default.string,
1613
+ isRequired: PropTypes__default.default.bool,
1614
+ label: PropTypes__default.default.string,
1615
+ placeholder: PropTypes__default.default.string,
1616
+ fieldProps: PropTypes__default.default.object,
1617
+ inputProps: PropTypes__default.default.object
1618
+ };
1619
+
1620
+ function getDefaultValue(options, selectValue) {
1621
+ const selectValues = Array.isArray(selectValue) ? selectValue : [selectValue];
1622
+ let result = [];
1623
+ options.forEach(item => {
1624
+ const isValue = selectValues.includes(item.value);
1625
+ const isLabel = selectValues.includes(item.label);
1626
+ let childOptions = [];
1627
+ if (item.options) {
1628
+ childOptions = getDefaultValue(item.options, selectValue);
1629
+ }
1630
+ if (isValue || isLabel) {
1631
+ result.push(item);
1632
+ } else if (childOptions.length) {
1633
+ result = result.concat(childOptions);
1634
+ }
1635
+ });
1636
+ return result;
1637
+ }
1638
+ const SelectField = /*#__PURE__*/React__default.default.memo(function SelectField(props) {
1639
+ const {
1640
+ isRequired,
1641
+ key,
1642
+ name,
1643
+ options,
1644
+ fieldProps,
1645
+ selectProps,
1646
+ selectRef,
1647
+ onChange,
1648
+ classNameGroupItem,
1649
+ hideMessage
1650
+ } = props;
1651
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1652
+ name: name
1653
+ }, ({
1654
+ input,
1655
+ meta
1656
+ }) => {
1657
+ const onChangeField = React.useCallback(value => {
1658
+ input.onChange(value);
1659
+ if (onChange) {
1660
+ onChange(value, input.name);
1661
+ }
1662
+ }, [onChange]);
1663
+ const [selectedOptions, setSelectedOptions] = React.useState(null);
1664
+ const defaultValue = React.useMemo(() => {
1665
+ const optionsValues = getDefaultValue(options, input.value);
1666
+ if (!optionsValues.length && input.value?.length) {
1667
+ optionsValues.push({
1668
+ value: input.value,
1669
+ label: input.value
1670
+ });
1671
+ }
1672
+ return optionsValues;
1673
+ }, [input.value]);
1674
+ React.useEffect(() => setSelectedOptions(defaultValue), [defaultValue]);
1675
+ const onChangeValue = React.useCallback((option, actionMeta) => {
1676
+ const value = Array.isArray(option) ? option.map(o => o.value) : option?.value || null;
1677
+ setSelectedOptions(option);
1678
+ onChangeField(value);
1679
+ }, [onChangeField]);
1680
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1681
+ className: clsx__default.default('form-field_type_select', 'form__item_type_select', classNameGroupItem),
1682
+ fieldClassName: 'form-select',
1683
+ inputName: input.name,
1684
+ inputValue: input.value,
1685
+ isRequired: isRequired,
1686
+ metaActive: meta.active,
1687
+ metaError: meta.error,
1688
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1689
+ metaSubmitError: meta.submitError,
1690
+ metaSubmitFailed: meta.submitFailed,
1691
+ metaTouched: meta.touched,
1692
+ metaValid: meta.valid,
1693
+ hideMessage: hideMessage
1694
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Select.Select, Object.assign({
1695
+ className: "form-select-item",
1696
+ instanceId: `id_${input.name}`,
1697
+ value: selectedOptions,
1698
+ onChange: onChangeValue,
1699
+ options: options,
1700
+ ref: selectRef,
1701
+ key: key
1702
+ }, selectProps)));
1703
+ });
1704
+ });
1705
+ SelectField.propTypes = {
1706
+ name: PropTypes__default.default.string.isRequired,
1707
+ selectProps: PropTypes__default.default.object,
1708
+ isRequired: PropTypes__default.default.bool,
1709
+ label: PropTypes__default.default.any,
1710
+ messageType: PropTypes__default.default.string,
1711
+ options: PropTypes__default.default.array,
1712
+ onChange: PropTypes__default.default.func
1713
+ };
1714
+
1715
+ const SwitchField = /*#__PURE__*/React__default.default.memo(function SwitchField(props) {
1716
+ const {
1717
+ name,
1718
+ isRequired,
1719
+ onChange,
1720
+ fieldProps,
1721
+ inputProps,
1722
+ classNameGroupItem,
1723
+ hideMessage
1724
+ } = props;
1725
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1726
+ name: name,
1727
+ type: "checkbox"
1728
+ }, ({
1729
+ input,
1730
+ meta
1731
+ }) => {
1732
+ const onChangeField = React.useCallback(event => {
1733
+ input.onChange(event);
1734
+ if (onChange) {
1735
+ onChange(event.target.checked, input.name);
1736
+ }
1737
+ }, [onChange]);
1738
+ return /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1739
+ className: clsx__default.default('form-field_type_switch', 'form__item_type_switch', classNameGroupItem),
1740
+ fieldClassName: "form-switch",
1741
+ inputName: input.name,
1742
+ inputValue: input.checked,
1743
+ isRequired: isRequired,
1744
+ metaActive: meta.active,
1745
+ metaError: meta.error,
1746
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1747
+ metaSubmitError: meta.submitError,
1748
+ metaSubmitFailed: meta.submitFailed,
1749
+ metaTouched: meta.touched,
1750
+ metaValid: meta.valid,
1751
+ hideMessage: hideMessage,
1752
+ tag: "label"
1753
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Switch.Switch, Object.assign({
1754
+ autoComplete: "nope",
1755
+ checked: input.checked,
1756
+ name: input.name,
1757
+ type: "checkbox",
1758
+ onBlur: input.onBlur,
1759
+ onChange: onChangeField,
1760
+ onFocus: input.onFocus
1761
+ }, inputProps)));
1762
+ });
1763
+ });
1764
+ SwitchField.defaultProps = {
1765
+ inputProps: {},
1766
+ fieldProps: {}
1767
+ };
1768
+ SwitchField.propTypes = {
1769
+ fieldProps: PropTypes__default.default.object,
1770
+ inputProps: PropTypes__default.default.object,
1771
+ isRequired: PropTypes__default.default.bool,
1772
+ name: PropTypes__default.default.string,
1773
+ onChange: PropTypes__default.default.func
1774
+ };
1775
+
1776
+ const TextareaField = /*#__PURE__*/React__default.default.memo(function TextareaField(props) {
1777
+ const {
1778
+ isRequired,
1779
+ name,
1780
+ fieldProps,
1781
+ inputProps,
1782
+ classNameGroupItem,
1783
+ hideMessage
1784
+ } = props;
1785
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Field, {
1786
+ name: name
1787
+ }, ({
1788
+ input,
1789
+ meta
1790
+ }) => /*#__PURE__*/React__default.default.createElement(FieldWrapper, Object.assign({
1791
+ className: clsx__default.default('form-field_type_textarea', 'form__item_type_textarea', classNameGroupItem),
1792
+ fieldClassName: 'form-textarea',
1793
+ inputName: input.name,
1794
+ inputValue: input.value,
1795
+ isRequired: isRequired,
1796
+ metaActive: meta.active,
1797
+ metaError: meta.error,
1798
+ metaModifiedSinceLastSubmit: meta.modifiedSinceLastSubmit,
1799
+ metaSubmitError: meta.submitError,
1800
+ metaSubmitFailed: meta.submitFailed,
1801
+ metaTouched: meta.touched,
1802
+ metaValid: meta.valid,
1803
+ hideMessage: hideMessage
1804
+ }, fieldProps), /*#__PURE__*/React__default.default.createElement(Textarea.Textarea, Object.assign({
1805
+ autoComplete: "nope",
1806
+ name: input.name,
1807
+ value: input.value,
1808
+ onBlur: input.onBlur,
1809
+ onChange: input.onChange,
1810
+ onFocus: input.onFocus
1811
+ }, inputProps))));
1812
+ });
1813
+ TextareaField.defaultProps = {
1814
+ inputProps: {},
1815
+ fieldProps: {}
1816
+ };
1817
+ TextareaField.propTypes = {
1818
+ name: PropTypes__default.default.string.isRequired,
1819
+ isRequired: PropTypes__default.default.bool,
1820
+ fieldProps: PropTypes__default.default.object,
1821
+ inputProps: PropTypes__default.default.object
1822
+ };
1823
+
1824
+ const focusOnError = (formElementsList, errors) => {
1825
+ const selectsIds = Object.keys(errors).map(fieldName => {
1826
+ if (fieldName === finalForm.FORM_ERROR) {
1827
+ // TODO: get from somewhere
1828
+ return 'notification__item_status_error';
1829
+ }
1830
+ return `react-select-id_${fieldName}-input`;
1831
+ });
1832
+ const errorFieldElement = formElementsList.find(element => {
1833
+ if (element.name) {
1834
+ return finalForm.getIn(errors, element.name);
1835
+ } else {
1836
+ return selectsIds.includes(element.id);
1837
+ }
1838
+ });
1839
+ const errorsList = Object.keys(errors);
1840
+ if (!errorFieldElement && errorsList.length) {
1841
+ let errorElement;
1842
+ try {
1843
+ const fieldName = errorsList[0];
1844
+ if (fieldName === finalForm.FORM_ERROR) {
1845
+ errorElement = document.querySelector('notification__item_status_error');
1846
+ } else {
1847
+ errorElement = document.querySelector(`#${fieldName}-error`);
1848
+ if (!errorElement) {
1849
+ errorElement = document.querySelector(`#id_${fieldName}`);
1850
+ }
1851
+ }
1852
+ } catch (err) {
1853
+ console.warn(err);
1854
+ }
1855
+ if (errorElement) {
1856
+ errorElement.scrollIntoView({
1857
+ block: 'center'
1858
+ }); // , behavior: 'smooth'
1859
+ }
1860
+ }
1861
+
1862
+ // the field is covered by the header because header is "sticky",
1863
+ // that's we scroll manually so that the field falls into the center of the visible area
1864
+ if (errorFieldElement) {
1865
+ errorFieldElement.scrollIntoView({
1866
+ block: 'center'
1867
+ });
1868
+ }
1869
+ return null;
1870
+ };
1871
+ const focusOnErrorDecorator = createDecorator__default.default(null, focusOnError);
1872
+ const setErrorsMutator = (args, state) => {
1873
+ const [fieldName, data] = args;
1874
+ const submitError = data.submitError;
1875
+ const fieldError = data.error;
1876
+ if (fieldName === 'non_field_errors') {
1877
+ // state.formState.invalid = true
1878
+ // state.formState.valid = false
1879
+ state.formState.error = fieldError;
1880
+ state.formState.submitError = submitError;
1881
+ } else if (fieldName in state.fields) {
1882
+ if (fieldError) {
1883
+ const errorsState = Object.assign({}, state.formState.errors, {
1884
+ [fieldName]: fieldError
1885
+ });
1886
+ state.fields[fieldName].touched = true;
1887
+ state.fields[fieldName].error = fieldError;
1888
+ state.formState.errors = errorsState;
1889
+ }
1890
+ if (submitError) {
1891
+ const submitErrorsState = Object.assign({}, state.formState.submitErrors, {
1892
+ [fieldName]: submitError
1893
+ });
1894
+
1895
+ // state.fields[fieldName].submitFailed = true
1896
+ // state.fields[fieldName].submitSucceeded = false
1897
+ state.fields[fieldName].submitError = submitError;
1898
+ state.formState.submitErrors = submitErrorsState;
1899
+ state.formState.submitFailed = true;
1900
+ state.formState.submitSucceeded = false;
1901
+ state.formState.lastSubmittedValues = state.formState.values;
1902
+ }
1903
+ }
1904
+ };
1905
+ const sendFormDataToServer = async (url, data) => {
1906
+ try {
1907
+ const response = await axios__default.default({
1908
+ url: url,
1909
+ method: 'POST',
1910
+ data: data
1911
+ });
1912
+ return {
1913
+ success: true,
1914
+ response
1915
+ };
1916
+ } catch (error) {
1917
+ const formErrors = {};
1918
+ if (typeof error.response?.data === 'string') {
1919
+ formErrors[finalForm.FORM_ERROR] = 'Something went wrong';
1920
+ }
1921
+ if (typeof error.response?.data === 'object') {
1922
+ Object.entries(error.response.data).forEach(([fieldName, errorsList]) => {
1923
+ formErrors[fieldName] = errorsList[0];
1924
+ });
1925
+ }
1926
+ return {
1927
+ success: false,
1928
+ formErrors,
1929
+ error
1930
+ };
1931
+ }
1932
+ };
1933
+
1934
+ const formTypes = {
1935
+ checkbox: 'checkbox',
1936
+ custom: 'custom',
1937
+ choice: 'choice',
1938
+ code: 'code',
1939
+ datePicker: 'datePicker',
1940
+ dateRangePicker: 'dateRangePicker',
1941
+ fileInput: 'fileInput',
1942
+ group: 'group',
1943
+ radioGroup: 'radioGroup',
1944
+ segmented: 'segmented',
1945
+ select: 'select',
1946
+ switch: 'switch',
1947
+ text: 'text',
1948
+ textarea: 'textarea'
1949
+ };
1950
+ function generateField(field, config, props) {
1951
+ switch (field.type) {
1952
+ case formTypes.checkbox:
1953
+ {
1954
+ return /*#__PURE__*/React__default.default.createElement(CheckboxField, Object.assign({
1955
+ key: config.key
1956
+ }, field, props));
1957
+ }
1958
+ case formTypes.choice:
1959
+ {
1960
+ return /*#__PURE__*/React__default.default.createElement(ChoiceField, Object.assign({
1961
+ key: config.key
1962
+ }, field, props));
1963
+ }
1964
+ case formTypes.code:
1965
+ {
1966
+ return /*#__PURE__*/React__default.default.createElement(CodeField, Object.assign({
1967
+ key: config.key
1968
+ }, field, props));
1969
+ }
1970
+ case formTypes.switch:
1971
+ {
1972
+ return /*#__PURE__*/React__default.default.createElement(SwitchField, Object.assign({
1973
+ key: config.key
1974
+ }, field, props));
1975
+ }
1976
+ case formTypes.segmented:
1977
+ {
1978
+ return /*#__PURE__*/React__default.default.createElement(SegmentedField, Object.assign({
1979
+ key: config.key
1980
+ }, field, props));
1981
+ }
1982
+ case formTypes.datePicker:
1983
+ {
1984
+ return /*#__PURE__*/React__default.default.createElement(DatePickerField, Object.assign({
1985
+ key: config.key
1986
+ }, field, props));
1987
+ }
1988
+ case formTypes.fileInput:
1989
+ {
1990
+ return /*#__PURE__*/React__default.default.createElement(FileInput, Object.assign({
1991
+ key: config.key
1992
+ }, field, props));
1993
+ }
1994
+ case formTypes.radioGroup:
1995
+ {
1996
+ return /*#__PURE__*/React__default.default.createElement(RadioGroup, Object.assign({
1997
+ key: config.key
1998
+ }, field, props));
1999
+ }
2000
+ case formTypes.select:
2001
+ {
2002
+ return /*#__PURE__*/React__default.default.createElement(SelectField, Object.assign({
2003
+ key: config.key
2004
+ }, field, props));
2005
+ }
2006
+ case formTypes.text:
2007
+ {
2008
+ return /*#__PURE__*/React__default.default.createElement(InputField, Object.assign({
2009
+ key: config.key
2010
+ }, field, props));
2011
+ }
2012
+ case formTypes.textarea:
2013
+ {
2014
+ return /*#__PURE__*/React__default.default.createElement(TextareaField, Object.assign({
2015
+ key: config.key
2016
+ }, field, props));
2017
+ }
2018
+ case formTypes.custom:
2019
+ {
2020
+ return /*#__PURE__*/React__default.default.createElement(CustomField, Object.assign({
2021
+ key: config.key
2022
+ }, field, props));
2023
+ }
2024
+ case formTypes.group:
2025
+ {
2026
+ return /*#__PURE__*/React__default.default.createElement(Group, Object.assign({
2027
+ key: config.key
2028
+ }, field, props), Object.entries(field.group).map(([key, value]) => {
2029
+ const groupProps = {
2030
+ ...value,
2031
+ hideMessage: field.hideMessage,
2032
+ classNameGroupItem: value.classNameGroupItem || 'form__group-item'
2033
+ };
2034
+ return generateField(groupProps, {
2035
+ key: key + '_form_group'
2036
+ }, props);
2037
+ }));
2038
+ }
2039
+ }
2040
+ }
2041
+
2042
+ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalForm(props, ref) {
2043
+ const {
2044
+ additionalProps,
2045
+ after,
2046
+ before,
2047
+ buttonDirection,
2048
+ buttonGap,
2049
+ buttonPadding,
2050
+ groupGap,
2051
+ className,
2052
+ config,
2053
+ description,
2054
+ descriptionSize,
2055
+ descriptionTextColor,
2056
+ descriptionTextWeight,
2057
+ disableFieldsAutoComplete,
2058
+ fieldsGap,
2059
+ formName,
2060
+ initialValues,
2061
+ initialValuesEqual,
2062
+ isLoading,
2063
+ loader,
2064
+ loaderSet,
2065
+ loaderFill,
2066
+ loaderItemFill,
2067
+ loaderText,
2068
+ language,
2069
+ mutators,
2070
+ onChangeFormValues,
2071
+ onClickSecondaryButton,
2072
+ onClickTertiaryButton,
2073
+ onSubmit,
2074
+ primaryButton,
2075
+ primaryButtonLabel,
2076
+ secondaryButton,
2077
+ secondaryButtonLabel,
2078
+ primaryButtonFill,
2079
+ primaryButtonFillHover,
2080
+ secondaryButtonFill,
2081
+ secondaryButtonFillHover,
2082
+ primaryButtonSize,
2083
+ primaryButtonLabelTextColor,
2084
+ primaryButtonLabelSize,
2085
+ primaryButtonLabelTextWeight,
2086
+ secondaryButtonSize,
2087
+ secondaryButtonLabelTextColor,
2088
+ secondaryButtonLabelSize,
2089
+ secondaryButtonLabelTextWeight,
2090
+ tertiaryButton,
2091
+ tertiaryButtonFill,
2092
+ tertiaryButtonFillHover,
2093
+ tertiaryButtonSize,
2094
+ tertiaryButtonLabelTextColor,
2095
+ tertiaryButtonLabelSize,
2096
+ tertiaryButtonLabelTextWeight,
2097
+ tertiaryButtonLabel,
2098
+ set,
2099
+ type,
2100
+ buttonJustifyContent,
2101
+ title,
2102
+ notificationType,
2103
+ notificationClose,
2104
+ buttonFill,
2105
+ titleTextSize,
2106
+ titleTextColor,
2107
+ titleTextWeight,
2108
+ validationSchema,
2109
+ dataTour,
2110
+ dataTourButtons,
2111
+ dataTourPrimaryButton,
2112
+ dataTourSecondaryButton,
2113
+ dataTourTertiaryButton
2114
+ } = props;
2115
+ const validate = useYupValidationSchema(validationSchema, language);
2116
+ const onRefFormInstance = React.useCallback(formInstance => {
2117
+ if (ref) {
2118
+ ref.current = formInstance;
2119
+ }
2120
+ }, [ref]);
2121
+ const fillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
2122
+ prefix: 'fill_',
2123
+ propsKey: 'fill'
2124
+ });
2125
+ const directionClass = useDeviceTargetClass.useDeviceTargetClass(props, {
2126
+ prefix: 'direction_',
2127
+ propsKey: 'direction'
2128
+ });
2129
+ const shapeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
2130
+ prefix: 'shape_',
2131
+ propsKey: 'shape'
2132
+ });
2133
+ const elevationClass = useDeviceTargetClass.useDeviceTargetClass(props, {
2134
+ prefix: 'elevation_',
2135
+ propsKey: 'elevation'
2136
+ });
2137
+ const {
2138
+ styles: formStyles
2139
+ } = useStyles.useStyles(props);
2140
+ return /*#__PURE__*/React__default.default.createElement(reactFinalForm.Form, {
2141
+ decorators: [focusOnErrorDecorator],
2142
+ initialValues: initialValues,
2143
+ initialValuesEqual: initialValuesEqual,
2144
+ mutators: mutators,
2145
+ render: ({
2146
+ handleSubmit,
2147
+ submitError,
2148
+ modifiedSinceLastSubmit,
2149
+ form
2150
+ }) => {
2151
+ return /*#__PURE__*/React__default.default.createElement("form", {
2152
+ style: formStyles,
2153
+ className: clsx__default.default(className, 'form', set && `form_set_${set}`, type && `form_type_${type}`, directionClass, fillClass, shapeClass, elevationClass),
2154
+ name: formName,
2155
+ "data-tour": dataTour,
2156
+ ref: () => onRefFormInstance(form),
2157
+ onSubmit: handleSubmit,
2158
+ autoComplete: disableFieldsAutoComplete ? 'off' : undefined,
2159
+ autoCorrect: disableFieldsAutoComplete ? 'off' : undefined,
2160
+ autoCapitalize: disableFieldsAutoComplete ? 'off' : undefined,
2161
+ spellCheck: disableFieldsAutoComplete ? 'false' : undefined
2162
+ }, before, title && /*#__PURE__*/React__default.default.createElement(Title.Title, {
2163
+ className: "form__title",
2164
+ size: titleTextSize,
2165
+ textColor: titleTextColor,
2166
+ textWeight: titleTextWeight
2167
+ }, title), description && /*#__PURE__*/React__default.default.createElement(Text.Text, {
2168
+ className: "form__description",
2169
+ size: descriptionSize,
2170
+ textColor: descriptionTextColor,
2171
+ textWeight: descriptionTextWeight
2172
+ }, description), submitError && !modifiedSinceLastSubmit && /*#__PURE__*/React__default.default.createElement("div", {
2173
+ className: clsx__default.default('notification', 'form-notification', notificationType ? `form-notification_type_${notificationType}` : 'form-notification_type_global')
2174
+ }, /*#__PURE__*/React__default.default.createElement(Notification.NotificationItem, {
2175
+ className: "form-notification__item",
2176
+ titleTextSize: "h6",
2177
+ notificationClose: notificationClose,
2178
+ title: form.getState().submitError,
2179
+ set: "form",
2180
+ status: "error"
2181
+ })), onChangeFormValues && /*#__PURE__*/React__default.default.createElement(reactFinalForm.FormSpy, {
2182
+ subscription: {
2183
+ values: true
2184
+ },
2185
+ onChange: onChangeFormValues
2186
+ }), Boolean(Object.keys(config).length) && /*#__PURE__*/React__default.default.createElement(Group$1.Group, {
2187
+ direction: "vertical",
2188
+ gap: fieldsGap || groupGap,
2189
+ className: "form__wrapper"
2190
+ }, Object.keys(config).map(key => generateField(config[key], {
2191
+ key
2192
+ }, additionalProps[config[key].name])), isLoading && (loader || /*#__PURE__*/React__default.default.createElement(Loader.Loader, {
2193
+ className: "form__loader",
2194
+ set: loaderSet,
2195
+ fill: loaderFill,
2196
+ itemFill: loaderItemFill,
2197
+ text: loaderText
2198
+ }))), (primaryButtonLabel || primaryButton || secondaryButtonLabel || secondaryButton || tertiaryButton || tertiaryButtonLabel) && /*#__PURE__*/React__default.default.createElement(Group$1.Group, {
2199
+ fill: buttonFill,
2200
+ justifyContent: buttonJustifyContent,
2201
+ direction: buttonDirection,
2202
+ padding: buttonPadding,
2203
+ gap: buttonGap,
2204
+ className: "form__button",
2205
+ dataTour: dataTourButtons
2206
+ }, primaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2207
+ width: "fill",
2208
+ className: "form__button-item",
2209
+ fill: primaryButtonFill,
2210
+ fillHover: primaryButtonFillHover,
2211
+ size: primaryButtonSize,
2212
+ labelTextColor: primaryButtonLabelTextColor,
2213
+ labelSize: primaryButtonLabelSize,
2214
+ labelTextWeight: primaryButtonLabelTextWeight,
2215
+ label: primaryButtonLabel,
2216
+ dataTour: dataTourPrimaryButton
2217
+ }) : primaryButton, secondaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2218
+ width: "fill",
2219
+ className: "form__button-item",
2220
+ fill: secondaryButtonFill,
2221
+ fillHover: secondaryButtonFillHover,
2222
+ size: secondaryButtonSize,
2223
+ labelTextColor: secondaryButtonLabelTextColor,
2224
+ labelSize: secondaryButtonLabelSize,
2225
+ labelTextWeight: secondaryButtonLabelTextWeight,
2226
+ label: secondaryButtonLabel,
2227
+ onClick: onClickSecondaryButton,
2228
+ dataTour: dataTourSecondaryButton
2229
+ }) : secondaryButton, tertiaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2230
+ width: "fill",
2231
+ className: "form__button-item",
2232
+ fill: tertiaryButtonFill,
2233
+ fillHover: tertiaryButtonFillHover,
2234
+ size: tertiaryButtonSize,
2235
+ labelTextColor: tertiaryButtonLabelTextColor,
2236
+ labelSize: tertiaryButtonLabelSize,
2237
+ labelTextWeight: tertiaryButtonLabelTextWeight,
2238
+ label: tertiaryButtonLabel,
2239
+ onClick: onClickTertiaryButton,
2240
+ dataTour: dataTourTertiaryButton
2241
+ }) : tertiaryButton), after);
2242
+ },
2243
+ subscription: {
2244
+ submitting: true,
2245
+ pristine: true,
2246
+ modifiedSinceLastSubmit: true,
2247
+ submitError: true
2248
+ },
2249
+ validate: validate,
2250
+ onSubmit: onSubmit
2251
+ });
2252
+ });
2253
+ FinalForm.propTypes = {
2254
+ additionalProps: PropTypes__default.default.object,
2255
+ after: PropTypes__default.default.any,
2256
+ before: PropTypes__default.default.any,
2257
+ buttonGap: PropTypes__default.default.string,
2258
+ className: PropTypes__default.default.string,
2259
+ config: PropTypes__default.default.object,
2260
+ description: PropTypes__default.default.string,
2261
+ descriptionSize: PropTypes__default.default.string,
2262
+ descriptionTextColor: PropTypes__default.default.string,
2263
+ descriptionTextWeight: PropTypes__default.default.string,
2264
+ disableFieldsAutoComplete: PropTypes__default.default.string,
2265
+ fieldsGap: PropTypes__default.default.string,
2266
+ formName: PropTypes__default.default.string,
2267
+ initialValues: PropTypes__default.default.any,
2268
+ initialValuesEqual: PropTypes__default.default.any,
2269
+ language: PropTypes__default.default.string,
2270
+ isLoading: PropTypes__default.default.bool,
2271
+ loaderText: PropTypes__default.default.string,
2272
+ mutators: PropTypes__default.default.any,
2273
+ onChangeFormValues: PropTypes__default.default.func,
2274
+ onClickSecondaryButton: PropTypes__default.default.func,
2275
+ onSubmit: PropTypes__default.default.func,
2276
+ primaryButton: PropTypes__default.default.string,
2277
+ primaryButtonFill: PropTypes__default.default.string,
2278
+ primaryButtonLabel: PropTypes__default.default.string,
2279
+ secondaryButton: PropTypes__default.default.string,
2280
+ secondaryButtonFill: PropTypes__default.default.string,
2281
+ secondaryButtonLabel: PropTypes__default.default.string,
2282
+ set: PropTypes__default.default.string,
2283
+ title: PropTypes__default.default.string,
2284
+ titleSize: PropTypes__default.default.string,
2285
+ titleTextColor: PropTypes__default.default.string,
2286
+ titleTextWeight: PropTypes__default.default.string,
2287
+ validationSchema: PropTypes__default.default.object
2288
+ };
2289
+ FinalForm.defaultProps = {
2290
+ additionalProps: {},
2291
+ isLoading: false,
2292
+ loaderSet: 'simple',
2293
+ loaderFill: 'surfacePrimary',
2294
+ loaderItemFill: 'surfaceItemAccent',
2295
+ language: 'en',
2296
+ titleSize: 'h1',
2297
+ buttonDirection: 'vertical',
2298
+ direction: 'vertical',
2299
+ disableFieldsAutoComplete: false
2300
+ };
2301
+
2302
+ Object.defineProperty(exports, 'Field', {
2303
+ enumerable: true,
2304
+ get: function () { return reactFinalForm.Field; }
2305
+ });
2306
+ Object.defineProperty(exports, 'useForm', {
2307
+ enumerable: true,
2308
+ get: function () { return reactFinalForm.useForm; }
2309
+ });
2310
+ Object.defineProperty(exports, 'useFormState', {
2311
+ enumerable: true,
2312
+ get: function () { return reactFinalForm.useFormState; }
2313
+ });
2314
+ exports.Checkbox = CheckboxField;
2315
+ exports.ChoiceField = ChoiceField;
2316
+ exports.CodeField = CodeField;
2317
+ exports.CustomField = CustomField;
2318
+ exports.DatePickerField = DatePickerField;
2319
+ exports.FieldWrapper = FieldWrapper;
2320
+ exports.FieldWrapperBase = FieldWrapperBase;
2321
+ exports.FileInput = FileInput;
2322
+ exports.FinalForm = FinalForm;
2323
+ exports.Group = Group;
2324
+ exports.InputField = InputField;
2325
+ exports.RadioGroup = RadioGroup;
2326
+ exports.SegmentedField = SegmentedField;
2327
+ exports.SelectField = SelectField;
2328
+ exports.Switch = SwitchField;
2329
+ exports.Textarea = TextareaField;
2330
+ exports.addRequiredFieldsParamToSchema = addRequiredFieldsParamToSchema;
2331
+ exports.emailValidation = emailValidation;
2332
+ exports.focusOnError = focusOnError;
2333
+ exports.focusOnErrorDecorator = focusOnErrorDecorator;
2334
+ exports.formTypes = formTypes;
2335
+ exports.generateField = generateField;
2336
+ exports.phoneValidation = phoneValidation;
2337
+ exports.sendFormDataToServer = sendFormDataToServer;
2338
+ exports.setErrorsMutator = setErrorsMutator;
2339
+ exports.useYupValidationSchema = useYupValidationSchema;