@telia-ace/widget-types-grid 1.0.0

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.
Files changed (91) hide show
  1. package/LICENSE.txt +6 -0
  2. package/README.md +3 -0
  3. package/lib/component-platform-factory.d.ts +13 -0
  4. package/lib/component-platform-factory.js +105 -0
  5. package/lib/index.d.ts +4 -0
  6. package/lib/index.js +16 -0
  7. package/lib/services.d.ts +7 -0
  8. package/lib/services.js +99 -0
  9. package/lib/site-provider.d.ts +5 -0
  10. package/lib/site-provider.js +18 -0
  11. package/lib/ui/animated-view.d.ts +6 -0
  12. package/lib/ui/animated-view.js +142 -0
  13. package/lib/ui/component.d.ts +18 -0
  14. package/lib/ui/component.js +179 -0
  15. package/lib/ui/detached-component.d.ts +7 -0
  16. package/lib/ui/detached-component.js +73 -0
  17. package/lib/ui/determine-slide-direction.d.ts +26 -0
  18. package/lib/ui/determine-slide-direction.js +51 -0
  19. package/lib/ui/html-element-handlers.d.ts +18 -0
  20. package/lib/ui/html-element-handlers.js +128 -0
  21. package/lib/ui/index.d.ts +6 -0
  22. package/lib/ui/index.js +19 -0
  23. package/lib/ui/not-found.d.ts +6 -0
  24. package/lib/ui/not-found.js +83 -0
  25. package/lib/ui/prepare-dom.d.ts +20 -0
  26. package/lib/ui/prepare-dom.js +122 -0
  27. package/lib/ui/render.d.ts +3 -0
  28. package/lib/ui/render.js +11 -0
  29. package/lib/ui/resolvable-component.d.ts +7 -0
  30. package/lib/ui/resolvable-component.js +87 -0
  31. package/lib/ui/switch.d.ts +11 -0
  32. package/lib/ui/switch.js +58 -0
  33. package/lib/ui/unmount.d.ts +2 -0
  34. package/lib/ui/unmount.js +4 -0
  35. package/lib/ui/use-component-node-properties.d.ts +3 -0
  36. package/lib/ui/use-component-node-properties.js +44 -0
  37. package/lib/ui/use-router.d.ts +4 -0
  38. package/lib/ui/use-router.js +32 -0
  39. package/lib/ui/view-outlet.d.ts +32 -0
  40. package/lib/ui/view-outlet.js +151 -0
  41. package/lib/ui/view.d.ts +6 -0
  42. package/lib/ui/view.js +75 -0
  43. package/lib/ui/wrapper.d.ts +7 -0
  44. package/lib/ui/wrapper.js +108 -0
  45. package/lib/widget.d.ts +54 -0
  46. package/lib/widget.js +554 -0
  47. package/lib-esm/component-platform-factory.d.ts +13 -0
  48. package/lib-esm/component-platform-factory.js +101 -0
  49. package/lib-esm/index.d.ts +4 -0
  50. package/lib-esm/index.js +4 -0
  51. package/lib-esm/services.d.ts +7 -0
  52. package/lib-esm/services.js +67 -0
  53. package/lib-esm/site-provider.d.ts +5 -0
  54. package/lib-esm/site-provider.js +14 -0
  55. package/lib-esm/ui/animated-view.d.ts +6 -0
  56. package/lib-esm/ui/animated-view.js +114 -0
  57. package/lib-esm/ui/component.d.ts +18 -0
  58. package/lib-esm/ui/component.js +150 -0
  59. package/lib-esm/ui/detached-component.d.ts +7 -0
  60. package/lib-esm/ui/detached-component.js +45 -0
  61. package/lib-esm/ui/determine-slide-direction.d.ts +26 -0
  62. package/lib-esm/ui/determine-slide-direction.js +46 -0
  63. package/lib-esm/ui/html-element-handlers.d.ts +18 -0
  64. package/lib-esm/ui/html-element-handlers.js +120 -0
  65. package/lib-esm/ui/index.d.ts +6 -0
  66. package/lib-esm/ui/index.js +6 -0
  67. package/lib-esm/ui/not-found.d.ts +6 -0
  68. package/lib-esm/ui/not-found.js +58 -0
  69. package/lib-esm/ui/prepare-dom.d.ts +20 -0
  70. package/lib-esm/ui/prepare-dom.js +116 -0
  71. package/lib-esm/ui/render.d.ts +3 -0
  72. package/lib-esm/ui/render.js +6 -0
  73. package/lib-esm/ui/resolvable-component.d.ts +7 -0
  74. package/lib-esm/ui/resolvable-component.js +62 -0
  75. package/lib-esm/ui/switch.d.ts +11 -0
  76. package/lib-esm/ui/switch.js +53 -0
  77. package/lib-esm/ui/unmount.d.ts +2 -0
  78. package/lib-esm/ui/unmount.js +2 -0
  79. package/lib-esm/ui/use-component-node-properties.d.ts +3 -0
  80. package/lib-esm/ui/use-component-node-properties.js +42 -0
  81. package/lib-esm/ui/use-router.d.ts +4 -0
  82. package/lib-esm/ui/use-router.js +30 -0
  83. package/lib-esm/ui/view-outlet.d.ts +32 -0
  84. package/lib-esm/ui/view-outlet.js +126 -0
  85. package/lib-esm/ui/view.d.ts +6 -0
  86. package/lib-esm/ui/view.js +70 -0
  87. package/lib-esm/ui/wrapper.d.ts +7 -0
  88. package/lib-esm/ui/wrapper.js +80 -0
  89. package/lib-esm/widget.d.ts +54 -0
  90. package/lib-esm/widget.js +551 -0
  91. package/package.json +52 -0
