@webitel/ui-sdk 26.6.99 → 26.6.101

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 (102) hide show
  1. package/dist/{clients-Bkj_jr3s.js → clients-DBR1e2Vq.js} +1 -1
  2. package/dist/{components-f_7Xewxl.js → components-B15PvOcM.js} +3 -3
  3. package/dist/ui-sdk.css +1 -1
  4. package/dist/ui-sdk.js +1 -1
  5. package/dist/ui-sdk.umd.cjs +2 -2
  6. package/dist/{wt-chat-emoji-BxcgfPnF.js → wt-chat-emoji-DGWoMhRa.js} +1 -1
  7. package/dist/{wt-display-chip-items-BFcunpPg.js → wt-display-chip-items-BoMTg1Qr.js} +1 -1
  8. package/dist/{wt-send-message-popup-UqRi-DNw.js → wt-send-message-popup-WECZxY7v.js} +2 -2
  9. package/dist/{wt-time-input-CO2cop3y.js → wt-time-input-u5Ay5_X5.js} +3 -1
  10. package/dist/{wt-timepicker-CURP_N80.js → wt-timepicker-CHNPor19.js} +25 -29
  11. package/dist/{wt-type-extension-value-input-BT9q7ZCv.js → wt-type-extension-value-input-Dmq5KjQQ.js} +2 -2
  12. package/dist/{wt-vidstack-player-BKN0dtoX.js → wt-vidstack-player-D-D625Jl.js} +1 -1
  13. package/package.json +1 -1
  14. package/src/api/clients/roles/roles.ts +5 -3
  15. package/src/components/wt-time-input/wt-time-input.vue +6 -1
  16. package/src/components/wt-timepicker/wt-timepicker.vue +13 -16
  17. package/src/composables/useEventBus/useEventBus.d.ts +4 -4
  18. package/src/enums/BroadcastChannelName/BroadcastChannelName.d.ts +2 -3
  19. package/src/enums/BroadcastChannelName/UserSettingsBroadcastMessage.d.ts +7 -7
  20. package/src/enums/ButtonColor/ButtonColor.d.ts +8 -8
  21. package/src/enums/ButtonVariant/ButtonVariant.d.ts +3 -3
  22. package/src/enums/ChipColor/ChipColor.d.ts +8 -8
  23. package/src/enums/ComponentSize/ComponentSize.d.ts +14 -14
  24. package/src/enums/ConnectionQualityLevel/ConnectionQualityLevel.enum.d.ts +4 -5
  25. package/src/enums/CrudAction/CrudAction.d.ts +4 -4
  26. package/src/enums/DefaultWorkspaceTabSettings/DefaultWorkspaceTabSettings.d.ts +7 -8
  27. package/src/enums/EmptyCause/EmptyCause.d.ts +3 -3
  28. package/src/enums/FormatDateMode/FormatDateMode.d.ts +6 -7
  29. package/src/enums/IconColor/IconColor.d.ts +14 -14
  30. package/src/enums/LoginOptions/LoginOptions.d.ts +3 -3
  31. package/src/enums/MessageColor/MessageColor.d.ts +6 -6
  32. package/src/enums/MessageVariant/MessageVariant.d.ts +3 -3
  33. package/src/enums/MimeTypes/MimeTypes.enum.d.ts +14 -14
  34. package/src/enums/ProcessingTableColumnType/ProcessingTableColumnType.d.ts +6 -7
  35. package/src/enums/QueueType/QueueType.enum.d.ts +22 -22
  36. package/src/enums/RelativeDatetimeValue/RelativeDatetimeValue.d.ts +5 -6
  37. package/src/enums/RingtoneType/RingtoneType.d.ts +3 -3
  38. package/src/enums/SingleSignOnProvider/SingleSignOnProvider.d.ts +5 -6
  39. package/src/enums/SingleSignOnProviderIconMappings/SingleSignOnProviderIconMappings.d.ts +2 -6
  40. package/src/enums/WebitelApplications/AdminSections.d.ts +38 -38
  41. package/src/enums/WebitelApplications/AuditorSections.d.ts +2 -3
  42. package/src/enums/WebitelApplications/CrmSections.d.ts +13 -13
  43. package/src/enums/WebitelApplications/SupervisorSections.d.ts +4 -5
  44. package/src/enums/WebitelApplications/WfmSections.d.ts +3 -3
  45. package/src/enums/WebitelApplications/WtApplication.d.ts +9 -9
  46. package/src/enums/WtObject/WtObject.d.ts +57 -57
  47. package/src/enums/WtTypeExtensionFieldKind/WtTypeExtensionFieldKind.d.ts +7 -8
  48. package/src/enums/index.d.ts +4 -54
  49. package/src/locale/en/en.js +4 -4
  50. package/src/locale/es/es.js +4 -4
  51. package/src/locale/kz/kz.js +4 -4
  52. package/src/locale/pl/pl.js +4 -4
  53. package/src/locale/ro/ro.js +4 -4
  54. package/src/locale/ru/ru.js +4 -4
  55. package/src/locale/uk/uk.js +4 -4
  56. package/src/locale/uz/uz.js +4 -4
  57. package/src/locale/vi/vi.js +4 -4
  58. package/src/modules/ObjectPermissions/components/_internal/permissions-tab-content.vue +190 -0
  59. package/src/modules/ObjectPermissions/{_internals/components → components/_internal}/permissions-tab-role-popup.vue +10 -20
  60. package/src/modules/ObjectPermissions/components/permissions-tab.vue +43 -160
  61. package/src/modules/ObjectPermissions/enums/AccessMode.enum.d.ts +6 -0
  62. package/src/modules/ObjectPermissions/enums/AccessMode.enum.ts +7 -0
  63. package/src/modules/ObjectPermissions/enums/AccessRuleName.enum.d.ts +7 -0
  64. package/src/modules/ObjectPermissions/enums/AccessRuleName.enum.ts +9 -0
  65. package/src/modules/ObjectPermissions/enums/index.d.ts +2 -0
  66. package/src/modules/ObjectPermissions/enums/index.ts +2 -0
  67. package/{types/modules/ObjectPermissions/_internals/store/modules → src/modules/ObjectPermissions/headers}/headers.d.ts +2 -2
  68. package/src/modules/ObjectPermissions/{_internals/store/modules/headers.js → headers/headers.ts} +6 -2
  69. package/src/modules/ObjectPermissions/index.d.ts +7 -0
  70. package/src/modules/ObjectPermissions/index.ts +6 -0
  71. package/src/modules/ObjectPermissions/{_internals/modules → modules}/filters/store/filters.store.js +1 -1
  72. package/src/modules/ObjectPermissions/{_internals/store/helpers → store}/createObjectPermissionsStoreModule.js +2 -2
  73. package/src/modules/ObjectPermissions/store/index.js +1 -1
  74. package/src/modules/ObjectPermissions/{_internals/store/modules → store}/objectPermissionsStoreModule.js +6 -7
  75. package/src/modules/ObjectPermissions/types/PermissionsUserAccess.d.ts +3 -0
  76. package/src/modules/ObjectPermissions/types/PermissionsUserAccess.ts +10 -0
  77. package/src/modules/Userinfo/constants/UserSettingsConstants.d.ts +1 -1
  78. package/src/utils/displayText.d.ts +1 -1
  79. package/src/utils/formatDate.d.ts +3 -9
  80. package/types/components/wt-time-input/wt-time-input.vue.d.ts +5 -0
  81. package/types/components/wt-timepicker/wt-timepicker.vue.d.ts +0 -5
  82. package/types/modules/ObjectPermissions/components/_internal/permissions-tab-content.vue.d.ts +97 -0
  83. package/types/modules/ObjectPermissions/components/_internal/permissions-tab-role-popup.vue.d.ts +23 -0
  84. package/types/modules/ObjectPermissions/components/permissions-tab.vue.d.ts +10 -43
  85. package/types/modules/ObjectPermissions/enums/AccessMode.enum.d.ts +6 -0
  86. package/types/modules/ObjectPermissions/enums/AccessRuleName.enum.d.ts +7 -0
  87. package/types/modules/ObjectPermissions/enums/index.d.ts +2 -0
  88. package/types/modules/ObjectPermissions/headers/headers.d.ts +7 -0
  89. package/types/modules/ObjectPermissions/index.d.ts +6 -0
  90. package/types/modules/ObjectPermissions/store/index.d.ts +1 -1
  91. package/types/modules/ObjectPermissions/{_internals/store/modules → store}/objectPermissionsStoreModule.d.ts +1 -0
  92. package/types/modules/ObjectPermissions/types/PermissionsUserAccess.d.ts +3 -0
  93. package/src/modules/ObjectPermissions/_internals/enums/AccessMode.enum.js +0 -5
  94. package/src/modules/Userinfo/composables/types/CreateUserAccessControl.d.ts +0 -2
  95. package/types/modules/ObjectPermissions/_internals/components/permissions-tab-role-popup.vue.d.ts +0 -13
  96. package/types/modules/ObjectPermissions/_internals/enums/AccessMode.enum.d.ts +0 -5
  97. /package/src/modules/ObjectPermissions/{_internals/components → components/_internal}/permissions-role-row.vue +0 -0
  98. /package/src/modules/ObjectPermissions/{_internals/components → components/_internal}/permissions-role-select.vue +0 -0
  99. /package/types/modules/ObjectPermissions/{_internals/components → components/_internal}/permissions-role-row.vue.d.ts +0 -0
  100. /package/types/modules/ObjectPermissions/{_internals/components → components/_internal}/permissions-role-select.vue.d.ts +0 -0
  101. /package/types/modules/ObjectPermissions/{_internals/modules → modules}/filters/store/filters.store.d.ts +0 -0
  102. /package/types/modules/ObjectPermissions/{_internals/store/helpers → store}/createObjectPermissionsStoreModule.d.ts +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -159,9 +159,9 @@ export default {
159
159
  operations: 'Operacje',
160
160
  rbacDefault: 'Domyślny dostęp oparty na rekordach',
161
161
  accessMode: {
162
- [AccessMode.FORBIDDEN]: 'Zabronione',
163
- [AccessMode.ALLOW]: 'Zezwól',
164
- [AccessMode.MANAGE]: 'Zezwól z delegowaniem',
162
+ [AccessMode.Forbidden]: 'Zabronione',
163
+ [AccessMode.Allow]: 'Zezwól',
164
+ [AccessMode.Manage]: 'Zezwól z delegowaniem',
165
165
  },
166
166
  },
