summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/core
diff options
context:
space:
mode:
authorJérémy Hennecart <jeh@odoo.com>2020-06-19 07:06:31 +0000
committerAaron Bohy <aab@odoo.com>2020-06-22 13:04:01 +0000
commitc7964657ecbbad278cec73cf231d7eef55b44347 (patch)
treebe77532a80cbed1283c2062cb2dc1159aa0fbdd4 /addons/web/static/src/js/core
parent96fcefb6f1fe3fb5a5f197e2635e6d71d9a1d9dd (diff)
[IMP] web: add support of "sample" attribute in views
With this commit, it is now possible to display sample (fake) data in empty views, in the hope of easing user onboarding. This can be enabled (in list and kanban views) with attribute sample="1" on the arch root element. In this case, if there is no data to display, sample data will be generated based on heuristics (depending on field types and names). This can be used in addition to the no content helper. Task 2232801 X-original-commit: 7c8e627ff5029cb539d702705e5ce53d658c76ed Co-authored-by: Aaron Bohy <aab@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com> Co-authored-by: Jérémy Hennecart <jeh@odoo.com> Co-authored-by: Julien Mougenot <jum@odoo.com>
Diffstat (limited to 'addons/web/static/src/js/core')
-rw-r--r--addons/web/static/src/js/core/mvc.js17
1 files changed, 12 insertions, 5 deletions
diff --git a/addons/web/static/src/js/core/mvc.js b/addons/web/static/src/js/core/mvc.js
index d7091cc4843..23f2b44b274 100644
--- a/addons/web/static/src/js/core/mvc.js
+++ b/addons/web/static/src/js/core/mvc.js
@@ -109,9 +109,11 @@ var Controller = Widget.extend({
* @param {Model} model
* @param {Renderer} renderer
* @param {Object} params
+ * @param {any} [params.handle=null]
*/
init: function (parent, model, renderer, params) {
this._super.apply(this, arguments);
+ this.handle = params.handle || null;
this.model = model;
this.renderer = renderer;
},
@@ -178,11 +180,13 @@ var Factory = Class.extend({
var self = this;
var model = this.getModel(parent);
return Promise.all([this._loadData(model), ajax.loadLibs(this)]).then(function (result) {
- var state = result[0];
+ const { state, handle } = result[0];
var renderer = self.getRenderer(parent, state);
var Controller = self.Controller || self.config.Controller;
+ const initialState = model.get(handle);
var controllerParams = _.extend({
- initialState: state,
+ initialState,
+ handle,
}, self.controllerParams);
var controller = new Controller(parent, model, renderer, controllerParams);
model.setParent(controller);
@@ -221,13 +225,16 @@ var Factory = Class.extend({
*
* @private
* @param {Model} model a Model instance
+ * @param {Object} [options={}]
+ * @param {boolean} [options.withSampleData=true]
* @returns {Promise<*>} a promise that resolves to the value returned by
* the get method from the model
* @todo: get rid of loadParams (use modelParams instead)
*/
- _loadData: function (model) {
- return model.load(this.loadParams).then(function () {
- return model.get.apply(model, arguments);
+ _loadData: function (model, options = {}) {
+ options.withSampleData = 'withSampleData' in options ? options.withSampleData : true;
+ return model.load(this.loadParams).then(function (handle) {
+ return { state: model.get(handle, options), handle };
});
},
});