From b6786dfeacd9844d3f8de357627e8bad502f7d97 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 17 Oct 2023 16:05:38 +0530 Subject: [PATCH 1/5] fix: precision select option show [object object] as first value --- frappe/public/js/frappe/form/controls/select.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/select.js b/frappe/public/js/frappe/form/controls/select.js index de96cd902c..53e7f35125 100644 --- a/frappe/public/js/frappe/form/controls/select.js +++ b/frappe/public/js/frappe/form/controls/select.js @@ -161,7 +161,7 @@ function parse_option(v) { is_disabled = Boolean(v.disabled); is_selected = Boolean(v.selected); - if (is_value_null && is_label_null) { + if (is_value_null && is_label_null && typeof v === "string") { value = v; label = __(v); } else { From 798e3781bf392938fda5039046ae604a00d25a0c Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 17 Oct 2023 16:06:25 +0530 Subject: [PATCH 2/5] fix: fieldname is editable in customize form it should be read_only --- .../public/js/form_builder/components/controls/DataControl.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/form_builder/components/controls/DataControl.vue b/frappe/public/js/form_builder/components/controls/DataControl.vue index e0d913b0f6..f0fb2d244a 100644 --- a/frappe/public/js/form_builder/components/controls/DataControl.vue +++ b/frappe/public/js/form_builder/components/controls/DataControl.vue @@ -48,7 +48,7 @@ if (props.df.fieldtype === "Icon") { class="form-control" type="text" :value="value" - :disabled="read_only" + :disabled="read_only || df.read_only" @input="event => $emit('update:modelValue', event.target.value)" /> Date: Tue, 17 Oct 2023 16:50:14 +0530 Subject: [PATCH 3/5] fix: enclose FetchFormControl in a div --- .../components/controls/FetchFromControl.vue | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/frappe/public/js/form_builder/components/controls/FetchFromControl.vue b/frappe/public/js/form_builder/components/controls/FetchFromControl.vue index 8efac8e8b0..1368c7e593 100644 --- a/frappe/public/js/form_builder/components/controls/FetchFromControl.vue +++ b/frappe/public/js/form_builder/components/controls/FetchFromControl.vue @@ -77,13 +77,20 @@ watch([() => doctype.value, () => fieldname.value], ([doctype_value, fieldname_v From ea023888a3180aeca3996c0436db39c411388d03 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 17 Oct 2023 17:51:45 +0530 Subject: [PATCH 4/5] fix: some field properties shown in multiple fields on select of same type of fields --- .../components/FieldProperties.vue | 7 ++- .../components/controls/CodeControl.vue | 54 ++++++++++--------- .../controls/GeolocationControl.vue | 25 +++++---- .../components/controls/LinkControl.vue | 52 ++++++++++-------- .../components/controls/RatingControl.vue | 30 ++++++----- .../components/controls/TextEditorControl.vue | 25 +++++---- 6 files changed, 107 insertions(+), 86 deletions(-) diff --git a/frappe/public/js/form_builder/components/FieldProperties.vue b/frappe/public/js/form_builder/components/FieldProperties.vue index 9cb5c8707b..12a8ce79ef 100644 --- a/frappe/public/js/form_builder/components/FieldProperties.vue +++ b/frappe/public/js/form_builder/components/FieldProperties.vue @@ -10,11 +10,14 @@ let search_text = ref(""); let args = ref({}); let docfield_df = computed(() => { - let fields = store.get_docfields.filter(df => { + let fields = store.get_docfields.filter((df) => { if (in_list(frappe.model.layout_fields, df.fieldtype) || df.hidden) { return false; } - if (df.depends_on && !evaluate_depends_on_value(df.depends_on, store.form.selected_field)) { + if ( + df.depends_on && + !evaluate_depends_on_value(df.depends_on, store.form.selected_field) + ) { return false; } diff --git a/frappe/public/js/form_builder/components/controls/CodeControl.vue b/frappe/public/js/form_builder/components/controls/CodeControl.vue index b0a45a442f..77bbaa3b7e 100644 --- a/frappe/public/js/form_builder/components/controls/CodeControl.vue +++ b/frappe/public/js/form_builder/components/controls/CodeControl.vue @@ -7,43 +7,47 @@ let emit = defineEmits(["update:modelValue"]); let slots = useSlots(); let code = ref(null); -let code_control = ref(null); let update_control = ref(true); +let code_control = computed(() => { + if (!code.value) return; + code.value.innerHTML = ""; + + return frappe.ui.form.make_control({ + parent: code.value, + df: { + ...props.df, + fieldtype: "Code", + hidden: 0, + read_only: props.read_only, + change: () => { + if (update_control.value) { + content.value = code_control.value.get_value(); + } + update_control.value = true; + }, + }, + value: content.value, + disabled: Boolean(slots.label) || props.read_only, + render_input: true, + only_input: Boolean(slots.label), + }); +}); + let content = computed({ get: () => props.modelValue, - set: (value) => emit('update:modelValue', value) + set: (value) => emit("update:modelValue", value), }); onMounted(() => { - if (code.value) { - code_control.value = frappe.ui.form.make_control({ - parent: code.value, - df: { - ...props.df, - fieldtype: "Code", - hidden: 0, - read_only: props.read_only, - change: () => { - if (update_control.value) { - content.value = code_control.value.get_value(); - } - update_control.value = true; - } - }, - value: content.value, - disabled: Boolean(slots.label) || props.read_only, - render_input: true, - only_input: Boolean(slots.label), - }); - } + if (code.value) code_control.value; }); watch( () => content.value, (value) => { update_control.value = false; - code_control.value.set_value(value); + code_control.value?.set_value(value); } ); @@ -53,7 +57,7 @@ watch( if (code_control.value) { code_control.value.ace_editor_target.css("max-height", value); } - }, + } ); diff --git a/frappe/public/js/form_builder/components/controls/GeolocationControl.vue b/frappe/public/js/form_builder/components/controls/GeolocationControl.vue index 8acc005fad..032234bdba 100644 --- a/frappe/public/js/form_builder/components/controls/GeolocationControl.vue +++ b/frappe/public/js/form_builder/components/controls/GeolocationControl.vue @@ -1,21 +1,24 @@ diff --git a/frappe/public/js/form_builder/components/controls/LinkControl.vue b/frappe/public/js/form_builder/components/controls/LinkControl.vue index 09ed47dc5a..7b791cf979 100644 --- a/frappe/public/js/form_builder/components/controls/LinkControl.vue +++ b/frappe/public/js/form_builder/components/controls/LinkControl.vue @@ -7,12 +7,34 @@ let emit = defineEmits(["update:modelValue"]); let slots = useSlots(); let link = ref(null); -let link_control = ref(null); let update_control = ref(true); +let link_control = computed(() => { + if (!link.value) return; + link.value.innerHTML = ""; + + return frappe.ui.form.make_control({ + parent: link.value, + df: { + ...props.df, + hidden: 0, + read_only: Boolean(slots.label) || props.read_only, + change: () => { + if (update_control.value) { + content.value = link_control.value.get_value(); + } + update_control.value = true; + }, + }, + value: content.value, + render_input: true, + only_input: Boolean(slots.label), + }); +}); + let content = computed({ get: () => props.modelValue, - set: value => emit("update:modelValue", value) + set: (value) => emit("update:modelValue", value), }); onMounted(() => { @@ -27,36 +49,20 @@ onMounted(() => { } } else { // reset filters - if (props.df.filters && 'istable' in props.df.filters) { + if (props.df.filters && "istable" in props.df.filters) { delete props.df.filters.istable; } } - link_control.value = frappe.ui.form.make_control({ - parent: link.value, - df: { - ...props.df, - hidden: 0, - read_only: Boolean(slots.label) || props.read_only, - change: () => { - if (update_control.value) { - content.value = link_control.value.get_value(); - } - update_control.value = true; - } - }, - value: content.value, - render_input: true, - only_input: Boolean(slots.label) - }); + link_control.value; } }); watch( () => content.value, - value => { + (value) => { update_control.value = false; - link_control.value.set_value(value); + link_control.value?.set_value(value); } ); @@ -81,4 +87,4 @@ watch(
- \ No newline at end of file + diff --git a/frappe/public/js/form_builder/components/controls/RatingControl.vue b/frappe/public/js/form_builder/components/controls/RatingControl.vue index 4356dc0b2d..fc9fd8be8f 100644 --- a/frappe/public/js/form_builder/components/controls/RatingControl.vue +++ b/frappe/public/js/form_builder/components/controls/RatingControl.vue @@ -1,21 +1,24 @@ @@ -44,5 +47,4 @@ watch( :deep(.rating) { --star-fill: var(--yellow-300) !important; } - diff --git a/frappe/public/js/form_builder/components/controls/TextEditorControl.vue b/frappe/public/js/form_builder/components/controls/TextEditorControl.vue index 6a3aa21046..2e302b3a8b 100644 --- a/frappe/public/js/form_builder/components/controls/TextEditorControl.vue +++ b/frappe/public/js/form_builder/components/controls/TextEditorControl.vue @@ -1,21 +1,24 @@ From 0ce919f1c0c72f607457e7b1bed6554bc2948325 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 17 Oct 2023 19:55:21 +0530 Subject: [PATCH 5/5] test: fixed failing form builder test --- cypress/integration/form_builder.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cypress/integration/form_builder.js b/cypress/integration/form_builder.js index 43cec97a39..53c45cd379 100644 --- a/cypress/integration/form_builder.js +++ b/cypress/integration/form_builder.js @@ -77,7 +77,8 @@ context("Form Builder", () => { .as("input"); cy.get("@input").clear({ force: true }).type("Web Form Field", { delay: 200 }); cy.wait("@search_link"); - cy.get("@input").type("{enter}").blur(); + + cy.get(first_field).click({ force: true }); cy.get(first_field) .find(".table-controls .table-column")