From 3ec47b09756d304792f87b6b148714ee93552e66 Mon Sep 17 00:00:00 2001 From: Corentin Flr <10946971+cogk@users.noreply.github.com> Date: Fri, 31 Mar 2023 16:39:38 +0200 Subject: [PATCH 1/3] feat(workspace): Allow user to choose a default workspace --- frappe/core/doctype/user/user.js | 10 ++++++++++ frappe/core/doctype/user/user.json | 16 +++++++++++++++- .../js/frappe/views/workspace/workspace.js | 7 ++++++- frappe/utils/user.py | 5 +++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js index dc40fb0336..df79223875 100644 --- a/frappe/core/doctype/user/user.js +++ b/frappe/core/doctype/user/user.js @@ -1,4 +1,14 @@ frappe.ui.form.on("User", { + setup: function (frm) { + frm.set_query("default_workspace", () => { + return { + filters: { + parent_page: ["is", "not set"], + for_user: ["in", [null, frappe.session.user]], + }, + }; + }); + }, before_load: function (frm) { let update_tz_options = function () { frm.fields_dict.time_zone.set_data(frappe.all_timezones); diff --git a/frappe/core/doctype/user/user.json b/frappe/core/doctype/user/user.json index 894216a3e0..0f93b340a0 100644 --- a/frappe/core/doctype/user/user.json +++ b/frappe/core/doctype/user/user.json @@ -23,6 +23,8 @@ "send_welcome_email", "unsubscribed", "user_image", + "workspaces_section", + "default_workspace", "roles_permissions_tab", "sb1", "role_profile_name", @@ -711,6 +713,18 @@ "label": "Role Profiles", "options": "User Role Profile", "permlevel": 1 + }, + { + "fieldname": "workspaces_section", + "fieldtype": "Section Break", + "label": "Workspaces" + }, + { + "description": "If left empty, the default workspace will be the last visited workspace", + "fieldname": "default_workspace", + "fieldtype": "Link", + "label": "Default Workspace", + "options": "Workspace" } ], "icon": "fa fa-user", @@ -773,7 +787,7 @@ "link_fieldname": "user" } ], - "modified": "2024-02-11 13:16:29.574666", + "modified": "2024-03-06 11:14:38.424148", "modified_by": "Administrator", "module": "Core", "name": "User", diff --git a/frappe/public/js/frappe/views/workspace/workspace.js b/frappe/public/js/frappe/views/workspace/workspace.js index 650ccb01ec..735f8097b5 100644 --- a/frappe/public/js/frappe/views/workspace/workspace.js +++ b/frappe/public/js/frappe/views/workspace/workspace.js @@ -351,7 +351,12 @@ frappe.views.Workspace = class Workspace { get_page_to_show() { let default_page; - if ( + if (frappe.boot.user.default_workspace) { + default_page = { + name: frappe.boot.user.default_workspace.name, + public: frappe.boot.user.default_workspace.public, + }; + } else if ( localStorage.current_page && this.all_pages.filter((page) => page.title == localStorage.current_page).length != 0 ) { diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 027c5dbaf5..8069f22497 100644 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -226,6 +226,7 @@ class UserPermissions: "send_me_a_copy", "user_type", "onboarding_status", + "default_workspace", ], as_dict=True, ) @@ -233,6 +234,10 @@ class UserPermissions: if not self.can_read: self.build_permissions() + if d.get("default_workspace"): + public = frappe.get_cached_value("Workspace", d.default_workspace, "public") + d.default_workspace = {"name": d.default_workspace, "public": public} + d.name = self.name d.onboarding_status = frappe.parse_json(d.onboarding_status) d.roles = self.get_roles() From e3d00e9117a4e39b9e4f170fd5d64010df3cbe9f Mon Sep 17 00:00:00 2001 From: Corentin Flr <10946971+cogk@users.noreply.github.com> Date: Tue, 19 Mar 2024 16:24:13 +0100 Subject: [PATCH 2/3] fix(workspace): Don't allow Welcome as default workspace Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> --- frappe/core/doctype/user/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js index df79223875..b37ebda9ee 100644 --- a/frappe/core/doctype/user/user.js +++ b/frappe/core/doctype/user/user.js @@ -3,8 +3,8 @@ frappe.ui.form.on("User", { frm.set_query("default_workspace", () => { return { filters: { - parent_page: ["is", "not set"], for_user: ["in", [null, frappe.session.user]], + title: ["!=", "Welcome Workspace"], }, }; }); From 61cac70b3e1f66d897cd4dc70c4baa2a04304b90 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 20 Mar 2024 17:16:33 +0530 Subject: [PATCH 3/3] chore: moved workspaces section inside settings tab --- frappe/core/doctype/user/user.json | 17 +++++++++-------- frappe/core/doctype/user/user.py | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/frappe/core/doctype/user/user.json b/frappe/core/doctype/user/user.json index 0f93b340a0..9bdfbf875f 100644 --- a/frappe/core/doctype/user/user.json +++ b/frappe/core/doctype/user/user.json @@ -23,8 +23,6 @@ "send_welcome_email", "unsubscribed", "user_image", - "workspaces_section", - "default_workspace", "roles_permissions_tab", "sb1", "role_profile_name", @@ -73,6 +71,8 @@ "send_me_a_copy", "allowed_in_mentions", "user_emails", + "workspace_section", + "default_workspace", "sb2", "defaults", "sb3", @@ -714,17 +714,18 @@ "options": "User Role Profile", "permlevel": 1 }, - { - "fieldname": "workspaces_section", - "fieldtype": "Section Break", - "label": "Workspaces" - }, { "description": "If left empty, the default workspace will be the last visited workspace", "fieldname": "default_workspace", "fieldtype": "Link", "label": "Default Workspace", "options": "Workspace" + }, + { + "collapsible": 1, + "fieldname": "workspace_section", + "fieldtype": "Section Break", + "label": "Workspace" } ], "icon": "fa fa-user", @@ -787,7 +788,7 @@ "link_fieldname": "user" } ], - "modified": "2024-03-06 11:14:38.424148", + "modified": "2024-03-20 17:15:19.200383", "modified_by": "Administrator", "module": "Core", "name": "User", diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 32e398a32a..3d38348121 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -63,6 +63,7 @@ class User(Document): birth_date: DF.Date | None block_modules: DF.Table[BlockModule] bypass_restrict_ip_check_if_2fa_enabled: DF.Check + default_workspace: DF.Link | None defaults: DF.Table[DefaultValue] desk_theme: DF.Literal["Light", "Dark", "Automatic"] document_follow_frequency: DF.Literal["Hourly", "Daily", "Weekly"]