167
167
  // describes Webitel system entities
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -159,9 +159,9 @@ export default {
159
159
  operations: 'Operațiuni',
160
160
  rbacDefault: 'Acces implicit bazat pe înregistrări',
161
161
  accessMode: {
162
- [AccessMode.FORBIDDEN]: 'Interzis',
163
- [AccessMode.ALLOW]: 'Permite',
164
- [AccessMode.MANAGE]: 'Permite cu delegare',
162
+ [AccessMode.Forbidden]: 'Interzis',
163
+ [AccessMode.Allow]: 'Permite',
164
+ [AccessMode.Manage]: 'Permite cu delegare',
165
165
  },
166
166
  },
167
167
  // describes Webitel system entities
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -154,9 +154,9 @@ export default {
154
154
  operations: 'Действия',
155
155
  rbacDefault: 'Права доступа по записям по умолчанию',
156
156
  accessMode: {
157
- [AccessMode.FORBIDDEN]: 'Запрещено',
158
- [AccessMode.ALLOW]: 'Разрешено',
159
- [AccessMode.MANAGE]: 'Управление',
157
+ [AccessMode.Forbidden]: 'Запрещено',
158
+ [AccessMode.Allow]: 'Разрешено',
159
+ [AccessMode.Manage]: 'Управление',
160
160
  },
161
161
  },
