@sankhyalabs/sankhyablocks 1.3.31-beta.2 → 1.3.31-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/cjs/{index-1133bc2a.js → index-e42cb45d.js} +448 -9
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/sankhyablocks.cjs.js +2 -2
  4. package/dist/cjs/snk-application.cjs.entry.js +105 -79
  5. package/dist/cjs/snk-data-unit.cjs.entry.js +144 -0
  6. package/dist/cjs/snk-form.cjs.entry.js +95 -0
  7. package/dist/cjs/snk-grid.cjs.entry.js +64 -0
  8. package/dist/cjs/snk-pesquisa.cjs.entry.js +1 -1
  9. package/dist/cjs/snk-taskbar.cjs.entry.js +159 -0
  10. package/dist/cjs/taskbar-elements-bfa647c7.js +68 -0
  11. package/dist/cjs/teste-pesquisa.cjs.entry.js +1 -1
  12. package/dist/collection/collection-manifest.json +4 -0
  13. package/dist/collection/components/snk-application/snk-application.js +52 -5
  14. package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
  15. package/dist/collection/components/snk-data-unit/snk-data-unit.js +325 -0
  16. package/dist/collection/components/snk-form/snk-form.css +3 -0
  17. package/dist/collection/components/snk-form/snk-form.js +194 -0
  18. package/dist/collection/components/snk-grid/snk-grid.css +5 -0
  19. package/dist/collection/components/snk-grid/snk-grid.js +128 -0
  20. package/dist/collection/components/snk-taskbar/component/snk-popup-button.js +7 -0
  21. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +63 -0
  22. package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
  23. package/dist/collection/components/snk-taskbar/snk-taskbar.js +268 -0
  24. package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +32 -21
  25. package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
  26. package/dist/components/snk-application2.js +105 -78
  27. package/dist/components/snk-data-unit.d.ts +11 -0
  28. package/dist/components/snk-data-unit.js +165 -0
  29. package/dist/components/snk-form.d.ts +11 -0
  30. package/dist/components/snk-form.js +121 -0
  31. package/dist/components/snk-grid.d.ts +11 -0
  32. package/dist/components/snk-grid.js +88 -0
  33. package/dist/components/snk-taskbar.d.ts +11 -0
  34. package/dist/components/snk-taskbar.js +6 -0
  35. package/dist/components/snk-taskbar2.js +239 -0
  36. package/dist/esm/{index-ffda6382.js → index-02c04e0f.js} +448 -10
  37. package/dist/esm/loader.js +2 -2
  38. package/dist/esm/sankhyablocks.js +2 -2
  39. package/dist/esm/snk-application.entry.js +105 -79
  40. package/dist/esm/snk-data-unit.entry.js +140 -0
  41. package/dist/esm/snk-form.entry.js +91 -0
  42. package/dist/esm/snk-grid.entry.js +60 -0
  43. package/dist/esm/snk-pesquisa.entry.js +1 -1
  44. package/dist/esm/snk-taskbar.entry.js +155 -0
  45. package/dist/esm/taskbar-elements-fe7cbf0e.js +66 -0
  46. package/dist/esm/teste-pesquisa.entry.js +1 -1
  47. package/dist/sankhyablocks/p-09e48ff8.entry.js +1 -0
  48. package/dist/sankhyablocks/{p-2a7b4cb3.entry.js → p-376004ef.entry.js} +1 -1
  49. package/dist/sankhyablocks/p-37b06977.entry.js +1 -0
  50. package/dist/sankhyablocks/p-64e2471c.js +1 -0
  51. package/dist/sankhyablocks/p-b80352ac.entry.js +69 -0
  52. package/dist/sankhyablocks/p-c156b1da.entry.js +1 -0
  53. package/dist/sankhyablocks/p-cc9c348a.entry.js +1 -0
  54. package/dist/sankhyablocks/p-db215c74.js +2 -0
  55. package/dist/sankhyablocks/{p-d62412bb.entry.js → p-e38386b1.entry.js} +1 -1
  56. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  57. package/dist/types/components/snk-application/snk-application.d.ts +3 -1
  58. package/dist/types/components/snk-taskbar/component/snk-popup-button.d.ts +12 -0
  59. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +24 -0
  60. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +28 -0
  61. package/dist/types/components.d.ts +112 -1
  62. package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +1 -1
  63. package/package.json +5 -5
  64. package/react/components.d.ts +4 -0
  65. package/react/components.js +4 -0
  66. package/react/components.js.map +1 -1
  67. package/dist/sankhyablocks/p-e6e91d5f.entry.js +0 -69
  68. package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
