summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorRobot Odoo <xmo+roboto@odoo.com>2019-01-17 11:23:11 +0100
committerGitHub <noreply@github.com>2019-01-17 11:23:11 +0100
commit188ca66dbce8794d0130a975cd7f808d49e4fc8f (patch)
treedf416ad29ec5257b1ee811ef70815985670b05ce /addons/web/static/src/js
parent1bb6d739496754647f18e8b224ec9ed4d1d6170a (diff)
parent958342bf165bb9b6982e2eaa49d0c8daec7bbb7a (diff)
[MERGE] project,hr_timesheet: simplify the user onboarding
This merge provides many little changes to improve the usability and the onboarding of users in project and timesheet applications. This mostly contains labels renaming, restruration of views, ... but some new mecanism appears like the "ghost kanban examples", and improvements of the kanban examples modal. Task-1893021 closes odoo/odoo#28461
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js27
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_renderer.js37
2 files changed, 48 insertions, 16 deletions
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index 2383a0ac730..15c804f5a8e 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -33,6 +33,9 @@ var KanbanController = BasicController.extend({
column_toggle_fold: '_onToggleColumn',
kanban_column_records_toggle_active: '_onToggleActiveRecords',
}),
+ events: _.extend({}, BasicController.prototype.events, {
+ click: '_onClick',
+ }),
/**
* @override
* @param {Object} params
@@ -303,6 +306,23 @@ var KanbanController = BasicController.extend({
}
},
/**
+ * Bounce the 'Create' button.
+ *
+ * @private
+ * @param {MouseEvent} ev
+ **/
+ _onClick: function (ev) {
+ var state = this.model.get(this.handle, {raw: true});
+ if (!state.count && this.buttons) {
+ var classesList = ['o_kanban_view', 'o_kanban_group', 'o_column_quick_create', 'o_view_nocontent_smiling_face'];
+ var $target = $(ev.target);
+ var hasClassList = _.map(classesList, function(klass){ return $target.hasClass(klass) });
+ if (_.some(hasClassList)) {
+ this.$buttons.find('.o-kanban-button-new').odooBounce();
+ }
+ }
+ },
+ /**
* @private
* @param {OdooEvent} ev
*/
@@ -321,12 +341,7 @@ var KanbanController = BasicController.extend({
this.model
.deleteRecords([column.db_id], relatedModelName)
.done(function () {
- if (column.isEmpty()) {
- self.renderer.removeWidget(column);
- self._updateButtons();
- } else {
- self.reload();
- }
+ self.update({}, {reload: !column.isEmpty()});
});
},
/**
diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js
index 316fb9114cd..51d75a167c7 100644
--- a/addons/web/static/src/js/views/kanban/kanban_renderer.js
+++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js
@@ -167,15 +167,6 @@ var KanbanRenderer = BasicRenderer.extend({
this._toggleNoContentHelper();
},
/**
- * Removes a widget (record if ungrouped, column if grouped) from the view.
- *
- * @param {Widget} widget the instance of the widget to remove
- */
- removeWidget: function (widget) {
- this.widgets.splice(this.widgets.indexOf(widget), 1);
- widget.destroy();
- },
- /**
* Updates a given column with its new state.
*
* @param {string} localID the column id
@@ -276,6 +267,16 @@ var KanbanRenderer = BasicRenderer.extend({
}
},
/**
+ * Render the Example Ghost Kanban card on the background
+ *
+ * @private
+ * @param {DocumentFragment} fragment
+ */
+ _renderExampleBackground: function (fragment) {
+ var $background = $(qweb.render('KanbanView.ExamplesBackground'));
+ $background.appendTo(fragment);
+ },
+ /**
* Renders empty invisible divs in a document fragment.
*
* @private
@@ -351,9 +352,9 @@ var KanbanRenderer = BasicRenderer.extend({
// Open it directly if there is no column yet
if (!self.state.data.length) {
self.quickCreate.toggleFold();
+ self._renderExampleBackground(fragment);
}
});
-
}
}
},
@@ -546,6 +547,7 @@ var KanbanRenderer = BasicRenderer.extend({
_onQuickCreateColumnUpdated: function (ev) {
ev.stopPropagation();
this._toggleNoContentHelper();
+ this._updateExampleBackground();
},
/**
* @private
@@ -596,6 +598,21 @@ var KanbanRenderer = BasicRenderer.extend({
_onStartQuickCreate: function () {
this._toggleNoContentHelper(true);
},
+ /**
+ * Hide or display the background example:
+ * - displayed when quick create column is display and there is no column else
+ * - hidden otherwise
+ *
+ * @private
+ **/
+ _updateExampleBackground: function () {
+ var $elem = this.$('.o_kanban_example_background_container');
+ if (!this.state.data.length && !$elem.length) {
+ this._renderExampleBackground(this.$el);
+ } else {
+ $elem.remove();
+ }
+ },
});
return KanbanRenderer;