runlify 0.0.793 → 0.0.796
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/build/cli.js +8 -2
- package/build/projectsGeneration/builders/generationPaths.js +44 -1
- package/build/projectsGeneration/generateProject/back/src/generateBackSrc.js +11 -2
- package/build/projectsGeneration/generateProject/fileHandlers.js +6 -2
- package/build/projectsGeneration/generateProject/front/generateFrontSrc.js +10 -1
- package/build/projectsGeneration/generateProject/front/translations/generateFrontSrcTranslations.js +33 -1
- package/build/projectsGeneration/generateProject/generateBackClickHouseBootstrap.js +1 -4
- package/build/projectsGeneration/generateProject/utils.js +2 -2
- package/build/projectsGeneration/generators/fileTemplates/back/clickhouse/jobs.js +41 -4
- package/build/projectsGeneration/generators/fileTemplates/back/roles/customPermissions.js +12 -0
- package/build/projectsGeneration/generators/fileTemplates/back/roles/customUiPermissions.js +13 -0
- package/build/projectsGeneration/generators/fileTemplates/back/roles/initPermissions.js +31 -0
- package/build/projectsGeneration/generators/fileTemplates/back/roles/uiPermissions.js +24 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/NotFoundPage.js +6 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/PermissionPage.js +6 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/environment/src/routes.js +5 -5
- package/build/projectsGeneration/generators/fileTemplates/ui/getDefaultMenu.js +5 -1
- package/build/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nIndexTmpl.js +35 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nTypesTmpl.js +33 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nValidationTmpl.js +38 -0
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityCreate/DefaultEntityCreate.js +16 -5
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityEdit/DefaultEntityEdit.js +27 -11
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityList/DefaultEntityFilter.js +13 -4
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityList/DefaultEntityList.js +14 -7
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityShow/DefaultMainTab.js +13 -4
- package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityShow/DependencyTab.js +12 -3
- package/build/projectsGeneration/generators/fileTemplates/ui/resources.js +21 -8
- package/build/projectsGeneration/generators/fileTemplates/ui/utils/permissions.js +89 -0
- package/build/projectsGeneration/generators/ui/getShowComponent.js +2 -2
- package/build/types/projectsGeneration/builders/generationPaths.d.ts +42 -0
- package/build/types/projectsGeneration/generateProject/fileHandlers.d.ts +1 -0
- package/build/types/projectsGeneration/generateProject/types.d.ts +1 -1
- package/build/types/projectsGeneration/generateProject/utils.d.ts +1 -1
- package/build/types/projectsGeneration/generators/fileTemplates/back/roles/customPermissions.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/back/roles/customUiPermissions.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/back/roles/initPermissions.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/back/roles/uiPermissions.d.ts +3 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/NotFoundPage.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/PermissionPage.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nIndexTmpl.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nTypesTmpl.d.ts +3 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/i18n/skeleton/uiI18nValidationTmpl.d.ts +2 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/pages/EntityEdit/DefaultEntityEdit.d.ts +1 -0
- package/build/types/projectsGeneration/generators/fileTemplates/ui/utils/permissions.d.ts +2 -0
- package/docs/01-overview.md +172 -0
- package/docs/02-system-meta-builder.md +405 -0
- package/docs/03-entity-types.md +471 -0
- package/docs/04-fields.md +357 -0
- package/docs/05-custom-methods.md +249 -0
- package/docs/06-storage.md +129 -0
- package/docs/07-backend-file-graph.md +231 -0
- package/docs/08-frontend-file-graph.md +260 -0
- package/docs/09-options.md +213 -0
- package/docs/10-modules.md +164 -0
- package/docs/11-permissions.md +231 -0
- package/docs/INDEX.md +70 -0
- package/package.json +1 -1
package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityList/DefaultEntityList.js
CHANGED
|
@@ -45,12 +45,12 @@ const uiDefaultListTmpl = ({ allEntities, entity, }) => {
|
|
|
45
45
|
'List',
|
|
46
46
|
'DatagridConfigurable',
|
|
47
47
|
'ListProps',
|
|
48
|
-
|
|
48
|
+
'usePermissions',
|
|
49
49
|
// 'BulkDeleteButton',
|
|
50
50
|
...R.flatten(notDateFieldsToImport.map((f) => (0, getCompNamesToShowField_1.getCompNamesToShowField)(f))),
|
|
51
51
|
];
|
|
52
52
|
if (entity.removableByUser) {
|
|
53
|
-
reactAdminImports.push('
|
|
53
|
+
reactAdminImports.push('BulkDeleteButton');
|
|
54
54
|
}
|
|
55
55
|
const registrarDepended = ['infoRegistry', 'sumRegistry'].includes(entity.type) &&
|
|
56
56
|
'registrarDepended' in entity &&
|
|
@@ -69,8 +69,8 @@ import RegistrarField from '../../../../raUiLib/RegistrarField';`
|
|
|
69
69
|
? `
|
|
70
70
|
import {moneyMinorToMajor} from '../../../../uiLib/transformations/moneyAmount';`
|
|
71
71
|
: ''}
|
|
72
|
-
import ${(0, cases_1.pascalSingular)(entity.name)}Filter from './${(0, cases_1.pascalSingular)(entity.name)}Filter'
|
|
73
|
-
import {hasPermission} from '../../../../utils/permissions'
|
|
72
|
+
import ${(0, cases_1.pascalSingular)(entity.name)}Filter from './${(0, cases_1.pascalSingular)(entity.name)}Filter';
|
|
73
|
+
import {hasPermission} from '../../../../utils/permissions';
|
|
74
74
|
import ListActions from '../../../../raUiLib/ListActions';
|
|
75
75
|
import {BulkActionProps} from "shared/type";
|
|
76
76
|
import ${(0, cases_1.pascalSingular)(entity.name)}ListBreadcrumbs from './${(0, cases_1.pascalSingular)(entity.name)}ListBreadcrumbs';${withFileRef
|
|
@@ -88,6 +88,8 @@ const DefaultBulkActionButton = (props: BulkActionProps) => {
|
|
|
88
88
|
};
|
|
89
89
|
` : ''}
|
|
90
90
|
const Default${(0, cases_1.pascalSingular)(entity.name)}List: FC<ListProps> = (props: ListProps) => {
|
|
91
|
+
const {permissions} = usePermissions<string[]>();
|
|
92
|
+
|
|
91
93
|
return (
|
|
92
94
|
<>
|
|
93
95
|
<${(0, cases_1.pascalSingular)(entity.name)}ListBreadcrumbs />
|
|
@@ -100,13 +102,18 @@ const Default${(0, cases_1.pascalSingular)(entity.name)}List: FC<ListProps> = (p
|
|
|
100
102
|
{...props}
|
|
101
103
|
>
|
|
102
104
|
<DatagridConfigurable
|
|
103
|
-
rowClick='show'
|
|
105
|
+
rowClick={hasPermission(permissions, '${entity.name}.get') ? 'show' : false}
|
|
104
106
|
bulkActionButtons={${entity.removableByUser ? '<DefaultBulkActionButton />' : 'false'}}
|
|
105
107
|
>
|
|
106
108
|
${entity.fields
|
|
107
109
|
.filter((f) => !f.hidden)
|
|
108
110
|
.filter(f => f.showInList)
|
|
109
|
-
.map((f) =>
|
|
111
|
+
.map((f) => {
|
|
112
|
+
const comp = (0, getShowComponent_1.getShowComponent)(entity, allEntities, f, 'list');
|
|
113
|
+
return f.category === 'link'
|
|
114
|
+
? `{hasPermission(permissions, '${f.externalEntity}.all') && ${comp}}`
|
|
115
|
+
: comp;
|
|
116
|
+
})
|
|
110
117
|
.map(utils_1.pad5)
|
|
111
118
|
.join('\n')}${registrarDepended
|
|
112
119
|
? `
|
|
@@ -122,4 +129,4 @@ export default Default${(0, cases_1.pascalSingular)(entity.name)}List;
|
|
|
122
129
|
`;
|
|
123
130
|
};
|
|
124
131
|
exports.uiDefaultListTmpl = uiDefaultListTmpl;
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEVudGl0eUxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL2dlbmVyYXRvcnMvZmlsZVRlbXBsYXRlcy91aS9wYWdlcy9FbnRpdHlMaXN0L0RlZmF1bHRFbnRpdHlMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQTREO0FBQzVELHdHQUFrRztBQUNsRyx5Q0FBMEI7QUFDMUIsc0VBQWdFO0FBR2hFLGdEQUF5QztBQUN6Qyx3REFBc0Y7QUFDdEYseUNBQWdDO0FBRXpCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUNoQyxXQUFXLEVBQ1gsTUFBTSxHQUNtQixFQUFFLEVBQUU7SUFDN0IsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQWMsQ0FBQyxDQUFBO0lBQzFELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBRTVDLE1BQU0sb0JBQW9CLEdBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUE7SUFFM0UsTUFBTSxjQUFjLEdBQUc7UUFDckIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUNWLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUEsMkJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQyxD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
|
package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityShow/DefaultMainTab.js
CHANGED
|
@@ -37,6 +37,7 @@ const uiEntityShowDefaultMainTabTmpl = ({ allEntities, entity, }) => {
|
|
|
37
37
|
const reactAdminImports = [
|
|
38
38
|
'Tab',
|
|
39
39
|
'TabProps',
|
|
40
|
+
'usePermissions',
|
|
40
41
|
...R.flatten(notDateFieldsToImport.map((f) => (0, getCompNamesToShowField_1.getCompNamesToShowField)(f))),
|
|
41
42
|
];
|
|
42
43
|
return `import React, {FC} from 'react';
|
|
@@ -51,18 +52,26 @@ import DateField from '../../../../uiLib/DateField';`
|
|
|
51
52
|
? `
|
|
52
53
|
import {moneyMinorToMajor} from '../../../../uiLib/transformations/moneyAmount';`
|
|
53
54
|
: ''}
|
|
54
|
-
import {Grid} from 'shared/Components/Grid'
|
|
55
|
+
import {Grid} from 'shared/Components/Grid';
|
|
56
|
+
import {hasPermission} from '../../../../utils/permissions';${entity.fields.some(metaUtils_1.isMarkdownField) ? '\nimport ReactMarkdownField from \'../../../../uiLib/ReactMarkdownField\';' : ''}
|
|
55
57
|
|
|
56
58
|
const DefaultMainTab: FC<Omit<TabProps, 'children'>> = (props) => {
|
|
59
|
+
const {permissions} = usePermissions<string[]>();
|
|
60
|
+
|
|
57
61
|
return (<Tab {...props}>
|
|
58
62
|
<Grid container spacing={2}>
|
|
59
63
|
${entity.fields
|
|
60
64
|
.filter((f) => !f.hidden && f.showInShow)
|
|
61
|
-
.map((f) =>
|
|
65
|
+
.map((f) => {
|
|
66
|
+
const gridItem = `<Grid item ${(0, metaUtils_1.isMarkdownField)(f) ? 'xs={12} sm={12} md={12} lg={12}' : 'xs={12} sm={6} md={3} lg={2}'}>
|
|
62
67
|
<Labeled>
|
|
63
68
|
${(0, utils_1.pad2)((0, getShowComponent_1.getShowComponent)(entity, allEntities, f))}
|
|
64
69
|
</Labeled>
|
|
65
|
-
</Grid
|
|
70
|
+
</Grid>`;
|
|
71
|
+
return f.category === 'link'
|
|
72
|
+
? `{hasPermission(permissions, '${f.externalEntity}.all') && ${gridItem}}`
|
|
73
|
+
: gridItem;
|
|
74
|
+
})
|
|
66
75
|
.map(utils_1.pad3)
|
|
67
76
|
.join('\n')}
|
|
68
77
|
</Grid>
|
|
@@ -73,4 +82,4 @@ export default DefaultMainTab;
|
|
|
73
82
|
`;
|
|
74
83
|
};
|
|
75
84
|
exports.uiEntityShowDefaultMainTabTmpl = uiEntityShowDefaultMainTabTmpl;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdE1haW5UYWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL2dlbmVyYXRvcnMvZmlsZVRlbXBsYXRlcy91aS9wYWdlcy9FbnRpdHlTaG93L0RlZmF1bHRNYWluVGFiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0dBQWtHO0FBQ2xHLHlDQUEwQjtBQUMxQixzRUFBZ0U7QUFFaEUsZ0RBQStDO0FBQy9DLHdEQUF1RTtBQUVoRSxNQUFNLDhCQUE4QixHQUFHLENBQUMsRUFDN0MsV0FBVyxFQUNYLE1BQU0sR0FDbUIsRUFBRSxFQUFFO0lBQzdCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBQSwyQkFBZSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2SCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNyRCxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUN0QyxDQUFBO0lBQ0QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyx3QkFBWSxDQUFDLENBQUE7SUFDdkQsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUNqRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUFBO0lBQ0QsTUFBTSxpQkFBaUIsR0FBYTtRQUNsQyxLQUFLO1FBQ0wsVUFBVTtRQUNWLGdCQUFnQjtRQUVoQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQ1YscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGlEQUF1QixFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdEO0tBQ0YsQ0FBQTtJQUVELE9BQU87O0lBRUwsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztHQUN0RCxDQUFDOzt1QkFHQSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDO3FEQUM2QztRQUMvQyxDQUFDLENBQUMsRUFDTixHQUNFLGFBQWE7UUFDWCxDQUFDLENBQUM7aUZBQ3lFO1FBQzNFLENBQUMsQ0FBQyxFQUNOOzs4REFFNEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Ozs7OztFQU9uTCxNQUFNLENBQUMsTUFBTTtTQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDeEMsR0FBRyxDQUNGLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDSixNQUFNLFFBQVEsR0FBRyxjQUFjLElBQUEsMkJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLDhCQUE4Qjs7RUFFMUgsSUFBQSxZQUFJLEVBQUMsSUFBQSxtQ0FBZ0IsRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDOztRQUV4QyxDQUFBO1FBRUYsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU07WUFDMUIsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsY0FBYyxhQUFhLFFBQVEsR0FBRztZQUMxRSxDQUFDLENBQUMsUUFBUSxDQUFBO0lBQ2QsQ0FBQyxDQUNGO1NBQ0EsR0FBRyxDQUFDLFlBQUksQ0FBQztTQUNULElBQUksQ0FBQyxJQUFJLENBQUM7Ozs7OztDQU1aLENBQUE7QUFDRCxDQUFDLENBQUE7QUFyRVksUUFBQSw4QkFBOEIsa0NBcUUxQyJ9
|
package/build/projectsGeneration/generators/fileTemplates/ui/pages/EntityShow/DependencyTab.js
CHANGED
|
@@ -43,6 +43,7 @@ const uiEntityShowDependencyTabTmpl = (allEntities, entity, toLink, _options = t
|
|
|
43
43
|
const reactAdminImports = [
|
|
44
44
|
'TabProps',
|
|
45
45
|
'Tab',
|
|
46
|
+
'usePermissions',
|
|
46
47
|
...R.flatten(notDateFieldsToImport.map((f) => (0, getCompNamesToShowField_1.getCompNamesToShowField)(f))),
|
|
47
48
|
];
|
|
48
49
|
reactAdminImports.push('ReferenceManyField');
|
|
@@ -64,8 +65,11 @@ import DateField from '../../../../../uiLib/DateField';`
|
|
|
64
65
|
? `
|
|
65
66
|
import {moneyMinorToMajor} from '../../../../../uiLib/transformations/moneyAmount';`
|
|
66
67
|
: ''}
|
|
68
|
+
import {hasPermission} from '../../../../../utils/permissions';
|
|
67
69
|
|
|
68
70
|
const ${(0, cases_1.pascal)(entity.name)}${(0, cases_1.pascal)(toLink.fromField.name)}Tab: FC<Omit<TabProps, 'children'>> = (props) => {
|
|
71
|
+
const {permissions} = usePermissions<string[]>();
|
|
72
|
+
|
|
69
73
|
return (<Tab {...props}>
|
|
70
74
|
<ReferenceManyField
|
|
71
75
|
label={false}
|
|
@@ -75,12 +79,17 @@ const ${(0, cases_1.pascal)(entity.name)}${(0, cases_1.pascal)(toLink.fromField.
|
|
|
75
79
|
>
|
|
76
80
|
<Datagrid
|
|
77
81
|
bulkActionButtons={false}
|
|
78
|
-
rowClick='show'
|
|
82
|
+
rowClick={hasPermission(permissions, '${toLink.entityOwnerName}.get') ? 'show' : false}
|
|
79
83
|
>
|
|
80
84
|
${linkedEntity.fields
|
|
81
85
|
.filter((f) => !f.hidden)
|
|
82
86
|
.filter((f) => !(0, metaUtils_1.isMarkdownField)(f))
|
|
83
|
-
.map((f) =>
|
|
87
|
+
.map((f) => {
|
|
88
|
+
const comp = (0, getShowComponent_1.getShowComponent)(entity, allEntities, f);
|
|
89
|
+
return f.category === 'link'
|
|
90
|
+
? `{hasPermission(permissions, '${f.externalEntity}.all') && ${comp}}`
|
|
91
|
+
: comp;
|
|
92
|
+
})
|
|
84
93
|
.map(utils_1.pad4)
|
|
85
94
|
.join('\n')}
|
|
86
95
|
<ShowButton />
|
|
@@ -93,4 +102,4 @@ export default ${(0, cases_1.pascal)(entity.name)}${(0, cases_1.pascal)(toLink.f
|
|
|
93
102
|
`;
|
|
94
103
|
};
|
|
95
104
|
exports.uiEntityShowDependencyTabTmpl = uiEntityShowDependencyTabTmpl;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVRhYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm9qZWN0c0dlbmVyYXRpb24vZ2VuZXJhdG9ycy9maWxlVGVtcGxhdGVzL3VpL3BhZ2VzL0VudGl0eVNob3cvRGVwZW5kZW5jeVRhYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUk2QjtBQUM3Qix3R0FBa0c7QUFDbEcseUNBQTBCO0FBQzFCLHlEQUFvRDtBQUNwRCxzRUFBZ0U7QUFFaEUsZ0RBQW1EO0FBQ25ELHdEQUFzRTtBQUUvRCxNQUFNLDZCQUE2QixHQUFHLENBQzNDLFdBQWdDLEVBQ2hDLE1BQWMsRUFDZCxNQUFzQixFQUN0QixXQUFtQyxxQ0FBNkIsRUFDaEUsRUFBRTtJQUNGLE1BQU0sb0JBQW9CLEdBQWE7UUFDckMsTUFBTTtRQUNOLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztLQUN4QyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFhLENBQUE7SUFFeEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDOUIsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUEsMkJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRixDQUNGLENBQUE7SUFDRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNyRCxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUN0QyxDQUFBO0lBQ0QsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUNqRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUFBO0lBQ0QsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyx3QkFBWSxDQUFDLENBQUE7SUFDdkQsTUFBTSxpQkFBaUIsR0FBYTtRQUNsQyxVQUFVO1FBQ1YsS0FBSztRQUNMLGdCQUFnQjtRQUVoQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQ1YscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGlEQUF1QixFQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdEO0tBQ0YsQ0FBQTtJQUVELGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzVDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRXBDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTVELElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsTUFBTSxDQUFDLGVBQWUsVUFBVSxDQUFDLENBQUE7S0FDbEU7SUFFRCxPQUFPOztJQUVMLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztHQUM5QyxDQUFDO3VCQUVBLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUM7d0RBQ2dEO1FBQ2xELENBQUMsQ0FBQyxFQUNOLEdBQ0UsYUFBYTtRQUNYLENBQUMsQ0FBQztvRkFDNEU7UUFDOUUsQ0FBQyxDQUFDLEVBQ047OztRQUdNLElBQUEsY0FBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGNBQU0sRUFDaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3RCOzs7Ozs7bUJBTWdCLE1BQU0sQ0FBQyxlQUFlO2dCQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7O2dEQUtXLE1BQU0sQ0FBQyxlQUFlOztFQUVwRSxZQUFZLENBQUMsTUFBTTtTQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBQSwyQkFBZSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1QsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3JELE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxNQUFNO1lBQzFCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLGNBQWMsYUFBYSxJQUFJLEdBQUc7WUFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUNWLENBQUMsQ0FBQztTQUNELEdBQUcsQ0FBQyxZQUFJLENBQUM7U0FDVCxJQUFJLENBQUMsSUFBSSxDQUFDOzs7Ozs7O2lCQU9JLElBQUEsY0FBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGNBQU0sRUFBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztDQUNuRSxDQUFBO0FBQ0QsQ0FBQyxDQUFBO0FBaEdZLFFBQUEsNkJBQTZCLGlDQWdHekMifQ==
|
|
@@ -7,7 +7,8 @@ const imports = `import * as React from 'react';
|
|
|
7
7
|
import {Resource} from 'react-admin';
|
|
8
8
|
import {Translate} from 'shared/type';
|
|
9
9
|
import Loadable from '../shared/Loadable';
|
|
10
|
-
import {
|
|
10
|
+
import {withPermission} from '../utils/permissions';
|
|
11
|
+
import NotFoundPage from './NotFoundPage';`;
|
|
11
12
|
function uiResources(_options, chunks) {
|
|
12
13
|
const imports = chunks.map(num => `import {resourcesChunk${num}} from './resourcesChunk${num}';`).join("\n");
|
|
13
14
|
return `import {Translate} from 'shared/type';
|
|
@@ -30,6 +31,13 @@ function uiResourcesTmpl({ entities, options }) {
|
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
exports.uiResourcesTmpl = uiResourcesTmpl;
|
|
34
|
+
const isRequiredOnInput = (f) => f.requiredOnInput || f.requiredOnInput === null;
|
|
35
|
+
const isRequiredLinkField = (f) => !f.hidden && f.name !== 'id' && f.category === 'link' && isRequiredOnInput(f);
|
|
36
|
+
const getRequiredLinkPermissions = (entity, showIn) => entity.fields
|
|
37
|
+
.filter((f) => f[showIn])
|
|
38
|
+
.filter(isRequiredLinkField)
|
|
39
|
+
.map((f) => `${f.externalEntity}.all`);
|
|
40
|
+
const permissionsListLiteral = (permissions) => `[${permissions.map((p) => `'${p}'`).join(', ')}]`;
|
|
33
41
|
function genChunk(_options, num, entities) {
|
|
34
42
|
return `${imports}
|
|
35
43
|
|
|
@@ -41,18 +49,23 @@ const Loadable${(0, cases_1.pascalSingular)(m.name)}List = Loadable(() => import
|
|
|
41
49
|
|
|
42
50
|
export function resourcesChunk${num}(translate: Translate, permissions: string[]) {
|
|
43
51
|
return [
|
|
44
|
-
${entities.map((entity) =>
|
|
52
|
+
${entities.map((entity) => {
|
|
53
|
+
const editPermissions = [`${entity.name}.update`, ...getRequiredLinkPermissions(entity, 'showInEdit')];
|
|
54
|
+
const createPermissions = [`${entity.name}.create`, ...getRequiredLinkPermissions(entity, 'showInCreate')];
|
|
55
|
+
const listPermissions = [`${entity.name}.all`, `${entity.name}.meta`, `ui.${entity.name}.list`];
|
|
56
|
+
return ` <Resource
|
|
45
57
|
key='${entity.name}'
|
|
46
58
|
name='${entity.name}'
|
|
47
|
-
show={
|
|
48
|
-
edit={${entity.updatableByUser ? `
|
|
49
|
-
create={${entity.creatableByUser ? `
|
|
50
|
-
list={
|
|
59
|
+
show={withPermission(permissions, '${entity.name}.get', Loadable${(0, cases_1.pascalSingular)(entity.name)}Show)}
|
|
60
|
+
edit={${entity.updatableByUser ? `withPermission(permissions, ${permissionsListLiteral(editPermissions)}, Loadable${(0, cases_1.pascalSingular)(entity.name)}Edit)` : "NotFoundPage"}}
|
|
61
|
+
create={${entity.creatableByUser ? `withPermission(permissions, ${permissionsListLiteral(createPermissions)}, Loadable${(0, cases_1.pascalSingular)(entity.name)}Create)` : "NotFoundPage"}}
|
|
62
|
+
list={withPermission(permissions, ${permissionsListLiteral(listPermissions)}, Loadable${(0, cases_1.pascalSingular)(entity.name)}List)}
|
|
51
63
|
options={{label: translate('${(0, pluralize_1.plural)(entity.type)}.${entity.name}.title.singular')}}
|
|
52
64
|
recordRepresentation='${entity.titleField}'
|
|
53
|
-
|
|
65
|
+
/>,`;
|
|
66
|
+
}).join('\n')}
|
|
54
67
|
];
|
|
55
68
|
}
|
|
56
69
|
`.trimStart();
|
|
57
70
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb2plY3RzR2VuZXJhdGlvbi9nZW5lcmF0b3JzL2ZpbGVUZW1wbGF0ZXMvdWkvcmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFpQztBQUNqQyxtREFBdUQ7QUFLdkQsTUFBTSxPQUFPLEdBQUc7Ozs7OzJDQUsyQixDQUFBO0FBRTNDLFNBQVMsV0FBVyxDQUFDLFFBQWdDLEVBQUUsTUFBZ0I7SUFDckUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLHlCQUF5QixHQUFHLDJCQUEyQixHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RyxPQUFPO0VBQ1AsT0FBTzs7OztFQUlQLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7OztDQUdyRixDQUFDLFNBQVMsRUFBRSxDQUFBO0FBQ2IsQ0FBQztBQUdELFNBQWdCLGVBQWUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQTRCO0lBQzVFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE9BQU87UUFDTCxTQUFTLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxlQUFlLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQzNDLGVBQWUsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUM7S0FDN0MsQ0FBQTtBQUNILENBQUM7QUFSRCwwQ0FRQztBQUVELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFvQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFBO0FBRW5ILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFRLEVBQWtCLEVBQUUsQ0FDdkQsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRS9FLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsTUFBcUMsRUFBRSxFQUFFLENBQzNGLE1BQU0sQ0FBQyxNQUFNO0tBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEIsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0tBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsQ0FBQTtBQUUxQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsV0FBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7QUFFNUcsU0FBUyxRQUFRLENBQUMsUUFBZ0MsRUFBRSxHQUFXLEVBQUUsUUFBa0I7SUFDakYsT0FBTyxHQUFHLE9BQU87O0VBRWpCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2dCQUNySixJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDckksSUFBQSxzQkFBYyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBQSxzQkFBYyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsSCxJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFBLHNCQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7Q0FDL0gsQ0FBQzs7Z0NBRThCLEdBQUc7O0VBRWpDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUN0QixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUE7UUFDdEcsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7UUFDMUcsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFBO1FBRS9GLE9BQU87YUFDRSxNQUFNLENBQUMsSUFBSTtjQUNWLE1BQU0sQ0FBQyxJQUFJOzJDQUNrQixNQUFNLENBQUMsSUFBSSxrQkFBa0IsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Y0FDckYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsK0JBQStCLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUEsc0JBQWMsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYztnQkFDN0osTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsK0JBQStCLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLGFBQWEsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjOzBDQUN6SSxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxJQUFBLHNCQUFjLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQ0FDckYsSUFBQSxrQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSTs4QkFDeEMsTUFBTSxDQUFDLFVBQVU7UUFDdkMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7OztDQUdkLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDZCxDQUFDIn0=
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const uiPermissionsTmpl = () => `import {ComponentType} from 'react';
|
|
4
|
+
import PermissionPage from '../adm/PermissionPage';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const matchesPermission = (currentPermissions: string[], requiredPermission: string) => {
|
|
8
|
+
if (requiredPermission.endsWith('.*')) {
|
|
9
|
+
const prefix = requiredPermission.slice(0, -1);
|
|
10
|
+
return currentPermissions.some(permission => permission.startsWith(prefix));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return currentPermissions.includes(requiredPermission);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns true if \`currentPermissions\` satisfies \`requiredPermission\`.
|
|
18
|
+
*
|
|
19
|
+
* \`requiredPermission\` may end in \`.*\` (e.g. \`'foo.bar.*'\`) to match any permission from
|
|
20
|
+
* that family — satisfied if at least one current permission starts with \`'foo.bar.'\`.
|
|
21
|
+
* A plain string without the \`.*\` suffix is matched by exact equality.
|
|
22
|
+
*/
|
|
23
|
+
export const hasPermission = (currentPermissions: string[] | undefined, requiredPermission: string) => {
|
|
24
|
+
if (!currentPermissions || currentPermissions.length === 0) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return matchesPermission(currentPermissions, requiredPermission);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Returns true if \`currentPermissions\` satisfies at least one of \`requiredPermissions\`.
|
|
33
|
+
* An empty required list always passes.
|
|
34
|
+
*
|
|
35
|
+
* Any entry ending in \`.*\` (e.g. \`'foo.bar.*'\`) matches any permission from that family
|
|
36
|
+
* (at least one current permission starting with \`'foo.bar.'\`) instead of an exact string.
|
|
37
|
+
*/
|
|
38
|
+
export const hasAnyPermission = (currentPermissions: string[] | undefined, requiredPermissions: string[]) => {
|
|
39
|
+
if (requiredPermissions.length === 0) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!currentPermissions || currentPermissions.length === 0) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return requiredPermissions.some(permission => matchesPermission(currentPermissions, permission));
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if \`currentPermissions\` satisfies every one of \`requiredPermissions\`.
|
|
52
|
+
* An empty required list always passes.
|
|
53
|
+
*
|
|
54
|
+
* Any entry ending in \`.*\` (e.g. \`'foo.bar.*'\`) matches any permission from that family
|
|
55
|
+
* (at least one current permission starting with \`'foo.bar.'\`) instead of an exact string.
|
|
56
|
+
*/
|
|
57
|
+
export const hasAllPermissions = (currentPermissions: string[] | undefined, requiredPermissions: string[]) => {
|
|
58
|
+
if (!requiredPermissions || requiredPermissions.length === 0) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (!currentPermissions || currentPermissions.length === 0) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return requiredPermissions.every(permission => matchesPermission(currentPermissions, permission));
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns \`Component\` if \`currentPermissions\` satisfies all of \`requiredPermissions\`,
|
|
71
|
+
* otherwise returns \`PermissionPage\` (an access-denied fallback) — used so that a
|
|
72
|
+
* \`<Resource>\` prop is never \`undefined\`, keeping its route registered either way.
|
|
73
|
+
*
|
|
74
|
+
* Any entry ending in \`.*\` (e.g. \`'foo.bar.*'\`) matches any permission from that family
|
|
75
|
+
* (at least one current permission starting with \`'foo.bar.'\`) instead of an exact string.
|
|
76
|
+
*/
|
|
77
|
+
export const withPermission = <P extends object>(
|
|
78
|
+
currentPermissions: string[] | undefined,
|
|
79
|
+
requiredPermissions: string | string[],
|
|
80
|
+
Component: ComponentType<P>,
|
|
81
|
+
) => (
|
|
82
|
+
hasAllPermissions(
|
|
83
|
+
currentPermissions,
|
|
84
|
+
Array.isArray(requiredPermissions) ? requiredPermissions : [requiredPermissions],
|
|
85
|
+
) ? Component : PermissionPage
|
|
86
|
+
);
|
|
87
|
+
`;
|
|
88
|
+
exports.default = uiPermissionsTmpl;
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvamVjdHNHZW5lcmF0aW9uL2dlbmVyYXRvcnMvZmlsZVRlbXBsYXRlcy91aS91dGlscy9wZXJtaXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9GL0IsQ0FBQTtBQUVELGtCQUFlLGlCQUFpQixDQUFBIn0=
|
|
@@ -24,7 +24,7 @@ const getLinkShowComponent = (entity, allEntities, field, type) => {
|
|
|
24
24
|
if (type === 'list' && (0, metaUtils_1.isImageFileRef)(field)) {
|
|
25
25
|
return `<ImageViewField reference='${field.externalEntity}' source='${field.name}' ${(0, exports.getFieldLabel)(entity, field)} />`;
|
|
26
26
|
}
|
|
27
|
-
return `<ReferenceField source='${field.name}' ${(0, exports.getFieldLabel)(entity, field)} reference='${field.externalEntity}' link='show' />`;
|
|
27
|
+
return `<ReferenceField source='${field.name}' ${(0, exports.getFieldLabel)(entity, field)} reference='${field.externalEntity}' link={hasPermission(permissions, '${field.externalEntity}.get') ? 'show' : false} />`;
|
|
28
28
|
};
|
|
29
29
|
exports.getLinkShowComponent = getLinkShowComponent;
|
|
30
30
|
const getShowComponent = (entity, allEntities, field, type) => {
|
|
@@ -41,4 +41,4 @@ const getShowComponent = (entity, allEntities, field, type) => {
|
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
43
|
exports.getShowComponent = getShowComponent;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U2hvd0NvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm9qZWN0c0dlbmVyYXRpb24vZ2VuZXJhdG9ycy91aS9nZXRTaG93Q29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFnQztBQVFoQywrQ0FBNEQ7QUFDNUQsMkZBQXFGO0FBRTlFLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBYyxFQUFFLEtBQVksRUFBRSxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPO0lBQ3RGLENBQUMsQ0FBQywwQkFBMEIsSUFBQSxrQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxJQUFJLG1DQUFtQyxPQUFPLFFBQVE7SUFDckksQ0FBQyxDQUFDLFVBQVUsSUFBQSxrQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQTtBQUYzRCxRQUFBLGFBQWEsaUJBRThDO0FBRWpFLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsS0FBa0IsRUFBRSxFQUFFO0lBQzNFLE9BQU8sSUFBSSxJQUFBLGlEQUF1QixFQUFDLEtBQUssQ0FBQyxZQUN2QyxLQUFLLENBQUMsSUFDUixLQUFLLElBQUEscUJBQWEsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQy9CLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQzVDLEdBQ0UsSUFBQSx3QkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLENBQUMsRUFDekUsS0FBSyxDQUFBO0FBQ1AsQ0FBQyxDQUFBO0FBUlksUUFBQSxzQkFBc0IsMEJBUWxDO0FBRU0sTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUNuRSxPQUFPLElBQUksSUFBQSxpREFBdUIsRUFBQyxLQUFLLENBQUMsWUFDdkMsS0FBSyxDQUFDLElBQ1IsS0FBSyxJQUFBLHFCQUFhLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUE7QUFDeEMsQ0FBQyxDQUFBO0FBSlksUUFBQSxrQkFBa0Isc0JBSTlCO0FBRU0sTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxNQUFjLEVBQ2QsV0FBZ0MsRUFDaEMsS0FBZ0IsRUFDaEIsSUFBYSxFQUNiLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUUxRCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxjQUFjLFVBQVUsQ0FBQyxDQUFBO0tBQ2hFO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUEsMEJBQWMsRUFBQyxLQUFLLENBQUMsRUFBRTtRQUM1QyxPQUFPLDhCQUE4QixLQUFLLENBQUMsY0FBYyxhQUN2RCxLQUFLLENBQUMsSUFDUixLQUFLLElBQUEscUJBQWEsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQTtLQUN2QztJQUVELE9BQU8sMkJBQTJCLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBQSxxQkFBYSxFQUM1RCxNQUFNLEVBQ04sS0FBSyxDQUNOLGVBQWUsS0FBSyxDQUFDLGNBQWMsdUNBQXVDLEtBQUssQ0FBQyxjQUFjLDZCQUE2QixDQUFBO0FBQzlILENBQUMsQ0FBQTtBQXRCWSxRQUFBLG9CQUFvQix3QkFzQmhDO0FBRU0sTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixNQUFjLEVBQ2QsV0FBZ0MsRUFDaEMsS0FBWSxFQUNaLElBQWEsRUFDYixFQUFFO0lBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUMxQixRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLE1BQU07WUFDVCxPQUFPLElBQUEsNEJBQW9CLEVBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDL0QsS0FBSyxJQUFJO1lBQ1AsT0FBTyxJQUFBLDBCQUFrQixFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMxQyxLQUFLLFFBQVE7WUFDWCxPQUFPLElBQUEsOEJBQXNCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzlDO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFFBQVEsWUFBWSxDQUFDLENBQUE7S0FDdkQ7QUFDSCxDQUFDLENBQUE7QUFqQlksUUFBQSxnQkFBZ0Isb0JBaUI1QiJ9
|
|
@@ -68,6 +68,13 @@ export declare const GenerationPathCategory: {
|
|
|
68
68
|
readonly SharedGraphqlSchemaJson: "shared.generated.graphqlSchemaJson";
|
|
69
69
|
readonly BackConfig: "back.config";
|
|
70
70
|
readonly BackRestRouter: "back.rest.router";
|
|
71
|
+
readonly BackRolesInitPermissions: "back.roles.initPermissions";
|
|
72
|
+
readonly BackRolesUiPermissions: "back.roles.uiPermissions";
|
|
73
|
+
readonly BackRolesCustomPermissions: "back.roles.customPermissions";
|
|
74
|
+
readonly BackRolesCustomUiPermissions: "back.roles.customUiPermissions";
|
|
75
|
+
readonly UiPermissionPage: "ui.permissionPage";
|
|
76
|
+
readonly UiNotFoundPage: "ui.notFoundPage";
|
|
77
|
+
readonly UiPermissionsUtils: "ui.permissionsUtils";
|
|
71
78
|
readonly BackAdditionalServiceTypes: "back.additionalService.types";
|
|
72
79
|
readonly BackAdditionalServiceGraphTypeDefs: "back.additionalService.graph.typeDefs";
|
|
73
80
|
readonly BackAdditionalServiceGraphResolvers: "back.additionalService.graph.resolvers";
|
|
@@ -336,6 +343,41 @@ export declare const DEFAULT_GENERATION_PATHS: {
|
|
|
336
343
|
readonly defaultTemplate: "src/rest/restRouter.ts";
|
|
337
344
|
readonly params: readonly [];
|
|
338
345
|
};
|
|
346
|
+
readonly "back.roles.initPermissions": {
|
|
347
|
+
readonly root: "back";
|
|
348
|
+
readonly defaultTemplate: "src/init/roles/generated/initPermissions.ts";
|
|
349
|
+
readonly params: readonly [];
|
|
350
|
+
};
|
|
351
|
+
readonly "back.roles.uiPermissions": {
|
|
352
|
+
readonly root: "back";
|
|
353
|
+
readonly defaultTemplate: "src/init/roles/generated/uiPermissions.ts";
|
|
354
|
+
readonly params: readonly [];
|
|
355
|
+
};
|
|
356
|
+
readonly "back.roles.customPermissions": {
|
|
357
|
+
readonly root: "back";
|
|
358
|
+
readonly defaultTemplate: "src/init/roles/customPermissions.ts";
|
|
359
|
+
readonly params: readonly [];
|
|
360
|
+
};
|
|
361
|
+
readonly "back.roles.customUiPermissions": {
|
|
362
|
+
readonly root: "back";
|
|
363
|
+
readonly defaultTemplate: "src/init/roles/customUiPermissions.ts";
|
|
364
|
+
readonly params: readonly [];
|
|
365
|
+
};
|
|
366
|
+
readonly "ui.permissionPage": {
|
|
367
|
+
readonly root: "ui";
|
|
368
|
+
readonly defaultTemplate: "src/adm/PermissionPage.tsx";
|
|
369
|
+
readonly params: readonly [];
|
|
370
|
+
};
|
|
371
|
+
readonly "ui.notFoundPage": {
|
|
372
|
+
readonly root: "ui";
|
|
373
|
+
readonly defaultTemplate: "src/adm/NotFoundPage.tsx";
|
|
374
|
+
readonly params: readonly [];
|
|
375
|
+
};
|
|
376
|
+
readonly "ui.permissionsUtils": {
|
|
377
|
+
readonly root: "ui";
|
|
378
|
+
readonly defaultTemplate: "src/utils/permissions.ts";
|
|
379
|
+
readonly params: readonly [];
|
|
380
|
+
};
|
|
339
381
|
readonly "back.additionalService.types": {
|
|
340
382
|
readonly root: "back";
|
|
341
383
|
readonly defaultTemplate: "src/adm/services/{ServiceName}/types.ts";
|
|
@@ -3,6 +3,7 @@ import { FileHandler } from "./types";
|
|
|
3
3
|
export declare function disableEslintForCode(content: string): string;
|
|
4
4
|
export declare function addDoNotEditThisIsGeneratedFileForCode(content: string): string;
|
|
5
5
|
export declare function addDoNotEditThisIsGeneratedFileForYaml(content: string): string;
|
|
6
|
+
export declare function addGeneratedOnceNotice(content: string): string;
|
|
6
7
|
type addWarningsInput = {
|
|
7
8
|
options: BootstrapEntityOptions;
|
|
8
9
|
fileType?: 'code' | 'yaml';
|
|
@@ -6,6 +6,6 @@ export interface FileToCreate {
|
|
|
6
6
|
}
|
|
7
7
|
export type FileHandler = (content: string) => string;
|
|
8
8
|
export interface FileCreator {
|
|
9
|
-
createIfNotExists: (path: string, content: string) => void;
|
|
9
|
+
createIfNotExists: (path: string, content: string, handlers?: FileHandler[]) => void;
|
|
10
10
|
create: (path: string, content: string, handlers?: FileHandler[]) => void;
|
|
11
11
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FileHandler, FileToCreate } from './types';
|
|
2
2
|
export declare const createFilesToWriteUtils: () => {
|
|
3
3
|
create: (path: string, content: string, handlers?: FileHandler[]) => number;
|
|
4
|
-
createIfNotExists: (path: string, content: string) => number;
|
|
4
|
+
createIfNotExists: (path: string, content: string, handlers?: FileHandler[]) => number;
|
|
5
5
|
getFiles: () => FileToCreate[];
|
|
6
6
|
reset: () => never[];
|
|
7
7
|
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const validationMessageFields: readonly ["minLength", "maxLength", "minValue", "maxValue", "noSpaces", "noDigits", "password", "notFutureDate", "notPastDate", "required", "onlyLatinLetters", "onlyLatinLettersAndDigits", "onlyLatinLettersAndHyphen", "onlyLatinAndCyrillicLetters", "onlyLatinAndCyrillicLettersAndDigits", "onlyNumbers", "onlyLetters", "onlyIntegers", "exactLength", "datesInFilter", "emailFormat"];
|
|
2
|
+
export declare const uiI18nTypesTmpl: () => string;
|
|
3
|
+
export default uiI18nTypesTmpl;
|
|
@@ -10,5 +10,6 @@ export declare const getLinkArrayEditComponent: (entity: Entity, field: LinkFiel
|
|
|
10
10
|
source: string;
|
|
11
11
|
label: string;
|
|
12
12
|
}) => string;
|
|
13
|
+
export declare const getEditComponents: (entity: Entity, allEntities: Map<string, Entity>, field: Field, type: 'create' | 'edit' | 'filter', additionalProps?: string[]) => string[];
|
|
13
14
|
export declare const getEditComponent: (entity: Entity, allEntities: Map<string, Entity>, field: Field, type: 'create' | 'edit' | 'filter', additionalProps?: string[]) => string;
|
|
14
15
|
export declare const uiDefaultEditTmpl: ({ allEntities, entity, options, }: EntityWideGenerationArgs) => string;
|