fix: prefill values in dialog based on label

This commit is contained in:
sokumon 2025-10-28 08:25:48 +05:30
parent b05c93b504
commit 7c4f646d0b
2 changed files with 157 additions and 33 deletions

View file

@ -26,16 +26,7 @@ frappe.ui.Sidebar = class Sidebar {
this.choose_app_name();
this.find_nested_items();
}
async fetch_sidebar() {
const me = this;
if (me.fields_for_dialog.length > 0) return;
await frappe.model.with_doctype("Workspace Sidebar Item", () => {
// get all date and datetime fields
me.fields_for_dialog = frappe.get_meta("Workspace Sidebar Item").fields;
let field = me.fields_for_dialog.find((f) => f.label == "Child Item");
field.hidden = 1;
});
}
choose_app_name() {
if (frappe.boot.app_name_style == "Default") return;
frappe.boot.app_data.forEach((a) => {
@ -331,12 +322,12 @@ frappe.ui.Sidebar = class Sidebar {
toggle_editing_mode() {
const me = this;
this.fetch_sidebar();
if (this.edit_mode) {
this.wrapper.attr("data-mode", "edit");
this.new_sidebar_items = Array.from(me.workspace_sidebar_items);
$(this.active_item).removeClass("active-sidebar");
$(".collapse-sidebar-link").hide();
$(".collapse-sidebar-link").addClass("hidden");
this.wrapper.find(".edit-mode").removeClass("hidden");
this.add_new_item_button = this.wrapper.find("[data-name='add-sidebar-item']");
this.setup_sorting();
@ -347,7 +338,7 @@ frappe.ui.Sidebar = class Sidebar {
});
} else {
$(this.active_item).addClass("active-sidebar");
$(".collapse-sidebar-link").show();
$(".collapse-sidebar-link").removeClass("hidden");
this.wrapper.find(".edit-mode").addClass("hidden");
this.add_new_item_button = this.wrapper.find("[data-name='add-sidebar-item']");
}
@ -375,29 +366,153 @@ frappe.ui.Sidebar = class Sidebar {
});
}
make_dialog(opts) {
this.fields_for_dialog;
const fields = this.fields_for_dialog;
let title = "New Sidebar Item";
const me = this;
// Add Default values
this.dialog_opts = opts;
if (opts && opts.item) {
fields.forEach((f) => {
if (
opts.item[f.fieldname] !== undefined &&
f.fieldtype !== "Section Break" &&
f.fieldtype !== "Column Break"
) {
f.default = opts.item[f.fieldname];
}
});
title = "Edit Sidebar Item";
}
// Create the dialog
let d = new frappe.ui.Dialog({
title: title,
fields: fields,
fields: [
{
fieldname: "label",
fieldtype: "Data",
in_list_view: 1,
label: "Label",
onchange: function (opts) {
let label = this.get_value();
switch (label) {
case "Home":
d.set_value("icon", "home");
d.set_value("link_type", "Workspace");
d.set_value("link_to", me.workspace_title);
break;
case "Reports":
d.set_value("type", "Section Break");
d.set_value("link_to", null);
break;
case "Dashboard":
d.set_value("link_type", "Dashboard");
d.set_value("link_to", me.workspace_title);
d.set_value("icon", "layout-dashboard");
break;
case "Learn":
d.set_value("icon", "graduation-cap");
d.set_value("link_type", "URL");
break;
case "Settings":
d.set_value("icon", "settings");
break;
}
if (d.get_value("type") == "Link" && d.get_value("link_type") !== "URL") {
d.set_value("link_to", label);
}
if (me.dialog_opts && me.dialog_opts.parent_item.label == "Reports") {
d.set_value("icon", "table");
d.set_value("link_type", "Report");
}
},
},
{
default: "Link",
fieldname: "type",
fieldtype: "Select",
in_list_view: 1,
label: "Type",
options: "Link\nSection Break\nSpacer",
},
{
default: "DocType",
depends_on: "eval: doc.type == 'Link' || doc.indent == 1",
fieldname: "link_type",
fieldtype: "Select",
in_list_view: 1,
label: "Link Type",
options: "DocType\nPage\nReport\nWorkspace\nDashboard\nURL",
},
{
depends_on:
"eval: doc.link_type != \"URL\" && doc.type == 'Link' || doc.indent == 1",
fieldname: "link_to",
fieldtype: "Dynamic Link",
in_list_view: 1,
label: "Link To",
options: "link_type",
},
{
depends_on: 'eval: doc.link_type == "URL"',
fieldname: "url",
fieldtype: "Data",
label: "URL",
},
{
depends_on: 'eval: doc.type == "Link"',
fieldname: "icon",
fieldtype: "Icon",
in_list_view: 1,
label: "Icon",
},
{
default: "0",
depends_on: 'eval: doc.type == "Section Break"',
fieldname: "indent",
fieldtype: "Check",
label: "Indent",
},
{
default: "1",
depends_on: 'eval: doc.type == "Section Break"',
fieldname: "collapsible",
fieldtype: "Check",
label: "Collapsible",
},
{
fieldname: "details_section",
fieldtype: "Section Break",
label: "Details",
},
{
fieldname: "column_break_krzu",
fieldtype: "Column Break",
},
{
depends_on: 'eval: doc.type == "Section Break"',
fieldname: "display_section",
fieldtype: "Section Break",
label: "Display",
},
{
depends_on: 'eval: doc.type == "Section Break"',
fieldname: "collapsible_column",
fieldtype: "Column Break",
label: "Collapsible",
},
{
default: "0",
depends_on: 'eval: doc.type == "Section Break"',
fieldname: "keep_closed",
fieldtype: "Check",
label: "Keep Closed",
},
{
fieldname: "column_break_jexf",
fieldtype: "Column Break",
},
{
fieldname: "display_depends_on",
fieldtype: "Code",
label: "Display Depends On (JS)",
options: "JS",
width: "30",
},
],
primary_action_label: "Save",
size: "small",
primary_action(values) {
@ -423,7 +538,18 @@ frappe.ui.Sidebar = class Sidebar {
d.hide();
},
});
if (opts && opts.item) {
d.fields.forEach((f) => {
if (
opts.item[f.fieldname] !== undefined &&
f.fieldtype !== "Section Break" &&
f.fieldtype !== "Column Break"
) {
f.default = opts.item[f.fieldname];
}
});
d.title = "Edit Sidebar Item";
}
return d;
}
@ -448,6 +574,7 @@ frappe.ui.Sidebar = class Sidebar {
frappe.boot.workspace_sidebar_item[me.workspace_title.toLowerCase()] = [
...me.new_sidebar_items,
];
frappe.ui.toolbar.clear_cache();
me.edit_mode = false;
me.toggle_editing_mode();
me.make_sidebar(me);

View file

@ -262,9 +262,6 @@
}
}
.body-sidebar-container[data-mode="edit"] {
.collapse-sidebar-link {
display: none;
}
.standard-sidebar-item:hover {
& .sidebar-item-edit-controls {
visibility: visible;