summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/chrome/apps_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/apps_menu.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/src/js/chrome/apps_menu.js')
-rw-r--r--addons/web/static/src/js/chrome/apps_menu.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/addons/web/static/src/js/chrome/apps_menu.js b/addons/web/static/src/js/chrome/apps_menu.js
new file mode 100644
index 00000000..b7e057f8
--- /dev/null
+++ b/addons/web/static/src/js/chrome/apps_menu.js
@@ -0,0 +1,102 @@
+odoo.define('web.AppsMenu', function (require) {
+"use strict";
+
+var Widget = require('web.Widget');
+
+var AppsMenu = Widget.extend({
+ template: 'AppsMenu',
+ events: {
+ 'click .o_app': '_onAppsMenuItemClicked',
+ },
+ /**
+ * @override
+ * @param {web.Widget} parent
+ * @param {Object} menuData
+ * @param {Object[]} menuData.children
+ */
+ init: function (parent, menuData) {
+ this._super.apply(this, arguments);
+ this._activeApp = undefined;
+ this._apps = _.map(menuData.children, function (appMenuData) {
+ return {
+ actionID: parseInt(appMenuData.action.split(',')[1]),
+ menuID: appMenuData.id,
+ name: appMenuData.name,
+ xmlID: appMenuData.xmlid,
+ };
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * @returns {Object[]}
+ */
+ getApps: function () {
+ return this._apps;
+ },
+ /**
+ * Open the first app in the list of apps. Returns whether one was found.
+ *
+ * @returns {Boolean}
+ */
+ openFirstApp: function () {
+ if (!this._apps.length) {
+ return false;
+ }
+ var firstApp = this._apps[0];
+ this._openApp(firstApp);
+ return true;
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * @param {Object} app
+ */
+ _openApp: function (app) {
+ this._setActiveApp(app);
+ this.trigger_up('app_clicked', {
+ action_id: app.actionID,
+ menu_id: app.menuID,
+ });
+ },
+ /**
+ * @private
+ * @param {Object} app
+ */
+ _setActiveApp: function (app) {
+ var $oldActiveApp = this.$('.o_app.active');
+ $oldActiveApp.removeClass('active');
+ var $newActiveApp = this.$('.o_app[data-action-id="' + app.actionID + '"]');
+ $newActiveApp.addClass('active');
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * Called when clicking on an item in the apps menu.
+ *
+ * @private
+ * @param {MouseEvent} ev
+ */
+ _onAppsMenuItemClicked: function (ev) {
+ var $target = $(ev.currentTarget);
+ var actionID = $target.data('action-id');
+ var menuID = $target.data('menu-id');
+ var app = _.findWhere(this._apps, { actionID: actionID, menuID: menuID });
+ this._openApp(app);
+ },
+
+});
+
+return AppsMenu;
+
+});