@@ -0,0 +1,63 @@
1
+ import { h } from "@stencil/core";
2
+ export var TaskbarElement;
3
+ (function (TaskbarElement) {
4
+ TaskbarElement["PREVIOUS"] = "PREVIOUS";
5
+ TaskbarElement["NEXT"] = "NEXT";
6
+ TaskbarElement["REFRESH"] = "REFRESH";
7
+ TaskbarElement["UPDATE"] = "UPDATE";
8
+ TaskbarElement["CLONE"] = "CLONE";
9
+ TaskbarElement["REMOVE"] = "REMOVE";
10
+ TaskbarElement["INSERT"] = "INSERT";
11
+ TaskbarElement["CANCEL"] = "CANCEL";
12
+ TaskbarElement["SAVE"] = "SAVE";
13
+ TaskbarElement["GRID_MODE"] = "GRID_MODE";
14
+ TaskbarElement["FORM_MODE"] = "FORM_MODE";
15
+ TaskbarElement["CONFIG_GRID"] = "CONFIG_GRID";
16
+ TaskbarElement["MORE_OPTIONS"] = "MORE_OPTIONS";
17
+ TaskbarElement["DIVIDER"] = "DIVIDER";
18
+ })(TaskbarElement || (TaskbarElement = {}));
19
+ export var AuthorizationElements;
20
+ (function (AuthorizationElements) {
21
+ AuthorizationElements["UPDATE"] = "UPDATE";
22
+ AuthorizationElements["CLONE"] = "CLONE";
23
+ AuthorizationElements["REMOVE"] = "REMOVE";
24
+ AuthorizationElements["INSERT"] = "INSERT";
25
+ AuthorizationElements["CONFIG_GRID"] = "CONFIG_GRID";
26
+ })(AuthorizationElements || (AuthorizationElements = {}));
27
+ export const buildElem = (element, className, getTitle, action, isEnabled) => {
28
+ switch (element) {
29
+ case TaskbarElement.PREVIOUS:
30
+ return iconButton("chevron-left", element, className, getTitle, action, isEnabled);
31
+ case TaskbarElement.NEXT:
32
+ return iconButton("chevron-right", element, className, getTitle, action, isEnabled);
33
+ case TaskbarElement.REFRESH:
34
+ return iconButton("sync", element, className, getTitle, action, isEnabled);
35
+ case TaskbarElement.UPDATE:
36
+ return iconButton("edit", element, className, getTitle, action, isEnabled);
37
+ case TaskbarElement.CLONE:
38
+ return iconButton("copy", element, className, getTitle, action, isEnabled);
39
+ case TaskbarElement.REMOVE:
40
+ return iconButton("delete", element, className, getTitle, action, isEnabled);
41
+ case TaskbarElement.INSERT:
42
+ return iconTextButton("plus", element, className, getTitle, action, isEnabled);
43
+ case TaskbarElement.CANCEL:
44
+ return h("ez-button", { label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
45
+ case TaskbarElement.SAVE:
46
+ return iconTextButton("save", element, className, getTitle, action, isEnabled);
47
+ case TaskbarElement.GRID_MODE:
48
+ return iconButton("table", element, className, getTitle, action, isEnabled);
49
+ case TaskbarElement.FORM_MODE:
50
+ return iconButton("list", element, className, getTitle, action, isEnabled);
51
+ case TaskbarElement.CONFIG_GRID:
52
+ return iconButton("settings-inverted", element, className, getTitle, action, isEnabled);
53
+ case TaskbarElement.DIVIDER:
54
+ return h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-horizontal--medium" });
55
+ }
56
+ };
57
+ function iconButton(iconName, element, className, getTitle, action, isEnabled) {
58
+ return h("ez-button", { key: iconName, title: getTitle(element), mode: "icon", size: "small", class: className, iconName: iconName, enabled: isEnabled(element), onClick: () => action(element) });
59
+ }
60
+ function iconTextButton(iconName, element, className, getTitle, action, isEnabled) {
61
+ return h("ez-button", { key: iconName, title: getTitle(element), label: getTitle(element), size: "small", class: className, enabled: isEnabled(element), onClick: () => action(element) },
62
+ h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: iconName }));
63
+ }
@@ -0,0 +1,3 @@
1
+ :host {
2
+ display: flex;
3
+ }
@@ -0,0 +1,268 @@
1
+ import { ApplicationContext } from '@sankhyalabs/core';
2
+ import { Component, Event, h, Host, Prop, State, Watch } from '@stencil/core';
3
+ import { SnkPopupButton } from './component/snk-popup-button';
4
+ import { TaskbarElement, buildElem, AuthorizationElements } from './elements/taskbar-elements';
5
+ export class SnkTaskbar {
6
+ constructor() {
7
+ this._moreOptionsOpened = false;
8
+ }
9
+ observeButtons() {
10
+ this._definitions = undefined;
11
+ }
12
+ // Internal methods
13
+ elementsFromString(strButtons) {
14
+ const elements = [];
15
+ if (strButtons) {
16
+ strButtons.split(",").forEach(buttonName => {
17
+ buttonName = buttonName.trim();
18
+ if (this.isAllowed(buttonName)) {
19
+ elements.push(buttonName.trim());
20
+ }
21
+ });
22
+ }
23
+ return elements;
24
+ }
25
+ isAllowed(buttonName) {
26
+ if (AuthorizationElements[buttonName]) {
27
+ return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
28
+ }
29
+ return true;
30
+ }
31
+ getTitle(element) {
32
+ const pt_br = {
33
+ [TaskbarElement.UPDATE]: "Editar",
34
+ [TaskbarElement.PREVIOUS]: "Anterior",
35
+ [TaskbarElement.NEXT]: "Próximo",
36
+ [TaskbarElement.REFRESH]: "Atualizar",
37
+ [TaskbarElement.CLONE]: "Duplicar",
38
+ [TaskbarElement.REMOVE]: "Excluir",
39
+ [TaskbarElement.MORE_OPTIONS]: "Mais Opções",
40
+ [TaskbarElement.INSERT]: "Cadastrar",
41
+ [TaskbarElement.CANCEL]: "Cancelar",
42
+ [TaskbarElement.SAVE]: "Salvar",
43
+ [TaskbarElement.GRID_MODE]: "Modo Grade",
44
+ [TaskbarElement.CONFIG_GRID]: "Configuração da grade",
45
+ [TaskbarElement.FORM_MODE]: "Modo Formulário"
46
+ };
47
+ return pt_br[element] ? pt_br[element] : "";
48
+ }
49
+ elementClick(elem) {
50
+ if (this.dataUnit) {
51
+ switch (elem) {
52
+ case TaskbarElement.PREVIOUS:
53
+ this.dataUnit.previousRecord();
54
+ break;
55
+ case TaskbarElement.NEXT:
56
+ this.dataUnit.nextRecord();
57
+ break;
58
+ case TaskbarElement.REFRESH:
59
+ this.dataUnit.loadData();
60
+ break;
61
+ case TaskbarElement.CLONE:
62
+ this.dataUnit.copySelected();
63
+ break;
64
+ case TaskbarElement.REMOVE:
65
+ this.dataUnit.removeSelectedRecords();
66
+ break;
67
+ case TaskbarElement.INSERT:
68
+ this.dataUnit.addRecord();
69
+ break;
70
+ case TaskbarElement.CANCEL:
71
+ this.dataUnit.cancelEdition();
72
+ break;
73
+ case TaskbarElement.SAVE:
74
+ this.dataUnit.saveData();
75
+ break;
76
+ }
77
+ }
78
+ this.actionClick.emit(elem);
79
+ }
80
+ actionClickHandler(act) {
81
+ this._moreOptionsOpened = false;
82
+ this.actionClick.emit(act.key);
83
+ }
84
+ isEnabled(elem) {
85
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
86
+ }
87
+ getElement(index, def) {
88
+ let element;
89
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
90
+ if (index > 1) {
91
+ className += "ez-padding-left--medium";
92
+ }
93
+ if (def === TaskbarElement.MORE_OPTIONS) {
94
+ element = this.actionsList ? h(SnkPopupButton, { className: className, title: this.getTitle(def), source: this.actionsList, opened: this._moreOptionsOpened, setOpened: opened => this._moreOptionsOpened = opened, actionClick: act => this.actionClickHandler(act) }) : undefined;
95
+ }
96
+ else {
97
+ element = buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem));
98
+ }
99
+ return element;
100
+ }
101
+ // Lifecycle
102
+ componentWillRender() {
103
+ if (this._permissions === undefined) {
104
+ const snkApplication = ApplicationContext.getContextValue("__SNK__APPLICATION__");
105
+ if (snkApplication) {
106
+ snkApplication.getAllAccess().then(access => this._permissions = access);
107
+ }
108
+ else {
109
+ this._permissions = {};
110
+ }
111
+ }
112
+ else {
113
+ if (this._definitions == undefined) {
114
+ this._definitions = this.elementsFromString(this.buttons);
115
+ }
116
+ }
117
+ }
118
+ render() {
119
+ if (this._definitions === undefined) {
120
+ return undefined;
121
+ }
122
+ let index = 0;
123
+ return (h(Host, null, this._definitions.map((btn) => {
124
+ if (btn === TaskbarElement.DIVIDER) {
125
+ index = 0;
126
+ }
127
+ else {
128
+ index++;
129
+ }
130
+ if (TaskbarElement[btn]) {
131
+ return this.getElement(index, TaskbarElement[btn]);
132
+ }
133
+ else {
134
+ index;
135
+ return h("slot", { name: btn });
136
+ }
137
+ })));
138
+ }
139
+ static get is() { return "snk-taskbar"; }
140
+ static get encapsulation() { return "scoped"; }
141
+ static get originalStyleUrls() { return {
142
+ "$": ["snk-taskbar.css"]
143
+ }; }
144
+ static get styleUrls() { return {
145
+ "$": ["snk-taskbar.css"]
146
+ }; }
147
+ static get properties() { return {
148
+ "buttons": {
149
+ "type": "string",
150
+ "mutable": false,
151
+ "complexType": {
152
+ "original": "string",
153
+ "resolved": "string",
154
+ "references": {}
155
+ },
156
+ "required": false,
157
+ "optional": false,
158
+ "docs": {
159
+ "tags": [],
160
+ "text": ""
161
+ },
162
+ "attribute": "buttons",
163
+ "reflect": false
164
+ },
165
+ "actionsList": {
166
+ "type": "unknown",
167
+ "mutable": false,
168
+ "complexType": {
169
+ "original": "Array<Action>",
170
+ "resolved": "Action[]",
171
+ "references": {
172
+ "Array": {
173
+ "location": "global"
174
+ },
175
+ "Action": {
176
+ "location": "local"
177
+ }
178
+ }
179
+ },
180
+ "required": false,
181
+ "optional": false,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": ""
185
+ }
186
+ },
187
+ "primaryButton": {
188
+ "type": "string",
189
+ "mutable": false,
190
+ "complexType": {
191
+ "original": "string",
192
+ "resolved": "string",
193
+ "references": {}
194
+ },
195
+ "required": false,
196
+ "optional": false,
197
+ "docs": {
198
+ "tags": [],
199
+ "text": ""
200
+ },
201
+ "attribute": "primary-button",
202
+ "reflect": false
203
+ },
204
+ "disabledButtons": {
205
+ "type": "unknown",
206
+ "mutable": false,
207
+ "complexType": {
208
+ "original": "Array<string>",
209
+ "resolved": "string[]",
210
+ "references": {
211
+ "Array": {
212
+ "location": "global"
213
+ }
214
+ }
215
+ },
216
+ "required": false,
217
+ "optional": false,
218
+ "docs": {
219
+ "tags": [],
220
+ "text": ""
221
+ }
222
+ },
223
+ "dataUnit": {
224
+ "type": "unknown",
225
+ "mutable": false,
226
+ "complexType": {
227
+ "original": "DataUnit",
228
+ "resolved": "DataUnit",
229
+ "references": {
230
+ "DataUnit": {
231
+ "location": "import",
232
+ "path": "@sankhyalabs/core"
233
+ }
234
+ }
235
+ },
236
+ "required": false,
237
+ "optional": false,
238
+ "docs": {
239
+ "tags": [],
240
+ "text": ""
241
+ }
242
+ }
243
+ }; }
244
+ static get states() { return {
245
+ "_moreOptionsOpened": {},
246
+ "_permissions": {}
247
+ }; }
248
+ static get events() { return [{
249
+ "method": "actionClick",
250
+ "name": "actionClick",
251
+ "bubbles": true,
252
+ "cancelable": true,
253
+ "composed": true,
254
+ "docs": {
255
+ "tags": [],
256
+ "text": ""
257
+ },
258
+ "complexType": {
259
+ "original": "string",
260
+ "resolved": "string",
261
+ "references": {}
262
+ }
263
+ }]; }
264
+ static get watchers() { return [{
265
+ "propName": "buttons",
266
+ "methodName": "observeButtons"
267
+ }]; }
268
+ }
@@ -1,6 +1,6 @@
1
- import { DataUnit, ChangeOperation, StringUtils, DataType, } from "@sankhyalabs/core";
2
- import { DataFetcher } from "../DataFetcher";
1
+ import { ChangeOperation, DataType, DataUnit, StringUtils } from "@sankhyalabs/core";
3
2
  import { gql } from "graphql-request";
