@mindful-web/marko-web-identity-x 1.87.0 → 1.87.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/access.marko.js +2 -2
- package/components/comment-stream.marko.js +2 -2
- package/components/context.marko.js +2 -2
- package/components/form-access.marko.js +2 -2
- package/components/form-authenticate.marko.js +2 -2
- package/components/form-change-email.marko.js +2 -2
- package/components/form-login.marko.js +2 -2
- package/components/form-logout.marko.js +2 -2
- package/components/form-profile.marko.js +2 -2
- package/components/form-register.marko.js +2 -2
- package/components/google-init.marko.js +2 -2
- package/components/google-sign-in-button.marko.js +2 -2
- package/components/identify.marko.js +2 -2
- package/components/non-auth-identify.marko.js +2 -2
- package/components/progressive-profile-form.marko.js +2 -2
- package/components/subscribe.marko.js +2 -2
- package/package.json +2 -2
- package/routes/profile.js +13 -1
- package/test/utils/overlay-submitted-boolean-answers.spec.js +52 -0
- package/utils/overlay-submitted-boolean-answers.js +37 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/access.marko",
|
|
6
6
|
marko_component = require("./access.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -53,7 +53,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
53
53
|
}, marko_component);
|
|
54
54
|
|
|
55
55
|
marko_template.meta = {
|
|
56
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
56
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/access.marko",
|
|
57
57
|
component: "./access.marko",
|
|
58
58
|
tags: [
|
|
59
59
|
"@mindful-web/marko-core/components/resolve.marko"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/comment-stream.marko",
|
|
6
6
|
marko_component = require("./comment-stream.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -91,7 +91,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
91
91
|
}, marko_component);
|
|
92
92
|
|
|
93
93
|
marko_template.meta = {
|
|
94
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
94
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/comment-stream.marko",
|
|
95
95
|
component: "./comment-stream.marko",
|
|
96
96
|
tags: [
|
|
97
97
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/context.marko",
|
|
6
6
|
marko_component = require("./context.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
marko_dynamicTag = require("marko/dist/runtime/helpers/dynamic-tag"),
|
|
@@ -49,7 +49,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
49
49
|
}, marko_component);
|
|
50
50
|
|
|
51
51
|
marko_template.meta = {
|
|
52
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
52
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/context.marko",
|
|
53
53
|
component: "./context.marko",
|
|
54
54
|
tags: [
|
|
55
55
|
"@mindful-web/marko-core/components/resolve.marko"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-access.marko",
|
|
6
6
|
marko_component = require("./form-access.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_defaultValue = require("@mindful-web/marko-core/utils/default-value"),
|
|
@@ -179,7 +179,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
179
179
|
}, marko_component);
|
|
180
180
|
|
|
181
181
|
marko_template.meta = {
|
|
182
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
182
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-access.marko",
|
|
183
183
|
component: "./form-access.marko",
|
|
184
184
|
tags: [
|
|
185
185
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-authenticate.marko",
|
|
6
6
|
marko_component = require("./form-authenticate.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -81,7 +81,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
81
81
|
}, marko_component);
|
|
82
82
|
|
|
83
83
|
marko_template.meta = {
|
|
84
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
84
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-authenticate.marko",
|
|
85
85
|
component: "./form-authenticate.marko",
|
|
86
86
|
tags: [
|
|
87
87
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-change-email.marko",
|
|
6
6
|
marko_component = require("./form-change-email.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -59,7 +59,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
59
59
|
}, marko_component);
|
|
60
60
|
|
|
61
61
|
marko_template.meta = {
|
|
62
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
62
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-change-email.marko",
|
|
63
63
|
component: "./form-change-email.marko",
|
|
64
64
|
tags: [
|
|
65
65
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-login.marko",
|
|
6
6
|
marko_component = require("./form-login.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -92,7 +92,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
92
92
|
}, marko_component);
|
|
93
93
|
|
|
94
94
|
marko_template.meta = {
|
|
95
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
95
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-login.marko",
|
|
96
96
|
component: "./form-login.marko",
|
|
97
97
|
tags: [
|
|
98
98
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-logout.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
module_defaultValue = require("@mindful-web/marko-core/utils/default-value"),
|
|
8
8
|
defaultValue = module_defaultValue.default || module_defaultValue,
|
|
@@ -29,7 +29,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
marko_template.meta = {
|
|
32
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
32
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-logout.marko",
|
|
33
33
|
tags: [
|
|
34
34
|
"@mindful-web/marko-web/components/browser-component.marko"
|
|
35
35
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-profile.marko",
|
|
6
6
|
marko_component = require("./form-profile.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -84,7 +84,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
84
84
|
}, marko_component);
|
|
85
85
|
|
|
86
86
|
marko_template.meta = {
|
|
87
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
87
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-profile.marko",
|
|
88
88
|
component: "./form-profile.marko",
|
|
89
89
|
tags: [
|
|
90
90
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/form-register.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
marko_assign = require("marko/dist/runtime/helpers/assign"),
|
|
8
8
|
marko_web_identity_x_form_login_template = require("./form-login.marko"),
|
|
@@ -25,7 +25,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
marko_template.meta = {
|
|
28
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
28
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/form-register.marko",
|
|
29
29
|
tags: [
|
|
30
30
|
"./form-login.marko"
|
|
31
31
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/google-init.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
marko_attr = require("marko/dist/runtime/html/helpers/attr"),
|
|
8
8
|
marko_str = require("marko/dist/runtime/helpers/to-string");
|
|
@@ -239,5 +239,5 @@ marko_template._ = marko_renderer(render, {
|
|
|
239
239
|
});
|
|
240
240
|
|
|
241
241
|
marko_template.meta = {
|
|
242
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
242
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/google-init.marko"
|
|
243
243
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/google-sign-in-button.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
helpers_escape_xml = require("marko/dist/runtime/html/helpers/escape-xml"),
|
|
8
8
|
marko_escapeXml = helpers_escape_xml.x,
|
|
@@ -40,5 +40,5 @@ marko_template._ = marko_renderer(render, {
|
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
marko_template.meta = {
|
|
43
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
43
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/google-sign-in-button.marko"
|
|
44
44
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/identify.marko",
|
|
6
6
|
marko_component = require("./identify.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -50,7 +50,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
50
50
|
}, marko_component);
|
|
51
51
|
|
|
52
52
|
marko_template.meta = {
|
|
53
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
53
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/identify.marko",
|
|
54
54
|
component: "./identify.marko",
|
|
55
55
|
tags: [
|
|
56
56
|
"@mindful-web/marko-web-gtm/components/push.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/non-auth-identify.marko",
|
|
6
6
|
marko_component = require("./non-auth-identify.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
marko_dynamicTag = require("marko/dist/runtime/helpers/dynamic-tag"),
|
|
@@ -45,7 +45,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
45
45
|
}, marko_component);
|
|
46
46
|
|
|
47
47
|
marko_template.meta = {
|
|
48
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
48
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/non-auth-identify.marko",
|
|
49
49
|
component: "./non-auth-identify.marko",
|
|
50
50
|
tags: [
|
|
51
51
|
"@mindful-web/marko-core/components/resolve.marko"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/progressive-profile-form.marko",
|
|
6
6
|
marko_component = require("./progressive-profile-form.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_defaultValue = require("@mindful-web/marko-core/utils/default-value"),
|
|
@@ -137,7 +137,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
137
137
|
}, marko_component);
|
|
138
138
|
|
|
139
139
|
marko_template.meta = {
|
|
140
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
140
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/progressive-profile-form.marko",
|
|
141
141
|
component: "./progressive-profile-form.marko",
|
|
142
142
|
tags: [
|
|
143
143
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.87.1/components/subscribe.marko",
|
|
6
6
|
marko_component = require("./subscribe.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -73,7 +73,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
73
73
|
}, marko_component);
|
|
74
74
|
|
|
75
75
|
marko_template.meta = {
|
|
76
|
-
id: "/@mindful-web/marko-web-identity-x$1.87.
|
|
76
|
+
id: "/@mindful-web/marko-web-identity-x$1.87.1/components/subscribe.marko",
|
|
77
77
|
component: "./subscribe.marko",
|
|
78
78
|
tags: [
|
|
79
79
|
"@mindful-web/marko-web/components/browser-component.marko",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mindful-web/marko-web-identity-x",
|
|
3
|
-
"version": "1.87.
|
|
3
|
+
"version": "1.87.1",
|
|
4
4
|
"description": "Marko Wrapper for IdentityX",
|
|
5
5
|
"repository": "https://github.com/parameter1/mindful-web/tree/main/packages/marko-web-identity-x",
|
|
6
6
|
"author": "Josh Worden <josh@parameter1.com>",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"chai": "^4.3.7",
|
|
44
44
|
"mocha": "^6.2.3"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "c9fef30dc3d3dbf2c538e3850fae61f629b8791d"
|
|
47
47
|
}
|
package/routes/profile.js
CHANGED
|
@@ -3,6 +3,7 @@ const { asyncRoute } = require('@mindful-web/utils');
|
|
|
3
3
|
const { getAsArray, getAsObject } = require('@mindful-web/object-path');
|
|
4
4
|
const userFragment = require('../api/fragments/active-user');
|
|
5
5
|
const callHooksFor = require('../utils/call-hooks-for');
|
|
6
|
+
const overlaySubmittedBooleanAnswers = require('../utils/overlay-submitted-boolean-answers');
|
|
6
7
|
|
|
7
8
|
const mutation = gql`
|
|
8
9
|
mutation UpdateUserProfile($input: UpdateOwnAppUserMutationInput!) {
|
|
@@ -119,6 +120,10 @@ module.exports = asyncRoute(async (req, res) => {
|
|
|
119
120
|
// syncs (Omeda rapid-identify) scope their answer payload to what the form displayed — stored
|
|
120
121
|
// answers for fields this form never rendered must not be rebroadcast as writes.
|
|
121
122
|
const submittedFieldIds = [];
|
|
123
|
+
// The boolean values this request submitted, by field id — overlaid onto the refreshed user
|
|
124
|
+
// before the hooks fire (see overlaySubmittedBooleanAnswers for the one-save-behind race this
|
|
125
|
+
// guards against).
|
|
126
|
+
const submittedBooleanValues = new Map();
|
|
122
127
|
|
|
123
128
|
if (customBooleanFieldAnswers.length) {
|
|
124
129
|
// only update custom questions when there some :)
|
|
@@ -133,6 +138,9 @@ module.exports = asyncRoute(async (req, res) => {
|
|
|
133
138
|
: () => true,
|
|
134
139
|
);
|
|
135
140
|
submittedFieldIds.push(...customBooleanFieldsInput.map(({ fieldId }) => fieldId));
|
|
141
|
+
customBooleanFieldsInput.forEach(({ fieldId, value }) => {
|
|
142
|
+
submittedBooleanValues.set(fieldId, value);
|
|
143
|
+
});
|
|
136
144
|
await identityX.client.mutate({
|
|
137
145
|
mutation: customBooleanFieldsMutation,
|
|
138
146
|
variables: { input: { answers: customBooleanFieldsInput } },
|
|
@@ -184,7 +192,11 @@ module.exports = asyncRoute(async (req, res) => {
|
|
|
184
192
|
additionalEventData,
|
|
185
193
|
...(additionalEventData || {}),
|
|
186
194
|
req,
|
|
187
|
-
user
|
|
195
|
+
// The refreshed user can carry PRE-save channel checkbox answers (they resolve from the
|
|
196
|
+
// member doc's embedded subscription copy, which materializes asynchronously) — so the
|
|
197
|
+
// values this request submitted are overlaid, ensuring provider hooks push what the user
|
|
198
|
+
// just said rather than unsubscribing them with their own stale state.
|
|
199
|
+
user: overlaySubmittedBooleanAnswers(user, submittedBooleanValues),
|
|
188
200
|
submittedFieldIds,
|
|
189
201
|
});
|
|
190
202
|
const entity = await identityX.generateEntityId({ userId: user.id });
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const { describe, it } = require('mocha');
|
|
2
|
+
const { expect } = require('chai');
|
|
3
|
+
const overlay = require('../../utils/overlay-submitted-boolean-answers');
|
|
4
|
+
|
|
5
|
+
const answer = ({ id, value, hasAnswered = true }) => ({
|
|
6
|
+
id: `ans-${id}`,
|
|
7
|
+
hasAnswered,
|
|
8
|
+
answer: value,
|
|
9
|
+
value,
|
|
10
|
+
field: { id, active: true },
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
describe('utils/overlay-submitted-boolean-answers', () => {
|
|
14
|
+
it('replaces a stale answer with the submitted value (the one-save-behind race)', () => {
|
|
15
|
+
// The member checked the box; the refreshed user still carries the pre-save `false`.
|
|
16
|
+
const user = {
|
|
17
|
+
email: 'x@y.com',
|
|
18
|
+
customBooleanFieldAnswers: [answer({ id: 'chan-mag', value: false })],
|
|
19
|
+
};
|
|
20
|
+
const out = overlay(user, new Map([['chan-mag', true]]));
|
|
21
|
+
expect(out.customBooleanFieldAnswers[0])
|
|
22
|
+
.to.include({ answer: true, value: true, hasAnswered: true });
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('answers a previously-unanswered field the request submitted', () => {
|
|
26
|
+
const unanswered = { field: { id: 'chan-new', active: true } };
|
|
27
|
+
const user = { customBooleanFieldAnswers: [unanswered] };
|
|
28
|
+
const out = overlay(user, new Map([['chan-new', false]]));
|
|
29
|
+
expect(out.customBooleanFieldAnswers[0])
|
|
30
|
+
.to.include({ answer: false, value: false, hasAnswered: true });
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('leaves answers for fields the request did not submit untouched', () => {
|
|
34
|
+
const untouched = answer({ id: 'other', value: true });
|
|
35
|
+
const user = { customBooleanFieldAnswers: [untouched, answer({ id: 'chan-mag', value: false })] };
|
|
36
|
+
const out = overlay(user, new Map([['chan-mag', true]]));
|
|
37
|
+
expect(out.customBooleanFieldAnswers[0]).to.equal(untouched);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('returns the same user when nothing was submitted', () => {
|
|
41
|
+
const user = { customBooleanFieldAnswers: [answer({ id: 'a', value: true })] };
|
|
42
|
+
expect(overlay(user, new Map())).to.equal(user);
|
|
43
|
+
expect(overlay(user, undefined)).to.equal(user);
|
|
44
|
+
expect(overlay(null, new Map([['a', true]]))).to.equal(null);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('does not mutate the original user', () => {
|
|
48
|
+
const user = { customBooleanFieldAnswers: [answer({ id: 'chan-mag', value: false })] };
|
|
49
|
+
overlay(user, new Map([['chan-mag', true]]));
|
|
50
|
+
expect(user.customBooleanFieldAnswers[0].answer).to.equal(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const { getAsArray } = require('@mindful-web/object-path');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns a copy of the user whose `customBooleanFieldAnswers` reflect the values THIS request
|
|
5
|
+
* submitted, overriding whatever the refreshed user carries for those fields.
|
|
6
|
+
*
|
|
7
|
+
* Why this exists (the one-save-behind race, proven live 2026-08-25 on athleticbusiness):
|
|
8
|
+
* channel checkbox writes land in the audience `subscriptions` COLLECTION, but the boolean
|
|
9
|
+
* answers on a fetched user resolve from the member document's EMBEDDED subscription copy,
|
|
10
|
+
* which only catches up via an async materialization queue. So the user returned by the
|
|
11
|
+
* profile route's final mutation can still carry the PRE-save checkbox state — idx stored
|
|
12
|
+
* `true` while the provider hook pushed `Receive: 0` to Omeda one second later. Overlaying the
|
|
13
|
+
* submitted values means provider syncs push what the user just said, not what the
|
|
14
|
+
* materializer has caught up to.
|
|
15
|
+
*
|
|
16
|
+
* @param {object} user The (possibly stale) user returned after the save.
|
|
17
|
+
* @param {Map<string, boolean>} submittedValues field id -> submitted boolean value.
|
|
18
|
+
* @returns {object} The user, with submitted boolean answers overlaid. Same reference when
|
|
19
|
+
* nothing was submitted.
|
|
20
|
+
*/
|
|
21
|
+
module.exports = (user, submittedValues) => {
|
|
22
|
+
if (!user || !submittedValues || !submittedValues.size) return user;
|
|
23
|
+
return {
|
|
24
|
+
...user,
|
|
25
|
+
customBooleanFieldAnswers: getAsArray(user, 'customBooleanFieldAnswers').map((ans) => {
|
|
26
|
+
const fieldId = ans && ans.field && ans.field.id;
|
|
27
|
+
if (!fieldId || !submittedValues.has(fieldId)) return ans;
|
|
28
|
+
const value = Boolean(submittedValues.get(fieldId));
|
|
29
|
+
return {
|
|
30
|
+
...ans,
|
|
31
|
+
answer: value,
|
|
32
|
+
value,
|
|
33
|
+
hasAnswered: true,
|
|
34
|
+
};
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
};
|