@j2inn/resolvable-ui-elements 1.1.3 → 2.0.0
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 +12 -12
- package/dist/index.js +39 -39
- package/dist/resolvableElements/Resolver.d.ts +47 -47
- package/dist/resolvableElements/Resolver.js +57 -57
- package/dist/resolvableElements/elements/ResolvableElement.d.ts +14 -14
- package/dist/resolvableElements/elements/ResolvableElement.js +29 -29
- package/dist/resolvableElements/elements/ResolvableValueElement.d.ts +16 -16
- package/dist/resolvableElements/elements/ResolvableValueElement.js +38 -38
- package/dist/resolvableElements/elements/UiElement.d.ts +31 -31
- package/dist/resolvableElements/elements/UiElement.js +56 -56
- package/dist/resolvableElements/elements/expr/ResolvableExprElement.d.ts +26 -26
- package/dist/resolvableElements/elements/expr/ResolvableExprElement.js +105 -105
- package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +10 -10
- package/dist/resolvableElements/elements/expr/ResolvableExprElementMeta.js +14 -14
- package/dist/resolvableElements/elements/function/FunctionElement.d.ts +12 -12
- package/dist/resolvableElements/elements/function/FunctionElement.js +41 -41
- package/dist/resolvableElements/elements/function/FunctionElementMeta.d.ts +9 -9
- package/dist/resolvableElements/elements/function/FunctionElementMeta.js +14 -14
- package/dist/resolvableElements/elements/list/ListElementMeta.d.ts +12 -12
- package/dist/resolvableElements/elements/list/ListElementMeta.js +14 -14
- package/dist/resolvableElements/elements/list/ResolvableListElement.d.ts +16 -16
- package/dist/resolvableElements/elements/list/ResolvableListElement.js +102 -102
- package/dist/resolvableElements/elements/makeElement.d.ts +7 -7
- package/dist/resolvableElements/elements/makeElement.js +40 -40
- package/dist/resolvableElements/elements/section/ResolvableSectionElement.d.ts +24 -24
- package/dist/resolvableElements/elements/section/ResolvableSectionElement.js +122 -122
- package/dist/resolvableElements/elements/section/SectionElementMeta.d.ts +16 -16
- package/dist/resolvableElements/elements/section/SectionElementMeta.js +11 -11
- package/dist/resolvableElements/elements/section/resolveSection.d.ts +12 -12
- package/dist/resolvableElements/elements/section/resolveSection.js +41 -41
- package/dist/resolvableElements/elements/tag/ResolvableTagElement.d.ts +16 -16
- package/dist/resolvableElements/elements/tag/ResolvableTagElement.js +105 -105
- package/dist/resolvableElements/elements/tag/TagElementMeta.d.ts +12 -12
- package/dist/resolvableElements/elements/tag/TagElementMeta.js +14 -14
- package/dist/resolvableElements/interfacesGeneration/generateInterfaces.d.ts +17 -17
- package/dist/resolvableElements/interfacesGeneration/generateInterfaces.js +134 -134
- package/dist/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.d.ts +4 -4
- package/dist/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js +41 -41
- package/dist/resolvableElements/react/SectionChecker.d.ts +24 -24
- package/dist/resolvableElements/react/SectionChecker.jsx +27 -27
- package/dist/resolvableElements/react/useResolveSection.d.ts +21 -21
- package/dist/resolvableElements/react/useResolveSection.js +65 -65
- package/dist/resolvableElements/react/useResolverContext.d.ts +9 -9
- package/dist/resolvableElements/react/useResolverContext.jsx +64 -64
- package/dist/resolvableElements/resolveTemplatedExpression.d.ts +22 -22
- package/dist/resolvableElements/resolveTemplatedExpression.js +43 -43
- package/dist/useCurrentUser.d.ts +10 -10
- package/dist/useCurrentUser.jsx +48 -48
- package/dist_es/index.d.ts +12 -12
- package/dist_es/index.js +20 -20
- package/dist_es/resolvableElements/Resolver.d.ts +47 -47
- package/dist_es/resolvableElements/Resolver.js +53 -53
- package/dist_es/resolvableElements/elements/ResolvableElement.d.ts +14 -14
- package/dist_es/resolvableElements/elements/ResolvableElement.js +25 -25
- package/dist_es/resolvableElements/elements/ResolvableValueElement.d.ts +16 -16
- package/dist_es/resolvableElements/elements/ResolvableValueElement.js +32 -32
- package/dist_es/resolvableElements/elements/UiElement.d.ts +31 -31
- package/dist_es/resolvableElements/elements/UiElement.js +52 -52
- package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.d.ts +26 -26
- package/dist_es/resolvableElements/elements/expr/ResolvableExprElement.js +101 -101
- package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.d.ts +10 -10
- package/dist_es/resolvableElements/elements/expr/ResolvableExprElementMeta.js +9 -9
- package/dist_es/resolvableElements/elements/function/FunctionElement.d.ts +12 -12
- package/dist_es/resolvableElements/elements/function/FunctionElement.js +36 -36
- package/dist_es/resolvableElements/elements/function/FunctionElementMeta.d.ts +9 -9
- package/dist_es/resolvableElements/elements/function/FunctionElementMeta.js +9 -9
- package/dist_es/resolvableElements/elements/list/ListElementMeta.d.ts +12 -12
- package/dist_es/resolvableElements/elements/list/ListElementMeta.js +9 -9
- package/dist_es/resolvableElements/elements/list/ResolvableListElement.d.ts +16 -16
- package/dist_es/resolvableElements/elements/list/ResolvableListElement.js +98 -98
- package/dist_es/resolvableElements/elements/makeElement.d.ts +7 -7
- package/dist_es/resolvableElements/elements/makeElement.js +36 -36
- package/dist_es/resolvableElements/elements/section/ResolvableSectionElement.d.ts +24 -24
- package/dist_es/resolvableElements/elements/section/ResolvableSectionElement.js +117 -117
- package/dist_es/resolvableElements/elements/section/SectionElementMeta.d.ts +16 -16
- package/dist_es/resolvableElements/elements/section/SectionElementMeta.js +6 -6
- package/dist_es/resolvableElements/elements/section/resolveSection.d.ts +12 -12
- package/dist_es/resolvableElements/elements/section/resolveSection.js +36 -36
- package/dist_es/resolvableElements/elements/tag/ResolvableTagElement.d.ts +16 -16
- package/dist_es/resolvableElements/elements/tag/ResolvableTagElement.js +101 -101
- package/dist_es/resolvableElements/elements/tag/TagElementMeta.d.ts +12 -12
- package/dist_es/resolvableElements/elements/tag/TagElementMeta.js +9 -9
- package/dist_es/resolvableElements/interfacesGeneration/generateInterfaces.d.ts +17 -17
- package/dist_es/resolvableElements/interfacesGeneration/generateInterfaces.js +128 -128
- package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.d.ts +4 -4
- package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.js +15 -15
- package/dist_es/resolvableElements/react/SectionChecker.d.ts +24 -24
- package/dist_es/resolvableElements/react/SectionChecker.jsx +20 -20
- package/dist_es/resolvableElements/react/useResolveSection.d.ts +21 -21
- package/dist_es/resolvableElements/react/useResolveSection.js +61 -61
- package/dist_es/resolvableElements/react/useResolverContext.d.ts +9 -9
- package/dist_es/resolvableElements/react/useResolverContext.jsx +36 -36
- package/dist_es/resolvableElements/resolveTemplatedExpression.d.ts +22 -22
- package/dist_es/resolvableElements/resolveTemplatedExpression.js +38 -38
- package/dist_es/useCurrentUser.d.ts +10 -10
- package/dist_es/useCurrentUser.jsx +20 -20
- package/package.json +5 -5
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024, J2 Innovations. All Rights Reserved
|
|
3
|
-
*/
|
|
4
|
-
import { makeParametersDict } from '../function/FunctionElement';
|
|
5
|
-
import { ResolvableSectionElement } from './ResolvableSectionElement';
|
|
6
|
-
/**
|
|
7
|
-
* Resolves a section UI element.
|
|
8
|
-
* @param resolver the Resolver context
|
|
9
|
-
* @param sectionData section data object
|
|
10
|
-
* @param parameters parameters for the resolution
|
|
11
|
-
* @returns the resolved result of the section.
|
|
12
|
-
*/
|
|
13
|
-
export async function resolveSection(resolver, sectionData, parameters) {
|
|
14
|
-
const parametersDict = makeParametersDict(parameters);
|
|
15
|
-
if (areParametersValid(parameters)) {
|
|
16
|
-
const sectionElement = new ResolvableSectionElement({
|
|
17
|
-
element: sectionData,
|
|
18
|
-
resolver,
|
|
19
|
-
onUpdate: () => {
|
|
20
|
-
return;
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
await sectionElement
|
|
24
|
-
.initialize(parametersDict)
|
|
25
|
-
.finally(() => sectionElement?.close());
|
|
26
|
-
return sectionElement.value;
|
|
27
|
-
}
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
export const areParametersValid = (parameters) => {
|
|
31
|
-
if (parameters &&
|
|
32
|
-
Object.entries(parameters).some(([, value]) => value == null)) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
};
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024, J2 Innovations. All Rights Reserved
|
|
3
|
+
*/
|
|
4
|
+
import { makeParametersDict } from '../function/FunctionElement';
|
|
5
|
+
import { ResolvableSectionElement } from './ResolvableSectionElement';
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a section UI element.
|
|
8
|
+
* @param resolver the Resolver context
|
|
9
|
+
* @param sectionData section data object
|
|
10
|
+
* @param parameters parameters for the resolution
|
|
11
|
+
* @returns the resolved result of the section.
|
|
12
|
+
*/
|
|
13
|
+
export async function resolveSection(resolver, sectionData, parameters) {
|
|
14
|
+
const parametersDict = makeParametersDict(parameters);
|
|
15
|
+
if (areParametersValid(parameters)) {
|
|
16
|
+
const sectionElement = new ResolvableSectionElement({
|
|
17
|
+
element: sectionData,
|
|
18
|
+
resolver,
|
|
19
|
+
onUpdate: () => {
|
|
20
|
+
return;
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
await sectionElement
|
|
24
|
+
.initialize(parametersDict)
|
|
25
|
+
.finally(() => sectionElement?.close());
|
|
26
|
+
return sectionElement.value;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
export const areParametersValid = (parameters) => {
|
|
31
|
+
if (parameters &&
|
|
32
|
+
Object.entries(parameters).some(([, value]) => value == null)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
37
|
//# sourceMappingURL=resolveSection.js.map
|
|
@@ -1,16 +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
|
-
}
|
|
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
|
+
}
|
|
@@ -1,102 +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 { UiElement, } 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(UiElement.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
|
-
}
|
|
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 { UiElement, } 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(UiElement.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
102
|
//# sourceMappingURL=ResolvableTagElement.js.map
|
|
@@ -1,12 +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;
|
|
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;
|
|
@@ -1,10 +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
|
-
};
|
|
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
10
|
//# sourceMappingURL=TagElementMeta.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
|
|
2
|
-
import { UiElementSectionMeta } from '../elements/section/SectionElementMeta';
|
|
3
|
-
import { UiElementData } from '../elements/UiElement';
|
|
4
|
-
export declare const generateInterfaces: (section: UiElementData<UiElementSectionMeta>) => string;
|
|
5
|
-
/**
|
|
6
|
-
* Class for generating typescript interfaces from a section data.
|
|
7
|
-
*/
|
|
8
|
-
export declare class SectionInterfacesGenerator {
|
|
9
|
-
#private;
|
|
10
|
-
constructor(section: UiElementData<UiElementSectionMeta>);
|
|
11
|
-
sectionData: UiElementData<UiElementSectionMeta>;
|
|
12
|
-
output: string;
|
|
13
|
-
generate: () => string;
|
|
14
|
-
generateInterface(section: ResolvableSectionElement, indentation: number): void;
|
|
15
|
-
generateNamespace(section: ResolvableSectionElement<UiElementData<UiElementSectionMeta>>, indentation: number): void;
|
|
16
|
-
}
|
|
17
|
-
export declare function makeResolvableSectionElementMock(sectionData: UiElementData<UiElementSectionMeta>, name?: string): ResolvableSectionElement<UiElementData<UiElementSectionMeta>>;
|
|
1
|
+
import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
|
|
2
|
+
import { UiElementSectionMeta } from '../elements/section/SectionElementMeta';
|
|
3
|
+
import { UiElementData } from '../elements/UiElement';
|
|
4
|
+
export declare const generateInterfaces: (section: UiElementData<UiElementSectionMeta>) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Class for generating typescript interfaces from a section data.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SectionInterfacesGenerator {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(section: UiElementData<UiElementSectionMeta>);
|
|
11
|
+
sectionData: UiElementData<UiElementSectionMeta>;
|
|
12
|
+
output: string;
|
|
13
|
+
generate: () => string;
|
|
14
|
+
generateInterface(section: ResolvableSectionElement, indentation: number): void;
|
|
15
|
+
generateNamespace(section: ResolvableSectionElement<UiElementData<UiElementSectionMeta>>, indentation: number): void;
|
|
16
|
+
}
|
|
17
|
+
export declare function makeResolvableSectionElementMock(sectionData: UiElementData<UiElementSectionMeta>, name?: string): ResolvableSectionElement<UiElementData<UiElementSectionMeta>>;
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
-
*/
|
|
4
|
-
import { HDict } from 'haystack-core';
|
|
5
|
-
import { Client } from 'haystack-nclient';
|
|
6
|
-
import { isResolvableValueElementMeta } from '../elements/ResolvableValueElement';
|
|
7
|
-
import { isChildUnresolvedSection, ResolvableSectionElement, } from '../elements/section/ResolvableSectionElement';
|
|
8
|
-
import { Resolver } from '../Resolver';
|
|
9
|
-
const ROOT_NAME = 'UiElementRoot';
|
|
10
|
-
const ELEMENT_INTERFACE_NAME = 'UiElementData';
|
|
11
|
-
export const generateInterfaces = (section) => {
|
|
12
|
-
return new SectionInterfacesGenerator(section).generate();
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Class for generating typescript interfaces from a section data.
|
|
16
|
-
*/
|
|
17
|
-
export class SectionInterfacesGenerator {
|
|
18
|
-
constructor(section) {
|
|
19
|
-
this.sectionData = section;
|
|
20
|
-
}
|
|
21
|
-
sectionData;
|
|
22
|
-
output = '';
|
|
23
|
-
#out = (str, indentation = 0) => {
|
|
24
|
-
this.output += this.#indent(indentation) + str + '\n';
|
|
25
|
-
};
|
|
26
|
-
#indent(indentation = 0) {
|
|
27
|
-
return '\t'.repeat(indentation);
|
|
28
|
-
}
|
|
29
|
-
generate = () => {
|
|
30
|
-
this.#generateImports();
|
|
31
|
-
const section = makeResolvableSectionElementMock(this.sectionData);
|
|
32
|
-
this.#generateSectionDefinition(section);
|
|
33
|
-
const result = this.output;
|
|
34
|
-
this.output = '';
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
#generateImports() {
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
+
*/
|
|
4
|
+
import { HDict } from 'haystack-core';
|
|
5
|
+
import { Client } from 'haystack-nclient';
|
|
6
|
+
import { isResolvableValueElementMeta } from '../elements/ResolvableValueElement';
|
|
7
|
+
import { isChildUnresolvedSection, ResolvableSectionElement, } from '../elements/section/ResolvableSectionElement';
|
|
8
|
+
import { Resolver } from '../Resolver';
|
|
9
|
+
const ROOT_NAME = 'UiElementRoot';
|
|
10
|
+
const ELEMENT_INTERFACE_NAME = 'UiElementData';
|
|
11
|
+
export const generateInterfaces = (section) => {
|
|
12
|
+
return new SectionInterfacesGenerator(section).generate();
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Class for generating typescript interfaces from a section data.
|
|
16
|
+
*/
|
|
17
|
+
export class SectionInterfacesGenerator {
|
|
18
|
+
constructor(section) {
|
|
19
|
+
this.sectionData = section;
|
|
20
|
+
}
|
|
21
|
+
sectionData;
|
|
22
|
+
output = '';
|
|
23
|
+
#out = (str, indentation = 0) => {
|
|
24
|
+
this.output += this.#indent(indentation) + str + '\n';
|
|
25
|
+
};
|
|
26
|
+
#indent(indentation = 0) {
|
|
27
|
+
return '\t'.repeat(indentation);
|
|
28
|
+
}
|
|
29
|
+
generate = () => {
|
|
30
|
+
this.#generateImports();
|
|
31
|
+
const section = makeResolvableSectionElementMock(this.sectionData);
|
|
32
|
+
this.#generateSectionDefinition(section);
|
|
33
|
+
const result = this.output;
|
|
34
|
+
this.output = '';
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
#generateImports() {
|
|
38
38
|
this.#out(`/* eslint-disable @typescript-eslint/no-namespace */
|
|
39
39
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
40
40
|
|
|
@@ -53,95 +53,95 @@ export const UI_ELEMENTS = json as UiElementRoot
|
|
|
53
53
|
//////////////////////////////////////////////////////////////////////////
|
|
54
54
|
// Interfaces
|
|
55
55
|
//////////////////////////////////////////////////////////////////////////
|
|
56
|
-
`);
|
|
57
|
-
}
|
|
58
|
-
#generateSectionDefinition(section, indentation = 0) {
|
|
59
|
-
this.generateInterface(section, indentation);
|
|
60
|
-
if (hasChildrenSections(section)) {
|
|
61
|
-
this.generateNamespace(section, indentation);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
generateInterface(section, indentation) {
|
|
65
|
-
const name = section.name ?? ROOT_NAME;
|
|
66
|
-
this.#out(`export interface ${capitalize(name)} extends UiElementData {`, indentation);
|
|
67
|
-
const parameters = section.getParameterList();
|
|
68
|
-
if (parameters.length > 0) {
|
|
69
|
-
this.#generateParametersProperty(parameters, indentation + 1);
|
|
70
|
-
}
|
|
71
|
-
this.#generateResolvedProperty(section, indentation + 1);
|
|
72
|
-
section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
|
|
73
|
-
? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
|
|
74
|
-
: `${child.name}: ${ELEMENT_INTERFACE_NAME}`, indentation + 1));
|
|
75
|
-
this.#out(`}`, indentation);
|
|
76
|
-
}
|
|
77
|
-
#generateParametersProperty(parameters, indentation) {
|
|
78
|
-
this.#out(`_parameters?: {`, indentation);
|
|
79
|
-
parameters.forEach((param) => this.#out(`${param}: HCore.HVal`, indentation + 1));
|
|
80
|
-
this.#out(`}`, indentation);
|
|
81
|
-
}
|
|
82
|
-
#generateResolvedProperty(section, indentation) {
|
|
83
|
-
const name = section.name ?? ROOT_NAME;
|
|
84
|
-
if (section.children.length > 0) {
|
|
85
|
-
this.#out('_resolved?: {', indentation);
|
|
86
|
-
section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
|
|
87
|
-
? `${child[0]}?: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
|
|
88
|
-
: `${child.name}?: ${getResolvedType(child)}`, indentation + 1));
|
|
89
|
-
this.#out('}', indentation);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this.#out(`_resolved?: Record<string, unknown>`, indentation);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
generateNamespace(section, indentation) {
|
|
96
|
-
const name = section.name ?? ROOT_NAME;
|
|
97
|
-
this.#out(`export namespace ${capitalize(name)} {`, indentation);
|
|
98
|
-
section.children
|
|
99
|
-
.filter((child) => isChildUnresolvedSection(child))
|
|
100
|
-
.forEach((child) => {
|
|
101
|
-
if (isChildUnresolvedSection(child)) {
|
|
102
|
-
const section = makeResolvableSectionElementMock(child[1], child[0]);
|
|
103
|
-
this.#generateSectionDefinition(section, indentation + 1);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
this.#out(`}`, indentation);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
export function makeResolvableSectionElementMock(sectionData, name) {
|
|
110
|
-
return new ResolvableSectionElement({
|
|
111
|
-
name,
|
|
112
|
-
element: sectionData,
|
|
113
|
-
onUpdate: () => {
|
|
114
|
-
return;
|
|
115
|
-
},
|
|
116
|
-
resolver: new Resolver({
|
|
117
|
-
client: makeMockedClient(),
|
|
118
|
-
user: HDict.make({ userRole: 'su' }),
|
|
119
|
-
}),
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
function makeMockedClient() {
|
|
123
|
-
return new Client({
|
|
124
|
-
base: new URL('http://localhost:8080'),
|
|
125
|
-
fetch: () => new Promise(() => {
|
|
126
|
-
return new Response();
|
|
127
|
-
}),
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
function capitalize(str) {
|
|
131
|
-
return str.charAt(0)?.toUpperCase() + str.substring(1);
|
|
132
|
-
}
|
|
133
|
-
function getResolvedType(child) {
|
|
134
|
-
if (child._meta && isResolvableValueElementMeta(child._meta)) {
|
|
135
|
-
return child._meta.resolvedType.startsWith('H')
|
|
136
|
-
? 'HCore.' + child._meta.resolvedType
|
|
137
|
-
: child._meta.resolvedType;
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
return 'unknown';
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
function hasChildrenSections(section) {
|
|
144
|
-
return (section.children.filter((child) => isChildUnresolvedSection(child))
|
|
145
|
-
.length > 0);
|
|
146
|
-
}
|
|
56
|
+
`);
|
|
57
|
+
}
|
|
58
|
+
#generateSectionDefinition(section, indentation = 0) {
|
|
59
|
+
this.generateInterface(section, indentation);
|
|
60
|
+
if (hasChildrenSections(section)) {
|
|
61
|
+
this.generateNamespace(section, indentation);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
generateInterface(section, indentation) {
|
|
65
|
+
const name = section.name ?? ROOT_NAME;
|
|
66
|
+
this.#out(`export interface ${capitalize(name)} extends UiElementData {`, indentation);
|
|
67
|
+
const parameters = section.getParameterList();
|
|
68
|
+
if (parameters.length > 0) {
|
|
69
|
+
this.#generateParametersProperty(parameters, indentation + 1);
|
|
70
|
+
}
|
|
71
|
+
this.#generateResolvedProperty(section, indentation + 1);
|
|
72
|
+
section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
|
|
73
|
+
? `${child[0]}: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
|
|
74
|
+
: `${child.name}: ${ELEMENT_INTERFACE_NAME}`, indentation + 1));
|
|
75
|
+
this.#out(`}`, indentation);
|
|
76
|
+
}
|
|
77
|
+
#generateParametersProperty(parameters, indentation) {
|
|
78
|
+
this.#out(`_parameters?: {`, indentation);
|
|
79
|
+
parameters.forEach((param) => this.#out(`${param}: HCore.HVal`, indentation + 1));
|
|
80
|
+
this.#out(`}`, indentation);
|
|
81
|
+
}
|
|
82
|
+
#generateResolvedProperty(section, indentation) {
|
|
83
|
+
const name = section.name ?? ROOT_NAME;
|
|
84
|
+
if (section.children.length > 0) {
|
|
85
|
+
this.#out('_resolved?: {', indentation);
|
|
86
|
+
section.children.forEach((child) => this.#out(isChildUnresolvedSection(child)
|
|
87
|
+
? `${child[0]}?: ${capitalize(name)}.${capitalize(child[0] ?? '')}`
|
|
88
|
+
: `${child.name}?: ${getResolvedType(child)}`, indentation + 1));
|
|
89
|
+
this.#out('}', indentation);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.#out(`_resolved?: Record<string, unknown>`, indentation);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
generateNamespace(section, indentation) {
|
|
96
|
+
const name = section.name ?? ROOT_NAME;
|
|
97
|
+
this.#out(`export namespace ${capitalize(name)} {`, indentation);
|
|
98
|
+
section.children
|
|
99
|
+
.filter((child) => isChildUnresolvedSection(child))
|
|
100
|
+
.forEach((child) => {
|
|
101
|
+
if (isChildUnresolvedSection(child)) {
|
|
102
|
+
const section = makeResolvableSectionElementMock(child[1], child[0]);
|
|
103
|
+
this.#generateSectionDefinition(section, indentation + 1);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
this.#out(`}`, indentation);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function makeResolvableSectionElementMock(sectionData, name) {
|
|
110
|
+
return new ResolvableSectionElement({
|
|
111
|
+
name,
|
|
112
|
+
element: sectionData,
|
|
113
|
+
onUpdate: () => {
|
|
114
|
+
return;
|
|
115
|
+
},
|
|
116
|
+
resolver: new Resolver({
|
|
117
|
+
client: makeMockedClient(),
|
|
118
|
+
user: HDict.make({ userRole: 'su' }),
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function makeMockedClient() {
|
|
123
|
+
return new Client({
|
|
124
|
+
base: new URL('http://localhost:8080'),
|
|
125
|
+
fetch: () => new Promise(() => {
|
|
126
|
+
return new Response();
|
|
127
|
+
}),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function capitalize(str) {
|
|
131
|
+
return str.charAt(0)?.toUpperCase() + str.substring(1);
|
|
132
|
+
}
|
|
133
|
+
function getResolvedType(child) {
|
|
134
|
+
if (child._meta && isResolvableValueElementMeta(child._meta)) {
|
|
135
|
+
return child._meta.resolvedType.startsWith('H')
|
|
136
|
+
? 'HCore.' + child._meta.resolvedType
|
|
137
|
+
: child._meta.resolvedType;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return 'unknown';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function hasChildrenSections(section) {
|
|
144
|
+
return (section.children.filter((child) => isChildUnresolvedSection(child))
|
|
145
|
+
.length > 0);
|
|
146
|
+
}
|
|
147
147
|
//# sourceMappingURL=generateInterfaces.js.map
|