@webitel/ui-datalist 26.8.17 → 26.8.19

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 (160) hide show
  1. package/package.json +1 -1
  2. package/src/modules/filters/components/column/column-filter-preview.vue +2 -1
  3. package/src/modules/filters/components/column/column-filter.vue +8 -1
  4. package/src/modules/filters/components/config/static-view/__tests__/static-filter-field.spec.ts +6 -6
  5. package/src/modules/filters/components/filters-actions-menu.vue +7 -1
  6. package/src/modules/filters/components/table-filters-panel.vue +7 -1
  7. package/src/modules/filters/composables/useFilterValuePreview.ts +9 -3
  8. package/src/modules/filters/modules/filterConfig/components/_custom/filterConfig.ts +4 -8
  9. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-field.vue +2 -2
  10. package/src/modules/filters/modules/filterConfig/components/_shared/has-options/__tests__/has-option-filter-value-field.spec.ts +1 -1
  11. package/src/modules/filters/modules/filterConfig/components/agent/agent-filter-value-field.vue +10 -4
  12. package/src/modules/filters/modules/filterConfig/components/agent/index.ts +22 -0
  13. package/src/modules/filters/modules/filterConfig/components/auditor/auditor-filter-value-field.vue +7 -1
  14. package/src/modules/filters/modules/filterConfig/components/auditor/index.ts +3 -6
  15. package/src/modules/filters/modules/filterConfig/components/bucket/bucket-filter-value-field.vue +7 -1
  16. package/src/modules/filters/modules/filterConfig/components/bucket/index.ts +3 -6
  17. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue +7 -1
  18. package/src/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.ts +9 -4
  19. package/src/modules/filters/modules/filterConfig/components/case-author/case-author-filter-value-field.vue +9 -2
  20. package/src/modules/filters/modules/filterConfig/components/case-author/index.ts +22 -0
  21. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue +16 -8
  22. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/filterConfig.ts +44 -0
  23. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/index.ts +10 -0
  24. package/src/modules/filters/modules/filterConfig/components/case-impacted/case-impacted-filter-value-field.vue +9 -2
  25. package/src/modules/filters/modules/filterConfig/components/case-impacted/index.ts +23 -0
  26. package/src/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-field.vue +9 -2
  27. package/src/modules/filters/modules/filterConfig/components/case-priority/index.ts +26 -0
  28. package/src/modules/filters/modules/filterConfig/components/case-reporter/case-reporter-filter-value-field.vue +9 -2
  29. package/src/modules/filters/modules/filterConfig/components/case-reporter/index.ts +23 -0
  30. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-field.vue +18 -5
  31. package/src/modules/filters/modules/filterConfig/components/case-service/filterConfig.ts +33 -0
  32. package/src/modules/filters/modules/filterConfig/components/case-service/index.ts +10 -0
  33. package/src/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-field.vue +9 -2
  34. package/src/modules/filters/modules/filterConfig/components/case-sla/index.ts +22 -0
  35. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-field.vue +14 -5
  36. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/filterConfig.ts +38 -0
  37. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/index.ts +10 -0
  38. package/src/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-field.vue +9 -2
  39. package/src/modules/filters/modules/filterConfig/components/case-source/index.ts +22 -0
  40. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-field.vue +14 -8
  41. package/src/modules/filters/modules/filterConfig/components/case-status/filterConfig.ts +40 -0
  42. package/src/modules/filters/modules/filterConfig/components/case-status/index.ts +10 -0
  43. package/src/modules/filters/modules/filterConfig/components/contact/contact-filter-value-field.vue +9 -2
  44. package/src/modules/filters/modules/filterConfig/components/contact/index.ts +22 -0
  45. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue +10 -2
  46. package/src/modules/filters/modules/filterConfig/components/contact-group/index.ts +7 -2
  47. package/src/modules/filters/modules/filterConfig/components/contact-label/contact-label-filter-value-field.vue +8 -2
  48. package/src/modules/filters/modules/filterConfig/components/contact-label/index.ts +6 -4
  49. package/src/modules/filters/modules/filterConfig/components/contact-owner/contact-owner-filter-value-field.vue +7 -1
  50. package/src/modules/filters/modules/filterConfig/components/contact-owner/index.ts +3 -6
  51. package/src/modules/filters/modules/filterConfig/components/gateway/gateway-filter-value-field.vue +8 -10
  52. package/src/modules/filters/modules/filterConfig/components/gateway/index.ts +31 -0
  53. package/src/modules/filters/modules/filterConfig/components/grantee/grantee-filter-value-field.vue +9 -2
  54. package/src/modules/filters/modules/filterConfig/components/grantee/index.ts +22 -0
  55. package/src/modules/filters/modules/filterConfig/components/has-user/has-user-filter-value-field.vue +2 -3
  56. package/src/modules/filters/modules/filterConfig/components/index.ts +38 -64
  57. package/src/modules/filters/modules/filterConfig/components/queue/index.ts +3 -6
  58. package/src/modules/filters/modules/filterConfig/components/queue/queue-filter-value-field.vue +7 -1
  59. package/src/modules/filters/modules/filterConfig/components/rated-by/index.ts +22 -0
  60. package/src/modules/filters/modules/filterConfig/components/rated-by/rated-by-filter-value-field.vue +8 -3
  61. package/src/modules/filters/modules/filterConfig/components/region/index.ts +3 -6
  62. package/src/modules/filters/modules/filterConfig/components/region/region-filter-value-field.vue +7 -1
  63. package/src/modules/filters/modules/filterConfig/components/skill/index.ts +3 -6
  64. package/src/modules/filters/modules/filterConfig/components/skill/skill-filter-value-field.vue +7 -1
  65. package/src/modules/filters/modules/filterConfig/components/supervisor/index.ts +6 -6
  66. package/src/modules/filters/modules/filterConfig/components/supervisor/supervisor-filter-value-field.vue +7 -1
  67. package/src/modules/filters/modules/filterConfig/components/tags/index.ts +3 -6
  68. package/src/modules/filters/modules/filterConfig/components/tags/tags-filter-value-field.vue +7 -1
  69. package/src/modules/filters/modules/filterConfig/components/team/index.ts +3 -6
  70. package/src/modules/filters/modules/filterConfig/components/team/team-filter-value-field.vue +7 -1
  71. package/src/modules/filters/modules/filterConfig/components/user/index.ts +22 -0
  72. package/src/modules/filters/modules/filterConfig/components/user/user-filter-value-field.vue +8 -3
  73. package/src/modules/filters/modules/filterConfig/composables/useFilterReadAccess.ts +55 -0
  74. package/src/modules/filters/scripts/canLoadPreviewRecords.ts +35 -0
  75. package/types/.tsbuildinfo +1 -1
  76. package/types/modules/filters/components/column/column-filter-preview.vue.d.ts +2 -0
  77. package/types/modules/filters/components/column/column-filter.vue.d.ts +2 -0
  78. package/types/modules/filters/components/filters-actions-menu.vue.d.ts +2 -0
  79. package/types/modules/filters/components/table-filters-panel.vue.d.ts +3 -0
  80. package/types/modules/filters/modules/filterConfig/components/agent/agent-filter-value-field.vue.d.ts +2 -2
  81. package/types/modules/filters/modules/filterConfig/components/agent/index.d.ts +29 -0
  82. package/types/modules/filters/modules/filterConfig/components/auditor/index.d.ts +1 -4
  83. package/types/modules/filters/modules/filterConfig/components/bucket/index.d.ts +1 -4
  84. package/types/modules/filters/modules/filterConfig/components/case-author/case-author-filter-value-field.vue.d.ts +2 -0
  85. package/types/modules/filters/modules/filterConfig/components/case-author/index.d.ts +29 -0
  86. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue.d.ts +2 -0
  87. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/filterConfig.d.ts +48 -0
  88. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/index.d.ts +5 -0
  89. package/types/modules/filters/modules/filterConfig/components/case-impacted/case-impacted-filter-value-field.vue.d.ts +2 -0
  90. package/types/modules/filters/modules/filterConfig/components/case-impacted/index.d.ts +29 -0
  91. package/types/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-field.vue.d.ts +2 -0
  92. package/types/modules/filters/modules/filterConfig/components/case-priority/index.d.ts +29 -0
  93. package/types/modules/filters/modules/filterConfig/components/case-reporter/case-reporter-filter-value-field.vue.d.ts +2 -0
  94. package/types/modules/filters/modules/filterConfig/components/case-reporter/index.d.ts +29 -0
  95. package/types/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-field.vue.d.ts +7 -2
  96. package/types/modules/filters/modules/filterConfig/components/case-service/filterConfig.d.ts +29 -0
  97. package/types/modules/filters/modules/filterConfig/components/case-service/index.d.ts +5 -0
  98. package/types/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-field.vue.d.ts +2 -0
  99. package/types/modules/filters/modules/filterConfig/components/case-sla/index.d.ts +29 -0
  100. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-field.vue.d.ts +2 -0
  101. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/filterConfig.d.ts +48 -0
  102. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/index.d.ts +5 -0
  103. package/types/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-field.vue.d.ts +2 -0
  104. package/types/modules/filters/modules/filterConfig/components/case-source/index.d.ts +29 -0
  105. package/types/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-field.vue.d.ts +2 -0
  106. package/types/modules/filters/modules/filterConfig/components/case-status/filterConfig.d.ts +49 -0
  107. package/types/modules/filters/modules/filterConfig/components/case-status/index.d.ts +5 -0
  108. package/types/modules/filters/modules/filterConfig/components/contact/contact-filter-value-field.vue.d.ts +2 -0
  109. package/types/modules/filters/modules/filterConfig/components/contact/index.d.ts +29 -0
  110. package/types/modules/filters/modules/filterConfig/components/contact-owner/index.d.ts +1 -4
  111. package/types/modules/filters/modules/filterConfig/components/gateway/gateway-filter-value-field.vue.d.ts +1 -1
  112. package/types/modules/filters/modules/filterConfig/components/gateway/index.d.ts +29 -0
  113. package/types/modules/filters/modules/filterConfig/components/grantee/grantee-filter-value-field.vue.d.ts +2 -0
  114. package/types/modules/filters/modules/filterConfig/components/grantee/index.d.ts +29 -0
  115. package/types/modules/filters/modules/filterConfig/components/has-user/has-user-filter-value-field.vue.d.ts +1 -2
  116. package/types/modules/filters/modules/filterConfig/components/index.d.ts +409 -77
  117. package/types/modules/filters/modules/filterConfig/components/queue/index.d.ts +1 -4
  118. package/types/modules/filters/modules/filterConfig/components/rated-by/index.d.ts +29 -0
  119. package/types/modules/filters/modules/filterConfig/components/rated-by/rated-by-filter-value-field.vue.d.ts +1 -1
  120. package/types/modules/filters/modules/filterConfig/components/region/index.d.ts +1 -4
  121. package/types/modules/filters/modules/filterConfig/components/skill/index.d.ts +1 -4
  122. package/types/modules/filters/modules/filterConfig/components/supervisor/index.d.ts +1 -4
  123. package/types/modules/filters/modules/filterConfig/components/tags/index.d.ts +1 -4
  124. package/types/modules/filters/modules/filterConfig/components/team/index.d.ts +1 -4
  125. package/types/modules/filters/modules/filterConfig/components/user/index.d.ts +29 -0
  126. package/types/modules/filters/modules/filterConfig/components/user/user-filter-value-field.vue.d.ts +1 -1
  127. package/types/modules/filters/modules/filterConfig/composables/useFilterReadAccess.d.ts +19 -0
  128. package/types/modules/filters/scripts/canLoadPreviewRecords.d.ts +3 -0
  129. package/src/modules/filters/modules/filterConfig/components/agent/config.js +0 -3
  130. package/src/modules/filters/modules/filterConfig/components/case-author/config.js +0 -3
  131. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/config.js +0 -8
  132. package/src/modules/filters/modules/filterConfig/components/case-impacted/config.js +0 -3
  133. package/src/modules/filters/modules/filterConfig/components/case-priority/config.js +0 -3
  134. package/src/modules/filters/modules/filterConfig/components/case-reporter/config.js +0 -3
  135. package/src/modules/filters/modules/filterConfig/components/case-service/config.js +0 -4
  136. package/src/modules/filters/modules/filterConfig/components/case-sla/config.js +0 -3
  137. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/config.js +0 -4
  138. package/src/modules/filters/modules/filterConfig/components/case-source/config.js +0 -3
  139. package/src/modules/filters/modules/filterConfig/components/case-status/config.js +0 -8
  140. package/src/modules/filters/modules/filterConfig/components/contact/config.js +0 -3
  141. package/src/modules/filters/modules/filterConfig/components/gateway/config.js +0 -3
  142. package/src/modules/filters/modules/filterConfig/components/grantee/config.js +0 -3
  143. package/src/modules/filters/modules/filterConfig/components/rated-by/config.js +0 -3
  144. package/src/modules/filters/modules/filterConfig/components/user/config.js +0 -3
  145. package/types/modules/filters/modules/filterConfig/components/agent/config.d.ts +0 -7
  146. package/types/modules/filters/modules/filterConfig/components/case-author/config.d.ts +0 -7
  147. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/config.d.ts +0 -16
  148. package/types/modules/filters/modules/filterConfig/components/case-impacted/config.d.ts +0 -7
  149. package/types/modules/filters/modules/filterConfig/components/case-priority/config.d.ts +0 -7
  150. package/types/modules/filters/modules/filterConfig/components/case-reporter/config.d.ts +0 -7
  151. package/types/modules/filters/modules/filterConfig/components/case-service/config.d.ts +0 -14
  152. package/types/modules/filters/modules/filterConfig/components/case-sla/config.d.ts +0 -7
  153. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/config.d.ts +0 -16
  154. package/types/modules/filters/modules/filterConfig/components/case-source/config.d.ts +0 -7
  155. package/types/modules/filters/modules/filterConfig/components/case-status/config.d.ts +0 -17
  156. package/types/modules/filters/modules/filterConfig/components/contact/config.d.ts +0 -7
  157. package/types/modules/filters/modules/filterConfig/components/gateway/config.d.ts +0 -7
  158. package/types/modules/filters/modules/filterConfig/components/grantee/config.d.ts +0 -4
  159. package/types/modules/filters/modules/filterConfig/components/rated-by/config.d.ts +0 -7
  160. package/types/modules/filters/modules/filterConfig/components/user/config.d.ts +0 -7
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="labelValue"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :model-value="model"
6
7
  :v="!disableValidation && v$.model"
