@webitel/ui-sdk 25.8.74 → 25.10.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/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.js +11 -3
- package/dist/ui-sdk.umd.cjs +40 -40
- package/package.json +2 -2
- package/src/api/clients/roles/roles.ts +0 -19
- package/src/components/on-demand/wt-display-chip-items/wt-display-chip-items.vue +21 -21
- package/src/components/wt-context-menu/wt-context-menu.vue +5 -0
- package/src/components/wt-popover/wt-popover.vue +0 -1
- package/src/modules/Userinfo/classes/ApplicationsAccess.js +32 -63
- package/src/modules/Userinfo/store/UserinfoStoreModule.js +2 -1
- package/src/modules/Userinfo/v2/stores/accessStore.ts +31 -21
- package/src/modules/Userinfo/v2/types/UserAccess.d.ts +24 -0
- package/src/plugins/primevue/primevue.scss +1 -0
- package/src/plugins/primevue/theme/components/popover/popover.scss +5 -0
- package/types/components/wt-context-menu/wt-context-menu.vue.d.ts +2 -0
- package/types/modules/Userinfo/classes/ApplicationsAccess.d.ts +371 -3
- package/types/modules/Userinfo/v2/stores/accessStore.d.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webitel/ui-sdk",
|
|
3
|
-
"version": "25.
|
|
3
|
+
"version": "25.10.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"make-all": "npm version patch --git-tag-version false && npm run build && (npm run build:types || true) && (npm run lint:fix || true) && npm run publish-lib",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@vuelidate/validators": "^2.0.4",
|
|
56
56
|
"@vuepic/vue-datepicker": "^4.5.1",
|
|
57
57
|
"@vueuse/components": "^13.0.0",
|
|
58
|
-
"@webitel/api-services": "^0.0.
|
|
58
|
+
"@webitel/api-services": "^0.0.42",
|
|
59
59
|
"@webitel/styleguide": "^24.12.59",
|
|
60
60
|
"autosize": "^6.0.1",
|
|
61
61
|
"axios": "^1.8.3",
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import deepCopy from 'deep-copy';
|
|
2
1
|
import { RolesApiFactory } from 'webitel-sdk';
|
|
3
2
|
|
|
4
|
-
import ApplicationsAccess from '../../../modules/Userinfo/classes/ApplicationsAccess.js';
|
|
5
3
|
import {
|
|
6
4
|
getDefaultGetListResponse,
|
|
7
5
|
getDefaultGetParams,
|
|
@@ -25,12 +23,6 @@ const rolesApiFactory = RolesApiFactory(configuration, '', instance);
|
|
|
25
23
|
|
|
26
24
|
const fieldsToSend = ['name', 'description', 'permissions', 'metadata'];
|
|
27
25
|
|
|
28
|
-
const preRequestHandler = (item) => {
|
|
29
|
-
const copy = deepCopy(item);
|
|
30
|
-
copy.metadata.access = ApplicationsAccess.minify(copy.metadata.access);
|
|
31
|
-
return copy;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
26
|
const getRoleList = async (params) => {
|
|
35
27
|
const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id'];
|
|
36
28
|
|
|
@@ -79,20 +71,11 @@ const getRole = async ({ itemId: id }) => {
|
|
|
79
71
|
metadata: {},
|
|
80
72
|
};
|
|
81
73
|
|
|
82
|
-
const itemResponseHandler = (response) => {
|
|
83
|
-
const copy = deepCopy(response);
|
|
84
|
-
copy.metadata.access = new ApplicationsAccess({
|
|
85
|
-
access: copy.metadata.access,
|
|
86
|
-
}).getAccess();
|
|
87
|
-
return copy;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
74
|
try {
|
|
91
75
|
const response = await rolesApiFactory.readRole(id, fieldsToSend);
|
|
92
76
|
return applyTransform(response.data, [
|
|
93
77
|
// snakeToCamel(), // prevent role "access" custom lookups from being converted to camelCase
|
|
94
78
|
merge(defaultObject),
|
|
95
|
-
itemResponseHandler,
|
|
96
79
|
]);
|
|
97
80
|
} catch (err) {
|
|
98
81
|
throw applyTransform(err, [notify]);
|
|
@@ -101,7 +84,6 @@ const getRole = async ({ itemId: id }) => {
|
|
|
101
84
|
|
|
102
85
|
const addRole = async ({ itemInstance }) => {
|
|
103
86
|
const item = applyTransform(itemInstance, [
|
|
104
|
-
preRequestHandler,
|
|
105
87
|
sanitize(fieldsToSend),
|
|
106
88
|
camelToSnake(),
|
|
107
89
|
]);
|
|
@@ -117,7 +99,6 @@ const addRole = async ({ itemInstance }) => {
|
|
|
117
99
|
|
|
118
100
|
const updateRole = async ({ itemInstance, itemId: id }) => {
|
|
119
101
|
const item = applyTransform(itemInstance, [
|
|
120
|
-
preRequestHandler,
|
|
121
102
|
sanitize(fieldsToSend),
|
|
122
103
|
camelToSnake(),
|
|
123
104
|
]);
|
|
@@ -6,28 +6,28 @@
|
|
|
6
6
|
{{ displayText(firstItemName) }}
|
|
7
7
|
</slot>
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
<wt-popover>
|
|
10
|
+
<template #activator="{ toggle }">
|
|
11
|
+
<slot name="activator" :toggle="toggle">
|
|
12
|
+
<div v-if="displayList.length" @click="toggle">
|
|
13
|
+
<wt-chip>
|
|
14
|
+
+{{ displayList.length }}
|
|
15
|
+
</wt-chip>
|
|
16
|
+
</div>
|
|
17
|
+
</slot>
|
|
18
|
+
</template>
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
<template #default>
|
|
21
|
+
<slot name="items" :items="displayList">
|
|
22
|
+
<div
|
|
23
|
+
v-for="({ name, id }) of displayList"
|
|
24
|
+
:key="id"
|
|
25
|
+
>
|
|
26
|
+
{{ name }}
|
|
27
|
+
</div>
|
|
28
|
+
</slot>
|
|
29
|
+
</template>
|
|
30
|
+
</wt-popover>
|
|
31
31
|
</div>
|
|
32
32
|
</template>
|
|
33
33
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
<wt-popover
|
|
4
4
|
:visible="visible"
|
|
5
5
|
:disabled="disabled"
|
|
6
|
+
:pt="pt"
|
|
6
7
|
unstyled
|
|
7
8
|
placement="bottom-end"
|
|
8
9
|
class="wt-context-menu__floating-wrapper"
|
|
@@ -71,6 +72,10 @@ const props = defineProps({
|
|
|
71
72
|
type: Boolean,
|
|
72
73
|
default: false,
|
|
73
74
|
},
|
|
75
|
+
pt: {
|
|
76
|
+
type: Object,
|
|
77
|
+
default: () => null,
|
|
78
|
+
},
|
|
74
79
|
tooltipTriggers: {
|
|
75
80
|
type: Array,
|
|
76
81
|
default: () => ['click', 'touch'],
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AdjunctTypesAPI as CustomTypesAPI } from '@webitel/api-services/api';
|
|
1
2
|
import deepCopy from 'deep-copy';
|
|
2
3
|
import deepmerge from 'deepmerge';
|
|
3
4
|
|
|
@@ -16,242 +17,182 @@ import WebitelApplications from '../../../enums/WebitelApplications/WebitelAppli
|
|
|
16
17
|
const applicationsAccess = (value = true) => ({
|
|
17
18
|
[WebitelApplications.AGENT]: {
|
|
18
19
|
_enabled: value,
|
|
19
|
-
_locale: `WebitelApplications.${WebitelApplications.AGENT}.name`,
|
|
20
20
|
},
|
|
21
21
|
[WebitelApplications.HISTORY]: {
|
|
22
22
|
_enabled: value,
|
|
23
|
-
_locale: `WebitelApplications.${WebitelApplications.HISTORY}.name`,
|
|
24
23
|
},
|
|
25
24
|
[WebitelApplications.ANALYTICS]: {
|
|
26
25
|
_enabled: value,
|
|
27
|
-
_locale: `WebitelApplications.${WebitelApplications.ANALYTICS}.name`,
|
|
28
26
|
},
|
|
29
27
|
[WebitelApplications.SUPERVISOR]: {
|
|
30
28
|
_enabled: value,
|
|
31
|
-
_locale: `WebitelApplications.${WebitelApplications.SUPERVISOR}.name`,
|
|
32
29
|
[SupervisorSections.QUEUES]: {
|
|
33
30
|
_enabled: value,
|
|
34
|
-
_locale: `WebitelApplications.${WebitelApplications.SUPERVISOR}.sections.${SupervisorSectionsNew.Queues}`,
|
|
35
31
|
},
|
|
36
32
|
[SupervisorSections.AGENTS]: {
|
|
37
33
|
_enabled: value,
|
|
38
|
-
_locale: `WebitelApplications.${WebitelApplications.SUPERVISOR}.sections.${SupervisorSectionsNew.Agents}`,
|
|
39
34
|
},
|
|
40
35
|
[SupervisorSections.ACTIVE_CALLS]: {
|
|
41
36
|
_enabled: value,
|
|
42
|
-
_locale: `WebitelApplications.${WebitelApplications.SUPERVISOR}.sections.${SupervisorSectionsNew.ActiveCalls}`,
|
|
43
37
|
},
|
|
44
38
|
},
|
|
45
39
|
[WebitelApplications.ADMIN]: {
|
|
46
40
|
_enabled: value,
|
|
47
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.name`,
|
|
48
41
|
[AdminSections.LICENSE]: {
|
|
49
42
|
_enabled: value,
|
|
50
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.License}`,
|
|
51
43
|
},
|
|
52
44
|
[AdminSections.USERS]: {
|
|
53
45
|
_enabled: value,
|
|
54
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Users}`,
|
|
55
46
|
},
|
|
56
47
|
[AdminSections.DEVICES]: {
|
|
57
48
|
_enabled: value,
|
|
58
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Devices}`,
|
|
59
49
|
},
|
|
60
50
|
[AdminSections.FLOW]: {
|
|
61
51
|
_enabled: value,
|
|
62
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Flow}`,
|
|
63
52
|
},
|
|
64
53
|
[AdminSections.DIALPLAN]: {
|
|
65
54
|
_enabled: value,
|
|
66
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Dialplan}`,
|
|
67
55
|
},
|
|
68
56
|
[AdminSections.GATEWAYS]: {
|
|
69
57
|
_enabled: value,
|
|
70
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Gateways}`,
|
|
71
58
|
},
|
|
72
59
|
[AdminSections.CHATPLAN]: {
|
|
73
60
|
_enabled: value,
|
|
74
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Chatplan}`,
|
|
75
61
|
},
|
|
76
62
|
[AdminSections.CHAT_GATEWAYS]: {
|
|
77
63
|
_enabled: value,
|
|
78
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.ChatGateways}`,
|
|
79
64
|
},
|
|
80
65
|
[AdminSections.SKILLS]: {
|
|
81
66
|
_enabled: value,
|
|
82
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Skills}`,
|
|
83
67
|
},
|
|
84
68
|
[AdminSections.BUCKETS]: {
|
|
85
69
|
_enabled: value,
|
|
86
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Buckets}`,
|
|
87
70
|
},
|
|
88
71
|
[AdminSections.BLACKLIST]: {
|
|
89
72
|
_enabled: value,
|
|
90
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Blacklist}`,
|
|
91
73
|
},
|
|
92
74
|
[AdminSections.REGIONS]: {
|
|
93
75
|
_enabled: value,
|
|
94
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Regions}`,
|
|
95
76
|
},
|
|
96
77
|
[AdminSections.CALENDARS]: {
|
|
97
78
|
_enabled: value,
|
|
98
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Calendars}`,
|
|
99
79
|
},
|
|
100
80
|
[AdminSections.COMMUNICATIONS]: {
|
|
101
81
|
_enabled: value,
|
|
102
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Communications}`,
|
|
103
82
|
},
|
|
104
83
|
[AdminSections.PAUSE_CAUSE]: {
|
|
105
84
|
_enabled: value,
|
|
106
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.PauseCause}`,
|
|
107
85
|
},
|
|
108
86
|
[AdminSections.MEDIA]: {
|
|
109
87
|
_enabled: value,
|
|
110
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Media}`,
|
|
111
88
|
},
|
|
112
89
|
[AdminSections.SHIFT_TEMPLATES]: {
|
|
113
90
|
_enabled: value,
|
|
114
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.ShiftTemplates}`,
|
|
115
91
|
},
|
|
116
92
|
[AdminSections.PAUSE_TEMPLATES]: {
|
|
117
93
|
_enabled: value,
|
|
118
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.PauseTemplates}`,
|
|
119
94
|
},
|
|
120
95
|
[AdminSections.WORKING_CONDITIONS]: {
|
|
121
96
|
_enabled: value,
|
|
122
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.WorkingConditions}`,
|
|
123
97
|
},
|
|
124
98
|
[AdminSections.QUICK_REPLIES]: {
|
|
125
99
|
_enabled: value,
|
|
126
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.QuickReplies}`,
|
|
127
100
|
},
|
|
128
101
|
[AdminSections.AGENTS]: {
|
|
129
102
|
_enabled: value,
|
|
130
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Agents}`,
|
|
131
103
|
},
|
|
132
104
|
[AdminSections.TEAMS]: {
|
|
133
105
|
_enabled: value,
|
|
134
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Teams}`,
|
|
135
106
|
},
|
|
136
107
|
[AdminSections.RESOURCES]: {
|
|
137
108
|
_enabled: value,
|
|
138
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Resources}`,
|
|
139
109
|
},
|
|
140
110
|
[AdminSections.RESOURCE_GROUPS]: {
|
|
141
111
|
_enabled: value,
|
|
142
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.ResourceGroups}`,
|
|
143
112
|
},
|
|
144
113
|
[AdminSections.QUEUES]: {
|
|
145
114
|
_enabled: value,
|
|
146
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Queues}`,
|
|
147
115
|
},
|
|
148
116
|
[AdminSections.STORAGE]: {
|
|
149
117
|
_enabled: value,
|
|
150
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Storage}`,
|
|
151
118
|
},
|
|
152
119
|
[AdminSections.STORAGE_POLICIES]: {
|
|
153
120
|
_enabled: value,
|
|
154
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.StoragePolicies}`,
|
|
155
121
|
},
|
|
156
122
|
[AdminSections.COGNITIVE_PROFILES]: {
|
|
157
123
|
_enabled: value,
|
|
158
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.CognitiveProfiles}`,
|
|
159
124
|
},
|
|
160
125
|
[AdminSections.EMAIL_PROFILES]: {
|
|
161
126
|
_enabled: value,
|
|
162
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.EmailProfiles}`,
|
|
163
127
|
},
|
|
164
128
|
[AdminSections.SINGLE_SIGN_ON]: {
|
|
165
129
|
_enabled: value,
|
|
166
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.SingleSignOn}`,
|
|
167
130
|
},
|
|
168
131
|
[AdminSections.IMPORT_CSV]: {
|
|
169
132
|
_enabled: value,
|
|
170
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.ImportCsv}`,
|
|
171
133
|
},
|
|
172
134
|
[AdminSections.TRIGGERS]: {
|
|
173
135
|
_enabled: value,
|
|
174
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Triggers}`,
|
|
175
136
|
},
|
|
176
137
|
[AdminSections.ROLES]: {
|
|
177
138
|
_enabled: value,
|
|
178
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Roles}`,
|
|
179
139
|
},
|
|
180
140
|
[AdminSections.OBJECTS]: {
|
|
181
141
|
_enabled: value,
|
|
182
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Objects}`,
|
|
183
142
|
},
|
|
184
143
|
[AdminSections.CHANGELOGS]: {
|
|
185
144
|
_enabled: value,
|
|
186
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Changelogs}`,
|
|
187
145
|
},
|
|
188
146
|
[AdminSections.CONFIGURATION]: {
|
|
189
147
|
_enabled: value,
|
|
190
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.Configuration}`,
|
|
191
148
|
},
|
|
192
149
|
[AdminSections.GLOBAL_VARIABLES]: {
|
|
193
150
|
_enabled: value,
|
|
194
|
-
_locale: `WebitelApplications.${WebitelApplications.ADMIN}.sections.${AdminSectionsNew.GlobalVariables}`,
|
|
195
151
|
},
|
|
196
152
|
},
|
|
197
153
|
[WebitelApplications.AUDIT]: {
|
|
198
154
|
_enabled: value,
|
|
199
|
-
_locale: `WebitelApplications.${WebitelApplications.AUDIT}.name`,
|
|
200
155
|
[AuditorSections.SCORECARDS]: {
|
|
201
156
|
_enabled: value,
|
|
202
|
-
_locale: `WebitelApplications.${WebitelApplications.AUDIT}.sections.${AuditorSectionsNew.Scorecards}`,
|
|
203
157
|
},
|
|
204
158
|
},
|
|
205
159
|
[WebitelApplications.CRM]: {
|
|
206
160
|
_enabled: value,
|
|
207
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.name`,
|
|
208
161
|
[CrmSections.CONTACTS]: {
|
|
209
162
|
_enabled: value,
|
|
210
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Contacts}`,
|
|
211
163
|
},
|
|
212
164
|
[CrmSections.CASES]: {
|
|
213
165
|
_enabled: value,
|
|
214
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Cases}`,
|
|
215
166
|
},
|
|
216
167
|
[CrmSections.SLAS]: {
|
|
217
168
|
_enabled: value,
|
|
218
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Slas}`,
|
|
219
169
|
},
|
|
220
170
|
[CrmSections.SOURCES]: {
|
|
221
171
|
_enabled: value,
|
|
222
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Sources}`,
|
|
223
172
|
},
|
|
224
173
|
[CrmSections.SERVICE_CATALOGS]: {
|
|
225
174
|
_enabled: value,
|
|
226
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.ServiceCatalogs}`,
|
|
227
175
|
},
|
|
228
176
|
[CrmSections.CLOSE_REASON_GROUPS]: {
|
|
229
177
|
_enabled: value,
|
|
230
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.CloseReasonGroups}`,
|
|
231
178
|
},
|
|
232
179
|
[CrmSections.CONTACT_GROUPS]: {
|
|
233
180
|
_enabled: value,
|
|
234
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.ContactGroups}`,
|
|
235
181
|
},
|
|
236
182
|
[CrmSections.PRIORITIES]: {
|
|
237
183
|
_enabled: value,
|
|
238
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Priorities}`,
|
|
239
184
|
},
|
|
240
185
|
[CrmSections.STATUSES]: {
|
|
241
186
|
_enabled: value,
|
|
242
|
-
_locale: `WebitelApplications.${WebitelApplications.CRM}.sections.${CrmSectionsNew.Statuses}`,
|
|
243
187
|
},
|
|
244
188
|
[CrmSectionsNew.CasesExtensions]: {
|
|
245
189
|
_enabled: value,
|
|
246
|
-
_locale: `WebitelApplications.overrideApplicationsAccess.${WebitelApplications.CRM}.sections.${CrmSectionsNew.CasesExtensions}`,
|
|
247
190
|
},
|
|
248
191
|
[CrmSectionsNew.ContactsExtensions]: {
|
|
249
192
|
_enabled: value,
|
|
250
|
-
_locale: `WebitelApplications.overrideApplicationsAccess.${WebitelApplications.CRM}.sections.${CrmSectionsNew.ContactsExtensions}`,
|
|
251
193
|
},
|
|
252
194
|
[CrmSectionsNew.CustomLookups]: {
|
|
253
195
|
_enabled: value,
|
|
254
|
-
_locale: `WebitelApplications.overrideApplicationsAccess.${WebitelApplications.CRM}.sections.${CrmSectionsNew.CustomLookups}`,
|
|
255
196
|
},
|
|
256
197
|
},
|
|
257
198
|
});
|
|
@@ -285,9 +226,37 @@ export default class ApplicationsAccess {
|
|
|
285
226
|
}
|
|
286
227
|
|
|
287
228
|
// restore minified schema from API response
|
|
288
|
-
static restore(access) {
|
|
289
|
-
|
|
290
|
-
|
|
229
|
+
static async restore(access) {
|
|
230
|
+
const coreSectionsAccess = deepmerge(applicationsAccess(false), access);
|
|
231
|
+
const fullAccess = await ApplicationsAccess.appendCustomTypesToUiSectionsVisibilityAccess(coreSectionsAccess);
|
|
232
|
+
return fullAccess;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
static async appendCustomTypesToUiSectionsVisibilityAccess(access) {
|
|
236
|
+
const targetApp = WebitelApplications.CRM;
|
|
237
|
+
const { items: customTypes } = await CustomTypesAPI.getList({ size: -1 }, { silent: true });
|
|
238
|
+
|
|
239
|
+
const customTypesAccess = customTypes
|
|
240
|
+
.filter((customType) => !access[targetApp]?.[customType.repo]) // already explicitly declared in access
|
|
241
|
+
.reduce((acc, customType) => {
|
|
242
|
+
const enabledValue = access[targetApp]?.[customType.repo]?._enabled;
|
|
243
|
+
const implicitlyEnabled = enabledValue === undefined;
|
|
244
|
+
|
|
245
|
+
acc[customType.repo] = {
|
|
246
|
+
name: customType.repo,
|
|
247
|
+
displayName: customType.name,
|
|
248
|
+
enabled: enabledValue || implicitlyEnabled,
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
return acc;
|
|
252
|
+
}, {});
|
|
253
|
+
|
|
254
|
+
access[targetApp] = {
|
|
255
|
+
...access[targetApp],
|
|
256
|
+
...customTypesAccess,
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
return access;
|
|
291
260
|
}
|
|
292
261
|
|
|
293
262
|
getAccess() {
|
|
@@ -118,9 +118,10 @@ export default class UserinfoStoreModule extends BaseStoreModule {
|
|
|
118
118
|
|
|
119
119
|
await context.dispatch('SET_SESSION', session);
|
|
120
120
|
const access = await userinfo.getUiVisibilityAccess();
|
|
121
|
+
const fullAccess = await ApplicationsAccess.restore(access);
|
|
121
122
|
await context.dispatch(
|
|
122
123
|
'SET_APPLICATIONS_ACCESS',
|
|
123
|
-
|
|
124
|
+
fullAccess,
|
|
124
125
|
);
|
|
125
126
|
await context.dispatch('AFTER_OPEN_SESSION_HOOK');
|
|
126
127
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineStore } from 'pinia';
|
|
2
|
+
import { ref } from 'vue';
|
|
2
3
|
import { NavigationGuard } from 'vue-router';
|
|
3
4
|
|
|
4
5
|
import {
|
|
@@ -29,23 +30,23 @@ export const createUserAccessStore = ({
|
|
|
29
30
|
namespace = 'userinfo',
|
|
30
31
|
}: CreateUserAccessStoreConfig = {}) => {
|
|
31
32
|
return defineStore(`${namespace}/access`, (): UserAccessStore => {
|
|
32
|
-
|
|
33
|
+
const globalAccess = ref<GlobalActionAccessMap>(new Map());
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
const scopeAccess = ref<ScopeAccessMap>(new Map());
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
const appVisibilityAccess = ref<AppVisibilityMap>(new Map());
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
const sectionVisibilityAccess = ref<SectionVisibilityMap>(new Map());
|
|
39
40
|
|
|
40
41
|
const hasAccess = (
|
|
41
42
|
action: CrudAction | SpecialGlobalAction,
|
|
42
43
|
object?: WtObject,
|
|
43
44
|
) => {
|
|
44
|
-
const allowGlobalAccess = globalAccess.get(action);
|
|
45
|
+
const allowGlobalAccess = globalAccess.value.get(action);
|
|
45
46
|
if (allowGlobalAccess) return true;
|
|
46
47
|
|
|
47
48
|
const allowScopeAccess =
|
|
48
|
-
object && scopeAccess.get(object)?.get(action as CrudAction);
|
|
49
|
+
object && scopeAccess.value.get(object)?.get(action as CrudAction);
|
|
49
50
|
if (allowScopeAccess) return true;
|
|
50
51
|
|
|
51
52
|
return false;
|
|
@@ -68,14 +69,14 @@ export const createUserAccessStore = ({
|
|
|
68
69
|
};
|
|
69
70
|
|
|
70
71
|
const hasApplicationVisibility = (app: WtApplication) => {
|
|
71
|
-
return appVisibilityAccess.get(app);
|
|
72
|
+
return appVisibilityAccess.value.get(app);
|
|
72
73
|
};
|
|
73
74
|
|
|
74
75
|
const hasSectionVisibility = (section: UiSection, object: WtObject) => {
|
|
75
76
|
const appOfSection = getWtAppByUiSection(section);
|
|
76
77
|
const objectOfSection = object; /*castUiSectionToWtObject(section)*/
|
|
77
78
|
const hasSectionVisibilityAccess = (section: UiSection) => {
|
|
78
|
-
return sectionVisibilityAccess.get(section);
|
|
79
|
+
return sectionVisibilityAccess.value.get(section);
|
|
79
80
|
};
|
|
80
81
|
|
|
81
82
|
const allowAppVisibility = hasApplicationVisibility(appOfSection);
|
|
@@ -95,14 +96,14 @@ export const createUserAccessStore = ({
|
|
|
95
96
|
.toReversed()
|
|
96
97
|
.find(({ meta }) => meta.UiSection)?.meta?.WtObject as WtObject | ((RouteLocationNormalized) => WtObject);
|
|
97
98
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
// if, then compute fn
|
|
100
|
+
if (typeof uiSection === 'function') {
|
|
101
|
+
uiSection = uiSection(to);
|
|
102
|
+
}
|
|
103
|
+
// if, then compute fn
|
|
104
|
+
if (typeof wtObject === 'function') {
|
|
105
|
+
wtObject = wtObject(to);
|
|
106
|
+
}
|
|
106
107
|
|
|
107
108
|
if (uiSection && !hasSectionVisibility(uiSection, wtObject)) {
|
|
108
109
|
// return false;
|
|
@@ -114,7 +115,7 @@ export const createUserAccessStore = ({
|
|
|
114
115
|
|
|
115
116
|
|
|
116
117
|
const hasSpecialGlobalActionAccess = (id: SpecialGlobalAction): boolean => {
|
|
117
|
-
return !!globalAccess.get(id);
|
|
118
|
+
return !!globalAccess.value.get(id);
|
|
118
119
|
};
|
|
119
120
|
|
|
120
121
|
const initialize = ({
|
|
@@ -122,10 +123,10 @@ export const createUserAccessStore = ({
|
|
|
122
123
|
scope: rawScopeAccess,
|
|
123
124
|
access: rawVisibilityAccess,
|
|
124
125
|
}: CreateUserAccessStoreRawAccess) => {
|
|
125
|
-
globalAccess = makeGlobalAccessMap(rawGlobalAccess);
|
|
126
|
-
scopeAccess = makeScopeAccessMap(rawScopeAccess);
|
|
127
|
-
appVisibilityAccess = makeAppVisibilityMap(rawVisibilityAccess);
|
|
128
|
-
sectionVisibilityAccess = makeSectionVisibilityMap(rawVisibilityAccess);
|
|
126
|
+
globalAccess.value = makeGlobalAccessMap(rawGlobalAccess);
|
|
127
|
+
scopeAccess.value = makeScopeAccessMap(rawScopeAccess);
|
|
128
|
+
appVisibilityAccess.value = makeAppVisibilityMap(rawVisibilityAccess);
|
|
129
|
+
sectionVisibilityAccess.value = makeSectionVisibilityMap(rawVisibilityAccess);
|
|
129
130
|
};
|
|
130
131
|
|
|
131
132
|
return {
|
|
@@ -139,6 +140,15 @@ export const createUserAccessStore = ({
|
|
|
139
140
|
|
|
140
141
|
routeAccessGuard,
|
|
141
142
|
hasSpecialGlobalActionAccess,
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @internal
|
|
146
|
+
* for pinia devtools debug
|
|
147
|
+
*/
|
|
148
|
+
globalAccess,
|
|
149
|
+
scopeAccess,
|
|
150
|
+
appVisibilityAccess,
|
|
151
|
+
sectionVisibilityAccess,
|
|
142
152
|
};
|
|
143
153
|
});
|
|
144
154
|
};
|
|
@@ -117,4 +117,28 @@ export interface UserAccessStore {
|
|
|
117
117
|
|
|
118
118
|
// hasApplicationVisibility: (app: WtApplication) => boolean;
|
|
119
119
|
hasSectionVisibility: (section: UiSection, object: WtObject) => boolean;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @internal
|
|
123
|
+
* for pinia devtools debug
|
|
124
|
+
*/
|
|
125
|
+
globalAccess: GlobalActionAccessMap;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @internal
|
|
129
|
+
* for pinia devtools debug
|
|
130
|
+
*/
|
|
131
|
+
scopeAccess: ScopeAccessMap;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @internal
|
|
135
|
+
* for pinia devtools debug
|
|
136
|
+
*/
|
|
137
|
+
appVisibilityAccess: AppVisibilityMap;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @internal
|
|
141
|
+
* for pinia devtools debug
|
|
142
|
+
*/
|
|
143
|
+
sectionVisibilityAccess: SectionVisibilityMap;
|
|
120
144
|
}
|
|
@@ -12,6 +12,7 @@ declare const __VLS_component: import("vue").DefineComponent<{}, {
|
|
|
12
12
|
width: string;
|
|
13
13
|
minWidth: string;
|
|
14
14
|
maxWidth: string;
|
|
15
|
+
pt?: Record<string, any>;
|
|
15
16
|
$props: {
|
|
16
17
|
readonly options?: unknown[];
|
|
17
18
|
readonly disabled?: boolean;
|
|
@@ -20,6 +21,7 @@ declare const __VLS_component: import("vue").DefineComponent<{}, {
|
|
|
20
21
|
readonly width?: string;
|
|
21
22
|
readonly minWidth?: string;
|
|
22
23
|
readonly maxWidth?: string;
|
|
24
|
+
readonly pt?: Record<string, any>;
|
|
23
25
|
};
|
|
24
26
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
25
27
|
type __VLS_Slots = {
|