@webitel/ui-datalist 1.1.49 → 1.1.51

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-datalist",
3
- "version": "1.1.49",
3
+ "version": "1.1.51",
4
4
  "description": "Toolkit for building data lists in webitel ui system",
5
5
  "scripts": {
6
6
  "build:types": "vue-tsc -p ./tsconfig.build.json",
@@ -91,6 +91,10 @@
91
91
  "./card": {
92
92
  "types": "./types/modules/card/index.d.ts",
93
93
  "import": "./src/modules/card/index.ts"
94
+ },
95
+ "./permissions-page": {
96
+ "types": "./types/modules/permissions-page/index.d.ts",
97
+ "import": "./src/modules/permissions-page/index.ts"
94
98
  }
95
99
  }
96
100
  }
@@ -0,0 +1,79 @@
1
+ <template>
2
+ <permissions-tab-content v-bind="tabContentProps">
3
+ <template #pagination>
4
+ <wt-pagination
5
+ :next="next"
6
+ :prev="page > 1"
7
+ :size="size"
8
+ debounce
9
+ @change="updateSize"
10
+ @next="updatePage(page + 1)"
11
+ @prev="updatePage(page - 1)"
12
+ />
13
+ </template>
14
+ </permissions-tab-content>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import {
19
+ DEFAULT_PERMISSIONS_USER_ACCESS,
20
+ PermissionsTabContent,
21
+ type PermissionsUserAccess,
22
+ } from '@webitel/ui-sdk/modules/ObjectPermissions';
23
+ import type { Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
24
+ import { storeToRefs } from 'pinia';
25
+ import { computed, onUnmounted } from 'vue';
26
+ import type { PermissionsPiniaStore } from '../stores/createPermissionsStore';
27
+
28
+ const props = withDefaults(
29
+ defineProps<{
30
+ store: () => PermissionsPiniaStore;
31
+ access: PermissionsUserAccess;
32
+ parentId?: Id;
33
+ }>(),
34
+ {
35
+ access: () => DEFAULT_PERMISSIONS_USER_ACCESS,
36
+ },
37
+ );
38
+
39
+ const permissionsStore = props.store();
40
+
41
+ const { dataList, isLoading, headers, page, size, next, error } =
42
+ storeToRefs(permissionsStore);
43
+
44
+ const {
45
+ initialize,
46
+ loadDataList,
47
+ updatePage,
48
+ updateSize,
49
+ updateSort,
50
+ changeAccessMode,
51
+ addRolePermissions,
52
+ $reset,
53
+ } = permissionsStore;
54
+
55
+ initialize({
56
+ parentId: props.parentId,
57
+ });
58
+
59
+ onUnmounted(() => {
60
+ $reset();
61
+ });
62
+
63
+ const existingGranteeIds = computed(() =>
64
+ dataList.value.map((item) => item.grantee.id),
65
+ );
66
+
67
+ const tabContentProps = computed(() => ({
68
+ dataList: dataList.value,
69
+ isLoading: isLoading.value,
70
+ headers: headers.value,
71
+ error: error.value,
72
+ refresh: loadDataList,
73
+ sort: updateSort,
74
+ changeAccessMode,
75
+ existingGranteeIds: existingGranteeIds.value,
76
+ addRolePermissions,
77
+ access: props.access,
78
+ }));
79
+ </script>
@@ -0,0 +1,23 @@
1
+ import PermissionsTab from './components/permissions-tab.vue';
2
+
3
+ export {
4
+ AccessMode,
5
+ AccessRuleName,
6
+ headers,
7
+ PermissionsRolePopup,
8
+ } from '@webitel/ui-sdk/modules/ObjectPermissions';
9
+
10
+ export { PermissionsApiModule } from './scripts/PermissionsApiModule';
11
+ export type { PermissionsPiniaStore } from './stores/createPermissionsStore';
12
+ export {
13
+ createPermissionsStore,
14
+ permissionsStoreBody,
15
+ } from './stores/createPermissionsStore';
16
+ export type {
17
+ PermissionEntity,
18
+ PermissionGrantee,
19
+ PermissionsChange,
20
+ RawPermissionsApiModule,
21
+ } from './types/Permission.types';
22
+
23
+ export { PermissionsTab };
@@ -0,0 +1,21 @@
1
+ import type { ApiModule } from '@webitel/ui-sdk/src/api/types/ApiModule';
2
+
3
+ import type {
4
+ PermissionEntity,
5
+ RawPermissionsApiModule,
6
+ } from '../types/Permission.types';
7
+
8
+ /**
9
+ * Every card API in api-services/ui-sdk already exposes permissions
10
+ * via `...generatePermissionsApi(baseUrl)` under `getPermissionsList`/`patchPermissions`.
11
+ * This adapts that shape to the generic `ApiModule` contract expected by createTableStore,
12
+ * so no parent API module needs to be rewritten to plug into the permissions store.
13
+ */
14
+ export const PermissionsApiModule = (
15
+ rawApiModule: RawPermissionsApiModule,
16
+ ): ApiModule<PermissionEntity> => {
17
+ return {
18
+ getList: rawApiModule.getPermissionsList,
19
+ patch: rawApiModule.patchPermissions,
20
+ } as unknown as ApiModule<PermissionEntity>;
21
+ };
@@ -0,0 +1,162 @@
1
+ import { AccessMode, headers } from '@webitel/ui-sdk/modules/ObjectPermissions';
2
+ import { AccessRuleName } from '@webitel/ui-sdk/modules/ObjectPermissions/enums';
3
+ import type { Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
4
+ import type { StoreGeneric } from 'pinia';
5
+ import { ref } from 'vue';
6
+ import {
7
+ createDatalistStore,
8
+ makeThisToRefs,
9
+ } from '../../_shared/createDatalistStore';
10
+ import { tableStoreBody } from '../../table/createTableStore.store';
11
+ import type { useTableStoreConfig } from '../../types/tableStore.types';
12
+ import { PermissionsApiModule } from '../scripts/PermissionsApiModule';
13
+ import type {
14
+ ChangeAccessModePayload,
15
+ PermissionEntity,
16
+ PermissionsChange,
17
+ RawPermissionsApiModule,
18
+ } from '../types/Permission.types';
19
+
20
+ const resolveModeId = (mode: ChangeAccessModePayload['mode']) =>
21
+ typeof mode === 'number' ? mode : mode?.id;
22
+
23
+ /*
24
+ has | patch | got
25
+ -----+-------+-----
26
+ - | w | w
27
+ w | w | -
28
+ - | ww | ww
29
+ w | ww | ww
30
+ ww | ww | w
31
+ ww | w | -
32
+ */
33
+ const resolveGrants = ({
34
+ item,
35
+ ruleName,
36
+ mode,
37
+ }: ChangeAccessModePayload): string | null => {
38
+ const have = item.access[ruleName];
39
+
40
+ switch (resolveModeId(mode)) {
41
+ case AccessMode.Forbidden:
42
+ return ruleName;
43
+ case AccessMode.Allow:
44
+ return have.rule || ruleName;
45
+ case AccessMode.Manage:
46
+ return `${ruleName}${ruleName}`;
47
+ default:
48
+ return null;
49
+ }
50
+ };
51
+
52
+ export const permissionsStoreBody = (
53
+ namespace: string,
54
+ config: useTableStoreConfig<PermissionEntity>,
55
+ ) => {
56
+ const tableStore = tableStoreBody<PermissionEntity>(namespace, config);
57
+ const { dataList, selected, error, isLoading } = makeThisToRefs(
58
+ tableStore,
59
+ config.storeType,
60
+ );
61
+ const {
62
+ initialize: tableStoreInitialize,
63
+ loadDataList,
64
+ resetInfiniteScrollTableParamsToDefaults,
65
+ } = tableStore;
66
+
67
+ /*
68
+ * `tableStoreBody` keeps its own `parentId` internally (for `loadDataList`),
69
+ * but does not expose it in the `tableStore` API. Permissions patches need
70
+ * the same `parentId`, so this store keeps a local copy and syncs it in
71
+ * `initialize`.
72
+ */
73
+ const parentId = ref<Id>();
74
+
75
+ const initialize: typeof tableStoreInitialize = (options) => {
76
+ parentId.value = options.parentId;
77
+ return tableStoreInitialize(options);
78
+ };
79
+
80
+ const patchPermissions = async (changes: PermissionsChange[]) => {
81
+ try {
82
+ await (
83
+ config.apiModule.patch as unknown as (payload: {
84
+ id: Id;
85
+ changes: PermissionsChange[];
86
+ }) => Promise<unknown>
87
+ )({
88
+ id: parentId.value,
89
+ changes,
90
+ });
91
+ } finally {
92
+ await loadDataList();
93
+ }
94
+ };
95
+
96
+ const changeAccessMode = async (payload: ChangeAccessModePayload) => {
97
+ const grants = resolveGrants(payload);
98
+ if (!grants) return;
99
+
100
+ return patchPermissions([
101
+ {
102
+ grantee: +payload.item.grantee.id,
103
+ grants,
104
+ },
105
+ ]);
106
+ };
107
+
108
+ const addRolePermissions = async (role: { id: Id }) => {
109
+ return patchPermissions([
110
+ {
111
+ grantee: +role.id,
112
+ grants: AccessRuleName.R,
113
+ },
114
+ ]);
115
+ };
116
+ const $reset = () => {
117
+ dataList.value = [];
118
+ selected.value = [];
119
+ error.value = null;
120
+ isLoading.value = false;
121
+ resetInfiniteScrollTableParamsToDefaults();
122
+ parentId.value = null;
123
+ };
124
+
125
+ return {
126
+ ...tableStore,
127
+
128
+ parentId,
129
+ initialize,
130
+
131
+ changeAccessMode,
132
+ addRolePermissions,
133
+
134
+ $reset,
135
+ };
136
+ };
137
+
138
+ export const createPermissionsStore = (
139
+ namespace: string,
140
+ config: Omit<
141
+ useTableStoreConfig<PermissionEntity>,
142
+ 'apiModule' | 'headers'
143
+ > & {
144
+ apiModule: RawPermissionsApiModule;
145
+ headers?: useTableStoreConfig<PermissionEntity>['headers'];
146
+ },
147
+ ) => {
148
+ const normalizedConfig: useTableStoreConfig<PermissionEntity> = {
149
+ ...config,
150
+ apiModule: PermissionsApiModule(config.apiModule),
151
+ headers: config.headers || headers,
152
+ };
153
+
154
+ return createDatalistStore({
155
+ storeBody: () => permissionsStoreBody(namespace, normalizedConfig),
156
+ namespace,
157
+ config: normalizedConfig,
158
+ });
159
+ };
160
+
161
+ export type PermissionsPiniaStore = StoreGeneric &
162
+ ReturnType<ReturnType<typeof createPermissionsStore>>;
@@ -0,0 +1,47 @@
1
+ import type { AccessRuleName } from '@webitel/ui-sdk/modules/ObjectPermissions/enums';
2
+ import type { ApiModule, Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
3
+
4
+ export interface PermissionGrantee {
5
+ id: Id;
6
+ name?: string;
7
+ user?: boolean;
8
+ }
9
+
10
+ export interface PermissionAccessRule {
11
+ id: number;
12
+ rule: string;
13
+ }
14
+
15
+ export interface PermissionEntity {
16
+ id: string;
17
+ etag?: string;
18
+ grantee: PermissionGrantee;
19
+ access: Record<AccessRuleName, PermissionAccessRule>;
20
+ }
21
+
22
+ export interface PermissionsChange {
23
+ grantee: number;
24
+ grants: string;
25
+ }
26
+
27
+ /**
28
+ * Permissions API shape, as produced by generatePermissionsApi (ui-sdk / api-services),
29
+ * spread into every card API module (e.g. `...generatePermissionsApi(baseUrl)`).
30
+ */
31
+ export interface RawPermissionsApiModule {
32
+ getPermissionsList: ApiModule<PermissionEntity>['getList'];
33
+ patchPermissions: (payload: {
34
+ id: Id;
35
+ changes: PermissionsChange[];
36
+ }) => Promise<unknown>;
37
+ }
38
+
39
+ export interface ChangeAccessModePayload {
40
+ item: PermissionEntity;
41
+ ruleName: AccessRuleName;
42
+ mode:
43
+ | {
44
+ id: number;
45
+ }
46
+ | number;
47
+ }
@@ -0,0 +1,13 @@
1
+ import { type PermissionsUserAccess } from '@webitel/ui-sdk/modules/ObjectPermissions';
2
+ import type { Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
3
+ import type { PermissionsPiniaStore } from '../stores/createPermissionsStore';
4
+ type __VLS_Props = {
5
+ store: () => PermissionsPiniaStore;
6
+ access: PermissionsUserAccess;
7
+ parentId?: Id;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
10
+ access: PermissionsUserAccess;
11
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import PermissionsTab from './components/permissions-tab.vue';
2
+ export { AccessMode, AccessRuleName, headers, PermissionsRolePopup, } from '@webitel/ui-sdk/modules/ObjectPermissions';
3
+ export { PermissionsApiModule } from './scripts/PermissionsApiModule';
4
+ export type { PermissionsPiniaStore } from './stores/createPermissionsStore';
5
+ export { createPermissionsStore, permissionsStoreBody, } from './stores/createPermissionsStore';
6
+ export type { PermissionEntity, PermissionGrantee, PermissionsChange, RawPermissionsApiModule, } from './types/Permission.types';
7
+ export { PermissionsTab };
@@ -0,0 +1,9 @@
1
+ import type { ApiModule } from '@webitel/ui-sdk/src/api/types/ApiModule';
2
+ import type { PermissionEntity, RawPermissionsApiModule } from '../types/Permission.types';
3
+ /**
4
+ * Every card API in api-services/ui-sdk already exposes permissions
5
+ * via `...generatePermissionsApi(baseUrl)` under `getPermissionsList`/`patchPermissions`.
6
+ * This adapts that shape to the generic `ApiModule` contract expected by createTableStore,
7
+ * so no parent API module needs to be rewritten to plug into the permissions store.
8
+ */
9
+ export declare const PermissionsApiModule: (rawApiModule: RawPermissionsApiModule) => ApiModule<PermissionEntity>;
@@ -0,0 +1,314 @@
1
+ import type { Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
2
+ import type { StoreGeneric } from 'pinia';
3
+ import type { useTableStoreConfig } from '../../types/tableStore.types';
4
+ import type { ChangeAccessModePayload, PermissionEntity, RawPermissionsApiModule } from '../types/Permission.types';
5
+ export declare const permissionsStoreBody: (namespace: string, config: useTableStoreConfig<PermissionEntity>) => {
6
+ parentId: import("vue").Ref<Id, Id>;
7
+ initialize: ({ parentId: storeParentId, }?: {
8
+ parentId?: string | number;
9
+ }) => Promise<void>;
10
+ changeAccessMode: (payload: ChangeAccessModePayload) => Promise<void>;
11
+ addRolePermissions: (role: {
12
+ id: Id;
13
+ }) => Promise<void>;
14
+ $reset: () => void;
15
+ isStoreSetUp: import("vue").Ref<boolean, boolean>;
16
+ dataList: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
17
+ selected: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
18
+ error: import("vue").Ref<any, any>;
19
+ isLoading: import("vue").Ref<boolean, boolean>;
20
+ page: import("vue").Ref<number, number>;
21
+ size: import("vue").Ref<number, number>;
22
+ next: import("vue").Ref<boolean, boolean>;
23
+ headers: import("vue").Ref<{
24
+ value: string;
25
+ locale?: string | [string];
26
+ text?: string;
27
+ width?: string;
28
+ sort?: boolean;
29
+ show?: boolean;
30
+ field: string;
31
+ shouldBeInitialized?: boolean;
32
+ }[], import("../../types/tableStore.types").DatalistTableHeader[] | {
33
+ value: string;
34
+ locale?: string | [string];
35
+ text?: string;
36
+ width?: string;
37
+ sort?: boolean;
38
+ show?: boolean;
39
+ field: string;
40
+ shouldBeInitialized?: boolean;
41
+ }[]>;
42
+ shownHeaders: import("vue").ComputedRef<{
43
+ value: string;
44
+ locale?: string | [string];
45
+ text?: string;
46
+ width?: string;
47
+ sort?: boolean;
48
+ show?: boolean;
49
+ field: string;
50
+ shouldBeInitialized?: boolean;
51
+ }[]>;
52
+ fields: import("vue").ComputedRef<string[]>;
53
+ sort: import("vue").ComputedRef<string>;
54
+ columnWidths: import("vue").ComputedRef<{}>;
55
+ searchMode: import("vue").Ref<string, string>;
56
+ filtersManager: import("vue").Ref<{
57
+ filters: Map<string, {
58
+ name: import("../../filters").FilterName;
59
+ value: import("../../filters").FilterValue;
60
+ label?: import("../../filters").FilterLabel;
61
+ set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
62
+ }> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
63
+ hasFilter: (name: import("../../filters").FilterName) => boolean;
64
+ getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
65
+ addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
66
+ updateFilter: ({ name, }: {
67
+ name: import("../../filters").FilterName;
68
+ value?: import("../../filters").FilterValue;
69
+ label?: import("../../filters").FilterLabel;
70
+ }) => import("../../filters").IFilter;
71
+ deleteFilter: ({ name }: {
72
+ name: import("../../filters").FilterName;
73
+ }) => import("../../filters").IFilter;
74
+ toString: (options?: {
75
+ include?: import("../../filters").FilterName[];
76
+ exclude?: import("../../filters").FilterName[];
77
+ }) => string;
78
+ fromString: (snapshotStr: string) => void;
79
+ reset: ({ include, exclude, }?: {
80
+ include?: import("../../filters").FilterName[];
81
+ exclude?: import("../../filters").FilterName[];
82
+ }) => void;
83
+ getAllKeys: () => import("../../filters").FilterName[];
84
+ getAllValues: ({ include, exclude, }?: {
85
+ include?: import("../../filters").FilterName[];
86
+ exclude?: import("../../filters").FilterName[];
87
+ }) => {
88
+ [name: import("../../filters").FilterName]: import("../../filters").FilterValue;
89
+ };
90
+ getFiltersList: ({ include, exclude, }?: {
91
+ include?: import("../../filters").FilterName[];
92
+ exclude?: import("../../filters").FilterName[];
93
+ }) => import("../../filters").IFilter[];
94
+ }, {
95
+ filters: Map<string, {
96
+ name: import("../../filters").FilterName;
97
+ value: import("../../filters").FilterValue;
98
+ label?: import("../../filters").FilterLabel;
99
+ set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
100
+ }> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
101
+ hasFilter: (name: import("../../filters").FilterName) => boolean;
102
+ getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
103
+ addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
104
+ updateFilter: ({ name, }: {
105
+ name: import("../../filters").FilterName;
106
+ value?: import("../../filters").FilterValue;
107
+ label?: import("../../filters").FilterLabel;
108
+ }) => import("../../filters").IFilter;
109
+ deleteFilter: ({ name }: {
110
+ name: import("../../filters").FilterName;
111
+ }) => import("../../filters").IFilter;
112
+ toString: (options?: {
113
+ include?: import("../../filters").FilterName[];
114
+ exclude?: import("../../filters").FilterName[];
115
+ }) => string;
116
+ fromString: (snapshotStr: string) => void;
117
+ reset: ({ include, exclude, }?: {
118
+ include?: import("../../filters").FilterName[];
119
+ exclude?: import("../../filters").FilterName[];
120
+ }) => void;
121
+ getAllKeys: () => import("../../filters").FilterName[];
122
+ getAllValues: ({ include, exclude, }?: {
123
+ include?: import("../../filters").FilterName[];
124
+ exclude?: import("../../filters").FilterName[];
125
+ }) => {
126
+ [name: import("../../filters").FilterName]: import("../../filters").FilterValue;
127
+ };
128
+ getFiltersList: ({ include, exclude, }?: {
129
+ include?: import("../../filters").FilterName[];
130
+ exclude?: import("../../filters").FilterName[];
131
+ }) => import("../../filters").IFilter[];
132
+ }>;
133
+ isFiltersRestoring: import("vue").Ref<boolean, boolean>;
134
+ setupStore: () => Promise<void>;
135
+ loadDataList: ({ withLoading, }?: import("../../types/tableStore.types").LoadDataListOptions) => Promise<void>;
136
+ appendToDataList: () => Promise<void>;
137
+ updateSelected: (value: PermissionEntity[]) => void;
138
+ patchItemProperty: ({ index, path, value, }: import("../../types/tableStore.types").PatchItemPropertyParams) => Promise<void>;
139
+ deleteEls: (_els: PermissionEntity[]) => Promise<void>;
140
+ resetInfiniteScrollTableParamsToDefaults: () => void;
141
+ updateSearchMode: (newSearch: string) => void;
142
+ updatePage: (newPage: number) => void;
143
+ updateSize: (newSize: number) => void;
144
+ updateSort: (column: any, options?: {
145
+ order?: SortSymbols;
146
+ } | SortSymbols) => void;
147
+ columnResize: ({ columnName, columnWidth }: {
148
+ columnName: any;
149
+ columnWidth: any;
150
+ }) => void;
151
+ columnReorder: (orderedFields: string[]) => void;
152
+ updateShownHeaders: (value: any) => void;
153
+ hasFilter: any;
154
+ addFilter: any;
155
+ updateFilter: any;
156
+ deleteFilter: any;
157
+ };
158
+ export declare const createPermissionsStore: (namespace: string, config: Omit<useTableStoreConfig<PermissionEntity>, "apiModule" | "headers"> & {
159
+ apiModule: RawPermissionsApiModule;
160
+ headers?: useTableStoreConfig<PermissionEntity>["headers"];
161
+ }) => import("../../types/createDatalistStore.types").PatchableStoreFactory<{
162
+ parentId: import("vue").Ref<Id, Id>;
163
+ initialize: ({ parentId: storeParentId, }?: {
164
+ parentId?: string | number;
165
+ }) => Promise<void>;
166
+ changeAccessMode: (payload: ChangeAccessModePayload) => Promise<void>;
167
+ addRolePermissions: (role: {
168
+ id: Id;
169
+ }) => Promise<void>;
170
+ $reset: () => void;
171
+ isStoreSetUp: import("vue").Ref<boolean, boolean>;
172
+ dataList: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
173
+ selected: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
174
+ error: import("vue").Ref<any, any>;
175
+ isLoading: import("vue").Ref<boolean, boolean>;
176
+ page: import("vue").Ref<number, number>;
177
+ size: import("vue").Ref<number, number>;
178
+ next: import("vue").Ref<boolean, boolean>;
179
+ headers: import("vue").Ref<{
180
+ value: string;
181
+ locale?: string | [string];
182
+ text?: string;
183
+ width?: string;
184
+ sort?: boolean;
185
+ show?: boolean;
186
+ field: string;
187
+ shouldBeInitialized?: boolean;
188
+ }[], import("../../types/tableStore.types").DatalistTableHeader[] | {
189
+ value: string;
190
+ locale?: string | [string];
191
+ text?: string;
192
+ width?: string;
193
+ sort?: boolean;
194
+ show?: boolean;
195
+ field: string;
196
+ shouldBeInitialized?: boolean;
197
+ }[]>;
198
+ shownHeaders: import("vue").ComputedRef<{
199
+ value: string;
200
+ locale?: string | [string];
201
+ text?: string;
202
+ width?: string;
203
+ sort?: boolean;
204
+ show?: boolean;
205
+ field: string;
206
+ shouldBeInitialized?: boolean;
207
+ }[]>;
208
+ fields: import("vue").ComputedRef<string[]>;
209
+ sort: import("vue").ComputedRef<string>;
210
+ columnWidths: import("vue").ComputedRef<{}>;
211
+ searchMode: import("vue").Ref<string, string>;
212
+ filtersManager: import("vue").Ref<{
213
+ filters: Map<string, {
214
+ name: import("../../filters").FilterName;
215
+ value: import("../../filters").FilterValue;
216
+ label?: import("../../filters").FilterLabel;
217
+ set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
218
+ }> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
219
+ hasFilter: (name: import("../../filters").FilterName) => boolean;
220
+ getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
221
+ addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
222
+ updateFilter: ({ name, }: {
223
+ name: import("../../filters").FilterName;
224
+ value?: import("../../filters").FilterValue;
225
+ label?: import("../../filters").FilterLabel;
226
+ }) => import("../../filters").IFilter;
227
+ deleteFilter: ({ name }: {
228
+ name: import("../../filters").FilterName;
229
+ }) => import("../../filters").IFilter;
230
+ toString: (options?: {
231
+ include?: import("../../filters").FilterName[];
232
+ exclude?: import("../../filters").FilterName[];
233
+ }) => string;
234
+ fromString: (snapshotStr: string) => void;
235
+ reset: ({ include, exclude, }?: {
236
+ include?: import("../../filters").FilterName[];
237
+ exclude?: import("../../filters").FilterName[];
238
+ }) => void;
239
+ getAllKeys: () => import("../../filters").FilterName[];
240
+ getAllValues: ({ include, exclude, }?: {
241
+ include?: import("../../filters").FilterName[];
242
+ exclude?: import("../../filters").FilterName[];
243
+ }) => {
244
+ [name: import("../../filters").FilterName]: import("../../filters").FilterValue;
245
+ };
246
+ getFiltersList: ({ include, exclude, }?: {
247
+ include?: import("../../filters").FilterName[];
248
+ exclude?: import("../../filters").FilterName[];
249
+ }) => import("../../filters").IFilter[];
250
+ }, {
251
+ filters: Map<string, {
252
+ name: import("../../filters").FilterName;
253
+ value: import("../../filters").FilterValue;
254
+ label?: import("../../filters").FilterLabel;
255
+ set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
256
+ }> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
257
+ hasFilter: (name: import("../../filters").FilterName) => boolean;
258
+ getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
259
+ addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
260
+ updateFilter: ({ name, }: {
261
+ name: import("../../filters").FilterName;
262
+ value?: import("../../filters").FilterValue;
263
+ label?: import("../../filters").FilterLabel;
264
+ }) => import("../../filters").IFilter;
265
+ deleteFilter: ({ name }: {
266
+ name: import("../../filters").FilterName;
267
+ }) => import("../../filters").IFilter;
268
+ toString: (options?: {
269
+ include?: import("../../filters").FilterName[];
270
+ exclude?: import("../../filters").FilterName[];
271
+ }) => string;
272
+ fromString: (snapshotStr: string) => void;
273
+ reset: ({ include, exclude, }?: {
274
+ include?: import("../../filters").FilterName[];
275
+ exclude?: import("../../filters").FilterName[];
276
+ }) => void;
277
+ getAllKeys: () => import("../../filters").FilterName[];
278
+ getAllValues: ({ include, exclude, }?: {
279
+ include?: import("../../filters").FilterName[];
280
+ exclude?: import("../../filters").FilterName[];
281
+ }) => {
282
+ [name: import("../../filters").FilterName]: import("../../filters").FilterValue;
283
+ };
284
+ getFiltersList: ({ include, exclude, }?: {
285
+ include?: import("../../filters").FilterName[];
286
+ exclude?: import("../../filters").FilterName[];
287
+ }) => import("../../filters").IFilter[];
288
+ }>;
289
+ isFiltersRestoring: import("vue").Ref<boolean, boolean>;
290
+ setupStore: () => Promise<void>;
291
+ loadDataList: ({ withLoading, }?: import("../../types/tableStore.types").LoadDataListOptions) => Promise<void>;
292
+ appendToDataList: () => Promise<void>;
293
+ updateSelected: (value: PermissionEntity[]) => void;
294
+ patchItemProperty: ({ index, path, value, }: import("../../types/tableStore.types").PatchItemPropertyParams) => Promise<void>;
295
+ deleteEls: (_els: PermissionEntity[]) => Promise<void>;
296
+ resetInfiniteScrollTableParamsToDefaults: () => void;
297
+ updateSearchMode: (newSearch: string) => void;
298
+ updatePage: (newPage: number) => void;
299
+ updateSize: (newSize: number) => void;
300
+ updateSort: (column: any, options?: {
301
+ order?: SortSymbols;
302
+ } | SortSymbols) => void;
303
+ columnResize: ({ columnName, columnWidth }: {
304
+ columnName: any;
305
+ columnWidth: any;
306
+ }) => void;
307
+ columnReorder: (orderedFields: string[]) => void;
308
+ updateShownHeaders: (value: any) => void;
309
+ hasFilter: any;
310
+ addFilter: any;
311
+ updateFilter: any;
312
+ deleteFilter: any;
313
+ }>;
314
+ export type PermissionsPiniaStore = StoreGeneric & ReturnType<ReturnType<typeof createPermissionsStore>>;
@@ -0,0 +1,39 @@
1
+ import type { AccessRuleName } from '@webitel/ui-sdk/modules/ObjectPermissions/enums';
2
+ import type { ApiModule, Id } from '@webitel/ui-sdk/src/api/types/ApiModule';
3
+ export interface PermissionGrantee {
4
+ id: Id;
5
+ name?: string;
6
+ user?: boolean;
7
+ }
8
+ export interface PermissionAccessRule {
9
+ id: number;
10
+ rule: string;
11
+ }
12
+ export interface PermissionEntity {
13
+ id: string;
14
+ etag?: string;
15
+ grantee: PermissionGrantee;
16
+ access: Record<AccessRuleName, PermissionAccessRule>;
17
+ }
18
+ export interface PermissionsChange {
19
+ grantee: number;
20
+ grants: string;
21
+ }
22
+ /**
23
+ * Permissions API shape, as produced by generatePermissionsApi (ui-sdk / api-services),
24
+ * spread into every card API module (e.g. `...generatePermissionsApi(baseUrl)`).
25
+ */
26
+ export interface RawPermissionsApiModule {
27
+ getPermissionsList: ApiModule<PermissionEntity>['getList'];
28
+ patchPermissions: (payload: {
29
+ id: Id;
30
+ changes: PermissionsChange[];
31
+ }) => Promise<unknown>;
32
+ }
33
+ export interface ChangeAccessModePayload {
34
+ item: PermissionEntity;
35
+ ruleName: AccessRuleName;
36
+ mode: {
37
+ id: number;
38
+ } | number;
39
+ }