@sankhyalabs/core 1.0.34 → 1.0.37

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/dist/index.d.ts CHANGED
@@ -11,7 +11,6 @@ import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
11
11
  import DataUnit, { SavedRecord, Record, Change, ChangeOperation, DUActionInterceptor } from "./dataunit/DataUnit";
12
12
  import { DataType } from "./dataunit/metadata/DataType";
13
13
  import { UnitMetadata, FieldDescriptor, UserInterface, Sort, Filter } from "./dataunit/metadata/UnitMetadata";
14
- import { HttpFetcher } from "./http/data-fetcher/HttpFetcher";
15
- import { LoadStateManager, LoadStatus } from "./http/data-fetcher/state/LoadStateManager";
16
14
  import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
17
- export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, Record, SavedRecord, DataType, UnitMetadata, FieldDescriptor, UserInterface, HttpFetcher, LoadStateManager, LoadStatus, DataUnitAction, Action, Change, Sort, Filter, ChangeOperation, DUActionInterceptor };
15
+ import ApplicationContext from "./utils/ApplicationContext";
16
+ export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, Record, SavedRecord, DataType, UnitMetadata, FieldDescriptor, UserInterface, DataUnitAction, Action, Change, Sort, Filter, ChangeOperation, DUActionInterceptor, ApplicationContext };
package/dist/index.js CHANGED
@@ -11,9 +11,8 @@ import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
11
11
  import DataUnit, { Change, ChangeOperation } from "./dataunit/DataUnit";
12
12
  import { DataType } from "./dataunit/metadata/DataType";
13
13
  import { UserInterface } from "./dataunit/metadata/UnitMetadata";
14
- import { HttpFetcher } from "./http/data-fetcher/HttpFetcher";
15
- import { LoadStateManager, LoadStatus } from "./http/data-fetcher/state/LoadStateManager";
16
14
  import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
15
+ import ApplicationContext from "./utils/ApplicationContext";
17
16
  /*Classes públicas no pacote*/
18
- export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, DataType, UserInterface, HttpFetcher, LoadStateManager, LoadStatus, DataUnitAction, Action, Change, ChangeOperation };
17
+ export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, DataType, UserInterface, DataUnitAction, Action, Change, ChangeOperation, ApplicationContext };
19
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,QAAQ,EAAE,EAAsB,MAAM,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAiC,aAAa,EAAgB,MAAM,kCAAkC,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAEhF,8BAA8B;AAC9B,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,QAAQ,EAGR,QAAQ,EAGR,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,MAAM,EACN,MAAM,EAGN,eAAe,EAElB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,QAAQ,EAAE,EAAsB,MAAM,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAiC,aAAa,EAAgB,MAAM,kCAAkC,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAE5D,8BAA8B;AAC9B,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,QAAQ,EAGR,QAAQ,EAGR,aAAa,EACb,cAAc,EACd,MAAM,EACN,MAAM,EAGN,eAAe,EAEf,kBAAkB,EACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export default class ApplicationContext {
2
+ static getContextValue(key: string): any;
3
+ static setContextValue(key: string, value: any): any;
4
+ private static getCtx;
5
+ }
@@ -0,0 +1,17 @@
1
+ export default class ApplicationContext {
2
+ static getContextValue(key) {
3
+ return ApplicationContext.getCtx()[key].deref();
4
+ }
5
+ static setContextValue(key, value) {
6
+ ApplicationContext.getCtx()[key] = new WeakRef(value);
7
+ }
8
+ static getCtx() {
9
+ let ctx = window.___snkcore___ctx___;
10
+ if (!ctx) {
11
+ ctx = {};
12
+ window.___snkcore___ctx___ = ctx;
13
+ }
14
+ return ctx;
15
+ }
16
+ }
17
+ //# sourceMappingURL=ApplicationContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationContext.js","sourceRoot":"","sources":["../../src/utils/ApplicationContext.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAE5B,MAAM,CAAC,eAAe,CAAC,GAAW;QACrC,OAAO,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,GAAW,EAAE,KAAU;QACjD,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEO,MAAM,CAAC,MAAM;QACjB,IAAI,GAAG,GAAI,MAAc,CAAC,mBAAmB,CAAC;QAC9C,IAAG,CAAC,GAAG,EAAC;YACJ,GAAG,GAAG,EAAE,CAAC;YACR,MAAc,CAAC,mBAAmB,GAAG,GAAG,CAAC;SAC7C;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sankhyalabs/core",
3
- "version": "1.0.34",
3
+ "version": "1.0.37",
4
4
  "description": "Modulo core JavaScript da Sankhya.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