3
+ import { DataFetcher } from "../DataFetcher";
4
4
  export default class DataUnitFetcher {
5
5
  constructor() {
6
6
  this.templateByQuery = new Map();
@@ -32,9 +32,9 @@ export default class DataUnitFetcher {
32
32
  }
33
33
  }
34
34
  }`);
35
- this.templateByQuery.set("fetchData", gql `query($dataunit: String! $limit: Int $offset:Int $filter: [InputFilter!] $sort: [InputSort!]) {
35
+ this.templateByQuery.set("fetchData", gql `query($dataunit: String! $limit: Int $offset:Int $filters: [InputFilter!] $sort: [InputSort!]) {
36
36
  $queryAlias$: fetchDataUnit(name: $dataunit){
37
- data(limit: $limit offset: $offset filters: $filter sort: $sort){
37
+ data(limit: $limit offset: $offset filters: $filters sort: $sort){
38
38
  limit
39
39
  offset
40
40
  total
@@ -63,7 +63,7 @@ export default class DataUnitFetcher {
63
63
  getDataUnit(entityName, resourceID) {
64
64
  const dataUnit = new DataUnit(`dd://${entityName}/${resourceID}`);
65
65
  dataUnit.metadataLoader = (dataUnit) => this.loadMetadata(dataUnit);
66
- dataUnit.dataLoader = (dataUnit, page, sort, filters) => this.loadData(dataUnit, page, sort, filters);
66
+ dataUnit.dataLoader = (dataUnit, request) => this.loadData(dataUnit, request);
67
67
  dataUnit.saveLoader = (dataUnit, changes) => this.saveData(dataUnit, changes);
68
68
  dataUnit.removeLoader = (dataUnit, recordIds) => this.removeRecords(dataUnit, recordIds);
69
69
  return dataUnit;
@@ -100,25 +100,24 @@ export default class DataUnitFetcher {
100
100
  });
101
101
  });