162
162
  // describes Webitel system entities
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -154,9 +154,9 @@ export default {
154
154
  operations: 'Дії',
155
155
  rbacDefault: 'Права доступу на записи за замовчуванням',
156
156
  accessMode: {
157
- [AccessMode.FORBIDDEN]: 'Заборонено',
158
- [AccessMode.ALLOW]: 'Дозволено',
159
- [AccessMode.MANAGE]: 'Управління',
157
+ [AccessMode.Forbidden]: 'Заборонено',
158
+ [AccessMode.Allow]: 'Дозволено',
159
+ [AccessMode.Manage]: 'Управління',
160
160
  },
161
161
  },
162
162
  // describes Webitel system entities
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -159,9 +159,9 @@ export default {
159
159
  operations: 'Operatsiyalar',
160
160
  rbacDefault: 'Standart yozuvga asoslangan kirish',
161
161
  accessMode: {
162
- [AccessMode.FORBIDDEN]: 'Taqiqlangan',
163
- [AccessMode.ALLOW]: 'Ruxsat etilgan',
164
- [AccessMode.MANAGE]: 'Delegatsiya bilan ruxsat etilgan',
162
+ [AccessMode.Forbidden]: 'Taqiqlangan',
163
+ [AccessMode.Allow]: 'Ruxsat etilgan',
164
+ [AccessMode.Manage]: 'Delegatsiya bilan ruxsat etilgan',
165
165
  },
166
166
  },
