export default { props: ["formElement", "keyValue"], data() { return { options: { controls: [ // "play-large", // The large play button in the center //'restart', // Restart playback // "rewind", // Rewind by the seek time (default 10 seconds) "play", // Play/pause playback // "fast-forward", // Fast forward by the seek time (default 10 seconds) "progress", // The progress bar and scrubber for playback and buffering "current-time", // The current time of playback // "duration", // The full duration of the media "mute", // Toggle mute "volume", // Volume control // "captions", // Toggle captions "settings", // Settings menu // "pip", // Picture-in-picture (currently Safari only) // "airplay", // Airplay (currently Safari only) "download", // Show a download button with a link to either the current source or a custom URL you specify in your options // "fullscreen", // Toggle fullscreen ], speed: { selected: 1, options: [0.75, 1, 1.5, 2] }, }, hasError: false, localFormElement: {}, textValue: "", emit_disable: false, textValuePrev: "", textDate: [], objectValue: {}, // for select component {text, value} isUpdateitem: false, renderKey: 1, listOptions: [], }; }, // beforeMount() { // this.$root.$on("catch-form-builder-event", this.listenEventBus); // }, // beforeDestroy() { // this.$root.$off("catch-form-builder-event", this.listenEventBus); // }, mounted() { // this.textValue = this.value; // this.textItem = this.value this.disableEmitTemprory(2000); console.info("this.formElement", this.formElement); this.localFormElement = this.formElement; this.textValuePrev = this.localFormElement?.value; this.initTextValue(); this.textValuePrev = this.textValue; // this.date = this.textValue; // for DateCompnent }, watch: { formElement: { handler(newValue) { this.localFormElement = newValue; }, deep: true, nested: true, }, textValue(newVal) { // console.log(this.localFormElement.key, newVal) if (this.textValuePrev == newVal) { return; } let [emitValue, emitValueObject] = this.parseValueToEmit(newVal); // if (!this.emit_disable) // console.log(this.localFormElement.key, newVal, emitValue, this.localFormElement.value) if (this.localFormElement?.value != emitValue) this.$emit("take-value", emitValue); if (emitValueObject) this.parseAffectedToEventBus(emitValueObject); // for select only else this.parseAffectedToEventBus(emitValue); }, }, methods: { incrementRenderKey() { this.renderKey = this.renderKey + 1; this.$forceUpdate(); }, parseValueToEmit(newVal) { let emitValue = newVal; let emitValueObject = undefined; if (this.localFormElement?.type == "date") { // console.info(newVal); emitValue = newVal; try { if (this.localFormElement?.savetype == "timestamp") { let dtStr = newVal; // const dtStr = "2012/02/26"; const [y, m, d] = dtStr.split(/-|\//); const date = new Date(y, m - 1, d); // emitValue = date.toISOString(); emitValue = date.getTime()(); } // if( this.localFormElement?.subtype == 'time' ) // return "HH:mm" } catch { emitValue = newVal; } // console.info(emitValue); } // input , textarea if multi items else if (this.localFormElement?.isarray) { let delim = this.localFormElement?.delimiter ? this.localFormElement.delimiter : "،"; emitValue = []; newVal .split(delim) .filter((el) => el.trim()) .forEach((el) => { emitValue.push(el.trim()); }); } else if (this.localFormElement?.type == "select") { // if(this.localFormElement.key == 'city'){ // debugger // } emitValue = newVal; //برای ذدخیره در بک کدام مقدار را بفرستد if (this.localFormElement?.value_save) { emitValueObject = this.listOptions.find( (item) => item.value == newVal ); if (emitValueObject && this.localFormElement?.value_save == "title") { emitValue = emitValueObject.title ?? emitValueObject.value; } else if ( emitValueObject && this.localFormElement?.value_save == "object" ) { emitValue = { id: emitValueObject.value, title: emitValueObject.title, }; } } } else emitValue = newVal; return [emitValue, emitValueObject]; }, listenEventBus({ value, affectedTo }) { // console.log(affectedTo.key, this.localFormElement.key); if (affectedTo.key === this.localFormElement?.key) { try { // console.log(this.localFormElement.key, affectedTo, value); // console.log(this[affectedTo.action]) this[affectedTo.action](value); } catch (err) {} } }, parseAffectedToEventBus(newValue) { if (!this.localFormElement?.["affected-to"]) return; // console.log("parseAffectedToEvent", newValue); // console.log(newValue); let affectedTo = this.localFormElement?.["affected-to"]; // console.log(affectedTo); affectedTo.forEach((item_affectedTo) => { let value = newValue; if ( typeof newValue == "object" && item_affectedTo?.param && newValue[item_affectedTo?.param] ) value = newValue[item_affectedTo?.param]; if (item_affectedTo?.emit) { this.$emit("action-affected-item", { action: item_affectedTo.emit, key: item_affectedTo.key, value, }); // console.log("action-affected-item", { action:item_affectedTo.emit, key: item_affectedTo.key, value}) } else if (item_affectedTo?.action) { this.$root.$emit("catch-form-builder-event", { value: value, affectedTo: item_affectedTo, }); } }); }, disableEmitTemprory(timeout = 1000) { this.emit_disable = true; setTimeout(() => { this.emit_disable = false; }, timeout); }, clearErrors() { return true; }, getLabel() { let label = this.localFormElement?.label; if (this.localFormElement?.required == "1") label = "*" + label; return label; }, validate(ev) { const value = ev.target.value; if (this.localFormElement?.validate) { // چک کردن برای وجود الگو if (value) { let pattern = this.localFormElement?.validate; // اگر الگوی ورودی معتبر باشد، تنظیم می‌کنیم که مقدار مطابقت دارد یا خیر this.hasError = new RegExp(pattern).test(value); } else { // اگر مقدار ورودی خالی باشد، خطا بر اساس الزامی بودن فیلد تعیین می‌شود this.hasError = this.localFormElement?.required ? true : false; } } else { // اگر الگوی validate وجود نداشته باشد، کاری انجام نمی‌دهیم this.hasError = false; } // اعلان خطا به والد (component اصلی) this.$emit("take-value-validate", this.hasError); }, initTextValue(newValue = undefined) { // console.log('initTextValue', this.localFormElement.key, newValue) let value = ""; if (newValue) value = newValue; else if (this.localFormElement?.value) value = this.localFormElement?.value; else if (this.localFormElement?.value_defualt) value = this.localFormElement.value_defualt; // در همه حالت نباید این باشد اگر لازم شد باید پیش فرض تنظیم شود // ذخیره هم نمیشود ...!!! // if (!value && this.localFormElement.type == "select") { // value = this.listOptions.length > 0 ? this.listOptions[0].value : ""; // } // console.log(this.localFormElement.key, value) var mValue = value ?? ""; if (this.localFormElement?.type == "date") { // console.info("setTextValue", mValue); try { var date = ""; if (mValue != "") { if (this.localFormElement?.savetype == "timestamp") { let timeWithSeconds = mValue; if ( this.isUnixTimestamp(mValue) && mValue.toString().length == 10 ) { timeWithSeconds = mValue * 1000; } date = this.$moment(new Date(timeWithSeconds)).format( "YYYY-MM-DD HH:mm" ); } else if ( this.localFormElement?.savetype == "datetime" || this.localFormElement?.savetype == "date" ) { date = this.$moment(new Date(mValue)).format("YYYY-MM-DD HH:mm"); } else date = mValue; } this.textDate = date; mValue = date; } catch { this.textDate = mValue; } } else if (this.localFormElement?.isarray) { if (value && Array.isArray(value)) { let delim = this.localFormElement?.delimiter ? this.localFormElement?.delimiter : "، "; mValue = value.join(delim); } else mValue = ""; } else if (this.localFormElement?.type == "select") { if (this.localFormElement?.value_save == "title") { // console.log('value_defualt', this.localFormElement.value_defualt) let finded = this.listOptions.find((item) => { if (item.title == value) { return item; } }); if (finded) { mValue = finded.value; // console.log('finded', finded) } else { mValue = this.listOptions.length > 0 ? this.listOptions[0].value : ""; } } else if (this.localFormElement?.value_save == "object") { mValue = value.value; } else mValue = value ?? ""; } else { mValue = value ?? ""; } //نیازی به ارسال تغییر در واچ نیست if (this.localFormElement?.value == value) this.textValuePrev == value; this.textValue = mValue; // console.log(' this.textValue', this.localFormElement.key, this.textValue) }, isUnixTimestamp(value) { // Check if the value is a number if (typeof value !== "number" && !/^\d+$/.test(value)) { return false; } // Convert to number if it's a string value = parseInt(value); // Unix timestamps are non-negative integers return !isNaN(value) && value >= 0 && value % 1 === 0; }, sendTextValue() { this.$emit("keydown", { text: this.textValue, key: this.keyValue, isUpdate: this.isUpdateitem, }); }, ////ااز هیچا فراخوانی نمیشه لذا کامنت کردم //فقط برای select // takeSelectValue($event, type) { // this.objectValue = { // value: $event.target.value, // text: $event.target.selectedOptions[0].text, // }; // console.log('takeSelectValue',this.localFormElement.key , objectValue) // this.$emit("take-select-object", { // type: type, // objectValue: this.objectValue, // }); // }, }, };