@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
package/dist_es/resolvableElements/interfacesGeneration/generateTypescriptInterfacesFile.d.ts
CHANGED
|
@@ -1,4 +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>;
|
|
1
|
+
/**
|
|
2
|
+
* Generate typescript interfaces file from json ui-elements data
|
|
3
|
+
*/
|
|
4
|
+
export default function generateTypescriptInterfacesFile(inputPath?: string, outputPath?: string): Promise<void>;
|
|
@@ -1,16 +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
|
-
}
|
|
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
16
|
//# sourceMappingURL=generateTypescriptInterfacesFile.js.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { UiElementData } from 'resolvableElements/elements/UiElement';
|
|
3
|
-
/**
|
|
4
|
-
* An utility type that allows a component to accept props with or without a 'section' property.
|
|
5
|
-
*/
|
|
6
|
-
export type OptionalSection<P> = P | (Omit<P, 'section'> & {
|
|
7
|
-
section?: undefined;
|
|
8
|
-
});
|
|
9
|
-
/**
|
|
10
|
-
* Higher-Order Component that takes a section based component as an argument and returns a new component
|
|
11
|
-
* that checks if the 'section' prop is defined before rendering the SectionComponent.
|
|
12
|
-
* If the 'section' prop is undefined, it returns an empty element.
|
|
13
|
-
*
|
|
14
|
-
* @template P - Props of the original SectionComponent
|
|
15
|
-
* @param {React.FC<P>} SectionComponent - The original component that will be wrapped
|
|
16
|
-
* @returns {React.FC<P | (Omit<P, 'section'> & { section?: undefined })>} - The wrapped component
|
|
17
|
-
* @example
|
|
18
|
-
* const CheckedComponent = SectionChecker(({section, ...props}) => {
|
|
19
|
-
* return <div>{section.title}</div>
|
|
20
|
-
* })
|
|
21
|
-
*/
|
|
22
|
-
export declare const SectionChecker: <P extends {
|
|
23
|
-
section: UiElementData;
|
|
24
|
-
}>(SectionComponent: React.FC<P>) => (props: OptionalSection<P>) => JSX.Element;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { UiElementData } from 'resolvableElements/elements/UiElement';
|
|
3
|
+
/**
|
|
4
|
+
* An utility type that allows a component to accept props with or without a 'section' property.
|
|
5
|
+
*/
|
|
6
|
+
export type OptionalSection<P> = P | (Omit<P, 'section'> & {
|
|
7
|
+
section?: undefined;
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Higher-Order Component that takes a section based component as an argument and returns a new component
|
|
11
|
+
* that checks if the 'section' prop is defined before rendering the SectionComponent.
|
|
12
|
+
* If the 'section' prop is undefined, it returns an empty element.
|
|
13
|
+
*
|
|
14
|
+
* @template P - Props of the original SectionComponent
|
|
15
|
+
* @param {React.FC<P>} SectionComponent - The original component that will be wrapped
|
|
16
|
+
* @returns {React.FC<P | (Omit<P, 'section'> & { section?: undefined })>} - The wrapped component
|
|
17
|
+
* @example
|
|
18
|
+
* const CheckedComponent = SectionChecker(({section, ...props}) => {
|
|
19
|
+
* return <div>{section.title}</div>
|
|
20
|
+
* })
|
|
21
|
+
*/
|
|
22
|
+
export declare const SectionChecker: <P extends {
|
|
23
|
+
section: UiElementData;
|
|
24
|
+
}>(SectionComponent: React.FC<P>) => (props: OptionalSection<P>) => JSX.Element;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Higher-Order Component that takes a section based component as an argument and returns a new component
|
|
4
|
-
* that checks if the 'section' prop is defined before rendering the SectionComponent.
|
|
5
|
-
* If the 'section' prop is undefined, it returns an empty element.
|
|
6
|
-
*
|
|
7
|
-
* @template P - Props of the original SectionComponent
|
|
8
|
-
* @param {React.FC<P>} SectionComponent - The original component that will be wrapped
|
|
9
|
-
* @returns {React.FC<P | (Omit<P, 'section'> & { section?: undefined })>} - The wrapped component
|
|
10
|
-
* @example
|
|
11
|
-
* const CheckedComponent = SectionChecker(({section, ...props}) => {
|
|
12
|
-
* return <div>{section.title}</div>
|
|
13
|
-
* })
|
|
14
|
-
*/
|
|
15
|
-
export const SectionChecker = (SectionComponent) => {
|
|
16
|
-
const CheckedSectionComponent = (props) => {
|
|
17
|
-
return !props.section ? <></> : <SectionComponent {...props}/>;
|
|
18
|
-
};
|
|
19
|
-
return CheckedSectionComponent;
|
|
20
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Higher-Order Component that takes a section based component as an argument and returns a new component
|
|
4
|
+
* that checks if the 'section' prop is defined before rendering the SectionComponent.
|
|
5
|
+
* If the 'section' prop is undefined, it returns an empty element.
|
|
6
|
+
*
|
|
7
|
+
* @template P - Props of the original SectionComponent
|
|
8
|
+
* @param {React.FC<P>} SectionComponent - The original component that will be wrapped
|
|
9
|
+
* @returns {React.FC<P | (Omit<P, 'section'> & { section?: undefined })>} - The wrapped component
|
|
10
|
+
* @example
|
|
11
|
+
* const CheckedComponent = SectionChecker(({section, ...props}) => {
|
|
12
|
+
* return <div>{section.title}</div>
|
|
13
|
+
* })
|
|
14
|
+
*/
|
|
15
|
+
export const SectionChecker = (SectionComponent) => {
|
|
16
|
+
const CheckedSectionComponent = (props) => {
|
|
17
|
+
return !props.section ? <></> : <SectionComponent {...props}/>;
|
|
18
|
+
};
|
|
19
|
+
return CheckedSectionComponent;
|
|
20
|
+
};
|
|
21
21
|
//# sourceMappingURL=SectionChecker.jsx.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { UiElementData } from '../elements/UiElement';
|
|
2
|
-
import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
|
|
3
|
-
import { ParametersOfSection, ResolvedSection } from '../elements/section/SectionElementMeta';
|
|
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 type UseResolveSectionResult<T extends UiElementData> = [
|
|
13
|
-
ResolvedSection<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
|
-
}
|
|
1
|
+
import { UiElementData } from '../elements/UiElement';
|
|
2
|
+
import { ResolvableSectionElement } from '../elements/section/ResolvableSectionElement';
|
|
3
|
+
import { ParametersOfSection, ResolvedSection } from '../elements/section/SectionElementMeta';
|
|
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 type UseResolveSectionResult<T extends UiElementData> = [
|
|
13
|
+
ResolvedSection<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
|
+
}
|
|
@@ -1,62 +1,62 @@
|
|
|
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 { areParametersValid } from '../elements/section/resolveSection';
|
|
8
|
-
import { useResolverContext } from './useResolverContext';
|
|
9
|
-
/**
|
|
10
|
-
* Resolves a section UI element.
|
|
11
|
-
* IMPORTANT: This hook requires a resolver react context defined. @See `ResolverProvider`.
|
|
12
|
-
* @param sectionData section data object
|
|
13
|
-
* @param parameters parameters for the resolution
|
|
14
|
-
* @returns the resolved result of the section that will be updated and force rendering when a subvalue changes.
|
|
15
|
-
*/
|
|
16
|
-
export function useResolveSection(sectionData, parameters) {
|
|
17
|
-
const [, update] = useReducer((count) => count + 1, 0);
|
|
18
|
-
const resolver = useResolverContext();
|
|
19
|
-
const [refreshes, refresh] = useReducer((count) => count + 1, 0);
|
|
20
|
-
const [loads, setLoads] = useState(0);
|
|
21
|
-
const [isLoading, setLoading] = useState(false);
|
|
22
|
-
const ref = useRef();
|
|
23
|
-
if (!ref.current) {
|
|
24
|
-
ref.current = new ResolvableSectionElement({
|
|
25
|
-
element: sectionData,
|
|
26
|
-
resolver,
|
|
27
|
-
onUpdate: update,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
const parametersDict = makeParametersDict(parameters);
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (areParametersValid(parameters)) {
|
|
33
|
-
ref.current = new ResolvableSectionElement({
|
|
34
|
-
element: sectionData,
|
|
35
|
-
resolver,
|
|
36
|
-
onUpdate: update,
|
|
37
|
-
});
|
|
38
|
-
setLoading(true);
|
|
39
|
-
const promise = ref.current
|
|
40
|
-
.initialize(parametersDict)
|
|
41
|
-
.then(() => setLoads(loads + 1))
|
|
42
|
-
.finally(() => setLoading(false));
|
|
43
|
-
return () => {
|
|
44
|
-
const sectionElement = ref.current;
|
|
45
|
-
promise.finally(() => {
|
|
46
|
-
sectionElement?.close();
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
return;
|
|
51
|
-
}, [sectionData, resolver, refreshes, parametersDict.toAxon()]);
|
|
52
|
-
return [
|
|
53
|
-
(ref.current.value ?? {}),
|
|
54
|
-
{
|
|
55
|
-
refresh: refresh,
|
|
56
|
-
element: ref.current,
|
|
57
|
-
loads,
|
|
58
|
-
isLoading,
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
}
|
|
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 { areParametersValid } from '../elements/section/resolveSection';
|
|
8
|
+
import { useResolverContext } from './useResolverContext';
|
|
9
|
+
/**
|
|
10
|
+
* Resolves a section UI element.
|
|
11
|
+
* IMPORTANT: This hook requires a resolver react context defined. @See `ResolverProvider`.
|
|
12
|
+
* @param sectionData section data object
|
|
13
|
+
* @param parameters parameters for the resolution
|
|
14
|
+
* @returns the resolved result of the section that will be updated and force rendering when a subvalue changes.
|
|
15
|
+
*/
|
|
16
|
+
export function useResolveSection(sectionData, parameters) {
|
|
17
|
+
const [, update] = useReducer((count) => count + 1, 0);
|
|
18
|
+
const resolver = useResolverContext();
|
|
19
|
+
const [refreshes, refresh] = useReducer((count) => count + 1, 0);
|
|
20
|
+
const [loads, setLoads] = useState(0);
|
|
21
|
+
const [isLoading, setLoading] = useState(false);
|
|
22
|
+
const ref = useRef();
|
|
23
|
+
if (!ref.current) {
|
|
24
|
+
ref.current = new ResolvableSectionElement({
|
|
25
|
+
element: sectionData,
|
|
26
|
+
resolver,
|
|
27
|
+
onUpdate: update,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const parametersDict = makeParametersDict(parameters);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (areParametersValid(parameters)) {
|
|
33
|
+
ref.current = new ResolvableSectionElement({
|
|
34
|
+
element: sectionData,
|
|
35
|
+
resolver,
|
|
36
|
+
onUpdate: update,
|
|
37
|
+
});
|
|
38
|
+
setLoading(true);
|
|
39
|
+
const promise = ref.current
|
|
40
|
+
.initialize(parametersDict)
|
|
41
|
+
.then(() => setLoads(loads + 1))
|
|
42
|
+
.finally(() => setLoading(false));
|
|
43
|
+
return () => {
|
|
44
|
+
const sectionElement = ref.current;
|
|
45
|
+
promise.finally(() => {
|
|
46
|
+
sectionElement?.close();
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}, [sectionData, resolver, refreshes, parametersDict.toAxon()]);
|
|
52
|
+
return [
|
|
53
|
+
(ref.current.value ?? {}),
|
|
54
|
+
{
|
|
55
|
+
refresh: refresh,
|
|
56
|
+
element: ref.current,
|
|
57
|
+
loads,
|
|
58
|
+
isLoading,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
62
|
//# sourceMappingURL=useResolveSection.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
import { Resolver } from '../Resolver';
|
|
3
|
-
export declare function useResolverContext(): Resolver;
|
|
4
|
-
interface ResolverProviderProps extends PropsWithChildren {
|
|
5
|
-
userRoleTagName?: string;
|
|
6
|
-
evalFuncName?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare const ResolverProvider: React.FC<ResolverProviderProps>;
|
|
9
|
-
export {};
|
|
1
|
+
import React, { PropsWithChildren } from 'react';
|
|
2
|
+
import { Resolver } from '../Resolver';
|
|
3
|
+
export declare function useResolverContext(): Resolver;
|
|
4
|
+
interface ResolverProviderProps extends PropsWithChildren {
|
|
5
|
+
userRoleTagName?: string;
|
|
6
|
+
evalFuncName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const ResolverProvider: React.FC<ResolverProviderProps>;
|
|
9
|
+
export {};
|
|
@@ -1,39 +1,39 @@
|
|
|
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 = ({ userRoleTagName, evalFuncName, children, }) => {
|
|
19
|
-
const client = useClient();
|
|
20
|
-
const user = useCurrentUser();
|
|
21
|
-
const [resolver, setResolver] = useState(() => new Resolver({
|
|
22
|
-
client,
|
|
23
|
-
user,
|
|
24
|
-
userRoleTagName,
|
|
25
|
-
evalFuncName,
|
|
26
|
-
}));
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
setResolver(new Resolver({
|
|
29
|
-
client,
|
|
30
|
-
user,
|
|
31
|
-
userRoleTagName,
|
|
32
|
-
evalFuncName,
|
|
33
|
-
}));
|
|
34
|
-
}, [client, user, userRoleTagName, evalFuncName]);
|
|
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 = ({ userRoleTagName, evalFuncName, children, }) => {
|
|
19
|
+
const client = useClient();
|
|
20
|
+
const user = useCurrentUser();
|
|
21
|
+
const [resolver, setResolver] = useState(() => new Resolver({
|
|
22
|
+
client,
|
|
23
|
+
user,
|
|
24
|
+
userRoleTagName,
|
|
25
|
+
evalFuncName,
|
|
26
|
+
}));
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
setResolver(new Resolver({
|
|
29
|
+
client,
|
|
30
|
+
user,
|
|
31
|
+
userRoleTagName,
|
|
32
|
+
evalFuncName,
|
|
33
|
+
}));
|
|
34
|
+
}, [client, user, userRoleTagName, evalFuncName]);
|
|
35
35
|
return (<ResolverContext.Provider value={resolver}>
|
|
36
36
|
{children}
|
|
37
|
-
</ResolverContext.Provider>);
|
|
38
|
-
};
|
|
37
|
+
</ResolverContext.Provider>);
|
|
38
|
+
};
|
|
39
39
|
//# sourceMappingURL=useResolverContext.jsx.map
|
|
@@ -1,22 +1,22 @@
|
|
|
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. Optional parameters can be marked using a '?'
|
|
6
|
-
* after the parameter name. They can safely be omitted in the parameters Dict.
|
|
7
|
-
* @example
|
|
8
|
-
* resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make(22)})) => "func(22)"
|
|
9
|
-
* @example
|
|
10
|
-
* resolveTemplatedExpression("func({{num}}, {{unit?}})", HDict.make({num: HNum.make(22)})) => "func(22, null)"
|
|
11
|
-
* @param expr the axon expression
|
|
12
|
-
* @param params the parameters expressed as dict
|
|
13
|
-
* @returns the axon expression resolved with the specified params
|
|
14
|
-
*/
|
|
15
|
-
export declare const resolveTemplateExpression: (expr: string, parameters?: HDict) => string;
|
|
16
|
-
/**
|
|
17
|
-
* Replaces template variable found in the given string using a given replacer function
|
|
18
|
-
* @param templateString
|
|
19
|
-
* @param replacer
|
|
20
|
-
* @returns a new string containing the compiled template string
|
|
21
|
-
*/
|
|
22
|
-
export declare const replaceTemplateVariables: (templateString: string, replacer: (substring: string, match: string, optional: string) => string) => string;
|
|
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. Optional parameters can be marked using a '?'
|
|
6
|
+
* after the parameter name. They can safely be omitted in the parameters Dict.
|
|
7
|
+
* @example
|
|
8
|
+
* resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make(22)})) => "func(22)"
|
|
9
|
+
* @example
|
|
10
|
+
* resolveTemplatedExpression("func({{num}}, {{unit?}})", HDict.make({num: HNum.make(22)})) => "func(22, null)"
|
|
11
|
+
* @param expr the axon expression
|
|
12
|
+
* @param params the parameters expressed as dict
|
|
13
|
+
* @returns the axon expression resolved with the specified params
|
|
14
|
+
*/
|
|
15
|
+
export declare const resolveTemplateExpression: (expr: string, parameters?: HDict) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Replaces template variable found in the given string using a given replacer function
|
|
18
|
+
* @param templateString
|
|
19
|
+
* @param replacer
|
|
20
|
+
* @returns a new string containing the compiled template string
|
|
21
|
+
*/
|
|
22
|
+
export declare const replaceTemplateVariables: (templateString: string, replacer: (substring: string, match: string, optional: string) => string) => string;
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
-
*/
|
|
4
|
-
import { AXON_NULL } from 'haystack-core';
|
|
5
|
-
export const REG_EXPR_MATCHING_TEMPLATE = new RegExp(/{{([^{}?]*)(\??)}}/, 'g');
|
|
6
|
-
/**
|
|
7
|
-
* Replaces variables (defined as {{parameterName}}) in an expression with the values given in the parameters dict.
|
|
8
|
-
* The HVal.toAxon function is used for conversion to a string. Optional parameters can be marked using a '?'
|
|
9
|
-
* after the parameter name. They can safely be omitted in the parameters Dict.
|
|
10
|
-
* @example
|
|
11
|
-
* resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make(22)})) => "func(22)"
|
|
12
|
-
* @example
|
|
13
|
-
* resolveTemplatedExpression("func({{num}}, {{unit?}})", HDict.make({num: HNum.make(22)})) => "func(22, null)"
|
|
14
|
-
* @param expr the axon expression
|
|
15
|
-
* @param params the parameters expressed as dict
|
|
16
|
-
* @returns the axon expression resolved with the specified params
|
|
17
|
-
*/
|
|
18
|
-
export const resolveTemplateExpression = (expr, parameters) => {
|
|
19
|
-
const paramDict = parameters;
|
|
20
|
-
return replaceTemplateVariables(expr, (_substring, match, optional) => {
|
|
21
|
-
const isOptional = optional === '?';
|
|
22
|
-
const parameter = paramDict?.get(match)?.toAxon();
|
|
23
|
-
if (parameter != null) {
|
|
24
|
-
return parameter;
|
|
25
|
-
}
|
|
26
|
-
else if (isOptional) {
|
|
27
|
-
return AXON_NULL;
|
|
28
|
-
}
|
|
29
|
-
throw new Error(`ERROR: Missing parameter: ${match} in ${paramDict?.toAxon()}`);
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* Replaces template variable found in the given string using a given replacer function
|
|
34
|
-
* @param templateString
|
|
35
|
-
* @param replacer
|
|
36
|
-
* @returns a new string containing the compiled template string
|
|
37
|
-
*/
|
|
38
|
-
export const replaceTemplateVariables = (templateString, replacer) => templateString.replace(REG_EXPR_MATCHING_TEMPLATE, replacer);
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
+
*/
|
|
4
|
+
import { AXON_NULL } from 'haystack-core';
|
|
5
|
+
export const REG_EXPR_MATCHING_TEMPLATE = new RegExp(/{{([^{}?]*)(\??)}}/, 'g');
|
|
6
|
+
/**
|
|
7
|
+
* Replaces variables (defined as {{parameterName}}) in an expression with the values given in the parameters dict.
|
|
8
|
+
* The HVal.toAxon function is used for conversion to a string. Optional parameters can be marked using a '?'
|
|
9
|
+
* after the parameter name. They can safely be omitted in the parameters Dict.
|
|
10
|
+
* @example
|
|
11
|
+
* resolveTemplatedExpression("func({{num}})", HDict.make({num: HNum.make(22)})) => "func(22)"
|
|
12
|
+
* @example
|
|
13
|
+
* resolveTemplatedExpression("func({{num}}, {{unit?}})", HDict.make({num: HNum.make(22)})) => "func(22, null)"
|
|
14
|
+
* @param expr the axon expression
|
|
15
|
+
* @param params the parameters expressed as dict
|
|
16
|
+
* @returns the axon expression resolved with the specified params
|
|
17
|
+
*/
|
|
18
|
+
export const resolveTemplateExpression = (expr, parameters) => {
|
|
19
|
+
const paramDict = parameters;
|
|
20
|
+
return replaceTemplateVariables(expr, (_substring, match, optional) => {
|
|
21
|
+
const isOptional = optional === '?';
|
|
22
|
+
const parameter = paramDict?.get(match)?.toAxon();
|
|
23
|
+
if (parameter != null) {
|
|
24
|
+
return parameter;
|
|
25
|
+
}
|
|
26
|
+
else if (isOptional) {
|
|
27
|
+
return AXON_NULL;
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`ERROR: Missing parameter: ${match} in ${paramDict?.toAxon()}`);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Replaces template variable found in the given string using a given replacer function
|
|
34
|
+
* @param templateString
|
|
35
|
+
* @param replacer
|
|
36
|
+
* @returns a new string containing the compiled template string
|
|
37
|
+
*/
|
|
38
|
+
export const replaceTemplateVariables = (templateString, replacer) => templateString.replace(REG_EXPR_MATCHING_TEMPLATE, replacer);
|
|
39
39
|
//# sourceMappingURL=resolveTemplatedExpression.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { HDict } from 'haystack-core';
|
|
2
|
-
import React, { PropsWithChildren } 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<PropsWithChildren>;
|
|
1
|
+
import { HDict } from 'haystack-core';
|
|
2
|
+
import React, { PropsWithChildren } 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<PropsWithChildren>;
|
|
@@ -1,23 +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()');
|
|
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
19
|
return (<UserContext.Provider value={isLoading ? undefined : grid[0]}>
|
|
20
20
|
{children}
|
|
21
|
-
</UserContext.Provider>);
|
|
22
|
-
};
|
|
21
|
+
</UserContext.Provider>);
|
|
22
|
+
};
|
|
23
23
|
//# sourceMappingURL=useCurrentUser.jsx.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@j2inn/resolvable-ui-elements",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"dist_es/**/*"
|
|
24
24
|
],
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"haystack-core": "^
|
|
27
|
-
"haystack-nclient": "^
|
|
28
|
-
"haystack-react": "^
|
|
29
|
-
"haystack-units": "^
|
|
26
|
+
"haystack-core": "^3.0.0",
|
|
27
|
+
"haystack-nclient": "^4.0.0",
|
|
28
|
+
"haystack-react": "^4.0.0",
|
|
29
|
+
"haystack-units": "^2.0.0",
|
|
30
30
|
"react": "^18.2.0",
|
|
31
31
|
"react-dom": "^18.2.0"
|
|
32
32
|
},
|