7
8
  option-value="id"
@@ -13,18 +14,19 @@
13
14
  import { useVuelidate } from '@vuelidate/core';
14
15
  import { required } from '@vuelidate/validators';
15
16
  import { WtMultiSelect } from '@webitel/ui-sdk/components';
17
+ import { WtObject } from '@webitel/ui-sdk/enums';
16
18
  import { computed, onMounted, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
21
  import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
20
- import { searchMethod } from './config.js';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
21
23
 
22
24
  type ModelValue = number[];
23
25
 
24
26
  const model = defineModel<ModelValue>();
25
27
 
26
28
  const props = defineProps<{
27
- filterConfig?: WtSysTypeFilterConfig;
29
+ filterConfig: WtSysTypeFilterConfig;
28
30
  disableValidation?: boolean;
29
31
  }>();
30
32
 
@@ -35,6 +37,9 @@ const emit = defineEmits<{
35
37
  }>();
36
38
  const { t } = useI18n();
37
39
 
40
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.User);
41
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
42
+
38
43
  const labelValue = computed(() => {
39
44
  const value = props?.filterConfig?.showFilterName
40
45
  ? props?.filterConfig.name
@@ -0,0 +1,55 @@
1
+ import type { WtObject } from '@webitel/ui-sdk/enums';
2
+ import {
3
+ type FilterHasReadAccess,
4
+ injectFilterReadAccess,
5
+ } from '@webitel/ui-sdk/modules/Userinfo';
6
+ import { computed } from 'vue';
7
+
8
+ export type { FilterHasReadAccess };
9
+
10
+ type SearchResult<Item> = {
11
+ items?: Item[];
12
+ next?: boolean;
13
+ };
14
+
15
+ type GatedSearchResult<Item> = {
16
+ items: Item[];
17
+ next?: boolean;
18
+ };
19
+
20
+ export type GatedFilterSearch<Args extends unknown[], Item> = ((
21
+ ...args: Args
22
+ ) => Promise<GatedSearchResult<Item>>) & {
23
+ accessObject: WtObject;
24
+ };
25
+
26
+ export const gateFilterSearch = <Item, Args extends unknown[]>(
27
+ object: WtObject,
28
+ search: (...args: Args) => Promise<SearchResult<Item>>,
29
+ ): GatedFilterSearch<Args, Item> => {
30
+ const gated = (async (...args) => {
31
+ const result = await search(...args);
32
+ return {
33
+ ...result,
34
+ items: result.items ?? [],
35
+ };
36
+ }) as GatedFilterSearch<Args, Item>;
37
+
38
+ // preview has no WtObject of its own and checks Read against this tag
39
+ gated.accessObject = object;
40
+ return gated;
41
+ };
42
+
43
+ export const useFilterReadAccess = (object: WtObject) => {
44
+ const getHasReadAccess = injectFilterReadAccess();
45
+
46
+ const hasReadAccess = computed(() => getHasReadAccess()?.(object) ?? false);
47
+
48
+ const gateSearch = <T>(search: T) =>
49
+ computed(() => (hasReadAccess.value ? search : undefined));
50
+
51
+ return {
52
+ hasReadAccess,
53
+ gateSearch,
54
+ };
55
+ };
@@ -0,0 +1,35 @@
1
+ import type { DataField } from '@webitel/api-services/gen/models';
2
+ import type { WtObject } from '@webitel/ui-sdk/enums';
3
+ import {
4
+ type FilterHasReadAccess,
5
+ hasLookupFieldReadAccess,
6
+ } from '@webitel/ui-sdk/modules/Userinfo';
7
+
8
+ import type { AnyFilterConfig } from '../modules/filterConfig/classes/FilterConfig';
9
+
10
+ const isCustomLookupConfig = (
11
+ config: AnyFilterConfig,
12
+ ): config is AnyFilterConfig & {
13
+ field: DataField;
14
+ } => 'field' in config;
15
+
16
+ const readAccessObject = (config: AnyFilterConfig): WtObject | undefined => {
17
+ if (!('searchRecords' in config)) return undefined;
18
+ if (!('accessObject' in config.searchRecords)) return undefined;
19
+
20
+ return config.searchRecords.accessObject as WtObject | undefined;
21
+ };
22
+
23
+ export const canLoadPreviewRecords = (
24
+ config: AnyFilterConfig,
25
+ checker: FilterHasReadAccess | undefined,
26
+ ) => {
27
+ if (isCustomLookupConfig(config)) {
28
+ return hasLookupFieldReadAccess(config.field, checker);
29
+ }
30
+
31
+ const accessObject = readAccessObject(config);
32
+ if (!accessObject) return true;
33
+
34
+ return checker?.(accessObject) ?? false;
35
+ };