@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,102 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { HFilter } from 'haystack-core';
5
+ import { DEFAULT_POLL_RATE_SECS } from 'haystack-nclient';
6
+ import { replaceTemplateVariables, resolveTemplateExpression, } from '../../resolveTemplatedExpression';
7
+ import { ResolvableValueElement } from '../ResolvableValueElement';
8
+ import { joinFilters, } from '../UiElement';
9
+ /**
10
+ * Resolves to the value of a tag on a record and keeps it updated using a watch.
11
+ */
12
+ export class ResolvableTagElement extends ResolvableValueElement {
13
+ constructor(data) {
14
+ super(data);
15
+ }
16
+ filter;
17
+ watch;
18
+ doInitialize = async (parameters) => {
19
+ const { subscribe, entityBinding, parentBinding } = this
20
+ ._meta;
21
+ const filter = resolveTemplateExpression(joinFilters(entityBinding, parentBinding), parameters);
22
+ if (!this.#isValidFilter(filter)) {
23
+ throw Error('Invalid filter');
24
+ }
25
+ this.filter = filter;
26
+ const grid = await this.resolver.read(this.filter);
27
+ if (!this.#isValidReadGrid(grid)) {
28
+ return;
29
+ }
30
+ this.#updateValue(grid);
31
+ if (subscribe) {
32
+ await this.#setupWatch(grid);
33
+ }
34
+ };
35
+ doClose = async () => {
36
+ return this.watch?.close();
37
+ };
38
+ getParameterList = () => {
39
+ const { entityBinding, parentBinding } = this
40
+ ._meta;
41
+ const parameters = [];
42
+ if (entityBinding) {
43
+ replaceTemplateVariables(entityBinding, (_, match) => {
44
+ parameters.push(match);
45
+ return '';
46
+ });
47
+ }
48
+ if (parentBinding) {
49
+ replaceTemplateVariables(parentBinding, (_, match) => {
50
+ parameters.push(match);
51
+ return '';
52
+ });
53
+ }
54
+ return parameters;
55
+ };
56
+ #isValidFilter = (filter) => {
57
+ try {
58
+ HFilter.parse(filter);
59
+ }
60
+ catch (e) {
61
+ console.error('Invalid filter: \n', this.filter, e);
62
+ return false;
63
+ }
64
+ return true;
65
+ };
66
+ #isValidReadGrid = (grid) => {
67
+ if (grid.isEmpty()) {
68
+ console.error('Empty grid result for query: \n', this.filter);
69
+ return false;
70
+ }
71
+ if (grid.length > 1) {
72
+ console.warn('More than 1 result for query: \n', this.filter);
73
+ }
74
+ return true;
75
+ };
76
+ #setupWatch = async (grid) => {
77
+ const { readTag, subscribePollRate, subscribe } = this
78
+ ._meta;
79
+ if (subscribe) {
80
+ this.watch = await this.resolver.makeWatch(this.#getWatchDisplayName(), grid);
81
+ const updateValue = () => this.#updateValue(this.watch?.grid);
82
+ // Update with the value received when opening the watch
83
+ updateValue();
84
+ // Configure polling options
85
+ this.watch.pollRate = subscribePollRate ?? DEFAULT_POLL_RATE_SECS;
86
+ this.watch.changed({
87
+ interests: [readTag],
88
+ callback: updateValue,
89
+ });
90
+ }
91
+ };
92
+ #updateValue = (grid) => {
93
+ const { readTag } = this._meta;
94
+ if (grid) {
95
+ this.value = grid[0]?.get(readTag);
96
+ }
97
+ };
98
+ #getWatchDisplayName = () => {
99
+ return `ResolvableElement Watch for ${this.name ?? this.filter}`;
100
+ };
101
+ }
102
+ //# sourceMappingURL=ResolvableTagElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvableTagElement.js","sourceRoot":"","sources":["../../../../src/resolvableElements/elements/tag/ResolvableTagElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAS,OAAO,EAAS,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAS,MAAM,kBAAkB,CAAA;AAChE,OAAO,EACN,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EACN,WAAW,GAIX,MAAM,cAAc,CAAA;AAIrB;;GAEG;AACH,MAAM,OAAO,oBAEX,SAAQ,sBAAyB;IAClC,YAAY,IAAiC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,MAAM,CAAS;IACf,KAAK,CAAQ;IAEH,YAAY,GAAG,KAAK,EAAE,UAAiB,EAAiB,EAAE;QACnE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI;aACtD,KAA6B,CAAA;QAE/B,MAAM,MAAM,GAAG,yBAAyB,CACvC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,EACzC,UAAU,CACV,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;SAC7B;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAElD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACjC,OAAM;SACN;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAEvB,IAAI,SAAS,EAAE;YACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;SAC5B;IACF,CAAC,CAAA;IAES,OAAO,GAAwB,KAAK,IAAI,EAAE;QACnD,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,gBAAgB,GAAmB,GAAG,EAAE;QACvC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI;aAC3C,KAA6B,CAAA;QAE/B,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,IAAI,aAAa,EAAE;YAClB,wBAAwB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACpD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,IAAI,aAAa,EAAE;YAClB,wBAAwB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACpD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;SACF;QAED,OAAO,UAAU,CAAA;IAClB,CAAC,CAAA;IAED,cAAc,GAAG,CAAC,MAAc,EAAW,EAAE;QAC5C,IAAI;YACH,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;SACrB;QAAC,OAAO,CAAC,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnD,OAAO,KAAK,CAAA;SACZ;QACD,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IAED,gBAAgB,GAAG,CAAC,IAAW,EAAW,EAAE;QAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7D,OAAO,KAAK,CAAA;SACZ;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;SAC7D;QAED,OAAO,IAAI,CAAA;IACZ,CAAC,CAAA;IAED,WAAW,GAAG,KAAK,EAAE,IAAW,EAAiB,EAAE;QAClD,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,IAAI;aACpD,KAA6B,CAAA;QAE/B,IAAI,SAAS,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CACzC,IAAI,CAAC,oBAAoB,EAAE,EAC3B,IAAI,CACJ,CAAA;YACD,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAE7D,wDAAwD;YACxD,WAAW,EAAE,CAAA;YAEb,4BAA4B;YAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,IAAI,sBAAsB,CAAA;YACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAClB,SAAS,EAAE,CAAC,OAAO,CAAC;gBACpB,QAAQ,EAAE,WAAW;aACrB,CAAC,CAAA;SACF;IACF,CAAC,CAAA;IAED,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAA6B,CAAA;QAEtD,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAA4B,CAAA;SAC7D;IACF,CAAC,CAAA;IAED,oBAAoB,GAAG,GAAW,EAAE;QACnC,OAAO,+BAA+B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;IACjE,CAAC,CAAA;CACD"}
@@ -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,10 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ export const isResolvableTagElementData = (element) => {
5
+ return !!element?._meta && isResolvableTagMeta(element._meta);
6
+ };
7
+ export const isResolvableTagMeta = (meta) => {
8
+ return meta.resolutionType === 'tag';
9
+ };
10
+ //# 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;AAcH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACzC,OAAsB,EAC2B,EAAE;IACnD,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,IAAmB,EACY,EAAE;IACjC,OAAQ,IAA6B,CAAC,cAAc,KAAK,KAAK,CAAA;AAC/D,CAAC,CAAA"}
@@ -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,132 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { Client } from 'haystack-nclient';
5
+ import { isResolvableValueElementMeta } from '../elements/ResolvableValueElement';
6
+ import { isChildUnresolvedSection, ResolvableSectionElement, } from '../elements/section/ResolvableSectionElement';
7
+ import { Resolver } from '../Resolver';
8
+ const ROOT_NAME = 'UiElementRoot';
9
+ const ELEMENT_INTERFACE_NAME = 'UiElementData';
10
+ export const generateInterfaces = (section) => {
11
+ return new SectionInterfacesGenerator(section).generate();
12
+ };
13
+ /**
14
+ * Class for generating typescript interfaces from a section data.
15
+ */
16
+ class SectionInterfacesGenerator {
17
+ constructor(section) {
18
+ this.section = section;
19
+ }
20
+ section;
21
+ #output = '';
22
+ #out = (str, indentation = 0) => {
23
+ this.#output += this.#indent(indentation) + str + '\n';
24
+ };
25
+ #indent(indentation = 0) {
26
+ return '\t'.repeat(indentation);
27
+ }
28
+ generate = () => {
29
+ this.#generateImports();
30
+ this.#generateSectionDefinition(this.section);
31
+ return this.#output;
32
+ };
33
+ #generateImports() {
34
+ this.#out(`/* eslint-disable @typescript-eslint/no-namespace */
35
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
36
+
37
+ //////////////////////////////////////////////////////////////////////////
38
+ // Generated File
39
+ //////////////////////////////////////////////////////////////////////////
40
+
41
+ import json from './elements.json'
42
+ import { FunctionResult, UiElementData } from '@j2inn/resolvable-ui-elements'
43
+ import HCore from 'haystack-core'
44
+
45
+ export const UI_ELEMENTS = json as UiElementRoot
46
+
47
+ //////////////////////////////////////////////////////////////////////////
48
+ // Interfaces
49
+ //////////////////////////////////////////////////////////////////////////
50
+ `);
51
+ }
52
+ #generateSectionDefinition(sectionData, name, indentation = 0) {
53
+ const section = new ResolvableSectionElement({
54
+ name,
55
+ element: sectionData,
56
+ onUpdate: () => {
57
+ return;
58
+ },
59
+ resolver: new Resolver({ client: makeMockedClient() }),
60
+ });
61
+ this.#generateInterface(section, indentation);
62
+ if (countSectionChildrenSections(section) > 0) {
63
+ this.#generateNamespace(section, indentation);
64
+ }
65
+ }
66
+ #generateInterface(section, indentation) {
67
+ const name = section.name ?? ROOT_NAME;
68
+ this.#out(`export interface ${capitalize(name)} extends UiElementData {`, indentation);
69
+ const parameters = section.getParameterList();
70
+ if (parameters.length > 0) {
71
+ this.#generateParametersProperty(parameters, indentation + 1);
72
+ }
73
+ this.#generateResolvedProperty(section, indentation + 1);
74
+ section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
75
+ ? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
76
+ : `${child.name}: ${ELEMENT_INTERFACE_NAME}`, indentation + 1));
77
+ this.#out(`}`, indentation);
78
+ }
79
+ #generateParametersProperty(parameters, indentation) {
80
+ this.#out(`_parameters?: {`, indentation);
81
+ parameters.forEach((param) => this.#out(`${param}: HCore.HVal`, indentation + 1));
82
+ this.#out(`}`, indentation);
83
+ }
84
+ #generateResolvedProperty(section, indentation) {
85
+ const name = section.name ?? ROOT_NAME;
86
+ if (section.children.length > 0) {
87
+ this.#out('_resolved?: {', indentation);
88
+ section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
89
+ ? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
90
+ : `${child.name}?: ${getResolvedType(child)}`, indentation + 1));
91
+ this.#out('}', indentation);
92
+ }
93
+ else {
94
+ this.#out(`_resolved?: Record<string, unknown>`, indentation);
95
+ }
96
+ }
97
+ #generateNamespace(section, indentation) {
98
+ const name = section.name ?? ROOT_NAME;
99
+ this.#out(`export namespace ${capitalize(name)} {`, indentation);
100
+ section.children
101
+ .filter((child) => isChildUnresolvedSection(child))
102
+ .forEach((child) => {
103
+ if (isChildUnresolvedSection(child)) {
104
+ this.#generateSectionDefinition(child[1], child[0], indentation + 1);
105
+ }
106
+ });
107
+ this.#out(`}`, indentation);
108
+ }
109
+ }
110
+ const makeMockedClient = () => {
111
+ return new Client({
112
+ base: new URL('http://localhost:8080'),
113
+ fetch: () => new Promise(() => {
114
+ return new Response();
115
+ }),
116
+ });
117
+ };
118
+ function capitalize(str) {
119
+ return str.charAt(0)?.toUpperCase() + str.substring(1);
120
+ }
121
+ function getResolvedType(child) {
122
+ if (child._meta && isResolvableValueElementMeta(child._meta)) {
123
+ return child._meta.resolvedType.startsWith('H')
124
+ ? 'HCore.' + child._meta.resolvedType
125
+ : child._meta.resolvedType;
126
+ }
127
+ else {
128
+ return 'unknown';
129
+ }
130
+ }
131
+ const countSectionChildrenSections = (section) => section.children.filter((child) => isChildUnresolvedSection(child)).length;
132
+ //# sourceMappingURL=generateInterfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateInterfaces.js","sourceRoot":"","sources":["../../../src/resolvableElements/interfacesGeneration/generateInterfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generate typescript interfaces file from json ui-elements data
3
+ */
4
+ export default function generateTypescriptInterfacesFile(inputPath?: string, outputPath?: string): Promise<void>;
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import * as fs from 'fs';
5
+ import { generateInterfaces } from './generateInterfaces';
6
+ /**
7
+ * Generate typescript interfaces file from json ui-elements data
8
+ */
9
+ export default async function generateTypescriptInterfacesFile(inputPath = '../elements.json', outputPath = '../elements.ts') {
10
+ console.log(`Generating interfaces from ${inputPath} \n...`);
11
+ const json = fs.readFileSync(inputPath, { encoding: 'utf-8' });
12
+ const result = generateInterfaces(JSON.parse(json));
13
+ fs.writeFileSync(outputPath, result);
14
+ console.log(`File successfully generated at: ${outputPath}`);
15
+ }
16
+ //# sourceMappingURL=generateTypescriptInterfacesFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateTypescriptInterfacesFile.js","sourceRoot":"","sources":["../../../src/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,gCAAgC,CAC7D,SAAS,GAAG,kBAAkB,EAC9B,UAAU,GAAG,gBAAgB;IAE7B,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,QAAQ,CAAC,CAAA;IAE5D,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAE9D,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAEnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEpC,OAAO,CAAC,GAAG,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAA;AAC7D,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
2
+ import { ResolvedSectionResult } from '../elements/section/SectionElementMeta';
3
+ import { ParametersOfSection, UiElementData } from '../elements/UiElement';
4
+ /**
5
+ * Resolves a section UI element.
6
+ * IMPORTANT: This hook requires a resolver react context defined. @See `ResolverProvider`.
7
+ * @param sectionData section data object
8
+ * @param parameters parameters for the resolution
9
+ * @returns the resolved result of the section that will be updated and force rendering when a subvalue changes.
10
+ */
11
+ export declare function useResolveSection<T extends UiElementData>(sectionData: T, parameters?: ParametersOfSection<T>): UseResolveSectionResult<T>;
12
+ export declare type UseResolveSectionResult<T extends UiElementData> = [
13
+ ResolvedSectionResult<T>,
14
+ UseResolveSectionExtra<T>
15
+ ];
16
+ export interface UseResolveSectionExtra<T extends UiElementData> {
17
+ refresh: () => void;
18
+ element?: ResolvableSectionElement<T>;
19
+ loads: number;
20
+ isLoading: boolean;
21
+ }
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { useEffect, useReducer, useRef, useState } from 'react';
5
+ import { makeParametersDict } from '../elements/function/FunctionElement';
6
+ import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
7
+ import { useResolverContext } from './useResolverContext';
8
+ /**
9
+ * Resolves a section UI element.
10
+ * IMPORTANT: This hook requires a resolver react context defined. @See `ResolverProvider`.
11
+ * @param sectionData section data object
12
+ * @param parameters parameters for the resolution
13
+ * @returns the resolved result of the section that will be updated and force rendering when a subvalue changes.
14
+ */
15
+ export function useResolveSection(sectionData, parameters) {
16
+ const [, update] = useReducer((count) => count + 1, 0);
17
+ const resolver = useResolverContext();
18
+ const [refreshes, refresh] = useReducer((count) => count + 1, 0);
19
+ const [loads, setLoads] = useState(0);
20
+ const [isLoading, setLoading] = useState(false);
21
+ const ref = useRef();
22
+ if (!ref.current) {
23
+ ref.current = new ResolvableSectionElement({
24
+ element: sectionData,
25
+ resolver,
26
+ onUpdate: update,
27
+ });
28
+ }
29
+ const parametersDict = makeParametersDict(parameters);
30
+ useEffect(() => {
31
+ if (areParametersValid(parameters)) {
32
+ ref.current = new ResolvableSectionElement({
33
+ element: sectionData,
34
+ resolver,
35
+ onUpdate: update,
36
+ });
37
+ setLoading(true);
38
+ const promise = ref.current
39
+ .initialize(parametersDict)
40
+ .then(() => setLoads(loads + 1))
41
+ .finally(() => setLoading(false));
42
+ return () => {
43
+ promise.finally(() => {
44
+ ref.current?.close();
45
+ });
46
+ };
47
+ }
48
+ return;
49
+ }, [sectionData, resolver, refreshes, parametersDict.toAxon()]);
50
+ return [
51
+ (ref.current.value ?? {}),
52
+ {
53
+ refresh: refresh,
54
+ element: ref.current,
55
+ loads,
56
+ isLoading,
57
+ },
58
+ ];
59
+ }
60
+ const areParametersValid = (parameters) => {
61
+ if (parameters &&
62
+ Object.entries(parameters).some(([, value]) => value == null)) {
63
+ return false;
64
+ }
65
+ return true;
66
+ };
67
+ //# sourceMappingURL=useResolveSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResolveSection.js","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolveSection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAA;AAGvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAChC,WAAc,EACd,UAAmC;IAEnC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;IACrC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACrC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,MAAM,EAA+B,CAAA;IAEjD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,wBAAwB,CAAC;YAC1C,OAAO,EAAE,WAAW;YACpB,QAAQ;YACR,QAAQ,EAAE,MAAM;SAChB,CAAC,CAAA;KACF;IAED,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IAErD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE;YACnC,GAAG,CAAC,OAAO,GAAG,IAAI,wBAAwB,CAAC;gBAC1C,OAAO,EAAE,WAAW;gBACpB,QAAQ;gBACR,QAAQ,EAAE,MAAM;aAChB,CAAC,CAAA;YAEF,UAAU,CAAC,IAAI,CAAC,CAAA;YAChB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;iBACzB,UAAU,CAAC,cAAc,CAAC;iBAC1B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;iBAC/B,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;YAElC,OAAO,GAAG,EAAE;gBACX,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;oBACpB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;YACH,CAAC,CAAA;SACD;QACD,OAAM;IACP,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAE/D,OAAO;QACN,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAA6B;QACrD;YACC,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK;YACL,SAAS;SACT;KACD,CAAA;AACF,CAAC;AAED,MAAM,kBAAkB,GAAG,CAC1B,UAAkC,EACjC,EAAE;IACH,IACC,UAAU;QACV,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAC5D;QACD,OAAO,KAAK,CAAA;KACZ;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { Resolver } from '../Resolver';
3
+ export declare function useResolverContext(): Resolver;
4
+ export declare const ResolverProvider: React.FC;
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { Client } from 'haystack-nclient';
5
+ import { useClient } from 'haystack-react';
6
+ import React, { useContext, useEffect, useState } from 'react';
7
+ import { useCurrentUser } from '../../useCurrentUser';
8
+ import { Resolver } from '../Resolver';
9
+ const ResolverContext = React.createContext(new Resolver({
10
+ client: new Client({
11
+ base: new URL(window.location.href),
12
+ }),
13
+ }));
14
+ ResolverContext.displayName = 'ResolverContext';
15
+ export function useResolverContext() {
16
+ return useContext(ResolverContext);
17
+ }
18
+ export const ResolverProvider = ({ children }) => {
19
+ const client = useClient();
20
+ const user = useCurrentUser();
21
+ const [resolver, setResolver] = useState(() => new Resolver({ client, user }));
22
+ useEffect(() => {
23
+ setResolver(new Resolver({ client, user }));
24
+ }, [client, user]);
25
+ return (<ResolverContext.Provider value={resolver}>
26
+ {children}
27
+ </ResolverContext.Provider>);
28
+ };
29
+ //# sourceMappingURL=useResolverContext.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResolverContext.jsx","sourceRoot":"","sources":["../../../src/resolvableElements/react/useResolverContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAC1C,IAAI,QAAQ,CAAC;IACZ,MAAM,EAAE,IAAI,MAAM,CAAC;QAClB,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnC,CAAC;CACF,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA;AAE/C,MAAM,UAAU,kBAAkB;IACjC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;IAE7B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACvC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CACpC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAElB,OAAO,CACN,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CACzC;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC3B,CAAA;AACF,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { HDict } from 'haystack-core';
2
+ export declare const REG_EXPR_MATCHING_TEMPLATE: RegExp;
3
+ /**
4
+ * Replaces variables (defined as <$parameterName>) in an expression with the values given in the parameters dict.
5
+ * The HVal.toAxon function is used for conversion to a string.
6
+ * @example
7
+ * resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make("22")})) => "func(22)"
8
+ * @param expr the axon expression
9
+ * @param params the parameters expressed as dict
10
+ * @returns the axon expression resolved with the specified params
11
+ */
12
+ export declare const resolveTemplateExpression: (expr: string, parameters?: HDict) => string;
13
+ /**
14
+ * Replaces template variable found in the given string using a given replacer function
15
+ * @param templateString
16
+ * @param replacer
17
+ * @returns a new string containing the compiled template string
18
+ */
19
+ export declare const replaceTemplateVariables: (templateString: string, replacer: (substring: string, match: string) => string) => string;
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ export const REG_EXPR_MATCHING_TEMPLATE = new RegExp('{{([^{}]*)}}', 'g');
5
+ /**
6
+ * Replaces variables (defined as <$parameterName>) in an expression with the values given in the parameters dict.
7
+ * The HVal.toAxon function is used for conversion to a string.
8
+ * @example
9
+ * resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make("22")})) => "func(22)"
10
+ * @param expr the axon expression
11
+ * @param params the parameters expressed as dict
12
+ * @returns the axon expression resolved with the specified params
13
+ */
14
+ export const resolveTemplateExpression = (expr, parameters) => {
15
+ const paramDict = parameters;
16
+ return replaceTemplateVariables(expr, (_substring, match) => {
17
+ const parameter = paramDict?.get(match)?.toAxon();
18
+ if (parameter != null) {
19
+ return parameter;
20
+ }
21
+ throw new Error(`ERROR: Missing parameter: ${match} in ${paramDict?.toAxon()}`);
22
+ });
23
+ };
24
+ /**
25
+ * Replaces template variable found in the given string using a given replacer function
26
+ * @param templateString
27
+ * @param replacer
28
+ * @returns a new string containing the compiled template string
29
+ */
30
+ export const replaceTemplateVariables = (templateString, replacer) => templateString.replace(REG_EXPR_MATCHING_TEMPLATE, replacer);
31
+ //# sourceMappingURL=resolveTemplatedExpression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTemplatedExpression.js","sourceRoot":"","sources":["../../src/resolvableElements/resolveTemplatedExpression.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,IAAY,EACZ,UAAkB,EACT,EAAE;IACX,MAAM,SAAS,GAAG,UAAU,CAAA;IAE5B,OAAO,wBAAwB,CAC9B,IAAI,EACJ,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QACjD,IAAI,SAAS,IAAI,IAAI,EAAE;YACtB,OAAO,SAAS,CAAA;SAChB;QACD,MAAM,IAAI,KAAK,CACd,6BAA6B,KAAK,OAAO,SAAS,EAAE,MAAM,EAAE,EAAE,CAC9D,CAAA;IACF,CAAC,CACD,CAAA;AACF,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,cAAsB,EACtB,QAAsD,EAC7C,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { HDict } from 'haystack-core';
2
+ import React from 'react';
3
+ /**
4
+ * User context retrieval hook.
5
+ */
6
+ export declare function useCurrentUser(): HDict | undefined;
7
+ /**
8
+ * User context provider for FIN 5.
9
+ */
10
+ export declare const UserContextProvider: React.FC;
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import { useEval } from 'haystack-react';
5
+ import React, { useContext } from 'react';
6
+ const UserContext = React.createContext(undefined);
7
+ UserContext.displayName = 'CurrentUser';
8
+ /**
9
+ * User context retrieval hook.
10
+ */
11
+ export function useCurrentUser() {
12
+ return useContext(UserContext);
13
+ }
14
+ /**
15
+ * User context provider for FIN 5.
16
+ */
17
+ export const UserContextProvider = ({ children }) => {
18
+ const { grid, isLoading } = useEval('finGetCurrentUser()');
19
+ return (<UserContext.Provider value={isLoading ? undefined : grid[0]}>
20
+ {children}
21
+ </UserContext.Provider>);
22
+ };
23
+ //# sourceMappingURL=useCurrentUser.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCurrentUser.jsx","sourceRoot":"","sources":["../src/useCurrentUser.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAoB,SAAS,CAAC,CAAA;AAErE,WAAW,CAAC,WAAW,GAAG,aAAa,CAAA;AAEvC;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAE1D,OAAO,CACN,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5D;GAAA,CAAC,QAAQ,CACV;EAAA,EAAE,WAAW,CAAC,QAAQ,CAAC,CACvB,CAAA;AACF,CAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@j2inn/resolvable-ui-elements",
3
+ "version": "0.0.1-alpha.11",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "module": "dist_es/index.js",
8
+ "scripts": {
9
+ "clean": "rimraf ./dist && rimraf ./dist_es",
10
+ "prebuild": "npm run clean && npm run lint && npm run test",
11
+ "build": "tsc && npm run-script build:es",
12
+ "build:es": "tsc --module ESNext --outDir dist_es",
13
+ "checktypes": "tsc --noEmit",
14
+ "format": "prettier-eslint --list-different --write \"$(pwd)/src/**/*.{ts,tsx,js,jsx}\"",
15
+ "lint": "eslint --fix --ext ts,tsx,js,jsx src/",
16
+ "test": "jest --passWithNoTests",
17
+ "prepack": "npm run lint && npm run test && npm run build"
18
+ },
19
+ "author": "",
20
+ "license": "ISC",
21
+ "files": [
22
+ "dist/**/*",
23
+ "dist_es/**/*"
24
+ ],
25
+ "peerDependencies": {
26
+ "haystack-core": "^2.0.38",
27
+ "haystack-nclient": "^3.0.28",
28
+ "haystack-react": "^3.0.9",
29
+ "haystack-units": "^1.0.19",
30
+ "react": "^17.0.2",
31
+ "react-dom": "^17.0.2"
32
+ },
33
+ "devDependencies": {
34
+ "@types/jest": "^27.4.0",
35
+ "@types/node": "^15.0.2",
36
+ "@types/react": "^17.0.8",
37
+ "@typescript-eslint/eslint-plugin": "^5.28.0",
38
+ "@typescript-eslint/parser": "^5.28.0",
39
+ "eslint": "^7.32.0",
40
+ "eslint-config-prettier": "^8.3.0",
41
+ "eslint-plugin-jest": "^26.1.3",
42
+ "eslint-plugin-prettier": "^4.0.0",
43
+ "eslint-plugin-react": "^7.29.4",
44
+ "prettier": "^2.6.1",
45
+ "prettier-eslint": "^13.0.0",
46
+ "prettier-eslint-cli": "^5.0.1",
47
+ "rimraf": "^3.0.2",
48
+ "ts-jest": "^28.0.8",
49
+ "typescript": "^4.8.2"
50
+ }
51
+ }