102
102
  }
103
- loadData(dataUnit, page, sort, filter) {
103
+ loadData(dataUnit, request) {
104
104
  return new Promise((resolve, reject) => {
105
- var _a, _b, _c;
106
- const variables = { dataunit: dataUnit.name, sort, filter };
107
- if (page) {
108
- variables.limit = page.limit;
109
- variables.offset = page.offset;
110
- }
111
- if (!StringUtils.isEmpty((_a = page === null || page === void 0 ? void 0 : page.quickFilter) === null || _a === void 0 ? void 0 : _a.term)) {
105
+ var _a;
106
+ const { sort, filters, limit, offset, quickFilter } = request;
107
+ const variables = { dataunit: dataUnit.name, sort, filters };
108
+ variables.limit = limit;
109
+ variables.offset = offset;
110
+ if (!StringUtils.isEmpty(quickFilter === null || quickFilter === void 0 ? void 0 : quickFilter.term)) {
112
111
  if (variables.filter === undefined) {
113
112
  variables.filter = [];
114
113
  }
115
114
  const quickFilterCriteria = {
116
115
  name: "__QUICK_FILTER__",
117
116
  expression: "__QUICK_FILTER__",
118
- params: [{ name: "term", dataType: DataType.TEXT, value: page.quickFilter.term }]
117
+ params: [{ name: "term", dataType: DataType.TEXT, value: quickFilter.term }]
119
118
  };
120
- if (((_c = (_b = page.quickFilter) === null || _b === void 0 ? void 0 : _b.fields) === null || _c === void 0 ? void 0 : _c.length) > 0) {
121
- quickFilterCriteria.params.push({ name: "fields", dataType: DataType.OBJECT, value: page.quickFilter.fields });
119
+ if (((_a = quickFilter === null || quickFilter === void 0 ? void 0 : quickFilter.fields) === null || _a === void 0 ? void 0 : _a.length) > 0) {
120
+ quickFilterCriteria.params.push({ name: "fields", dataType: DataType.OBJECT, value: quickFilter.fields });
122
121
  }
123
122
  variables.filter.push(quickFilterCriteria);
124
123
  }
@@ -128,16 +127,28 @@ export default class DataUnitFetcher {
128
127
  query: this.templateByQuery.get("fetchData"),
129
128
  })
130
129
  .then((resp) => {
131
- const pageResult = resp.data;
132
- const records = [];
133
- pageResult.records.forEach((responseRecord) => {
130
+ const { limit, offset, total, hasMore, records } = resp.data;
131
+ const firstRecord = offset + 1;
132
+ const lastRecord = offset + Math.min(records.length, limit);
133
+ const currentPage = offset / limit;
134
+ const processedRecords = [];
135
+ records.forEach((responseRecord) => {
134
136
  const duRecord = { __record__id__: responseRecord.id };
135
137
  responseRecord.fields.forEach(({ name, value }) => {
136
138
  duRecord[name] = dataUnit.valueFromString(name, value);
137
139
  });
138
- records.push(duRecord);
140
+ processedRecords.push(duRecord);
141
+ });
142
+ resolve({
143
+ paginationInfo: {
144
+ firstRecord,
145
+ lastRecord,
146
+ total,
147
+ currentPage,
148
+ hasMore
149
+ },
150
+ records: processedRecords
139
151
  });
140
- resolve(Object.assign(Object.assign({}, pageResult), { records }));
141
152
  })
142
153
  .catch((error) => {
143
154
  reject(error);
@@ -4,15 +4,16 @@ export default class GridConfigFetcher extends ResourceFetcher {
4
4
  super(...arguments);
5
5
  this.GRID_CONFIG_VERSION = "V3:";
6
6
  }
7
- getConfig(resourceID) {
7
+ getConfig(_gridName, resourceID) {
8
8
  const completePath = `cfg://grid/${this.GRID_CONFIG_VERSION}${resourceID}`;
9
9
  return new Promise((resolve, reject) => {
10
10
  this.loadResource(completePath)
11
11
  .then(loadedResource => {
12
+ let config = undefined;
12
13
  if (loadedResource) {
13
- let config = JSON.parse(loadedResource);
14
- resolve(config);
14
+ config = JSON.parse(loadedResource);
15
15
  }
16
+ resolve(config);
16
17
  }).catch((error) => {
17
18
  reject(error);
18
19
  });