@nu-art/permissions-frontend 0.400.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/PermissionKey_FE.d.ts +25 -0
  2. package/PermissionKey_FE.js +23 -0
  3. package/_entity/permission-access-level/ModuleFE_PermissionAccessLevel.d.ts +11 -0
  4. package/_entity/permission-access-level/ModuleFE_PermissionAccessLevel.js +12 -0
  5. package/_entity/permission-access-level/index.d.ts +2 -0
  6. package/_entity/permission-access-level/index.js +2 -0
  7. package/_entity/permission-access-level/module-pack.d.ts +1 -0
  8. package/_entity/permission-access-level/module-pack.js +2 -0
  9. package/_entity/permission-access-level/shared.d.ts +1 -0
  10. package/_entity/permission-access-level/shared.js +1 -0
  11. package/_entity/permission-access-level/ui-components.d.ts +37 -0
  12. package/_entity/permission-access-level/ui-components.js +21 -0
  13. package/_entity/permission-api/ModuleFE_PermissionAPI.d.ts +11 -0
  14. package/_entity/permission-api/ModuleFE_PermissionAPI.js +12 -0
  15. package/_entity/permission-api/index.d.ts +2 -0
  16. package/_entity/permission-api/index.js +2 -0
  17. package/_entity/permission-api/module-pack.d.ts +1 -0
  18. package/_entity/permission-api/module-pack.js +2 -0
  19. package/_entity/permission-api/shared.d.ts +1 -0
  20. package/_entity/permission-api/shared.js +1 -0
  21. package/_entity/permission-api/ui-components.d.ts +37 -0
  22. package/_entity/permission-api/ui-components.js +21 -0
  23. package/_entity/permission-domain/ModuleFE_PermissionDomain.d.ts +9 -0
  24. package/_entity/permission-domain/ModuleFE_PermissionDomain.js +10 -0
  25. package/_entity/permission-domain/index.d.ts +2 -0
  26. package/_entity/permission-domain/index.js +2 -0
  27. package/_entity/permission-domain/module-pack.d.ts +1 -0
  28. package/_entity/permission-domain/module-pack.js +2 -0
  29. package/_entity/permission-domain/shared.d.ts +1 -0
  30. package/_entity/permission-domain/shared.js +1 -0
  31. package/_entity/permission-domain/ui-components.d.ts +37 -0
  32. package/_entity/permission-domain/ui-components.js +21 -0
  33. package/_entity/permission-group/ModuleFE_PermissionGroup.d.ts +11 -0
  34. package/_entity/permission-group/ModuleFE_PermissionGroup.js +12 -0
  35. package/_entity/permission-group/index.d.ts +2 -0
  36. package/_entity/permission-group/index.js +2 -0
  37. package/_entity/permission-group/module-pack.d.ts +1 -0
  38. package/_entity/permission-group/module-pack.js +2 -0
  39. package/_entity/permission-group/shared.d.ts +1 -0
  40. package/_entity/permission-group/shared.js +1 -0
  41. package/_entity/permission-group/ui-components.d.ts +37 -0
  42. package/_entity/permission-group/ui-components.js +21 -0
  43. package/_entity/permission-project/ModuleFE_PermissionProject.d.ts +11 -0
  44. package/_entity/permission-project/ModuleFE_PermissionProject.js +12 -0
  45. package/_entity/permission-project/index.d.ts +2 -0
  46. package/_entity/permission-project/index.js +2 -0
  47. package/_entity/permission-project/module-pack.d.ts +1 -0
  48. package/_entity/permission-project/module-pack.js +2 -0
  49. package/_entity/permission-project/shared.d.ts +1 -0
  50. package/_entity/permission-project/shared.js +1 -0
  51. package/_entity/permission-project/ui-components.d.ts +37 -0
  52. package/_entity/permission-project/ui-components.js +21 -0
  53. package/_entity/permission-user/ModuleFE_PermissionUser.d.ts +11 -0
  54. package/_entity/permission-user/ModuleFE_PermissionUser.js +14 -0
  55. package/_entity/permission-user/index.d.ts +2 -0
  56. package/_entity/permission-user/index.js +2 -0
  57. package/_entity/permission-user/module-pack.d.ts +1 -0
  58. package/_entity/permission-user/module-pack.js +2 -0
  59. package/_entity/permission-user/shared.d.ts +1 -0
  60. package/_entity/permission-user/shared.js +1 -0
  61. package/_entity/permission-user/ui-components.d.ts +37 -0
  62. package/_entity/permission-user/ui-components.js +36 -0
  63. package/_entity.d.ts +12 -0
  64. package/_entity.js +18 -0
  65. package/consts.d.ts +4 -0
  66. package/consts.js +3 -0
  67. package/core/module-pack.d.ts +2 -0
  68. package/core/module-pack.js +29 -0
  69. package/core/permission-keys.d.ts +4 -0
  70. package/core/permission-keys.js +5 -0
  71. package/index.d.ts +5 -0
  72. package/index.js +23 -0
  73. package/modules/ModuleFE_PermissionsAssert.d.ts +32 -0
  74. package/modules/ModuleFE_PermissionsAssert.js +80 -0
  75. package/package.json +84 -0
  76. package/shared.d.ts +1 -0
  77. package/shared.js +19 -0
  78. package/ui/ATS_ComponentPermissionKeys/ATS_ComponentPermissionKeys.d.ts +11 -0
  79. package/ui/ATS_ComponentPermissionKeys/ATS_ComponentPermissionKeys.js +22 -0
  80. package/ui/ATS_ComponentPermissionKeys/permission-keys-editor.scss +153 -0
  81. package/ui/ATS_ComponentPermissionKeys/subEditors/Component_AccessLevelsEditor.d.ts +16 -0
  82. package/ui/ATS_ComponentPermissionKeys/subEditors/Component_AccessLevelsEditor.js +38 -0
  83. package/ui/ATS_ComponentPermissionKeys/subEditors/permission-keys-editor.d.ts +16 -0
  84. package/ui/ATS_ComponentPermissionKeys/subEditors/permission-keys-editor.js +33 -0
  85. package/ui/ATS_Permissions/ATS_Permissions.d.ts +8 -0
  86. package/ui/ATS_Permissions/ATS_Permissions.js +63 -0
  87. package/ui/ATS_Permissions/ATS_Permissions.scss +172 -0
  88. package/ui/Component_SwitchView.d.ts +23 -0
  89. package/ui/Component_SwitchView.js +32 -0
  90. package/ui/Component_SwitchViewV2.d.ts +21 -0
  91. package/ui/Component_SwitchViewV2.js +25 -0
  92. package/ui/PermissionsComponent.d.ts +21 -0
  93. package/ui/PermissionsComponent.js +42 -0
  94. package/ui/PermissionsEditableComponent.d.ts +18 -0
  95. package/ui/PermissionsEditableComponent.js +21 -0
  96. package/ui/Renderer_RoleNames.d.ts +1 -0
  97. package/ui/Renderer_RoleNames.js +7 -0
  98. package/ui/index.d.ts +8 -0
  99. package/ui/index.js +8 -0
  100. package/ui/permission-editors/components.d.ts +6 -0
  101. package/ui/permission-editors/components.js +9 -0
  102. package/ui/permission-editors/editor-base.d.ts +18 -0
  103. package/ui/permission-editors/editor-base.js +17 -0
  104. package/ui/permission-editors/editor-base.scss +298 -0
  105. package/ui/permission-editors/permission-api-edior/permission-api-editor.d.ts +16 -0
  106. package/ui/permission-editors/permission-api-edior/permission-api-editor.js +63 -0
  107. package/ui/permission-editors/permission-api-edior/permission-api-editor.scss +7 -0
  108. package/ui/permission-editors/permission-domains-editor.d.ts +9 -0
  109. package/ui/permission-editors/permission-domains-editor.js +139 -0
  110. package/ui/permission-editors/permission-groups-editor.d.ts +9 -0
  111. package/ui/permission-editors/permission-groups-editor.js +80 -0
  112. package/ui/permission-editors/permission-project-editor/permission-project-editor.scss +10 -0
  113. package/ui/permission-editors/permission-project-editor/permission-projects-editor.d.ts +10 -0
  114. package/ui/permission-editors/permission-project-editor/permission-projects-editor.js +52 -0
  115. package/ui/permission-editors/permission-users-editor.d.ts +9 -0
  116. package/ui/permission-editors/permission-users-editor.js +48 -0
  117. package/ui/ui-props.d.ts +16 -0
  118. package/ui/ui-props.js +62 -0
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { PermissionsComponent, Props_PermissionComponent } from './PermissionsComponent.js';
3
+ import { ResolvableContent } from '@nu-art/ts-common';
4
+ type Props = Props_PermissionComponent & {
5
+ forceLock?: boolean;
6
+ value?: ResolvableContent<React.ReactNode>;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ };
10
+ type State = {
11
+ forceLock?: boolean;
12
+ };
13
+ export declare class PermissionsEditableComponent extends PermissionsComponent<Props, State> {
14
+ protected deriveStateFromProps(nextProps: Props, state: State): State;
15
+ protected renderFallback: () => import("react/jsx-runtime").JSX.Element;
16
+ protected renderPermitted: () => import("react/jsx-runtime").JSX.Element;
17
+ }
18
+ export {};
@@ -0,0 +1,21 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { PermissionsComponent } from './PermissionsComponent.js';
3
+ import { _className } from '@nu-art/thunderstorm-frontend/index';
4
+ import { resolveContent } from '@nu-art/ts-common';
5
+ export class PermissionsEditableComponent extends PermissionsComponent {
6
+ deriveStateFromProps(nextProps, state) {
7
+ state.forceLock = nextProps.forceLock;
8
+ return state;
9
+ }
10
+ renderFallback = () => {
11
+ if (!this.props.value)
12
+ return _jsx(_Fragment, {});
13
+ const className = _className('permissions-editable__value', this.props.className);
14
+ return _jsx("div", { className: className, style: this.props.style, children: resolveContent(this.props.value) });
15
+ };
16
+ renderPermitted = () => {
17
+ if (this.props.forceLock)
18
+ return this.renderFallback();
19
+ return _jsx(_Fragment, { children: this.props.children });
20
+ };
21
+ }
@@ -0,0 +1 @@
1
+ export declare const Renderer_RoleNames: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { LL_V_L } from '@nu-art/thunderstorm-frontend/index';
3
+ import { SessionKey_Permissions_FE } from '../consts.js';
4
+ export const Renderer_RoleNames = () => {
5
+ const roles = SessionKey_Permissions_FE.get().roles;
6
+ return _jsx(LL_V_L, { className: 'container_role-names', children: roles.map(roleName => _jsx("div", { className: 'role-name', id: roleName.key, children: roleName.uiLabel })) });
7
+ };
package/ui/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './ATS_Permissions/ATS_Permissions.js';
2
+ export * from './ATS_ComponentPermissionKeys/ATS_ComponentPermissionKeys.js';
3
+ export * from './permission-editors/permission-domains-editor.js';
4
+ export * from './permission-editors/permission-project-editor/permission-projects-editor.js';
5
+ export * from './permission-editors/permission-groups-editor.js';
6
+ export * from './permission-editors/permission-users-editor.js';
7
+ export * from './PermissionsComponent.js';
8
+ export * from './PermissionsEditableComponent.js';
package/ui/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from './ATS_Permissions/ATS_Permissions.js';
2
+ export * from './ATS_ComponentPermissionKeys/ATS_ComponentPermissionKeys.js';
3
+ export * from './permission-editors/permission-domains-editor.js';
4
+ export * from './permission-editors/permission-project-editor/permission-projects-editor.js';
5
+ export * from './permission-editors/permission-groups-editor.js';
6
+ export * from './permission-editors/permission-users-editor.js';
7
+ export * from './PermissionsComponent.js';
8
+ export * from './PermissionsEditableComponent.js';
@@ -0,0 +1,6 @@
1
+ export declare const Input_Text_Blur: <K extends string, T extends import("@nu-art/ts-common").TS_Object & ({ [k in K]: string; })>(props: import("@nu-art/thunderstorm-frontend/components/TS_V2_Input/TS_InputV2").EditableItemProps_TS_InputV2<string, K, T>) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const Input_Number_Blur: <K extends string, T extends import("@nu-art/ts-common").TS_Object & ({ [k in K]: string; })>(props: import("@nu-art/thunderstorm-frontend/components/TS_V2_Input/TS_InputV2").EditableItemProps_TS_InputV2<string, K, T>) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const DropDownCaret: {
4
+ open: import("react/jsx-runtime").JSX.Element;
5
+ close: import("react/jsx-runtime").JSX.Element;
6
+ };
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { TS_InputV2 } from '@nu-art/thunderstorm-frontend/components/TS_V2_Input/index';
3
+ import { TS_Icons } from '@nu-art/ts-styles';
4
+ export const Input_Text_Blur = TS_InputV2.editable({ saveEvent: ['blur'], type: 'text' });
5
+ export const Input_Number_Blur = TS_InputV2.editable({ saveEvent: ['blur'], type: 'number' });
6
+ export const DropDownCaret = {
7
+ open: _jsx(TS_Icons.treeCollapse.component, {}),
8
+ close: _jsx(TS_Icons.treeCollapse.component, { className: 'flip' })
9
+ };
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { ModuleFE_BaseApi } from '@nu-art/thunderstorm-frontend/index';
3
+ import { DBProto } from '@nu-art/ts-common';
4
+ import './editor-base.scss';
5
+ import { TS_EditableContent } from '@nu-art/thunderstorm-frontend/components/TS_EditableContent/TS_EditableContent';
6
+ import { InferProps, InferState } from '@nu-art/thunderstorm-frontend';
7
+ import { EditableRef } from '@nu-art/thunderstorm-frontend/editable-item';
8
+ type ItemEditor_Props<T extends DBProto<any>> = EditableRef<T['uiType']> & {
9
+ displayResolver?: (item: T['dbType']) => string;
10
+ module?: ModuleFE_BaseApi<T>;
11
+ };
12
+ type ItemEditor_State<T extends DBProto<any>> = EditableRef<T['uiType']> & {};
13
+ export declare abstract class Component_BasePermissionItemEditor<Proto extends DBProto<any>, Props extends ItemEditor_Props<Proto> = ItemEditor_Props<Proto>, State extends ItemEditor_State<Proto> = ItemEditor_State<Proto>> extends TS_EditableContent<Proto, Props, State> {
14
+ protected deriveStateFromProps(nextProps: InferProps<this>, state: InferState<this>): InferState<this>;
15
+ abstract editorContent: () => React.ReactNode;
16
+ render(): "" | import("react/jsx-runtime").JSX.Element;
17
+ }
18
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LL_V_L } from '@nu-art/thunderstorm-frontend/index';
3
+ import './editor-base.scss';
4
+ import { TS_EditableContent } from '@nu-art/thunderstorm-frontend/components/TS_EditableContent/TS_EditableContent';
5
+ export class Component_BasePermissionItemEditor extends TS_EditableContent {
6
+ deriveStateFromProps(nextProps, state) {
7
+ super.deriveStateFromProps(nextProps, state);
8
+ state.editable.setOnChanged(async () => this.forceUpdate());
9
+ return state;
10
+ }
11
+ render() {
12
+ if (!this.state.editable)
13
+ return '';
14
+ const editable = this.state.editable;
15
+ return _jsxs(_Fragment, { children: [_jsx("div", { className: 'item-editor__header', children: editable.item._id ? this.props.displayResolver?.(editable.item) : `New ${this.props.module.dbDef.entityName}` }), _jsx(LL_V_L, { className: 'item-editor__main', children: this.editorContent() })] });
16
+ }
17
+ }
@@ -0,0 +1,298 @@
1
+ @use '@nu-art/ts-styles' as styles;
2
+
3
+ #dev-page__permissions .permissions-editor, .editor-content {
4
+ gap: 16px;
5
+
6
+ //TS Components Design
7
+ .ts-input {
8
+ width: 250px;
9
+ max-width: unset;
10
+ min-height: unset;
11
+ background: white;
12
+
13
+ &::placeholder {
14
+ font-size: 12px;
15
+ }
16
+ }
17
+
18
+ .ts-dropdown {
19
+ width: 250px;
20
+
21
+ .ts-tree__node {
22
+ font: {
23
+ size: 14px;
24
+ }
25
+ }
26
+
27
+ .ts-dropdown__header {
28
+ border-radius: 8px;
29
+ position: relative;
30
+ align-items: center;
31
+
32
+ .icon--wrapper {
33
+ width: 30px;
34
+ rotate: 90deg;
35
+
36
+ &.flip {
37
+ rotate: -90deg;
38
+ }
39
+ }
40
+ }
41
+
42
+ .ts-dropdown__items-container {
43
+ border: 2px solid styles.gray(1);
44
+ }
45
+
46
+ &.disabled {
47
+ opacity: 0.5;
48
+
49
+ .ts-dropdown__header {
50
+ background: styles.gray(6);
51
+ }
52
+ }
53
+ }
54
+
55
+ .ts-table {
56
+ .ts-table__body .ts-table__tr {
57
+ height: 40px;
58
+
59
+ .ts-table__td {
60
+ height: 40px;
61
+
62
+ .ts-input {
63
+ background: transparent;
64
+ border-radius: 0;
65
+ border: none;
66
+ width: 100%;
67
+ height: 40px;
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ //Editor Parts
74
+ .item-list {
75
+ height: 100%;
76
+ width: 300px;
77
+ flex-shrink: 0;
78
+ border: 2px solid black;
79
+ border-radius: 10px;
80
+ overflow: hidden;
81
+
82
+ .item-list__header {
83
+ height: 40px;
84
+ width: 100%;
85
+ border-bottom: 2px solid black;
86
+ background: styles.gray(3);
87
+ color: white;
88
+ display: grid;
89
+ place-content: center;
90
+ flex-shrink: 0;
91
+ font: {
92
+ size: 18px;
93
+ weight: bold;
94
+ }
95
+ }
96
+
97
+ .item-list__filter {
98
+ background: white;
99
+ width: 100%;
100
+ height: 30px;
101
+ border-bottom: 2px solid black;
102
+
103
+ .icon--wrapper {
104
+ width: 30px;
105
+ flex-shrink: 0;
106
+ }
107
+
108
+ .ts-input {
109
+ width: 0;
110
+ height: 100%;
111
+ flex-grow: 1;
112
+ border-radius: 0;
113
+ border: none;
114
+ outline: none !important;
115
+ }
116
+ }
117
+
118
+ .item-list__list {
119
+ height: 0;
120
+ flex-grow: 1;
121
+ width: 100%;
122
+ gap: 2px;
123
+ @include styles.customScrollbar('vertical', true);
124
+
125
+ .item-list__list-item {
126
+ width: 100%;
127
+ min-height: 30px;
128
+ padding: 8px;
129
+ display: flex;
130
+ flex-shrink: 0;
131
+ align-items: center;
132
+ background: styles.gray(4);
133
+ cursor: pointer;
134
+ font: {
135
+ size: 14px;
136
+ weight: bold;
137
+ }
138
+ white-space: pre-wrap;
139
+ color: white;
140
+
141
+ &.selected {
142
+ background: white;
143
+ color: styles.gray(2);
144
+ }
145
+ }
146
+ }
147
+
148
+ .item-list__add-button {
149
+ width: 100%;
150
+ margin: 0;
151
+ padding: 8px 0;
152
+ font: {
153
+ size: 16px;
154
+ weight: bold;
155
+ }
156
+ flex-shrink: 0;
157
+ border-radius: 0;
158
+ }
159
+ }
160
+
161
+ .item-editor {
162
+ height: 100%;
163
+ flex-grow: 1;
164
+ border: 2px solid black;
165
+ border-radius: 10px;
166
+ overflow: hidden;
167
+
168
+ .item-editor__header {
169
+ height: 40px;
170
+ width: 100%;
171
+ border-bottom: 2px solid black;
172
+ background: styles.gray(3);
173
+ color: white;
174
+ display: flex;
175
+ align-items: center;
176
+ padding: 0 16px;
177
+ font: {
178
+ size: 18px;
179
+ weight: bold;
180
+ }
181
+ flex-shrink: 0;
182
+ }
183
+
184
+ .item-editor__main {
185
+ height: 0;
186
+ flex-grow: 1;
187
+ width: 100%;
188
+ padding: 16px;
189
+ gap: 16px;
190
+
191
+ .ts-table .ts-table__td {
192
+ padding: 0;
193
+ }
194
+
195
+ .action-button {
196
+ width: 50px;
197
+ margin: 0;
198
+ padding: 0;
199
+ background: transparent;
200
+ min-width: 50px;
201
+
202
+ &.delete .icon--wrapper {
203
+ width: 32px;
204
+ height: 32px;
205
+ @include styles.mouse-interactive-icon(styles.red(4), styles.red(3), styles.red(2));
206
+ @include styles.set-svg-color-transition();
207
+ }
208
+
209
+ &.save .icon--wrapper {
210
+ width: 24px;
211
+ height: 24px;
212
+ @include styles.mouse-interactive-icon(styles.green(4), styles.green(3), styles.green(2));
213
+ }
214
+ }
215
+ }
216
+
217
+ .item-editor__buttons {
218
+ height: 50px;
219
+ width: 100%;
220
+ justify-content: flex-end;
221
+ flex-shrink: 0;
222
+ padding: 0 16px;
223
+ gap: 16px;
224
+
225
+ .ts-button, .ts-busy-button {
226
+ margin: 0;
227
+ }
228
+ }
229
+ }
230
+
231
+ .user-permission-groups {
232
+ width: 100%;
233
+ gap: 16px;
234
+
235
+ .ts-multi-select__list-value {
236
+ width: 150px;
237
+ height: 40px;
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+
242
+ position: relative;
243
+ border: 1px solid black;
244
+ border-radius: 4px;
245
+ font: {
246
+ size: 11px;
247
+ weight: bold;
248
+ }
249
+ overflow: hidden;
250
+ white-space: break-spaces;
251
+ text-align: center;
252
+
253
+ .icon--wrapper {
254
+ background: styles.red(4);
255
+ position: absolute;
256
+ top: 0;
257
+ right: 0;
258
+ height: 40px;
259
+ width: 30px;
260
+ padding: 8px;
261
+ transform: translateX(100%);
262
+ transition: transform 200ms ease-out;
263
+ cursor: pointer;
264
+ @include styles.mouse-interactive-icon(white);
265
+ }
266
+
267
+ &:hover {
268
+ .icon--wrapper {
269
+ transform: translateX(0);
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ #permission-editor-item-menu {
277
+ border: 1px solid styles.gray(1);
278
+ border-radius: 6px;
279
+
280
+ .ts-busy-button {
281
+ margin: 0;
282
+ background: transparent;
283
+ color: styles.gray(1);
284
+ font: {
285
+ size: 14px;
286
+ weight: normal;
287
+ }
288
+ padding-inline: 10px;
289
+
290
+ .ts-button-loader div {
291
+ background: styles.gray(1);
292
+ }
293
+
294
+ &:not(:last-child) {
295
+ border-bottom: 1px solid styles.gray(2);
296
+ }
297
+ }
298
+ }
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import { UniqueId } from '@nu-art/ts-common';
3
+ import { InferProps, InferState, TS_Route } from '@nu-art/thunderstorm-frontend/index';
4
+ import { Page_ItemsEditor, ProtoDef_Selection } from '@nu-art/thunderstorm-frontend/components/Page_ItemsEditor/index';
5
+ import './permission-api-editor.scss';
6
+ import { DBProto_PermissionAPI } from '@nu-art/permissions-shared';
7
+ type Props = {
8
+ projectId: UniqueId;
9
+ };
10
+ export declare class PermissionAPIEditor extends Page_ItemsEditor<DBProto_PermissionAPI, ProtoDef_Selection, Props> {
11
+ static Route: TS_Route;
12
+ static defaultProps: Partial<InferProps<PermissionAPIEditor>>;
13
+ protected deriveStateFromProps(nextProps: InferProps<this>, state: InferState<this>): InferState<this>;
14
+ protected renderHeader(): React.ReactNode;
15
+ }
16
+ export {};
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { ModuleFE_PermissionAccessLevel, ModuleFE_PermissionAPI, ModuleFE_PermissionDomain } from '../../../_entity.js';
3
+ import { Component_BasePermissionItemEditor } from '../editor-base.js';
4
+ import { sortArray } from '@nu-art/ts-common';
5
+ import { TS_PropRenderer } from '@nu-art/thunderstorm-frontend/index';
6
+ import { MultiSelect } from '../../ui-props.js';
7
+ import { TS_Icons } from '@nu-art/ts-styles';
8
+ import { Page_ItemsEditor } from '@nu-art/thunderstorm-frontend/components/Page_ItemsEditor/index';
9
+ import './permission-api-editor.scss';
10
+ import { TS_EditableItemControllerProto } from '@nu-art/thunderstorm-frontend/editable-item';
11
+ class Component_APIEditor extends Component_BasePermissionItemEditor {
12
+ static defaultProps = {
13
+ module: ModuleFE_PermissionAPI,
14
+ displayResolver: (item) => item.path
15
+ };
16
+ editorContent = () => {
17
+ const api = this.state.editable;
18
+ if (!api)
19
+ return;
20
+ return _jsxs(_Fragment, { children: [_jsx(TS_PropRenderer.Vertical, { label: 'Path', children: _jsx("div", { children: api.item.path }) }), _jsx(TS_PropRenderer.Vertical, { label: 'Access Levels', children: _jsx(MultiSelect.AccessLevel, { editable: api, prop: 'accessLevelIds', className: 'domain-level-list', itemRenderer: (levelId, onDelete) => {
21
+ const level = ModuleFE_PermissionAccessLevel.cache.unique(levelId);
22
+ const domain = ModuleFE_PermissionDomain.cache.unique(level.domainId);
23
+ return _jsxs("div", { className: 'domain-level-list__item', children: [_jsx(TS_Icons.x.component, { onClick: onDelete }), `${domain.namespace}: ${level.name} (${level.value})`] }, levelId);
24
+ } }) })] });
25
+ };
26
+ }
27
+ class Controller_ApiEditor extends TS_EditableItemControllerProto {
28
+ static defaultProps = {
29
+ module: ModuleFE_PermissionAPI,
30
+ editor: Component_APIEditor,
31
+ keys: ['selected'],
32
+ createInitialInstance: () => ({}),
33
+ autoSave: true
34
+ };
35
+ }
36
+ export class PermissionAPIEditor extends Page_ItemsEditor {
37
+ //######################### Static #########################
38
+ static Route = {
39
+ key: 'api-permission-editor',
40
+ path: 'api-permission-editor',
41
+ Component: this,
42
+ };
43
+ static defaultProps = {
44
+ keys: ['selected'],
45
+ module: ModuleFE_PermissionAPI,
46
+ mapper: api => [api.path],
47
+ sort: (items) => sortArray(items, 'path'),
48
+ id: 'api-permission-editor',
49
+ itemRenderer: api => _jsx(_Fragment, { children: api.path }),
50
+ EditorRenderer: (props) => _jsx(Controller_ApiEditor, { ...props }),
51
+ hideAddItem: true,
52
+ route: this.Route,
53
+ };
54
+ //######################### Lifecycle #########################
55
+ deriveStateFromProps(nextProps, state) {
56
+ state = super.deriveStateFromProps(nextProps, state);
57
+ state.filter = item => item.projectId === nextProps.projectId;
58
+ return state;
59
+ }
60
+ renderHeader() {
61
+ return _jsx(_Fragment, { children: "Permission APIs" });
62
+ }
63
+ }
@@ -0,0 +1,7 @@
1
+ #api-permission-editor {
2
+ height: 83%;
3
+
4
+ .items-editor__list {
5
+ height: 100%;
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { InferProps, TS_Route } from '@nu-art/thunderstorm-frontend/index';
3
+ import { Page_ItemsEditor } from '@nu-art/thunderstorm-frontend/components/Page_ItemsEditor/index';
4
+ import { DBProto_PermissionDomain } from '@nu-art/permissions-shared';
5
+ export declare class PermissionDomainsEditor extends Page_ItemsEditor<DBProto_PermissionDomain> {
6
+ static Route: TS_Route;
7
+ static defaultProps: Partial<InferProps<PermissionDomainsEditor>>;
8
+ protected renderHeader(): React.ReactNode;
9
+ }
@@ -0,0 +1,139 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, EditableDBItemV3, ModuleFE_Toaster, TS_PropRenderer, TS_Table } from '@nu-art/thunderstorm-frontend/index';
3
+ import { BadImplementationException, capitalizeFirstLetter, exists, sortArray, StaticLogger } from '@nu-art/ts-common';
4
+ import { TS_Icons } from '@nu-art/ts-styles';
5
+ import { ModuleFE_PermissionAccessLevel, ModuleFE_PermissionDomain, ModuleFE_PermissionProject } from '../../_entity.js';
6
+ import { Component_BasePermissionItemEditor } from './editor-base.js';
7
+ import { DropDownCaret, Input_Number_Blur, Input_Text_Blur } from './components.js';
8
+ import { DropDown_PermissionProject } from '../../_entity/permission-project/ui-components.js';
9
+ import { Page_ItemsEditor } from '@nu-art/thunderstorm-frontend/components/Page_ItemsEditor/index';
10
+ import { TS_EditableItemControllerProto } from '@nu-art/thunderstorm-frontend/components/TS_EditableItemControllerProto/index';
11
+ class Component_EditDomain extends Component_BasePermissionItemEditor {
12
+ static defaultProps = {
13
+ module: ModuleFE_PermissionDomain,
14
+ displayResolver: (item) => `${ModuleFE_PermissionProject.cache.unique(item.projectId).name}/${item.namespace}`
15
+ };
16
+ //######################### logic #########################
17
+ deleteLevel = async (editable) => {
18
+ try {
19
+ await editable.delete();
20
+ this.forceUpdate();
21
+ }
22
+ catch (err) {
23
+ this.logError({ ...err });
24
+ ModuleFE_Toaster.toastError(err.errorResponse.debugMessage.split('\n')[0]);
25
+ }
26
+ };
27
+ updateLevel = async (editable, prop, value) => {
28
+ if (editable.item._id) {
29
+ try {
30
+ await editable.updateObj({ [prop]: value });
31
+ return this.forceUpdate();
32
+ }
33
+ catch (err) {
34
+ return this.logError(err);
35
+ }
36
+ }
37
+ editable.set(prop, value);
38
+ editable.validate();
39
+ if (editable.hasValidationError())
40
+ return;
41
+ await editable.save();
42
+ this.forceUpdate();
43
+ };
44
+ getEmptyLevel() {
45
+ return {
46
+ domainId: this.state.editable?.item._id,
47
+ };
48
+ }
49
+ //######################### Render #########################
50
+ editorContent = () => {
51
+ const editable = this.state.editable;
52
+ return _jsxs(_Fragment, { children: [_jsx(TS_PropRenderer.Vertical, { label: 'Project', children: _jsx(DropDown_PermissionProject.editable, { editable: editable, prop: 'projectId', caret: DropDownCaret, disabled: !!editable.item._id }) }), _jsx(TS_PropRenderer.Vertical, { label: 'Namespace', children: _jsx(Input_Text_Blur, { editable: editable, prop: 'namespace' }) }), _jsx(TS_PropRenderer.Vertical, { label: 'Levels', children: this.renderLevelsTable() })] });
53
+ };
54
+ //######################### Render - levels #########################
55
+ renderLevelsTable = () => {
56
+ const domain = this.state.editable;
57
+ if (!domain)
58
+ return '';
59
+ let levels = ModuleFE_PermissionAccessLevel.cache.filter(level => level.domainId === domain.item._id);
60
+ levels = sortArray(levels, i => i.value);
61
+ levels.push(this.getEmptyLevel());
62
+ return _jsx(TS_Table, { header: ['name', 'value', { widthPx: 50, header: 'action' }], headerRenderer: header => header === 'action' ? '' : capitalizeFirstLetter(header), rows: levels, cellRenderer: this.levelsCellRenderer });
63
+ };
64
+ levelsCellRenderer = (prop, item, index) => {
65
+ const editable = new EditableDBItemV3(item, ModuleFE_PermissionAccessLevel)
66
+ .setAutoSave(true)
67
+ .setDebounceTimeout(0);
68
+ switch (prop) {
69
+ case 'name':
70
+ return this.renderLevelName(editable);
71
+ case 'value':
72
+ return this.renderLevelValue(editable);
73
+ case 'action':
74
+ return this.renderLevelAction(editable);
75
+ default:
76
+ throw new BadImplementationException(`No renderer defined for key ${prop}`);
77
+ }
78
+ };
79
+ renderLevelName = (editable) => {
80
+ return _jsx(Input_Text_Blur, { editable: editable, prop: 'name', value: editable.item.name, placeholder: 'Enter level name', onChange: value => this.updateLevel(editable, 'name', value) });
81
+ };
82
+ renderLevelValue = (editable) => {
83
+ return _jsx(Input_Number_Blur
84
+ // @ts-ignore
85
+ , {
86
+ // @ts-ignore
87
+ editable: editable, prop: 'value', value: exists(editable.item.value) ? String(editable.item.value) : undefined, placeholder: 'Enter level value', onChange: value => this.updateLevel(editable, 'value', Number(value)) });
88
+ };
89
+ renderLevelAction = (editable) => {
90
+ if (!editable.item._id)
91
+ return;
92
+ return _jsx(Button, { variant: 'dangerous', onClick: async () => await this.deleteLevel(editable), className: 'action-button delete', children: _jsx(TS_Icons.bin.component, {}) });
93
+ };
94
+ }
95
+ class Controller_DomainsEditor extends TS_EditableItemControllerProto {
96
+ static defaultProps = {
97
+ keys: ['selected'],
98
+ module: ModuleFE_PermissionDomain,
99
+ editor: Component_EditDomain,
100
+ createInitialInstance: () => ({}),
101
+ autoSave: true
102
+ };
103
+ }
104
+ export class PermissionDomainsEditor extends Page_ItemsEditor {
105
+ //######################### Static #########################
106
+ static Route = {
107
+ key: 'domain-permission-editor',
108
+ path: 'domain-permission-editor',
109
+ Component: this
110
+ };
111
+ static defaultProps = {
112
+ keys: ['selected'],
113
+ module: ModuleFE_PermissionDomain,
114
+ mapper: domain => [`${ModuleFE_PermissionProject.cache.unique(domain.projectId).name}/${domain.namespace}`],
115
+ sort: (items) => sortArray(items, domain => `${ModuleFE_PermissionProject.cache.unique(domain.projectId).name}/${domain.namespace}`),
116
+ itemRenderer: domain => _jsx(_Fragment, { children: `${ModuleFE_PermissionProject.cache.unique(domain.projectId).name}/${domain.namespace}` }),
117
+ EditorRenderer: Controller_DomainsEditor,
118
+ route: this.Route,
119
+ contextMenuActions: [
120
+ {
121
+ label: 'Delete Domain',
122
+ action: async (item) => {
123
+ try {
124
+ await ModuleFE_PermissionDomain.v1.delete(item).executeSync();
125
+ return true;
126
+ }
127
+ catch (err) {
128
+ StaticLogger.logError(err);
129
+ ModuleFE_Toaster.toastError(err.errorResponse.debugMessage.split('\n')[0]);
130
+ }
131
+ }
132
+ }
133
+ ]
134
+ };
135
+ //######################### Logic #########################
136
+ renderHeader() {
137
+ return _jsx(_Fragment, { children: "Permission Domain" });
138
+ }
139
+ }
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { InferProps, TS_Route } from '@nu-art/thunderstorm-frontend/index';
3
+ import { Page_ItemsEditor } from '@nu-art/thunderstorm-frontend/components/Page_ItemsEditor/index';
4
+ import { DBProto_PermissionGroup } from '@nu-art/permissions-shared';
5
+ export declare class PermissionGroupsEditor extends Page_ItemsEditor<DBProto_PermissionGroup> {
6
+ static Route: TS_Route;
7
+ static defaultProps: Partial<InferProps<PermissionGroupsEditor>>;
8
+ protected renderHeader(): React.ReactNode;
9
+ }