@qoh/core-react 1.0.0-rc.5 → 1.0.0-rc.6

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.
@@ -0,0 +1,662 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.fetchDynamicComponents = exports.componentRegistry = exports.QueenofheartsService = exports.Filter = void 0;
9
+ exports.getAllregisteredComponents = getAllregisteredComponents;
10
+ exports.registerComponent = registerComponent;
11
+ exports.registerLazyComponent = registerLazyComponent;
12
+ exports.unregisterComponent = unregisterComponent;
13
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
18
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
21
+ var _ApiError = require("./ApiError");
22
+ var _react = _interopRequireWildcard(require("react"));
23
+ var _Dodo = _interopRequireDefault(require("./components/Dodo"));
24
+ var _QueenofheartsService; //TODO: remove????
25
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
27
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
29
+ var Filter = exports.Filter = /*#__PURE__*/function (Filter) {
30
+ Filter["eq"] = "eq";
31
+ Filter["in"] = "in";
32
+ Filter["neq"] = "neq";
33
+ Filter["notIn"] = "notIn";
34
+ return Filter;
35
+ }({});
36
+ //const qohUri = 'http://localhost:3000/api';
37
+ var qohUri = 'https://qoh.azurewebsites.net/api';
38
+ var componentRegistry = exports.componentRegistry = {};
39
+ function unregisterComponent(name) {
40
+ delete componentRegistry[name];
41
+ }
42
+ function registerComponent(functionalComponent, typeName, fieldNames, overwrite) {
43
+ if (typeName !== undefined) {
44
+ if (overwrite || componentRegistry[typeName] === undefined) {
45
+ var componentWithFieldNames = {
46
+ component: functionalComponent,
47
+ fieldNames: fieldNames
48
+ };
49
+ componentRegistry[typeName] = componentWithFieldNames;
50
+ }
51
+ }
52
+ }
53
+ function registerLazyComponent(loader, typeName, fieldNames) {
54
+ var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
55
+ if (!!typeName) {
56
+ if (overwrite || componentRegistry[typeName] === undefined) {
57
+ componentRegistry[typeName] = {
58
+ fieldNames: fieldNames,
59
+ loader: loader
60
+ };
61
+ //console.log('Registred lazy type: ' + typeName);
62
+ }
63
+ } else {
64
+ console.warn("registerComponent failed: undefined typeName ");
65
+ }
66
+ }
67
+ function getAllregisteredComponents() {
68
+ return componentRegistry;
69
+ }
70
+ var fetchDynamicComponents = exports.fetchDynamicComponents = /*#__PURE__*/function () {
71
+ var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(props) {
72
+ var instance, asyncTypeNames, y;
73
+ return _regenerator["default"].wrap(function _callee$(_context) {
74
+ while (1) switch (_context.prev = _context.next) {
75
+ case 0:
76
+ instance = QueenofheartsService.getInstance();
77
+ asyncTypeNames = instance.findComponentsInProps(props).filter(function (value, index, arr) {
78
+ return arr.indexOf(value) === index;
79
+ });
80
+ _context.next = 4;
81
+ return instance.fetchDynamicComponents(asyncTypeNames);
82
+ case 4:
83
+ y = _context.sent;
84
+ return _context.abrupt("return", y.filter(function (x) {
85
+ return x !== null;
86
+ }));
87
+ case 6:
88
+ case "end":
89
+ return _context.stop();
90
+ }
91
+ }, _callee);
92
+ }));
93
+ return function fetchDynamicComponents(_x) {
94
+ return _ref.apply(this, arguments);
95
+ };
96
+ }();
97
+ var QueenofheartsService = exports.QueenofheartsService = /*#__PURE__*/function () {
98
+ function QueenofheartsService(backend, apiToken, localServer) {
99
+ var _this = this;
100
+ (0, _classCallCheck2["default"])(this, QueenofheartsService);
101
+ (0, _defineProperty2["default"])(this, "data", void 0);
102
+ (0, _defineProperty2["default"])(this, "debug", void 0);
103
+ (0, _defineProperty2["default"])(this, "backend", void 0);
104
+ (0, _defineProperty2["default"])(this, "apiToken", void 0);
105
+ (0, _defineProperty2["default"])(this, "localServer", void 0);
106
+ //debugger-data:
107
+ (0, _defineProperty2["default"])(this, "latestUrl", '');
108
+ (0, _defineProperty2["default"])(this, "latestData", {});
109
+ (0, _defineProperty2["default"])(this, "findComponentsInProps", function (props) {
110
+ // returns unique list of components in props and it's children
111
+ if (props && typeof props !== 'string') {
112
+ var myName = props.__typename ? [props.__typename] : [];
113
+ var elements = Array.isArray(props) ? props : Object.values(props);
114
+ var children = [].concat(myName, (0, _toConsumableArray2["default"])(elements.reduce(function (acc, item) {
115
+ var res = _this.findComponentsInProps(item);
116
+ if (res) {
117
+ acc = [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(res));
118
+ }
119
+ return acc;
120
+ }, [])));
121
+ return children;
122
+ }
123
+ return [];
124
+ });
125
+ (0, _defineProperty2["default"])(this, "fetchDynamicComponents", /*#__PURE__*/function () {
126
+ var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(componentsToLoad) {
127
+ var needsLoading, hasLoaded, loadedComponents;
128
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
129
+ while (1) switch (_context3.prev = _context3.next) {
130
+ case 0:
131
+ needsLoading = false;
132
+ hasLoaded = false; //console.log('components to fetch');
133
+ //console.log(Object.values(componentsToLoad));
134
+ loadedComponents = Promise.all(componentsToLoad.map(/*#__PURE__*/function () {
135
+ var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(typeName) {
136
+ var _componentRegistry$ty;
137
+ var existingComponent, component;
138
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
139
+ while (1) switch (_context2.prev = _context2.next) {
140
+ case 0:
141
+ if (!componentRegistry[typeName]) {
142
+ _context2.next = 8;
143
+ break;
144
+ }
145
+ existingComponent = componentRegistry[typeName].component;
146
+ if (!(existingComponent === undefined)) {
147
+ _context2.next = 8;
148
+ break;
149
+ }
150
+ needsLoading = true;
151
+ //console.log(`Component ${typeName}: start asynchron loading... `);
152
+ _context2.next = 6;
153
+ return _this.loadAsyncComponent(typeName);
154
+ case 6:
155
+ component = _context2.sent;
156
+ return _context2.abrupt("return", component);
157
+ case 8:
158
+ if (!((_componentRegistry$ty = componentRegistry[typeName]) !== null && _componentRegistry$ty !== void 0 && _componentRegistry$ty.loader)) {
159
+ _context2.next = 10;
160
+ break;
161
+ }
162
+ return _context2.abrupt("return", typeName);
163
+ case 10:
164
+ return _context2.abrupt("return", null);
165
+ case 11:
166
+ case "end":
167
+ return _context2.stop();
168
+ }
169
+ }, _callee2);
170
+ }));
171
+ return function (_x3) {
172
+ return _ref3.apply(this, arguments);
173
+ };
174
+ }()));
175
+ hasLoaded = true;
176
+ return _context3.abrupt("return", loadedComponents);
177
+ case 5:
178
+ case "end":
179
+ return _context3.stop();
180
+ }
181
+ }, _callee3);
182
+ }));
183
+ return function (_x2) {
184
+ return _ref2.apply(this, arguments);
185
+ };
186
+ }());
187
+ (0, _defineProperty2["default"])(this, "buildUrl", function (endpoint) {
188
+ var _this$localServer;
189
+ var url = (_this$localServer = _this.localServer) !== null && _this$localServer !== void 0 ? _this$localServer : qohUri;
190
+ var suffix = _this.apiToken ? "?code=".concat(_this.apiToken) : '';
191
+ return "".concat(url, "/").concat(endpoint).concat(suffix);
192
+ });
193
+ (0, _defineProperty2["default"])(this, "queryGraphql", /*#__PURE__*/function () {
194
+ var _ref4 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(graphqlQuery) {
195
+ var queryUrl, response, body, errorResponse;
196
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
197
+ while (1) switch (_context4.prev = _context4.next) {
198
+ case 0:
199
+ /*
200
+ if (!this.backend.uri) {
201
+ throw new Error(
202
+ 'Backend-Uri is missing. The Backend-Uri is either set via the constructor or the init methode.'
203
+ );
204
+ }
205
+ if (!this.backend.token) {
206
+ throw new Error(
207
+ 'Token is missing. The token is eihter set via the constructor or the init methode.'
208
+ );
209
+ }
210
+ */
211
+ queryUrl = _this.buildUrl('execGraphqlQuery');
212
+ console.warn("using url : ".concat(queryUrl));
213
+ if (!queryUrl) {
214
+ _context4.next = 19;
215
+ break;
216
+ }
217
+ _context4.next = 5;
218
+ return fetch(queryUrl, {
219
+ method: 'POST',
220
+ headers: {
221
+ 'Content-Type': 'application/json'
222
+ },
223
+ body: JSON.stringify({
224
+ uri: _this.backend.uri,
225
+ query: graphqlQuery,
226
+ token: _this.backend.token
227
+ })
228
+ });
229
+ case 5:
230
+ response = _context4.sent;
231
+ if (!response.ok) {
232
+ _context4.next = 14;
233
+ break;
234
+ }
235
+ _context4.next = 9;
236
+ return response.json();
237
+ case 9:
238
+ body = _context4.sent;
239
+ _this.sendDebugEvent();
240
+ return _context4.abrupt("return", body);
241
+ case 14:
242
+ _context4.next = 16;
243
+ return response.json();
244
+ case 16:
245
+ errorResponse = _context4.sent;
246
+ console.log(errorResponse);
247
+ throw new _ApiError.ApiError(response.status, errorResponse);
248
+ case 19:
249
+ throw new _ApiError.ApiError(500, {
250
+ id: '99',
251
+ summary: 'queryUrl was not set',
252
+ details: "LocalServer: ".concat(_this.localServer)
253
+ });
254
+ case 20:
255
+ case "end":
256
+ return _context4.stop();
257
+ }
258
+ }, _callee4);
259
+ }));
260
+ return function (_x4) {
261
+ return _ref4.apply(this, arguments);
262
+ };
263
+ }());
264
+ (0, _defineProperty2["default"])(this, "query", /*#__PURE__*/function () {
265
+ var _ref5 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(queryName, options) {
266
+ var queryUrl, extendedVariables, _extendedVariables$fi, _options$variables, _extendedVariables$fi2, response, _yield$response$json, body, normalizedBody, injectedBody, errorResponse;
267
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
268
+ while (1) switch (_context5.prev = _context5.next) {
269
+ case 0:
270
+ // if (!this.backend.uri) {
271
+ // throw new Error(
272
+ // 'Backend-Uri is missing. The Backend-Uri is either set via the constructor or the init methode.'
273
+ // );
274
+ // }
275
+ // if (!this.backend.token) {
276
+ // throw new Error(
277
+ // 'Token is missing. The token is eihter set via the constructor or the init methode.'
278
+ // );
279
+ // }
280
+ // if (queryName) {
281
+ // throw new Error('QueryName is missing. The QueryName is has to be provided when calling the query methode. The queryName refers to the name of the objects to be queried. E.g. pages');
282
+ // }
283
+ queryUrl = _this.buildUrl('execQuery');
284
+ extendedVariables = options !== null && options !== void 0 && options.variables ? _objectSpread({}, options.variables) : {};
285
+ if (options !== null && options !== void 0 && options.locale) {
286
+ extendedVariables.locale = options.locale;
287
+ }
288
+ if (options !== null && options !== void 0 && options.filter && Array.isArray(options.filter)) {
289
+ if (!extendedVariables.filter) {
290
+ extendedVariables.filter = [];
291
+ }
292
+ (_extendedVariables$fi = extendedVariables.filter).push.apply(_extendedVariables$fi, (0, _toConsumableArray2["default"])(options.filter));
293
+ if (options !== null && options !== void 0 && (_options$variables = options.variables) !== null && _options$variables !== void 0 && _options$variables.filter && Array.isArray(options.variables.filter)) {
294
+ (_extendedVariables$fi2 = extendedVariables.filter).push.apply(_extendedVariables$fi2, (0, _toConsumableArray2["default"])(options.variables.filter));
295
+ }
296
+ }
297
+ if (!(queryUrl && !!options)) {
298
+ _context5.next = 35;
299
+ break;
300
+ }
301
+ _context5.next = 7;
302
+ return fetch(queryUrl, {
303
+ method: 'POST',
304
+ headers: {
305
+ 'Content-Type': 'application/json'
306
+ },
307
+ credentials: 'include',
308
+ body: JSON.stringify({
309
+ uri: _this.backend.uri,
310
+ queryname: queryName,
311
+ token: _this.backend.token,
312
+ variables: extendedVariables,
313
+ components: _this.getRegisteredComponentsWithFields(),
314
+ ignoreProperties: options.ignoreProperties,
315
+ depth: options.depth
316
+ })
317
+ });
318
+ case 7:
319
+ response = _context5.sent;
320
+ if (!response.ok) {
321
+ _context5.next = 28;
322
+ break;
323
+ }
324
+ _context5.next = 11;
325
+ return response.json();
326
+ case 11:
327
+ _context5.t1 = _yield$response$json = _context5.sent;
328
+ _context5.t0 = _context5.t1 === null;
329
+ if (_context5.t0) {
330
+ _context5.next = 15;
331
+ break;
332
+ }
333
+ _context5.t0 = _yield$response$json === void 0;
334
+ case 15:
335
+ if (!_context5.t0) {
336
+ _context5.next = 19;
337
+ break;
338
+ }
339
+ _context5.t2 = void 0;
340
+ _context5.next = 20;
341
+ break;
342
+ case 19:
343
+ _context5.t2 = _yield$response$json.data;
344
+ case 20:
345
+ body = _context5.t2;
346
+ normalizedBody = _this.backend.normalize(body);
347
+ injectedBody = _this.debug ? _this.injectIds(normalizedBody) : normalizedBody;
348
+ _this.latestData = injectedBody;
349
+ _this.sendDebugEvent();
350
+ return _context5.abrupt("return", injectedBody);
351
+ case 28:
352
+ _context5.next = 30;
353
+ return response.json();
354
+ case 30:
355
+ errorResponse = _context5.sent;
356
+ console.log(errorResponse);
357
+ throw new _ApiError.ApiError(response.status, errorResponse);
358
+ case 33:
359
+ _context5.next = 36;
360
+ break;
361
+ case 35:
362
+ throw new _ApiError.ApiError(500, {
363
+ id: '99',
364
+ summary: "Query: queryUrl (".concat(queryUrl, ") or options are invalid"),
365
+ details: "queryUrl: ".concat(queryUrl)
366
+ });
367
+ case 36:
368
+ case "end":
369
+ return _context5.stop();
370
+ }
371
+ }, _callee5);
372
+ }));
373
+ return function (_x5, _x6) {
374
+ return _ref5.apply(this, arguments);
375
+ };
376
+ }());
377
+ (0, _defineProperty2["default"])(this, "getRegisteredComponentsWithFields", function () {
378
+ var components = {};
379
+ var entries = Object.entries(getAllregisteredComponents());
380
+ if (entries && Array.isArray(entries)) {
381
+ entries.forEach(function (_ref6) {
382
+ var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
383
+ key = _ref7[0],
384
+ value = _ref7[1];
385
+ var fields = {};
386
+ var fieldNames = value.fieldNames;
387
+ var hasAtLeastOneField = false;
388
+ if (fieldNames && Array.isArray(fieldNames)) {
389
+ fieldNames.forEach(function (field) {
390
+ fields[field] = true;
391
+ hasAtLeastOneField = true;
392
+ });
393
+ }
394
+ if (hasAtLeastOneField) {
395
+ components[key] = fields;
396
+ } else {
397
+ components[key] = {
398
+ __all: true
399
+ };
400
+ }
401
+ });
402
+ }
403
+ return components;
404
+ });
405
+ (0, _defineProperty2["default"])(this, "getQueries", /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
406
+ var queryUrl, response, body;
407
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
408
+ while (1) switch (_context6.prev = _context6.next) {
409
+ case 0:
410
+ queryUrl = _this.buildUrl('queries');
411
+ if (!(queryUrl && _this.backend && (_this.localServer || _this.backend.token))) {
412
+ _context6.next = 18;
413
+ break;
414
+ }
415
+ _context6.next = 4;
416
+ return fetch(queryUrl, {
417
+ method: 'POST',
418
+ headers: {
419
+ 'Content-Type': 'application/json'
420
+ },
421
+ body: JSON.stringify({
422
+ uri: _this.backend.uri,
423
+ token: _this.backend.token || null
424
+ })
425
+ });
426
+ case 4:
427
+ response = _context6.sent;
428
+ if (!response.ok) {
429
+ _context6.next = 16;
430
+ break;
431
+ }
432
+ _context6.prev = 6;
433
+ _context6.next = 9;
434
+ return response.json();
435
+ case 9:
436
+ body = _context6.sent;
437
+ return _context6.abrupt("return", body);
438
+ case 13:
439
+ _context6.prev = 13;
440
+ _context6.t0 = _context6["catch"](6);
441
+ console.error(_context6.t0);
442
+ case 16:
443
+ _context6.next = 19;
444
+ break;
445
+ case 18:
446
+ console.error('api, uri and CMSToken have to be provided');
447
+ case 19:
448
+ return _context6.abrupt("return", '');
449
+ case 20:
450
+ case "end":
451
+ return _context6.stop();
452
+ }
453
+ }, _callee6, null, [[6, 13]]);
454
+ })));
455
+ this.backend = backend;
456
+ this.apiToken = apiToken;
457
+ this.localServer = localServer;
458
+ // devtools-panel events and debug-option
459
+ this.debug = typeof document !== 'undefined' && document.getElementsByTagName('body')[0].classList.contains('qoh-inject-ids');
460
+ if (this.debug && typeof window !== 'undefined') {
461
+ window.addEventListener('QueenOfHearts-RequestData', function () {
462
+ _this.sendDebugEvent();
463
+ });
464
+ window.addEventListener('QueenOfHearts-RequestQueries', function () {
465
+ _this.sendQueriesEvent();
466
+ });
467
+ window.addEventListener('QueenOfHearts-HighlightComponent', function (event) {
468
+ _this.highlightComponent(event.detail);
469
+ });
470
+ window.addEventListener('QueenOfHearts-RequestComponentHTML', function (event) {
471
+ _this.sendComponentHTML(event.detail);
472
+ });
473
+ }
474
+ }
475
+ return (0, _createClass2["default"])(QueenofheartsService, [{
476
+ key: "loadAsyncComponent",
477
+ value: function () {
478
+ var _loadAsyncComponent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7(typeName) {
479
+ var template, loader, component;
480
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
481
+ while (1) switch (_context7.prev = _context7.next) {
482
+ case 0:
483
+ //console.log(`load Async: ${typeName}`);
484
+ template = componentRegistry[typeName];
485
+ if (!(template && template.component === undefined)) {
486
+ _context7.next = 10;
487
+ break;
488
+ }
489
+ if (template !== null && template !== void 0 && template.component) {
490
+ _context7.next = 9;
491
+ break;
492
+ }
493
+ if (!template.loader) {
494
+ _context7.next = 9;
495
+ break;
496
+ }
497
+ loader = template.loader; //componentRegistry[typeName].loader = undefined;
498
+ _context7.next = 7;
499
+ return loader();
500
+ case 7:
501
+ component = _context7.sent;
502
+ if (component) {
503
+ componentRegistry[typeName].component = component["default"];
504
+ //console.log('loaded async component : ' + typeName);
505
+ } else {
506
+ console.error("error loading ".concat(typeName));
507
+ console.error(component);
508
+ }
509
+ case 9:
510
+ return _context7.abrupt("return", typeName);
511
+ case 10:
512
+ return _context7.abrupt("return", null);
513
+ case 11:
514
+ case "end":
515
+ return _context7.stop();
516
+ }
517
+ }, _callee7);
518
+ }));
519
+ function loadAsyncComponent(_x7) {
520
+ return _loadAsyncComponent.apply(this, arguments);
521
+ }
522
+ return loadAsyncComponent;
523
+ }()
524
+ }, {
525
+ key: "createComponent",
526
+ value: function createComponent(props) {
527
+ var _template$component;
528
+ var data = props.data,
529
+ _props$contextProps = props.contextProps,
530
+ contextProps = _props$contextProps === void 0 ? {} : _props$contextProps;
531
+ var typeName = data.__typename;
532
+ var template = componentRegistry[typeName];
533
+ if (template) {
534
+ if (template.loader) {
535
+ /*#__PURE__*/(0, _react.lazy)(template.loader);
536
+ }
537
+ }
538
+ var functionalComponent = (_template$component = template === null || template === void 0 ? void 0 : template.component) !== null && _template$component !== void 0 ? _template$component : _Dodo["default"];
539
+ return /*#__PURE__*/_react["default"].createElement(functionalComponent, _objectSpread(_objectSpread({}, data), {}, {
540
+ contextProps: contextProps
541
+ }));
542
+ }
543
+ }, {
544
+ key: "injectIds",
545
+ value: function injectIds(data) {
546
+ var _this2 = this;
547
+ if (Array.isArray(data)) {
548
+ data.forEach(function (entry) {
549
+ return _this2.injectIds(entry);
550
+ });
551
+ } else if (data && (0, _typeof2["default"])(data) === 'object') {
552
+ if (data.hasOwnProperty('__typename')) {
553
+ var id = Math.random().toString();
554
+ data.__qohId = id.substr(id.indexOf('.') + 1);
555
+ }
556
+ Object.keys(data).forEach(function (key) {
557
+ return data[key] = _this2.injectIds(data[key]);
558
+ });
559
+ }
560
+ return data;
561
+ }
562
+ }, {
563
+ key: "sendDebugEvent",
564
+ value: function sendDebugEvent() {
565
+ if (typeof window === 'undefined') return;
566
+ var debugData = {
567
+ registeredComponents: Object.keys(componentRegistry),
568
+ url: this.latestUrl,
569
+ data: this.latestData
570
+ };
571
+ var event = new CustomEvent('QueenOfHearts-DebuggingData', {
572
+ detail: debugData
573
+ });
574
+ window.dispatchEvent(event);
575
+ }
576
+ }, {
577
+ key: "sendQueriesEvent",
578
+ value: function () {
579
+ var _sendQueriesEvent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
580
+ var event;
581
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
582
+ while (1) switch (_context8.prev = _context8.next) {
583
+ case 0:
584
+ if (!(typeof window === 'undefined')) {
585
+ _context8.next = 2;
586
+ break;
587
+ }
588
+ return _context8.abrupt("return");
589
+ case 2:
590
+ _context8.t0 = CustomEvent;
591
+ _context8.next = 5;
592
+ return this.getQueries();
593
+ case 5:
594
+ _context8.t1 = _context8.sent;
595
+ _context8.t2 = {
596
+ detail: _context8.t1
597
+ };
598
+ event = new _context8.t0('QueenOfHearts-AvailableQueries', _context8.t2);
599
+ window.dispatchEvent(event);
600
+ case 9:
601
+ case "end":
602
+ return _context8.stop();
603
+ }
604
+ }, _callee8, this);
605
+ }));
606
+ function sendQueriesEvent() {
607
+ return _sendQueriesEvent.apply(this, arguments);
608
+ }
609
+ return sendQueriesEvent;
610
+ }()
611
+ }, {
612
+ key: "sendComponentHTML",
613
+ value: function sendComponentHTML(id) {
614
+ var _document$querySelect;
615
+ if (typeof window === 'undefined') return;
616
+ var component = (_document$querySelect = document.querySelector("[qohId='".concat(id, "']"))) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.nextElementSibling;
617
+ if (component) {
618
+ var event = new CustomEvent('QueenOfHearts-SelectedComponentHTML', {
619
+ detail: {
620
+ qohId: id,
621
+ html: component.outerHTML
622
+ }
623
+ });
624
+ window.dispatchEvent(event);
625
+ }
626
+ }
627
+ }, {
628
+ key: "highlightComponent",
629
+ value: function highlightComponent(id) {
630
+ var _document$querySelect2;
631
+ var animation = [{
632
+ outline: 'thick auto white'
633
+ }, {
634
+ outline: 'thick auto red'
635
+ }];
636
+ var animationTiming = {
637
+ duration: 1000,
638
+ iterations: 2
639
+ };
640
+ var component = (_document$querySelect2 = document.querySelector("[qohId='".concat(id, "']"))) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.nextElementSibling;
641
+ component && component.scrollIntoView({
642
+ behavior: 'smooth',
643
+ block: 'center',
644
+ inline: 'center'
645
+ });
646
+ component && component.animate(animation, animationTiming);
647
+ }
648
+ }], [{
649
+ key: "init",
650
+ value: function init(backend, apiToken, localServer) {
651
+ QueenofheartsService.instance = new QueenofheartsService(backend, apiToken, localServer);
652
+ }
653
+ }, {
654
+ key: "getInstance",
655
+ value: function getInstance() {
656
+ if (!QueenofheartsService.instance) console.error('QueenofheartsService was not initialized using QueenofheartsService.init(backend, apiToken)');
657
+ return QueenofheartsService.instance;
658
+ }
659
+ }]);
660
+ }();
661
+ _QueenofheartsService = QueenofheartsService;
662
+ (0, _defineProperty2["default"])(QueenofheartsService, "instance", void 0);