import{H as d,I as u,J as p,K as v,L as g}from"./setup-BuwH6Opq.js";import{o as D}from"./toast-U4gk7w4G.js";import{c as l}from"./cloneDeep-BYEjimVB.js";import{m as b}from"./auth-vue-plugin-akZjEFVJ.js";function y({initialData:h=null,formStatusTranslationPrefix:n="dashboard_webinar-form_save-state_",skipResetFields:f=[],validateAll:c=!1}={}){return{provide(){return{FormDataInjection:{vm:this,bus:this.bus,formData:this.formData,get formInputData(){return this.vm.formInputData},get autoSubmit(){return this.vm.autoSubmit}}}},emits:["form-busy","change"],data(){return{formData:{},submitInProgress:!1,formAvatarData:null,formAvatarUrl:null,formAvatars:[],formError:null,autoClearForm:!0,allowChangesWhileBusy:!1,enableWithoutChangeData:!1,autoSubmit:!1,submitQueued:!1,submitDebounced:!1,formChangeNotified:!1}},computed:{formInitialData(){return h?this[h]:{}},formBusy(){var t;return this.submitInProgress||((t=this.v$)==null?void 0:t.$pending)},formAvatarModel:{get(){return this.formAvatarData&&this.formAvatarData.preview||!this.formInputData.remove_avatar&&this.formInitialData&&this.formInitialData.avatar&&this.formInitialData.avatar.url||null},set(t){(!this.submitInProgress||this.finalAllowChangesWhileBusy)&&(this.formAvatarData=t,delete this.formData.remove_avatar,this.formAvatarUrl=null,this.notifyChange())}},formActualData(){return b({},this.formInitialData,this.formData)},formHasChanges(){return this.formChangeNotified||!!this.formAvatarData},finalEnableWithoutChanges(){return this.enableWithoutChange||this.autoSubmit},finalAutoClearForm(){return this.autoClearForm&&!this.autoSubmit},finalAllowChangesWhileBusy(){return this.allowChangesWhileBusy||this.autoSubmit},formInputData(){return this.formData},formRawValid(){var t,a,e;return c?!((t=this.v$)!=null&&t.$invalid):!((e=(a=this.v$)==null?void 0:a.formInputData)!=null&&e.$invalid)},formValid(){return(this.formHasChanges||this.finalEnableWithoutChanges)&&this.formRawValid},isFormAvatarDefined(){return this.formAvatarUrl||this.formAvatarModel},enableWithoutChange(){return this.enableWithoutChangeData}},watch:{submitInProgress(t){this.$emit("form-busy",t)},formAvatarUrl(t){this.notifyChange()},formInitialData:{handler(t){!this.submitInProgress&&!this.submitQueued&&!this.submitDebounced&&t&&!u(this.formData,t)&&this.dontNotifyChanges(()=>{const a={};if(!this.initialReset)for(const e of f)a[e]=v(this.formData,e);if(Object.assign(this.formData,l(t)),!this.initialReset)for(const e of f)g(this.formData,e,a[e]);this.initialReset=!1,this.resetFormData()})},deep:!0,immediate:!0}},beforeCreate(){this.bus=p(),this.$_notifyChanges=!0,this.canNotifyChange=Promise.resolve(),this.initialReset=!0},created(){this.$watch("formInputData",()=>{this.notifyChange(!1)},{deep:!0,flush:"sync"}),this.$watch("formInputData",()=>{this.notifyChange()},{deep:!0,flush:"pre"})},beforeMount(){this.$options.beforeFormInit&&this.$options.beforeFormInit.call(this)},methods:{async submitFormData({operation:t,success:a}){var m;if(this.submitInProgress)return;const e=this.$options.beforeSubmit;if(e&&!await e.call(this))return;this.submitInProgress=!0,(m=this.$_toast)==null||m.close();const r=this.prepareData(this.formData);if(this.formAvatarData&&(r.avatar=this.formAvatarData.file),this.autoSubmit&&!Object.getOwnPropertyNames(r).length){console.warn("⚠️ Auto-submit form: no data"),this.submitInProgress=!1;return}let i=null,o;try{if(this.$store){const s=this.$store.hasModule&&this.$store.hasModule(["event-type"])?"common/ui":"ui";this.$store.dispatch(`${s}/setformStatusTranslationPrefix`,n),this.$store.dispatch(`${s}/setFormStatus`,"loading")}o=await t(r)}catch(s){i=s}if(this.submitInProgress=!1,o&&o.status&&typeof o.status=="number"&&o.status!==200&&(i=new Error("Response not ok"),i.data=o.data),i){if(this.formError=i,this.$store){const s=this.$store.hasModule&&this.$store.hasModule(["event-type"])?"common/ui":"ui";this.$store.getters[`${s}/formStatus`]!==void 0&&(this.$store.dispatch(`${s}/setformStatusTranslationPrefix`,n),this.$store.dispatch(`${s}/setFormStatus`,"error"))}throw i}else if(a&&(this.$_toast=D({type:"success",message:a.message,icon:a.icon,time:a.time||!0})),this.finalAutoClearForm&&await this.clearAfterSubmit(),this.$store){const s=this.$store.hasModule&&this.$store.hasModule(["event-type"])?"common/ui":"ui";this.$store.getters[`${s}/formStatus`]!==void 0&&(this.$store.dispatch(`${s}/setformStatusTranslationPrefix`,n),this.$store.dispatch(`${s}/setFormStatus`,"saved"))}return o},prepareData(t){var e;const a={};for(const r in t){const i=t[r];if(d(i)&&i.file instanceof File&&i.preview){a[r]=i.file;continue}u(i,(e=this.formInitialData)==null?void 0:e[r])||(a[r]=i)}return a},async clearAfterSubmit(){await this.clearFormData();const t=this.$options.afterSubmit;t&&t.call(this)},async clearFormData(){await this.dontNotifyChanges(()=>{Object.assign(this.formData,l(this.formInitialData??{})),this.formAvatarData=null,this.resetFormData()})},resetFormData(){this.formValidationReset(),this.formChangeNotified=!1},deleteFormAvatar(){this.formAvatarModel&&(this.formAvatarData?this.formAvatarData=null:this.formInitialData.avatar.url&&(this.formInputData.remove_avatar=!0)),this.formAvatarUrl=null},deleteFormImage(t){const a=this.formInputData[t];a&&(a.file?delete this.formInputData[t]:a.url&&(this.formInputData[t]=void 0,this.formInputData[`remove_${t}`]=!0))},cancelDeleteFormImage(t){delete this.formInputData[`remove_${t}`]},getImagePreviewUrl(t){const a=this.formInputData[t];if(a)return a.preview||a.url},formValidationTouch(){var t,a;(a=(t=this.v$)==null?void 0:t.$touch)==null||a.call(t)},formValidationReset(){var t,a;(a=(t=this.v$)==null?void 0:t.$reset)==null||a.call(t)},getAvatarOption(t){return this.formAvatars.find(a=>a.id===t)},setAvatarOption(t,a){const e=this.getAvatarOption(t);e?e.url=a:this.formAvatars.push({id:t,url:a})},removeAvatarOption(t){const a=this.formAvatars.findIndex(e=>e.id===t);a!==-1&&this.formAvatars.splice(a,1)},selectAvatarOption(t){this.deleteFormAvatar();const a=this.getAvatarOption(t);a&&(this.formAvatarUrl=a.url)},async dontNotifyChanges(t){this.canNotifyChange=new Promise(async a=>{this.$_notifyChanges=!1;try{await t.call(this),await this.$nextTick()}catch(e){console.error(e)}this.$_notifyChanges=!0,a()})},notifyChange(t=!0){this.$_notifyChanges&&(this.formChangeNotified=!0,t&&(this.$emit("change"),this.$nextTick(()=>{this.bus.emit("change")})))},getRemoveKey(t){if(typeof t!="string")return;const a=t.lastIndexOf(".");return a===-1?`remove_${t}`:`${t.substr(0,a+1)}remove_${t.substr(a+1)}`}}}}export{y as F};