summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/chrome/user_menu.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/src/js/chrome/user_menu.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/src/js/chrome/user_menu.js')
-rw-r--r--addons/web/static/src/js/chrome/user_menu.js132
1 files changed, 132 insertions, 0 deletions
diff --git a/addons/web/static/src/js/chrome/user_menu.js b/addons/web/static/src/js/chrome/user_menu.js
new file mode 100644
index 00000000..4281bfd4
--- /dev/null
+++ b/addons/web/static/src/js/chrome/user_menu.js
@@ -0,0 +1,132 @@
+odoo.define('web.UserMenu', function (require) {
+"use strict";
+
+/**
+ * This widget is appended by the webclient to the right of the navbar.
+ * It displays the avatar and the name of the logged user (and optionally the
+ * db name, in debug mode).
+ * If clicked, it opens a dropdown allowing the user to perform actions like
+ * editing its preferences, accessing the documentation, logging out...
+ */
+
+var config = require('web.config');
+var core = require('web.core');
+var framework = require('web.framework');
+var Dialog = require('web.Dialog');
+var Widget = require('web.Widget');
+
+var _t = core._t;
+var QWeb = core.qweb;
+
+var UserMenu = Widget.extend({
+ template: 'UserMenu',
+
+ /**
+ * @override
+ * @returns {Promise}
+ */
+ start: function () {
+ var self = this;
+ var session = this.getSession();
+ this.$el.on('click', '[data-menu]', function (ev) {
+ ev.preventDefault();
+ var menu = $(this).data('menu');
+ self['_onMenu' + menu.charAt(0).toUpperCase() + menu.slice(1)]();
+ });
+ return this._super.apply(this, arguments).then(function () {
+ var $avatar = self.$('.oe_topbar_avatar');
+ if (!session.uid) {
+ $avatar.attr('src', $avatar.data('default-src'));
+ return Promise.resolve();
+ }
+ var topbar_name = session.name;
+ if (config.isDebug()) {
+ topbar_name = _.str.sprintf("%s (%s)", topbar_name, session.db);
+ }
+ self.$('.oe_topbar_name').text(topbar_name);
+ var avatar_src = session.url('/web/image', {
+ model:'res.users',
+ field: 'image_128',
+ id: session.uid,
+ });
+ $avatar.attr('src', avatar_src);
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ _onMenuAccount: function () {
+ var self = this;
+ this.trigger_up('clear_uncommitted_changes', {
+ callback: function () {
+ self._rpc({route: '/web/session/account'})
+ .then(function (url) {
+ framework.redirect(url);
+ })
+ .guardedCatch(function (result, ev){
+ ev.preventDefault();
+ framework.redirect('https://accounts.odoo.com/account');
+ });
+ },
+ });
+ },
+ /**
+ * @private
+ */
+ _onMenuDocumentation: function () {
+ window.open('https://www.odoo.com/documentation/14.0', '_blank');
+ },
+ /**
+ * @private
+ */
+ _onMenuLogout: function () {
+ this.trigger_up('clear_uncommitted_changes', {
+ callback: this.do_action.bind(this, 'logout'),
+ });
+ },
+ /**
+ * @private
+ */
+ _onMenuSettings: function () {
+ var self = this;
+ var session = this.getSession();
+ this.trigger_up('clear_uncommitted_changes', {
+ callback: function () {
+ self._rpc({
+ model: "res.users",
+ method: "action_get"
+ })
+ .then(function (result) {
+ result.res_id = session.uid;
+ self.do_action(result);
+ });
+ },
+ });
+ },
+ /**
+ * @private
+ */
+ _onMenuSupport: function () {
+ window.open('https://www.odoo.com/buy', '_blank');
+ },
+ /**
+ * @private
+ */
+ _onMenuShortcuts: function() {
+ new Dialog(this, {
+ size: 'large',
+ dialogClass: 'o_act_window',
+ title: _t("Keyboard Shortcuts"),
+ $content: $(QWeb.render("UserMenu.shortcuts"))
+ }).open();
+ },
+});
+
+return UserMenu;
+
+});