@micromag/core 0.4.71 → 0.4.74

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/es/index.js CHANGED
@@ -1,1102 +1,910 @@
1
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
4
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
5
- import _createClass from '@babel/runtime/helpers/createClass';
6
1
  import isArray from 'lodash/isArray';
7
2
  import isObject from 'lodash/isObject';
8
3
  import uniqWith from 'lodash/uniqWith';
9
4
  import sortBy from 'lodash/sortBy';
10
- import _callSuper from '@babel/runtime/helpers/callSuper';
11
- import _inherits from '@babel/runtime/helpers/inherits';
12
5
  import EventEmitter from 'wolfy87-eventemitter';
13
6
  import { pascalCase } from 'change-case';
14
7
  import uniqBy from 'lodash/uniqBy';
15
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
16
8
  import uniq from 'lodash/uniq';
17
- import _typeof from '@babel/runtime/helpers/typeof';
18
9
  import isString from 'lodash/isString';
19
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
20
10
  import isEmpty from 'lodash/isEmpty';
21
11
  import { Tracking as Tracking$1 } from '@folklore/tracking';
22
12
 
23
- var sortedColors = function sortedColors(colors) {
24
- return sortBy(colors, ['color', 'alpha']);
25
- };
26
- var uniqueColors = function uniqueColors(colors) {
27
- return uniqWith(colors, function (colorA, colorB) {
28
- return colorA.alpha === colorB.alpha && colorA.color === colorB.color;
29
- });
30
- };
31
- var ColorsParser = /*#__PURE__*/function () {
32
- function ColorsParser(_ref) {
33
- var fieldsManager = _ref.fieldsManager,
34
- screensManager = _ref.screensManager;
35
- _classCallCheck(this, ColorsParser);
13
+ const sortedColors = colors => sortBy(colors, ['color', 'alpha']);
14
+ const uniqueColors = colors => uniqWith(colors, (colorA, colorB) => colorA.alpha === colorB.alpha && colorA.color === colorB.color);
15
+ class ColorsParser {
16
+ constructor({
17
+ fieldsManager,
18
+ screensManager
19
+ }) {
36
20
  this.fieldsManager = fieldsManager;
37
21
  this.screensManager = screensManager;
38
22
  }
39
23
 
40
24
  // Convert medias object to path
41
- return _createClass(ColorsParser, [{
42
- key: "parse",
43
- value: function parse(story) {
44
- var _this = this;
45
- if (story === null) {
46
- return story;
47
- }
48
- var _ref2 = story || {},
49
- _ref2$theme = _ref2.theme,
50
- theme = _ref2$theme === void 0 ? null : _ref2$theme,
51
- _ref2$components = _ref2.components,
52
- components = _ref2$components === void 0 ? [] : _ref2$components;
53
- var _components$reduce = components.reduce(function (_ref3, screen) {
54
- var _ref3$colors = _ref3.colors,
55
- currentColors = _ref3$colors === void 0 ? null : _ref3$colors;
56
- var type = screen.type;
57
- var _ref4 = _this.screensManager.getDefinition(type) || {},
58
- _ref4$fields = _ref4.fields,
59
- fields = _ref4$fields === void 0 ? [] : _ref4$fields;
60
- var fieldsPattern = _this.getColorFieldPatterns(fields);
61
- var _ColorsParser$getColo = ColorsParser.getColorsFromPath(screen, fieldsPattern),
62
- newColors = _ColorsParser$getColo.colors;
63
- return {
64
- colors: [].concat(_toConsumableArray(currentColors), _toConsumableArray(newColors))
65
- };
66
- }, {
67
- colors: []
68
- }),
69
- colors = _components$reduce.colors;
70
- if (theme !== null) {
71
- var themeColors = this.parse(theme);
72
- return colors !== null || themeColors !== null ? uniqueColors([].concat(_toConsumableArray(sortedColors(themeColors || [])), _toConsumableArray(sortedColors(colors || [])))) : [];
73
- }
74
- return colors !== null ? sortedColors(uniqueColors(colors || [])) : [];
75
- }
76
- }, {
77
- key: "getColorFieldPatterns",
78
- value: function getColorFieldPatterns(fields) {
79
- var _this2 = this;
80
- var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
81
- return fields.reduce(function (patterns, field) {
82
- var _field$name = field.name,
83
- name = _field$name === void 0 ? null : _field$name,
84
- _field$type = field.type,
85
- type = _field$type === void 0 ? null : _field$type;
86
- var path = [namePrefix, name].filter(function (it) {
87
- return it !== null;
88
- }).join('\\.');
89
- var fieldDefinition = _objectSpread(_objectSpread({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
90
- // also check settings fields
91
- var _fieldDefinition$fiel = fieldDefinition.fields,
92
- subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
93
- _fieldDefinition$item = fieldDefinition.itemsField,
94
- itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
95
- _fieldDefinition$sett = fieldDefinition.settings,
96
- settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
97
- return [].concat(_toConsumableArray(patterns), _toConsumableArray(ColorsParser.fieldIsColor(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray(_this2.getColorFieldPatterns(subFields, path)), _toConsumableArray(_this2.getColorFieldPatterns(settings, path)), _toConsumableArray(itemsField !== null ? _this2.getColorFieldPatterns([itemsField], "".concat(path, "\\.[0-9]+")) : []));
98
- }, []);
99
- }
100
- }], [{
101
- key: "fieldIsColor",
102
- value: function fieldIsColor(_ref5) {
103
- var _ref5$id = _ref5.id,
104
- id = _ref5$id === void 0 ? null : _ref5$id;
105
- return id === 'color';
25
+ parse(story) {
26
+ if (story === null) {
27
+ return story;
28
+ }
29
+ const {
30
+ theme = null,
31
+ components = []
32
+ } = story || {};
33
+ const {
34
+ colors
35
+ } = components.reduce(({
36
+ colors: currentColors = null
37
+ }, screen) => {
38
+ const {
39
+ type
40
+ } = screen;
41
+ const {
42
+ fields = []
43
+ } = this.screensManager.getDefinition(type) || {};
44
+ const fieldsPattern = this.getColorFieldPatterns(fields);
45
+ const {
46
+ colors: newColors
47
+ } = ColorsParser.getColorsFromPath(screen, fieldsPattern);
48
+ return {
49
+ colors: [...currentColors, ...newColors]
50
+ };
51
+ }, {
52
+ colors: []
53
+ });
54
+ if (theme !== null) {
55
+ const themeColors = this.parse(theme);
56
+ return colors !== null || themeColors !== null ? uniqueColors([...sortedColors(themeColors || []), ...sortedColors(colors || [])]) : [];
106
57
  }
107
- }, {
108
- key: "getColorsFromPath",
109
- value: function getColorsFromPath(data, patterns) {
110
- var colors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
111
- var keyPrefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
112
- var dataIsArray = isArray(data);
113
- var keys = dataIsArray ? _toConsumableArray(data.keys()) : Object.keys(data);
114
- return keys.reduce(function (_ref6, key) {
115
- var currentData = _ref6.data,
116
- _ref6$colors = _ref6.colors,
117
- currentColors = _ref6$colors === void 0 ? null : _ref6$colors;
118
- var path = [keyPrefix, key].filter(function (it) {
119
- return it !== null;
120
- }).join('.');
121
- var patternMatch = patterns.reduce(function (found, pattern) {
122
- return found || pattern.test(path);
123
- }, false);
124
- var value = data[key];
125
- var color = null;
126
- var newValue = null;
127
- var subColors = null;
128
- if (patternMatch && isObject(value)) {
129
- if (value.color && value.color.length === 4) {
130
- var innerColor = value.color.split('').map(function (hex, i) {
131
- return i > 0 ? hex + hex : hex;
132
- }).join('').toUpperCase();
133
- color = {
134
- alpha: value.alpha || 1,
135
- color: innerColor
136
- };
137
- } else if (value.color) {
138
- color = {
139
- alpha: value.alpha,
140
- color: value.color.toUpperCase()
141
- };
142
- }
143
- } else if (isObject(value) || isArray(value)) {
144
- var subReturn = ColorsParser.getColorsFromPath(value, patterns, colors, path);
145
- newValue = subReturn.data;
146
- subColors = subReturn.colors;
147
- } else {
148
- newValue = value;
58
+ return colors !== null ? sortedColors(uniqueColors(colors || [])) : [];
59
+ }
60
+ getColorFieldPatterns(fields, namePrefix = null) {
61
+ return fields.reduce((patterns, field) => {
62
+ const {
63
+ name = null,
64
+ type = null
65
+ } = field;
66
+ const path = [namePrefix, name].filter(it => it !== null).join('\\.');
67
+ const fieldDefinition = {
68
+ ...(type !== null ? this.fieldsManager.getDefinition(type) : null),
69
+ ...field
70
+ };
71
+ // also check settings fields
72
+ const {
73
+ fields: subFields = [],
74
+ itemsField = null,
75
+ settings = []
76
+ } = fieldDefinition;
77
+ return [...patterns, ...(ColorsParser.fieldIsColor(fieldDefinition) ? [new RegExp(`^${path}$`)] : []), ...this.getColorFieldPatterns(subFields, path), ...this.getColorFieldPatterns(settings, path), ...(itemsField !== null ? this.getColorFieldPatterns([itemsField], `${path}\\.[0-9]+`) : [])];
78
+ }, []);
79
+ }
80
+ static fieldIsColor({
81
+ id = null
82
+ }) {
83
+ return id === 'color';
84
+ }
85
+ static getColorsFromPath(data, patterns, colors = null, keyPrefix = null) {
86
+ const dataIsArray = isArray(data);
87
+ const keys = dataIsArray ? [...data.keys()] : Object.keys(data);
88
+ return keys.reduce(({
89
+ data: currentData,
90
+ colors: currentColors = null
91
+ }, key) => {
92
+ const path = [keyPrefix, key].filter(it => it !== null).join('.');
93
+ const patternMatch = patterns.reduce((found, pattern) => found || pattern.test(path), false);
94
+ const value = data[key];
95
+ let color = null;
96
+ let newValue = null;
97
+ let subColors = null;
98
+ if (patternMatch && isObject(value)) {
99
+ if (value.color && value.color.length === 4) {
100
+ const innerColor = value.color.split('').map((hex, i) => i > 0 ? hex + hex : hex).join('').toUpperCase();
101
+ color = {
102
+ alpha: value.alpha || 1,
103
+ color: innerColor
104
+ };
105
+ } else if (value.color) {
106
+ color = {
107
+ alpha: value.alpha,
108
+ color: value.color.toUpperCase()
109
+ };
149
110
  }
150
- return {
151
- data: dataIsArray ? [].concat(_toConsumableArray(currentData || []), [newValue]) : _objectSpread(_objectSpread({}, currentData), {}, _defineProperty({}, key, newValue)),
152
- colors: color !== null ? [].concat(_toConsumableArray(currentColors || []), _toConsumableArray(subColors || []), [color]) : [].concat(_toConsumableArray(currentColors || []), _toConsumableArray(subColors || []))
153
- };
154
- }, {
155
- data: keys.length === 0 ? data : null,
156
- colors: colors
157
- });
158
- }
159
- }]);
160
- }();
111
+ } else if (isObject(value) || isArray(value)) {
112
+ const subReturn = ColorsParser.getColorsFromPath(value, patterns, colors, path);
113
+ newValue = subReturn.data;
114
+ subColors = subReturn.colors;
115
+ } else {
116
+ newValue = value;
117
+ }
118
+ return {
119
+ data: dataIsArray ? [...(currentData || []), newValue] : {
120
+ ...currentData,
121
+ [key]: newValue
122
+ },
123
+ colors: color !== null ? [...(currentColors || []), ...(subColors || []), color] : [...(currentColors || []), ...(subColors || [])]
124
+ };
125
+ }, {
126
+ data: keys.length === 0 ? data : null,
127
+ colors
128
+ });
129
+ }
130
+ }
161
131
 
162
- var getComponentFromName = function getComponentFromName() {
163
- var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
164
- var components = arguments.length > 1 ? arguments[1] : undefined;
165
- var defaultComponent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
132
+ const getComponentFromName = (name = null, components, defaultComponent = null) => {
166
133
  if (components === null || name === null) {
167
134
  return defaultComponent;
168
135
  }
169
- var pascalName = pascalCase(name);
136
+ const pascalName = pascalCase(name);
170
137
  return components[pascalName] || components[name] || defaultComponent;
171
138
  };
172
139
 
173
140
  function getScreenFieldsWithStates(definition) {
174
- var _ref = definition || {},
175
- _ref$fields = _ref.fields,
176
- screenFields = _ref$fields === void 0 ? null : _ref$fields,
177
- _ref$states = _ref.states,
178
- states = _ref$states === void 0 ? null : _ref$states;
141
+ const {
142
+ fields: screenFields = null,
143
+ states = null
144
+ } = definition || {};
179
145
  if (states === null) {
180
146
  return screenFields;
181
147
  }
182
- var extraFields = states.reduce(function (statesFields, current) {
183
- var _ref2 = current || {},
184
- id = _ref2.id,
185
- _ref2$fields = _ref2.fields,
186
- fields = _ref2$fields === void 0 ? [] : _ref2$fields,
187
- _ref2$repeatable = _ref2.repeatable,
188
- repeatable = _ref2$repeatable === void 0 ? false : _ref2$repeatable,
189
- _ref2$fieldName = _ref2.fieldName,
190
- fieldName = _ref2$fieldName === void 0 ? null : _ref2$fieldName,
191
- label = _ref2.label,
192
- _ref2$defaultValue = _ref2.defaultValue,
193
- defaultValue = _ref2$defaultValue === void 0 ? null : _ref2$defaultValue;
194
- return [].concat(_toConsumableArray(statesFields), _toConsumableArray(repeatable ? [{
148
+ const extraFields = states.reduce((statesFields, current) => {
149
+ const {
150
+ id,
151
+ fields = [],
152
+ repeatable = false,
153
+ fieldName = null,
154
+ label,
155
+ defaultValue = null
156
+ } = current || {};
157
+ return [...statesFields, ...(repeatable ? [{
195
158
  type: 'items',
196
159
  name: fieldName || id,
197
- label: label,
198
- defaultValue: defaultValue,
160
+ label,
161
+ defaultValue,
199
162
  stateId: id,
200
163
  itemsField: {
201
- label: label,
164
+ label,
202
165
  type: 'fields',
203
- fields: fields
166
+ fields
204
167
  }
205
- }] : []), _toConsumableArray(!repeatable && fieldName !== null ? [{
168
+ }] : []), ...(!repeatable && fieldName !== null ? [{
206
169
  type: 'fields',
207
170
  name: fieldName,
208
171
  stateId: id,
209
- fields: fields
210
- }] : []), _toConsumableArray(!repeatable && fieldName === null ? fields.map(function (it) {
211
- return _objectSpread(_objectSpread({}, it), {}, {
212
- stateId: id
213
- });
214
- }) : []));
172
+ fields
173
+ }] : []), ...(!repeatable && fieldName === null ? fields.map(it => ({
174
+ ...it,
175
+ stateId: id
176
+ })) : [])];
215
177
  }, []);
216
- return [].concat(_toConsumableArray(extraFields), _toConsumableArray(screenFields));
178
+ return [...extraFields, ...screenFields];
217
179
  }
218
180
 
219
- var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
220
- function ComponentsManager() {
221
- var _this;
222
- var components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
223
- _classCallCheck(this, ComponentsManager);
224
- _this = _callSuper(this, ComponentsManager);
225
- _this.components = components;
226
- return _this;
227
- }
228
- _inherits(ComponentsManager, _EventEmitter);
229
- return _createClass(ComponentsManager, [{
230
- key: "addComponent",
231
- value: function addComponent(name, component) {
232
- var namespace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
233
- return this.addComponents(_defineProperty({}, name, component), namespace);
234
- }
235
- }, {
236
- key: "addComponents",
237
- value: function addComponents(components) {
238
- var namespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
239
- var newComponents = namespace !== null ? Object.keys(components).reduce(function (componentsMaps, name) {
240
- return _objectSpread(_objectSpread({}, componentsMaps), {}, _defineProperty({}, "".concat(namespace, ".").concat(name), components[name]));
241
- }, {}) : components;
242
- this.components = _objectSpread(_objectSpread({}, this.components), newComponents);
243
- this.emit('change');
244
- return this;
245
- }
246
- }, {
247
- key: "merge",
248
- value: function merge(manager) {
249
- var namespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
250
- return this.addComponents(manager.getComponents(), namespace);
251
- }
252
- }, {
253
- key: "addNamespace",
254
- value: function addNamespace(namespace) {
255
- var _this2 = this;
256
- if (namespace === null) {
257
- return this;
258
- }
259
- this.components = Object.keys(this.components).reduce(function (componentsMap, name) {
260
- return _objectSpread(_objectSpread({}, componentsMap), {}, _defineProperty({}, "".concat(namespace, ".").concat(name), _this2.components[name]));
261
- }, {});
181
+ class ComponentsManager extends EventEmitter {
182
+ constructor(components = {}) {
183
+ super();
184
+ this.components = components;
185
+ }
186
+ addComponent(name, component, namespace = null) {
187
+ return this.addComponents({
188
+ [name]: component
189
+ }, namespace);
190
+ }
191
+ addComponents(components, namespace = null) {
192
+ const newComponents = namespace !== null ? Object.keys(components).reduce((componentsMaps, name) => ({
193
+ ...componentsMaps,
194
+ [`${namespace}.${name}`]: components[name]
195
+ }), {}) : components;
196
+ this.components = {
197
+ ...this.components,
198
+ ...newComponents
199
+ };
200
+ this.emit('change');
201
+ return this;
202
+ }
203
+ merge(manager, namespace = null) {
204
+ return this.addComponents(manager.getComponents(), namespace);
205
+ }
206
+ addNamespace(namespace) {
207
+ if (namespace === null) {
262
208
  return this;
263
209
  }
264
- }, {
265
- key: "getComponent",
266
- value: function getComponent(name) {
267
- var namespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
268
- var components = this.getComponents(namespace);
269
- return getComponentFromName(name, components);
270
- }
271
- }, {
272
- key: "getComponents",
273
- value: function getComponents() {
274
- var _this3 = this;
275
- var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
276
- return namespace !== null ? Object.keys(this.components || {}).reduce(function (componentsMap, name) {
277
- var pattern = new RegExp("^".concat(namespace, "\\.(.*)$"));
278
- var matches = pattern.exec(name);
279
- return matches !== null ? _objectSpread(_objectSpread({}, componentsMap), {}, _defineProperty({}, matches[1], _this3.components[name])) : componentsMap;
280
- }, {}) : this.components;
281
- }
282
- }, {
283
- key: "hasComponent",
284
- value: function hasComponent(name) {
285
- var namespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
286
- return this.components !== null && typeof this.components[namespace !== null ? "".concat(namespace, ".").concat(name) : name] !== 'undefined';
287
- }
288
- }]);
289
- }(EventEmitter);
210
+ this.components = Object.keys(this.components).reduce((componentsMap, name) => ({
211
+ ...componentsMap,
212
+ [`${namespace}.${name}`]: this.components[name]
213
+ }), {});
214
+ return this;
215
+ }
216
+ getComponent(name, namespace = null) {
217
+ const components = this.getComponents(namespace);
218
+ return getComponentFromName(name, components);
219
+ }
220
+ getComponents(namespace = null) {
221
+ return namespace !== null ? Object.keys(this.components || {}).reduce((componentsMap, name) => {
222
+ const pattern = new RegExp(`^${namespace}\\.(.*)$`);
223
+ const matches = pattern.exec(name);
224
+ return matches !== null ? {
225
+ ...componentsMap,
226
+ [matches[1]]: this.components[name]
227
+ } : componentsMap;
228
+ }, {}) : this.components;
229
+ }
230
+ hasComponent(name, namespace = null) {
231
+ return this.components !== null && typeof this.components[namespace !== null ? `${namespace}.${name}` : name] !== 'undefined';
232
+ }
233
+ }
290
234
 
291
- var DefinitionsManager = /*#__PURE__*/function (_EventEmitter) {
292
- function DefinitionsManager() {
293
- var _this;
294
- var definitions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
295
- _classCallCheck(this, DefinitionsManager);
296
- _this = _callSuper(this, DefinitionsManager);
297
- _this.definitions = definitions || [];
298
- return _this;
299
- }
300
- _inherits(DefinitionsManager, _EventEmitter);
301
- return _createClass(DefinitionsManager, [{
302
- key: "addDefinition",
303
- value: function addDefinition(definition) {
304
- this.addDefinitions(isArray(definition) ? definition : [definition]);
305
- return this;
306
- }
307
- }, {
308
- key: "addDefinitions",
309
- value: function addDefinitions(definitions) {
310
- this.definitions = uniqBy([].concat(_toConsumableArray(definitions), _toConsumableArray(this.definitions)), function (it) {
311
- return it.id;
312
- });
313
- this.emit('change');
314
- return this;
315
- }
316
- }, {
317
- key: "merge",
318
- value: function merge(manager) {
319
- return this.addDefinitions(manager.getDefinitions());
320
- }
321
- }, {
322
- key: "filter",
323
- value: function filter(_filter) {
324
- // this.definitions = this.definitions.filter(filter);
325
- // return this;
326
- return new DefinitionsManager(this.definitions.filter(_filter));
327
- }
328
- }, {
329
- key: "getDefinition",
330
- value: function getDefinition(id) {
331
- if (id === null) {
332
- return null;
333
- }
334
- return this.definitions.find(function (it) {
335
- return it.id === id;
336
- }) || null;
337
- }
338
- }, {
339
- key: "getDefinitions",
340
- value: function getDefinitions() {
341
- return this.definitions;
342
- }
343
- }, {
344
- key: "hasDefinition",
345
- value: function hasDefinition(id) {
346
- return this.getDefinition(id) !== null;
347
- }
348
- }, {
349
- key: "getComponent",
350
- value: function getComponent(id) {
351
- var _ref = this.getDefinition(id) || {},
352
- _ref$component = _ref.component,
353
- component = _ref$component === void 0 ? null : _ref$component;
354
- return component;
355
- }
356
- }, {
357
- key: "getComponents",
358
- value: function getComponents() {
359
- return this.definitions.reduce(function (allComponents, _ref2) {
360
- var id = _ref2.id,
361
- _ref2$component = _ref2.component,
362
- component = _ref2$component === void 0 ? null : _ref2$component;
363
- return component !== null ? _objectSpread(_objectSpread({}, allComponents), {}, _defineProperty({}, id, component)) : allComponents;
364
- }, {});
235
+ class DefinitionsManager extends EventEmitter {
236
+ constructor(definitions = []) {
237
+ super();
238
+ this.definitions = definitions || [];
239
+ }
240
+ addDefinition(definition) {
241
+ this.addDefinitions(isArray(definition) ? definition : [definition]);
242
+ return this;
243
+ }
244
+ addDefinitions(definitions) {
245
+ this.definitions = uniqBy([...definitions, ...this.definitions], it => it.id);
246
+ this.emit('change');
247
+ return this;
248
+ }
249
+ merge(manager) {
250
+ return this.addDefinitions(manager.getDefinitions());
251
+ }
252
+ filter(filter) {
253
+ // this.definitions = this.definitions.filter(filter);
254
+ // return this;
255
+ return new DefinitionsManager(this.definitions.filter(filter));
256
+ }
257
+ getDefinition(id) {
258
+ if (id === null) {
259
+ return null;
365
260
  }
366
- }]);
367
- }(EventEmitter);
261
+ return this.definitions.find(it => it.id === id) || null;
262
+ }
263
+ getDefinitions() {
264
+ return this.definitions;
265
+ }
266
+ hasDefinition(id) {
267
+ return this.getDefinition(id) !== null;
268
+ }
269
+ getComponent(id) {
270
+ const {
271
+ component = null
272
+ } = this.getDefinition(id) || {};
273
+ return component;
274
+ }
275
+ getComponents() {
276
+ return this.definitions.reduce((allComponents, {
277
+ id,
278
+ component = null
279
+ }) => component !== null ? {
280
+ ...allComponents,
281
+ [id]: component
282
+ } : allComponents, {});
283
+ }
284
+ }
368
285
 
369
- var EventsManager = /*#__PURE__*/function (_EventEmitter) {
370
- function EventsManager(element) {
371
- var _this;
372
- _classCallCheck(this, EventsManager);
373
- _this = _callSuper(this, EventsManager);
374
- _this.element = element;
375
- _this.events = {};
376
- _this.listeners = {};
377
- return _this;
378
- }
379
- _inherits(EventsManager, _EventEmitter);
380
- return _createClass(EventsManager, [{
381
- key: "subscribe",
382
- value: function subscribe(event, callback) {
383
- this.on(event, callback);
384
- this.events = _objectSpread(_objectSpread({}, this.events), {}, _defineProperty({}, event, [].concat(_toConsumableArray(this.events[event] || []), [callback])));
385
- if (this.events[event].length === 1) {
386
- this.addEventListener(event);
387
- }
388
- }
389
- }, {
390
- key: "unsubscribe",
391
- value: function unsubscribe(event, callback) {
392
- var _this2 = this;
393
- this.off(event, callback);
394
- this.events = Object.keys(this.events).reduce(function (newEvents, eventName) {
395
- if (eventName !== event) {
396
- return _objectSpread(_objectSpread({}, newEvents), {}, _defineProperty({}, eventName, _this2.events[eventName]));
397
- }
398
- var newListeners = _this2.events[eventName].filter(function (listener) {
399
- return listener !== callback;
400
- });
401
- return newListeners.length > 0 ? _objectSpread(_objectSpread({}, newEvents), {}, _defineProperty({}, eventName, newListeners)) : newEvents;
402
- }, {});
403
- if (typeof this.events[event] === 'undefined') {
404
- this.removeEventListener(event);
405
- }
286
+ class EventsManager extends EventEmitter {
287
+ constructor(element) {
288
+ super();
289
+ this.element = element;
290
+ this.events = {};
291
+ this.listeners = {};
292
+ }
293
+ subscribe(event, callback) {
294
+ this.on(event, callback);
295
+ this.events = {
296
+ ...this.events,
297
+ [event]: [...(this.events[event] || []), callback]
298
+ };
299
+ if (this.events[event].length === 1) {
300
+ this.addEventListener(event);
406
301
  }
407
- }, {
408
- key: "addEventListener",
409
- value: function addEventListener(event) {
410
- var _this3 = this;
411
- if (typeof this.listeners[event] === 'undefined') {
412
- this.listeners[event] = function () {
413
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
414
- args[_key] = arguments[_key];
415
- }
416
- return _this3.emit.apply(_this3, [event].concat(args));
302
+ }
303
+ unsubscribe(event, callback) {
304
+ this.off(event, callback);
305
+ this.events = Object.keys(this.events).reduce((newEvents, eventName) => {
306
+ if (eventName !== event) {
307
+ return {
308
+ ...newEvents,
309
+ [eventName]: this.events[eventName]
417
310
  };
418
311
  }
419
- this.element.addEventListener(event, this.listeners[event]);
312
+ const newListeners = this.events[eventName].filter(listener => listener !== callback);
313
+ return newListeners.length > 0 ? {
314
+ ...newEvents,
315
+ [eventName]: newListeners
316
+ } : newEvents;
317
+ }, {});
318
+ if (typeof this.events[event] === 'undefined') {
319
+ this.removeEventListener(event);
420
320
  }
421
- }, {
422
- key: "removeEventListener",
423
- value: function removeEventListener(event) {
424
- this.element.removeEventListener(event, this.listeners[event]);
321
+ }
322
+ addEventListener(event) {
323
+ if (typeof this.listeners[event] === 'undefined') {
324
+ this.listeners[event] = (...args) => this.emit(event, ...args);
425
325
  }
426
- }]);
427
- }(EventEmitter);
326
+ this.element.addEventListener(event, this.listeners[event]);
327
+ }
328
+ removeEventListener(event) {
329
+ this.element.removeEventListener(event, this.listeners[event]);
330
+ }
331
+ }
428
332
 
429
- var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
430
- function FieldsManager() {
431
- _classCallCheck(this, FieldsManager);
432
- return _callSuper(this, FieldsManager, arguments);
433
- }
434
- _inherits(FieldsManager, _DefinitionsManager);
435
- return _createClass(FieldsManager, [{
436
- key: "filter",
437
- value: function filter(_filter) {
438
- return new FieldsManager(this.definitions.filter(_filter));
439
- }
440
- }]);
441
- }(DefinitionsManager);
333
+ class FieldsManager extends DefinitionsManager {
334
+ filter(filter) {
335
+ return new FieldsManager(this.definitions.filter(filter));
336
+ }
337
+ }
442
338
 
443
- var _excluded$8 = ["medias"],
444
- _excluded2$3 = ["medias"];
445
- var MediasParser = /*#__PURE__*/function () {
446
- function MediasParser(_ref) {
447
- var fieldsManager = _ref.fieldsManager,
448
- screensManager = _ref.screensManager,
449
- _ref$fieldsPattern = _ref.fieldsPattern,
450
- fieldsPattern = _ref$fieldsPattern === void 0 ? {} : _ref$fieldsPattern;
451
- _classCallCheck(this, MediasParser);
339
+ class MediasParser {
340
+ constructor({
341
+ fieldsManager,
342
+ screensManager,
343
+ fieldsPattern = {}
344
+ }) {
452
345
  this.fieldsManager = fieldsManager;
453
346
  this.screensManager = screensManager;
454
347
  this.fieldsPatternCache = fieldsPattern || {};
455
348
  this.parsedThemesCache = {};
456
349
  }
457
- return _createClass(MediasParser, [{
458
- key: "getParsedStoryTheme",
459
- value: function getParsedStoryTheme(storyId, theme) {
460
- if (typeof this.parsedThemesCache[storyId] === 'undefined') {
461
- var _this$toPath = this.toPath(theme),
462
- themeMedias = _this$toPath.medias,
463
- newTheme = _objectWithoutProperties(_this$toPath, _excluded$8);
464
- this.parsedThemesCache[storyId] = {
465
- themeMedias: themeMedias,
466
- newTheme: newTheme
467
- };
468
- }
469
- return this.parsedThemesCache[storyId];
350
+ getParsedStoryTheme(storyId, theme) {
351
+ if (typeof this.parsedThemesCache[storyId] === 'undefined') {
352
+ const {
353
+ medias: themeMedias,
354
+ ...newTheme
355
+ } = this.toPath(theme);
356
+ this.parsedThemesCache[storyId] = {
357
+ themeMedias,
358
+ newTheme
359
+ };
470
360
  }
471
- }, {
472
- key: "getFieldsPatternByScreen",
473
- value: function getFieldsPatternByScreen(type) {
474
- if (typeof this.fieldsPatternCache[type] === 'undefined') {
475
- var fields = getScreenFieldsWithStates(this.screensManager.getDefinition(type) || {});
476
- this.fieldsPatternCache[type] = this.getFieldsPattern(fields || []);
477
- }
478
- return this.fieldsPatternCache[type];
361
+ return this.parsedThemesCache[storyId];
362
+ }
363
+ getFieldsPatternByScreen(type) {
364
+ if (typeof this.fieldsPatternCache[type] === 'undefined') {
365
+ const fields = getScreenFieldsWithStates(this.screensManager.getDefinition(type) || {});
366
+ this.fieldsPatternCache[type] = this.getFieldsPattern(fields || []);
479
367
  }
368
+ return this.fieldsPatternCache[type];
369
+ }
480
370
 
481
- // Convert medias object to path
482
- }, {
483
- key: "toPath",
484
- value: function toPath(story) {
485
- var _this = this;
486
- if (story === null) {
487
- return story;
488
- }
489
- var _ref2 = story || {},
490
- _ref2$id = _ref2.id,
491
- storyId = _ref2$id === void 0 ? null : _ref2$id,
492
- _ref2$theme = _ref2.theme,
493
- theme = _ref2$theme === void 0 ? null : _ref2$theme,
494
- _ref2$components = _ref2.components,
495
- components = _ref2$components === void 0 ? [] : _ref2$components;
496
- var _components$reduce = components.reduce(function (_ref3, screen) {
497
- var previousComponents = _ref3.components,
498
- currentMedias = _ref3.medias;
499
- var type = screen.type;
500
- var fieldsPattern = _this.getFieldsPatternByScreen(type);
501
- var _MediasParser$replace = MediasParser.replaceMediasWithPaths(screen, fieldsPattern),
502
- newScreen = _MediasParser$replace.data,
503
- newMedias = _MediasParser$replace.medias;
504
- return {
505
- components: [].concat(_toConsumableArray(previousComponents), [newScreen]),
506
- medias: _objectSpread(_objectSpread({}, currentMedias), newMedias)
507
- };
508
- }, {
509
- components: [],
510
- medias: null
511
- }),
512
- newComponents = _components$reduce.components,
513
- medias = _components$reduce.medias;
514
- if (theme !== null) {
515
- var _this$getParsedStoryT = this.getParsedStoryTheme(storyId, theme),
516
- themeMedias = _this$getParsedStoryT.medias,
517
- newTheme = _objectWithoutProperties(_this$getParsedStoryT, _excluded2$3);
518
- return medias !== null || themeMedias !== null ? _objectSpread(_objectSpread({}, story), {}, {
519
- theme: newTheme,
520
- components: newComponents,
521
- medias: _objectSpread(_objectSpread({}, themeMedias), medias)
522
- }) : story;
523
- }
524
- return medias !== null ? _objectSpread(_objectSpread({}, story), {}, {
371
+ // Convert medias object to path
372
+ toPath(story) {
373
+ if (story === null) {
374
+ return story;
375
+ }
376
+ const {
377
+ id: storyId = null,
378
+ theme = null,
379
+ components = []
380
+ } = story || {};
381
+ const {
382
+ components: newComponents,
383
+ medias
384
+ } = components.reduce(({
385
+ components: previousComponents,
386
+ medias: currentMedias
387
+ }, screen) => {
388
+ const {
389
+ type
390
+ } = screen;
391
+ const fieldsPattern = this.getFieldsPatternByScreen(type);
392
+ const {
393
+ data: newScreen,
394
+ medias: newMedias
395
+ } = MediasParser.replaceMediasWithPaths(screen, fieldsPattern);
396
+ return {
397
+ components: [...previousComponents, newScreen],
398
+ medias: {
399
+ ...currentMedias,
400
+ ...newMedias
401
+ }
402
+ };
403
+ }, {
404
+ components: [],
405
+ medias: null
406
+ });
407
+ if (theme !== null) {
408
+ const {
409
+ medias: themeMedias,
410
+ ...newTheme
411
+ } = this.getParsedStoryTheme(storyId, theme);
412
+ return medias !== null || themeMedias !== null ? {
413
+ ...story,
414
+ theme: newTheme,
525
415
  components: newComponents,
526
- medias: medias
527
- }) : story;
416
+ medias: {
417
+ ...themeMedias,
418
+ ...medias
419
+ }
420
+ } : story;
528
421
  }
422
+ return medias !== null ? {
423
+ ...story,
424
+ components: newComponents,
425
+ medias
426
+ } : story;
427
+ }
529
428
 
530
- // Convert path to medias object
531
- }, {
532
- key: "fromPath",
533
- value: function fromPath(story) {
534
- var defaultMedias = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
535
- if (story === null) {
536
- return story;
537
- }
538
- var _ref4 = story || {},
539
- _ref4$theme = _ref4.theme,
540
- theme = _ref4$theme === void 0 ? null : _ref4$theme,
541
- _ref4$components = _ref4.components,
542
- components = _ref4$components === void 0 ? [] : _ref4$components,
543
- _ref4$medias = _ref4.medias,
544
- medias = _ref4$medias === void 0 ? defaultMedias : _ref4$medias;
545
- if (medias === null && theme === null) {
546
- return story;
547
- }
429
+ // Convert path to medias object
430
+ fromPath(story, defaultMedias = null) {
431
+ if (story === null) {
432
+ return story;
433
+ }
434
+ const {
435
+ theme = null,
436
+ components = [],
437
+ medias = defaultMedias
438
+ } = story || {};
439
+ if (medias === null && theme === null) {
440
+ return story;
441
+ }
548
442
 
549
- // Replace path with medias objects
550
- // const newComponents =
551
- // medias !== null
552
- // ? components.map((screen) => {
553
- // const { type } = screen;
554
- // const fieldsPattern = this.getFieldsPatternByScreen(type);
555
- // return MediasParser.replacePathsWithMedias(screen, medias, fieldsPattern);
556
- // })
557
- // : components;
443
+ // Replace path with medias objects
444
+ // const newComponents =
445
+ // medias !== null
446
+ // ? components.map((screen) => {
447
+ // const { type } = screen;
448
+ // const fieldsPattern = this.getFieldsPatternByScreen(type);
449
+ // return MediasParser.replacePathsWithMedias(screen, medias, fieldsPattern);
450
+ // })
451
+ // : components;
558
452
 
559
- // Faster parsing with data only
560
- var componentsPattern = MediasParser.getMediaPatternsFromData(components);
561
- var newComponents = medias !== null && componentsPattern.length > 0 ? MediasParser.replacePathsWithMedias(components, medias, componentsPattern) : components;
453
+ // Faster parsing with data only
454
+ const componentsPattern = MediasParser.getMediaPatternsFromData(components);
455
+ const newComponents = medias !== null && componentsPattern.length > 0 ? MediasParser.replacePathsWithMedias(components, medias, componentsPattern) : components;
562
456
 
563
- // Replace path with medias object in theme
564
- if (theme !== null) {
565
- var newTheme = this.fromPath(theme, medias);
566
- return newTheme !== theme || newComponents !== components ? _objectSpread(_objectSpread({}, story), {}, {
567
- theme: newTheme,
568
- components: newComponents
569
- }) : story;
570
- }
571
- return newComponents !== components ? _objectSpread(_objectSpread({}, story), {}, {
457
+ // Replace path with medias object in theme
458
+ if (theme !== null) {
459
+ const newTheme = this.fromPath(theme, medias);
460
+ return newTheme !== theme || newComponents !== components ? {
461
+ ...story,
462
+ theme: newTheme,
572
463
  components: newComponents
573
- }) : story;
464
+ } : story;
574
465
  }
575
- }, {
576
- key: "getFieldsPattern",
577
- value: function getFieldsPattern(fields) {
578
- var _this2 = this;
579
- var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
580
- return (fields || []).reduce(function (patterns, field) {
581
- var _field$name = field.name,
582
- name = _field$name === void 0 ? null : _field$name,
583
- _field$type = field.type,
584
- type = _field$type === void 0 ? null : _field$type;
585
- var path = [namePrefix, name].filter(function (it) {
586
- return it !== null && it !== '';
587
- }).join('\\.');
588
- var fieldDefinition = _objectSpread(_objectSpread({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
466
+ return newComponents !== components ? {
467
+ ...story,
468
+ components: newComponents
469
+ } : story;
470
+ }
471
+ getFieldsPattern(fields, namePrefix = null) {
472
+ return (fields || []).reduce((patterns, field) => {
473
+ const {
474
+ name = null,
475
+ type = null
476
+ } = field;
477
+ const path = [namePrefix, name].filter(it => it !== null && it !== '').join('\\.');
478
+ const fieldDefinition = {
479
+ ...(type !== null ? this.fieldsManager.getDefinition(type) : null),
480
+ ...field
481
+ };
589
482
 
590
- // also check settings fields
591
- var _fieldDefinition$fiel = fieldDefinition.fields,
592
- subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
593
- _fieldDefinition$item = fieldDefinition.itemsField,
594
- itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
595
- _fieldDefinition$sett = fieldDefinition.settings,
596
- settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
597
- return [].concat(_toConsumableArray(patterns), _toConsumableArray(MediasParser.fieldIsMedia(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray(MediasParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "\\.media$")), new RegExp("^".concat(path, "\\.variants\\.[0-9]+\\.media$"))] : []), _toConsumableArray(_this2.getFieldsPattern(subFields, path)), _toConsumableArray(_this2.getFieldsPattern(settings, path)), _toConsumableArray(itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
598
- }, []);
599
- }
600
- }], [{
601
- key: "fieldIsMedia",
602
- value: function fieldIsMedia(_ref5) {
603
- var _ref5$media = _ref5.media,
604
- media = _ref5$media === void 0 ? false : _ref5$media;
605
- return media;
606
- }
607
- }, {
608
- key: "fieldIsFontFamily",
609
- value: function fieldIsFontFamily(_ref6) {
610
- var _ref6$id = _ref6.id,
611
- id = _ref6$id === void 0 ? null : _ref6$id;
612
- return id === 'font-family';
613
- }
614
- }, {
615
- key: "replacePathsWithMedias",
616
- value: function replacePathsWithMedias(data, medias, patterns) {
617
- var keyPrefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
618
- var dataIsArray = isArray(data);
619
- return MediasParser.keys(data).reduce(function (newData, key) {
620
- var path = [keyPrefix, key].filter(function (it) {
621
- return it !== null;
622
- }).join('.');
623
- var patternMatch = patterns.reduce(function (found, pattern) {
624
- return found || pattern.test(path);
625
- }, false);
626
- var value = data[key];
627
- var newValue;
628
- if (patternMatch) {
629
- newValue = isObject(value) ? value : medias[value] || value;
630
- } else {
631
- newValue = isObject(value) || isArray(value) ? MediasParser.replacePathsWithMedias(value, medias, patterns, path) : value;
632
- }
633
- return dataIsArray ? [].concat(_toConsumableArray(newData), [newValue]) : _objectSpread(_objectSpread({}, newData), {}, _defineProperty({}, key, newValue));
634
- }, dataIsArray ? [] : {});
635
- }
636
- }, {
637
- key: "getMediaPath",
638
- value: function getMediaPath(_ref7) {
639
- var _ref7$id = _ref7.id,
640
- id = _ref7$id === void 0 ? null : _ref7$id;
641
- return id !== null ? "media://".concat(id) : null;
642
- }
643
- }, {
644
- key: "replaceMediasWithPaths",
645
- value: function replaceMediasWithPaths(data, patterns) {
646
- var medias = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
647
- var keyPrefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
648
- var dataIsArray = isArray(data);
649
- var dataKeys = MediasParser.keys(data);
650
- return dataKeys.reduce(function (_ref8, key) {
651
- var currentData = _ref8.data,
652
- currentMedias = _ref8.medias;
653
- var path = [keyPrefix, key].filter(function (it) {
654
- return it !== null;
655
- }).join('.');
656
- var patternMatch = patterns.reduce(function (found, pattern) {
657
- return found || pattern.test(path);
658
- }, false);
659
- var value = data[key];
660
- var newValue;
661
- var media = null;
662
- var subMedias = null;
663
- if (patternMatch && isObject(value)) {
664
- var mediaPath = MediasParser.getMediaPath(value);
665
- newValue = mediaPath !== null ? mediaPath : value;
666
- media = mediaPath !== null ? value : null;
667
- } else if (isObject(value) || isArray(value)) {
668
- var subReturn = MediasParser.replaceMediasWithPaths(value, patterns, medias, path);
669
- newValue = subReturn.data;
670
- subMedias = subReturn.medias;
671
- } else {
672
- newValue = value;
483
+ // also check settings fields
484
+ const {
485
+ fields: subFields = [],
486
+ itemsField = null,
487
+ settings = []
488
+ } = fieldDefinition;
489
+ return [...patterns, ...(MediasParser.fieldIsMedia(fieldDefinition) ? [new RegExp(`^${path}$`)] : []), ...(MediasParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp(`^${path}\\.media$`), new RegExp(`^${path}\\.variants\\.[0-9]+\\.media$`)] : []), ...this.getFieldsPattern(subFields, path), ...this.getFieldsPattern(settings, path), ...(itemsField !== null ? this.getFieldsPattern([itemsField], `${path}\\.[0-9]+`) : [])];
490
+ }, []);
491
+ }
492
+ static fieldIsMedia({
493
+ media = false
494
+ }) {
495
+ return media;
496
+ }
497
+ static fieldIsFontFamily({
498
+ id = null
499
+ }) {
500
+ return id === 'font-family';
501
+ }
502
+ static replacePathsWithMedias(data, medias, patterns, keyPrefix = null) {
503
+ const dataIsArray = isArray(data);
504
+ return MediasParser.keys(data).reduce((newData, key) => {
505
+ const path = [keyPrefix, key].filter(it => it !== null).join('.');
506
+ const patternMatch = patterns.reduce((found, pattern) => found || pattern.test(path), false);
507
+ const value = data[key];
508
+ let newValue;
509
+ if (patternMatch) {
510
+ newValue = isObject(value) ? value : medias[value] || value;
511
+ } else {
512
+ newValue = isObject(value) || isArray(value) ? MediasParser.replacePathsWithMedias(value, medias, patterns, path) : value;
513
+ }
514
+ return dataIsArray ? [...newData, newValue] : {
515
+ ...newData,
516
+ [key]: newValue
517
+ };
518
+ }, dataIsArray ? [] : {});
519
+ }
520
+ static getMediaPath({
521
+ id = null
522
+ }) {
523
+ return id !== null ? `media://${id}` : null;
524
+ }
525
+ static replaceMediasWithPaths(data, patterns, medias = null, keyPrefix = null) {
526
+ const dataIsArray = isArray(data);
527
+ const dataKeys = MediasParser.keys(data);
528
+ return dataKeys.reduce(({
529
+ data: currentData,
530
+ medias: currentMedias
531
+ }, key) => {
532
+ const path = [keyPrefix, key].filter(it => it !== null).join('.');
533
+ const patternMatch = patterns.reduce((found, pattern) => found || pattern.test(path), false);
534
+ const value = data[key];
535
+ let newValue;
536
+ let media = null;
537
+ let subMedias = null;
538
+ if (patternMatch && isObject(value)) {
539
+ const mediaPath = MediasParser.getMediaPath(value);
540
+ newValue = mediaPath !== null ? mediaPath : value;
541
+ media = mediaPath !== null ? value : null;
542
+ } else if (isObject(value) || isArray(value)) {
543
+ const subReturn = MediasParser.replaceMediasWithPaths(value, patterns, medias, path);
544
+ newValue = subReturn.data;
545
+ subMedias = subReturn.medias;
546
+ } else {
547
+ newValue = value;
548
+ }
549
+ return {
550
+ data: dataIsArray ? [...(currentData || []), newValue] : {
551
+ ...currentData,
552
+ [key]: newValue
553
+ },
554
+ medias: media !== null ? {
555
+ ...currentMedias,
556
+ ...subMedias,
557
+ [newValue]: media
558
+ } : {
559
+ ...currentMedias,
560
+ ...subMedias
673
561
  }
562
+ };
563
+ }, {
564
+ data: dataKeys.length === 0 ? data : null,
565
+ medias
566
+ });
567
+ }
568
+ static getMediaPatternsFromData(obj) {
569
+ const dotObj = MediasParser.dot(obj);
570
+ return Object.keys(dotObj).filter(key => isString(dotObj[key]) && dotObj[key].match(/^media:\/\/([^/]+)$/) !== null).map(it => new RegExp(`^${it}$`));
571
+ }
572
+ static dot(obj) {
573
+ return MediasParser.keys(obj).reduce((acc, key) => {
574
+ if (typeof obj[key] !== 'object' || !obj[key]) {
674
575
  return {
675
- data: dataIsArray ? [].concat(_toConsumableArray(currentData || []), [newValue]) : _objectSpread(_objectSpread({}, currentData), {}, _defineProperty({}, key, newValue)),
676
- medias: media !== null ? _objectSpread(_objectSpread(_objectSpread({}, currentMedias), subMedias), {}, _defineProperty({}, newValue, media)) : _objectSpread(_objectSpread({}, currentMedias), subMedias)
576
+ ...acc,
577
+ [key]: obj[key]
677
578
  };
678
- }, {
679
- data: dataKeys.length === 0 ? data : null,
680
- medias: medias
681
- });
682
- }
683
- }, {
684
- key: "getMediaPatternsFromData",
685
- value: function getMediaPatternsFromData(obj) {
686
- var dotObj = MediasParser.dot(obj);
687
- return Object.keys(dotObj).filter(function (key) {
688
- return isString(dotObj[key]) && dotObj[key].match(/^media:\/\/([^/]+)$/) !== null;
689
- }).map(function (it) {
690
- return new RegExp("^".concat(it, "$"));
691
- });
692
- }
693
- }, {
694
- key: "dot",
695
- value: function dot(obj) {
696
- return MediasParser.keys(obj).reduce(function (acc, key) {
697
- if (_typeof(obj[key]) !== 'object' || !obj[key]) {
698
- return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, obj[key]));
699
- }
700
- var flattenedChild = MediasParser.dot(obj[key]);
701
- return _objectSpread(_objectSpread({}, acc), MediasParser.keys(flattenedChild).reduce(function (childAcc, childKey) {
702
- return _objectSpread(_objectSpread({}, childAcc), {}, _defineProperty({}, "".concat(key, ".").concat(childKey), flattenedChild[childKey]));
703
- }, {}));
704
- }, {});
705
- }
706
- }, {
707
- key: "keys",
708
- value: function keys(obj) {
709
- return isArray(obj) ? _toConsumableArray(obj.keys()) : Object.keys(obj);
710
- }
711
- }]);
712
- }();
713
-
714
- var ScreensManager = /*#__PURE__*/function (_DefinitionsManager) {
715
- function ScreensManager() {
716
- var _this;
717
- var definitions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
718
- _classCallCheck(this, ScreensManager);
719
- _this = _callSuper(this, ScreensManager, [definitions]);
720
- _this.fieldsPattern = null;
721
- return _this;
722
- }
723
- _inherits(ScreensManager, _DefinitionsManager);
724
- return _createClass(ScreensManager, [{
725
- key: "getFields",
726
- value: function getFields(id) {
727
- var _ref = this.getDefinition(id) || {},
728
- _ref$fields = _ref.fields,
729
- fields = _ref$fields === void 0 ? null : _ref$fields;
730
- return fields;
731
- }
732
- }, {
733
- key: "getLayouts",
734
- value: function getLayouts(id) {
735
- var _ref2 = this.getDefinition(id) || {},
736
- _ref2$layouts = _ref2.layouts,
737
- layouts = _ref2$layouts === void 0 ? null : _ref2$layouts;
738
- return layouts;
739
- }
740
- }, {
741
- key: "getFieldsPattern",
742
- value: function getFieldsPattern() {
743
- return this.fieldsPattern;
744
- }
745
- }, {
746
- key: "setFieldsPattern",
747
- value: function setFieldsPattern(fieldsPattern) {
748
- this.fieldsPattern = fieldsPattern;
749
- }
750
- }, {
751
- key: "filter",
752
- value: function filter(_filter) {
753
- return new ScreensManager(this.definitions.filter(_filter));
754
- // this.definitions = this.definitions.filter(filter);
755
- // return this;
756
- }
757
- }, {
758
- key: "merge",
759
- value: function merge(manager) {
760
- var newFieldsPattern = manager.getFieldsPattern();
761
- if (newFieldsPattern !== null && this.fieldsPattern === null) {
762
- this.fieldsPattern = newFieldsPattern;
763
579
  }
764
- return this.addDefinitions(manager.getDefinitions());
580
+ const flattenedChild = MediasParser.dot(obj[key]);
581
+ return {
582
+ ...acc,
583
+ ...MediasParser.keys(flattenedChild).reduce((childAcc, childKey) => ({
584
+ ...childAcc,
585
+ [`${key}.${childKey}`]: flattenedChild[childKey]
586
+ }), {})
587
+ };
588
+ }, {});
589
+ }
590
+ static keys(obj) {
591
+ return isArray(obj) ? [...obj.keys()] : Object.keys(obj);
592
+ }
593
+ }
594
+
595
+ class ScreensManager extends DefinitionsManager {
596
+ constructor(definitions = []) {
597
+ super(definitions);
598
+ this.fieldsPattern = null;
599
+ }
600
+ getFields(id) {
601
+ const {
602
+ fields = null
603
+ } = this.getDefinition(id) || {};
604
+ return fields;
605
+ }
606
+ getLayouts(id) {
607
+ const {
608
+ layouts = null
609
+ } = this.getDefinition(id) || {};
610
+ return layouts;
611
+ }
612
+ getFieldsPattern() {
613
+ return this.fieldsPattern;
614
+ }
615
+ setFieldsPattern(fieldsPattern) {
616
+ this.fieldsPattern = fieldsPattern;
617
+ }
618
+ filter(filter) {
619
+ return new ScreensManager(this.definitions.filter(filter));
620
+ // this.definitions = this.definitions.filter(filter);
621
+ // return this;
622
+ }
623
+ merge(manager) {
624
+ const newFieldsPattern = manager.getFieldsPattern();
625
+ if (newFieldsPattern !== null && this.fieldsPattern === null) {
626
+ this.fieldsPattern = newFieldsPattern;
765
627
  }
766
- }]);
767
- }(DefinitionsManager);
628
+ return this.addDefinitions(manager.getDefinitions());
629
+ }
630
+ }
768
631
 
769
- var _excluded$7 = ["fonts"];
770
- var FontsParser = /*#__PURE__*/function () {
771
- function FontsParser(_ref) {
772
- var fieldsManager = _ref.fieldsManager,
773
- screensManager = _ref.screensManager,
774
- _ref$fieldsPattern = _ref.fieldsPattern,
775
- fieldsPattern = _ref$fieldsPattern === void 0 ? {} : _ref$fieldsPattern;
776
- _classCallCheck(this, FontsParser);
632
+ class FontsParser {
633
+ constructor({
634
+ fieldsManager,
635
+ screensManager,
636
+ fieldsPattern = {}
637
+ }) {
777
638
  this.fieldsManager = fieldsManager;
778
639
  this.screensManager = screensManager;
779
640
  this.fieldsPatternCache = fieldsPattern || {};
780
641
  }
781
- return _createClass(FontsParser, [{
782
- key: "getFieldsPatternByScreen",
783
- value: function getFieldsPatternByScreen(type) {
784
- if (typeof this.fieldsPatternCache[type] === 'undefined') {
785
- var fields = getScreenFieldsWithStates(this.screensManager.getDefinition(type) || {});
786
- this.fieldsPatternCache[type] = this.getFieldsPattern(fields || []);
787
- }
788
- return this.fieldsPatternCache[type];
642
+ getFieldsPatternByScreen(type) {
643
+ if (typeof this.fieldsPatternCache[type] === 'undefined') {
644
+ const fields = getScreenFieldsWithStates(this.screensManager.getDefinition(type) || {});
645
+ this.fieldsPatternCache[type] = this.getFieldsPattern(fields || []);
789
646
  }
647
+ return this.fieldsPatternCache[type];
648
+ }
790
649
 
791
- // Extract fonts
792
- }, {
793
- key: "parse",
794
- value: function parse(story) {
795
- var _this = this;
796
- if (story === null) {
797
- return story;
798
- }
650
+ // Extract fonts
651
+ parse(story) {
652
+ if (story === null) {
653
+ return story;
654
+ }
799
655
 
800
- // Extract fonts from screen
801
- var _ref2 = story || {},
802
- _ref2$theme = _ref2.theme,
803
- theme = _ref2$theme === void 0 ? null : _ref2$theme,
804
- _ref2$components = _ref2.components,
805
- components = _ref2$components === void 0 ? [] : _ref2$components;
806
- var fonts = uniq(components.reduce(function (currentFonts, screen) {
807
- var type = screen.type;
808
- var fieldsPattern = _this.getFieldsPatternByScreen(type);
809
- var newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
810
- return newFonts.length > 0 ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(newFonts)) : currentFonts;
811
- }, []), 'name');
656
+ // Extract fonts from screen
657
+ const {
658
+ theme = null,
659
+ components = []
660
+ } = story || {};
661
+ const fonts = uniq(components.reduce((currentFonts, screen) => {
662
+ const {
663
+ type
664
+ } = screen;
665
+ const fieldsPattern = this.getFieldsPatternByScreen(type);
666
+ const newFonts = FontsParser.extractFontsWithPaths(screen, fieldsPattern);
667
+ return newFonts.length > 0 ? [...currentFonts, ...newFonts] : currentFonts;
668
+ }, []), 'name');
812
669
 
813
- // Extract fonts from theme
814
- if (theme !== null) {
815
- var _this$parse = this.parse(theme),
816
- _this$parse$fonts = _this$parse.fonts,
817
- themeFonts = _this$parse$fonts === void 0 ? [] : _this$parse$fonts,
818
- newTheme = _objectWithoutProperties(_this$parse, _excluded$7);
819
- return fonts.length > 0 || themeFonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
820
- theme: newTheme,
821
- fonts: uniq([].concat(_toConsumableArray(themeFonts), _toConsumableArray(fonts)), 'name')
822
- }) : story;
823
- }
824
- return fonts.length > 0 ? _objectSpread(_objectSpread({}, story), {}, {
825
- fonts: fonts
826
- }) : story;
827
- }
828
- }, {
829
- key: "getFieldsPattern",
830
- value: function getFieldsPattern(fields) {
831
- var _this2 = this;
832
- var namePrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
833
- return (fields || []).reduce(function (patterns, field) {
834
- var _field$name = field.name,
835
- name = _field$name === void 0 ? null : _field$name,
836
- _field$type = field.type,
837
- type = _field$type === void 0 ? null : _field$type;
838
- var path = [namePrefix, name].filter(function (it) {
839
- return it !== null && it !== '';
840
- }).join('\\.');
841
- var fieldDefinition = _objectSpread(_objectSpread({}, type !== null ? _this2.fieldsManager.getDefinition(type) : null), field);
670
+ // Extract fonts from theme
671
+ if (theme !== null) {
672
+ const {
673
+ fonts: themeFonts = [],
674
+ ...newTheme
675
+ } = this.parse(theme);
676
+ return fonts.length > 0 || themeFonts.length > 0 ? {
677
+ ...story,
678
+ theme: newTheme,
679
+ fonts: uniq([...themeFonts, ...fonts], 'name')
680
+ } : story;
681
+ }
682
+ return fonts.length > 0 ? {
683
+ ...story,
684
+ fonts
685
+ } : story;
686
+ }
687
+ getFieldsPattern(fields, namePrefix = null) {
688
+ return (fields || []).reduce((patterns, field) => {
689
+ const {
690
+ name = null,
691
+ type = null
692
+ } = field;
693
+ const path = [namePrefix, name].filter(it => it !== null && it !== '').join('\\.');
694
+ const fieldDefinition = {
695
+ ...(type !== null ? this.fieldsManager.getDefinition(type) : null),
696
+ ...field
697
+ };
842
698
 
843
- // also check settings fields
844
- var _fieldDefinition$fiel = fieldDefinition.fields,
845
- subFields = _fieldDefinition$fiel === void 0 ? [] : _fieldDefinition$fiel,
846
- _fieldDefinition$item = fieldDefinition.itemsField,
847
- itemsField = _fieldDefinition$item === void 0 ? null : _fieldDefinition$item,
848
- _fieldDefinition$sett = fieldDefinition.settings,
849
- settings = _fieldDefinition$sett === void 0 ? [] : _fieldDefinition$sett;
850
- return [].concat(_toConsumableArray(patterns), _toConsumableArray(FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp("^".concat(path, "$"))] : []), _toConsumableArray(_this2.getFieldsPattern(subFields, path)), _toConsumableArray(_this2.getFieldsPattern(settings, path)), _toConsumableArray(itemsField !== null ? _this2.getFieldsPattern([itemsField], "".concat(path, "\\.[0-9]+")) : []));
851
- }, []);
852
- }
853
- }], [{
854
- key: "fieldIsFontFamily",
855
- value: function fieldIsFontFamily(_ref3) {
856
- var _ref3$id = _ref3.id,
857
- id = _ref3$id === void 0 ? null : _ref3$id;
858
- return id === 'font-family';
859
- }
860
- }, {
861
- key: "valueIsFont",
862
- value: function valueIsFont(_ref4) {
863
- var _ref4$type = _ref4.type,
864
- type = _ref4$type === void 0 ? null : _ref4$type;
865
- return type === 'custom' || type === 'google';
866
- }
867
- }, {
868
- key: "extractFontsWithPaths",
869
- value: function extractFontsWithPaths(data, patterns) {
870
- var keyPrefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
871
- var dataIsArray = isArray(data);
872
- var keys = dataIsArray ? _toConsumableArray(data.keys()) : Object.keys(data);
873
- return keys.reduce(function (currentFonts, key) {
874
- var path = [keyPrefix, key].filter(function (it) {
875
- return it !== null;
876
- }).join('.');
877
- var patternMatch = patterns.reduce(function (found, pattern) {
878
- return found || pattern.test(path);
879
- }, false);
880
- var value = data[key];
881
- var font = null;
882
- var subFonts = null;
883
- if (patternMatch && isObject(value) && FontsParser.valueIsFont(value)) {
884
- font = value;
885
- } else if (isObject(value) || isArray(value)) {
886
- subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
887
- }
888
- return subFonts !== null || font !== null ? [].concat(_toConsumableArray(currentFonts), _toConsumableArray(subFonts || []), _toConsumableArray(font !== null ? [font] : [])) : currentFonts;
889
- }, []);
890
- }
891
- }]);
892
- }();
699
+ // also check settings fields
700
+ const {
701
+ fields: subFields = [],
702
+ itemsField = null,
703
+ settings = []
704
+ } = fieldDefinition;
705
+ return [...patterns, ...(FontsParser.fieldIsFontFamily(fieldDefinition) ? [new RegExp(`^${path}$`)] : []), ...this.getFieldsPattern(subFields, path), ...this.getFieldsPattern(settings, path), ...(itemsField !== null ? this.getFieldsPattern([itemsField], `${path}\\.[0-9]+`) : [])];
706
+ }, []);
707
+ }
708
+ static fieldIsFontFamily({
709
+ id = null
710
+ }) {
711
+ return id === 'font-family';
712
+ }
713
+ static valueIsFont({
714
+ type = null
715
+ }) {
716
+ return type === 'custom' || type === 'google';
717
+ }
718
+ static extractFontsWithPaths(data, patterns, keyPrefix = null) {
719
+ const dataIsArray = isArray(data);
720
+ const keys = dataIsArray ? [...data.keys()] : Object.keys(data);
721
+ return keys.reduce((currentFonts, key) => {
722
+ const path = [keyPrefix, key].filter(it => it !== null).join('.');
723
+ const patternMatch = patterns.reduce((found, pattern) => found || pattern.test(path), false);
724
+ const value = data[key];
725
+ let font = null;
726
+ let subFonts = null;
727
+ if (patternMatch && isObject(value) && FontsParser.valueIsFont(value)) {
728
+ font = value;
729
+ } else if (isObject(value) || isArray(value)) {
730
+ subFonts = FontsParser.extractFontsWithPaths(value, patterns, path);
731
+ }
732
+ return subFonts !== null || font !== null ? [...currentFonts, ...(subFonts || []), ...(font !== null ? [font] : [])] : currentFonts;
733
+ }, []);
734
+ }
735
+ }
893
736
 
894
- var _excluded$6 = ["shareIncentive", "callToAction"];
895
737
  /* eslint-disable class-methods-use-this */
896
- var ShareCall = /*#__PURE__*/function () {
897
- function ShareCall() {
898
- _classCallCheck(this, ShareCall);
899
- }
900
- return _createClass(ShareCall, [{
901
- key: "test",
902
- value: function test(screen) {
903
- var _ref = screen || {},
904
- _ref$shareIncentive = _ref.shareIncentive,
905
- shareIncentive = _ref$shareIncentive === void 0 ? null : _ref$shareIncentive,
906
- _ref$callToAction = _ref.callToAction,
907
- callToAction = _ref$callToAction === void 0 ? null : _ref$callToAction;
908
- if (shareIncentive === null && callToAction === null) {
909
- return false;
910
- }
911
- return true;
912
- }
913
- }, {
914
- key: "parse",
915
- value: function parse(screen) {
916
- var _ref2 = screen || {},
917
- _ref2$shareIncentive = _ref2.shareIncentive,
918
- shareIncentive = _ref2$shareIncentive === void 0 ? null : _ref2$shareIncentive,
919
- _ref2$callToAction = _ref2.callToAction,
920
- callToAction = _ref2$callToAction === void 0 ? null : _ref2$callToAction,
921
- restScreen = _objectWithoutProperties(_ref2, _excluded$6);
922
- var _ref3 = screen || {},
923
- _ref3$header = _ref3.header,
924
- header = _ref3$header === void 0 ? null : _ref3$header,
925
- _ref3$footer = _ref3.footer,
926
- footer = _ref3$footer === void 0 ? null : _ref3$footer;
738
+ class ShareCall {
739
+ test(screen) {
740
+ const {
741
+ shareIncentive = null,
742
+ callToAction = null
743
+ } = screen || {};
744
+ if (shareIncentive === null && callToAction === null) {
745
+ return false;
746
+ }
747
+ return true;
748
+ }
749
+ parse(screen) {
750
+ const {
751
+ shareIncentive = null,
752
+ callToAction = null,
753
+ ...restScreen
754
+ } = screen || {};
755
+ const {
756
+ header = null,
757
+ footer = null
758
+ } = screen || {};
927
759
 
928
- // Carful for recursivity here cause same key name
929
- var newHeader = shareIncentive !== null ? _objectSpread(_objectSpread({}, shareIncentive !== null ? {
930
- shareIncentive: shareIncentive
931
- } : null), header !== null ? {
932
- header: header
933
- } : null) : header;
934
- var newFooter = callToAction !== null ? _objectSpread(_objectSpread({}, callToAction !== null ? {
935
- callToAction: callToAction
936
- } : null), footer !== null ? {
937
- footer: footer
938
- } : null) : footer;
939
- var newScreen = _objectSpread(_objectSpread(_objectSpread({}, restScreen), newHeader !== null ? {
760
+ // Carful for recursivity here cause same key name
761
+ const newHeader = shareIncentive !== null ? {
762
+ ...(shareIncentive !== null ? {
763
+ shareIncentive
764
+ } : null),
765
+ ...(header !== null ? {
766
+ header
767
+ } : null)
768
+ } : header;
769
+ const newFooter = callToAction !== null ? {
770
+ ...(callToAction !== null ? {
771
+ callToAction
772
+ } : null),
773
+ ...(footer !== null ? {
774
+ footer
775
+ } : null)
776
+ } : footer;
777
+ const newScreen = {
778
+ ...restScreen,
779
+ ...(newHeader !== null ? {
940
780
  header: newHeader
941
- } : null), newFooter !== null ? {
781
+ } : null),
782
+ ...(newFooter !== null ? {
942
783
  footer: newFooter
943
- } : null);
944
- return newScreen;
945
- }
946
- }]);
947
- }();
784
+ } : null)
785
+ };
786
+ return newScreen;
787
+ }
788
+ }
948
789
  ShareCall.prototype.priority = 0;
949
790
 
950
- var _excluded$5 = ["answers"],
951
- _excluded2$2 = ["customAnswerLabel"];
952
791
  /* eslint-disable class-methods-use-this */
953
- var CustomAnswerLabel = /*#__PURE__*/function () {
954
- function CustomAnswerLabel() {
955
- _classCallCheck(this, CustomAnswerLabel);
956
- }
957
- return _createClass(CustomAnswerLabel, [{
958
- key: "test",
959
- value: function test(screen) {
960
- var _ref = screen || {},
961
- _ref$answers = _ref.answers,
962
- answers = _ref$answers === void 0 ? null : _ref$answers;
963
- if (answers === null || answers.length === 0) {
964
- return false;
965
- }
966
- var hasCustomAnswerLabel = (answers || []).some(function () {
967
- var answer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
968
- return answer !== null && typeof answer.customAnswerLabel !== 'undefined';
969
- });
970
- if (!hasCustomAnswerLabel) {
971
- return false;
972
- }
973
- return true;
974
- }
975
- }, {
976
- key: "parse",
977
- value: function parse(screen) {
978
- var _ref2 = screen || {},
979
- _ref2$answers = _ref2.answers,
980
- answers = _ref2$answers === void 0 ? null : _ref2$answers,
981
- restScreen = _objectWithoutProperties(_ref2, _excluded$5);
982
- return _objectSpread(_objectSpread({}, restScreen), {}, {
983
- answers: answers.map(function () {
984
- var answer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
985
- if (answer === null || typeof answer.customAnswerLabel === 'undefined') {
986
- return answer;
987
- }
988
- var _ref3 = answer || {},
989
- customAnswerLabel = _ref3.customAnswerLabel,
990
- restAnswer = _objectWithoutProperties(_ref3, _excluded2$2);
991
- return _objectSpread(_objectSpread({}, restAnswer), {}, {
992
- result: customAnswerLabel
993
- });
994
- })
995
- });
996
- }
997
- }]);
998
- }();
792
+ class CustomAnswerLabel {
793
+ test(screen) {
794
+ const {
795
+ answers = null
796
+ } = screen || {};
797
+ if (answers === null || answers.length === 0) {
798
+ return false;
799
+ }
800
+ const hasCustomAnswerLabel = (answers || []).some((answer = null) => answer !== null && typeof answer.customAnswerLabel !== 'undefined');
801
+ if (!hasCustomAnswerLabel) {
802
+ return false;
803
+ }
804
+ return true;
805
+ }
806
+ parse(screen) {
807
+ const {
808
+ answers = null,
809
+ ...restScreen
810
+ } = screen || {};
811
+ return {
812
+ ...restScreen,
813
+ answers: answers.map((answer = null) => {
814
+ if (answer === null || typeof answer.customAnswerLabel === 'undefined') {
815
+ return answer;
816
+ }
817
+ const {
818
+ customAnswerLabel,
819
+ ...restAnswer
820
+ } = answer || {};
821
+ return {
822
+ ...restAnswer,
823
+ result: customAnswerLabel
824
+ };
825
+ })
826
+ };
827
+ }
828
+ }
999
829
  CustomAnswerLabel.prototype.priority = 1;
1000
830
 
1001
- var _excluded$4 = ["items"],
1002
- _excluded2$1 = ["label", "textStyle"];
1003
-
1004
831
  /* eslint-disable class-methods-use-this */
1005
- var KeypadItemLabel = /*#__PURE__*/function () {
1006
- function KeypadItemLabel() {
1007
- _classCallCheck(this, KeypadItemLabel);
1008
- }
1009
- return _createClass(KeypadItemLabel, [{
1010
- key: "test",
1011
- value: function test(screen) {
1012
- var _ref = screen || {},
1013
- _ref$type = _ref.type,
1014
- type = _ref$type === void 0 ? null : _ref$type,
1015
- _ref$items = _ref.items,
1016
- items = _ref$items === void 0 ? null : _ref$items;
1017
- if (type !== 'keypad' || items === null || items.length === 0) {
1018
- return false;
1019
- }
1020
- var hasStringItemLabel = (items || []).some(function () {
1021
- var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1022
- return item !== null && isString(item === null || item === void 0 ? void 0 : item.label);
1023
- });
1024
- if (!hasStringItemLabel) {
1025
- return false;
1026
- }
1027
- return true;
1028
- }
1029
- }, {
1030
- key: "parse",
1031
- value: function parse(screen) {
1032
- var _ref2 = screen || {},
1033
- _ref2$items = _ref2.items,
1034
- items = _ref2$items === void 0 ? null : _ref2$items,
1035
- restScreen = _objectWithoutProperties(_ref2, _excluded$4);
1036
- return _objectSpread(_objectSpread({}, restScreen), {}, {
1037
- items: items.map(function () {
1038
- var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1039
- if (item === null || !isString(item === null || item === void 0 ? void 0 : item.label)) {
1040
- return item;
832
+ class KeypadItemLabel {
833
+ test(screen) {
834
+ const {
835
+ type = null,
836
+ items = null
837
+ } = screen || {};
838
+ if (type !== 'keypad' || items === null || items.length === 0) {
839
+ return false;
840
+ }
841
+ const hasStringItemLabel = (items || []).some((item = null) => item !== null && isString(item?.label));
842
+ if (!hasStringItemLabel) {
843
+ return false;
844
+ }
845
+ return true;
846
+ }
847
+ parse(screen) {
848
+ const {
849
+ items = null,
850
+ ...restScreen
851
+ } = screen || {};
852
+ return {
853
+ ...restScreen,
854
+ items: items.map((item = null) => {
855
+ if (item === null || !isString(item?.label)) {
856
+ return item;
857
+ }
858
+ const {
859
+ label,
860
+ textStyle,
861
+ ...restAnswer
862
+ } = item || {};
863
+ return {
864
+ ...restAnswer,
865
+ label: {
866
+ body: label,
867
+ textStyle
1041
868
  }
1042
- var _ref3 = item || {},
1043
- label = _ref3.label,
1044
- textStyle = _ref3.textStyle,
1045
- restAnswer = _objectWithoutProperties(_ref3, _excluded2$1);
1046
- return _objectSpread(_objectSpread({}, restAnswer), {}, {
1047
- label: {
1048
- body: label,
1049
- textStyle: textStyle
1050
- }
1051
- });
1052
- })
1053
- });
1054
- }
1055
- }]);
1056
- }();
869
+ };
870
+ })
871
+ };
872
+ }
873
+ }
1057
874
  KeypadItemLabel.prototype.priority = 1;
1058
875
 
1059
- var _excluded$3 = ["keypadSettings"];
1060
876
  /* eslint-disable class-methods-use-this */
1061
- var KeypadSettings = /*#__PURE__*/function () {
1062
- function KeypadSettings() {
1063
- _classCallCheck(this, KeypadSettings);
1064
- }
1065
- return _createClass(KeypadSettings, [{
1066
- key: "test",
1067
- value: function test(screen) {
1068
- var _ref = screen || {},
1069
- _ref$type = _ref.type,
1070
- type = _ref$type === void 0 ? null : _ref$type,
1071
- _ref$keypadSettings = _ref.keypadSettings,
1072
- keypadSettings = _ref$keypadSettings === void 0 ? null : _ref$keypadSettings;
1073
- if (type !== 'keypad' || keypadSettings === null) {
1074
- return false;
1075
- }
1076
- var _ref2 = keypadSettings || {},
1077
- _ref2$layout = _ref2.layout,
1078
- keypadSettingsLayout = _ref2$layout === void 0 ? null : _ref2$layout;
1079
- if (keypadSettingsLayout === null) {
1080
- return false;
1081
- }
1082
- return true;
1083
- }
1084
- }, {
1085
- key: "parse",
1086
- value: function parse(screen) {
1087
- var _ref3 = screen || {},
1088
- _ref3$keypadSettings = _ref3.keypadSettings,
1089
- keypadSettings = _ref3$keypadSettings === void 0 ? null : _ref3$keypadSettings,
1090
- restScreen = _objectWithoutProperties(_ref3, _excluded$3);
1091
- var _ref4 = keypadSettings || {},
1092
- _ref4$layout = _ref4.layout,
1093
- keypadSettingsLayout = _ref4$layout === void 0 ? null : _ref4$layout;
1094
- return _objectSpread(_objectSpread({}, restScreen), {}, {
1095
- keypadLayout: keypadSettingsLayout
1096
- });
1097
- }
1098
- }]);
1099
- }();
877
+ class KeypadSettings {
878
+ test(screen) {
879
+ const {
880
+ type = null,
881
+ keypadSettings = null
882
+ } = screen || {};
883
+ if (type !== 'keypad' || keypadSettings === null) {
884
+ return false;
885
+ }
886
+ const {
887
+ layout: keypadSettingsLayout = null
888
+ } = keypadSettings || {};
889
+ if (keypadSettingsLayout === null) {
890
+ return false;
891
+ }
892
+ return true;
893
+ }
894
+ parse(screen) {
895
+ const {
896
+ keypadSettings = null,
897
+ ...restScreen
898
+ } = screen || {};
899
+ const {
900
+ layout: keypadSettingsLayout = null
901
+ } = keypadSettings || {};
902
+ return {
903
+ ...restScreen,
904
+ keypadLayout: keypadSettingsLayout
905
+ };
906
+ }
907
+ }
1100
908
  KeypadSettings.prototype.priority = 1;
1101
909
 
1102
910
  // export { default as ButtonPadding } from './ButtonPadding';
@@ -1109,16 +917,13 @@ var migrations = /*#__PURE__*/Object.freeze({
1109
917
  ShareCall: ShareCall
1110
918
  });
1111
919
 
1112
- var _excluded$2 = ["components"];
1113
- var MigrationsParser = /*#__PURE__*/function () {
1114
- function MigrationsParser(_ref) {
1115
- var screensManager = _ref.screensManager;
1116
- _classCallCheck(this, MigrationsParser);
920
+ class MigrationsParser {
921
+ constructor({
922
+ screensManager
923
+ }) {
1117
924
  this.screensManager = screensManager;
1118
- this.parsers = Object.keys(migrations).map(function (migration) {
1119
- return new migrations[migration]();
1120
- });
1121
- this.parsers.sort(function (a, b) {
925
+ this.parsers = Object.keys(migrations).map(migration => new migrations[migration]());
926
+ this.parsers.sort((a, b) => {
1122
927
  if (a.priority === undefined || b.priority === undefined) {
1123
928
  return 0;
1124
929
  }
@@ -1130,572 +935,526 @@ var MigrationsParser = /*#__PURE__*/function () {
1130
935
  }
1131
936
 
1132
937
  // eslint-disable-next-line class-methods-use-this
1133
- return _createClass(MigrationsParser, [{
1134
- key: "parse",
1135
- value: function parse(story) {
1136
- var _this = this;
1137
- if (story === null) {
1138
- return story;
1139
- }
1140
- var _ref2 = story || {},
1141
- _ref2$components = _ref2.components,
1142
- components = _ref2$components === void 0 ? [] : _ref2$components,
1143
- restStory = _objectWithoutProperties(_ref2, _excluded$2);
1144
- var finalComponents = components.reduce(function (currentComponents, screen) {
1145
- var newScreen = _this.parsers.reduce(function (currentScreen, parser) {
1146
- if (parser.test(currentScreen, story)) {
1147
- return parser.parse(currentScreen, story);
1148
- }
1149
- return currentScreen;
1150
- }, screen);
1151
- return [].concat(_toConsumableArray(currentComponents), [newScreen]);
1152
- }, []);
1153
- return _objectSpread(_objectSpread({}, restStory), {}, {
1154
- components: finalComponents
1155
- });
1156
- }
1157
- }]);
1158
- }();
938
+ parse(story) {
939
+ if (story === null) {
940
+ return story;
941
+ }
942
+ const {
943
+ components = [],
944
+ ...restStory
945
+ } = story || {};
946
+ const finalComponents = components.reduce((currentComponents, screen) => {
947
+ const newScreen = this.parsers.reduce((currentScreen, parser) => {
948
+ if (parser.test(currentScreen, story)) {
949
+ return parser.parse(currentScreen, story);
950
+ }
951
+ return currentScreen;
952
+ }, screen);
953
+ return [...currentComponents, newScreen];
954
+ }, []);
955
+ return {
956
+ ...restStory,
957
+ components: finalComponents
958
+ };
959
+ }
960
+ }
1159
961
 
1160
- var _excluded$1 = ["textStyle", "color", "boxStyle"];
1161
- var ThemeParser = /*#__PURE__*/function () {
1162
- function ThemeParser(_ref) {
1163
- var screensManager = _ref.screensManager;
1164
- _classCallCheck(this, ThemeParser);
962
+ class ThemeParser {
963
+ constructor({
964
+ screensManager
965
+ }) {
1165
966
  this.screensManager = screensManager;
1166
967
  this.definitionCache = {};
1167
968
  this.fieldsCache = {};
1168
969
  }
1169
- return _createClass(ThemeParser, [{
1170
- key: "getDefinitionByScreen",
1171
- value: function getDefinitionByScreen(type, themeComponents) {
1172
- if (typeof this.definitionCache[type] === 'undefined') {
1173
- var definition = this.screensManager.getDefinition(type) || {};
1174
- var themeScreen = themeComponents.find(function (it) {
1175
- return it.type === type;
1176
- }) || null;
1177
- this.definitionCache[type] = {
1178
- definition: definition,
1179
- themeScreen: themeScreen
1180
- };
1181
- }
1182
- return this.definitionCache[type];
970
+ getDefinitionByScreen(type, themeComponents) {
971
+ if (typeof this.definitionCache[type] === 'undefined') {
972
+ const definition = this.screensManager.getDefinition(type) || {};
973
+ const themeScreen = themeComponents.find(it => it.type === type) || null;
974
+ this.definitionCache[type] = {
975
+ definition,
976
+ themeScreen
977
+ };
1183
978
  }
1184
- }, {
1185
- key: "getFieldsForDefinition",
1186
- value: function getFieldsForDefinition(definition) {
1187
- var _ref2 = definition || {},
1188
- _ref2$id = _ref2.id,
1189
- definitionId = _ref2$id === void 0 ? null : _ref2$id,
1190
- _ref2$fields = _ref2.fields,
1191
- fields = _ref2$fields === void 0 ? [] : _ref2$fields,
1192
- _ref2$states = _ref2.states,
1193
- states = _ref2$states === void 0 ? [] : _ref2$states;
1194
- if (typeof this.fieldsCache[definitionId] === 'undefined') {
1195
- if (states === null || states.length === 0) {
1196
- this.fieldsCache[definitionId] = {
1197
- fields: fields
1198
- };
1199
- } else {
1200
- // TODO: test this
1201
- var finalFields = fields;
1202
- var repetableStates = [];
1203
- if (states !== null && states.length > 0) {
1204
- var nonRepetableStates = states.filter(function (_ref3) {
1205
- var _ref3$repeatable = _ref3.repeatable,
1206
- repeatable = _ref3$repeatable === void 0 ? false : _ref3$repeatable;
1207
- return repeatable === false;
1208
- });
1209
- repetableStates = states.filter(function (_ref4) {
1210
- var _ref4$repeatable = _ref4.repeatable,
1211
- repeatable = _ref4$repeatable === void 0 ? false : _ref4$repeatable;
1212
- return repeatable === true;
1213
- });
1214
- finalFields = nonRepetableStates.reduce(function (acc, it) {
1215
- var _ref5 = it || {},
1216
- _ref5$fields = _ref5.fields,
1217
- itemFields = _ref5$fields === void 0 ? [] : _ref5$fields;
1218
- if (itemFields !== null && itemFields.length > 0) {
1219
- return acc.concat(itemFields);
1220
- }
1221
- return acc;
1222
- }, finalFields);
1223
- }
1224
- this.fieldsCache[definitionId] = {
1225
- fields: finalFields,
1226
- repetableStates: repetableStates
1227
- };
979
+ return this.definitionCache[type];
980
+ }
981
+ getFieldsForDefinition(definition) {
982
+ const {
983
+ id: definitionId = null,
984
+ fields = [],
985
+ states = []
986
+ } = definition || {};
987
+ if (typeof this.fieldsCache[definitionId] === 'undefined') {
988
+ if (states === null || states.length === 0) {
989
+ this.fieldsCache[definitionId] = {
990
+ fields
991
+ };
992
+ } else {
993
+ // TODO: test this
994
+ let finalFields = fields;
995
+ let repetableStates = [];
996
+ if (states !== null && states.length > 0) {
997
+ const nonRepetableStates = states.filter(({
998
+ repeatable = false
999
+ }) => repeatable === false);
1000
+ repetableStates = states.filter(({
1001
+ repeatable = false
1002
+ }) => repeatable === true);
1003
+ finalFields = nonRepetableStates.reduce((acc, it) => {
1004
+ const {
1005
+ fields: itemFields = []
1006
+ } = it || {};
1007
+ if (itemFields !== null && itemFields.length > 0) {
1008
+ return acc.concat(itemFields);
1009
+ }
1010
+ return acc;
1011
+ }, finalFields);
1228
1012
  }
1013
+ this.fieldsCache[definitionId] = {
1014
+ fields: finalFields,
1015
+ repetableStates
1016
+ };
1229
1017
  }
1230
- return this.fieldsCache[definitionId];
1231
1018
  }
1232
- }, {
1233
- key: "parse",
1234
- value: function parse(story) {
1235
- var _this = this;
1236
- if (story === null) {
1237
- return story;
1238
- }
1239
- var _ref6 = story || {},
1240
- _ref6$theme = _ref6.theme,
1241
- theme = _ref6$theme === void 0 ? null : _ref6$theme,
1242
- _ref6$components = _ref6.components,
1243
- components = _ref6$components === void 0 ? null : _ref6$components;
1244
- if (theme === null || components === null) {
1245
- return story;
1246
- }
1247
- var _theme$components = theme.components,
1248
- themeComponents = _theme$components === void 0 ? [] : _theme$components,
1249
- _theme$background = theme.background,
1250
- themeBackground = _theme$background === void 0 ? null : _theme$background,
1251
- _theme$colors = theme.colors,
1252
- themeColors = _theme$colors === void 0 ? {} : _theme$colors,
1253
- _theme$textStyles = theme.textStyles,
1254
- themeTextStyles = _theme$textStyles === void 0 ? null : _theme$textStyles,
1255
- _theme$boxStyles = theme.boxStyles,
1256
- themeBoxStyles = _theme$boxStyles === void 0 ? null : _theme$boxStyles;
1257
-
1258
- // Speed test
1259
- // const newComponents = [...components];
1260
- // for (let index = 0; index < components.length; index += 1) {
1261
- // const screen = components[index] || {};
1262
- // const { type } = screen;
1263
- // const { definition, themeScreen } = this.getDefinitionByScreen(type, themeComponents);
1264
- // const newScreen = this.parseScreen(
1265
- // definition,
1266
- // screen,
1267
- // themeScreen,
1268
- // themeBackground,
1269
- // themeColors,
1270
- // themeTextStyles,
1271
- // themeBoxStyles,
1272
- // );
1273
-
1274
- // if (newScreen !== screen || themeScreen !== null) {
1275
- // newComponents[index] = {
1276
- // ...themeScreen,
1277
- // ...newScreen,
1278
- // };
1279
- // }
1280
- // }
1281
- // story.components = newComponents;
1282
- // return story;
1283
-
1284
- var newComponents = components.reduce(function (currentComponents, screen, index) {
1285
- var type = screen.type;
1286
- var _this$getDefinitionBy = _this.getDefinitionByScreen(type, themeComponents),
1287
- definition = _this$getDefinitionBy.definition;
1288
- var themeScreen = null;
1289
- var newScreen = _this.parseScreen(definition, screen, themeScreen, themeBackground, themeColors, themeTextStyles, themeBoxStyles);
1290
-
1291
- // Only switch screen if it has changed
1292
- return newScreen !== screen || themeScreen !== null ? [].concat(_toConsumableArray(currentComponents.slice(0, index)), [_objectSpread(_objectSpread({}, themeScreen), newScreen)], _toConsumableArray(currentComponents.slice(index + 1))) : currentComponents;
1293
- }, components);
1294
- return newComponents !== components ? _objectSpread(_objectSpread({}, story), {}, {
1295
- components: newComponents
1296
- }) : story;
1297
- }
1298
- }, {
1299
- key: "parseScreen",
1300
- value: function parseScreen(definition, value, themeValue, themeBackground, themeColors, themeTextStyles, themeBoxStyles) {
1301
- var _this2 = this;
1302
- var _this$getFieldsForDef = this.getFieldsForDefinition(definition),
1303
- _this$getFieldsForDef2 = _this$getFieldsForDef.fields,
1304
- fields = _this$getFieldsForDef2 === void 0 ? null : _this$getFieldsForDef2,
1305
- _this$getFieldsForDef3 = _this$getFieldsForDef.repetableStates,
1306
- repetableStates = _this$getFieldsForDef3 === void 0 ? null : _this$getFieldsForDef3;
1307
- var newThemeValue = themeValue === null && themeBackground !== null ? {} : themeValue;
1308
- if (themeBackground !== null && typeof newThemeValue.background !== 'undefined') {
1309
- newThemeValue.background = _objectSpread(_objectSpread({}, themeBackground), newThemeValue.background);
1310
- } else if (themeBackground !== null) {
1311
- newThemeValue.background = themeBackground;
1312
- }
1313
- var newScreenValue = Object.keys(value).reduce(function (currentValue, key) {
1314
- var repetableState = null;
1315
- if (repetableStates !== null && repetableStates.length > 0) {
1316
- repetableState = repetableStates.find(function (_ref7) {
1317
- var _ref7$id = _ref7.id,
1318
- stateId = _ref7$id === void 0 ? null : _ref7$id;
1319
- return stateId !== null && stateId === key;
1320
- }) || null;
1321
- }
1322
- var fieldDefinition = (fields || null).find(function (it) {
1323
- return it.name === key;
1324
- }) || repetableState || {};
1325
- var fieldValue = value[key];
1326
- var fieldThemeValue = newThemeValue !== null ? newThemeValue[key] || null : null;
1327
-
1328
- // Try for early return
1329
- var _ref8 = fieldDefinition || {},
1330
- _ref8$theme = _ref8.theme,
1331
- theme = _ref8$theme === void 0 ? null : _ref8$theme;
1332
- if ((theme === null || !isObject(theme)) && fields === null) {
1333
- return _objectSpread(_objectSpread({}, currentValue), {}, _defineProperty({}, key, fieldValue));
1334
- }
1335
-
1336
- // console.log('start', key, fieldValue);
1337
- var newFieldValue = _this2.parseField(fieldValue, fieldDefinition, fieldThemeValue, themeColors, themeTextStyles, themeBoxStyles);
1338
- // console.log('result', newFieldValue);
1019
+ return this.fieldsCache[definitionId];
1020
+ }
1021
+ parse(story) {
1022
+ if (story === null) {
1023
+ return story;
1024
+ }
1025
+ const {
1026
+ theme = null,
1027
+ components = null
1028
+ } = story || {};
1029
+ if (theme === null || components === null) {
1030
+ return story;
1031
+ }
1032
+ const {
1033
+ components: themeComponents = [],
1034
+ background: themeBackground = null,
1035
+ colors: themeColors = {},
1036
+ textStyles: themeTextStyles = null,
1037
+ boxStyles: themeBoxStyles = null
1038
+ } = theme;
1339
1039
 
1340
- // const newFieldValue = fieldValue;
1040
+ // Speed test
1041
+ // const newComponents = [...components];
1042
+ // for (let index = 0; index < components.length; index += 1) {
1043
+ // const screen = components[index] || {};
1044
+ // const { type } = screen;
1045
+ // const { definition, themeScreen } = this.getDefinitionByScreen(type, themeComponents);
1046
+ // const newScreen = this.parseScreen(
1047
+ // definition,
1048
+ // screen,
1049
+ // themeScreen,
1050
+ // themeBackground,
1051
+ // themeColors,
1052
+ // themeTextStyles,
1053
+ // themeBoxStyles,
1054
+ // );
1341
1055
 
1342
- // Only switch field if it has changed
1343
- return newFieldValue !== fieldValue ? _objectSpread(_objectSpread({}, currentValue), {}, _defineProperty({}, key, newFieldValue)) : currentValue;
1344
- }, value);
1345
- return newThemeValue !== null ? _objectSpread(_objectSpread({}, newThemeValue), newScreenValue) : newScreenValue;
1346
- }
1056
+ // if (newScreen !== screen || themeScreen !== null) {
1057
+ // newComponents[index] = {
1058
+ // ...themeScreen,
1059
+ // ...newScreen,
1060
+ // };
1061
+ // }
1062
+ // }
1063
+ // story.components = newComponents;
1064
+ // return story;
1347
1065
 
1348
- // eslint-disable-next-line class-methods-use-this
1349
- }, {
1350
- key: "parseField",
1351
- value: function parseField(value, fieldDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1352
- var _this3 = this;
1353
- var _fieldDefinition$them = fieldDefinition.theme,
1354
- fieldTheme = _fieldDefinition$them === void 0 ? null : _fieldDefinition$them,
1355
- _fieldDefinition$fiel = fieldDefinition.fields,
1356
- definitionFields = _fieldDefinition$fiel === void 0 ? null : _fieldDefinition$fiel;
1066
+ const newComponents = components.reduce((currentComponents, screen, index) => {
1067
+ const {
1068
+ type
1069
+ } = screen;
1070
+ const {
1071
+ definition /* themeScreen */
1072
+ } = this.getDefinitionByScreen(type, themeComponents);
1073
+ const themeScreen = null;
1074
+ const newScreen = this.parseScreen(definition, screen, themeScreen, themeBackground, themeColors, themeTextStyles, themeBoxStyles);
1357
1075
 
1358
- // There are sub-fields in this definition
1359
- if (definitionFields !== null && value !== null) {
1360
- return isArray(value) ? value.map(function (innerFieldValue) {
1361
- if (innerFieldValue === null) {
1362
- return innerFieldValue;
1363
- }
1364
- return _this3.parseInnerFields(innerFieldValue, definitionFields, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1365
- }) : this.parseInnerFields(value, definitionFields, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1076
+ // Only switch screen if it has changed
1077
+ return newScreen !== screen || themeScreen !== null ? [...currentComponents.slice(0, index), {
1078
+ ...themeScreen,
1079
+ ...newScreen
1080
+ }, ...currentComponents.slice(index + 1)] : currentComponents;
1081
+ }, components);
1082
+ return newComponents !== components ? {
1083
+ ...story,
1084
+ components: newComponents
1085
+ } : story;
1086
+ }
1087
+ parseScreen(definition, value, themeValue, themeBackground, themeColors, themeTextStyles, themeBoxStyles) {
1088
+ const {
1089
+ fields = null,
1090
+ repetableStates = null
1091
+ } = this.getFieldsForDefinition(definition);
1092
+ const newThemeValue = themeValue === null && themeBackground !== null ? {} : themeValue;
1093
+ if (themeBackground !== null && typeof newThemeValue.background !== 'undefined') {
1094
+ newThemeValue.background = {
1095
+ ...themeBackground,
1096
+ ...newThemeValue.background
1097
+ };
1098
+ } else if (themeBackground !== null) {
1099
+ newThemeValue.background = themeBackground;
1100
+ }
1101
+ const newScreenValue = Object.keys(value).reduce((currentValue, key) => {
1102
+ let repetableState = null;
1103
+ if (repetableStates !== null && repetableStates.length > 0) {
1104
+ repetableState = repetableStates.find(({
1105
+ id: stateId = null
1106
+ }) => stateId !== null && stateId === key) || null;
1366
1107
  }
1108
+ const fieldDefinition = (fields || null).find(it => it.name === key) || repetableState || {};
1109
+ const fieldValue = value[key];
1110
+ const fieldThemeValue = newThemeValue !== null ? newThemeValue[key] || null : null;
1367
1111
 
1368
- // Early return
1369
- if (fieldTheme === null || !isObject(fieldTheme)) {
1370
- return value;
1112
+ // Try for early return
1113
+ const {
1114
+ theme = null
1115
+ } = fieldDefinition || {};
1116
+ if ((theme === null || !isObject(theme)) && fields === null) {
1117
+ return {
1118
+ ...currentValue,
1119
+ [key]: fieldValue
1120
+ };
1371
1121
  }
1372
1122
 
1373
- // @TODO very slooow...
1374
- if (isArray(value)) {
1375
- var newFieldValue = value.map(function (innerField) {
1376
- return innerField !== null ? Object.keys(innerField).reduce(function (newInnerField, innerFieldName) {
1377
- // Early return
1378
- if (!isObject(innerField[innerFieldName])) {
1379
- return newInnerField;
1380
- }
1381
- var _ref9 = fieldTheme[innerFieldName] || {},
1382
- _ref9$textStyle = _ref9.textStyle,
1383
- innerFieldTextStyle = _ref9$textStyle === void 0 ? null : _ref9$textStyle,
1384
- _ref9$color = _ref9.color,
1385
- innerFieldColor = _ref9$color === void 0 ? null : _ref9$color,
1386
- _ref9$boxStyle = _ref9.boxStyle,
1387
- innerFieldBoxStyle = _ref9$boxStyle === void 0 ? null : _ref9$boxStyle;
1123
+ // console.log('start', key, fieldValue);
1124
+ const newFieldValue = this.parseField(fieldValue, fieldDefinition, fieldThemeValue, themeColors, themeTextStyles, themeBoxStyles);
1125
+ // console.log('result', newFieldValue);
1388
1126
 
1389
- // Early return, no theme
1390
- if (innerFieldTextStyle === null && innerFieldColor === null && innerFieldBoxStyle === null) {
1391
- return newInnerField;
1392
- }
1393
- var _ref0 = innerField[innerFieldName] || {},
1394
- _ref0$textStyle = _ref0.textStyle,
1395
- valueTextStyle = _ref0$textStyle === void 0 ? false : _ref0$textStyle,
1396
- _ref0$boxStyle = _ref0.boxStyle,
1397
- valueBoxStyle = _ref0$boxStyle === void 0 ? false : _ref0$boxStyle;
1127
+ // const newFieldValue = fieldValue;
1398
1128
 
1399
- // Color
1400
- var colorValue = innerFieldColor !== null ? {
1401
- color: innerFieldColor !== null && themeColors !== null ? themeColors[innerFieldColor] || null : null
1402
- } : null;
1403
-
1404
- // Text style
1405
- var textStyleValue = innerFieldTextStyle !== null ? {
1406
- textStyle: valueTextStyle !== false ? valueTextStyle : _objectSpread(_objectSpread({}, innerFieldTextStyle !== null && themeTextStyles !== null ? themeTextStyles[innerFieldTextStyle] || null : null), valueTextStyle)
1407
- } : null;
1408
- var boxStyleValue = innerFieldBoxStyle !== null ? {
1409
- boxStyle: valueBoxStyle !== false ? valueBoxStyle : _objectSpread(_objectSpread({}, innerFieldBoxStyle !== null && themeBoxStyles !== null ? themeBoxStyles[innerFieldBoxStyle] || null : null), valueBoxStyle)
1410
- } : null;
1411
- if (colorValue === null && textStyleValue === null && boxStyleValue === null) {
1412
- return newInnerField;
1413
- }
1414
- return _objectSpread(_objectSpread({}, newInnerField), {}, _defineProperty({}, innerFieldName, _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, colorValue), innerField[innerFieldName]), textStyleValue), boxStyleValue)));
1415
- }, innerField) : innerField;
1416
- });
1417
- return newFieldValue;
1418
- }
1419
- if (isObject(value)) {
1420
- return this.parseValue(value, fieldTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1421
- }
1422
- return value;
1423
- }
1424
- }, {
1425
- key: "parseInnerFields",
1426
- value: function parseInnerFields(value, fieldsOrDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1427
- var _this4 = this;
1428
- var newValue = Object.keys(value).reduce(function (finalValue, innerFieldName) {
1429
- var innerDefinition = isArray(fieldsOrDefinition) ? fieldsOrDefinition.find(function (it) {
1430
- return it.name === innerFieldName;
1431
- }) || null : fieldsOrDefinition;
1432
- var _ref1 = innerDefinition || {},
1433
- _ref1$theme = _ref1.theme,
1434
- idfTheme = _ref1$theme === void 0 ? null : _ref1$theme;
1435
- var innerValue = value[innerFieldName];
1129
+ // Only switch field if it has changed
1130
+ return newFieldValue !== fieldValue ? {
1131
+ ...currentValue,
1132
+ [key]: newFieldValue
1133
+ } : currentValue;
1134
+ }, value);
1135
+ return newThemeValue !== null ? {
1136
+ ...newThemeValue,
1137
+ ...newScreenValue
1138
+ } : newScreenValue;
1139
+ }
1436
1140
 
1437
- // For items fields
1438
- if (innerValue !== null && innerDefinition !== null && isArray(innerValue)) {
1439
- // eslint-disable-next-line no-param-reassign
1440
- finalValue[innerFieldName] = _this4.parseField(innerValue, innerDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1441
- return finalValue;
1442
- }
1141
+ // eslint-disable-next-line class-methods-use-this
1142
+ parseField(value, fieldDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1143
+ const {
1144
+ theme: fieldTheme = null,
1145
+ fields: definitionFields = null
1146
+ } = fieldDefinition;
1443
1147
 
1444
- // For fields with fields
1445
- if (innerValue !== null && idfTheme !== null && isObject(idfTheme) && isObject(innerValue)) {
1446
- // eslint-disable-next-line no-param-reassign
1447
- finalValue[innerFieldName] = _this4.parseValue(innerValue, idfTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1448
- return finalValue;
1148
+ // There are sub-fields in this definition
1149
+ if (definitionFields !== null && value !== null) {
1150
+ return isArray(value) ? value.map(innerFieldValue => {
1151
+ if (innerFieldValue === null) {
1152
+ return innerFieldValue;
1449
1153
  }
1154
+ return this.parseInnerFields(innerFieldValue, definitionFields, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1155
+ }) : this.parseInnerFields(value, definitionFields, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1156
+ }
1450
1157
 
1451
- // eslint-disable-next-line no-param-reassign
1452
- finalValue[innerFieldName] = value[innerFieldName];
1453
- return finalValue;
1454
- }, {});
1455
- return newValue;
1158
+ // Early return
1159
+ if (fieldTheme === null || !isObject(fieldTheme)) {
1160
+ return value;
1456
1161
  }
1457
1162
 
1458
- // eslint-disable-next-line class-methods-use-this
1459
- }, {
1460
- key: "parseValue",
1461
- value: function parseValue(initialValue, fieldTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1462
- var _this5 = this;
1463
- if (isObject(initialValue) || isObject(fieldTheme)) {
1464
- var value = initialValue || null;
1465
- var _ref10 = fieldTheme || {},
1466
- _ref10$textStyle = _ref10.textStyle,
1467
- fieldTextStyleName = _ref10$textStyle === void 0 ? null : _ref10$textStyle,
1468
- _ref10$color = _ref10.color,
1469
- fieldColorName = _ref10$color === void 0 ? null : _ref10$color,
1470
- _ref10$boxStyle = _ref10.boxStyle,
1471
- fieldBoxStyleName = _ref10$boxStyle === void 0 ? null : _ref10$boxStyle,
1472
- otherProps = _objectWithoutProperties(_ref10, _excluded$1);
1473
- if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty(otherProps) && !isObject(fieldTheme)) {
1474
- return value;
1163
+ // @TODO very slooow...
1164
+ if (isArray(value)) {
1165
+ const newFieldValue = value.map(innerField => innerField !== null ? Object.keys(innerField).reduce((newInnerField, innerFieldName) => {
1166
+ // Early return
1167
+ if (!isObject(innerField[innerFieldName])) {
1168
+ return newInnerField;
1475
1169
  }
1476
- var complexValue = null;
1477
- if (!isEmpty(otherProps)) {
1478
- complexValue = Object.keys(otherProps).reduce(function (newObject, key) {
1479
- var innerValue = value !== null ? value[key] || null : null;
1480
- var newValue = _this5.parseValue(innerValue, otherProps[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1481
- return _objectSpread(_objectSpread({}, newObject), newValue !== null ? _defineProperty({}, key, newValue) : null);
1482
- }, {});
1170
+ const {
1171
+ textStyle: innerFieldTextStyle = null,
1172
+ color: innerFieldColor = null,
1173
+ boxStyle: innerFieldBoxStyle = null
1174
+ } = fieldTheme[innerFieldName] || {};
1175
+
1176
+ // Early return, no theme
1177
+ if (innerFieldTextStyle === null && innerFieldColor === null && innerFieldBoxStyle === null) {
1178
+ return newInnerField;
1483
1179
  }
1484
- var _ref12 = value || {},
1485
- _ref12$textStyle = _ref12.textStyle,
1486
- valueTextStyle = _ref12$textStyle === void 0 ? false : _ref12$textStyle,
1487
- _ref12$boxStyle = _ref12.boxStyle,
1488
- valueBoxStyle = _ref12$boxStyle === void 0 ? false : _ref12$boxStyle;
1180
+ const {
1181
+ textStyle: valueTextStyle = false,
1182
+ boxStyle: valueBoxStyle = false
1183
+ } = innerField[innerFieldName] || {};
1489
1184
 
1490
1185
  // Color
1491
- var fieldColor = fieldColorName !== null && themeColors !== null ? themeColors[fieldColorName] || null : null;
1492
- var colorValue = fieldColor !== null ? {
1493
- color: fieldColor
1186
+ const colorValue = innerFieldColor !== null ? {
1187
+ color: innerFieldColor !== null && themeColors !== null ? themeColors[innerFieldColor] || null : null
1494
1188
  } : null;
1495
1189
 
1496
1190
  // Text style
1497
- var fieldTextStyle = fieldTextStyleName !== null && themeTextStyles !== null ? themeTextStyles[fieldTextStyleName] || null : null;
1498
- var fieldThemeComponentTextStyle = themeValue !== null ? themeValue.textStyle || null : null;
1499
- var textStyleValue = fieldTextStyle !== null || fieldThemeComponentTextStyle !== null ? {
1500
- textStyle: valueTextStyle !== false ? valueTextStyle : _objectSpread(_objectSpread(_objectSpread({}, fieldTextStyle), fieldThemeComponentTextStyle), valueTextStyle || null)
1191
+ const textStyleValue = innerFieldTextStyle !== null ? {
1192
+ textStyle: valueTextStyle !== false ? valueTextStyle : {
1193
+ ...(innerFieldTextStyle !== null && themeTextStyles !== null ? themeTextStyles[innerFieldTextStyle] || null : null),
1194
+ ...valueTextStyle
1195
+ }
1501
1196
  } : null;
1502
-
1503
- // Box style
1504
- var fieldBoxStyle = fieldBoxStyleName !== null && themeBoxStyles !== null ? themeBoxStyles[fieldBoxStyleName] || null : null;
1505
- var fieldThemeComponentBoxStyle = themeValue !== null ? themeValue.boxStyle || null : null;
1506
- var boxStyleValue = fieldBoxStyle !== null || fieldThemeComponentBoxStyle !== null ? {
1507
- boxStyle: valueBoxStyle !== false ? valueBoxStyle : _objectSpread(_objectSpread(_objectSpread({}, fieldBoxStyle), fieldThemeComponentBoxStyle), valueBoxStyle || null)
1197
+ const boxStyleValue = innerFieldBoxStyle !== null ? {
1198
+ boxStyle: valueBoxStyle !== false ? valueBoxStyle : {
1199
+ ...(innerFieldBoxStyle !== null && themeBoxStyles !== null ? themeBoxStyles[innerFieldBoxStyle] || null : null),
1200
+ ...valueBoxStyle
1201
+ }
1508
1202
  } : null;
1203
+ if (colorValue === null && textStyleValue === null && boxStyleValue === null) {
1204
+ return newInnerField;
1205
+ }
1206
+ return {
1207
+ ...newInnerField,
1208
+ [innerFieldName]: {
1209
+ ...colorValue,
1210
+ ...innerField[innerFieldName],
1211
+ ...textStyleValue,
1212
+ ...boxStyleValue
1213
+ }
1214
+ };
1215
+ }, innerField) : innerField);
1216
+ return newFieldValue;
1217
+ }
1218
+ if (isObject(value)) {
1219
+ return this.parseValue(value, fieldTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1220
+ }
1221
+ return value;
1222
+ }
1223
+ parseInnerFields(value, fieldsOrDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1224
+ const newValue = Object.keys(value).reduce((finalValue, innerFieldName) => {
1225
+ const innerDefinition = isArray(fieldsOrDefinition) ? fieldsOrDefinition.find(it => it.name === innerFieldName) || null : fieldsOrDefinition;
1226
+ const {
1227
+ theme: idfTheme = null
1228
+ } = innerDefinition || {};
1229
+ const innerValue = value[innerFieldName];
1509
1230
 
1510
- // Only change value if something is overrided
1511
- return colorValue !== null || themeValue !== null || textStyleValue !== null || boxStyleValue !== null || complexValue !== null ? _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, colorValue), themeValue), value), boxStyleValue), textStyleValue), complexValue) : value;
1231
+ // For items fields
1232
+ if (innerValue !== null && innerDefinition !== null && isArray(innerValue)) {
1233
+ // eslint-disable-next-line no-param-reassign
1234
+ finalValue[innerFieldName] = this.parseField(innerValue, innerDefinition, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1235
+ return finalValue;
1512
1236
  }
1513
- return initialValue;
1514
- }
1515
- }]);
1516
- }();
1517
1237
 
1518
- var StoryParser = /*#__PURE__*/function () {
1519
- function StoryParser(_ref) {
1520
- var screensManager = _ref.screensManager,
1521
- fieldsManager = _ref.fieldsManager,
1522
- fieldsPattern = _ref.fieldsPattern;
1523
- _classCallCheck(this, StoryParser);
1524
- var _ref2 = fieldsPattern || {},
1525
- _ref2$medias = _ref2.medias,
1526
- mediasPattern = _ref2$medias === void 0 ? null : _ref2$medias,
1527
- _ref2$fonts = _ref2.fonts,
1528
- fontsPattern = _ref2$fonts === void 0 ? null : _ref2$fonts;
1238
+ // For fields with fields
1239
+ if (innerValue !== null && idfTheme !== null && isObject(idfTheme) && isObject(innerValue)) {
1240
+ // eslint-disable-next-line no-param-reassign
1241
+ finalValue[innerFieldName] = this.parseValue(innerValue, idfTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles);
1242
+ return finalValue;
1243
+ }
1244
+
1245
+ // eslint-disable-next-line no-param-reassign
1246
+ finalValue[innerFieldName] = value[innerFieldName];
1247
+ return finalValue;
1248
+ }, {});
1249
+ return newValue;
1250
+ }
1251
+
1252
+ // eslint-disable-next-line class-methods-use-this
1253
+ parseValue(initialValue, fieldTheme, themeValue, themeColors, themeTextStyles, themeBoxStyles) {
1254
+ if (isObject(initialValue) || isObject(fieldTheme)) {
1255
+ const value = initialValue || null;
1256
+ const {
1257
+ textStyle: fieldTextStyleName = null,
1258
+ color: fieldColorName = null,
1259
+ boxStyle: fieldBoxStyleName = null,
1260
+ ...otherProps
1261
+ } = fieldTheme || {};
1262
+ if (fieldTextStyleName === null && fieldColorName === null && fieldBoxStyleName === null && isEmpty(otherProps) && !isObject(fieldTheme)) {
1263
+ return value;
1264
+ }
1265
+ let complexValue = null;
1266
+ if (!isEmpty(otherProps)) {
1267
+ complexValue = Object.keys(otherProps).reduce((newObject, key) => {
1268
+ const innerValue = value !== null ? value[key] || null : null;
1269
+ const newValue = this.parseValue(innerValue, otherProps[key], themeValue, themeColors, themeTextStyles, themeBoxStyles);
1270
+ return {
1271
+ ...newObject,
1272
+ ...(newValue !== null ? {
1273
+ [key]: newValue
1274
+ } : null)
1275
+ };
1276
+ }, {});
1277
+ }
1278
+ const {
1279
+ textStyle: valueTextStyle = false,
1280
+ boxStyle: valueBoxStyle = false
1281
+ } = value || {};
1282
+
1283
+ // Color
1284
+ const fieldColor = fieldColorName !== null && themeColors !== null ? themeColors[fieldColorName] || null : null;
1285
+ const colorValue = fieldColor !== null ? {
1286
+ color: fieldColor
1287
+ } : null;
1288
+
1289
+ // Text style
1290
+ const fieldTextStyle = fieldTextStyleName !== null && themeTextStyles !== null ? themeTextStyles[fieldTextStyleName] || null : null;
1291
+ const fieldThemeComponentTextStyle = themeValue !== null ? themeValue.textStyle || null : null;
1292
+ const textStyleValue = fieldTextStyle !== null || fieldThemeComponentTextStyle !== null ? {
1293
+ textStyle: valueTextStyle !== false ? valueTextStyle : {
1294
+ ...fieldTextStyle,
1295
+ ...fieldThemeComponentTextStyle,
1296
+ ...(valueTextStyle || null)
1297
+ }
1298
+ } : null;
1299
+
1300
+ // Box style
1301
+ const fieldBoxStyle = fieldBoxStyleName !== null && themeBoxStyles !== null ? themeBoxStyles[fieldBoxStyleName] || null : null;
1302
+ const fieldThemeComponentBoxStyle = themeValue !== null ? themeValue.boxStyle || null : null;
1303
+ const boxStyleValue = fieldBoxStyle !== null || fieldThemeComponentBoxStyle !== null ? {
1304
+ boxStyle: valueBoxStyle !== false ? valueBoxStyle : {
1305
+ ...fieldBoxStyle,
1306
+ ...fieldThemeComponentBoxStyle,
1307
+ ...(valueBoxStyle || null)
1308
+ }
1309
+ } : null;
1310
+
1311
+ // Only change value if something is overrided
1312
+ return colorValue !== null || themeValue !== null || textStyleValue !== null || boxStyleValue !== null || complexValue !== null ? {
1313
+ ...colorValue,
1314
+ ...themeValue,
1315
+ ...value,
1316
+ ...boxStyleValue,
1317
+ ...textStyleValue,
1318
+ ...complexValue
1319
+ } : value;
1320
+ }
1321
+ return initialValue;
1322
+ }
1323
+ }
1324
+
1325
+ class StoryParser {
1326
+ constructor({
1327
+ screensManager,
1328
+ fieldsManager,
1329
+ fieldsPattern
1330
+ }) {
1331
+ const {
1332
+ medias: mediasPattern = null,
1333
+ fonts: fontsPattern = null
1334
+ } = fieldsPattern || {};
1529
1335
  this.themeParser = new ThemeParser({
1530
- screensManager: screensManager
1336
+ screensManager
1531
1337
  });
1532
1338
  this.mediasParser = new MediasParser({
1533
- screensManager: screensManager,
1534
- fieldsManager: fieldsManager,
1339
+ screensManager,
1340
+ fieldsManager,
1535
1341
  fieldsPattern: mediasPattern
1536
1342
  });
1537
1343
  this.fontsParser = new FontsParser({
1538
- screensManager: screensManager,
1539
- fieldsManager: fieldsManager,
1344
+ screensManager,
1345
+ fieldsManager,
1540
1346
  fieldsPattern: fontsPattern
1541
1347
  });
1542
1348
  this.migrationsParser = new MigrationsParser({
1543
- screensManager: screensManager
1349
+ screensManager
1544
1350
  });
1545
1351
  }
1546
- return _createClass(StoryParser, [{
1547
- key: "parse",
1548
- value: function parse(story) {
1549
- var _this = this;
1550
- var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1551
- _ref3$withTheme = _ref3.withTheme,
1552
- withTheme = _ref3$withTheme === void 0 ? true : _ref3$withTheme,
1553
- _ref3$withMedias = _ref3.withMedias,
1554
- withMedias = _ref3$withMedias === void 0 ? true : _ref3$withMedias,
1555
- _ref3$withFonts = _ref3.withFonts,
1556
- withFonts = _ref3$withFonts === void 0 ? true : _ref3$withFonts,
1557
- _ref3$withMigrations = _ref3.withMigrations,
1558
- withMigrations = _ref3$withMigrations === void 0 ? true : _ref3$withMigrations;
1559
- if (story === null) {
1560
- return story;
1561
- }
1562
- var parsers = [[withMedias, function (newStory) {
1563
- return _this.mediasParser.fromPath(newStory);
1564
- }], [withTheme, function (newStory) {
1565
- return _this.themeParser.parse(newStory);
1566
- }], [withFonts, function (newStory) {
1567
- return _this.fontsParser.parse(newStory);
1568
- }], [withMigrations, function (newStory) {
1569
- return _this.migrationsParser.parse(newStory);
1570
- }]];
1571
- return parsers.reduce(function (parsedStory, _ref4) {
1572
- var _ref5 = _slicedToArray(_ref4, 2),
1573
- enabled = _ref5[0],
1574
- parse = _ref5[1];
1575
- return enabled ? parse(parsedStory) : parsedStory;
1576
- }, story);
1577
- }
1578
- }]);
1579
- }();
1352
+ parse(story, {
1353
+ withTheme = true,
1354
+ withMedias = true,
1355
+ withFonts = true,
1356
+ withMigrations = true
1357
+ } = {}) {
1358
+ if (story === null) {
1359
+ return story;
1360
+ }
1361
+ const parsers = [[withMedias, newStory => this.mediasParser.fromPath(newStory)], [withTheme, newStory => this.themeParser.parse(newStory)], [withFonts, newStory => this.fontsParser.parse(newStory)], [withMigrations, newStory => this.migrationsParser.parse(newStory)]];
1362
+ return parsers.reduce((parsedStory, [enabled, parse]) => enabled ? parse(parsedStory) : parsedStory, story);
1363
+ }
1364
+ }
1580
1365
 
1581
- var _excluded = ["value"],
1582
- _excluded2 = ["value", "currentTime"];
1583
- var Tracking = /*#__PURE__*/function (_BaseTracking) {
1584
- function Tracking() {
1585
- var _this;
1586
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1587
- _classCallCheck(this, Tracking);
1588
- _this = _callSuper(this, Tracking, [opts]);
1589
- _this.screensViewed = [];
1590
- return _this;
1591
- }
1592
- _inherits(Tracking, _BaseTracking);
1593
- return _createClass(Tracking, [{
1594
- key: "trackScreenView",
1595
- value: function trackScreenView(screen, screenIndex) {
1596
- var _ref = this.variables || {},
1597
- _ref$screensCount = _ref.screensCount,
1598
- screensCount = _ref$screensCount === void 0 ? null : _ref$screensCount;
1599
- var _ref2 = screen || {},
1600
- _ref2$id = _ref2.id,
1601
- screenId = _ref2$id === void 0 ? null : _ref2$id,
1602
- _ref2$type = _ref2.type,
1603
- screenType = _ref2$type === void 0 ? null : _ref2$type,
1604
- _ref2$metadata = _ref2.metadata,
1605
- metadata = _ref2$metadata === void 0 ? null : _ref2$metadata,
1606
- _ref2$parameters = _ref2.parameters,
1607
- _ref2$parameters2 = _ref2$parameters === void 0 ? {} : _ref2$parameters,
1608
- parametersMetadata = _ref2$parameters2.metadata;
1609
- var _ref3 = metadata || parametersMetadata || {},
1610
- screenTitle = _ref3.title,
1611
- screenDescrition = _ref3.description;
1612
- if (this.screensViewed.indexOf(screenId || screenIndex) === -1) {
1613
- this.screensViewed = [].concat(_toConsumableArray(this.screensViewed), [screenId || screenIndex]);
1614
- }
1615
- var data = {
1616
- event: 'screenView',
1617
- screenId: screenId,
1618
- screenType: screenType,
1619
- screenIndex: screenIndex,
1620
- screenTitle: screenTitle,
1621
- screenDescrition: screenDescrition,
1622
- screenProgress: screensCount !== null && screenIndex !== null ? (screenIndex + 1) / screensCount : null,
1623
- screensViewed: this.screensViewed,
1624
- screensViewedProgress: screensCount !== null ? this.screensViewed.length / screensCount : null
1625
- };
1626
- this.push(data);
1627
- }
1628
- }, {
1629
- key: "trackEvent",
1630
- value: function trackEvent() {
1631
- var category = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1632
- var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1633
- var label = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1634
- var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1635
- var _ref4 = opts || {},
1636
- _ref4$value = _ref4.value,
1637
- value = _ref4$value === void 0 ? null : _ref4$value,
1638
- otherOpts = _objectWithoutProperties(_ref4, _excluded);
1639
- var data = _objectSpread(_objectSpread({}, otherOpts || null), {}, {
1640
- event: 'eventInteraction',
1641
- eventCategory: category,
1642
- eventAction: action,
1643
- eventLabel: label,
1644
- eventValue: value
1645
- });
1646
- this.push(data);
1647
- }
1648
- }, {
1649
- key: "trackMedia",
1650
- value: function trackMedia() {
1651
- var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1652
- var media = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1653
- var action = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1654
- var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
1655
- var _ref5 = opts || {},
1656
- _ref5$value = _ref5.value,
1657
- value = _ref5$value === void 0 ? null : _ref5$value,
1658
- _ref5$currentTime = _ref5.currentTime,
1659
- optsCurrentTime = _ref5$currentTime === void 0 ? null : _ref5$currentTime,
1660
- otherOpts = _objectWithoutProperties(_ref5, _excluded2);
1661
- var _ref6 = media || {},
1662
- _ref6$id = _ref6.id,
1663
- mediaId = _ref6$id === void 0 ? null : _ref6$id,
1664
- _ref6$url = _ref6.url,
1665
- mediaUrl = _ref6$url === void 0 ? null : _ref6$url,
1666
- _ref6$name = _ref6.name,
1667
- mediaName = _ref6$name === void 0 ? null : _ref6$name,
1668
- _ref6$duration = _ref6.duration,
1669
- rootDuration = _ref6$duration === void 0 ? null : _ref6$duration,
1670
- _ref6$currentTime = _ref6.currentTime,
1671
- currentTime = _ref6$currentTime === void 0 ? optsCurrentTime : _ref6$currentTime,
1672
- _ref6$metadata = _ref6.metadata,
1673
- metadata = _ref6$metadata === void 0 ? {} : _ref6$metadata;
1674
- var _ref7 = metadata || {},
1675
- _ref7$duration = _ref7.duration,
1676
- duration = _ref7$duration === void 0 ? rootDuration : _ref7$duration;
1677
- var data = _objectSpread(_objectSpread({}, otherOpts || null), {}, {
1678
- event: 'eventInteraction',
1679
- eventCategory: type,
1680
- eventAction: action,
1681
- eventLabel: mediaName || mediaUrl,
1682
- eventValue: value,
1683
- mediaId: mediaId,
1684
- mediaUrl: mediaUrl,
1685
- mediaName: mediaName
1686
- });
1687
- if (duration !== null) {
1688
- data.mediaDuration = Math.round(duration);
1689
- }
1690
- if (currentTime !== null) {
1691
- data.mediaCurrentTime = Math.round(currentTime);
1692
- }
1693
- if (currentTime !== null && duration !== null && duration > 0) {
1694
- data.mediaProgress = currentTime / duration;
1695
- }
1696
- this.push(data);
1697
- }
1698
- }]);
1699
- }(Tracking$1);
1366
+ /* eslint-disable no-console */
1367
+ class Tracking extends Tracking$1 {
1368
+ constructor(opts = {}) {
1369
+ super(opts);
1370
+ this.screensViewed = [];
1371
+ }
1372
+ trackScreenView(screen, screenIndex) {
1373
+ const {
1374
+ screensCount = null
1375
+ } = this.variables || {};
1376
+ const {
1377
+ id: screenId = null,
1378
+ type: screenType = null,
1379
+ metadata = null,
1380
+ parameters: {
1381
+ metadata: parametersMetadata
1382
+ } = {}
1383
+ } = screen || {};
1384
+ const {
1385
+ title: screenTitle,
1386
+ description: screenDescrition
1387
+ } = metadata || parametersMetadata || {};
1388
+ if (this.screensViewed.indexOf(screenId || screenIndex) === -1) {
1389
+ this.screensViewed = [...this.screensViewed, screenId || screenIndex];
1390
+ }
1391
+ const data = {
1392
+ event: 'screenView',
1393
+ screenId,
1394
+ screenType,
1395
+ screenIndex,
1396
+ screenTitle,
1397
+ screenDescrition,
1398
+ screenProgress: screensCount !== null && screenIndex !== null ? (screenIndex + 1) / screensCount : null,
1399
+ screensViewed: this.screensViewed,
1400
+ screensViewedProgress: screensCount !== null ? this.screensViewed.length / screensCount : null
1401
+ };
1402
+ this.push(data);
1403
+ }
1404
+ trackEvent(category = null, action = null, label = null, opts = null) {
1405
+ const {
1406
+ value = null,
1407
+ ...otherOpts
1408
+ } = opts || {};
1409
+ const data = {
1410
+ ...(otherOpts || null),
1411
+ event: 'eventInteraction',
1412
+ eventCategory: category,
1413
+ eventAction: action,
1414
+ eventLabel: label,
1415
+ eventValue: value
1416
+ };
1417
+ this.push(data);
1418
+ }
1419
+ trackMedia(type = null, media = null, action = null, opts = null) {
1420
+ const {
1421
+ value = null,
1422
+ currentTime: optsCurrentTime = null,
1423
+ ...otherOpts
1424
+ } = opts || {};
1425
+ const {
1426
+ id: mediaId = null,
1427
+ url: mediaUrl = null,
1428
+ name: mediaName = null,
1429
+ duration: rootDuration = null,
1430
+ currentTime = optsCurrentTime,
1431
+ metadata = {}
1432
+ } = media || {};
1433
+ const {
1434
+ duration = rootDuration
1435
+ } = metadata || {};
1436
+ const data = {
1437
+ ...(otherOpts || null),
1438
+ event: 'eventInteraction',
1439
+ eventCategory: type,
1440
+ eventAction: action,
1441
+ eventLabel: mediaName || mediaUrl,
1442
+ eventValue: value,
1443
+ mediaId,
1444
+ mediaUrl,
1445
+ mediaName
1446
+ };
1447
+ if (duration !== null) {
1448
+ data.mediaDuration = Math.round(duration);
1449
+ }
1450
+ if (currentTime !== null) {
1451
+ data.mediaCurrentTime = Math.round(currentTime);
1452
+ }
1453
+ if (currentTime !== null && duration !== null && duration > 0) {
1454
+ data.mediaProgress = currentTime / duration;
1455
+ }
1456
+ this.push(data);
1457
+ }
1458
+ }
1700
1459
 
1701
1460
  export { ColorsParser, ComponentsManager, DefinitionsManager, EventsManager, FieldsManager, FontsParser, MediasParser, ScreensManager, StoryParser, ThemeParser, Tracking };