From 72a28547eaac5a009e4d8f6ec16f9c99d2773085 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sat, 2 Jan 2021 14:04:32 +0530 Subject: [PATCH] feat(minor): Build Workspace, renamed frappe.views.Views => frappe.views.ListViewSelect, fixed recurring dependency issue on grids --- .gitignore | 4 +- cypress/integration/list_view_settings.js | 8 +- frappe/core/workspace/build/build.json | 211 ++++++++++++++++++ frappe/desk/doctype/workspace/workspace.js | 4 + frappe/desk/doctype/workspace/workspace.json | 5 +- frappe/public/build.json | 2 +- frappe/public/js/frappe/desk.js | 2 +- frappe/public/js/frappe/form/grid.js | 2 + frappe/public/js/frappe/form/layout.js | 2 + frappe/public/js/frappe/list/base_list.js | 5 +- frappe/public/js/frappe/list/list_settings.js | 2 +- frappe/public/js/frappe/list/list_view.js | 2 +- .../list/{views.js => list_view_select.js} | 3 +- frappe/public/js/frappe/model/create_new.js | 5 +- .../js/frappe/views/workspace/workspace.js | 2 +- 15 files changed, 242 insertions(+), 17 deletions(-) create mode 100644 frappe/core/workspace/build/build.json rename frappe/public/js/frappe/list/{views.js => list_view_select.js} (99%) diff --git a/.gitignore b/.gitignore index 900ae1c7b7..766288fe2e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ locale *.swp *.egg-info dist/ -build/ +# build/ frappe/docs/current .vscode node_modules @@ -28,7 +28,7 @@ __pycache__/ # Distribution / packaging .Python -build/ +# build/ develop-eggs/ dist/ downloads/ diff --git a/cypress/integration/list_view_settings.js b/cypress/integration/list_view_settings.js index 123d7e70f2..13d37985e4 100644 --- a/cypress/integration/list_view_settings.js +++ b/cypress/integration/list_view_settings.js @@ -14,8 +14,8 @@ context('List View Settings', () => { cy.wait(300); cy.get('.list-count').should('contain', "20 of"); cy.get('.menu-btn-group button').click(); - cy.get('.dropdown-menu li').filter(':visible').contains('Settings').click(); - cy.get('.modal-dialog').should('contain', 'Settings'); + cy.get('.dropdown-menu li').filter(':visible').contains('List Settings').click(); + cy.get('.modal-dialog').should('contain', 'List Settings'); cy.get('input[data-fieldname="disable_count"]').check({ force: true }); cy.get('input[data-fieldname="disable_sidebar_stats"]').check({ force: true }); @@ -27,8 +27,8 @@ context('List View Settings', () => { cy.get('.list-sidebar .list-tags').should('not.exist'); cy.get('.menu-btn-group button').click({ force: true }); - cy.get('.dropdown-menu li').filter(':visible').contains('Settings').click(); - cy.get('.modal-dialog').should('contain', 'Settings'); + cy.get('.dropdown-menu li').filter(':visible').contains('List Settings').click(); + cy.get('.modal-dialog').should('contain', 'List Settings'); cy.get('input[data-fieldname="disable_count"]').uncheck({ force: true }); cy.get('input[data-fieldname="disable_sidebar_stats"]').uncheck({ force: true }); cy.get('button').filter(':visible').contains('Save').click(); diff --git a/frappe/core/workspace/build/build.json b/frappe/core/workspace/build/build.json new file mode 100644 index 0000000000..c4bde55d7f --- /dev/null +++ b/frappe/core/workspace/build/build.json @@ -0,0 +1,211 @@ +{ + "cards_label": "Elements", + "category": "Modules", + "charts": [], + "creation": "2021-01-02 10:51:16.579957", + "developer_mode_only": 0, + "disable_user_customization": 0, + "docstatus": 0, + "doctype": "Workspace", + "extends_another_page": 0, + "hide_custom": 0, + "icon": "tool", + "idx": 0, + "is_standard": 1, + "label": "Build", + "links": [ + { + "hidden": 0, + "is_query_report": 0, + "label": "Modules", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Card Break" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Module Def", + "link_to": "Module Def", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Workspace", + "link_to": "Workspace", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Module Onboarding", + "link_to": "Module Onboarding", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Block Module", + "link_to": "Block Module", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Models", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Card Break" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "DocType", + "link_to": "DocType", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Workflow", + "link_to": "Workflow", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Views", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Card Break" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Report", + "link_to": "Report", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Print Format", + "link_to": "Print Format", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Workspace", + "link_to": "Workspace", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Dashboard", + "link_to": "Dashboard", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Scripting", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Card Break" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Server Script", + "link_to": "Server Script", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Custom Script", + "link_to": "Custom Script", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Scheduled Job Type", + "link_to": "Scheduled Job Type", + "link_type": "DocType", + "onboard": 0, + "only_for": "", + "type": "Link" + } + ], + "modified": "2021-01-02 14:03:15.029699", + "modified_by": "Administrator", + "module": "Core", + "name": "Build", + "owner": "Administrator", + "pin_to_bottom": 0, + "pin_to_top": 0, + "shortcuts": [ + { + "doc_view": "", + "label": "DocType", + "link_to": "DocType", + "type": "DocType" + }, + { + "doc_view": "", + "label": "Workspace", + "link_to": "Workspace", + "type": "DocType" + }, + { + "doc_view": "", + "label": "Report", + "link_to": "Report", + "type": "DocType" + } + ] +} \ No newline at end of file diff --git a/frappe/desk/doctype/workspace/workspace.js b/frappe/desk/doctype/workspace/workspace.js index bca1ee1738..813dc2de43 100644 --- a/frappe/desk/doctype/workspace/workspace.js +++ b/frappe/desk/doctype/workspace/workspace.js @@ -2,6 +2,10 @@ // For license information, please see license.txt frappe.ui.form.on('Workspace', { + setup: function(frm) { + frappe.meta.get_field('Desk Link', 'only_for').no_default = true; + }, + refresh: function(frm) { frm.enable_save(); frm.get_field("is_standard").toggle(frappe.boot.developer_mode); diff --git a/frappe/desk/doctype/workspace/workspace.json b/frappe/desk/doctype/workspace/workspace.json index e71e6f6bfb..14341c9b25 100644 --- a/frappe/desk/doctype/workspace/workspace.json +++ b/frappe/desk/doctype/workspace/workspace.json @@ -42,6 +42,7 @@ }, { "collapsible": 1, + "collapsible_depends_on": "charts", "fieldname": "section_break_2", "fieldtype": "Section Break", "label": "Dashboards" @@ -139,12 +140,14 @@ }, { "collapsible": 1, + "collapsible_depends_on": "shortcuts", "fieldname": "section_break_15", "fieldtype": "Section Break", "label": "Shortcuts" }, { "collapsible": 1, + "collapsible_depends_on": "links", "fieldname": "section_break_18", "fieldtype": "Section Break", "label": "Link Cards" @@ -206,7 +209,7 @@ } ], "links": [], - "modified": "2020-12-01 13:36:26.827062", + "modified": "2021-01-02 10:58:37.430775", "modified_by": "Administrator", "module": "Desk", "name": "Workspace", diff --git a/frappe/public/build.json b/frappe/public/build.json index b50ce4ce7e..6379613753 100755 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -250,7 +250,7 @@ "public/js/frappe/list/list_view.js", "public/js/frappe/list/list_factory.js", - "public/js/frappe/list/views.js", + "public/js/frappe/list/list_view_select.js", "public/js/frappe/list/list_sidebar.js", "public/js/frappe/list/list_sidebar.html", "public/js/frappe/list/list_sidebar_stat.html", diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 85b29a5652..9e124321e9 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -284,7 +284,7 @@ frappe.Application = Class.extend({ } if (!frappe.workspaces['home']) { // default workspace is settings for Frappe - frappe.workspaces['home'] = frappe.workspaces['settings']; + frappe.workspaces['home'] = frappe.workspaces['build']; } }, diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index c05868964e..04eba6d995 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -265,6 +265,8 @@ export default class Grid { } refresh(force) { + if (this.frm.setting_dependency) return; + this.data = this.get_data(); !this.wrapper && this.make(); diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index 1d0f1f8ffd..7bf9dd7e39 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -510,7 +510,9 @@ frappe.ui.form.Layout = Class.extend({ } if (form_obj) { if (this.doc && this.doc.parent) { + form_obj.setting_dependency = true; form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); + form_obj.setting_dependency = false; } else { form_obj.set_df_property(fieldname, property, value); } diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js index 96b06aac95..c2c9903355 100644 --- a/frappe/public/js/frappe/list/base_list.js +++ b/frappe/public/js/frappe/list/base_list.js @@ -183,8 +183,9 @@ frappe.views.BaseList = class BaseList { } if (frappe.boot.desk_settings.view_switcher) { - this.views_menu = this.page.add_custom_button_group(__(`{0} View`, [this.view_name]), icon_map[this.view_name] || 'list'); - this.views_list = new frappe.views.Views({ + this.views_menu = this.page.add_custom_button_group(__('{0} View', [this.view_name]), + icon_map[this.view_name] || 'list'); + this.views_list = new frappe.views.ListViewSelect({ doctype: this.doctype, parent: this.views_menu, page: this.page, diff --git a/frappe/public/js/frappe/list/list_settings.js b/frappe/public/js/frappe/list/list_settings.js index f2045c9c34..4877d6fbb7 100644 --- a/frappe/public/js/frappe/list/list_settings.js +++ b/frappe/public/js/frappe/list/list_settings.js @@ -1,7 +1,7 @@ export default class ListSettings { constructor({ listview, doctype, meta, settings }) { if (!doctype) { - frappe.throw(__('Doctype required')); + frappe.throw('DocType required'); } this.listview = listview; diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 8483bf2ee0..667a43eeb1 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1485,7 +1485,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { if (frappe.user.has_role("System Manager")) { items.push({ - label: __("Settings"), + label: __("List Settings"), action: () => this.show_list_settings(), standard: true, }); diff --git a/frappe/public/js/frappe/list/views.js b/frappe/public/js/frappe/list/list_view_select.js similarity index 99% rename from frappe/public/js/frappe/list/views.js rename to frappe/public/js/frappe/list/list_view_select.js index 060f43488a..f94897ebac 100644 --- a/frappe/public/js/frappe/list/views.js +++ b/frappe/public/js/frappe/list/list_view_select.js @@ -1,6 +1,7 @@ frappe.provide('frappe.views'); -frappe.views.Views = class Views { +frappe.views.ListViewSelect = class ListViewSelect + { constructor(opts) { $.extend(this, opts); this.set_current_view(); diff --git a/frappe/public/js/frappe/model/create_new.js b/frappe/public/js/frappe/model/create_new.js index 210a4ae5d3..2c0571f202 100644 --- a/frappe/public/js/frappe/model/create_new.js +++ b/frappe/public/js/frappe/model/create_new.js @@ -87,11 +87,12 @@ $.extend(frappe.model, { var doctype = doc.doctype; var docfields = frappe.meta.get_docfields(doctype); var updated = []; - for(var fid=0;fid