@j2inn/resolvable-ui-elements 0.0.1-alpha.11

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 (134) hide show
  1. package/README.md +22 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +32 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/resolvableElements/Resolver.d.ts +18 -0
  6. package/dist/resolvableElements/Resolver.js +29 -0
  7. package/dist/resolvableElements/Resolver.js.map +1 -0
  8. package/dist/resolvableElements/elements/ResolvableElement.d.ts +14 -0
  9. package/dist/resolvableElements/elements/ResolvableElement.js +30 -0
  10. package/dist/resolvableElements/elements/ResolvableElement.js.map +1 -0
  11. package/dist/resolvableElements/elements/ResolvableValueElement.d.ts +16 -0
  12. package/dist/resolvableElements/elements/ResolvableValueElement.js +39 -0
  13. package/dist/resolvableElements/elements/ResolvableValueElement.js.map +1 -0
  14. package/dist/resolvableElements/elements/UiElement.d.ts +40 -0
  15. package/dist/resolvableElements/elements/UiElement.js +54 -0
  16. package/dist/resolvableElements/elements/UiElement.js.map +1 -0
  17. package/dist/resolvableElements/elements/expr/ResolvableExprElement.d.ts +14 -0
  18. package/dist/resolvableElements/elements/expr/ResolvableExprElement.js +63 -0
  19. package/dist/resolvableElements/elements/expr/ResolvableExprElement.js.map +1 -0
  20. package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +9 -0
  21. package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.js +15 -0
  22. package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.js.map +1 -0
  23. package/dist/resolvableElements/elements/function/FunctionElement.d.ts +12 -0
  24. package/dist/resolvableElements/elements/function/FunctionElement.js +37 -0
  25. package/dist/resolvableElements/elements/function/FunctionElement.js.map +1 -0
  26. package/dist/resolvableElements/elements/function/FunctionElementMeta.d.ts +8 -0
  27. package/dist/resolvableElements/elements/function/FunctionElementMeta.js +15 -0
  28. package/dist/resolvableElements/elements/function/FunctionElementMeta.js.map +1 -0
  29. package/dist/resolvableElements/elements/list/ListElementMeta.d.ts +12 -0
  30. package/dist/resolvableElements/elements/list/ListElementMeta.js +15 -0
  31. package/dist/resolvableElements/elements/list/ListElementMeta.js.map +1 -0
  32. package/dist/resolvableElements/elements/list/ResolvableListElement.d.ts +16 -0
  33. package/dist/resolvableElements/elements/list/ResolvableListElement.js +103 -0
  34. package/dist/resolvableElements/elements/list/ResolvableListElement.js.map +1 -0
  35. package/dist/resolvableElements/elements/makeElement.d.ts +7 -0
  36. package/dist/resolvableElements/elements/makeElement.js +41 -0
  37. package/dist/resolvableElements/elements/makeElement.js.map +1 -0
  38. package/dist/resolvableElements/elements/section/ResolvableSectionElement.d.ts +21 -0
  39. package/dist/resolvableElements/elements/section/ResolvableSectionElement.js +113 -0
  40. package/dist/resolvableElements/elements/section/ResolvableSectionElement.js.map +1 -0
  41. package/dist/resolvableElements/elements/section/SectionElementMeta.d.ts +9 -0
  42. package/dist/resolvableElements/elements/section/SectionElementMeta.js +12 -0
  43. package/dist/resolvableElements/elements/section/SectionElementMeta.js.map +1 -0
  44. package/dist/resolvableElements/elements/tag/ResolvableTagElement.d.ts +16 -0
  45. package/dist/resolvableElements/elements/tag/ResolvableTagElement.js +106 -0
  46. package/dist/resolvableElements/elements/tag/ResolvableTagElement.js.map +1 -0
  47. package/dist/resolvableElements/elements/tag/TagElementMeta.d.ts +12 -0
  48. package/dist/resolvableElements/elements/tag/TagElementMeta.js +15 -0
  49. package/dist/resolvableElements/elements/tag/TagElementMeta.js.map +1 -0
  50. package/dist/resolvableElements/interfacesGeneration/generateInterfaces.d.ts +3 -0
  51. package/dist/resolvableElements/interfacesGeneration/generateInterfaces.js +136 -0
  52. package/dist/resolvableElements/interfacesGeneration/generateInterfaces.js.map +1 -0
  53. package/dist/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.d.ts +4 -0
  54. package/dist/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js +42 -0
  55. package/dist/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js.map +1 -0
  56. package/dist/resolvableElements/react/useResolveSection.d.ts +21 -0
  57. package/dist/resolvableElements/react/useResolveSection.js +71 -0
  58. package/dist/resolvableElements/react/useResolveSection.js.map +1 -0
  59. package/dist/resolvableElements/react/useResolverContext.d.ts +4 -0
  60. package/dist/resolvableElements/react/useResolverContext.jsx +57 -0
  61. package/dist/resolvableElements/react/useResolverContext.jsx.map +1 -0
  62. package/dist/resolvableElements/resolveTemplatedExpression.d.ts +19 -0
  63. package/dist/resolvableElements/resolveTemplatedExpression.js +36 -0
  64. package/dist/resolvableElements/resolveTemplatedExpression.js.map +1 -0
  65. package/dist/useCurrentUser.d.ts +10 -0
  66. package/dist/useCurrentUser.jsx +51 -0
  67. package/dist/useCurrentUser.jsx.map +1 -0
  68. package/dist_es/index.d.ts +6 -0
  69. package/dist_es/index.js +14 -0
  70. package/dist_es/index.js.map +1 -0
  71. package/dist_es/resolvableElements/Resolver.d.ts +18 -0
  72. package/dist_es/resolvableElements/Resolver.js +25 -0
  73. package/dist_es/resolvableElements/Resolver.js.map +1 -0
  74. package/dist_es/resolvableElements/elements/ResolvableElement.d.ts +14 -0
  75. package/dist_es/resolvableElements/elements/ResolvableElement.js +26 -0
  76. package/dist_es/resolvableElements/elements/ResolvableElement.js.map +1 -0
  77. package/dist_es/resolvableElements/elements/ResolvableValueElement.d.ts +16 -0
  78. package/dist_es/resolvableElements/elements/ResolvableValueElement.js +33 -0
  79. package/dist_es/resolvableElements/elements/ResolvableValueElement.js.map +1 -0
  80. package/dist_es/resolvableElements/elements/UiElement.d.ts +40 -0
  81. package/dist_es/resolvableElements/elements/UiElement.js +49 -0
  82. package/dist_es/resolvableElements/elements/UiElement.js.map +1 -0
  83. package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.d.ts +14 -0
  84. package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.js +59 -0
  85. package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.js.map +1 -0
  86. package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +9 -0
  87. package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.js +10 -0
  88. package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.js.map +1 -0
  89. package/dist_es/resolvableElements/elements/function/FunctionElement.d.ts +12 -0
  90. package/dist_es/resolvableElements/elements/function/FunctionElement.js +32 -0
  91. package/dist_es/resolvableElements/elements/function/FunctionElement.js.map +1 -0
  92. package/dist_es/resolvableElements/elements/function/FunctionElementMeta.d.ts +8 -0
  93. package/dist_es/resolvableElements/elements/function/FunctionElementMeta.js +10 -0
  94. package/dist_es/resolvableElements/elements/function/FunctionElementMeta.js.map +1 -0
  95. package/dist_es/resolvableElements/elements/list/ListElementMeta.d.ts +12 -0
  96. package/dist_es/resolvableElements/elements/list/ListElementMeta.js +10 -0
  97. package/dist_es/resolvableElements/elements/list/ListElementMeta.js.map +1 -0
  98. package/dist_es/resolvableElements/elements/list/ResolvableListElement.d.ts +16 -0
  99. package/dist_es/resolvableElements/elements/list/ResolvableListElement.js +99 -0
  100. package/dist_es/resolvableElements/elements/list/ResolvableListElement.js.map +1 -0
  101. package/dist_es/resolvableElements/elements/makeElement.d.ts +7 -0
  102. package/dist_es/resolvableElements/elements/makeElement.js +37 -0
  103. package/dist_es/resolvableElements/elements/makeElement.js.map +1 -0
  104. package/dist_es/resolvableElements/elements/section/ResolvableSectionElement.d.ts +21 -0
  105. package/dist_es/resolvableElements/elements/section/ResolvableSectionElement.js +108 -0
  106. package/dist_es/resolvableElements/elements/section/ResolvableSectionElement.js.map +1 -0
  107. package/dist_es/resolvableElements/elements/section/SectionElementMeta.d.ts +9 -0
  108. package/dist_es/resolvableElements/elements/section/SectionElementMeta.js +7 -0
  109. package/dist_es/resolvableElements/elements/section/SectionElementMeta.js.map +1 -0
  110. package/dist_es/resolvableElements/elements/tag/ResolvableTagElement.d.ts +16 -0
  111. package/dist_es/resolvableElements/elements/tag/ResolvableTagElement.js +102 -0
  112. package/dist_es/resolvableElements/elements/tag/ResolvableTagElement.js.map +1 -0
  113. package/dist_es/resolvableElements/elements/tag/TagElementMeta.d.ts +12 -0
  114. package/dist_es/resolvableElements/elements/tag/TagElementMeta.js +10 -0
  115. package/dist_es/resolvableElements/elements/tag/TagElementMeta.js.map +1 -0
  116. package/dist_es/resolvableElements/interfacesGeneration/generateInterfaces.d.ts +3 -0
  117. package/dist_es/resolvableElements/interfacesGeneration/generateInterfaces.js +132 -0
  118. package/dist_es/resolvableElements/interfacesGeneration/generateInterfaces.js.map +1 -0
  119. package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.d.ts +4 -0
  120. package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js +16 -0
  121. package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js.map +1 -0
  122. package/dist_es/resolvableElements/react/useResolveSection.d.ts +21 -0
  123. package/dist_es/resolvableElements/react/useResolveSection.js +67 -0
  124. package/dist_es/resolvableElements/react/useResolveSection.js.map +1 -0
  125. package/dist_es/resolvableElements/react/useResolverContext.d.ts +4 -0
  126. package/dist_es/resolvableElements/react/useResolverContext.jsx +29 -0
  127. package/dist_es/resolvableElements/react/useResolverContext.jsx.map +1 -0
  128. package/dist_es/resolvableElements/resolveTemplatedExpression.d.ts +19 -0
  129. package/dist_es/resolvableElements/resolveTemplatedExpression.js +31 -0
  130. package/dist_es/resolvableElements/resolveTemplatedExpression.js.map +1 -0
  131. package/dist_es/useCurrentUser.d.ts +10 -0
  132. package/dist_es/useCurrentUser.jsx +23 -0
  133. package/dist_es/useCurrentUser.jsx.map +1 -0
  134. package/package.json +51 -0
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ResolvableListElement = void 0;
7
+ const haystack_core_1 = require("haystack-core");
8
+ const haystack_nclient_1 = require("haystack-nclient");
9
+ const resolveTemplatedExpression_1 = require("../../resolveTemplatedExpression");
10
+ const ResolvableValueElement_1 = require("../ResolvableValueElement");
11
+ const UiElement_1 = require("../UiElement");
12
+ /**
13
+ * Resolves to a list of records and keeps them updated using a watch.
14
+ */
15
+ class ResolvableListElement extends ResolvableValueElement_1.ResolvableValueElement {
16
+ constructor(data) {
17
+ super(data);
18
+ }
19
+ filter;
20
+ watch;
21
+ doInitialize = async (parameters) => {
22
+ const { subscribe, entityBinding, parentBinding } = this
23
+ ._meta;
24
+ this.filter = (0, resolveTemplatedExpression_1.resolveTemplateExpression)((0, UiElement_1.joinFilters)(entityBinding, parentBinding), parameters);
25
+ if (!this.#isValidFilter(this.filter)) {
26
+ throw Error('Invalid filter');
27
+ }
28
+ const grid = await this.resolver.read(this.filter);
29
+ if (!this.#isValidReadGrid(grid)) {
30
+ return;
31
+ }
32
+ this.#updateValue(grid);
33
+ if (subscribe) {
34
+ await this.#setupWatch(grid);
35
+ }
36
+ };
37
+ doClose = async () => {
38
+ return this.watch?.close();
39
+ };
40
+ getParameterList = () => {
41
+ const { entityBinding, parentBinding } = this
42
+ ._meta;
43
+ const parameters = [];
44
+ if (entityBinding) {
45
+ (0, resolveTemplatedExpression_1.replaceTemplateVariables)(entityBinding, (_, match) => {
46
+ parameters.push(match);
47
+ return '';
48
+ });
49
+ }
50
+ if (parentBinding) {
51
+ (0, resolveTemplatedExpression_1.replaceTemplateVariables)(parentBinding, (_, match) => {
52
+ parameters.push(match);
53
+ return '';
54
+ });
55
+ }
56
+ return parameters;
57
+ };
58
+ #isValidFilter = (filter) => {
59
+ try {
60
+ haystack_core_1.HFilter.parse(filter);
61
+ }
62
+ catch (e) {
63
+ console.error('Invalid filter: \n', this.filter, e);
64
+ return false;
65
+ }
66
+ return true;
67
+ };
68
+ #isValidReadGrid = (grid) => {
69
+ if (grid.isError()) {
70
+ console.error('Error grid result for query: \n', this.filter, grid.getError());
71
+ }
72
+ return true;
73
+ };
74
+ #setupWatch = async (grid) => {
75
+ const { subscribePollRate, subscribe } = this
76
+ ._meta;
77
+ if (subscribe) {
78
+ this.watch = await this.resolver.makeWatch(this.#getWatchDisplayName(), grid);
79
+ const updateValue = () => this.#updateValue(this.watch?.grid);
80
+ // Update with the value received when opening the watch
81
+ updateValue();
82
+ // Configure polling options
83
+ this.watch.pollRate = subscribePollRate ?? haystack_nclient_1.DEFAULT_POLL_RATE_SECS;
84
+ this.watch.changed({
85
+ callback: updateValue,
86
+ });
87
+ }
88
+ };
89
+ #updateValue = (grid) => {
90
+ const { orderBy } = this._meta;
91
+ if (grid) {
92
+ if (orderBy) {
93
+ grid.sortBy(orderBy);
94
+ }
95
+ this.value = grid;
96
+ }
97
+ };
98
+ #getWatchDisplayName = () => {
99
+ return `ResolvableElement Watch for ${this.name ?? this.filter}`;
100
+ };
101
+ }
102
+ exports.ResolvableListElement = ResolvableListElement;
103
+ //# sourceMappingURL=ResolvableListElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvableListElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/list/ResolvableListElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { UiElement, UiElementConstructorData, UiElementData } from './UiElement';
2
+ /**
3
+ * Factory function used to build an element.
4
+ * @param data
5
+ * @returns
6
+ */
7
+ export declare const makeElement: <T extends UiElementData<import("./UiElement").UiElementMeta>>(data: UiElementConstructorData<T>) => UiElement<T>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.makeElement = void 0;
7
+ const ResolvableExprElement_1 = require("./expr/ResolvableExprElement");
8
+ const ResolvableExprElementMeta_1 = require("./expr/ResolvableExprElementMeta");
9
+ const FunctionElement_1 = require("./function/FunctionElement");
10
+ const FunctionElementMeta_1 = require("./function/FunctionElementMeta");
11
+ const ListElementMeta_1 = require("./list/ListElementMeta");
12
+ const ResolvableListElement_1 = require("./list/ResolvableListElement");
13
+ const ResolvableSectionElement_1 = require("./section/ResolvableSectionElement");
14
+ const SectionElementMeta_1 = require("./section/SectionElementMeta");
15
+ const ResolvableTagElement_1 = require("./tag/ResolvableTagElement");
16
+ const TagElementMeta_1 = require("./tag/TagElementMeta");
17
+ /**
18
+ * Factory function used to build an element.
19
+ * @param data
20
+ * @returns
21
+ */
22
+ const makeElement = (data) => {
23
+ if ((0, SectionElementMeta_1.isSectionData)(data.element)) {
24
+ return new ResolvableSectionElement_1.ResolvableSectionElement(data);
25
+ }
26
+ if ((0, TagElementMeta_1.isResolvableTagElementData)(data.element)) {
27
+ return new ResolvableTagElement_1.ResolvableTagElement(data);
28
+ }
29
+ if ((0, ListElementMeta_1.isResolvableListElementData)(data.element)) {
30
+ return new ResolvableListElement_1.ResolvableListElement(data);
31
+ }
32
+ if ((0, ResolvableExprElementMeta_1.isResolvableExprElementData)(data.element)) {
33
+ return new ResolvableExprElement_1.ResolvableExprElement(data);
34
+ }
35
+ if ((0, FunctionElementMeta_1.isFunctionElementData)(data.element)) {
36
+ return new FunctionElement_1.FunctionElement(data);
37
+ }
38
+ throw new Error(`Element cannot be deserialized: \n${JSON.stringify(data.element)}`);
39
+ };
40
+ exports.makeElement = makeElement;
41
+ //# sourceMappingURL=makeElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeElement.js","sourceRoot":"","sources":["../../../src/resolvableElements/elements/makeElement.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,wEAAoE;AACpE,gFAA8E;AAC9E,gEAA4D;AAC5D,wEAAsE;AACtE,4DAAoE;AACpE,wEAAoE;AACpE,iFAA6E;AAC7E,qEAA4D;AAC5D,qEAAiE;AACjE,yDAAiE;AAGjE;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAC1B,IAAiC,EAClB,EAAE;IACjB,IAAI,IAAA,kCAAa,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,IAAI,mDAAwB,CAAC,IAAI,CAAC,CAAA;KACzC;IACD,IAAI,IAAA,2CAA0B,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7C,OAAO,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAA;KACrC;IACD,IAAI,IAAA,6CAA2B,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC9C,OAAO,IAAI,6CAAqB,CAAC,IAAI,CAAC,CAAA;KACtC;IACD,IAAI,IAAA,uDAA2B,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC9C,OAAO,IAAI,6CAAqB,CAAC,IAAI,CAAC,CAAA;KACtC;IACD,IAAI,IAAA,2CAAqB,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACxC,OAAO,IAAI,iCAAe,CAAC,IAAI,CAAC,CAAA;KAChC;IAED,MAAM,IAAI,KAAK,CACd,qCAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACnE,CAAA;AACF,CAAC,CAAA;AAtBY,QAAA,WAAW,eAsBvB"}
@@ -0,0 +1,21 @@
1
+ import { HDict } from 'haystack-core';
2
+ import { ResolvableElement } from '../ResolvableElement';
3
+ import { UiElement, UiElementConstructorData, UiElementData } from '../UiElement';
4
+ import { UiElementSectionMeta } from './SectionElementMeta';
5
+ /**
6
+ * A container of elements that can be resolve them by propagation of the lifecycle functions.
7
+ */
8
+ export declare class ResolvableSectionElement<T extends UiElementData> extends ResolvableElement<T> {
9
+ #private;
10
+ constructor(data: UiElementConstructorData<T>);
11
+ children: (UiElement<UiElementData> | ChildUnresolvedSection)[];
12
+ toJSON(): Record<string, unknown>;
13
+ protected doInitialize: (parameters: HDict) => Promise<void>;
14
+ protected doClose: () => Promise<void>;
15
+ getParameterList: () => string[];
16
+ }
17
+ export declare const isChildUnresolvedSection: (value: unknown) => value is ChildUnresolvedSection;
18
+ export declare type ChildUnresolvedSection = [
19
+ string | undefined,
20
+ UiElementData<UiElementSectionMeta>
21
+ ];
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isChildUnresolvedSection = exports.ResolvableSectionElement = void 0;
7
+ const makeElement_1 = require("../makeElement");
8
+ const ResolvableElement_1 = require("../ResolvableElement");
9
+ const ResolvableValueElement_1 = require("../ResolvableValueElement");
10
+ const SectionElementMeta_1 = require("./SectionElementMeta");
11
+ /**
12
+ * A container of elements that can be resolve them by propagation of the lifecycle functions.
13
+ */
14
+ class ResolvableSectionElement extends ResolvableElement_1.ResolvableElement {
15
+ constructor(data) {
16
+ super(data);
17
+ this.value = this.#getInitialValue(data);
18
+ this.children = this.#deserializeChildren(data);
19
+ }
20
+ #getInitialValue = (data) => {
21
+ if (!this.isAccessAllowed()) {
22
+ return {};
23
+ }
24
+ const result = {};
25
+ for (const [name, child] of Object.entries(data.element)) {
26
+ if (!name.startsWith('_') && (0, SectionElementMeta_1.isSectionData)(child)) {
27
+ result[name] = child;
28
+ }
29
+ }
30
+ return result;
31
+ };
32
+ #deserializeChildren = (data) => {
33
+ return Object.entries(data.element)
34
+ .filter(([name]) => !name.startsWith('_'))
35
+ .map(([name, element]) => {
36
+ return this.#deserializeChild({
37
+ ...data,
38
+ element,
39
+ name,
40
+ onUpdate: (childVal) => {
41
+ ;
42
+ this.value[name] = childVal;
43
+ this.onUpdate(this.value);
44
+ },
45
+ });
46
+ })
47
+ .filter((element) => !!element);
48
+ };
49
+ #deserializeChild = (data, deepDeserialize = false) => {
50
+ if (!deepDeserialize && (0, SectionElementMeta_1.isSectionData)(data.element)) {
51
+ return [data.name, data.element];
52
+ }
53
+ else {
54
+ try {
55
+ return (0, makeElement_1.makeElement)(data);
56
+ }
57
+ catch (e) {
58
+ return [data.name, data.element];
59
+ }
60
+ }
61
+ };
62
+ children = [];
63
+ toJSON() {
64
+ const props = { _meta: this._meta };
65
+ this.children?.forEach((child) => {
66
+ let name, val;
67
+ if ((0, exports.isChildUnresolvedSection)(child)) {
68
+ name = child[0];
69
+ val = child[1];
70
+ }
71
+ else {
72
+ name = child.name;
73
+ val = child.toJSON();
74
+ }
75
+ if (name) {
76
+ props[name] = val;
77
+ }
78
+ });
79
+ return props;
80
+ }
81
+ doInitialize = async (parameters) => {
82
+ const promises = [];
83
+ for (const child of this.children) {
84
+ if (child instanceof ResolvableElement_1.ResolvableElement) {
85
+ promises.push(child.initialize(parameters));
86
+ }
87
+ }
88
+ await Promise.all(promises);
89
+ };
90
+ doClose = async () => {
91
+ const promises = [];
92
+ for (const child of this.children) {
93
+ if (child instanceof ResolvableElement_1.ResolvableElement) {
94
+ promises.push(child.close());
95
+ }
96
+ }
97
+ await Promise.all(promises);
98
+ };
99
+ getParameterList = () => {
100
+ const parameters = [];
101
+ this.children.forEach((element) => {
102
+ if (!(0, exports.isChildUnresolvedSection)(element) &&
103
+ element instanceof ResolvableValueElement_1.ResolvableValueElement) {
104
+ parameters.push(...element.getParameterList());
105
+ }
106
+ });
107
+ return [...new Set(parameters)]; // Retrieve unique values
108
+ };
109
+ }
110
+ exports.ResolvableSectionElement = ResolvableSectionElement;
111
+ const isChildUnresolvedSection = (value) => value instanceof Array && value.length === 2 && (0, SectionElementMeta_1.isSectionData)(value[1]);
112
+ exports.isChildUnresolvedSection = isChildUnresolvedSection;
113
+ //# sourceMappingURL=ResolvableSectionElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvableSectionElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/section/ResolvableSectionElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { UiElementData, UiElementMeta } from '../UiElement';
2
+ export interface UiElementSectionMeta extends UiElementMeta {
3
+ resolutionType?: never;
4
+ }
5
+ export declare type ResolvedSectionResult<T extends UiElementData<UiElementSectionMeta>> = T extends {
6
+ _resolved?: Record<string, unknown>;
7
+ } ? Required<T>['_resolved'] : Record<string, unknown>;
8
+ export declare const isSectionData: (element: UiElementData) => element is UiElementData<UiElementSectionMeta>;
9
+ export declare const isSectionMeta: (meta: UiElementMeta | undefined) => meta is UiElementSectionMeta;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isSectionMeta = exports.isSectionData = void 0;
7
+ const ResolvableValueElement_1 = require("../ResolvableValueElement");
8
+ const isSectionData = (element) => (0, exports.isSectionMeta)(element._meta);
9
+ exports.isSectionData = isSectionData;
10
+ const isSectionMeta = (meta) => meta == null || !(0, ResolvableValueElement_1.isResolvableValueElementMeta)(meta);
11
+ exports.isSectionMeta = isSectionMeta;
12
+ //# sourceMappingURL=SectionElementMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/section/SectionElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sEAAwE;AAejE,MAAM,aAAa,GAAG,CAC5B,OAAsB,EAC2B,EAAE,CACnD,IAAA,qBAAa,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAHhB,QAAA,aAAa,iBAGG;AAEtB,MAAM,aAAa,GAAG,CAC5B,IAA+B,EACA,EAAE,CACjC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAA,qDAA4B,EAAC,IAAI,CAAC,CAAA;AAHvC,QAAA,aAAa,iBAG0B"}
@@ -0,0 +1,16 @@
1
+ import { HDict } from 'haystack-core';
2
+ import { Watch } from 'haystack-nclient';
3
+ import { ResolvableValueElement } from '../ResolvableValueElement';
4
+ import { UiElementConstructorData, UiElementData } from '../UiElement';
5
+ /**
6
+ * Resolves to the value of a tag on a record and keeps it updated using a watch.
7
+ */
8
+ export declare class ResolvableTagElement<T extends UiElementData> extends ResolvableValueElement<T> {
9
+ #private;
10
+ constructor(data: UiElementConstructorData<T>);
11
+ filter?: string;
12
+ watch?: Watch;
13
+ protected doInitialize: (parameters: HDict) => Promise<void>;
14
+ protected doClose: () => Promise<void>;
15
+ getParameterList: () => string[];
16
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ResolvableTagElement = void 0;
7
+ const haystack_core_1 = require("haystack-core");
8
+ const haystack_nclient_1 = require("haystack-nclient");
9
+ const resolveTemplatedExpression_1 = require("../../resolveTemplatedExpression");
10
+ const ResolvableValueElement_1 = require("../ResolvableValueElement");
11
+ const UiElement_1 = require("../UiElement");
12
+ /**
13
+ * Resolves to the value of a tag on a record and keeps it updated using a watch.
14
+ */
15
+ class ResolvableTagElement extends ResolvableValueElement_1.ResolvableValueElement {
16
+ constructor(data) {
17
+ super(data);
18
+ }
19
+ filter;
20
+ watch;
21
+ doInitialize = async (parameters) => {
22
+ const { subscribe, entityBinding, parentBinding } = this
23
+ ._meta;
24
+ const filter = (0, resolveTemplatedExpression_1.resolveTemplateExpression)((0, UiElement_1.joinFilters)(entityBinding, parentBinding), parameters);
25
+ if (!this.#isValidFilter(filter)) {
26
+ throw Error('Invalid filter');
27
+ }
28
+ this.filter = filter;
29
+ const grid = await this.resolver.read(this.filter);
30
+ if (!this.#isValidReadGrid(grid)) {
31
+ return;
32
+ }
33
+ this.#updateValue(grid);
34
+ if (subscribe) {
35
+ await this.#setupWatch(grid);
36
+ }
37
+ };
38
+ doClose = async () => {
39
+ return this.watch?.close();
40
+ };
41
+ getParameterList = () => {
42
+ const { entityBinding, parentBinding } = this
43
+ ._meta;
44
+ const parameters = [];
45
+ if (entityBinding) {
46
+ (0, resolveTemplatedExpression_1.replaceTemplateVariables)(entityBinding, (_, match) => {
47
+ parameters.push(match);
48
+ return '';
49
+ });
50
+ }
51
+ if (parentBinding) {
52
+ (0, resolveTemplatedExpression_1.replaceTemplateVariables)(parentBinding, (_, match) => {
53
+ parameters.push(match);
54
+ return '';
55
+ });
56
+ }
57
+ return parameters;
58
+ };
59
+ #isValidFilter = (filter) => {
60
+ try {
61
+ haystack_core_1.HFilter.parse(filter);
62
+ }
63
+ catch (e) {
64
+ console.error('Invalid filter: \n', this.filter, e);
65
+ return false;
66
+ }
67
+ return true;
68
+ };
69
+ #isValidReadGrid = (grid) => {
70
+ if (grid.isEmpty()) {
71
+ console.error('Empty grid result for query: \n', this.filter);
72
+ return false;
73
+ }
74
+ if (grid.length > 1) {
75
+ console.warn('More than 1 result for query: \n', this.filter);
76
+ }
77
+ return true;
78
+ };
79
+ #setupWatch = async (grid) => {
80
+ const { readTag, subscribePollRate, subscribe } = this
81
+ ._meta;
82
+ if (subscribe) {
83
+ this.watch = await this.resolver.makeWatch(this.#getWatchDisplayName(), grid);
84
+ const updateValue = () => this.#updateValue(this.watch?.grid);
85
+ // Update with the value received when opening the watch
86
+ updateValue();
87
+ // Configure polling options
88
+ this.watch.pollRate = subscribePollRate ?? haystack_nclient_1.DEFAULT_POLL_RATE_SECS;
89
+ this.watch.changed({
90
+ interests: [readTag],
91
+ callback: updateValue,
92
+ });
93
+ }
94
+ };
95
+ #updateValue = (grid) => {
96
+ const { readTag } = this._meta;
97
+ if (grid) {
98
+ this.value = grid[0]?.get(readTag);
99
+ }
100
+ };
101
+ #getWatchDisplayName = () => {
102
+ return `ResolvableElement Watch for ${this.name ?? this.filter}`;
103
+ };
104
+ }
105
+ exports.ResolvableTagElement = ResolvableTagElement;
106
+ //# sourceMappingURL=ResolvableTagElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvableTagElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/tag/ResolvableTagElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ResolvableValueElementMeta } from '../ResolvableValueElement';
2
+ import { UiElementData, UiElementMeta } from '../UiElement';
3
+ export interface UiElementTagMetaBase extends ResolvableValueElementMeta {
4
+ resolutionType: 'tag';
5
+ readTag: string;
6
+ parentBinding?: string;
7
+ entityBinding?: string;
8
+ subscribe?: boolean;
9
+ subscribePollRate?: number;
10
+ }
11
+ export declare const isResolvableTagElementData: (element: UiElementData) => element is UiElementData<UiElementTagMetaBase>;
12
+ export declare const isResolvableTagMeta: (meta: UiElementMeta) => meta is UiElementTagMetaBase;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isResolvableTagMeta = exports.isResolvableTagElementData = void 0;
7
+ const isResolvableTagElementData = (element) => {
8
+ return !!element?._meta && (0, exports.isResolvableTagMeta)(element._meta);
9
+ };
10
+ exports.isResolvableTagElementData = isResolvableTagElementData;
11
+ const isResolvableTagMeta = (meta) => {
12
+ return meta.resolutionType === 'tag';
13
+ };
14
+ exports.isResolvableTagMeta = isResolvableTagMeta;
15
+ //# sourceMappingURL=TagElementMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagElementMeta.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/tag/TagElementMeta.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAcI,MAAM,0BAA0B,GAAG,CACzC,OAAsB,EAC2B,EAAE;IACnD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAA,2BAAmB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC9D,CAAC,CAAA;AAJY,QAAA,0BAA0B,8BAItC;AAEM,MAAM,mBAAmB,GAAG,CAClC,IAAmB,EACY,EAAE;IACjC,OAAQ,IAA6B,CAAC,cAAc,KAAK,KAAK,CAAA;AAC/D,CAAC,CAAA;AAJY,QAAA,mBAAmB,uBAI/B"}
@@ -0,0 +1,3 @@
1
+ import { UiElementSectionMeta } from '../elements/section/SectionElementMeta';
2
+ import { UiElementData } from '../elements/UiElement';
3
+ export declare const generateInterfaces: (section: UiElementData<UiElementSectionMeta>) => string;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateInterfaces = void 0;
7
+ const haystack_nclient_1 = require("haystack-nclient");
8
+ const ResolvableValueElement_1 = require("../elements/ResolvableValueElement");
9
+ const ResolvableSectionElement_1 = require("../elements/section/ResolvableSectionElement");
10
+ const Resolver_1 = require("../Resolver");
11
+ const ROOT_NAME = 'UiElementRoot';
12
+ const ELEMENT_INTERFACE_NAME = 'UiElementData';
13
+ const generateInterfaces = (section) => {
14
+ return new SectionInterfacesGenerator(section).generate();
15
+ };
16
+ exports.generateInterfaces = generateInterfaces;
17
+ /**
18
+ * Class for generating typescript interfaces from a section data.
19
+ */
20
+ class SectionInterfacesGenerator {
21
+ constructor(section) {
22
+ this.section = section;
23
+ }
24
+ section;
25
+ #output = '';
26
+ #out = (str, indentation = 0) => {
27
+ this.#output += this.#indent(indentation) + str + '\n';
28
+ };
29
+ #indent(indentation = 0) {
30
+ return '\t'.repeat(indentation);
31
+ }
32
+ generate = () => {
33
+ this.#generateImports();
34
+ this.#generateSectionDefinition(this.section);
35
+ return this.#output;
36
+ };
37
+ #generateImports() {
38
+ this.#out(`/* eslint-disable @typescript-eslint/no-namespace */
39
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
40
+
41
+ //////////////////////////////////////////////////////////////////////////
42
+ // Generated File
43
+ //////////////////////////////////////////////////////////////////////////
44
+
45
+ import json from './elements.json'
46
+ import { FunctionResult, UiElementData } from '@j2inn/resolvable-ui-elements'
47
+ import HCore from 'haystack-core'
48
+
49
+ export const UI_ELEMENTS = json as UiElementRoot
50
+
51
+ //////////////////////////////////////////////////////////////////////////
52
+ // Interfaces
53
+ //////////////////////////////////////////////////////////////////////////
54
+ `);
55
+ }
56
+ #generateSectionDefinition(sectionData, name, indentation = 0) {
57
+ const section = new ResolvableSectionElement_1.ResolvableSectionElement({
58
+ name,
59
+ element: sectionData,
60
+ onUpdate: () => {
61
+ return;
62
+ },
63
+ resolver: new Resolver_1.Resolver({ client: makeMockedClient() }),
64
+ });
65
+ this.#generateInterface(section, indentation);
66
+ if (countSectionChildrenSections(section) > 0) {
67
+ this.#generateNamespace(section, indentation);
68
+ }
69
+ }
70
+ #generateInterface(section, indentation) {
71
+ const name = section.name ?? ROOT_NAME;
72
+ this.#out(`export interface ${capitalize(name)} extends UiElementData {`, indentation);
73
+ const parameters = section.getParameterList();
74
+ if (parameters.length > 0) {
75
+ this.#generateParametersProperty(parameters, indentation + 1);
76
+ }
77
+ this.#generateResolvedProperty(section, indentation + 1);
78
+ section.children.forEach((child) => this.#out((0, ResolvableSectionElement_1.isChildUnresolvedSection)(child)
79
+ ? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
80
+ : `${child.name}: ${ELEMENT_INTERFACE_NAME}`, indentation + 1));
81
+ this.#out(`}`, indentation);
82
+ }
83
+ #generateParametersProperty(parameters, indentation) {
84
+ this.#out(`_parameters?: {`, indentation);
85
+ parameters.forEach((param) => this.#out(`${param}: HCore.HVal`, indentation + 1));
86
+ this.#out(`}`, indentation);
87
+ }
88
+ #generateResolvedProperty(section, indentation) {
89
+ const name = section.name ?? ROOT_NAME;
90
+ if (section.children.length > 0) {
91
+ this.#out('_resolved?: {', indentation);
92
+ section.children.forEach((child) => this.#out((0, ResolvableSectionElement_1.isChildUnresolvedSection)(child)
93
+ ? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
94
+ : `${child.name}?: ${getResolvedType(child)}`, indentation + 1));
95
+ this.#out('}', indentation);
96
+ }
97
+ else {
98
+ this.#out(`_resolved?: Record<string, unknown>`, indentation);
99
+ }
100
+ }
101
+ #generateNamespace(section, indentation) {
102
+ const name = section.name ?? ROOT_NAME;
103
+ this.#out(`export namespace ${capitalize(name)} {`, indentation);
104
+ section.children
105
+ .filter((child) => (0, ResolvableSectionElement_1.isChildUnresolvedSection)(child))
106
+ .forEach((child) => {
107
+ if ((0, ResolvableSectionElement_1.isChildUnresolvedSection)(child)) {
108
+ this.#generateSectionDefinition(child[1], child[0], indentation + 1);
109
+ }
110
+ });
111
+ this.#out(`}`, indentation);
112
+ }
113
+ }
114
+ const makeMockedClient = () => {
115
+ return new haystack_nclient_1.Client({
116
+ base: new URL('http://localhost:8080'),
117
+ fetch: () => new Promise(() => {
118
+ return new Response();
119
+ }),
120
+ });
121
+ };
122
+ function capitalize(str) {
123
+ return str.charAt(0)?.toUpperCase() + str.substring(1);
124
+ }
125
+ function getResolvedType(child) {
126
+ if (child._meta && (0, ResolvableValueElement_1.isResolvableValueElementMeta)(child._meta)) {
127
+ return child._meta.resolvedType.startsWith('H')
128
+ ? 'HCore.' + child._meta.resolvedType
129
+ : child._meta.resolvedType;
130
+ }
131
+ else {
132
+ return 'unknown';
133
+ }
134
+ }
135
+ const countSectionChildrenSections = (section) => section.children.filter((child) => (0, ResolvableSectionElement_1.isChildUnresolvedSection)(child)).length;
136
+ //# sourceMappingURL=generateInterfaces.js.map