From 4da1f70eaf2ca0ccab4e0579955267f381353950 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 23 Sep 2024 15:19:09 +0530 Subject: [PATCH] fix(desktop): fixes to app switcher inside desk --- frappe/boot.py | 39 +- frappe/desk/desktop.py | 3 + frappe/public/icons/lucide.svg | 4593 ++++++++++++++++++++ frappe/public/icons/timeless/icons.svg | 12 +- frappe/public/js/frappe/ui/sidebar.js | 3 +- frappe/public/scss/desk/global.scss | 5 - frappe/public/scss/desk/sidebar.scss | 7 + frappe/public/scss/website/index.scss | 1 - frappe/public/scss/website/my_account.scss | 91 - frappe/public/scss/website/portal.scss | 73 + frappe/www/me.html | 89 +- frappe/www/third_party_apps.html | 109 +- frappe/www/update-password.html | 49 +- 13 files changed, 4798 insertions(+), 276 deletions(-) create mode 100644 frappe/public/icons/lucide.svg delete mode 100644 frappe/public/scss/website/my_account.scss diff --git a/frappe/boot.py b/frappe/boot.py index 9445a6d0fa..0910516220 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -165,29 +165,40 @@ def load_desktop_data(bootinfo): if has_permission and not frappe.get_attr(has_permission)(): continue + workspaces = [ + r[0] + for r in ( + frappe.qb.from_(Workspace) + .inner_join(Module) + .on(Workspace.module == Module.name) + .select(Workspace.name) + .where(Module.app_name == app_name) + .run() + ) + if r[0] in allowed_pages + ] + bootinfo.app_data.append( dict( app_name=app_info.get("name") or app_name, app_title=app_info.get("title") - or frappe.get_hooks("app_title", app_name=app_name) + or ( + frappe.get_hooks("app_title", app_name=app_name) + and frappe.get_hooks("app_title", app_name=app_name)[0] + or "" + ) or app_name, - app_route=app_info.get("route") or frappe.get_hooks("app_home", app_name=app_name), + app_route=( + frappe.get_hooks("app_home", app_name=app_name) + and frappe.get_hooks("app_home", app_name=app_name)[0] + ) + or (workspaces and "/app/" + frappe.utils.slug(workspaces[0])) + or "", app_logo_url=app_info.get("logo") or frappe.get_hooks("app_logo_url", app_name=app_name) or frappe.get_hooks("app_logo_url", app_name="frappe"), modules=[m.name for m in frappe.get_all("Module Def", dict(app_name=app_name))], - workspaces=[ - r[0] - for r in ( - frappe.qb.from_(Workspace) - .inner_join(Module) - .on(Workspace.module == Module.name) - .select(Workspace.name) - .where(Module.app_name == app_name) - .run() - ) - if r[0] in allowed_pages - ], + workspaces=workspaces, ) ) diff --git a/frappe/desk/desktop.py b/frappe/desk/desktop.py index 13865eadde..97d5726650 100644 --- a/frappe/desk/desktop.py +++ b/frappe/desk/desktop.py @@ -473,6 +473,9 @@ def get_workspace_sidebar_items(): if page["name"] in workspace_visibilty: page["visibility"] = workspace_visibilty[page["name"]] + if not page["app"] and page["module"]: + page["app"] = frappe.db.get_value("Module Def", page["module"], "app_name") + except frappe.PermissionError: pass if private_pages: diff --git a/frappe/public/icons/lucide.svg b/frappe/public/icons/lucide.svg new file mode 100644 index 0000000000..b68d084662 --- /dev/null +++ b/frappe/public/icons/lucide.svg @@ -0,0 +1,4593 @@ + + + diff --git a/frappe/public/icons/timeless/icons.svg b/frappe/public/icons/timeless/icons.svg index 53549e67a1..b1b4ecd5b1 100644 --- a/frappe/public/icons/timeless/icons.svg +++ b/frappe/public/icons/timeless/icons.svg @@ -6,9 +6,11 @@ Instructions: 3. Don't set stroke, fill colour 4. Use viewport 24 24 +Tip: use lucide.svg in /icons for all downloaded icons + --> - - ${app.app_title} + ${app.app_title} `).appendTo(app_switcher_menu); } diff --git a/frappe/public/scss/desk/global.scss b/frappe/public/scss/desk/global.scss index 28947d562d..506ab6429d 100644 --- a/frappe/public/scss/desk/global.scss +++ b/frappe/public/scss/desk/global.scss @@ -171,11 +171,6 @@ footer { float: right; } -img { - max-width: 100%; - height: auto; -} - .missing-image { background-color: var(--bg-light-gray); line-height: 140px; diff --git a/frappe/public/scss/desk/sidebar.scss b/frappe/public/scss/desk/sidebar.scss index 712762dc94..814c7a8e94 100644 --- a/frappe/public/scss/desk/sidebar.scss +++ b/frappe/public/scss/desk/sidebar.scss @@ -268,6 +268,13 @@ body { text-decoration: none; display: flex; align-items: center; + gap: var(--margin-sm); + } + + .app-item-title { + text-overflow: ellipsis; + text-wrap: nowrap; + overflow: hidden; } } diff --git a/frappe/public/scss/website/index.scss b/frappe/public/scss/website/index.scss index 65093c8ed2..f1dc450859 100644 --- a/frappe/public/scss/website/index.scss +++ b/frappe/public/scss/website/index.scss @@ -30,7 +30,6 @@ @import "navbar"; @import "footer"; @import "error-state"; -@import "my_account"; .ql-editor.read-mode { padding: 0; diff --git a/frappe/public/scss/website/my_account.scss b/frappe/public/scss/website/my_account.scss deleted file mode 100644 index e7da7fc0ea..0000000000 --- a/frappe/public/scss/website/my_account.scss +++ /dev/null @@ -1,91 +0,0 @@ -@include media-breakpoint-down(sm) { - #page-me { - .side-list { - .list-group { - display: none; - } - } - } -} - -.my-account-header { - color: var(--gray-900); - margin-bottom: var(--margin-lg); - font-weight: bold; - - @include media-breakpoint-down(sm) { - margin-left: -1rem; - } -} - -.my-account-container { - max-width: 800px; - margin: auto; - margin-bottom: 4rem; -} - -.account-info { - background-color: var(--fg-color); - border: 1px solid var(--border-color); - border-radius: var(--border-radius-md); - padding: var(--padding-sm) 25px; - - @include media-breakpoint-down(sm) { - padding: 0; - } - - .my-account-name, - .my-account-item { - color: var(--gray-900); - font-weight: var(--weight-medium); - } - - .my-account-avatar { - .avatar { - height: 60px; - width: 60px; - } - } - - .my-account-item-desc { - color: var(--gray-700); - @include get_textstyle("base", "regular"); - } - - .my-account-item-link { - @include get_textstyle("base", "regular"); - - a { - text-decoration: none; - - .edit-profile-icon { - stroke: var(--blue-500); - } - } - - .right-icon { - @include media-breakpoint-up(sm) { - display: none; - } - } - - .item-link-text { - @include media-breakpoint-down(sm) { - display: none; - } - } - } - - .col { - padding: var(--padding-md) 0; - border-bottom: 1px solid var(--border-color); - - .form-group { - margin-right: var(--margin-lg); - } - } - - :last-child { - border: 0; - } -} diff --git a/frappe/public/scss/website/portal.scss b/frappe/public/scss/website/portal.scss index 396191f051..f65acb6c8b 100644 --- a/frappe/public/scss/website/portal.scss +++ b/frappe/public/scss/website/portal.scss @@ -5,3 +5,76 @@ color: $body-color; } } + +.portal-container { + max-width: 540px; + margin: 3rem auto; + padding: var(--padding-2xl); + border-radius: var(--border-radius-lg); + background-color: var(--bg-color); + /* border: 1px solid var(--border-color); */ + box-shadow: var(--shadow-lg); +} + +.portal-items { + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + + .portal-section { + padding: 10px; + border-bottom: 1px solid var(--border-color); + + &:last-child { + border-bottom: none; + } + } +} + +.portal-section { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 0; + + &.head { + padding: 0; + padding-bottom: var(--padding-lg); + margin-top: -10px; + border-bottom: none; + } + + a { + text-decoration: none; + } + + .item-link-text { + padding-left: var(--padding-sm); + color: var(--text-light); + } + + .title { + font-weight: var(--weight-semibold); + font-size: var(--text-lg); + color: var(--text-color); + } +} + +.icon-md { + margin-top: -3px; +} + +.icon { + stroke: var(--text-light); +} + +.portal-footer { + margin: var(--margin-md) auto; + display: flex; + justify-content: center; + gap: var(--margin-xl); + + a { + color: var(--text-light); + text-decoration: none; + } +} diff --git a/frappe/www/me.html b/frappe/www/me.html index c505604967..5907a8eb60 100644 --- a/frappe/www/me.html +++ b/frappe/www/me.html @@ -13,77 +13,10 @@ background-color: var(--subtle-fg); font-size: var(--text-base); } - - .me-container { - max-width: 540px; - margin: 3rem auto; - padding: var(--padding-2xl); - border-radius: var(--border-radius-lg); - background-color: var(--bg-color); - /* border: 1px solid var(--border-color); */ - box-shadow: var(--shadow-lg); - } - - .me-items { - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - } - - .me-section { - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px; - border-bottom: 1px solid var(--border-color); - } - - .me-section.head { - padding: 0; - padding-bottom: var(--padding-lg); - margin-top: -10px; - border-bottom: none; - } - - .me-section:last-child { - border-bottom: none; - } - - .icon-md { - margin-top: -3px; - } - - .icon { - stroke: var(--text-light); - } - - .me-section a { - text-decoration: none; - } - - .item-link-text { - padding-left: var(--padding-sm); - color: var(--text-light); - } - - .title { - font-weight: var(--weight-semibold); - font-size: var(--text-lg); - color: var(--text-color); - } - - .me-logout { - margin: var(--margin-md) auto; - text-align: center; - } - - .me-logout a { - color: var(--text-light); - } - -
-
+
+
{{_("Settings")}}
-
-
+
+ -
+ - -
+