From e898419e8f21efcccf81c52bd30f7f55f19a301e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 6 Jun 2020 14:01:51 +0200 Subject: [PATCH] Use existing context for get_preferences and keep it in sessionStorage So we present to the user his current contextual values. But we clear the context after modification. issue9327 review299651002 --- CHANGELOG | 2 ++ src/sao.js | 1 + src/session.js | 31 ++++++++++++++++++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f6c6af6815..ff42524f63 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Keep context in sessionStorage +* Use existing context for get_preferences * Escape external strings (issue9351) * Add context to export URL * Allow changes to editable tree checkboxes without first selecting the line diff --git a/src/sao.js b/src/sao.js index 85716d0980..ebc54449aa 100644 --- a/src/sao.js +++ b/src/sao.js @@ -586,6 +586,7 @@ var Sao = {}; jQuery('#user-logout').empty(); jQuery('#menu').empty(); new Sao.Window.Preferences(function() { + Sao.Session.current_session.reset_context(); Sao.get_preferences().then(function(preferences) { Sao.menu(preferences); Sao.user_menu(preferences); diff --git a/src/session.js b/src/session.js index 4e41a91cbb..615b5b8378 100644 --- a/src/session.js +++ b/src/session.js @@ -17,9 +17,8 @@ this.database = database; this.login = login; this.restore(); - this.context = { - client: Sao.Bus.id, - }; + this.context = {}; + this.restore_context(); if (!Sao.Session.current_session) { Sao.Session.current_session = this; } @@ -82,16 +81,34 @@ reload_context: function() { var args = { 'method': 'model.res.user.get_preferences', - 'params': [true, {}] - }; - this.context = { - client: Sao.Bus.id, + 'params': [true, this.context] }; + this.reset_context(); var prm = Sao.rpc(args, this); return prm.then(function(context) { jQuery.extend(this.context, context); + this.store_context(); }.bind(this)); }, + reset_context: function() { + this.context = { + client: Sao.Bus.id, + }; + }, + restore_context: function() { + this.reset_context(); + var context = sessionStorage.getItem('sao_context_' + this.database); + if (context !== null) { + jQuery.extend( + this.context, Sao.rpc.convertJSONObject(JSON.parse(context))); + } + }, + store_context: function() { + var context = jQuery.extend({}, this.context); + delete context.client; + context = JSON.stringify(Sao.rpc.prepareObject(context)); + sessionStorage.setItem('sao_context_' + this.database, context); + }, restore: function() { if (this.database && !this.session) { var session_data = localStorage.getItem(