@zengenti/contensis-react-base 3.0.2-beta.3 → 3.0.2-beta.31
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/cjs/{App-5b34574e.js → App-21a7d836.js} +118 -433
- package/cjs/App-21a7d836.js.map +1 -0
- package/cjs/ContensisDeliveryApi-c079b03a.js +231 -0
- package/cjs/ContensisDeliveryApi-c079b03a.js.map +1 -0
- package/cjs/{RouteLoader-3aa6456e.js → RouteLoader-7f0d107a.js} +23 -37
- package/{esm/RouteLoader-5171c63f.js.map → cjs/RouteLoader-7f0d107a.js.map} +1 -1
- package/cjs/{ToJs-a9a8522b.js → ToJs-6e9cfa69.js} +3 -4
- package/cjs/{ToJs-a9a8522b.js.map → ToJs-6e9cfa69.js.map} +1 -1
- package/cjs/client.js +20 -27
- package/cjs/client.js.map +1 -1
- package/cjs/contensis-react-base.js +131 -191
- package/cjs/contensis-react-base.js.map +1 -1
- package/cjs/forms.js +1508 -275
- package/cjs/forms.js.map +1 -1
- package/cjs/{fromJSLeaveImmer-e74c673c.js → fromJSLeaveImmer-7c363211.js} +1 -4
- package/cjs/{fromJSLeaveImmer-e74c673c.js.map → fromJSLeaveImmer-7c363211.js.map} +1 -1
- package/cjs/{login-840860bc.js → login-2a6b5be0.js} +64 -113
- package/cjs/login-2a6b5be0.js.map +1 -0
- package/cjs/{reducers-3a4f8971.js → reducers-9afb5f89.js} +14 -31
- package/cjs/reducers-9afb5f89.js.map +1 -0
- package/cjs/redux.js +17 -17
- package/cjs/redux.js.map +1 -1
- package/cjs/routing.js +6 -7
- package/cjs/routing.js.map +1 -1
- package/cjs/{sagas-8a20e424.js → sagas-e04b94c1.js} +225 -301
- package/cjs/sagas-e04b94c1.js.map +1 -0
- package/cjs/search.js +68 -94
- package/cjs/search.js.map +1 -1
- package/cjs/{selectors-656da4b7.js → selectors-bcca60f4.js} +89 -8
- package/cjs/selectors-bcca60f4.js.map +1 -0
- package/cjs/urls-6fcaf4c6.js.map +1 -1
- package/cjs/user.js +4 -13
- package/cjs/user.js.map +1 -1
- package/cjs/util.js +45 -53
- package/cjs/util.js.map +1 -1
- package/cjs/{version-78dfc3bd.js → version-4077e706.js} +50 -159
- package/cjs/version-4077e706.js.map +1 -0
- package/cjs/version-fe28099e.js +98 -0
- package/cjs/version-fe28099e.js.map +1 -0
- package/esm/{App-707730d3.js → App-2af18a99.js} +100 -413
- package/esm/App-2af18a99.js.map +1 -0
- package/esm/ContensisDeliveryApi-5660ee0e.js +227 -0
- package/esm/ContensisDeliveryApi-5660ee0e.js.map +1 -0
- package/esm/{RouteLoader-5171c63f.js → RouteLoader-6eac364e.js} +22 -36
- package/{cjs/RouteLoader-3aa6456e.js.map → esm/RouteLoader-6eac364e.js.map} +1 -1
- package/esm/{ToJs-4e02a04d.js → ToJs-9b30636a.js} +3 -4
- package/esm/{ToJs-4e02a04d.js.map → ToJs-9b30636a.js.map} +1 -1
- package/esm/client.js +15 -22
- package/esm/client.js.map +1 -1
- package/esm/contensis-react-base.js +126 -186
- package/esm/contensis-react-base.js.map +1 -1
- package/esm/forms.js +1510 -277
- package/esm/forms.js.map +1 -1
- package/esm/{fromJSLeaveImmer-0114ffcf.js → fromJSLeaveImmer-e2dacd63.js} +1 -4
- package/esm/{fromJSLeaveImmer-0114ffcf.js.map → fromJSLeaveImmer-e2dacd63.js.map} +1 -1
- package/esm/{login-57395c9c.js → login-71ff3fcb.js} +63 -112
- package/esm/login-71ff3fcb.js.map +1 -0
- package/esm/{reducers-8e5d6232.js → reducers-3d5c37d1.js} +14 -31
- package/esm/reducers-3d5c37d1.js.map +1 -0
- package/esm/redux.js +9 -8
- package/esm/redux.js.map +1 -1
- package/esm/routing.js +3 -4
- package/esm/routing.js.map +1 -1
- package/esm/{sagas-e576b6f6.js → sagas-933a8fc8.js} +177 -254
- package/esm/sagas-933a8fc8.js.map +1 -0
- package/esm/search.js +69 -95
- package/esm/search.js.map +1 -1
- package/esm/{selectors-a5e5835b.js → selectors-74de49a3.js} +75 -8
- package/esm/selectors-74de49a3.js.map +1 -0
- package/esm/urls-eac9a747.js.map +1 -1
- package/esm/user.js +6 -15
- package/esm/user.js.map +1 -1
- package/esm/util.js +42 -53
- package/esm/util.js.map +1 -1
- package/esm/version-b15807c5.js +87 -0
- package/esm/version-b15807c5.js.map +1 -0
- package/esm/{version-e3a5ec66.js → version-ef107106.js} +37 -142
- package/esm/version-ef107106.js.map +1 -0
- package/models/redux/appstate.d.ts +1 -0
- package/models/routing/redux/selectors.d.ts +2 -1
- package/models/search/models/Queries.d.ts +2 -1
- package/models/search/models/Search.d.ts +2 -0
- package/models/search/models/SearchActions.d.ts +3 -3
- package/models/search/redux/actions.d.ts +6 -6
- package/models/search/redux/util.d.ts +1 -1
- package/models/search/search/expressions.d.ts +1 -1
- package/models/server/features/linkdepth-api/search.d.ts +1 -1
- package/models/util/ContensisDeliveryApi.d.ts +6 -0
- package/models/util/index.d.ts +1 -0
- package/package.json +1 -1
- package/cjs/App-5b34574e.js.map +0 -1
- package/cjs/actions-8dc9e8de.js +0 -87
- package/cjs/actions-8dc9e8de.js.map +0 -1
- package/cjs/login-840860bc.js.map +0 -1
- package/cjs/reducers-3a4f8971.js.map +0 -1
- package/cjs/sagas-8a20e424.js.map +0 -1
- package/cjs/selectors-656da4b7.js.map +0 -1
- package/cjs/version-78dfc3bd.js.map +0 -1
- package/cjs/version-eba6d09b.js +0 -20
- package/cjs/version-eba6d09b.js.map +0 -1
- package/esm/App-707730d3.js.map +0 -1
- package/esm/actions-180948dd.js +0 -72
- package/esm/actions-180948dd.js.map +0 -1
- package/esm/login-57395c9c.js.map +0 -1
- package/esm/reducers-8e5d6232.js.map +0 -1
- package/esm/sagas-e576b6f6.js.map +0 -1
- package/esm/selectors-a5e5835b.js.map +0 -1
- package/esm/version-2485e2fb.js +0 -15
- package/esm/version-2485e2fb.js.map +0 -1
- package/esm/version-e3a5ec66.js.map +0 -1
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
var history$1 = require('history');
|
|
4
4
|
var effects = require('@redux-saga/core/effects');
|
|
5
5
|
var log = require('loglevel');
|
|
6
|
+
var ContensisDeliveryApi = require('./ContensisDeliveryApi-c079b03a.js');
|
|
7
|
+
var version = require('./version-4077e706.js');
|
|
8
|
+
var version$1 = require('./version-fe28099e.js');
|
|
9
|
+
var selectors = require('./selectors-bcca60f4.js');
|
|
10
|
+
var login = require('./login-2a6b5be0.js');
|
|
6
11
|
var contensisDeliveryApi = require('contensis-delivery-api');
|
|
7
|
-
var queryString = require('query-string');
|
|
8
|
-
var actions = require('./actions-8dc9e8de.js');
|
|
9
|
-
var version = require('./version-78dfc3bd.js');
|
|
10
|
-
var version$1 = require('./version-eba6d09b.js');
|
|
11
|
-
var selectors = require('./selectors-656da4b7.js');
|
|
12
|
-
var login = require('./login-840860bc.js');
|
|
13
12
|
var awaitToJs = require('await-to-js');
|
|
14
|
-
var reducers = require('./reducers-
|
|
15
|
-
var ToJs = require('./ToJs-
|
|
13
|
+
var reducers = require('./reducers-9afb5f89.js');
|
|
14
|
+
var ToJs = require('./ToJs-6e9cfa69.js');
|
|
16
15
|
var React = require('react');
|
|
17
16
|
require('react-hot-loader');
|
|
18
17
|
require('jsonpath-mapper');
|
|
19
|
-
|
|
18
|
+
require('query-string');
|
|
19
|
+
var RouteLoader = require('./RouteLoader-7f0d107a.js');
|
|
20
20
|
|
|
21
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
22
22
|
|
|
@@ -41,279 +41,7 @@ function _interopNamespace(e) {
|
|
|
41
41
|
var log__namespace = /*#__PURE__*/_interopNamespace(log);
|
|
42
42
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
const keys = response.headers.get ? response.headers.get('surrogate-key') : response.headers.map['surrogate-key'];
|
|
46
|
-
if (keys) version.reduxStore === null || version.reduxStore === void 0 ? void 0 : version.reduxStore.dispatch(actions.setSurrogateKeys(keys, response.url));
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const getClientConfig = project => {
|
|
50
|
-
let config = DELIVERY_API_CONFIG;
|
|
51
|
-
/* global DELIVERY_API_CONFIG */
|
|
52
|
-
|
|
53
|
-
config.responseHandler = {};
|
|
54
|
-
|
|
55
|
-
if (project) {
|
|
56
|
-
config.projectId = project;
|
|
57
|
-
} // we only want the surrogate key header in a server context
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (typeof window === 'undefined') {
|
|
61
|
-
config.defaultHeaders = {
|
|
62
|
-
'x-require-surrogate-key': true
|
|
63
|
-
};
|
|
64
|
-
config.responseHandler[200] = storeSurrogateKeys;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (typeof window !== 'undefined' && PROXY_DELIVERY_API
|
|
68
|
-
/* global PROXY_DELIVERY_API */
|
|
69
|
-
) {
|
|
70
|
-
// ensure a relative url is used to bypass the need for CORS (separate OPTIONS calls)
|
|
71
|
-
config.rootUrl = '';
|
|
72
|
-
|
|
73
|
-
config.responseHandler[404] = () => null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return config;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
class DeliveryApi {
|
|
80
|
-
constructor() {
|
|
81
|
-
this.getClientSideVersionStatus = () => {
|
|
82
|
-
if (typeof window !== 'undefined') {
|
|
83
|
-
// Allow overriding versionStatus with the querystring
|
|
84
|
-
const {
|
|
85
|
-
versionStatus
|
|
86
|
-
} = queryString.parse(window.location.search);
|
|
87
|
-
if (versionStatus) return versionStatus; // Client-side we will have a global variable set if rendered by SSR in production
|
|
88
|
-
|
|
89
|
-
if (typeof window.versionStatus !== 'undefined') return window.versionStatus; // For localhost development we can only work out versionStatus from the current hostname
|
|
90
|
-
|
|
91
|
-
const currentHostname = window.location.hostname;
|
|
92
|
-
return this.getVersionStatusFromHostname(currentHostname);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return null;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
this.getServerSideVersionStatus = request => request.query.versionStatus || deliveryApi.getVersionStatusFromHeaders(request.headers) || deliveryApi.getVersionStatusFromHostname(request.hostname);
|
|
99
|
-
|
|
100
|
-
this.getVersionStatusFromHeaders = headers => {
|
|
101
|
-
const versionStatusHeader = headers['x-entry-versionstatus'];
|
|
102
|
-
if (typeof versionStatusHeader !== 'undefined') return versionStatusHeader;
|
|
103
|
-
return null;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
this.getVersionStatusFromHostname = currentHostname => {
|
|
107
|
-
if (currentHostname.indexOf('localhost') > -1) return 'latest';
|
|
108
|
-
|
|
109
|
-
if (currentHostname.endsWith('contensis.cloud')) {
|
|
110
|
-
if (currentHostname.indexOf('preview.') > -1) {
|
|
111
|
-
return 'latest';
|
|
112
|
-
} else {
|
|
113
|
-
return 'published';
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (currentHostname.endsWith('cloud.contensis.com')) {
|
|
118
|
-
if (currentHostname.indexOf('preview-') > -1) {
|
|
119
|
-
return 'latest';
|
|
120
|
-
} else {
|
|
121
|
-
return 'published';
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return 'published';
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
this.search = (query, linkDepth, project, env) => {
|
|
129
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
130
|
-
return client.entries.search(query, typeof linkDepth !== 'undefined' ? linkDepth : 1);
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
this.getClient = (deliveryApiStatus = 'published', project, env) => {
|
|
134
|
-
const baseConfig = getClientConfig(project);
|
|
135
|
-
baseConfig.versionStatus = deliveryApiStatus;
|
|
136
|
-
return contensisDeliveryApi.Client.create(baseConfig);
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
this.getEntry = (id, linkDepth = 0, deliveryApiStatus = 'published', project, env) => {
|
|
140
|
-
const baseConfig = getClientConfig(project);
|
|
141
|
-
baseConfig.versionStatus = deliveryApiStatus;
|
|
142
|
-
const client = contensisDeliveryApi.Client.create(baseConfig); // return client.entries.get(id, linkDepth);
|
|
143
|
-
|
|
144
|
-
return client.entries.get({
|
|
145
|
-
id,
|
|
146
|
-
linkDepth
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const deliveryApi = new DeliveryApi();
|
|
154
|
-
|
|
155
|
-
class CacheNode {
|
|
156
|
-
constructor(key, value) {
|
|
157
|
-
this.key = key;
|
|
158
|
-
this.value = value;
|
|
159
|
-
this.next = null;
|
|
160
|
-
this.prev = null;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
class LruCache {
|
|
166
|
-
constructor(limit = 100) {
|
|
167
|
-
this.map = {};
|
|
168
|
-
this.head = null;
|
|
169
|
-
this.tail = null;
|
|
170
|
-
this.limit = limit || 100;
|
|
171
|
-
this.size = 0;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
get(key) {
|
|
175
|
-
if (this.map[key]) {
|
|
176
|
-
let value = this.map[key].value;
|
|
177
|
-
let node = new CacheNode(key, value);
|
|
178
|
-
this.remove(key);
|
|
179
|
-
this.setHead(node);
|
|
180
|
-
return value;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
set(key, value) {
|
|
185
|
-
let node = new CacheNode(key, value);
|
|
186
|
-
|
|
187
|
-
if (this.map[key]) {
|
|
188
|
-
this.remove(key);
|
|
189
|
-
} else {
|
|
190
|
-
if (this.size >= this.limit) {
|
|
191
|
-
delete this.map[this.tail.key];
|
|
192
|
-
this.size--;
|
|
193
|
-
this.tail = this.tail.prev;
|
|
194
|
-
this.tail.next = null;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
this.setHead(node);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
setHead(node) {
|
|
202
|
-
node.next = this.head;
|
|
203
|
-
node.prev = null;
|
|
204
|
-
|
|
205
|
-
if (this.head) {
|
|
206
|
-
this.head.prev = node;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
this.head = node;
|
|
210
|
-
|
|
211
|
-
if (!this.tail) {
|
|
212
|
-
this.tail = node;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
this.size++;
|
|
216
|
-
this.map[node.key] = node;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
remove(key) {
|
|
220
|
-
let node = this.map[key];
|
|
221
|
-
if (!node) return; // This is sometimes null and crashes the container without this check
|
|
222
|
-
|
|
223
|
-
if (node.prev) {
|
|
224
|
-
node.prev.next = node.next;
|
|
225
|
-
} else {
|
|
226
|
-
this.head = node.next;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (node.next) {
|
|
230
|
-
node.next.prev = node.prev;
|
|
231
|
-
} else {
|
|
232
|
-
this.tail = node.prev;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
delete this.map[key];
|
|
236
|
-
this.size--;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
class CachedSearch {
|
|
242
|
-
constructor() {
|
|
243
|
-
this.cache = new LruCache();
|
|
244
|
-
this.taxonomyLookup = {};
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
search(query, linkDepth, project, env) {
|
|
248
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
249
|
-
return this.request(project + JSON.stringify(query) + linkDepth.toString(), () => client.entries.search(query, linkDepth));
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
searchUsingPost(query, linkDepth = 0, project = '', env) {
|
|
253
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
254
|
-
return this.request(project + JSON.stringify(query) + linkDepth.toString(), () => client.entries.searchUsingPost(query, linkDepth));
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
get(id, linkDepth, versionStatus, project, env) {
|
|
258
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
259
|
-
client.clientConfig.versionStatus = versionStatus;
|
|
260
|
-
return this.request(id, () => client.entries.get({
|
|
261
|
-
id,
|
|
262
|
-
linkDepth
|
|
263
|
-
}));
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
getContentType(id, project, env) {
|
|
267
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
268
|
-
return this.request(`[CONTENT TYPE] ${id} ${project}`, () => client.contentTypes.get(id));
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
getTaxonomyNode(key, project, env) {
|
|
272
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
273
|
-
return this.request(`[TAXONOMY NODE] ${key}`, () => client.taxonomy.resolveChildren(key).then(node => this.extendTaxonomyNode(node)));
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
getRootNode(options, project, env) {
|
|
277
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
278
|
-
return this.request(`${project} / ${JSON.stringify(options)}`, () => client.nodes.getRoot(options));
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
getNode(options, project, env) {
|
|
282
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
283
|
-
return this.request(`${project} ${options && options.path || options} ${JSON.stringify(options)}`, () => client.nodes.get(options));
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
getAncestors(options, project, env) {
|
|
287
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
288
|
-
return this.request(`${project} [A] ${options && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getAncestors(options));
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
getChildren(options, project, env) {
|
|
292
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
293
|
-
return this.request(`${project} [C] ${options && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getChildren(options));
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
getSiblings(options, project, env) {
|
|
297
|
-
const client = contensisDeliveryApi.Client.create(getClientConfig(project));
|
|
298
|
-
return this.request(`${project} [S] ${options && options.id || options} ${JSON.stringify(options)}`, () => client.nodes.getSiblings(options));
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
request(key, execute) {
|
|
302
|
-
if (!this.cache.get(key) || typeof window == 'undefined') {
|
|
303
|
-
let promise = execute();
|
|
304
|
-
this.cache.set(key, promise);
|
|
305
|
-
promise.catch(() => {
|
|
306
|
-
this.cache.remove(key);
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
return this.cache.get(key);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
const cachedSearch = new CachedSearch();
|
|
316
|
-
|
|
44
|
+
// Create a history depending on the environment
|
|
317
45
|
const selectedHistory = typeof window !== 'undefined' ? history$1.createBrowserHistory : history$1.createMemoryHistory;
|
|
318
46
|
const history = (options = {}) => selectedHistory(options);
|
|
319
47
|
const browserHistory = selectedHistory();
|
|
@@ -321,15 +49,14 @@ const browserHistory = selectedHistory();
|
|
|
321
49
|
const navigationSagas = [effects.takeEvery(version.GET_NODE_TREE, ensureNodeTreeSaga)];
|
|
322
50
|
function* ensureNodeTreeSaga(action) {
|
|
323
51
|
const state = yield effects.select();
|
|
324
|
-
|
|
325
52
|
try {
|
|
326
|
-
if (!version.hasNavigationTree(state)) {
|
|
327
|
-
const deliveryApiVersionStatus = yield effects.select(version
|
|
53
|
+
if (!version$1.hasNavigationTree(state)) {
|
|
54
|
+
const deliveryApiVersionStatus = yield effects.select(version.selectVersionStatus);
|
|
328
55
|
const project = yield effects.select(selectors.selectCurrentProject);
|
|
329
|
-
const nodes = yield deliveryApi.getClient(deliveryApiVersionStatus, project).nodes.getRoot({
|
|
330
|
-
depth: action.treeDepth || 0
|
|
56
|
+
const nodes = yield ContensisDeliveryApi.deliveryApi.getClient(deliveryApiVersionStatus, project).nodes.getRoot({
|
|
57
|
+
depth: action.treeDepth || 0,
|
|
58
|
+
language: action.language
|
|
331
59
|
});
|
|
332
|
-
|
|
333
60
|
if (nodes) {
|
|
334
61
|
yield effects.put({
|
|
335
62
|
type: version.SET_NODE_TREE,
|
|
@@ -376,7 +103,6 @@ const fieldExpression = (field, value, operator = 'equalTo', weight = null) => {
|
|
|
376
103
|
const defaultExpressions = versionStatus => {
|
|
377
104
|
return [contensisDeliveryApi.Op.equalTo(Fields.sys.versionStatus, versionStatus)];
|
|
378
105
|
};
|
|
379
|
-
|
|
380
106
|
const equalToOrIn = (field, arr, operator = 'equalTo') => arr.length === 0 ? [] : arr.length === 1 ? [contensisDeliveryApi.Op[operator](field, arr[0])] : [contensisDeliveryApi.Op.in(field, ...arr)];
|
|
381
107
|
|
|
382
108
|
const routeEntryByFieldsQuery = (id, language = 'en-GB', fields = [], versionStatus = 'published') => {
|
|
@@ -385,12 +111,12 @@ const routeEntryByFieldsQuery = (id, language = 'en-GB', fields = [], versionSta
|
|
|
385
111
|
return query;
|
|
386
112
|
};
|
|
387
113
|
|
|
388
|
-
const routingSagas = [effects.takeEvery(
|
|
114
|
+
const routingSagas = [effects.takeEvery(selectors.SET_NAVIGATION_PATH, getRouteSaga), effects.takeEvery(selectors.SET_ROUTE, setRouteSaga)];
|
|
115
|
+
|
|
389
116
|
/**
|
|
390
117
|
* To navigate / push a specific route via redux middleware
|
|
391
118
|
* @param {path, state} action
|
|
392
119
|
*/
|
|
393
|
-
|
|
394
120
|
function* setRouteSaga(action) {
|
|
395
121
|
yield effects.put({
|
|
396
122
|
type: 'CALL_HISTORY_METHOD',
|
|
@@ -400,37 +126,35 @@ function* setRouteSaga(action) {
|
|
|
400
126
|
}
|
|
401
127
|
});
|
|
402
128
|
}
|
|
403
|
-
|
|
404
129
|
function* getRouteSaga(action) {
|
|
405
130
|
let entry = null;
|
|
406
|
-
|
|
407
131
|
try {
|
|
408
132
|
var _staticRoute$route, _staticRoute$route$pa, _staticRoute$route2, _staticRoute$route2$p, _pathNode2, _pathNode2$entry, _pathNode2$entry$sys, _pathNode3, _pathNode3$entry, _pathNode3$entry$sys;
|
|
409
|
-
|
|
410
133
|
const {
|
|
411
134
|
withEvents,
|
|
412
135
|
routes: {
|
|
413
136
|
ContentTypeMappings = {}
|
|
414
137
|
} = {},
|
|
415
138
|
staticRoute
|
|
416
|
-
} = action;
|
|
139
|
+
} = action;
|
|
417
140
|
|
|
418
|
-
|
|
141
|
+
// Inject redux { key, reducer, saga } provided by staticRoute
|
|
142
|
+
if (staticRoute && staticRoute.route.injectRedux) yield effects.call(reduxInjectorSaga, staticRoute.route.injectRedux);
|
|
419
143
|
|
|
144
|
+
// Variables we will pass to setRouteEntry
|
|
420
145
|
let pathNode = null,
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
let contentTypeMapping = {};
|
|
425
|
-
// calls to withEvents.onRouteLoad and onRouteLoaded
|
|
146
|
+
ancestors = null,
|
|
147
|
+
children = [],
|
|
148
|
+
siblings = null;
|
|
149
|
+
let contentTypeMapping = {};
|
|
426
150
|
|
|
151
|
+
// These variables are the return values from
|
|
152
|
+
// calls to withEvents.onRouteLoad and onRouteLoaded
|
|
427
153
|
let appsays,
|
|
428
|
-
|
|
429
|
-
|
|
154
|
+
requireLogin = false;
|
|
430
155
|
if (withEvents && withEvents.onRouteLoad) {
|
|
431
156
|
appsays = yield withEvents.onRouteLoad(action);
|
|
432
157
|
}
|
|
433
|
-
|
|
434
158
|
const staticRouteLinkDepth = staticRoute === null || staticRoute === void 0 ? void 0 : (_staticRoute$route = staticRoute.route) === null || _staticRoute$route === void 0 ? void 0 : (_staticRoute$route$pa = _staticRoute$route.params) === null || _staticRoute$route$pa === void 0 ? void 0 : _staticRoute$route$pa.linkDepth;
|
|
435
159
|
const staticRouteFields = staticRoute === null || staticRoute === void 0 ? void 0 : (_staticRoute$route2 = staticRoute.route) === null || _staticRoute$route2 === void 0 ? void 0 : (_staticRoute$route2$p = _staticRoute$route2.params) === null || _staticRoute$route2$p === void 0 ? void 0 : _staticRoute$route2$p.fields;
|
|
436
160
|
const entryLinkDepth = appsays && appsays.entryLinkDepth !== undefined ? appsays.entryLinkDepth : 2;
|
|
@@ -439,56 +163,54 @@ function* getRouteSaga(action) {
|
|
|
439
163
|
const routeEntry = selectors.selectRouteEntry(state, 'js');
|
|
440
164
|
const routeNode = selectors.selectCurrentNode(state, 'js');
|
|
441
165
|
const currentPath = action.path; //selectCurrentPath(state);
|
|
442
|
-
|
|
443
|
-
const
|
|
444
|
-
|
|
445
|
-
|
|
166
|
+
const deliveryApiStatus = version.selectVersionStatus(state);
|
|
167
|
+
const project = selectors.selectCurrentProject(state);
|
|
168
|
+
// const isHome = currentPath === '/';
|
|
446
169
|
const isPreview = currentPath && currentPath.startsWith('/preview/');
|
|
447
170
|
const defaultLang = appsays && appsays.defaultLang || 'en-GB';
|
|
448
|
-
|
|
449
171
|
if (!isPreview && (appsays && appsays.customRouting || staticRoute && !staticRoute.route.fetchNode || routeEntry && action.statePath === action.path && (appsays && appsays.refetchNode) !== true)) {
|
|
450
172
|
// To prevent erroneous 404s and wasted network calls, this covers
|
|
451
173
|
// - appsays customRouting and does SET_ENTRY etc. via the consuming app
|
|
452
174
|
// - all staticRoutes (where custom 'route.fetchNode' attribute is falsey)
|
|
453
175
|
// - standard Contensis SiteView Routing where we already have that entry in state
|
|
454
176
|
if (routeEntry && (!staticRoute || staticRoute.route && staticRoute.route.fetchNode)) {
|
|
455
|
-
pathNode = {
|
|
177
|
+
pathNode = {
|
|
178
|
+
...routeNode,
|
|
456
179
|
entry: null
|
|
457
180
|
};
|
|
458
|
-
pathNode.entry = entry = routeEntry;
|
|
181
|
+
pathNode.entry = entry = routeEntry;
|
|
182
|
+
//Do nothing, the entry is allready the right one.
|
|
459
183
|
// yield put({
|
|
460
184
|
// type: SET_ENTRY,
|
|
461
185
|
// entry,
|
|
462
186
|
// node: routeNode,
|
|
463
187
|
// isLoading: false,
|
|
464
188
|
// });
|
|
465
|
-
|
|
466
189
|
yield effects.put({
|
|
467
|
-
type:
|
|
190
|
+
type: selectors.UPDATE_LOADING_STATE,
|
|
468
191
|
isLoading: false
|
|
469
192
|
});
|
|
470
|
-
} else yield effects.call(setRouteEntry, routeEntry, yield effects.select(selectors.selectCurrentNode), yield effects.select(selectors.selectCurrentAncestors), yield effects.select(selectors.selectCurrentSiblings));
|
|
193
|
+
} else yield effects.call(setRouteEntry, currentPath, routeEntry, yield effects.select(selectors.selectCurrentNode), yield effects.select(selectors.selectCurrentAncestors), yield effects.select(selectors.selectCurrentSiblings));
|
|
471
194
|
} else {
|
|
472
195
|
// Handle preview routes
|
|
473
196
|
if (isPreview) {
|
|
474
197
|
let splitPath = currentPath.split('/');
|
|
475
198
|
let entryGuid = splitPath[2];
|
|
476
199
|
let language = defaultLang;
|
|
477
|
-
|
|
478
200
|
if (splitPath.length >= 3) {
|
|
479
201
|
//set lang key if available in the path, else use default lang
|
|
480
202
|
//assumes preview url on content type is: http://preview.ALIAS.contensis.cloud/preview/{GUID}/{LANG}
|
|
481
|
-
if (splitPath.length == 4) language = splitPath[3];
|
|
203
|
+
if (splitPath.length == 4) language = splitPath[3];
|
|
204
|
+
// According to product dev we cannot use Node API
|
|
482
205
|
// for previewing entries as it gives a response of []
|
|
483
206
|
// -- apparently it is not correct to request latest content
|
|
484
207
|
// with Node API
|
|
485
208
|
|
|
486
|
-
let previewEntry = yield deliveryApi.getClient(deliveryApiStatus, project).entries.get({
|
|
209
|
+
let previewEntry = yield ContensisDeliveryApi.deliveryApi.getClient(deliveryApiStatus, project).entries.get({
|
|
487
210
|
id: entryGuid,
|
|
488
211
|
language,
|
|
489
212
|
linkDepth: entryLinkDepth
|
|
490
213
|
});
|
|
491
|
-
|
|
492
214
|
if (previewEntry) {
|
|
493
215
|
pathNode = {
|
|
494
216
|
entry: previewEntry
|
|
@@ -500,9 +222,8 @@ function* getRouteSaga(action) {
|
|
|
500
222
|
}
|
|
501
223
|
} else {
|
|
502
224
|
var _pathNode, _pathNode$entry, _pathNode$entry$sys;
|
|
503
|
-
|
|
504
225
|
// Handle all other routes
|
|
505
|
-
pathNode = yield cachedSearch.getNode({
|
|
226
|
+
pathNode = yield ContensisDeliveryApi.cachedSearch.getNode({
|
|
506
227
|
depth: 0,
|
|
507
228
|
path: currentPath,
|
|
508
229
|
entryFields: setContentTypeLimits ? ['sys.contentTypeId', 'sys.id'] : staticRouteFields || '*',
|
|
@@ -513,10 +234,8 @@ function* getRouteSaga(action) {
|
|
|
513
234
|
({
|
|
514
235
|
entry
|
|
515
236
|
} = pathNode || {});
|
|
516
|
-
|
|
517
237
|
if (setContentTypeLimits && (_pathNode = pathNode) !== null && _pathNode !== void 0 && (_pathNode$entry = _pathNode.entry) !== null && _pathNode$entry !== void 0 && (_pathNode$entry$sys = _pathNode$entry.sys) !== null && _pathNode$entry$sys !== void 0 && _pathNode$entry$sys.id) {
|
|
518
238
|
var _payload$items;
|
|
519
|
-
|
|
520
239
|
// Get fields[] and linkDepth from ContentTypeMapping to get the entry data
|
|
521
240
|
// and current node's ordinates at a specified depth with specified fields
|
|
522
241
|
contentTypeMapping = login.findContentTypeMapping(ContentTypeMappings, pathNode.entry.sys.contentTypeId) || {};
|
|
@@ -525,16 +244,15 @@ function* getRouteSaga(action) {
|
|
|
525
244
|
linkDepth
|
|
526
245
|
} = contentTypeMapping;
|
|
527
246
|
const query = routeEntryByFieldsQuery(pathNode.entry.sys.id, pathNode.entry.sys.language, fields, deliveryApiStatus);
|
|
528
|
-
const payload = yield cachedSearch.search(query, typeof linkDepth !== 'undefined' ? linkDepth : entryLinkDepth || 0, project);
|
|
529
|
-
|
|
247
|
+
const payload = yield ContensisDeliveryApi.cachedSearch.search(query, typeof linkDepth !== 'undefined' ? linkDepth : entryLinkDepth || 0, project);
|
|
530
248
|
if ((payload === null || payload === void 0 ? void 0 : (_payload$items = payload.items) === null || _payload$items === void 0 ? void 0 : _payload$items.length) > 0) {
|
|
531
249
|
pathNode.entry = entry = payload.items[0];
|
|
532
250
|
}
|
|
533
251
|
}
|
|
534
|
-
}
|
|
535
|
-
// siblings or entire node tree
|
|
536
|
-
|
|
252
|
+
}
|
|
537
253
|
|
|
254
|
+
// make calls to fetch node ancestors, children,
|
|
255
|
+
// siblings or entire node tree
|
|
538
256
|
[ancestors, children, siblings] = yield effects.call(resolveCurrentNodeOrdinates, {
|
|
539
257
|
appsays,
|
|
540
258
|
contentTypeMapping,
|
|
@@ -546,48 +264,44 @@ function* getRouteSaga(action) {
|
|
|
546
264
|
});
|
|
547
265
|
if (children) pathNode.children = children;
|
|
548
266
|
}
|
|
267
|
+
const resolvedContentTypeMapping = login.findContentTypeMapping(ContentTypeMappings, (_pathNode2 = pathNode) === null || _pathNode2 === void 0 ? void 0 : (_pathNode2$entry = _pathNode2.entry) === null || _pathNode2$entry === void 0 ? void 0 : (_pathNode2$entry$sys = _pathNode2$entry.sys) === null || _pathNode2$entry$sys === void 0 ? void 0 : _pathNode2$entry$sys.contentTypeId) || {};
|
|
549
268
|
|
|
550
|
-
|
|
551
|
-
|
|
269
|
+
// Inject redux { key, reducer, saga } provided by ContentTypeMapping
|
|
552
270
|
if (resolvedContentTypeMapping.injectRedux) yield effects.call(reduxInjectorSaga, resolvedContentTypeMapping.injectRedux);
|
|
553
|
-
|
|
554
271
|
if (withEvents && withEvents.onRouteLoaded) {
|
|
555
272
|
// Check if the app has provided a requireLogin boolean flag or groups array
|
|
556
273
|
// in addition to checking if requireLogin is set in the route definition
|
|
557
274
|
({
|
|
558
275
|
requireLogin
|
|
559
|
-
} = (yield withEvents.onRouteLoaded({
|
|
276
|
+
} = (yield withEvents.onRouteLoaded({
|
|
277
|
+
...action,
|
|
560
278
|
entry
|
|
561
279
|
})) || {});
|
|
562
280
|
}
|
|
563
|
-
|
|
564
281
|
if (requireLogin !== false) {
|
|
565
282
|
// Do not call the login feature saga if requireLogin is false
|
|
566
|
-
yield effects.call(login.handleRequiresLoginSaga, {
|
|
283
|
+
yield effects.call(login.handleRequiresLoginSaga, {
|
|
284
|
+
...action,
|
|
567
285
|
entry,
|
|
568
286
|
requireLogin
|
|
569
287
|
});
|
|
570
288
|
}
|
|
571
|
-
|
|
572
289
|
if (!appsays || !appsays.preventScrollTop) {
|
|
573
290
|
// Scroll into View
|
|
574
291
|
if (typeof window !== 'undefined') window.scrollTo(0, 0);
|
|
575
292
|
}
|
|
576
|
-
|
|
577
293
|
if ((_pathNode3 = pathNode) !== null && _pathNode3 !== void 0 && (_pathNode3$entry = _pathNode3.entry) !== null && _pathNode3$entry !== void 0 && (_pathNode3$entry$sys = _pathNode3$entry.sys) !== null && _pathNode3$entry$sys !== void 0 && _pathNode3$entry$sys.id) {
|
|
578
294
|
var _staticRoute$route3, _staticRoute$route3$f, _appsays;
|
|
579
|
-
|
|
580
295
|
entry = pathNode.entry;
|
|
581
|
-
yield effects.call(setRouteEntry, entry, pathNode, ancestors, siblings, (staticRoute === null || staticRoute === void 0 ? void 0 : (_staticRoute$route3 = staticRoute.route) === null || _staticRoute$route3 === void 0 ? void 0 : (_staticRoute$route3$f = _staticRoute$route3.fetchNode) === null || _staticRoute$route3$f === void 0 ? void 0 : _staticRoute$route3$f.entryMapper) || resolvedContentTypeMapping.entryMapper, false, (_appsays = appsays) === null || _appsays === void 0 ? void 0 : _appsays.refetchNode);
|
|
296
|
+
yield effects.call(setRouteEntry, currentPath, entry, pathNode, ancestors, siblings, (staticRoute === null || staticRoute === void 0 ? void 0 : (_staticRoute$route3 = staticRoute.route) === null || _staticRoute$route3 === void 0 ? void 0 : (_staticRoute$route3$f = _staticRoute$route3.fetchNode) === null || _staticRoute$route3$f === void 0 ? void 0 : _staticRoute$route3$f.entryMapper) || resolvedContentTypeMapping.entryMapper, false, (_appsays = appsays) === null || _appsays === void 0 ? void 0 : _appsays.refetchNode);
|
|
582
297
|
} else {
|
|
583
|
-
if (staticRoute) yield effects.call(setRouteEntry, null, pathNode, ancestors, siblings);else yield effects.call(do404);
|
|
298
|
+
if (staticRoute) yield effects.call(setRouteEntry, currentPath, null, pathNode, ancestors, siblings);else yield effects.call(do404);
|
|
584
299
|
}
|
|
585
300
|
} catch (e) {
|
|
586
301
|
log__namespace.error(...['Error running route saga:', e, e.stack]);
|
|
587
302
|
yield effects.call(do500, e);
|
|
588
303
|
}
|
|
589
304
|
}
|
|
590
|
-
|
|
591
305
|
function* resolveCurrentNodeOrdinates({
|
|
592
306
|
appsays,
|
|
593
307
|
contentTypeMapping,
|
|
@@ -597,10 +311,11 @@ function* resolveCurrentNodeOrdinates({
|
|
|
597
311
|
project,
|
|
598
312
|
versionStatus
|
|
599
313
|
}) {
|
|
600
|
-
const apiCall = [() => null, () => null, () => null, () => null];
|
|
314
|
+
const apiCall = [() => null, () => null, () => null, () => null];
|
|
315
|
+
|
|
316
|
+
// if appsays customNavigation: true, we will set doNavigation to false
|
|
601
317
|
// if appsays customNavigation: { ... }, we will set doNavigation to the customNavigation object and check for child elements
|
|
602
318
|
// if appsays nothing we will set doNavigation to true and continue to do navigation calls
|
|
603
|
-
|
|
604
319
|
const doNavigation = !appsays || ((appsays === null || appsays === void 0 ? void 0 : appsays.customNavigation) === true ? false : (appsays === null || appsays === void 0 ? void 0 : appsays.customNavigation) || true);
|
|
605
320
|
const {
|
|
606
321
|
entryLinkDepth = 0,
|
|
@@ -608,12 +323,11 @@ function* resolveCurrentNodeOrdinates({
|
|
|
608
323
|
linkDepth,
|
|
609
324
|
nodeOptions = {}
|
|
610
325
|
} = contentTypeMapping;
|
|
611
|
-
|
|
612
326
|
if (pathNode && pathNode.id) {
|
|
613
327
|
if (doNavigation === true || doNavigation.ancestors) {
|
|
614
328
|
apiCall[0] = function* getAncestors() {
|
|
615
329
|
try {
|
|
616
|
-
return yield cachedSearch.getAncestors({
|
|
330
|
+
return yield ContensisDeliveryApi.cachedSearch.getAncestors({
|
|
617
331
|
id: pathNode.id,
|
|
618
332
|
language,
|
|
619
333
|
versionStatus
|
|
@@ -624,15 +338,12 @@ function* resolveCurrentNodeOrdinates({
|
|
|
624
338
|
}
|
|
625
339
|
};
|
|
626
340
|
}
|
|
627
|
-
|
|
628
341
|
const childrenDepth = doNavigation === true || doNavigation.children === true ? 1 : doNavigation && doNavigation.children || 0;
|
|
629
|
-
|
|
630
342
|
if (typeof (nodeOptions === null || nodeOptions === void 0 ? void 0 : nodeOptions.children) === 'undefined' && childrenDepth > 0 || nodeOptions.children) {
|
|
631
343
|
const childrenOptions = typeof nodeOptions.children === 'boolean' ? {} : nodeOptions.children;
|
|
632
|
-
|
|
633
344
|
apiCall[1] = function* getChildren() {
|
|
634
345
|
try {
|
|
635
|
-
return yield cachedSearch.getNode({
|
|
346
|
+
return yield ContensisDeliveryApi.cachedSearch.getNode({
|
|
636
347
|
depth: childrenOptions.depth !== undefined ? childrenOptions.depth : childrenDepth,
|
|
637
348
|
path,
|
|
638
349
|
entryFields: childrenOptions.fields || fields || undefined,
|
|
@@ -646,13 +357,11 @@ function* resolveCurrentNodeOrdinates({
|
|
|
646
357
|
}
|
|
647
358
|
};
|
|
648
359
|
}
|
|
649
|
-
|
|
650
360
|
if (typeof (nodeOptions === null || nodeOptions === void 0 ? void 0 : nodeOptions.siblings) === 'undefined' && doNavigation.siblings || nodeOptions.siblings) {
|
|
651
361
|
apiCall[2] = function* getSiblings() {
|
|
652
362
|
try {
|
|
653
363
|
var _nodeOptions$siblings, _nodeOptions$siblings2;
|
|
654
|
-
|
|
655
|
-
return yield cachedSearch.getSiblings({
|
|
364
|
+
return yield ContensisDeliveryApi.cachedSearch.getSiblings({
|
|
656
365
|
id: pathNode.id,
|
|
657
366
|
entryFields: (nodeOptions === null || nodeOptions === void 0 ? void 0 : (_nodeOptions$siblings = nodeOptions.siblings) === null || _nodeOptions$siblings === void 0 ? void 0 : _nodeOptions$siblings.fields) || fields || undefined,
|
|
658
367
|
entryLinkDepth: typeof (nodeOptions === null || nodeOptions === void 0 ? void 0 : (_nodeOptions$siblings2 = nodeOptions.siblings) === null || _nodeOptions$siblings2 === void 0 ? void 0 : _nodeOptions$siblings2.linkDepth) !== 'undefined' ? nodeOptions.siblings.linkDepth : typeof linkDepth !== 'undefined' ? linkDepth : entryLinkDepth,
|
|
@@ -667,18 +376,18 @@ function* resolveCurrentNodeOrdinates({
|
|
|
667
376
|
};
|
|
668
377
|
}
|
|
669
378
|
}
|
|
670
|
-
|
|
671
|
-
const isTreeLoaded = yield effects.select(version.hasNavigationTree);
|
|
379
|
+
const isTreeLoaded = yield effects.select(version$1.hasNavigationTree);
|
|
672
380
|
if (!isTreeLoaded && (doNavigation === true || doNavigation.tree)) apiCall[3] = function* getNodeTree() {
|
|
673
381
|
const treeDepth = doNavigation === true || !doNavigation.tree || doNavigation.tree === true ? 2 : doNavigation.tree;
|
|
674
|
-
|
|
675
382
|
if (typeof window !== 'undefined') {
|
|
676
383
|
return yield effects.put({
|
|
677
384
|
type: version.GET_NODE_TREE,
|
|
385
|
+
language,
|
|
678
386
|
treeDepth
|
|
679
387
|
});
|
|
680
388
|
} else {
|
|
681
389
|
return yield effects.call(ensureNodeTreeSaga, {
|
|
390
|
+
language,
|
|
682
391
|
treeDepth
|
|
683
392
|
});
|
|
684
393
|
}
|
|
@@ -687,35 +396,36 @@ function* resolveCurrentNodeOrdinates({
|
|
|
687
396
|
const [ancestors, nodeWithChildren, siblings] = yield effects.all([loadAncestors(), loadChildren(), loadSiblings(), loadTree()]);
|
|
688
397
|
return [ancestors, nodeWithChildren === null || nodeWithChildren === void 0 ? void 0 : nodeWithChildren.children, siblings];
|
|
689
398
|
}
|
|
399
|
+
function* setRouteEntry(currentPath, entry, node, ancestors, siblings, entryMapper, notFound = false, remapEntry = false) {
|
|
400
|
+
const entrySys = entry && entry.sys || {};
|
|
690
401
|
|
|
691
|
-
|
|
692
|
-
const entrySys = entry && entry.sys || {}; // Update a window global to provide the preview toolbar
|
|
402
|
+
// Update a window global to provide the preview toolbar
|
|
693
403
|
// an updated entry id in client-side navigation
|
|
694
|
-
|
|
695
404
|
if (typeof window !== 'undefined') window.ContensisEntryId = entrySys.id;
|
|
696
405
|
const currentEntryId = yield effects.select(selectors.selectRouteEntryEntryId);
|
|
697
406
|
const currentEntryLang = yield effects.select(selectors.selectRouteEntryLanguage);
|
|
698
|
-
const mappedEntry = currentEntryId === entrySys.id && currentEntryLang === entrySys.language && remapEntry === false ? (yield effects.select(selectors.selectMappedEntry, 'js')) || {} : yield mapRouteEntry(entryMapper, {
|
|
407
|
+
const mappedEntry = currentEntryId === entrySys.id && currentEntryLang === entrySys.language && remapEntry === false ? (yield effects.select(selectors.selectMappedEntry, 'js')) || {} : yield mapRouteEntry(entryMapper, {
|
|
408
|
+
...node,
|
|
699
409
|
entry,
|
|
700
410
|
ancestors,
|
|
701
411
|
siblings
|
|
702
412
|
});
|
|
703
413
|
yield effects.all([effects.put({
|
|
704
|
-
type:
|
|
414
|
+
type: selectors.SET_ENTRY,
|
|
705
415
|
id: entrySys.id,
|
|
416
|
+
currentPath,
|
|
706
417
|
entry,
|
|
707
418
|
mappedEntry,
|
|
708
419
|
node,
|
|
709
420
|
notFound
|
|
710
421
|
}), ancestors && effects.put({
|
|
711
|
-
type:
|
|
422
|
+
type: selectors.SET_ANCESTORS,
|
|
712
423
|
ancestors
|
|
713
424
|
}), siblings && effects.put({
|
|
714
|
-
type:
|
|
425
|
+
type: selectors.SET_SIBLINGS,
|
|
715
426
|
siblings
|
|
716
427
|
})]);
|
|
717
428
|
}
|
|
718
|
-
|
|
719
429
|
function* mapRouteEntry(entryMapper, node) {
|
|
720
430
|
try {
|
|
721
431
|
if (typeof entryMapper === 'function') {
|
|
@@ -726,33 +436,30 @@ function* mapRouteEntry(entryMapper, node) {
|
|
|
726
436
|
} catch (e) {
|
|
727
437
|
log__namespace.error(...['Error running entryMapper:', e, e.stack]);
|
|
728
438
|
}
|
|
729
|
-
|
|
730
439
|
return;
|
|
731
440
|
}
|
|
732
|
-
|
|
733
441
|
function* do404() {
|
|
734
442
|
yield effects.call(clientReloadHitServer);
|
|
735
443
|
yield effects.put({
|
|
736
|
-
type:
|
|
444
|
+
type: selectors.SET_ENTRY,
|
|
737
445
|
id: null,
|
|
738
446
|
entry: null,
|
|
739
447
|
notFound: true
|
|
740
448
|
});
|
|
741
449
|
}
|
|
742
|
-
|
|
743
450
|
function* clientReloadHitServer() {
|
|
744
|
-
const stateEntry = yield effects.select(selectors.selectRouteEntry);
|
|
451
|
+
const stateEntry = yield effects.select(selectors.selectRouteEntry);
|
|
452
|
+
|
|
453
|
+
// If in client and there is a stateEntry.sys field reload the page,
|
|
745
454
|
// on the 2nd load stateEntry.sys should be null at this point,
|
|
746
455
|
// we do not wish to reload again and get stuck in an infinite reloading loop
|
|
747
|
-
|
|
748
456
|
if (typeof window !== 'undefined' && (stateEntry !== null && stateEntry !== void 0 && stateEntry.sys || null)) {
|
|
749
457
|
window.location.reload();
|
|
750
458
|
}
|
|
751
459
|
}
|
|
752
|
-
|
|
753
460
|
function* do500(error) {
|
|
754
461
|
yield effects.put({
|
|
755
|
-
type:
|
|
462
|
+
type: selectors.SET_ENTRY,
|
|
756
463
|
id: null,
|
|
757
464
|
entry: null,
|
|
758
465
|
notFound: true,
|
|
@@ -761,7 +468,6 @@ function* do500(error) {
|
|
|
761
468
|
statusCode: error && error.status ? error.status : 500
|
|
762
469
|
});
|
|
763
470
|
}
|
|
764
|
-
|
|
765
471
|
function* reduxInjectorSaga(injectorFn) {
|
|
766
472
|
if (typeof injectorFn === 'function') {
|
|
767
473
|
const {
|
|
@@ -769,7 +475,7 @@ function* reduxInjectorSaga(injectorFn) {
|
|
|
769
475
|
reducer,
|
|
770
476
|
saga
|
|
771
477
|
} = yield injectorFn();
|
|
772
|
-
version.injectRedux({
|
|
478
|
+
version$1.injectRedux({
|
|
773
479
|
key,
|
|
774
480
|
reducer,
|
|
775
481
|
saga
|
|
@@ -778,19 +484,18 @@ function* reduxInjectorSaga(injectorFn) {
|
|
|
778
484
|
}
|
|
779
485
|
|
|
780
486
|
const registerSagas = [effects.takeEvery(reducers.REGISTER_USER, registerSaga), effects.takeEvery(reducers.REGISTER_USER_SUCCESS, redirectSaga)];
|
|
781
|
-
|
|
782
487
|
function* registerSaga({
|
|
783
488
|
user,
|
|
784
489
|
mappers
|
|
785
490
|
}) {
|
|
786
|
-
let requestBody = user;
|
|
491
|
+
let requestBody = user;
|
|
492
|
+
// Allow use of request mapper to take a user object
|
|
787
493
|
// of any format and return the payload for the api request
|
|
788
|
-
|
|
789
494
|
if (mappers && mappers.request && typeof mappers.request === 'function') {
|
|
790
495
|
requestBody = yield mappers.request(user);
|
|
791
|
-
}
|
|
792
|
-
|
|
496
|
+
}
|
|
793
497
|
|
|
498
|
+
// Make POST call to register API
|
|
794
499
|
const response = yield fetch('/account/register', {
|
|
795
500
|
method: 'POST',
|
|
796
501
|
headers: {
|
|
@@ -799,19 +504,16 @@ function* registerSaga({
|
|
|
799
504
|
},
|
|
800
505
|
body: JSON.stringify(requestBody)
|
|
801
506
|
});
|
|
802
|
-
|
|
803
507
|
if (response.ok) {
|
|
804
508
|
let mappedResponse;
|
|
805
509
|
const [, responseBody] = yield awaitToJs.to(response.json());
|
|
806
|
-
|
|
807
510
|
if (responseBody) {
|
|
808
511
|
// Allow use of response mapper to convert the successful user object
|
|
809
512
|
// from the api response body into a user object of any format
|
|
810
513
|
if (mappers && mappers.response && typeof mappers.response === 'function') {
|
|
811
514
|
mappedResponse = yield mappers.response(responseBody);
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
|
|
515
|
+
}
|
|
516
|
+
// Update user object with mappedResponse or responseBody
|
|
815
517
|
yield effects.put({
|
|
816
518
|
type: reducers.REGISTER_USER_SUCCESS,
|
|
817
519
|
user: mappedResponse || responseBody
|
|
@@ -830,26 +532,25 @@ function* registerSaga({
|
|
|
830
532
|
// or status codes echoed from the responses received from
|
|
831
533
|
// management api when registering the user
|
|
832
534
|
const [, errorResponse] = yield awaitToJs.to(response.json());
|
|
833
|
-
const error = errorResponse && errorResponse.error || errorResponse || {};
|
|
834
|
-
|
|
535
|
+
const error = errorResponse && errorResponse.error || errorResponse || {};
|
|
536
|
+
// Get something meaningful from the response if there is no message in the body
|
|
835
537
|
if (!error.message) {
|
|
836
538
|
error.message = `Registration service: ${response.statusText}`;
|
|
837
539
|
error.status = response.status;
|
|
838
540
|
}
|
|
839
|
-
|
|
840
541
|
yield effects.put({
|
|
841
542
|
type: reducers.REGISTER_USER_FAILED,
|
|
842
543
|
error
|
|
843
544
|
});
|
|
844
545
|
}
|
|
845
546
|
}
|
|
846
|
-
|
|
847
547
|
function* redirectSaga() {
|
|
848
548
|
// Check if querystring contains a redirect_uri
|
|
849
549
|
const currentQs = selectors.queryParams(yield effects.select(selectors.selectCurrentSearch));
|
|
850
|
-
const redirectUri = currentQs.redirect_uri || currentQs.redirect;
|
|
550
|
+
const redirectUri = currentQs.redirect_uri || currentQs.redirect;
|
|
851
551
|
|
|
852
|
-
|
|
552
|
+
// We must use redux based navigation to preserve the registration state
|
|
553
|
+
if (redirectUri) yield effects.put(selectors.setRoute(redirectUri));
|
|
853
554
|
}
|
|
854
555
|
|
|
855
556
|
const PAP_URL = 'https://pap.zengenti.com';
|
|
@@ -866,36 +567,36 @@ const BASE_OPTIONS = {
|
|
|
866
567
|
};
|
|
867
568
|
class UserHelper {
|
|
868
569
|
static async GetUsersEnvironments(securityToken) {
|
|
869
|
-
const options = {
|
|
570
|
+
const options = {
|
|
571
|
+
...BASE_OPTIONS,
|
|
870
572
|
headers: {
|
|
871
573
|
'x-security-token': securityToken
|
|
872
574
|
}
|
|
873
575
|
};
|
|
874
576
|
return await UserHelper.get(USER_ENVS_URL, options);
|
|
875
577
|
}
|
|
876
|
-
|
|
877
578
|
static async ResendUserVerification(userEmail) {
|
|
878
|
-
const options = {
|
|
579
|
+
const options = {
|
|
580
|
+
...BASE_OPTIONS
|
|
879
581
|
};
|
|
880
582
|
return await UserHelper.get(`/${USER_RESEND_VERIFICATION_URI}?user=${userEmail}`, options);
|
|
881
583
|
}
|
|
882
|
-
|
|
883
584
|
static async RequestPasswordReset(userEmailObject) {
|
|
884
|
-
const options = {
|
|
585
|
+
const options = {
|
|
586
|
+
...BASE_OPTIONS,
|
|
885
587
|
body: JSON.stringify(userEmailObject)
|
|
886
588
|
};
|
|
887
589
|
options.method = 'POST';
|
|
888
590
|
return await UserHelper.get(`/${USER_REQUEST_PASSWORD_RESET_URI}`, options);
|
|
889
591
|
}
|
|
890
|
-
|
|
891
592
|
static async ResetPassword(resetPasswordObject) {
|
|
892
|
-
const options = {
|
|
593
|
+
const options = {
|
|
594
|
+
...BASE_OPTIONS,
|
|
893
595
|
body: JSON.stringify(resetPasswordObject)
|
|
894
596
|
};
|
|
895
597
|
options.method = 'POST';
|
|
896
598
|
return await UserHelper.get(`/${USER_RESET_PASSWORD_URI}`, options);
|
|
897
599
|
}
|
|
898
|
-
|
|
899
600
|
static async get(url, options = BASE_OPTIONS) {
|
|
900
601
|
try {
|
|
901
602
|
const responseBody = await api(url, options);
|
|
@@ -908,9 +609,7 @@ class UserHelper {
|
|
|
908
609
|
};
|
|
909
610
|
}
|
|
910
611
|
}
|
|
911
|
-
|
|
912
612
|
}
|
|
913
|
-
|
|
914
613
|
async function api(url, options) {
|
|
915
614
|
return fetch(url, options).then(async response => {
|
|
916
615
|
return response.json().then(data => data);
|
|
@@ -920,17 +619,14 @@ async function api(url, options) {
|
|
|
920
619
|
}
|
|
921
620
|
|
|
922
621
|
const resetPasswordSagas = [effects.takeEvery(reducers.REQUEST_USER_PASSWORD_RESET, requestPasswordResetSaga), effects.takeEvery(reducers.RESET_USER_PASSWORD, resetPasswordSaga), effects.takeEvery(reducers.CHANGE_USER_PASSWORD, changePasswordSaga)];
|
|
923
|
-
|
|
924
622
|
function* requestPasswordResetSaga(action) {
|
|
925
623
|
const userEmailObject = action.userEmailObject;
|
|
926
624
|
yield effects.put({
|
|
927
625
|
type: reducers.REQUEST_USER_PASSWORD_RESET_SENDING
|
|
928
626
|
});
|
|
929
|
-
|
|
930
627
|
if (userEmailObject && userEmailObject.userEmail) {
|
|
931
628
|
try {
|
|
932
629
|
const passwordResetRequestResponse = yield UserHelper.RequestPasswordReset(userEmailObject);
|
|
933
|
-
|
|
934
630
|
if (passwordResetRequestResponse) {
|
|
935
631
|
if (!passwordResetRequestResponse.error) {
|
|
936
632
|
yield effects.put({
|
|
@@ -961,17 +657,14 @@ function* requestPasswordResetSaga(action) {
|
|
|
961
657
|
});
|
|
962
658
|
}
|
|
963
659
|
}
|
|
964
|
-
|
|
965
660
|
function* resetPasswordSaga(action) {
|
|
966
661
|
const resetPasswordObject = action.resetPasswordObject;
|
|
967
662
|
yield effects.put({
|
|
968
663
|
type: reducers.RESET_USER_PASSWORD_SENDING
|
|
969
664
|
});
|
|
970
|
-
|
|
971
665
|
if (resetPasswordObject.token && resetPasswordObject.password) {
|
|
972
666
|
try {
|
|
973
667
|
const resetPasswordResponse = yield UserHelper.ResetPassword(resetPasswordObject);
|
|
974
|
-
|
|
975
668
|
if (resetPasswordResponse) {
|
|
976
669
|
if (!resetPasswordResponse.error) {
|
|
977
670
|
yield effects.put({
|
|
@@ -1002,11 +695,11 @@ function* resetPasswordSaga(action) {
|
|
|
1002
695
|
error: 'Invalid object'
|
|
1003
696
|
});
|
|
1004
697
|
}
|
|
1005
|
-
}
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
// userId
|
|
1006
701
|
// existingPassword
|
|
1007
702
|
// newPassword
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
703
|
function* changePasswordSaga(action) {
|
|
1011
704
|
if (!action || !action.userId || !action.currentPassword || !action.newPassword) {
|
|
1012
705
|
yield effects.put({
|
|
@@ -1015,7 +708,6 @@ function* changePasswordSaga(action) {
|
|
|
1015
708
|
});
|
|
1016
709
|
return;
|
|
1017
710
|
}
|
|
1018
|
-
|
|
1019
711
|
try {
|
|
1020
712
|
const changePasswordObject = {
|
|
1021
713
|
userId: action.userId,
|
|
@@ -1026,25 +718,24 @@ function* changePasswordSaga(action) {
|
|
|
1026
718
|
type: reducers.CHANGE_USER_PASSWORD_SENDING
|
|
1027
719
|
});
|
|
1028
720
|
const clientCredentials = yield effects.select(ToJs.selectClientCredentials, 'js');
|
|
1029
|
-
const client = yield login.getManagementApiClient({
|
|
721
|
+
const client = yield login.getManagementApiClient({
|
|
722
|
+
...clientCredentials
|
|
1030
723
|
});
|
|
1031
724
|
const [err, res] = yield awaitToJs.to(client.security.users.updatePassword(changePasswordObject));
|
|
1032
|
-
|
|
1033
725
|
if (err) {
|
|
1034
726
|
var _err$data, _err$data$data, _err$data2;
|
|
1035
|
-
|
|
1036
727
|
const error = (err === null || err === void 0 ? void 0 : (_err$data = err.data) === null || _err$data === void 0 ? void 0 : (_err$data$data = _err$data.data) === null || _err$data$data === void 0 ? void 0 : _err$data$data.length) > 0 && err.data.data[0].message || (err === null || err === void 0 ? void 0 : (_err$data2 = err.data) === null || _err$data2 === void 0 ? void 0 : _err$data2.message);
|
|
1037
728
|
yield effects.put({
|
|
1038
729
|
type: reducers.CHANGE_USER_PASSWORD_ERROR,
|
|
1039
730
|
error
|
|
1040
731
|
});
|
|
1041
732
|
return;
|
|
1042
|
-
}
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// // eslint-disable-next-line no-console
|
|
1043
736
|
// console.log(changePasswordObject);
|
|
1044
737
|
// // eslint-disable-next-line no-console
|
|
1045
738
|
// console.log(userCredentialsObject);
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
739
|
yield effects.put({
|
|
1049
740
|
type: reducers.CHANGE_USER_PASSWORD_SUCCESS
|
|
1050
741
|
});
|
|
@@ -1066,35 +757,32 @@ function rootSaga (featureSagas = []) {
|
|
|
1066
757
|
};
|
|
1067
758
|
}
|
|
1068
759
|
|
|
1069
|
-
const servers = SERVERS;
|
|
1070
|
-
/* global SERVERS */
|
|
1071
|
-
|
|
760
|
+
const servers = SERVERS; /* global SERVERS */
|
|
1072
761
|
const alias = servers.alias.toLowerCase();
|
|
1073
|
-
const publicUri = PUBLIC_URI;
|
|
1074
|
-
/* global
|
|
762
|
+
const publicUri = PUBLIC_URI; /* global PUBLIC_URI */
|
|
763
|
+
const projects = PROJECTS; /* global PROJECTS */
|
|
1075
764
|
|
|
1076
|
-
const projects = PROJECTS;
|
|
1077
|
-
/* global PROJECTS */
|
|
1078
765
|
// return a projectId via the request hostname
|
|
1079
|
-
|
|
1080
766
|
const pickProject = (hostname, query) => {
|
|
1081
767
|
// if localhost we can only infer via a querystring, and take your word for it
|
|
1082
768
|
if (hostname == 'localhost') {
|
|
1083
769
|
return query && query.p || projects[0].id;
|
|
1084
|
-
}
|
|
1085
|
-
|
|
770
|
+
}
|
|
1086
771
|
|
|
772
|
+
// if hostname is the actual public uri we can return the first project from the list
|
|
1087
773
|
if (hostname == publicUri) {
|
|
1088
774
|
return projects[0].id;
|
|
1089
775
|
}
|
|
776
|
+
let project = 'unknown';
|
|
1090
777
|
|
|
1091
|
-
|
|
778
|
+
// // go through all the defined projects
|
|
1092
779
|
// Object.entries(projects).map(([, p]) => {
|
|
780
|
+
const p = projects[0];
|
|
1093
781
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
if (hostname.includes(p.publicUri)) project = p.id; // the url structure is different for website (we don't prefix)
|
|
782
|
+
// check if we're accessing via the project's public uri
|
|
783
|
+
if (hostname.includes(p.publicUri)) project = p.id;
|
|
1097
784
|
|
|
785
|
+
// the url structure is different for website (we don't prefix)
|
|
1098
786
|
if (p.id.startsWith('website')) {
|
|
1099
787
|
// check for internal and external hostnames
|
|
1100
788
|
// we check live and preview distinctly so our rule does not clash with
|
|
@@ -1103,9 +791,8 @@ const pickProject = (hostname, query) => {
|
|
|
1103
791
|
} else {
|
|
1104
792
|
// check for internal and external hostnames, prefixed with the projectId
|
|
1105
793
|
if (hostname.includes(`${p.id.toLowerCase()}-${alias}.cloud.contensis.com`) || hostname.includes(`${p.id.toLowerCase()}.${alias}.contensis.cloud`)) project = p.id;
|
|
1106
|
-
}
|
|
1107
|
-
|
|
1108
|
-
|
|
794
|
+
}
|
|
795
|
+
// });
|
|
1109
796
|
return project === 'unknown' ? p.id : project;
|
|
1110
797
|
};
|
|
1111
798
|
|
|
@@ -1115,9 +802,7 @@ const AppRoot = props => {
|
|
|
1115
802
|
|
|
1116
803
|
exports.AppRoot = AppRoot;
|
|
1117
804
|
exports.browserHistory = browserHistory;
|
|
1118
|
-
exports.cachedSearch = cachedSearch;
|
|
1119
|
-
exports.deliveryApi = deliveryApi;
|
|
1120
805
|
exports.history = history;
|
|
1121
806
|
exports.pickProject = pickProject;
|
|
1122
807
|
exports.rootSaga = rootSaga;
|
|
1123
|
-
//# sourceMappingURL=App-
|
|
808
|
+
//# sourceMappingURL=App-21a7d836.js.map
|