package/src/index.ts CHANGED
@@ -11,9 +11,8 @@ import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
11
11
  import DataUnit, {SavedRecord, Record, Change, ChangeOperation, DUActionInterceptor} from "./dataunit/DataUnit";
12
12
  import { DataType } from "./dataunit/metadata/DataType";
13
13
  import { UnitMetadata, FieldDescriptor, UserInterface, Sort, Filter } from "./dataunit/metadata/UnitMetadata";
14
- import { HttpFetcher } from "./http/data-fetcher/HttpFetcher";
15
- import { LoadStateManager, LoadStatus } from "./http/data-fetcher/state/LoadStateManager";
16
14
  import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
15
+ import ApplicationContext from "./utils/ApplicationContext";
17
16
 
18
17
  /*Classes públicas no pacote*/
19
18
  export {
@@ -34,14 +33,12 @@ export {
34
33
  UnitMetadata,
35
34
  FieldDescriptor,
36
35
  UserInterface,
37
- HttpFetcher,
38
- LoadStateManager,
39
- LoadStatus,
40
36
  DataUnitAction,
41
37
  Action,
42
38
  Change,
43
39
  Sort,
44
40
  Filter,
45
41
  ChangeOperation,
46
- DUActionInterceptor
42
+ DUActionInterceptor,
43
+ ApplicationContext
47
44
  };
@@ -0,0 +1,19 @@
1
+ export default class ApplicationContext{
2
+
3
+ public static getContextValue(key: string):any{
4
+ return ApplicationContext.getCtx()[key].deref();
5
+ }
6
+
7
+ public static setContextValue(key: string, value: any):any{
8
+ ApplicationContext.getCtx()[key] = new WeakRef(value);
9
+ }
10
+
11
+ private static getCtx():any{
12
+ let ctx = (window as any).___snkcore___ctx___;
13
+ if(!ctx){
14
+ ctx = {};
15
+ (window as any).___snkcore___ctx___ = ctx;
16
+ }
17
+ return ctx;
18
+ }
19
+ }
@@ -1,14 +0,0 @@
1
- export declare class HttpFetcher {
2
- private static instance;
3
- private static loadStateManager;
4
- private static watingRequestsById;
5
- private constructor();
6
- static get(): HttpFetcher;
7
- callGraphQL(req: any): Promise<any>;
8
- private getReqKey;
9
- private static getQueryTemplate;
10
- private static getWatingRequest;
11
- private onApplicationLoaded;
12
- private static fecthGrapql;
13
- private hashCode;
14
- }
@@ -1,164 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { LoadStateManager, LoadType } from "./state/LoadStateManager";
11
- import { batchRequests } from 'graphql-request';
12
- export class HttpFetcher {
13
- constructor() {
14
- HttpFetcher.loadStateManager = LoadStateManager.get(LoadType.APP_LOAD);
15
- HttpFetcher.loadStateManager.onLoaded(this.onApplicationLoaded);
16
- }
17
- static get() {
18
- if (!HttpFetcher.instance) {
19
- HttpFetcher.instance = new HttpFetcher();
20
- }
21
- return HttpFetcher.instance;
22
- }
23
- callGraphQL(req) {
24
- var _a;
25
- return __awaiter(this, void 0, void 0, function* () {
26
- const reqKey = this.getReqKey(req);
27
- req.queryID = reqKey;
28
- req.values.queryID = reqKey;
29
- if (HttpFetcher.loadStateManager.isPreInitialize()) {
30
- if (!HttpFetcher.watingRequestsById.has(reqKey)) {
31
- HttpFetcher.watingRequestsById.set(reqKey, new WaitingRequest(req));
32
- }
33
- return (_a = HttpFetcher.getWatingRequest(reqKey)) === null || _a === void 0 ? void 0 : _a.promise;
34
- }
35
- else {
36
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
37
- let query = HttpFetcher.getQueryTemplate(req);
38
- const res = yield HttpFetcher.fecthGrapql([{ document: query, variables: req.values }]);
39
- if (res.errors.length > 0) {
40
- reject(res);
41
- }
42
- else {
43
- //resolve(res);
44
- //FIXME: Precisamos trabalhar melhor a resposta, quem chamou
45
- //a API não pode ficar responsavel por desempacotar... fiz uma
46
- //gambiarra aqui...
47
- resolve(res.data[0][reqKey]);
48
- }
49
- }));
50
- }
51
- });
52
- }
53
- getReqKey(req) {
54
- return window.btoa(this.hashCode(`${req.query}${JSON.stringify(req.values || "")}`)).replaceAll("=", "");
55
- }
56
- static getQueryTemplate(re) {
57
- return (re.query || "").replaceAll("$queryAlias$", re.queryID);
58
- }
59
- static getWatingRequest(reqID) {
60
- return HttpFetcher.watingRequestsById.get(reqID);
61
- }
62
- onApplicationLoaded() {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- if (HttpFetcher.watingRequestsById.size > 0) {
65
- const requestsBatch = [];
66
- HttpFetcher.watingRequestsById.forEach((waitingReq) => __awaiter(this, void 0, void 0, function* () {
67
- let query = HttpFetcher.getQueryTemplate(waitingReq.request);
68
- requestsBatch.push({ document: query, variables: Object.assign({}, waitingReq.request.values) });
69
- }));
70
- let res = undefined;
71
- let dataResponse = [];
72
- let errorsResponse = [];
73
- res = yield HttpFetcher.fecthGrapql(requestsBatch);
74
- dataResponse = res.data;
75
- errorsResponse = res.errors;
76
- //Reject promises with errors from query
77
- errorsResponse.forEach((errorResponse) => {
78
- Object.entries(errorResponse).forEach(([key, val]) => {
79
- var _a;
80
- (((_a = HttpFetcher.getWatingRequest(val.request.variables[val.index].queryID)) === null || _a === void 0 ? void 0 : _a.reject) || Promise.reject)(val);
81
- });
82
- });
83
- //Resolve promises with data from query
84
- dataResponse.forEach((data) => {
85
- Object.entries(data).forEach(([key, val]) => {
86
- var _a;
87
- (((_a = HttpFetcher.getWatingRequest(key)) === null || _a === void 0 ? void 0 : _a.resolve) || Promise.resolve)(val);
88
- });
89
- });
90
- HttpFetcher.watingRequestsById.clear();
91
- }
92
- });
93
- }
94
- static fecthGrapql(request) {
95
- return __awaiter(this, void 0, void 0, function* () {
96
- let res = undefined;
97
- let dataResponse = [];
98
- let errorsResponse = [];
99
- try {
100
- res = yield batchRequests('http://localhost:8082/', request);
101
- res.forEach((resItem) => {
102
- dataResponse.push(resItem.data);
103
- });
104
- }
105
- catch (err) {
106
- //TODO: Tratar erro quando não existir err.response
107
- res = err.response;
108
- const req = err.request;
109
- Object.entries(res).forEach(([key, val]) => {
110
- if (val.errors) {
111
- errorsResponse.push(val.errors.map((item) => {
112
- item.request = req;
113
- item.index = Number(key);
114
- return item;
115
- }));
116
- }
117
- else if (val.data) {
118
- dataResponse.push(val.data);
119
- }
120
- });
121
- }
122
- return { data: dataResponse, errors: errorsResponse };
123
- });
124
- }
125
- //TODO: Mover este metodo para o @sankhyalabs/core classe string utils.
126
- hashCode(txt) {
127
- var hash = 0, i, chr;
128
- if (txt.length === 0)
129
- return hash.toString();
130
- for (i = 0; i < txt.length; i++) {
131
- chr = txt.charCodeAt(i);
132
- hash = ((hash << 5) - hash) + chr;
133
- hash |= 0; // Convert to 32bit integer
134
- }
135
- return hash.toString();
136
- }
137
- ;
138
- }
139
- HttpFetcher.watingRequestsById = new Map();
140
- class WaitingRequest {
141
- constructor(req) {
142
- this._resolve = () => { };
143
- this._reject = () => { };
144
- this._request = undefined;
145
- this._request = req;
146
- this._promisse = new Promise((resolve, reject) => {
147
- this._resolve = resolve;
148
- this._reject = reject;
149
- });
150
- }
151
- get resolve() {
152
- return this._resolve;
153
- }
154
- get reject() {
155
- return this._reject;
156
- }
157
- get promise() {
158
- return this._promisse;
159
- }
160
- get request() {
161
- return this._request;
162
- }
163
- }
164
- //# sourceMappingURL=HttpFetcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HttpFetcher.js","sourceRoot":"","sources":["../../../src/http/data-fetcher/HttpFetcher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAC;AAEvE,MAAM,OAAO,WAAW;IAKpB;QACI,WAAW,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpE,CAAC;IAEM,MAAM,CAAC,GAAG;QACb,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACvB,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;SAC5C;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEY,WAAW,CAAC,GAAO;;;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YAC1B,IAAG,WAAW,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAC;gBAC9C,IAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAC;oBAC7C,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;iBACrE;gBACD,OAAO,MAAA,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,0CAAE,OAAO,CAAC;aACxD;iBAAI;gBACD,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3C,IAAI,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC9C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAEvF,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;wBACzB,MAAM,CAAC,GAAG,CAAC,CAAC;qBACb;yBAAM;wBACL,eAAe;wBACf,6DAA6D;wBAC7D,8DAA8D;wBAC9D,mBAAmB;wBACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC9B;gBACH,CAAC,CAAA,CAAC,CAAA;aACL;;KACJ;IAEO,SAAS,CAAC,GAAO;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,EAAM;QACpC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,KAAY;QAC1C,OAAO,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAEa,mBAAmB;;YAC/B,IAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAC;gBACzC,MAAM,aAAa,GAA+B,EAAE,CAAC;gBAErD,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAO,UAAyB,EAAE,EAAE;oBACvE,IAAI,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC7D,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,oBAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC;gBACxF,CAAC,CAAA,CAAC,CAAC;gBAEH,IAAI,GAAG,GAAO,SAAS,CAAC;gBACxB,IAAI,YAAY,GAAc,EAAE,CAAC;gBACjC,IAAI,cAAc,GAAc,EAAE,CAAC;gBACnC,GAAG,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAEnD,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;gBACxB,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;gBAE5B,wCAAwC;gBACxC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAiB,EAAE,EAAE;oBAC3C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAY,EAAE,EAAE;;wBAC9D,CAAC,CAAA,MAAA,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,0CAAE,MAAM,KAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1G,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,uCAAuC;gBACvC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAQ,EAAE,EAAE;oBAChC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAY,EAAE,EAAE;;wBACrD,CAAC,CAAA,MAAA,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,0CAAE,OAAO,KAAI,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;oBACvE,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,WAAW,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;aACxC;QACH,CAAC;KAAA;IAEO,MAAM,CAAO,WAAW,CAAC,OAAoC;;YACnE,IAAI,GAAG,GAAO,SAAS,CAAC;YACxB,IAAI,YAAY,GAAc,EAAE,CAAC;YACjC,IAAI,cAAc,GAAc,EAAE,CAAC;YAEnC,IAAG;gBACD,GAAG,GAAG,MAAM,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;gBAC7D,GAAG,CAAC,OAAO,CAAC,CAAC,OAAW,EAAE,EAAE;oBAC1B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;aACJ;YAAA,OAAM,GAAO,EAAC;gBACb,mDAAmD;gBACnD,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;gBACnB,MAAM,GAAG,GAAO,GAAG,CAAC,OAAO,CAAC;gBAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAY,EAAE,EAAE;oBACpD,IAAG,GAAG,CAAC,MAAM,EAAC;wBACZ,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAQ,EAAE,EAAE;4BAC9C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;4BACnB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;4BACzB,OAAO,IAAI,CAAC;wBACd,CAAC,CAAC,CAAC,CAAC;qBACL;yBAAK,IAAG,GAAG,CAAC,IAAI,EAAC;wBAChB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBAC7B;gBACH,CAAC,CAAC,CAAC;aACJ;YACD,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAC,CAAA;QACrD,CAAC;KAAA;IAED,uEAAuE;IAC/D,QAAQ,CAAE,GAAU;QAC1B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;QACrB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,GAAG,GAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;YACnC,IAAI,IAAI,CAAC,CAAC,CAAC,2BAA2B;SACvC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAAA,CAAC;;AA7Ha,8BAAkB,GAAgC,IAAI,GAAG,EAA0B,CAAC;AAgIvG,MAAM,cAAc;IAMlB,YAAY,GAAO;QALX,aAAQ,GAAa,GAAG,EAAE,GAAE,CAAC,CAAC;QAC9B,YAAO,GAAa,GAAG,EAAE,GAAE,CAAC,CAAC;QAE7B,aAAQ,GAAQ,SAAS,CAAC;QAGhC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
@@ -1,23 +0,0 @@
1
- export declare class LoadStateManager {
2
- private static instanceByStatus;
3
- private _state;
4
- private _application;
5
- private static listenersByType;
6
- private constructor();
7
- private onStatusChange;
8
- private addListener;
9
- onPreInitialize(listener: () => void): LoadStateManager;
10
- onLoaded(listener: () => void): LoadStateManager;
11
- getStatus(): LoadStatus;
12
- isPreInitialize(): boolean;
13
- isLoaded(): boolean;
14
- static get(type?: LoadType): LoadStateManager;
15
- }
16
- export declare enum LoadStatus {
17
- DOM_LOADED = "DOM_LOADED",
18
- PRE_INITIALIZE = "PRE_INITIALIZE",
19
- LOADED = "LOADED"
20
- }
21
- export declare enum LoadType {
22
- APP_LOAD = "APP_LOAD"
23
- }
@@ -1,78 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export class LoadStateManager {
11
- constructor(appName = 'ez-application') {
12
- var _a;
13
- this._state = LoadStatus.DOM_LOADED;
14
- this._application = document.querySelector(appName);
15
- if (this._application === null) {
16
- console.warn(`application${appName} not found, then state is loadded`);
17
- this.onStatusChange(LoadStatus.LOADED);
18
- }
19
- else {
20
- (_a = this._application) === null || _a === void 0 ? void 0 : _a.addEventListener('applicationLoaded', () => this.onStatusChange(LoadStatus.LOADED));
21
- this.onStatusChange(LoadStatus.PRE_INITIALIZE);
22
- }
23
- }
24
- onStatusChange(newStatus) {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- this._state = newStatus;
27
- (LoadStateManager.listenersByType.get(newStatus) || []).forEach((listener) => {
28
- listener();
29
- });
30
- });
31
- }
32
- addListener(status, listener) {
33
- var _a;
34
- if (!LoadStateManager.listenersByType.has(status)) {
35
- LoadStateManager.listenersByType.set(status, []);
36
- }
37
- (_a = LoadStateManager.listenersByType.get(status)) === null || _a === void 0 ? void 0 : _a.push(listener);
38
- if (status === this._state) {
39
- listener();
40
- }
41
- }
42
- onPreInitialize(listener) {
43
- this.addListener(LoadStatus.PRE_INITIALIZE, listener);
44
- return this;
45
- }
46
- onLoaded(listener) {
47
- this.addListener(LoadStatus.LOADED, listener);
48
- return this;
49
- }
50
- getStatus() {
51
- return this._state;
52
- }
53
- isPreInitialize() {
54
- return this._state === LoadStatus.PRE_INITIALIZE;
55
- }
56
- isLoaded() {
57
- return this._state === LoadStatus.LOADED;
58
- }
59
- static get(type = LoadType.APP_LOAD) {
60
- if (!LoadStateManager.instanceByStatus.has(type)) {
61
- LoadStateManager.instanceByStatus.set(type, new LoadStateManager());
62
- }
63
- return LoadStateManager.instanceByStatus.get(type) || new LoadStateManager();
64
- }
65
- }
66
- LoadStateManager.instanceByStatus = new Map();
67
- LoadStateManager.listenersByType = new Map();
68
- export var LoadStatus;
69
- (function (LoadStatus) {
70
- LoadStatus["DOM_LOADED"] = "DOM_LOADED";
71
- LoadStatus["PRE_INITIALIZE"] = "PRE_INITIALIZE";
72
- LoadStatus["LOADED"] = "LOADED";
73
- })(LoadStatus || (LoadStatus = {}));
74
- export var LoadType;
75
- (function (LoadType) {
76
- LoadType["APP_LOAD"] = "APP_LOAD";
77
- })(LoadType || (LoadType = {}));
78
- //# sourceMappingURL=LoadStateManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadStateManager.js","sourceRoot":"","sources":["../../../../src/http/data-fetcher/state/LoadStateManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,MAAM,OAAO,gBAAgB;IAMzB,YAAoB,UAAiB,gBAAgB;;QAJ7C,WAAM,GAAc,UAAU,CAAC,UAAU,CAAC;QAK9C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,EAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,mCAAmC,CAAC,CAAC;YACvE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC1C;aAAI;YACD,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,CAAC,mBAAmB,EACrB,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SAClD;IACL,CAAC;IAEa,cAAc,CAAC,SAAoB;;YAC7C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAmB,EAAE,EAAE;gBACpF,QAAQ,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEO,WAAW,CAAC,MAAiB,EAAE,QAAmB;;QACtD,IAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAC;YAC7C,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACpD;QACD,MAAA,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,0CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAG,MAAM,KAAK,IAAI,CAAC,MAAM,EAAC;YACtB,QAAQ,EAAE,CAAC;SACd;IACL,CAAC;IAEM,eAAe,CAAC,QAAmB;QACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,QAAQ,CAAC,QAAmB;QAC/B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,eAAe;QAClB,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,cAAc,CAAC;IACrD,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,OAAgB,QAAQ,CAAC,QAAQ;QAC/C,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9C,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;SACvE;QACD,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,gBAAgB,EAAE,CAAC;IACjF,CAAC;;AA7Dc,iCAAgB,GAAoC,IAAI,GAAG,EAA8B,CAAC;AAG1F,gCAAe,GAAuC,IAAI,GAAG,EAAiC,CAAC;AA6DlH,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,uCAAyB,CAAA;IACzB,+CAAiC,CAAA;IACjC,+BAAiB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAN,IAAY,QAEX;AAFD,WAAY,QAAQ;IAChB,iCAAqB,CAAA;AACzB,CAAC,EAFW,QAAQ,KAAR,QAAQ,QAEnB"}
@@ -1,164 +0,0 @@
1
- import { LoadStateManager, LoadType } from "./state/LoadStateManager";
2
- import { batchRequests, BatchRequestDocument } from 'graphql-request';
3
-
4
- export class HttpFetcher{
5
- private static instance: HttpFetcher;
6
- private static loadStateManager: LoadStateManager;
7
- private static watingRequestsById: Map<string, WaitingRequest >= new Map<string, WaitingRequest>();
8
-
9
- private constructor() {
10
- HttpFetcher.loadStateManager = LoadStateManager.get(LoadType.APP_LOAD);
11
- HttpFetcher.loadStateManager.onLoaded(this.onApplicationLoaded);
12
- }
13
-
14
- public static get(): HttpFetcher {
15
- if (!HttpFetcher.instance) {
16
- HttpFetcher.instance = new HttpFetcher();
17
- }
18
- return HttpFetcher.instance;
19
- }
20
-
21
- public async callGraphQL(req:any):Promise<any>{
22
- const reqKey = this.getReqKey(req);
23
- req.queryID = reqKey;
24
- req.values.queryID = reqKey;
25
- if(HttpFetcher.loadStateManager.isPreInitialize()){
26
- if(!HttpFetcher.watingRequestsById.has(reqKey)){
27
- HttpFetcher.watingRequestsById.set(reqKey, new WaitingRequest(req));
28
- }
29
- return HttpFetcher.getWatingRequest(reqKey)?.promise;
30
- }else{
31
- return new Promise(async (resolve, reject) => {
32
- let query = HttpFetcher.getQueryTemplate(req);
33
- const res = await HttpFetcher.fecthGrapql([{document: query, variables: req.values }]);
34
-
35
- if (res.errors.length > 0) {
36
- reject(res);
37
- } else {
38
- //resolve(res);
39
- //FIXME: Precisamos trabalhar melhor a resposta, quem chamou
40
- //a API não pode ficar responsavel por desempacotar... fiz uma
41
- //gambiarra aqui...
42
- resolve(res.data[0][reqKey]);
43
- }
44
- })
45
- }
46
- }
47
-
48
- private getReqKey(req:any):string{
49
- return window.btoa(this.hashCode(`${req.query}${JSON.stringify(req.values || "")}`)).replaceAll("=", "");
50
- }
51
-
52
- private static getQueryTemplate(re:any):string{
53
- return (re.query || "").replaceAll("$queryAlias$", re.queryID);
54
- }
55
-
56
- private static getWatingRequest(reqID:string):WaitingRequest|undefined{
57
- return HttpFetcher.watingRequestsById.get(reqID);
58
- }
59
-
60
- private async onApplicationLoaded():Promise<any>{
61
- if(HttpFetcher.watingRequestsById.size > 0){
62
- const requestsBatch:Array<BatchRequestDocument> = [];
63
-
64
- HttpFetcher.watingRequestsById.forEach(async (waitingReq:WaitingRequest) => {
65
- let query = HttpFetcher.getQueryTemplate(waitingReq.request);
66
- requestsBatch.push({ document: query, variables: {...waitingReq.request.values } });
67
- });
68
-
69
- let res:any = undefined;
70
- let dataResponse:Array<any> = [];
71
- let errorsResponse:Array<any> = [];
72
- res = await HttpFetcher.fecthGrapql(requestsBatch);
73
-
74
- dataResponse = res.data;
75
- errorsResponse = res.errors;
76
-
77
- //Reject promises with errors from query
78
- errorsResponse.forEach((errorResponse:any) => {
79
- Object.entries(errorResponse).forEach(([key, val]:Array<any>) => {
80
- (HttpFetcher.getWatingRequest(val.request.variables[val.index].queryID)?.reject || Promise.reject)(val);
81
- });
82
- });
83
- //Resolve promises with data from query
84
- dataResponse.forEach((data:any) => {
85
- Object.entries(data).forEach(([key, val]:Array<any>) => {
86
- (HttpFetcher.getWatingRequest(key)?.resolve || Promise.resolve)(val);
87
- });
88
- });
89
- HttpFetcher.watingRequestsById.clear();
90
- }
91
- }
92
-
93
- private static async fecthGrapql(request :Array<BatchRequestDocument>):Promise<any> {
94
- let res:any = undefined;
95
- let dataResponse:Array<any> = [];
96
- let errorsResponse:Array<any> = [];
97
-
98
- try{
99
- res = await batchRequests('http://localhost:8082/', request);
100
- res.forEach((resItem:any) => {
101
- dataResponse.push(resItem.data);
102
- });
103
- }catch(err:any){
104
- //TODO: Tratar erro quando não existir err.response
105
- res = err.response;
106
- const req:any = err.request;
107
- Object.entries(res).forEach(([key, val]:Array<any>) => {
108
- if(val.errors){
109
- errorsResponse.push(val.errors.map((item:any) => {
110
- item.request = req;
111
- item.index = Number(key);
112
- return item;
113
- }));
114
- }else if(val.data){
115
- dataResponse.push(val.data);
116
- }
117
- });
118
- }
119
- return {data: dataResponse, errors: errorsResponse}
120
- }
121
-
122
- //TODO: Mover este metodo para o @sankhyalabs/core classe string utils.
123
- private hashCode (txt:string):string {
124
- var hash = 0, i, chr;
125
- if (txt.length === 0) return hash.toString();
126
- for (i = 0; i < txt.length; i++) {
127
- chr = txt.charCodeAt(i);
128
- hash = ((hash << 5) - hash) + chr;
129
- hash |= 0; // Convert to 32bit integer
130
- }
131
- return hash.toString();
132
- };
133
- }
134
-
135
- class WaitingRequest {
136
- private _resolve: Function = () => {};
137
- private _reject: Function = () => {};
138
- private _promisse: Promise<any>;
139
- private _request: any = undefined;
140
-
141
- constructor(req:any){
142
- this._request = req;
143
- this._promisse = new Promise((resolve, reject) => {
144
- this._resolve = resolve;
145
- this._reject = reject;
146
- });
147
- }
148
-
149
- public get resolve():Function{
150
- return this._resolve;
151
- }
152
-
153
- public get reject():Function{
154
- return this._reject;
155
- }
156
-
157
- public get promise():Promise<any>{
158
- return this._promisse;
159
- }
160
-
161
- public get request():any{
162
- return this._request;
163
- }
164
- }
@@ -1,74 +0,0 @@
1
- export class LoadStateManager {
2
- private static instanceByStatus: Map<LoadType, LoadStateManager> = new Map<LoadType, LoadStateManager>();
3
- private _state:LoadStatus = LoadStatus.DOM_LOADED;
4
- private _application:Element|null;
5
- private static listenersByType: Map<LoadStatus, Array<() => void>> = new Map<LoadStatus, Array<() => void>>();
6
-
7
- private constructor(appName:string = 'ez-application') {
8
- this._application = document.querySelector(appName);
9
- if(this._application === null){
10
- console.warn(`application${appName} not found, then state is loadded`);
11
- this.onStatusChange(LoadStatus.LOADED);
12
- }else{
13
- this._application?.addEventListener('applicationLoaded',
14
- () => this.onStatusChange(LoadStatus.LOADED));
15
- this.onStatusChange(LoadStatus.PRE_INITIALIZE);
16
- }
17
- }
18
-
19
- private async onStatusChange(newStatus:LoadStatus){
20
- this._state = newStatus;
21
- (LoadStateManager.listenersByType.get(newStatus) || []).forEach((listener:() => void) => {
22
- listener();
23
- });
24
- }
25
-
26
- private addListener(status:LoadStatus, listener:() => void){
27
- if(!LoadStateManager.listenersByType.has(status)){
28
- LoadStateManager.listenersByType.set(status, []);
29
- }
30
- LoadStateManager.listenersByType.get(status)?.push(listener);
31
- if(status === this._state){
32
- listener();
33
- }
34
- }
35
-
36
- public onPreInitialize(listener:() => void):LoadStateManager{
37
- this.addListener(LoadStatus.PRE_INITIALIZE, listener);
38
- return this;
39
- }
40
-
41
- public onLoaded(listener:() => void):LoadStateManager{
42
- this.addListener(LoadStatus.LOADED, listener);
43
- return this;
44
- }
45
-
46
- public getStatus():LoadStatus{
47
- return this._state;
48
- }
49
-
50
- public isPreInitialize():boolean{
51
- return this._state === LoadStatus.PRE_INITIALIZE;
52
- }
53
-
54
- public isLoaded():boolean{
55
- return this._state === LoadStatus.LOADED;
56
- }
57
-
58
- public static get(type:LoadType = LoadType.APP_LOAD): LoadStateManager{
59
- if (!LoadStateManager.instanceByStatus.has(type)) {
60
- LoadStateManager.instanceByStatus.set(type, new LoadStateManager());
61
- }
62
- return LoadStateManager.instanceByStatus.get(type) || new LoadStateManager();
63
- }
64
- }
65
-
66
- export enum LoadStatus{
67
- DOM_LOADED = "DOM_LOADED",
68
- PRE_INITIALIZE = "PRE_INITIALIZE",
69
- LOADED = "LOADED"
70
- }
71
-
72
- export enum LoadType{
73
- APP_LOAD = "APP_LOAD",
74
- }