167
167
  // describes Webitel system entities
@@ -21,7 +21,7 @@ import {
21
21
  SupervisorSections,
22
22
  WtApplication,
23
23
  } from '../../enums';
24
- import { AccessMode } from '../../modules/ObjectPermissions/_internals/enums/AccessMode.enum.js';
24
+ import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
25
25
  import { snakeToCamel } from '../../scripts';
26
26
  import { SortSymbols } from '../../scripts/sortQueryAdapters.js';
27
27
 
@@ -159,9 +159,9 @@ export default {
159
159
  operations: 'Các thao tác',
160
160
  rbacDefault: 'Mặc định truy cập dựa trên bản ghi',
161
161
  accessMode: {
162
- [AccessMode.FORBIDDEN]: 'Cấm',
163
- [AccessMode.ALLOW]: 'Cho phép',
164
- [AccessMode.MANAGE]: 'Cho phép với ủy quyền',
162
+ [AccessMode.Forbidden]: 'Cấm',
163
+ [AccessMode.Allow]: 'Cho phép',
164
+ [AccessMode.Manage]: 'Cho phép với ủy quyền',
165
165
  },
166
166
  },
167
167
  // describes Webitel system entities
@@ -0,0 +1,190 @@
1
+ <template>
2
+ <section
3
+ v-if="access.read"
4
+ class="table-page"
5
+ >
6
+ <header class="table-title">
7
+ <h3 class="table-title__title">
8
+ {{ t('access.operations') }}
9
+ </h3>
10
+ <div class="table-title__actions-wrap">
11
+ <permissions-tab-role-popup
12
+ v-if="access.create"
13
+ :existing-grantee-ids="existingGranteeIds"
14
+ :add-role-permissions="addRolePermissions"
15
+ />
16
+ <wt-action-bar
17
+ :include="[IconAction.REFRESH]"
18
+ @click:refresh="refresh"
19
+ />
20
+ </div>
21
+ </header>
22
+
23
+ <div class="table-section__table-wrapper">
24
+ <wt-empty
25
+ v-show="showEmpty"
26
+ :image="imageEmpty"
27
+ :text="textEmpty"
28
+ />
29
+
30
+ <wt-loader v-show="isLoading" />
31
+
32
+ <div
33
+ v-show="dataList.length && !isLoading"
34
+ class="table-section__visible-scroll-wrapper"
35
+ >
36
+ <wt-table
37
+ :data="localizedDataList"
38
+ :grid-actions="access.update"
39
+ :headers="headers"
40
+ :selectable="false"
41
+ sortable
42
+ @sort="sort"
43
+ >
44
+ <template #grantee="{ item }">
45
+ <permissions-role-row :role="item.grantee" />
46
+ </template>
47
+
48
+ <template #read="{ item }">
49
+ <wt-single-select
50
+ :show-clear="false"
51
+ :disabled="!access.update"
52
+ :options="accessOptions"
53
+ :model-value="item.access.r"
54
+ @update:model-value="changeAccessMode({ item, ruleName: AccessRuleName.R, mode: $event })"
55
+ />
56
+ </template>
57
+
58
+ <template #edit="{ item }">
59
+ <wt-single-select
60
+ :show-clear="false"
61
+ :disabled="!access.update"
62
+ :options="accessOptions"
63
+ :model-value="item.access.w"
64
+ @update:model-value="changeAccessMode({ item, ruleName: AccessRuleName.W, mode: $event })"
65
+ />
66
+ </template>
67
+
68
+ <template #delete="{ item }">
69
+ <wt-single-select
70
+ :show-clear="false"
71
+ :disabled="!access.update"
72
+ :options="accessOptions"
73
+ :model-value="item.access.d"
74
+ @update:model-value="changeAccessMode({ item, ruleName: AccessRuleName.D, mode: $event })"
75
+ />
76
+ </template>
77
+
78
+ <template #actions="{ item }">
79
+ <wt-icon-action
80
+ action="delete"
81
+ @click="
82
+ changeAccessMode({
83
+ item,
84
+ ruleName: AccessRuleName.R,
85
+ mode: { id: AccessMode.Forbidden },
86
+ })
87
+ "
88
+ />
89
+ </template>
90
+ </wt-table>
91
+ </div>
92
+
93
+ <slot name="pagination" />
94
+ </div>
95
+ </section>
96
+ </template>
97
+
98
+ <script setup>
99
+ import { computed } from 'vue';
100
+ import { useI18n } from 'vue-i18n';
101
+ import IconAction from '../../../../enums/IconAction/IconAction.enum';
102
+ import { useTableEmpty } from '../../../TableComponentModule/composables/useTableEmpty';
103
+ import { AccessMode, AccessRuleName } from '../../enums';
104
+ import { DEFAULT_PERMISSIONS_USER_ACCESS } from '../../types/PermissionsUserAccess';
105
+ import PermissionsRoleRow from './permissions-role-row.vue';
106
+ import PermissionsTabRolePopup from './permissions-tab-role-popup.vue';
107
+
108
+ const props = defineProps({
109
+ dataList: {
110
+ type: Array,
111
+ required: true,
112
+ },
113
+ isLoading: {
114
+ type: Boolean,
115
+ default: false,
116
+ },
117
+ headers: {
118
+ type: Array,
119
+ required: true,
120
+ },
121
+ error: {
122
+ type: Object,
123
+ default: null,
124
+ },
125
+ refresh: {
126
+ type: Function,
127
+ required: true,
128
+ },
129
+ sort: {
130
+ type: Function,
131
+ required: true,
132
+ },
133
+ changeAccessMode: {
134
+ type: Function,
135
+ required: true,
136
+ },
137
+ existingGranteeIds: {
138
+ type: Array,
139
+ default: () => [],
140
+ },
141
+ addRolePermissions: {
142
+ type: Function,
143
+ required: true,
144
+ },
145
+ access: {
146
+ type: Object,
147
+ default: () => DEFAULT_PERMISSIONS_USER_ACCESS,
148
+ },
149
+ });
150
+
151
+ const { t } = useI18n();
152
+
153
+ const localizedDataList = computed(() => {
154
+ return props.dataList.map((item) => {
155
+ const access = Object.keys(item.access).reduce((acc, rule) => {
156
+ acc[rule] = {
157
+ ...item.access[rule],
158
+ name: t(`access.accessMode.${item.access[rule].id}`),
159
+ };
160
+ return acc;
161
+ }, {});
162
+
163
+ return {
164
+ ...item,
165
+ access,
166
+ };
167
+ });
168
+ });
169
+
170
+ const {
171
+ showEmpty,
172
+ image: imageEmpty,
173
+ text: textEmpty,
174
+ } = useTableEmpty({
175
+ dataList: computed(() => props.dataList),
176
+ error: computed(() => props.error),
177
+ isLoading: computed(() => props.isLoading),
178
+ });
179
+
180
+ const accessOptions = computed(() => {
181
+ return Object.values(AccessMode).map((mode) => ({
182
+ id: mode,
183
+ name: t(`access.accessMode.${mode}`),
184
+ }));
185
+ });
186
+ </script>
187
+
188
+ <style lang="scss" scoped>
189
+ @use '../../../../css/pages/table-page.css';
190
+ </style>
@@ -38,34 +38,30 @@
38
38
  </template>
