@genesislcap/blank-app-seed 3.29.2 → 3.30.0-prerelease.2
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/.genx/package.json +1 -1
- package/.genx/scripts/update-versions.js +45 -15
- package/.genx/templates/angular/entityManager.hbs +3 -0
- package/.genx/templates/angular/route.hbs +0 -1
- package/.genx/templates/react/chart.hbs +6 -2
- package/.genx/templates/react/component/component.gridOptions.hbs +1 -1
- package/.genx/templates/react/component/component.hbs +22 -14
- package/.genx/templates/react/component/component.index.hbs +1 -1
- package/.genx/templates/react/entityManager.hbs +16 -9
- package/.genx/templates/react/form.hbs +6 -2
- package/.genx/templates/react/grid.hbs +15 -5
- package/.genx/templates/react/gridLayout.hbs +28 -28
- package/.genx/templates/react/horizontalLayout.hbs +5 -5
- package/.genx/templates/react/route.hbs +4 -18
- package/.genx/templates/web-components/entityManager.hbs +3 -0
- package/.genx/utils/formatRouteData.js +1 -1
- package/.genx/utils/generateTile.js +1 -0
- package/.genx/versions.json +3 -3
- package/.github/pull_request_template.md +1 -1
- package/.github/workflows/build.yml +3 -2
- package/.github/workflows/slack.yml +1 -1
- package/.github/workflows/upgrade.yml +6 -1
- package/.github/workflows/upgrade_prerelease.yml +1 -0
- package/CHANGELOG.md +109 -4
- package/client-tmp/react/.eslintrc.cjs +3 -1
- package/client-tmp/react/env.development.json +3 -0
- package/client-tmp/react/index.html +1 -1
- package/client-tmp/react/lint-css.js +18 -0
- package/client-tmp/react/package.json +31 -5
- package/client-tmp/react/playwright.config.ts +17 -0
- package/client-tmp/react/src/App.tsx +33 -6
- package/client-tmp/react/src/components/ErrorMessage/ErrorMessage.jsx +62 -0
- package/client-tmp/react/src/components/ErrorMessage.test.js +80 -0
- package/client-tmp/react/src/config.ts +2 -1
- package/client-tmp/react/src/custom-elements.d.ts +1 -1
- package/client-tmp/react/src/guards/PermissionsGuard.tsx +37 -0
- package/client-tmp/react/src/pages/NotPermittedPage/NotPermittedPage.css +0 -0
- package/client-tmp/react/src/pages/NotPermittedPage/NotPermittedPage.jsx +13 -0
- package/client-tmp/react/src/share/foundation-login.ts +1 -1
- package/client-tmp/react/src/svg-elements.d.ts +1 -1
- package/client-tmp/react/src/utils/fdc3.ts +32 -0
- package/client-tmp/react/src/utils/history.ts +1 -3
- package/client-tmp/react/src/utils/index.ts +4 -0
- package/client-tmp/react/src/utils/permissions.ts +7 -0
- package/client-tmp/react/src/utils/setApiHost.ts +9 -0
- package/client-tmp/react/test/e2e/fixture.ts +26 -0
- package/client-tmp/react/test/e2e/flows/001-protected.e2e.ts +6 -0
- package/client-tmp/react/test/e2e/index.ts +2 -0
- package/client-tmp/react/test/e2e/pages/index.ts +1 -0
- package/client-tmp/react/test/e2e/pages/protected.ts +16 -0
- package/client-tmp/react/tsconfig.node.json +1 -1
- package/client-tmp/react/vite.config.js +59 -0
- package/package.json +1 -1
- package/client-tmp/react/vite.config.ts +0 -14
- /package/client-tmp/react/src/pages/{auth → AuthPage}/AuthPage.css +0 -0
- /package/client-tmp/react/src/pages/{auth → AuthPage}/AuthPage.jsx +0 -0
package/.genx/package.json
CHANGED
|
@@ -4,23 +4,30 @@ const { resolve } = require('node:path');
|
|
|
4
4
|
const current = require('../versions.json');
|
|
5
5
|
|
|
6
6
|
const args = process.argv.slice(2);
|
|
7
|
-
const patchOnly = args.indexOf("--patch-only") >= 0;
|
|
8
|
-
const dryRun = args.indexOf("--dry-run") >= 0;
|
|
9
7
|
|
|
10
|
-
const
|
|
8
|
+
const argDefined = (name) => args.indexOf(name) >= 0;
|
|
9
|
+
|
|
10
|
+
const patchOnly = argDefined("--patch-only");
|
|
11
|
+
const dryRun = argDefined("--dry-run");
|
|
12
|
+
const skipServer = argDefined("--skip-server");
|
|
11
13
|
|
|
12
|
-
const
|
|
14
|
+
const VERSION_REGEX = /\d+$/;
|
|
15
|
+
const JFROG_BASE_EXCLUSIONS = '*-SNAPSHOT*;*maven-metadata*;*test*;*TEST*';
|
|
13
16
|
|
|
14
|
-
const
|
|
17
|
+
const { jfrogVersionMatcher, jfrogExclusionsMatcher, npmVersionMatcher } = patchOnly
|
|
18
|
+
? { jfrogVersionMatcher: current.GSF.replace(VERSION_REGEX, '*'), jfrogExclusionsMatcher: `*-beta*;*-RC*;${JFROG_BASE_EXCLUSIONS}`, npmVersionMatcher: current.UI.replace(VERSION_REGEX, 'x') }
|
|
19
|
+
: { jfrogVersionMatcher: undefined, jfrogExclusionsMatcher: JFROG_BASE_EXCLUSIONS, npmVersionMatcher: 'latest' };
|
|
15
20
|
|
|
16
|
-
console.log('Running with: ', {patchOnly, dryRun, npmVersionMatcher, jfrogVersionMatcher})
|
|
21
|
+
console.log('Running with: ', { patchOnly, skipServer, dryRun, npmVersionMatcher, jfrogVersionMatcher, jfrogExclusionsMatcher });
|
|
17
22
|
|
|
18
|
-
const run = (command) =>
|
|
19
|
-
|
|
23
|
+
const run = (command) => {
|
|
24
|
+
console.debug('running:', command);
|
|
25
|
+
return execSync(command, {
|
|
20
26
|
stdio: ['pipe', 'pipe', 'ignore'],
|
|
21
27
|
})
|
|
22
28
|
.toString('utf8')
|
|
23
29
|
.trim();
|
|
30
|
+
};
|
|
24
31
|
|
|
25
32
|
const writeJSON = (json, path) => {
|
|
26
33
|
const data = JSON.stringify(json, null, 2) + '\n';
|
|
@@ -32,15 +39,38 @@ const writeJSON = (json, path) => {
|
|
|
32
39
|
}
|
|
33
40
|
};
|
|
34
41
|
|
|
35
|
-
|
|
42
|
+
/**
|
|
43
|
+
* NPM Info returns a string if there's only one version in the channel;, otherwise it returns a valid json array,
|
|
44
|
+
* where the most recent version will be the last value;
|
|
45
|
+
* @param {*} output
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
const parseNpmInfo = (output) => {
|
|
49
|
+
try {
|
|
50
|
+
const versions = JSON.parse(output);
|
|
51
|
+
return Array.isArray(versions) ? versions[versions.length-1] : versions;
|
|
52
|
+
} catch (err) {
|
|
53
|
+
return output;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const npmInfo = run(`npm info @genesislcap/foundation-ui@${npmVersionMatcher} version --json`);
|
|
58
|
+
console.debug('Npm raw output:', npmInfo);
|
|
59
|
+
const UI = parseNpmInfo(npmInfo);
|
|
60
|
+
|
|
61
|
+
const serverOsCommandPipeline = `grep path | tr -s ' ' | sed 's/"path": //g' | awk -F'/' '{print $(NF-1)}' | sort -V | tail -n 1`;
|
|
36
62
|
|
|
37
|
-
const GSF =
|
|
38
|
-
|
|
39
|
-
|
|
63
|
+
const { GSF, Auth } = skipServer
|
|
64
|
+
? { GSF: current.GSF, Auth: current.Auth }
|
|
65
|
+
: {
|
|
66
|
+
GSF: run(
|
|
67
|
+
`jf rt s "libs-release-client/global/genesis/genesis-distribution/${jfrogVersionMatcher ?? ''}" --exclusions="${jfrogExclusionsMatcher}" | ${serverOsCommandPipeline}`
|
|
68
|
+
),
|
|
69
|
+
Auth: run(
|
|
70
|
+
`jf rt s "libs-release-client/global/genesis/auth-distribution/${jfrogVersionMatcher ?? ''}" --exclusions="${jfrogExclusionsMatcher}" | ${serverOsCommandPipeline}`,
|
|
71
|
+
)
|
|
72
|
+
};
|
|
40
73
|
|
|
41
|
-
const Auth = run(
|
|
42
|
-
`jf rt s "libs-release-client/global/genesis/auth-distribution/${jfrogVersionMatcher ?? ''}" --exclusions="*-RC*;*-SNAPSHOT*;*maven-metadata*;*test*;*TEST*" | grep path | tr -s ' ' | sed 's/"path": //g' | awk -F'/' '{print $(NF-1)}' | sort -V | tail -n 1`,
|
|
43
|
-
);
|
|
44
74
|
const latest = { UI, GSF, Auth };
|
|
45
75
|
|
|
46
76
|
console.log('Current:', current);
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
{{#if config.permissions.viewRight}}hasUserPermission('{{config.permissions.viewRight}}') ? ({{/if}}
|
|
1
2
|
<rapid-g2plot-chart
|
|
2
3
|
type="{{ config.type }}"
|
|
3
|
-
config={
|
|
4
|
+
config={chartConfig}
|
|
4
5
|
>
|
|
5
6
|
<chart-datasource
|
|
6
7
|
resourceName="{{ config.resourceName }}"
|
|
7
8
|
server-fields="{{ config.xField }} {{ config.yField }}"
|
|
8
9
|
></chart-datasource>
|
|
9
|
-
</rapid-g2plot-chart>
|
|
10
|
+
</rapid-g2plot-chart>{{#if config.permissions.viewRight}}
|
|
11
|
+
) : (
|
|
12
|
+
<ErrorMessage elementType="h3" message="You do not have access to view this component." />
|
|
13
|
+
){{/if}}
|
|
@@ -1,32 +1,40 @@
|
|
|
1
|
-
import { Component, Input, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
1
|
import { getUser } from '@genesislcap/foundation-user';
|
|
4
|
-
import { ErrorMessageComponent } from '../../../components/error-message/error-message.component';
|
|
5
2
|
import { getViewUpdateRightComponent } from '../../../utils';
|
|
6
|
-
|
|
7
|
-
import { GridOptionsConfig } from "@genesislcap/rapid-grid-pro";
|
|
8
|
-
{{/if}}
|
|
3
|
+
import ErrorMessage from '../../../components/ErrorMessage/ErrorMessage';
|
|
9
4
|
{{#if tile.config.createFormUiSchema}}
|
|
10
|
-
import { createFormSchema } from './{{kebabCase tile.title}}.create.form.schema';
|
|
5
|
+
import { createFormSchema as createFormSchemaTile } from './{{kebabCase tile.title}}.create.form.schema';
|
|
11
6
|
{{/if}}
|
|
12
7
|
{{#if tile.config.uischema}}
|
|
13
|
-
import { createFormSchema } from './{{kebabCase tile.title}}.create.form.schema';
|
|
8
|
+
import { createFormSchema as createFormSchemaTile } from './{{kebabCase tile.title}}.create.form.schema';
|
|
14
9
|
{{/if}}
|
|
15
10
|
{{#if tile.config.updateFormUiSchema}}
|
|
16
|
-
import { updateFormSchema } from './{{kebabCase tile.title}}.update.form.schema';
|
|
11
|
+
import { updateFormSchema as updateFormSchemaTile } from './{{kebabCase tile.title}}.update.form.schema';
|
|
17
12
|
{{/if}}
|
|
18
13
|
{{#if tile.config.columns}}
|
|
19
|
-
import { columnDefs } from './{{kebabCase tile.title}}.column.defs';
|
|
14
|
+
import { columnDefs as columnDefsTile } from './{{kebabCase tile.title}}.column.defs';
|
|
20
15
|
{{/if}}
|
|
21
16
|
{{#if tile.config.gridOptions}}
|
|
22
|
-
import { gridOptions } from './{{kebabCase tile.title}}.gridOptions';
|
|
17
|
+
import { gridOptions as gridOptionsTile } from './{{kebabCase tile.title}}.gridOptions';
|
|
23
18
|
{{/if}}
|
|
24
19
|
import './{{kebabCase tile.title}}.component.css';
|
|
25
20
|
|
|
26
|
-
const {{pascalCase tile.componentName}} = () => {
|
|
21
|
+
export const {{pascalCase tile.componentName}} = () => {
|
|
22
|
+
const hasUserPermission = (permissionCode) => getViewUpdateRightComponent(getUser(), permissionCode);{{#if tile.config.createFormUiSchema}}
|
|
23
|
+
const createFormSchema = createFormSchemaTile;{{/if}}{{#if tile.config.uischema}}
|
|
24
|
+
const uischema = createFormSchemaTile;{{/if}}{{#if tile.config.updateFormUiSchema}}
|
|
25
|
+
const updateFormSchema = updateFormSchemaTile;{{/if}}{{#if tile.config.columns}}
|
|
26
|
+
const columnDefs = columnDefsTile;{{/if}}{{#if tile.config.gridOptions}}
|
|
27
|
+
const gridOptions = gridOptionsTile;{{/if}}{{#if tile.config.reqrep}}
|
|
28
|
+
const reqrep = { pollingInterval: 5000 };{{/if}}{{#if tile.config.type}}
|
|
29
|
+
const chartConfig = { {{#ifEquals tile.config.type 'pie'}}
|
|
30
|
+
"radius": 0.75,
|
|
31
|
+
"angleField": "value",
|
|
32
|
+
"colorField": "groupBy",{{else}}
|
|
33
|
+
"xField": "groupBy",
|
|
34
|
+
"yField": "value",{{/ifEquals}}
|
|
35
|
+
};{{/if}}
|
|
36
|
+
|
|
27
37
|
return (
|
|
28
38
|
{{> (lookup tile 'type') tile}}
|
|
29
39
|
);
|
|
30
40
|
};
|
|
31
|
-
|
|
32
|
-
export default {{pascalCase tile.componentName}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './{{kebabCase tile.title}}.component';
|
|
1
|
+
export * from './{{kebabCase tile.title}}.component.jsx';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
{{#if config.permissions.viewRight}}hasUserPermission('{{config.permissions.viewRight}}') ? ({{/if}}
|
|
1
2
|
<entity-management
|
|
2
3
|
design-system-prefix="rapid"
|
|
3
4
|
enable-row-flashing
|
|
@@ -7,31 +8,34 @@
|
|
|
7
8
|
{{/if}}
|
|
8
9
|
resourceName="{{ config.resourceName }}"
|
|
9
10
|
{{#if config.createEvent}}
|
|
10
|
-
createEvent=
|
|
11
|
+
createEvent={hasUserPermission('{{config.permissions.updateRight}}') ? '{{ config.createEvent }}' : undefined}
|
|
11
12
|
{{#if config.createFormUiSchema}}
|
|
12
|
-
createFormUiSchema={
|
|
13
|
+
createFormUiSchema={createFormSchema}
|
|
13
14
|
{{/if}}
|
|
14
15
|
{{/if}}
|
|
15
16
|
{{#if config.updateEvent}}
|
|
16
|
-
updateEvent=
|
|
17
|
+
updateEvent={hasUserPermission('{{config.permissions.updateRight}}') ? '{{ config.updateEvent }}' : undefined}
|
|
17
18
|
{{#if config.updateFormUiSchema}}
|
|
18
|
-
updateFormUiSchema={
|
|
19
|
+
updateFormUiSchema={updateFormSchema}
|
|
19
20
|
{{/if}}
|
|
20
21
|
{{/if}}
|
|
21
22
|
{{#if config.deleteEvent}}
|
|
22
|
-
deleteEvent=
|
|
23
|
+
deleteEvent={hasUserPermission('{{config.permissions.updateRight}}') ? '{{ config.deleteEvent }}' : undefined}
|
|
23
24
|
{{/if}}
|
|
24
25
|
{{#if config.gridOptions}}
|
|
25
|
-
gridOptions={
|
|
26
|
+
gridOptions={gridOptions}
|
|
26
27
|
{{/if}}
|
|
27
28
|
{{#if config.snapshot}}
|
|
28
29
|
datasourceConfig={ isSnapshot: {{ config.snapshot }} }
|
|
29
30
|
{{/if}}
|
|
30
31
|
{{#if config.reqrep}}
|
|
31
|
-
datasourceConfig={
|
|
32
|
+
datasourceConfig={reqrep}
|
|
33
|
+
{{/if}}
|
|
34
|
+
{{#if config.entityName}}
|
|
35
|
+
entityLabel="{{ config.entityName }}"
|
|
32
36
|
{{/if}}
|
|
33
37
|
{{#if config.columns}}
|
|
34
|
-
columns={
|
|
38
|
+
columns={columnDefs}
|
|
35
39
|
{{/if}}
|
|
36
40
|
{{#if config.modalPosition}}
|
|
37
41
|
modal-position="{{ config.modalPosition }}"
|
|
@@ -42,4 +46,7 @@
|
|
|
42
46
|
{{#if config.enableSearchBar}}
|
|
43
47
|
enable-search-bar
|
|
44
48
|
{{/if}}
|
|
45
|
-
></entity-management>
|
|
49
|
+
></entity-management>{{#if config.permissions.viewRight}}
|
|
50
|
+
) : (
|
|
51
|
+
<ErrorMessage elementType="h3" message="You do not have access to view this component." />
|
|
52
|
+
){{/if}}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
{{#if config.permissions.updateRight}}hasUserPermission('{{config.permissions.updateRight}}') ? ({{/if}}
|
|
1
2
|
<foundation-form
|
|
2
3
|
design-system-prefix="rapid"
|
|
3
4
|
resourceName="{{config.resourceName}}"
|
|
4
5
|
{{#if config.uischema}}
|
|
5
|
-
uischema={
|
|
6
|
+
uischema={uischema}
|
|
6
7
|
{{/if}}
|
|
7
8
|
>
|
|
8
|
-
</foundation-form>
|
|
9
|
+
</foundation-form>{{#if config.permissions.updateRight}}
|
|
10
|
+
) : (
|
|
11
|
+
<ErrorMessage elementType="h3" message="You do not have access to view this component." />
|
|
12
|
+
){{/if}}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
{{#if config.permissions.viewRight}}hasUserPermission('{{config.permissions.viewRight}}') ? ({{/if}}
|
|
1
2
|
<rapid-grid-pro
|
|
3
|
+
header-case-type="capitalCase"{{#if config.useOnlyTemplateCols}}
|
|
4
|
+
only-template-col-defs{{/if}}
|
|
2
5
|
enable-row-flashing
|
|
3
6
|
enable-cell-flashing
|
|
4
7
|
>
|
|
@@ -8,11 +11,18 @@
|
|
|
8
11
|
isSnapshot="{{config.snapshot}}"
|
|
9
12
|
{{/if}}
|
|
10
13
|
{{#if config.reqrep}}
|
|
11
|
-
datasourceConfig=
|
|
14
|
+
datasourceConfig="reqrep"
|
|
12
15
|
{{/if}}
|
|
13
16
|
{{#if config.gridOptions}}
|
|
14
|
-
deferredGridOptions
|
|
17
|
+
deferredGridOptions=\{{ onRowClicked: gridOptions?.onRowClicked }}
|
|
15
18
|
{{/if}}
|
|
16
|
-
>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
></grid-pro-genesis-datasource>
|
|
20
|
+
{{#if config.gridOptions}}
|
|
21
|
+
{gridOptions?.columnDefs?.map((columnDef, index) => (
|
|
22
|
+
<grid-pro-column key={index} definition={columnDef}></grid-pro-column>
|
|
23
|
+
))}
|
|
24
|
+
{{/if}}
|
|
25
|
+
</rapid-grid-pro>{{#if config.permissions.viewRight}}
|
|
26
|
+
) : (
|
|
27
|
+
<ErrorMessage elementType="h3" message="You do not have access to view this component." />
|
|
28
|
+
){{/if}}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
<rapid-layout-region type="horizontal">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
2
|
+
<rapid-layout-region type="vertical">
|
|
3
|
+
{{#each route.tiles}}
|
|
4
|
+
{{#ifEquals @index 0}}
|
|
5
|
+
<rapid-layout-item title="{{../title}}">
|
|
6
|
+
<{{pascalCase ../componentName}}></{{pascalCase ../componentName}}>
|
|
7
|
+
</rapid-layout-item>
|
|
8
|
+
{{/ifEquals}}
|
|
9
|
+
{{#ifEquals @index 1}}
|
|
10
|
+
<rapid-layout-item title="{{../title}}">
|
|
11
|
+
<{{pascalCase ../componentName}}></{{pascalCase ../componentName}}>
|
|
12
|
+
</rapid-layout-item>
|
|
13
|
+
{{/ifEquals}}
|
|
14
|
+
{{/each}}
|
|
15
|
+
</rapid-layout-region>
|
|
16
|
+
<rapid-layout-region type="vertical">
|
|
17
|
+
{{#each route.tiles}}
|
|
18
|
+
{{#ifEquals @index 2}}
|
|
19
|
+
<rapid-layout-item title="{{../title}}">
|
|
20
|
+
<{{pascalCase ../componentName}}></{{pascalCase ../componentName}}>
|
|
21
|
+
</rapid-layout-item>
|
|
22
|
+
{{/ifEquals}}
|
|
23
|
+
{{#ifEquals @index 3}}
|
|
24
|
+
<rapid-layout-item title="{{../title}}">
|
|
25
|
+
<{{pascalCase ../componentName}}></{{pascalCase ../componentName}}>
|
|
26
|
+
</rapid-layout-item>
|
|
27
|
+
{{/ifEquals}}
|
|
28
|
+
{{/each}}
|
|
29
|
+
</rapid-layout-region>
|
|
30
30
|
</rapid-layout-region>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<rapid-layout-region>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
{{#each route.tiles}}
|
|
3
|
+
<rapid-layout-item title="{{this.title}}">
|
|
4
|
+
<{{pascalCase this.componentName}}></{{pascalCase this.componentName}}>
|
|
5
|
+
</rapid-layout-item>
|
|
6
|
+
{{/each}}
|
|
7
7
|
</rapid-layout-region>
|
|
@@ -1,28 +1,14 @@
|
|
|
1
1
|
import './{{pascalCase route.name}}.css';
|
|
2
|
+
{{#each route.tiles}}
|
|
3
|
+
import { {{pascalCase this.componentName}} } from './{{kebabCase this.title}}-{{this.componentType}}';
|
|
4
|
+
{{/each}}
|
|
2
5
|
|
|
3
6
|
const {{pascalCase route.name}} = () => {
|
|
4
|
-
{{#each route.tiles}}
|
|
5
|
-
const tile{{this.config.index}} = { {{#if this.config.createFormUiSchema}}
|
|
6
|
-
"createFormUiSchema": {{{ this.config.createFormUiSchema }}},{{/if}}{{#if this.config.updateFormUiSchema}}
|
|
7
|
-
"updateFormUiSchema": {{{ this.config.updateFormUiSchema }}},{{/if}}{{#if this.config.uischema}}
|
|
8
|
-
"uischema": {{{ this.config.uischema }}},{{/if}}{{#if this.config.gridOptions}}
|
|
9
|
-
"gridOptions": {{{ this.config.gridOptions }}},{{/if}}{{#if this.config.reqrep}}
|
|
10
|
-
"reqrep": {{{ this.config.reqrep }}},{{/if}}{{#if this.config.columns}}
|
|
11
|
-
"columns": {{{ this.config.columns }}},{{/if}}{{#if this.config.type}}
|
|
12
|
-
"chartConfig": { {{#ifEquals this.config.type 'pie'}}
|
|
13
|
-
"radius": 0.75,
|
|
14
|
-
"angleField": "value",
|
|
15
|
-
"colorField": "groupBy",{{else}}
|
|
16
|
-
"xField": "groupBy",
|
|
17
|
-
"yField": "value",{{/ifEquals}}
|
|
18
|
-
},{{/if}}
|
|
19
|
-
};
|
|
20
|
-
{{/each}}
|
|
21
7
|
|
|
22
8
|
return (
|
|
23
9
|
<section className="{{kebabCase route.name}}-page">
|
|
24
10
|
{{#if route.tiles}}
|
|
25
|
-
<rapid-layout auto-save-key="{{route.layoutKey}}">
|
|
11
|
+
<rapid-layout auto-save-key={process.env.NODE_ENV === 'production' ? "{{route.layoutKey}}" : null}>
|
|
26
12
|
{{> (lookup ./route 'layoutType') }}
|
|
27
13
|
</rapid-layout>
|
|
28
14
|
{{else}}
|
|
@@ -37,7 +37,7 @@ const formatRouteData = (framework, route) => {
|
|
|
37
37
|
...config,
|
|
38
38
|
index,
|
|
39
39
|
gridOptions: gridOptionsSerializer(gridOptions),
|
|
40
|
-
useOnlyTemplateCols: !!gridOptions?.
|
|
40
|
+
useOnlyTemplateCols: !!gridOptions?.columns,
|
|
41
41
|
createFormUiSchema: formatJSONValue(createFormUiSchema),
|
|
42
42
|
updateFormUiSchema: formatJSONValue(updateFormUiSchema),
|
|
43
43
|
uischema: formatJSONValue(uischema),
|
|
@@ -44,6 +44,7 @@ const getPathByFramework = {
|
|
|
44
44
|
},
|
|
45
45
|
[FRAMEWORK_REACT_ALIAS]: {
|
|
46
46
|
...defaultPathGetters,
|
|
47
|
+
index: (componentPath) => `${componentPath}/index.jsx`,
|
|
47
48
|
clientSrcPath: `../../client/src/pages`,
|
|
48
49
|
route: (clientSrcPath, tile, routeName) =>
|
|
49
50
|
`${clientSrcPath}/${routeName}/${tile.name}-${tile.componentType}`,
|
package/.genx/versions.json
CHANGED
|
@@ -36,7 +36,7 @@ rm -rf blankappseedtest && npx -y @genesislcap/genx@latest init blankappseedtest
|
|
|
36
36
|
### Route and CSV parameter handling test
|
|
37
37
|
|
|
38
38
|
```
|
|
39
|
-
rm -rf blankappseedtest && npx -y @genesislcap/genx@latest init blankappseedtest --ref %YOUR-BRANCH-NAME% --no-npm -x --routes '[{"name":"Home","tiles":[{"title":"Entity manager","type":"entity-manager","config":{ "modalPosition": "centre", "sizeColumnsToFit": true, "enableSearchBar": true, "resourceName":"ALL_POSITIONS","title":"My Positions","updateEvent":"EVENT_COUNTERPARTY_MODIFY","deleteEvent":"EVENT_COUNTERPARTY_DELETE","createEvent":"EVENT_COUNTERPARTY_INSERT", "createFormUiSchema": {"type":"VerticalLayout","elements":[{"type":"Control","label":"Inline create schema - main contact","scope":"#/properties/MAIN_CONTACT"},{"type":"Control","label":"Issuer Name - Local Schema","scope":"#/properties/ISSUER_NAME","options":{"readonly":true}},{"type":"Control","label":"Price","scope":"#/properties/PRICE"},{"type":"Control","scope":"#/properties/COUNTERPARTY","options":{"allOptionsResourceName":"ALL_COUNTERPARTYS","valueField":"COUNTERPARTY_ID","labelField":"COUNTERPARTY_ID"}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"isPassword":true}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"textarea":true}}]}, "updateFormUiSchema": {"type":"VerticalLayout","elements":[{"type":"Control","label":"Inline update schema - main contact","scope":"#/properties/MAIN_CONTACT"},{"type":"Control","label":"Issuer Name - Local Schema","scope":"#/properties/ISSUER_NAME","options":{"readonly":true}},{"type":"Control","label":"Price","scope":"#/properties/PRICE"},{"type":"Control","scope":"#/properties/COUNTERPARTY","options":{"allOptionsResourceName":"ALL_COUNTERPARTYS","valueField":"COUNTERPARTY_ID","labelField":"COUNTERPARTY_ID"}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"isPassword":true}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"textarea":true}}]}, "columns": [{"field":"INSTRUMENT_NAME","headerName":"Instrument Name"},{"field":"VALUE","headerName":"Inline coldef - VALUE"},{"field":"QUANTITY","headerName":"Quantity"},{"field":"PNL","headerName":"PNL"}] }},{"title":"Grid","type":"grid-pro","config":{"resourceName":"ALL_TRADES", "gridOptions": {"
|
|
39
|
+
rm -rf blankappseedtest && npx -y @genesislcap/genx@latest init blankappseedtest --ref %YOUR-BRANCH-NAME% --no-npm -x --routes '[{"name":"Home","tiles":[{"title":"Entity manager","type":"entity-manager","config":{ "modalPosition": "centre", "sizeColumnsToFit": true, "enableSearchBar": true, "resourceName":"ALL_POSITIONS","title":"My Positions","updateEvent":"EVENT_COUNTERPARTY_MODIFY","deleteEvent":"EVENT_COUNTERPARTY_DELETE","createEvent":"EVENT_COUNTERPARTY_INSERT", "createFormUiSchema": {"type":"VerticalLayout","elements":[{"type":"Control","label":"Inline create schema - main contact","scope":"#/properties/MAIN_CONTACT"},{"type":"Control","label":"Issuer Name - Local Schema","scope":"#/properties/ISSUER_NAME","options":{"readonly":true}},{"type":"Control","label":"Price","scope":"#/properties/PRICE"},{"type":"Control","scope":"#/properties/COUNTERPARTY","options":{"allOptionsResourceName":"ALL_COUNTERPARTYS","valueField":"COUNTERPARTY_ID","labelField":"COUNTERPARTY_ID"}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"isPassword":true}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"textarea":true}}]}, "updateFormUiSchema": {"type":"VerticalLayout","elements":[{"type":"Control","label":"Inline update schema - main contact","scope":"#/properties/MAIN_CONTACT"},{"type":"Control","label":"Issuer Name - Local Schema","scope":"#/properties/ISSUER_NAME","options":{"readonly":true}},{"type":"Control","label":"Price","scope":"#/properties/PRICE"},{"type":"Control","scope":"#/properties/COUNTERPARTY","options":{"allOptionsResourceName":"ALL_COUNTERPARTYS","valueField":"COUNTERPARTY_ID","labelField":"COUNTERPARTY_ID"}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"isPassword":true}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"textarea":true}}]}, "columns": [{"field":"INSTRUMENT_NAME","headerName":"Instrument Name"},{"field":"VALUE","headerName":"Inline coldef - VALUE"},{"field":"QUANTITY","headerName":"Quantity"},{"field":"PNL","headerName":"PNL"}] }},{"title":"Grid","type":"grid-pro","config":{"resourceName":"ALL_TRADES", "gridOptions": {"columns":[{"field":"INSTRUMENT_NAME","headerName":"Instrument Name"},{"field":"VALUE","headerName":"Inline coldef - VALUE"},{"field":"QUANTITY","headerName":"Quantity"},{"field":"PNL","headerName":"PNL"}]} }},{"title":"Form","type":"smart-form","config":{"resourceName":"EVENT_COUNTERPARTY_INSERT", "uischema": {"type":"VerticalLayout","elements":[{"type":"Control","label":"Inline form schema - main contact","scope":"#/properties/MAIN_CONTACT"},{"type":"Control","label":"Issuer Name - Local Schema","scope":"#/properties/ISSUER_NAME","options":{"readonly":true}},{"type":"Control","label":"Price","scope":"#/properties/PRICE"},{"type":"Control","scope":"#/properties/COUNTERPARTY","options":{"allOptionsResourceName":"ALL_COUNTERPARTYS","valueField":"COUNTERPARTY_ID","labelField":"COUNTERPARTY_ID"}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"isPassword":true}},{"type":"Control","label":"Password","scope":"#/properties/PASSWORD","options":{"textarea":true}}]} }}]}, {"name":"Realtime Dashboard","tiles":[{"title":"Entity manager tile","type":"entity-manager","config":{"resourceName":"ALL_COUNTERPARTYS","title":"Counterparty Management","updateEvent":"EVENT_COUNTERPARTY_MODIFY","deleteEvent":"EVENT_COUNTERPARTY_DELETE","createEvent":"EVENT_COUNTERPARTY_INSERT"}},{"title":"Form tile","type":"smart-form","config":{"resourceName":"EVENT_COUNTERPARTY_INSERT"}}]},{"name":"Analytics","tiles":[{"title":"Grid Tile","type":"grid-pro","config":{"resourceName":"ALL_POSITIONS"}},{"title":"Charts Tile 1","type":"chart","config":{"type":"line","resourceName":"ALL_POSITIONS","xField":"INSTRUMENT_NAME","yField":"VALUE"}},{"title":"Charts Tile 2","type":"chart","config":{"type":"pie","resourceName":"ALL_POSITIONS","xField":"INSTRUMENT_NAME","yField":"VALUE"}},{"title":"Charts Tile 3","type":"chart","config":{"type":"column","resourceName":"ALL_POSITIONS","xField":"INSTRUMENT_ID","yField":"VALUE"}}]}]' --csv '[{"name": "trade", "fields": ["a", "B"]}, {"name": "position", "fields": ["id", "TYPE"]} ]' --apiHost 'wss://public-foundation.genesislab.global/gwf/' --no-shell && cd blankappseedtest/client && npm run bootstrap && npm run dev
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
✅ **Checklist**
|
|
@@ -15,6 +15,7 @@ jobs:
|
|
|
15
15
|
genesisArtifactoryUser: ${{ secrets.JFROG_LIBS_RELEASE_CLIENT_RO_USER }}
|
|
16
16
|
genesisArtifactoryPassword: ${{ secrets.JFROG_LIBS_RELEASE_CLIENT_RO_KEY }}
|
|
17
17
|
USE_DOCKER: 1
|
|
18
|
+
GRADLE_PARAMS: ${{ github.base_ref == 'prerelease' && '-PuseDevRepo=true' || '' }}
|
|
18
19
|
runs-on: ubuntu-latest
|
|
19
20
|
steps:
|
|
20
21
|
- uses: actions/checkout@v4
|
|
@@ -46,7 +47,7 @@ jobs:
|
|
|
46
47
|
|
|
47
48
|
- name: Build sample app
|
|
48
49
|
working-directory: /tmp/testapp
|
|
49
|
-
run: ./gradlew build --info
|
|
50
|
+
run: ./gradlew ${GRADLE_PARAMS} build --info
|
|
50
51
|
|
|
51
52
|
- name: Lint UI
|
|
52
53
|
working-directory: /tmp/testapp/client
|
|
@@ -62,7 +63,7 @@ jobs:
|
|
|
62
63
|
|
|
63
64
|
- name: Create Server Dockerfile
|
|
64
65
|
working-directory: /tmp/testapp
|
|
65
|
-
run: ./gradlew :server:testapp-app:createDockerfile --info
|
|
66
|
+
run: ./gradlew ${GRADLE_PARAMS} :server:testapp-app:createDockerfile --info
|
|
66
67
|
|
|
67
68
|
- name: Build Docker images
|
|
68
69
|
working-directory: /tmp/testapp
|
|
@@ -11,6 +11,10 @@ on:
|
|
|
11
11
|
type: boolean
|
|
12
12
|
required: false
|
|
13
13
|
description: Only update if there are newer patch versions
|
|
14
|
+
skip-server:
|
|
15
|
+
type: boolean
|
|
16
|
+
required: false
|
|
17
|
+
description: Skip updating server dependencies
|
|
14
18
|
secrets:
|
|
15
19
|
GH_USER_TOKEN:
|
|
16
20
|
required: true
|
|
@@ -26,6 +30,7 @@ jobs:
|
|
|
26
30
|
env:
|
|
27
31
|
BRANCH: ${{ inputs.branch }}
|
|
28
32
|
PATCH_ARG: ${{ inputs.patch-only && '--patch-only' || '' }}
|
|
33
|
+
SKIP_SERVER_ARG: ${{ inputs.skip-server && '--skip-server' || '' }}
|
|
29
34
|
steps:
|
|
30
35
|
- uses: actions/checkout@v4
|
|
31
36
|
with:
|
|
@@ -47,7 +52,7 @@ jobs:
|
|
|
47
52
|
jfrog config add --artifactory-url="https://genesisglobal.jfrog.io/artifactory" --user="${{ secrets.JFROG_LIBS_RELEASE_CLIENT_RO_USER }}" --password="${{ secrets.JFROG_LIBS_RELEASE_CLIENT_RO_KEY }}" --interactive=false
|
|
48
53
|
|
|
49
54
|
- name: Update to latest versions if available
|
|
50
|
-
run: node .genx/scripts/update-versions ${PATCH_ARG}
|
|
55
|
+
run: node .genx/scripts/update-versions ${PATCH_ARG} ${SKIP_SERVER_ARG}
|
|
51
56
|
|
|
52
57
|
- name: Check for changes
|
|
53
58
|
id: versions
|