From 91092ffd4b40b7558b8b4c7c90ed01bf7849a7d4 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 30 Nov 2022 12:51:51 +0530 Subject: [PATCH] feat: make options field as link field for Table & Link type fields --- .../components/FieldProperties.vue | 14 ++++ .../components/controls/LinkControl.vue | 76 +++++++++++++++++++ .../components/controls/TableControl.vue | 1 + frappe/public/js/form_builder/globals.js | 3 +- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 frappe/public/js/form_builder/components/controls/LinkControl.vue diff --git a/frappe/public/js/form_builder/components/FieldProperties.vue b/frappe/public/js/form_builder/components/FieldProperties.vue index 4e7bd677dc..b75735614d 100644 --- a/frappe/public/js/form_builder/components/FieldProperties.vue +++ b/frappe/public/js/form_builder/components/FieldProperties.vue @@ -17,6 +17,20 @@ let docfield_df = computed(() => { return false; } + if (df.fieldname === "options") { + df.fieldtype = "Small Text"; + df.options = ""; + + if (in_list(["Table", "Link"], store.selected_field.fieldtype)) { + df.fieldtype = "Link"; + df.options = "DocType"; + + if (store.selected_field.fieldtype === "Table") { + df.is_table_field = 1; + } + } + } + if (search_text.value) { if ( df.label.toLowerCase().includes(search_text.value.toLowerCase()) || diff --git a/frappe/public/js/form_builder/components/controls/LinkControl.vue b/frappe/public/js/form_builder/components/controls/LinkControl.vue new file mode 100644 index 0000000000..eb0fb87f66 --- /dev/null +++ b/frappe/public/js/form_builder/components/controls/LinkControl.vue @@ -0,0 +1,76 @@ + + + + \ No newline at end of file diff --git a/frappe/public/js/form_builder/components/controls/TableControl.vue b/frappe/public/js/form_builder/components/controls/TableControl.vue index 798e486f44..425997e7ea 100644 --- a/frappe/public/js/form_builder/components/controls/TableControl.vue +++ b/frappe/public/js/form_builder/components/controls/TableControl.vue @@ -6,6 +6,7 @@ let props = defineProps(["df"]); let table_columns = computedAsync(async () => { let doctype = props.df.options; + if (!doctype) return []; await frappe.model.with_doctype(doctype); let child_doctype = frappe.get_meta(doctype); return get_table_columns(props.df, child_doctype); diff --git a/frappe/public/js/form_builder/globals.js b/frappe/public/js/form_builder/globals.js index 5c69d65866..591e75d71e 100644 --- a/frappe/public/js/form_builder/globals.js +++ b/frappe/public/js/form_builder/globals.js @@ -5,6 +5,7 @@ import CodeControl from "./components/controls/CodeControl.vue"; import DataControl from "./components/controls/DataControl.vue"; import GeolocationControl from "./components/controls/GeolocationControl.vue"; import ImageControl from "./components/controls/ImageControl.vue"; +import LinkControl from "./components/controls/LinkControl.vue"; import RatingControl from "./components/controls/RatingControl.vue"; import SelectControl from "./components/controls/SelectControl.vue"; import SignatureControl from "./components/controls/SignatureControl.vue"; @@ -36,7 +37,7 @@ export function registerGlobalComponents(app) { .component("ImageControl", ImageControl) .component("IntControl", DataControl) .component("JSONControl", CodeControl) - .component("LinkControl", DataControl) + .component("LinkControl", LinkControl) .component("LongTextControl", TextControl) .component("MarkdownEditorControl", CodeControl) .component("PasswordControl", DataControl)