39
39
 
40
40
  <script setup>
41
- import { computed, ref, useAttrs } from 'vue';
41
+ import { computed, ref } from 'vue';
42
42
  import { useI18n } from 'vue-i18n';
43
43
  import { useRoute, useRouter } from 'vue-router';
44
- import { useStore } from 'vuex';
45
44
 
46
45
  import RolesAPI from '../../../../api/clients/roles/roles';
47
- import getNamespacedState from '../../../../store/helpers/getNamespacedState.js';
48
46
  import PermissionsRoleSelect from './permissions-role-select.vue';
49
47
 
50
48
  const props = defineProps({
51
- namespace: {
52
- type: String,
49
+ existingGranteeIds: {
50
+ type: Array,
51
+ default: () => [],
52
+ },
53
+ addRolePermissions: {
54
+ type: Function,
53
55
  required: true,
54
56
  },
55
57
  });
56
58
 
57
- const attrs = useAttrs();
58
- const store = useStore();
59
59
  const { t } = useI18n();
60
60
  const router = useRouter();
61
61
  const route = useRoute();
62
62
 
63
63
  const grantee = ref(null);
64
64
 
65
- const existingGranteesList = computed(
66
- () => getNamespacedState(store.state, props.namespace).dataList,
67
- );
68
-
69
65
  const shown = computed(() => !!route.params.permissionId);
70
66
 
71
67
  const add = () => {
@@ -108,22 +104,16 @@ const loadGrantees = (params) => {
108
104
  });
109
105
  };
