diff options
Diffstat (limited to 'addons/web/static/src/js/core')
| -rw-r--r-- | addons/web/static/src/js/core/rpc.js | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/addons/web/static/src/js/core/rpc.js b/addons/web/static/src/js/core/rpc.js index ef47e1883ea..6ad91c0e4f9 100644 --- a/addons/web/static/src/js/core/rpc.js +++ b/addons/web/static/src/js/core/rpc.js @@ -46,38 +46,44 @@ return { params.args = options.args || []; params.model = options.model; params.method = options.method; - params.kwargs = options.kwargs || {}; - params.kwargs.context = options.context || params.kwargs.context; + params.kwargs = _.extend(params.kwargs || {}, options.kwargs); + params.kwargs.context = options.context || params.context || params.kwargs.context; } if (options.method === 'read_group') { - params.kwargs.groupby = options.groupBy || params.kwargs.groupby || []; - params.kwargs.domain = options.domain || params.kwargs.domain || []; - params.kwargs.fields = options.fields || params.kwargs.fields || []; - params.kwargs.lazy = 'lazy' in options ? options.lazy : params.kwargs.lazy; - var orderBy = options.orderBy || params.orderBy; - params.kwargs.orderby = orderBy ? this._serializeSort(orderBy) : false; + params.kwargs.domain = options.domain || params.domain || params.kwargs.domain || []; + params.kwargs.fields = options.fields || params.fields || params.kwargs.fields || []; + params.kwargs.groupby = options.groupBy || params.groupBy || params.kwargs.groupby || []; + params.kwargs.offset = options.offset || params.offset || params.kwargs.offset; + params.kwargs.limit = options.limit || params.limit || params.kwargs.limit; + // In kwargs, we look for "orderby" rather than "orderBy" (note the absence of capital B), + // since the Python argument to the actual function is "orderby". + var orderBy = options.orderBy || params.orderBy || params.kwargs.orderby; + params.kwargs.orderby = orderBy ? this._serializeSort(orderBy) : orderBy; + params.kwargs.lazy = 'lazy' in options ? options.lazy : params.lazy; } if (options.method === 'search_read') { // call the model method - params.args = [ - options.domain || [], - options.fields || false, - options.offset || 0, - options.limit || false, - this._serializeSort(options.orderBy || params.orderBy || []), - ]; + params.kwargs.domain = options.domain || params.domain || params.kwargs.domain; + params.kwargs.fields = options.fields || params.fields || params.kwargs.fields; + params.kwargs.offset = options.offset || params.offset || params.kwargs.offset; + params.kwargs.limit = options.limit || params.limit || params.kwargs.limit; + // In kwargs, we look for "order" rather than "orderBy" since the Python + // argument to the actual function is "order". + var orderBy = options.orderBy || params.orderBy || params.kwargs.order; + params.kwargs.order = orderBy ? this._serializeSort(orderBy) : orderBy; } if (options.route === '/web/dataset/search_read') { // specifically call the controller params.model = options.model || params.model; - params.domain = options.domain || params.domain || []; - params.fields = options.fields || params.fields || false; + params.domain = options.domain || params.domain; + params.fields = options.fields || params.fields; params.limit = options.limit || params.limit; - params.offset = options.offset || params.offset ; - params.sort = this._serializeSort(options.orderBy || params.orderBy || []); + params.offset = options.offset || params.offset; + var orderBy = options.orderBy || params.orderBy; + params.sort = orderBy ? this._serializeSort(orderBy) : orderBy; params.context = options.context || params.context || {}; } |
