diff --git a/crm/hooks.py b/crm/hooks.py index a1996f4b..e652e3e1 100644 --- a/crm/hooks.py +++ b/crm/hooks.py @@ -293,7 +293,14 @@ standard_dropdown_items = [ "label": "Settings", "type": "Route", "icon": "settings", - "route": "#", + "route": "#", + "is_standard": 1, + }, + { + "name1": "login_to_fc", + "label": "Login to Frappe Cloud", + "type": "Route", + "route": "#", "is_standard": 1, }, { @@ -307,7 +314,7 @@ standard_dropdown_items = [ "label": "Log out", "type": "Route", "icon": "log-out", - "route": "#", + "route": "#", "is_standard": 1, }, ] diff --git a/crm/www/crm.py b/crm/www/crm.py index f980091e..c630506f 100644 --- a/crm/www/crm.py +++ b/crm/www/crm.py @@ -3,6 +3,7 @@ import frappe +from frappe.integrations.frappe_providers.frappecloud_billing import is_fc_site from frappe.utils import cint, get_system_timezone from frappe.utils.telemetry import capture @@ -36,6 +37,7 @@ def get_boot(): "setup_complete": cint(frappe.get_system_settings("setup_complete")), "sysdefaults": frappe.defaults.get_defaults(), "is_demo_site": frappe.conf.get("is_demo_site"), + "is_fc_site": is_fc_site(), "timezone": { "system": get_system_timezone(), "user": frappe.db.get_value("User", frappe.session.user, "time_zone") diff --git a/frappe-ui b/frappe-ui index e01b1ee3..33c9907a 160000 --- a/frappe-ui +++ b/frappe-ui @@ -1 +1 @@ -Subproject commit e01b1ee305a0207413cd67ed7345578440c503db +Subproject commit 33c9907aa9163d8d3b84f23dc2a2c829e4d8c6f1 diff --git a/frontend/package.json b/frontend/package.json index 88fa0c76..bb53389b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,7 @@ "@vueuse/core": "^10.3.0", "@vueuse/integrations": "^10.3.0", "feather-icons": "^4.28.0", - "frappe-ui": "^0.1.110", + "frappe-ui": "^0.1.111", "gemoji": "^8.1.0", "lodash": "^4.17.21", "mime": "^4.0.1", diff --git a/frontend/src/components/Icons/FrappeCloudIcon.vue b/frontend/src/components/Icons/FrappeCloudIcon.vue new file mode 100644 index 00000000..2126bb92 --- /dev/null +++ b/frontend/src/components/Icons/FrappeCloudIcon.vue @@ -0,0 +1,23 @@ + diff --git a/frontend/src/components/Layouts/AppSidebar.vue b/frontend/src/components/Layouts/AppSidebar.vue index e44ae5ca..cf9ea854 100644 --- a/frontend/src/components/Layouts/AppSidebar.vue +++ b/frontend/src/components/Layouts/AppSidebar.vue @@ -73,6 +73,7 @@
+ import BrandLogo from '@/components/BrandLogo.vue' +import FrappeCloudIcon from '@/components/Icons/FrappeCloudIcon.vue' import Apps from '@/components/Apps.vue' import { sessionStore } from '@/stores/session' import { usersStore } from '@/stores/users' import { getSettings } from '@/stores/settings' import { showSettings, isMobileView } from '@/composables/settings' +import { confirmLoginToFrappeCloud } from '@/composables/frappecloud' import { Dropdown } from 'frappe-ui' import { theme, toggleTheme } from '@/stores/theme' import { computed, h, markRaw } from 'vue' @@ -156,6 +158,13 @@ function getStandardItem(item) { onClick: () => (showSettings.value = true), condition: () => !isMobileView.value, } + case 'login_to_fc': + return { + icon: h(FrappeCloudIcon), + label: __(item.label), + onClick: () => confirmLoginToFrappeCloud(), + condition: () => !isMobileView.value && window.is_fc_site, + } case 'logout': return { icon: item.icon, diff --git a/frontend/src/composables/frappecloud.js b/frontend/src/composables/frappecloud.js new file mode 100644 index 00000000..f36fcdc4 --- /dev/null +++ b/frontend/src/composables/frappecloud.js @@ -0,0 +1,45 @@ +import { globalStore } from '@/stores/global' +import { createResource } from 'frappe-ui' +import { ref } from 'vue' + +const baseEndpoint = ref('https://frappecloud.com') +const siteName = ref('') + +export const currentSiteInfo = createResource({ + url: 'frappe.integrations.frappe_providers.frappecloud_billing.current_site_info', + cache: 'currentSiteInfo', + onSuccess: (data) => { + baseEndpoint.value = data.base_url + siteName.value = data.site_name + }, +}) + +export const confirmLoginToFrappeCloud = () => { + currentSiteInfo.fetch() + + const { $dialog } = globalStore() + + $dialog({ + title: __('Login to Frappe Cloud?'), + message: __( + 'Are you sure you want to login to your Frappe Cloud dashboard?', + ), + actions: [ + { + label: __('Confirm'), + variant: 'solid', + onClick(close) { + loginToFrappeCloud() + close() + }, + }, + ], + }) +} + +const loginToFrappeCloud = () => { + window.open( + `${baseEndpoint.value}/dashboard/sites/${siteName.value}`, + '_blank', + ) +} diff --git a/yarn.lock b/yarn.lock index 25bbca56..77758d1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2388,10 +2388,10 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -frappe-ui@^0.1.110: - version "0.1.110" - resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.110.tgz#dbe02d294cb0aeb0a4c1b3000682093c309450ae" - integrity sha512-kFah6SoPauULXaeSbljNUq595/82VmY4k4+KA8zi4sXxpn4sXYi12qUl/1I8GOBhsCQQizmoh46DO7e/uU2M1A== +frappe-ui@^0.1.111: + version "0.1.111" + resolved "https://registry.yarnpkg.com/frappe-ui/-/frappe-ui-0.1.111.tgz#c7615aa8f02da9af0596074352150d813d0f4b3d" + integrity sha512-JCh/SQwcbsQQxTZIFFzEULPgp2QAQZe+vwrM2jqekIx4dBgYW2H1KgXSlf+uO2ng2vqk4Q1MiStA3svHQEXsLQ== dependencies: "@headlessui/vue" "^1.7.14" "@popperjs/core" "^2.11.2"