110
106
 
111
- // filter already existing roles
112
107
  const getAvailableGrantees = async (params) => {
113
108
  const { items, ...rest } = await loadGrantees(params);
114
109
  return {
115
- items: items.filter(
116
- (role) =>
117
- !existingGranteesList.value.some(
118
- (usedRoles) => role.id === usedRoles.grantee.id,
119
- ),
120
- ),
110
+ items: items.filter((role) => !props.existingGranteeIds.includes(role.id)),
121
111
  ...rest,
122
112
  };
123
113
  };
124
114
 
125
- const save = async (grantee) => {
126
- await store.dispatch(`${props.namespace}/ADD_ROLE_PERMISSIONS`, grantee);
115
+ const save = async (newGrantee) => {
116
+ await props.addRolePermissions(newGrantee);
127
117
  return close();
128
118
  };
129
119
  </script>
@@ -1,137 +1,38 @@
1
1
  <template>
2
- <section
3
- v-if="access.read"
4
- class="table-page"
5
- >
6
- <header class="table-title">
7
- <h3 class="table-title__title">
8
- {{ t('access.operations') }}
9
- </h3>
10
- <div class="table-title__actions-wrap">
11
- <role-popup
12
- v-if="props.access.add"
13
- :namespace="tableNamespace"
14
- />
15
- <wt-action-bar
16
- :include="[IconAction.REFRESH]"
17
- @click:refresh="loadData"
18
- />
19
- </div>
20
- </header>
21
-
22
- <div class="table-section__table-wrapper">
23
- <wt-empty
24
- v-show="showEmpty"
25
- :image="imageEmpty"
26
- :text="textEmpty"
27
- />
28
-
29
- <wt-loader v-show="isLoading" />
30
-
31
- <div
32
- v-show="dataList.length && !isLoading"
33
- class="table-section__visible-scroll-wrapper"
34
- >
35
- <wt-table
36
- :data="localizedDataList"
37
- :grid-actions="access.edit"
38
- :headers="headers"
39
- :selectable="false"
40
- sortable
41
- @sort="sort"
42
- >
43
- <template #grantee="{ item }">
44
- <role-column :role="item.grantee" />
45
- </template>
46
-
47
- <template #read="{ item }">
48
- <wt-single-select
49
- :show-clear="false"
50
- :disabled="!access.edit"
51
- :options="accessOptions"
52
- :model-value="item.access.r"
53
- @update:model-value="changeAccessMode({ item, ruleName: 'r', mode: $event })"
54
- />
55
- </template>
56
-
57
- <template #edit="{ item }">
58
- <wt-single-select
59
- :show-clear="false"
60
- :disabled="!access.edit"
61
- :options="accessOptions"
62
- :model-value="item.access.w"
63
- @update:model-value="changeAccessMode({ item, ruleName: 'w', mode: $event })"
64
- />
65
- </template>
66
-
67
- <template #delete="{ item }">
68
- <wt-single-select
69
- :show-clear="false"
70
- :disabled="!access.edit"
71
- :options="accessOptions"
72
- :model-value="item.access.d"
73
- @update:model-value="changeAccessMode({ item, ruleName: 'd', mode: $event })"
74
- />
75
- </template>
76
- <template #actions="{ item }">
77
- <wt-icon-action
78
- action="delete"
79
- @click="
80
- changeAccessMode({
81
- item,
82
- ruleName: 'r',
83
- mode: { id: AccessMode.FORBIDDEN },
84
- })
85
- "
86
- />
87
- </template>
88
- </wt-table>
89
- </div>
2
+ <permissions-tab-content v-bind="tabContentProps">
3
+ <template #pagination>
90
4
  <filter-pagination
91
5
  :namespace="filtersNamespace"
92
6
  :next="isNext"
93
7
  />
94
- </div>
95
- </section>
8
+ </template>
9
+ </permissions-tab-content>
96
10
  </template>
97
11
 
98
- <script setup>
12
+ <script setup lang="ts">
99
13
  import { computed, onUnmounted } from 'vue';
100
- import { useI18n } from 'vue-i18n';
101
14
  import { useStore } from 'vuex';
102
-
103
- import IconAction from '../../../enums/IconAction/IconAction.enum.js';
104
- import { useTableEmpty } from '../../../modules/TableComponentModule/composables/useTableEmpty.js';
105
- import { useTableStore } from '../../../store/new/index.js';
15
+ import { useTableStore } from '../../../store/new';
106
16
  import FilterPagination from '../../Filters/components/filter-pagination.vue';
107
- import { useTableFilters } from '../../Filters/composables/useTableFilters.js';
108
- import RoleColumn from '../_internals/components/permissions-role-row.vue';
109
- import RolePopup from '../_internals/components/permissions-tab-role-popup.vue';
110
- import { AccessMode } from '../_internals/enums/AccessMode.enum.js';
111
-
112
- const props = defineProps({
113
- /**
114
- * Namespace of the parent card store
115
- */
116
- namespace: {
117
- type: String,
118
- required: true,
17
+ import { useTableFilters } from '../../Filters/composables/useTableFilters';
18
+ import {
19
+ DEFAULT_PERMISSIONS_USER_ACCESS,
20
+ type PermissionsUserAccess,
21
+ } from '../types/PermissionsUserAccess';
22
+ import PermissionsTabContent from './_internal/permissions-tab-content.vue';
23
+
24
+ const props = withDefaults(
25
+ defineProps<{
26
+ /** Namespace of the parent card store */
27
+ namespace: string;
28
+ /** Access to the component actions, related to permissions */
29
+ access: PermissionsUserAccess;
30
+ }>(),
31
+ {
32
+ access: () => DEFAULT_PERMISSIONS_USER_ACCESS,
119
33
  },
120
- /**
121
- * Access to the component actions, related to permissions
122
- */
123
- access: {
124
- type: Object,
125
- default: () => ({
126
- read: true,
127
- add: true,
128
- edit: true,
129
- delete: true,
130
- }),
131
- },
132
- });
34
+ );
133
35
 
134
- const { t } = useI18n();
135
36
  const store = useStore();
136
37
 
137
38
  const {
@@ -148,23 +49,6 @@ const {
148
49
  onFilterEvent,
149
50
  } = useTableStore(`${props.namespace}/permissions`);
150
51
 
151
- const localizedDataList = computed(() => {
152
- return dataList.value.map((item) => {
153
- const access = Object.keys(item.access).reduce((acc, rule) => {
154
- acc[rule] = {
155
- ...item.access[rule],
156
- name: t(`access.accessMode.${item.access[rule].id}`),
157
- };
158
- return acc;
159
- }, {});
160
-
161
- return {
162
- ...item,
163
- access,
164
- };
165
- });
166
- });
167
-
168
52
  const {
169
53
  namespace: filtersNamespace,
170
54
  restoreFilters,
@@ -186,27 +70,26 @@ onUnmounted(() => {
186
70
  resetFilters();
187
71
  });
188
72
 
189
- const {
190
- showEmpty,
191
- image: imageEmpty,
192
- text: textEmpty,
193
- } = useTableEmpty({
194
- dataList,
195
- error,
196
- isLoading,
197
- });
198
-
199
- const accessOptions = computed(() => {
200
- return Object.values(AccessMode).map((mode) => ({
201
- id: mode,
202
- name: t(`access.accessMode.${mode}`),
203
- }));
204
- });
205
-
206
73
  const changeAccessMode = (payload) =>
207
74
  store.dispatch(`${tableNamespace}/CHANGE_ACCESS_MODE`, payload);
208
- </script>
209
75
 
210
- <style lang="scss" scoped>
211
- @use '../../../css/pages/table-page';
212
- </style>
76
+ const addRolePermissions = (role) =>
77
+ store.dispatch(`${tableNamespace}/ADD_ROLE_PERMISSIONS`, role);
78
+
79
+ const existingGranteeIds = computed(() =>
80
+ dataList.value.map((item) => item.grantee.id),
81
+ );
82
+
83
+ const tabContentProps = computed(() => ({
84
+ dataList: dataList.value,
85
+ isLoading: isLoading.value,
86
+ headers: headers.value,
87
+ error: error.value,
88
+ refresh: loadData,
89
+ sort,
90
+ changeAccessMode,
91
+ existingGranteeIds: existingGranteeIds.value,
92
+ addRolePermissions,
93
+ access: props.access,
94
+ }));
95
+ </script>
@@ -0,0 +1,6 @@
1
+ export declare const AccessMode: {
2
+ readonly Forbidden: 1;
3
+ readonly Allow: 2;
4
+ readonly Manage: 3;
5
+ };
6
+ export type AccessMode = (typeof AccessMode)[keyof typeof AccessMode];
@@ -0,0 +1,7 @@
1
+ export const AccessMode = {
2
+ Forbidden: 1,
3
+ Allow: 2,
4
+ Manage: 3,
5
+ } as const;
6
+
7
+ export type AccessMode = (typeof AccessMode)[keyof typeof AccessMode];
@@ -0,0 +1,7 @@
1
+ export declare const AccessRuleName: {
2
+ X: string;
3
+ R: string;
4
+ W: string;
5
+ D: string;
6
+ };
7
+ export type AccessRuleName = (typeof AccessRuleName)[keyof typeof AccessRuleName];
@@ -0,0 +1,9 @@
1
+ export const AccessRuleName = {
2
+ X: 'x',
3
+ R: 'r',
4
+ W: 'w',
5
+ D: 'd',
6
+ };
7
+
8
+ export type AccessRuleName =
9
+ (typeof AccessRuleName)[keyof typeof AccessRuleName];
@@ -0,0 +1,2 @@
1
+ export * from './AccessMode.enum';
2
+ export * from './AccessRuleName.enum';
@@ -0,0 +1,2 @@
1
+ export * from './AccessMode.enum';
2
+ export * from './AccessRuleName.enum';
@@ -1,7 +1,7 @@
1
- declare const _default: {
1
+ export declare const headers: {
2
2
  value: string;
3
3
  locale: string;
4
4
  field: string;
5
+ show: boolean;
5
6
  sort: any;
6
7
  }[];
7
- export default _default;