@@ -0,0 +1,551 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __assign = (this && this.__assign) || function () {
17
+ __assign = Object.assign || function(t) {
18
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
19
+ s = arguments[i];
20
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
21
+ t[p] = s[p];
22
+ }
23
+ return t;
24
+ };
25
+ return __assign.apply(this, arguments);
26
+ };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ import { WidgetRenderState, } from '@telia-ace/widget-core';
44
+ import { onWidgetUrl } from '@telia-ace/widget-routing';
45
+ import { createStorageWriter, readStorage, StorageCategory, StorageMedium, StorageScope, } from '@telia-ace/widget-services';
46
+ import { removeNullAndUndefinedValues, uuid } from '@telia-ace/widget-utilities';
47
+ import { supportBootstrapping } from '@webprovisions/bootstrapping';
48
+ import { WidgetType } from '@webprovisions/platform';
49
+ import { ViewOutlet } from '././ui/view-outlet';
50
+ import { createActionResolver, createComponentPlatform, createComponentResolver, createRoutingService, createServiceClient, createStorageService, } from './services';
51
+ import { setActive, setInactive } from './ui/html-element-handlers';
52
+ import { determineTriggerType, prepareDOMElements, TriggerType } from './ui/prepare-dom';
53
+ var SETTINGS_STORAGE_KEY = '$settings';
54
+ var OPEN_STORAGE_KEY = 'open';
55
+ var STICKY_WIDGET_STORAGE_KEY = 'activeStickyWidget';
56
+ export var InitialRenderState;
57
+ (function (InitialRenderState) {
58
+ InitialRenderState["Open"] = "open";
59
+ InitialRenderState["Closed"] = "closed";
60
+ InitialRenderState["Hidden"] = "hidden";
61
+ InitialRenderState["Storage"] = "storage";
62
+ })(InitialRenderState || (InitialRenderState = {}));
63
+ var Widget = /** @class */ (function (_super) {
64
+ __extends(Widget, _super);
65
+ function Widget(container) {
66
+ var _this = _super.call(this, container) || this;
67
+ _this.outlets = new Map();
68
+ _this.activated = undefined;
69
+ _this.subs = [];
70
+ _this.handleBootstrapping = function (activationData) {
71
+ var options = {
72
+ triggerDOMElement: activationData.sourceDOMElement,
73
+ withRenderState: InitialRenderState.Storage,
74
+ };
75
+ _this.container.get('settings').then(function (settings) {
76
+ var activate = settings.activate;
77
+ var shouldActivate = typeof activate === 'undefined' || activate === null || activate === true;
78
+ if (shouldActivate) {
79
+ _this.activated = (_this.activated || _this.widget.activate()).then(function () {
80
+ return _this.attach(options);
81
+ });
82
+ }
83
+ });
84
+ };
85
+ _this.container.registerAsync('storage', function () { return createStorageService(_this.container); });
86
+ _this.container.registerFactory('settings', function () {
87
+ return readStorage(_this.container, SETTINGS_STORAGE_KEY, StorageMedium.Local).then(function (settings) {
88
+ if (settings === void 0) { settings = {}; }
89
+ return __assign(__assign({}, _this.container.get('$settings')), settings);
90
+ });
91
+ });
92
+ supportBootstrapping(_this, 'load', _this.handleBootstrapping);
93
+ _this.container.registerAsync('componentResolver', function () {
94
+ return createComponentResolver(_this.container);
95
+ });
96
+ _this.container.registerAsync('matchingClient', function () { return createServiceClient(_this.container); });
97
+ _this.container.registerAsync('router', function () { return createRoutingService(_this.container); });
98
+ _this.container.registerAsync('actionResolver', function () { return createActionResolver(_this.container); });
99
+ _this.container.register('matchMedia', window.matchMedia);
100
+ _this.container.registerAsync('components', function () { return createComponentPlatform(_this.container); });
101
+ return _this;
102
+ }
103
+ Widget.prototype.initialize = function () {
104
+ var _this = this;
105
+ var promises = this.container.getManyAsync('actionResolver', 'router', 'components');
106
+ return Promise.all([promises, this.container.get('settings')]).then(function (_a) {
107
+ var _b;
108
+ var _c = __read(_a, 2), _d = _c[0], actionResolver = _d.actionResolver, router = _d.router, components = _d.components, settings = _c[1];
109
+ actionResolver.subscribe(_this.widget.name, function (origin, action, value) {
110
+ return _this.onAction(action, value);
111
+ });
112
+ var switchViewNodes = function (routeName) {
113
+ components.nodes.query({ type: 'view' }).forEach(function (viewNode) {
114
+ components.setSwitch(viewNode, routeName);
115
+ });
116
+ };
117
+ var initialRoute = ((_b = router.getInitialRoute()) === null || _b === void 0 ? void 0 : _b.name) || 'index';
118
+ switchViewNodes(initialRoute);
119
+ _this.events.subscribe('widget:data-loaded', function (e, _a) {
120
+ var element = _a.element;
121
+ if (_this.widget.container.get('seoConfiguration')) {
122
+ _this.events.dispatch('widget:preloaded-replaced', {
123
+ element: element,
124
+ });
125
+ }
126
+ });
127
+ _this.events.subscribe('router:change', function (e, _a) {
128
+ var _b = _a.previous, previous = _b === void 0 ? { routeData: {} } : _b, _c = _a.next, next = _c === void 0 ? { routeData: {} } : _c;
129
+ var prevData = previous.routeData;
130
+ var nextData = next.routeData;
131
+ var notFoundView = Object.keys(settings.views).reduce(function (acc, key) {
132
+ var view = settings.views[key];
133
+ if (typeof view.path === 'undefined') {
134
+ return key;
135
+ }
136
+ return acc;
137
+ }, '');
138
+ // route not found
139
+ if (!nextData.name && notFoundView) {
140
+ switchViewNodes(notFoundView);
141
+ }
142
+ else {
143
+ switchViewNodes(nextData.name);
144
+ }
145
+ removeNullAndUndefinedValues(prevData && prevData.params);
146
+ removeNullAndUndefinedValues(nextData && nextData.params);
147
+ _this.container
148
+ .getAsync('actionResolver')
149
+ .then(function (actionResolver) {
150
+ actionResolver.action(_this.widget.name, 'routeChange', {
151
+ next: nextData,
152
+ previous: prevData,
153
+ });
154
+ });
155
+ });
156
+ return router.initialize();
157
+ });
158
+ };
159
+ Widget.prototype.attach = function (attachData) {
160
+ var _this = this;
161
+ if (attachData === void 0) { attachData = {}; }
162
+ return this.container.get('settings').then(function (_a) {
163
+ var _b, _c;
164
+ var trigger = _a.trigger;
165
+ var widgetDOMElement = attachData.widgetDOMElement, _d = attachData.key, key = _d === void 0 ? uuid() : _d, triggerDOMElement = attachData.triggerDOMElement, withRenderState = attachData.withRenderState;
166
+ var triggerType = determineTriggerType(trigger);
167
+ // This could probably be defined already when bootstrapping occurs,
168
+ // Webprovisions knows when a widget is prerendered,
169
+ // see "queryPrerenderedTargets in @webprovisions/bootstrapping"
170
+ var waitWithReplace = triggerType === TriggerType.Inline &&
171
+ ((triggerDOMElement === null || triggerDOMElement === void 0 ? void 0 : triggerDOMElement.childElementCount) || 0) > 0;
172
+ var outletOptions = prepareDOMElements(_this.widget.name, widgetDOMElement, triggerDOMElement, trigger, waitWithReplace);
173
+ if (_this.outlets.size < 1 && !withRenderState) {
174
+ _this.setRenderState('unset');
175
+ }
176
+ var swap = function () {
177
+ var isReady = function () {
178
+ return widgetDOMElement.querySelectorAll('[data-loading=true]').length === 0;
179
+ };
180
+ var _a = __read(_this.widget.container.get('widgetDOMElements'), 1), widgetDOMElement = _a[0];
181
+ var watcher = function (mutations, observer) {
182
+ if (isReady()) {
183
+ if (outletOptions.callback) {
184
+ outletOptions.callback();
185
+ }
186
+ observer.disconnect();
187
+ }
188
+ };
189
+ var options = {
190
+ attributes: true,
191
+ subtree: true,
192
+ };
193
+ if (isReady()) {
194
+ outletOptions.callback && outletOptions.callback();
195
+ }
196
+ var observer = new MutationObserver(watcher);
197
+ observer.observe(widgetDOMElement, options);
198
+ };
199
+ if (waitWithReplace) {
200
+ _this.widget.container.getAsync('dataClient').then(function (_a) {
201
+ var events = _a.events;
202
+ events.subscribe('data-client:fetched', function (event, data) {
203
+ if (data.unresolvedQueries === 0) {
204
+ swap();
205
+ }
206
+ });
207
+ });
208
+ }
209
+ var outlet = _this.getOrCreateViewOutlet(key, outletOptions);
210
+ _this.outlets.set(key, outlet);
211
+ _this.widget.events.dispatch('widget:attached', {}, { bubbles: true });
212
+ if (outletOptions.triggerType === TriggerType.Badge && trigger) {
213
+ (_b = outletOptions.triggerDOMElement) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
214
+ outlet === null || outlet === void 0 ? void 0 : outlet.renderBadge(trigger);
215
+ }
216
+ if (outletOptions.triggerType !== TriggerType.Inline) {
217
+ (_c = outletOptions.triggerDOMElement) === null || _c === void 0 ? void 0 : _c.addEventListener('click', function (event) {
218
+ event.preventDefault();
219
+ _this.container
220
+ .get('settings')
221
+ .then(function (_a) {
222
+ var updatedTrigger = _a.trigger;
223
+ outlet
224
+ .render()
225
+ .then(function () { return _this.renderState(); })
226
+ .then(function (renderState) {
227
+ if (updatedTrigger &&
228
+ updatedTrigger.action &&
229
+ updatedTrigger.action === 'hide') {
230
+ return renderState === WidgetRenderState.open
231
+ ? _this.hide()
232
+ : _this.open();
233
+ }
234
+ return renderState === WidgetRenderState.open
235
+ ? _this.close()
236
+ : _this.open();
237
+ });
238
+ });
239
+ });
240
+ }
241
+ if (_this.outlets.size > 1) {
242
+ return _this.renderState().then(function (state) {
243
+ // new outlets should have the same state as existing ones
244
+ _this.triggerStateIfApplicable(state);
245
+ });
246
+ }
247
+ if (withRenderState) {
248
+ if (withRenderState === InitialRenderState.Storage) {
249
+ return _this.renderState().then(function (state) {
250
+ if (outletOptions.triggerType === TriggerType.Inline) {
251
+ _this.triggerStateIfApplicable('open');
252
+ return;
253
+ }
254
+ _this.triggerStateIfApplicable(state);
255
+ });
256
+ }
257
+ return _this.triggerStateIfApplicable(withRenderState);
258
+ }
259
+ });
260
+ };
261
+ Widget.prototype.detach = function (key) {
262
+ if (key) {
263
+ if (this.outlets.has(key)) {
264
+ var outlet = this.outlets.get(key);
265
+ outlet === null || outlet === void 0 ? void 0 : outlet.dispose();
266
+ this.outlets.delete(key);
267
+ return;
268
+ }
269
+ if (process.env.NODE_ENV !== 'production') {
270
+ console.warn("detach(): Could not find View Outlet with key ".concat(key));
271
+ }
272
+ return;
273
+ }
274
+ this.outlets.forEach(function (outlet) {
275
+ outlet.dispose();
276
+ });
277
+ this.outlets.clear();
278
+ };
279
+ Widget.prototype.triggerStateIfApplicable = function (input) {
280
+ var _this = this;
281
+ return this.container.getAsync('router').then(function (router) {
282
+ switch (input) {
283
+ case 'closed':
284
+ _this.close();
285
+ break;
286
+ case 'open':
287
+ _this.open();
288
+ break;
289
+ case 'hidden':
290
+ _this.hide();
291
+ router.start();
292
+ break;
293
+ default:
294
+ return;
295
+ }
296
+ });
297
+ };
298
+ Widget.prototype.getOrCreateViewOutlet = function (key, options) {
299
+ return (this.outlets.has(key) ? this.outlets.get(key) : new ViewOutlet(this.container, options));
300
+ };
301
+ Widget.prototype.render = function (renderData) {
302
+ if (renderData === void 0) { renderData = {}; }
303
+ if (process.env.NODE_ENV !== 'production') {
304
+ console.warn('widget.render() is deprecated. Use widget.attach() instead.');
305
+ }
306
+ if (renderData.open) {
307
+ var options = __assign(__assign({}, renderData), { withRenderState: InitialRenderState.Open });
308
+ return this.attach(options);
309
+ }
310
+ return this.attach(renderData);
311
+ };
312
+ Widget.prototype.activate = function (data) {
313
+ if (data === null || data === void 0 ? void 0 : data.override) {
314
+ this.setSettings(function () { return data.override; });
315
+ }
316
+ // TODO: this is considered a hack, remove apiNotificationPriorityBy
317
+ // when there is a better way to get notifications from backend
318
+ if (data === null || data === void 0 ? void 0 : data.apiNotificationPriorityBy) {
319
+ this.container.register('apiNotificationPriorityBy', data.apiNotificationPriorityBy);
320
+ }
321
+ };
322
+ Widget.prototype.setSettings = function (fn) {
323
+ var _this = this;
324
+ return Promise.all([
325
+ this.container.get('settings'),
326
+ createStorageWriter(this.container, SETTINGS_STORAGE_KEY, StorageCategory.Necessary, {
327
+ medium: StorageMedium.Local,
328
+ }),
329
+ ]).then(function (_a) {
330
+ var _b = __read(_a, 2), settings = _b[0], write = _b[1];
331
+ return Promise.resolve(fn(settings)).then(function (override) {
332
+ return write(override).then(function () {
333
+ var updated = __assign(__assign({}, settings), override);
334
+ _this.widget.events.dispatch('widget:settings-updated', updated);
335
+ return updated;
336
+ });
337
+ });
338
+ });
339
+ };
340
+ Widget.prototype.clearSettings = function () {
341
+ var _this = this;
342
+ return createStorageWriter(this.container, SETTINGS_STORAGE_KEY, StorageCategory.Necessary, { medium: StorageMedium.Local })
343
+ .then(function (write) { return write(); })
344
+ .then(function () { return _this.container.get('settings'); })
345
+ .then(function (settings) {
346
+ _this.widget.events.dispatch('widget:settings-updated', settings);
347
+ });
348
+ };
349
+ Widget.prototype.action = function (_a) {
350
+ var _this = this;
351
+ var action = _a.action, value = _a.value;
352
+ return this.container.getAsync('actionResolver').then(function (actionResolver) {
353
+ actionResolver.action(_this.widget.name, action, value);
354
+ });
355
+ };
356
+ Widget.prototype.renderState = function () {
357
+ var _this = this;
358
+ if (onWidgetUrl(this.container)) {
359
+ return Promise.resolve(WidgetRenderState.open);
360
+ }
361
+ var readSessionOpen = function () {
362
+ return readStorage(_this.container, OPEN_STORAGE_KEY, StorageMedium.Session).then(function (value) {
363
+ if (value === void 0) { value = WidgetRenderState.closed; }
364
+ return value;
365
+ });
366
+ };
367
+ var readLocalOpen = function () {
368
+ return readStorage(_this.container, OPEN_STORAGE_KEY, StorageMedium.Session).then(function (value) {
369
+ if (value === void 0) { value = WidgetRenderState.closed; }
370
+ return value;
371
+ });
372
+ };
373
+ return this.container.getAsync('router').then(function (routing) {
374
+ if (routing.isSticky()) {
375
+ return readLocalOpen().then(function (localOpen) {
376
+ return localOpen === WidgetRenderState.open ? localOpen : readSessionOpen();
377
+ });
378
+ }
379
+ return readSessionOpen();
380
+ });
381
+ };
382
+ Widget.prototype.hide = function () {
383
+ var _this = this;
384
+ if (this.outlets.size < 1) {
385
+ if (process.env.NODE_ENV !== 'production') {
386
+ console.warn('hide(): No-op as no view outlets are registered. Invoke the attach() command first.');
387
+ }
388
+ return Promise.resolve();
389
+ }
390
+ this.outlets.forEach(function (outlet) { return outlet.render(); });
391
+ return this.action({ action: 'hide' }).then(function () {
392
+ _this.setTriggerState(false);
393
+ });
394
+ };
395
+ Widget.prototype.open = function () {
396
+ var _this = this;
397
+ if (this.outlets.size < 1) {
398
+ if (process.env.NODE_ENV !== 'production') {
399
+ console.warn('open(): No-op as no view outlets are registered. Invoke the attach() command first.');
400
+ }
401
+ return Promise.resolve();
402
+ }
403
+ this.outlets.forEach(function (outlet) { return outlet.render(); });
404
+ return this.action({ action: 'open' }).then(function () {
405
+ _this.widget.events.dispatch('tracking:widget-rendered', {});
406
+ return _this.onOpen();
407
+ });
408
+ };
409
+ Widget.prototype.close = function () {
410
+ var _this = this;
411
+ if (this.outlets.size < 1) {
412
+ if (process.env.NODE_ENV !== 'production') {
413
+ console.warn('close(): No-op as no view outlets are registered. Invoke the attach() command first.');
414
+ }
415
+ return Promise.resolve();
416
+ }
417
+ return this.action({ action: 'close' }).then(function () { return _this.onClose(); });
418
+ };
419
+ Widget.prototype.show = function () {
420
+ if (process.env.NODE_ENV !== 'production') {
421
+ console.warn('show(): Command is deprecated and will be removed in the future. Use open() instead.');
422
+ }
423
+ return this.open();
424
+ };
425
+ Widget.prototype.onAction = function (action, value) {
426
+ var _this = this;
427
+ switch (action) {
428
+ case 'close':
429
+ case 'open':
430
+ case 'hide':
431
+ var newState_1 = action === 'open'
432
+ ? WidgetRenderState.open
433
+ : action === 'close'
434
+ ? WidgetRenderState.closed
435
+ : WidgetRenderState.hidden;
436
+ return this.setRenderState(newState_1).then(function () {
437
+ _this.setTriggerState(newState_1 === WidgetRenderState.open);
438
+ if (newState_1 !== WidgetRenderState.hidden) {
439
+ newState_1 === WidgetRenderState.open ? _this.onOpen() : _this.onClose();
440
+ }
441
+ else {
442
+ _this.outlets.forEach(function (outlet) { var _a; return (_a = outlet.options.triggerDOMElement) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false'); });
443
+ }
444
+ });
445
+ }
446
+ };
447
+ Widget.prototype.setRenderState = function (newState) {
448
+ var _a = this.container.get('$widget'), invoke = _a.invoke, events = _a.events;
449
+ return Promise.all([
450
+ createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {
451
+ medium: StorageMedium.Session,
452
+ }),
453
+ createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {
454
+ medium: StorageMedium.Local,
455
+ duration: { minutes: 5 },
456
+ }),
457
+ this.container.getAsync('router'),
458
+ invoke('renderState'),
459
+ ]).then(function (_a) {
460
+ var _b = __read(_a, 4), writeSessionOpen = _b[0], writeLocalOpen = _b[1], routing = _b[2], previousRenderState = _b[3];
461
+ if (newState === 'unset' || !newState) {
462
+ writeLocalOpen();
463
+ writeSessionOpen();
464
+ }
465
+ else {
466
+ if (routing.isSticky()) {
467
+ writeLocalOpen(newState);
468
+ }
469
+ writeSessionOpen(newState);
470
+ }
471
+ events.dispatch('widget:render-state-changed', {
472
+ previous: previousRenderState,
473
+ next: newState,
474
+ });
475
+ });
476
+ };
477
+ Widget.prototype.onOpen = function () {
478
+ var _this = this;
479
+ return this.container.getAsync('router').then(function (router) {
480
+ _this.outlets.forEach(function (outlet) { var _a; return (_a = outlet.options.triggerDOMElement) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true'); });
481
+ return router.start();
482
+ });
483
+ };
484
+ Widget.prototype.onClose = function () {
485
+ var _this = this;
486
+ var services = this.container.getManyAsync('router', 'components');
487
+ var resetActivateProp = function () {
488
+ return _this.container.get('settings').then(function (widgetSettings) {
489
+ var activate = _this.container.get('$settings').activate;
490
+ if (widgetSettings.activate !== activate) {
491
+ return _this.setSettings(function () { return Promise.resolve({ activate: activate }); });
492
+ }
493
+ return Promise.resolve();
494
+ });
495
+ };
496
+ return resetActivateProp()
497
+ .then(function () {
498
+ return services;
499
+ })
500
+ .then(function (_a) {
501
+ var router = _a.router, components = _a.components;
502
+ var visibleNodes = components.nodes.visible;
503
+ _this.outlets.forEach(function (outlet) { var _a; return (_a = outlet.options.triggerDOMElement) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false'); });
504
+ if (visibleNodes.filter(function (c) {
505
+ return c.attributes.properties.animation &&
506
+ c.attributes.properties.animation !== 'none';
507
+ }).length) {
508
+ return new Promise(function (resolve) {
509
+ setTimeout(function () {
510
+ resolve(router);
511
+ }, 200);
512
+ });
513
+ }
514
+ return Promise.resolve(router);
515
+ })
516
+ .then(function (router) { return router.stop(); });
517
+ };
518
+ Widget.prototype.setTriggerState = function (open) {
519
+ this.outlets.forEach(function (outlet) {
520
+ var _a = outlet.options, triggerDOMElement = _a.triggerDOMElement, triggerOptions = _a.triggerOptions;
521
+ var _b = triggerOptions || {}, openTooltip = _b.openTooltip, closedTooltip = _b.closedTooltip;
522
+ if (triggerDOMElement) {
523
+ open
524
+ ? setActive(triggerDOMElement, openTooltip)
525
+ : setInactive(triggerDOMElement, closedTooltip);
526
+ }
527
+ });
528
+ };
529
+ Widget.prototype.deactivate = function () {
530
+ var _this = this;
531
+ this.subs.forEach(function (s) { return s(); });
532
+ var promises = [];
533
+ this.outlets.forEach(function (outlet) { return promises.push(outlet.dispose()); });
534
+ return readStorage(this.container, STICKY_WIDGET_STORAGE_KEY, StorageMedium.Local).then(function (value) {
535
+ /**
536
+ * Remove stored sticky widget from implementation's localStorage if applicable
537
+ */
538
+ if (value === _this.widget.name) {
539
+ return createStorageWriter(_this.container, STICKY_WIDGET_STORAGE_KEY, StorageCategory.Necessary, {
540
+ medium: StorageMedium.Local,
541
+ scope: StorageScope.Implementation,
542
+ })
543
+ .then(function (write) { return write(); })
544
+ .then(function () { return Promise.all(promises); });
545
+ }
546
+ return Promise.all(promises);
547
+ });
548
+ };
549
+ return Widget;
550
+ }(WidgetType));
551
+ export default Widget;
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@telia-ace/widget-types-grid",
3
+ "version": "1.0.0",
4
+ "description": "Type definition for Grid widget.",
5
+ "license": "SEE LICENSE IN LICENSE.txt",
6
+ "author": "Telia Company AB",
7
+ "keywords": [
8
+ "telia"
9
+ ],
10
+ "main": "lib/index.js",
11
+ "module": "lib-esm/index.js",
12
+ "files": [
13
+ "LICENSE.txt",
14
+ "README.md",
15
+ "lib/",
16
+ "lib-esm/"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "scripts": {
22
+ "clean": "cleandir lib && cleandir lib-esm",
23
+ "compile": "tsc -p tsconfig.cjs.json && tsc -p tsconfig.esm.json"
24
+ },
25
+ "sideEffects": false,
26
+ "typings": "lib/index.d.ts",
27
+ "dependencies": {
28
+ "@telia-ace/knowledge-serviceclient": "^1.0.0",
29
+ "@telia-ace/widget-core": "^1.0.0",
30
+ "@telia-ace/widget-forms": "^1.0.0",
31
+ "@telia-ace/widget-routing": "^1.0.0",
32
+ "@telia-ace/widget-services": "^1.0.0",
33
+ "@telia-ace/widget-ui": "^1.0.0",
34
+ "@telia-ace/widget-utilities": "^1.0.1",
35
+ "@webprovisions/bootstrapping": "^1.0.12",
36
+ "@webprovisions/platform": "^1.1.2",
37
+ "react": "^17.0.2",
38
+ "react-dom": "^17.0.2",
39
+ "react-router": "^5.0.0",
40
+ "react-router-dom": "^5.0.0",
41
+ "react-transition-group": "^4.2.2",
42
+ "styled-components": "^4.3.2"
43
+ },
44
+ "devDependencies": {
45
+ "@types/react": "^17.0.39",
46
+ "@types/react-dom": "^17.0.13",
47
+ "@types/react-router-dom": "^5.1.0",
48
+ "@types/react-transition-group": "^4.4.4",
49
+ "@types/styled-components": "^5.1.7"
50
+ },
51
+ "gitHead": "a45fde2bae0981a2a791a2362f2ecaf53430570b"
52
+ }