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)