1
1
odoo . define ( "web_form_banner.save_plus_load" , function ( require ) {
2
- "use strict" ;
3
2
var rpc = require ( "web.rpc" ) ;
4
3
var FormController = require ( "web.FormController" ) ;
5
4
@@ -20,7 +19,7 @@ odoo.define("web_form_banner.save_plus_load", function (require) {
20
19
var first = function ( ) {
21
20
for ( var i = 0 ; i < arguments . length ; i ++ ) {
22
21
var v = arguments [ i ] ;
23
- if ( v != null && v !== "" ) return v ;
22
+ if ( v !== null && v !== "" ) return v ;
24
23
}
25
24
return null ;
26
25
} ;
@@ -44,7 +43,7 @@ odoo.define("web_form_banner.save_plus_load", function (require) {
44
43
var k = kv [ 0 ] ,
45
44
v = kv [ 1 ] ,
46
45
t = typeof v ;
47
- if ( v == null || t === "string" || t === "number" || t === "boolean" ) {
46
+ if ( v === null || t === "string" || t === "number" || t === "boolean" ) {
48
47
o [ k ] = v ;
49
48
} else if ( v && v . type === "record" && typeof v . res_id === "number" ) {
50
49
o [ k ] = v . res_id ;
@@ -88,61 +87,77 @@ odoo.define("web_form_banner.save_plus_load", function (require) {
88
87
return out ;
89
88
} ;
90
89
90
+ function ensureCommitted ( ctrl ) {
91
+ const r = ctrl && ctrl . renderer ;
92
+ return r && typeof r . confirmChange === "function"
93
+ ? r . confirmChange ( )
94
+ : Promise . resolve ( ) ;
95
+ }
96
+
91
97
function refreshBanners ( ctrl ) {
92
- if ( ! alive ( ctrl ) ) return ;
93
- var st = ctrl . model && ctrl . handle ? ctrl . model . get ( ctrl . handle ) : null ;
94
- var resId = st && st . res_id ;
98
+ return ensureCommitted ( ctrl ) . then ( ( ) => {
99
+ if ( ! alive ( ctrl ) ) return ;
100
+ var st = ctrl . model && ctrl . handle ? ctrl . model . get ( ctrl . handle ) : null ;
101
+ var resId = st && st . res_id ;
95
102
96
- // Sanitize snapshots
97
- var snap = shrinkDraft ( st && st . data ) || { } ;
98
- var diff = resId ? shrinkDraft ( st && st . changes ) || { } : { } ;
103
+ // Sanitize snapshots
104
+ var snap = shrinkDraft ( st && st . data ) || { } ;
105
+ var diff = resId ? shrinkDraft ( st && st . changes ) || { } : { } ;
99
106
100
- // For existing: include current values for trigger fields, then overlay diffs
101
- var tset = triggerSet ( ctrl ) ;
102
- var formVals = ! resId
103
- ? snap
104
- : Object . keys ( tset ) . length
105
- ? pickKeys ( snap , tset )
106
- : { } ;
107
- Object . keys ( diff ) . forEach ( function ( k ) {
108
- formVals [ k ] = diff [ k ] ;
109
- } ) ;
107
+ // For existing: include current values for trigger fields, then overlay diffs
108
+ var tset = triggerSet ( ctrl ) ;
109
+ var formVals = ! resId
110
+ ? snap
111
+ : Object . keys ( tset ) . length
112
+ ? pickKeys ( snap , tset )
113
+ : { } ;
114
+ Object . keys ( diff ) . forEach ( function ( k ) {
115
+ formVals [ k ] = diff [ k ] ;
116
+ } ) ;
110
117
111
- var els = bannersIn ( ctrl ) ;
112
- for ( var i = 0 ; i < els . length ; i ++ ) {
113
- var el = els [ i ] ;
114
- var ruleId = parseInt ( first ( el . dataset . ruleId , el . dataset . wfbRuleId ) , 10 ) ;
115
- var model = first ( el . dataset . model , el . dataset . wfbModel , ctrl . modelName ) ;
118
+ var els = bannersIn ( ctrl ) ;
119
+ for ( var i = 0 ; i < els . length ; i ++ ) {
120
+ var el = els [ i ] ;
121
+ var ruleId = parseInt (
122
+ first ( el . dataset . ruleId , el . dataset . wfbRuleId ) ,
123
+ 10
124
+ ) ;
125
+ var model = first (
126
+ el . dataset . model ,
127
+ el . dataset . wfbModel ,
128
+ ctrl . modelName
129
+ ) ;
116
130
117
- ( function ( elRef ) {
118
- rpc . query ( {
119
- model : "web.form.banner.rule" ,
120
- method : "compute_message" ,
121
- args : [ ruleId , model , resId , formVals ] ,
122
- } ) . then ( function ( res ) {
123
- if ( ! alive ( ctrl ) ) return ;
124
- res = res || { } ;
125
- if ( ! res . visible ) {
126
- elRef . style . display = "none" ;
127
- var sp0 = childSpan ( elRef ) ;
128
- if ( sp0 ) sp0 . innerHTML = "" ;
129
- else elRef . innerHTML = "" ;
130
- return ;
131
- }
132
- var sev = first (
133
- res . severity ,
134
- elRef . dataset . defaultSeverity ,
135
- "danger"
136
- ) ;
137
- var html = res . html || "" ;
138
- elRef . className = "o_form_banner alert alert-" + sev ;
139
- var sp = childSpan ( elRef ) ;
140
- if ( sp ) sp . innerHTML = html ;
141
- else elRef . innerHTML = html ;
142
- elRef . style . display = "" ;
143
- } ) ;
144
- } ) ( el ) ;
145
- }
131
+ ( function ( elRef ) {
132
+ rpc . query ( {
133
+ model : "web.form.banner.rule" ,
134
+ method : "compute_message" ,
135
+ args : [ ruleId , model , resId , formVals ] ,
136
+ } ) . then ( function ( res ) {
137
+ if ( ! alive ( ctrl ) ) return ;
138
+ res = res || { } ;
139
+ if ( ! res . visible ) {
140
+ elRef . style . display = "none" ;
141
+ var sp0 = childSpan ( elRef ) ;
142
+ if ( sp0 ) sp0 . innerHTML = "" ;
143
+ else elRef . innerHTML = "" ;
144
+ return ;
145
+ }
146
+ var sev = first (
147
+ res . severity ,
148
+ elRef . dataset . defaultSeverity ,
149
+ "danger"
150
+ ) ;
151
+ var html = res . html || "" ;
152
+ elRef . className = "o_form_banner alert alert-" + sev ;
153
+ var sp = childSpan ( elRef ) ;
154
+ if ( sp ) sp . innerHTML = html ;
155
+ else elRef . innerHTML = html ;
156
+ elRef . style . display = "" ;
157
+ } ) ;
158
+ } ) ( el ) ;
159
+ }
160
+ } ) ;
146
161
}
147
162
148
163
function withRefresh ( ctrl , superFn , args ) {
0 commit comments