From 524543fa3b13b6baf14178463becf7aa7ae250d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Tue, 7 Oct 2014 16:29:28 +0200 Subject: [PATCH] [FIX] make add to dashboard work With the search view refactoring, the add to dashboard functionality was unavailable. Weep no longer, it is fixed. The dashboard button is now an action in the favorites submenu instead of a search input --- addons/board/static/src/css/dashboard.css | 22 ++- addons/board/static/src/css/dashboard.sass | 33 +++-- addons/board/static/src/js/dashboard.js | 157 +++++++++------------ addons/board/static/src/xml/board.xml | 18 +-- 4 files changed, 105 insertions(+), 125 deletions(-) diff --git a/addons/board/static/src/css/dashboard.css b/addons/board/static/src/css/dashboard.css index f2bbcd07071..02304107fc2 100644 --- a/addons/board/static/src/css/dashboard.css +++ b/addons/board/static/src/css/dashboard.css @@ -1,3 +1,4 @@ +@charset "UTF-8"; .openerp .oe_dashboard_layout_1 .oe_dashboard_column.index_0 { width: 100%; } @@ -82,7 +83,7 @@ color: #b3b3b3; } .openerp .oe_dashboard .oe_action .oe_header .oe_icon:hover { - color: #666666; + color: #666; text-decoration: none; } .openerp .oe_dashboard .oe_action .oe_header .oe_close:after { @@ -116,8 +117,14 @@ .openerp .oe_dashboard .oe_action .oe_content { padding: 0 12px 12px 12px; } -.openerp .oe_dashboard .oe_action .oe_content .oe_view_manager_header { - display: none; +.openerp .oe_dashboard .oe_action .oe_content .oe-view-manager-views { + position: relative; +} +.openerp .oe_dashboard .oe_action .oe_content .oe-view-manager { + display: block; +} +.openerp .oe_dashboard .oe_action .oe_content .oe-view-manager-content { + display: block; } .openerp .oe_dashboard .oe_action .oe_content .oe_list_content > thead { border-bottom: 1px; @@ -125,3 +132,12 @@ .openerp .oe_dashboard .oe_action .oe_content .oe_list_content > tbody tr:nth-child(odd) { background: transparent; } +.openerp .oe-search-options .add-to-dashboard button { + margin: 3px 25px; + display: none; +} +.openerp .oe-search-options .add-to-dashboard input { + width: calc(100% - 50px); + margin: 3px 25px; + display: none; +} diff --git a/addons/board/static/src/css/dashboard.sass b/addons/board/static/src/css/dashboard.sass index 122b6dc232c..f412b1d3aa1 100644 --- a/addons/board/static/src/css/dashboard.sass +++ b/addons/board/static/src/css/dashboard.sass @@ -98,25 +98,14 @@ margin-left: 4px padding: 0 4px 0 4px height: 16px !important - //.oe_rename - //float: left - //padding-right: 4px - //position: relative - //top: 1px - //.oe_input - //height: 16px; - //position: relative; - //top: 2px; - //.ui-sortable-placeholder - //border: 1px dotted black; - //visibility: visible !important; - //height: 50px !important; - //* - //visibility: hidden; .oe_content padding: 0 12px 12px 12px - .oe_view_manager_header - display: none + .oe-view-manager-views + position: relative + .oe-view-manager + display: block + .oe-view-manager-content + display: block .oe_list_content > thead border-bottom: 1px @@ -124,3 +113,13 @@ tr:nth-child(odd) background: transparent + + .oe-search-options + .add-to-dashboard + button + margin: 3px 25px + display: none + input + width: calc(100% - 50px) + margin: 3px 25px + display: none diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index 0d1d210a4de..5fa7811b5a0 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -18,7 +18,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ var self = this; this._super.apply(this, arguments); - this.$el.find('.oe_dashboard_column').sortable({ + this.$('.oe_dashboard_column').sortable({ connectWith: '.oe_dashboard_column', handle: '.oe_header', scroll: false @@ -29,9 +29,9 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ self.__parentedParent.set({ 'title': old_title}); }) // Events - this.$el.find('.oe_dashboard_link_reset').click(this.on_reset); - this.$el.find('.oe_dashboard_link_change_layout').click(this.on_change_layout); - this.$el.find('h2.oe_header span.oe_header_txt').click(function(ev){ + this.$('.oe_dashboard_link_reset').click(this.on_reset); + this.$('.oe_dashboard_link_change_layout').click(this.on_change_layout); + this.$('h2.oe_header span.oe_header_txt').click(function(ev){ if(ev.target === ev.currentTarget) self.on_header_string($(ev.target).parent()); }); @@ -208,6 +208,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ views_switcher : false, action_buttons : false, pager: false, + headless: true, low_profile: true, display_title: false, list: { @@ -244,7 +245,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ }; var list = am.inner_widget.views.list; if (list) { - list.deferred.done(function() { + list.created.done(function() { $(list.controller.groups).off('row_link').on('row_link', function(e, id) { new_form_action(id); }); @@ -252,7 +253,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({ } var kanban = am.inner_widget.views.kanban; if (kanban) { - kanban.deferred.done(function() { + kanban.created.done(function() { kanban.controller.open_record = function(id, editable) { new_form_action(id, editable); }; @@ -326,113 +327,87 @@ instance.web.form.tags.add('vpaned', 'instance.web.form.DashBoardLegacy'); instance.web.form.tags.add('board', 'instance.web.form.DashBoard'); -instance.board.AddToDashboard = instance.web.search.Input.extend({ - template: 'SearchView.addtodashboard', - _in_drawer: true, - init: function (parent) { - this._super(parent); - this.is_loaded = null; - }, - start: function () { +instance.web.search.FavoriteMenu.include({ + prepare_dropdown_menu: function (filters) { var self = this; - this.$el - .on('click', 'h4', this.proxy('load_and_show_option')) - .on('submit', 'form', function (e) { - e.preventDefault(); - self.add_dashboard(); - }); - return $.when(); - }, - load_data:function(){ - var board = new instance.web.Model('board.board'); - return board.call('list', [board.context()]); - }, - _x:function() { - if (!instance.webclient) { return $.Deferred().reject(); } - var dashboard_menu = instance.webclient.menu.data.data.children; - return new instance.web.Model('ir.model.data') - .query(['res_id']) - .filter([['name','=','menu_reporting_dashboard']]) - .first().then(function (result) { - var menu = _(dashboard_menu).chain() - .pluck('children') - .flatten(true) - .find(function (child) { return child.id === result.res_id; }) - .value(); - return menu ? menu.children : []; + this._super(filters); + this.$('.favorites-menu').append(QWeb.render('SearchView.addtodashboard')); + this.$add_to_dashboard = this.$('.add-to-dashboard'); + this.$add_dashboard_btn = this.$add_to_dashboard.eq(2).find('button'); + this.$add_dashboard_input = this.$add_to_dashboard.eq(1).find('input'); + this.$add_dashboard_link = this.$add_to_dashboard.first().find('a'); + var title = this.searchview.getParent().title; + this.$add_dashboard_input.val(title); + this.$add_dashboard_link.click(function () { + self.toggle_dashboard_menu(); }); + this.$add_dashboard_btn.click(this.proxy('add_dashboard')); }, - render_data: function(dashboard_choices){ - var selection = instance.web.qweb.render( - "SearchView.addtodashboard.selection", { - selections: dashboard_choices}); - this.$("input").before(selection) + toggle_dashboard_menu: function (is_open) { + this.$add_to_dashboard.first() + .toggleClass('closed-menu', !is_open) + .toggleClass('open-menu', is_open); + this.$add_dashboard_btn.toggle(is_open); + this.$add_dashboard_input.toggle(is_open); + if (this.$add_to_dashboard.first().hasClass('open-menu')) { + this.$add_dashboard_input.focus(); + } }, - add_dashboard: function(){ + close_menus: function () { + this.toggle_dashboard_menu(false); + this._super(); + }, + add_dashboard: function () { var self = this; - if (! this.view.view_manager.action || ! this.$el.find("select").val()) { + var view_manager = this.getParent(); + while (!(view_manager instanceof instance.web.ViewManager) && + view_manager && view_manager.getParent) { + view_manager = view_manager.getParent(); + } + if (!view_manager.action) { this.do_warn(_t("Can't find dashboard action")); return; } - var data = this.view.build_search_data(); - var context = new instance.web.CompoundContext(this.view.dataset.get_context() || []); - var domain = new instance.web.CompoundDomain(this.view.dataset.get_domain() || []); + var searchview = view_manager.searchview, + data = searchview.build_search_data(), + context = new instance.web.CompoundContext(searchview.dataset.get_context() || []), + domain = new instance.web.CompoundDomain(searchview.dataset.get_domain() || []); _.each(data.contexts, context.add, context); _.each(data.domains, domain.add, domain); context.add({ group_by: instance.web.pyeval.eval('groupbys', data.groupbys || []) }); - var c = instance.web.pyeval.eval('context', context); for(var k in c) { if (c.hasOwnProperty(k) && /^search_default_/.test(k)) { delete c[k]; } } - // TODO: replace this 6.1 workaround by attribute on + this.toggle_dashboard_menu(false); c.dashboard_merge_domains_contexts = false; - var d = instance.web.pyeval.eval('domain', domain); - - this.rpc('/board/add_to_dashboard', { - menu_id: this.$el.find("select").val(), - action_id: this.view.view_manager.action.id, - context_to_save: c, - domain: d, - view_mode: this.view.view_manager.active_view, - name: this.$el.find("input").val() - }).done(function(r) { - if (r === false) { - self.do_warn(_t("Could not add filter to dashboard")); - } else { - self.$el.toggleClass('oe_opened'); - self.do_notify(_t("Filter added to dashboard"), ''); - } - }); + var d = instance.web.pyeval.eval('domain', domain), + board = new instance.web.Model('board.board'), + name = self.$add_dashboard_input.val(); + + board.call('list', [board.context()]) + .then(function (board_list) { + return self.rpc('/board/add_to_dashboard', { + menu_id: board_list[0].id, + action_id: view_manager.action.id, + context_to_save: c, + domain: d, + view_mode: view_manager.active_view.type, + name: name, + }); + }).then(function (r) { + if (r === false) { + self.do_warn(_t("Could not add filter to dashboard")); + } else { + self.do_notify(_t("'"+name + "' added to dashboard"), ''); + } + }); }, - load_and_show_option: function(){ - if (!this.is_loaded) { - this.is_loaded = this.load_data().done(this.proxy("render_data")); - } - this.is_loaded.done(this.proxy('show_option')); - }, - show_option: function () { - this.$el.toggleClass('oe_opened'); - if (! this.$el.hasClass('oe_opened')) - return; - this.$("input").val(this.view.fields_view.name || "" ); - }, -}); - - -instance.web.SearchViewDrawer.include({ - add_common_inputs: function() { - this._super(); - var vm = this.getParent().getParent(); - if (vm.inner_action && vm.inner_action.id && vm.inner_action.views) { - (new instance.board.AddToDashboard(this)); - } - } }); }; diff --git a/addons/board/static/src/xml/board.xml b/addons/board/static/src/xml/board.xml index 72f720e9b38..305799d0617 100644 --- a/addons/board/static/src/xml/board.xml +++ b/addons/board/static/src/xml/board.xml @@ -63,19 +63,9 @@