@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
@@ -0,0 +1,44 @@
1
+ import {
2
+ CaseCloseReasonGroupsAPI,
3
+ CaseCloseReasonsAPI,
4
+ } from '@webitel/api-services/api';
5
+ import { WtObject } from '@webitel/ui-sdk/enums';
6
+
7
+ import {
8
+ type FilterConfigBaseParams,
9
+ type FilterConfigSearchRequestParams,
10
+ WtSysTypeFilterConfig,
11
+ } from '../../classes/FilterConfig';
12
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
13
+ import { FilterOption } from '../../enums/FilterOption';
14
+ import CaseCloseReasonGroupsFilterValueField from './case-close-reason-groups-filter-value-field.vue';
15
+ import CaseCloseReasonGroupsFilterValuePreview from './case-close-reason-groups-filter-value-preview.vue';
16
+
17
+ class CaseCloseReasonGroupsFilterConfig extends WtSysTypeFilterConfig {
18
+ readonly name = FilterOption.CaseCloseReasonGroups;
19
+ valueInputComponent = CaseCloseReasonGroupsFilterValueField;
20
+ valuePreviewComponent = CaseCloseReasonGroupsFilterValuePreview;
21
+
22
+ searchGroups = gateFilterSearch(
23
+ WtObject.CloseReasonGroup,
24
+ CaseCloseReasonGroupsAPI.getLookup,
25
+ );
26
+ searchConditions = gateFilterSearch(
27
+ WtObject.CloseReasonGroup,
28
+ CaseCloseReasonsAPI.getLookup,
29
+ );
30
+
31
+ async searchRecords({ id: value, ...rest }: FilterConfigSearchRequestParams) {
32
+ return this.searchConditions({
33
+ parentId: value?.selection,
34
+ id: value?.conditions,
35
+ ...rest,
36
+ });
37
+ }
38
+ }
39
+
40
+ export type { CaseCloseReasonGroupsFilterConfig };
41
+
42
+ export const createCaseCloseReasonGroupsFilterConfig = (
43
+ params?: FilterConfigBaseParams,
44
+ ) => new CaseCloseReasonGroupsFilterConfig(params);
@@ -0,0 +1,10 @@
1
+ import CaseCloseReasonGroupsFilterValueField from './case-close-reason-groups-filter-value-field.vue';
2
+ import CaseCloseReasonGroupsFilterValuePreview from './case-close-reason-groups-filter-value-preview.vue';
3
+ import { createCaseCloseReasonGroupsFilterConfig } from './filterConfig';
4
+
5
+ export type * from './filterConfig';
6
+ export {
7
+ CaseCloseReasonGroupsFilterValueField,
8
+ CaseCloseReasonGroupsFilterValuePreview,
9
+ createCaseCloseReasonGroupsFilterConfig,
10
+ };
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :v="!disableValidation && v$.model"
6
7
  :model-value="model"
7
8
  option-value="id"
@@ -13,14 +14,17 @@
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, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
- import { searchMethod } from './config.js';
21
+ import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
20
23
 
21
24
  type ModelValue = number[];
22
25
 
23
26
  const props = defineProps<{
27
+ filterConfig: WtSysTypeFilterConfig;
24
28
  disableValidation?: boolean;
25
29
  }>();
26
30
 
@@ -33,6 +37,9 @@ const emit = defineEmits<{
33
37
  }>();
34
38
  const { t } = useI18n();
35
39
 
40
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Contact);
41
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
42
+
36
43
  const v$ = useVuelidate(
37
44
  computed(() => ({
38
45
  model: {
@@ -0,0 +1,23 @@
1
+ import { ContactsAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CaseImpactedFilterValueField from './case-impacted-filter-value-field.vue';
11
+ import CaseImpactedFilterValuePreview from './case-impacted-filter-value-preview.vue';
12
+
13
+ class CaseImpactedFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CaseImpacted;
15
+ valueInputComponent = CaseImpactedFilterValueField;
16
+ valuePreviewComponent = CaseImpactedFilterValuePreview;
17
+
18
+ searchRecords = gateFilterSearch(WtObject.Contact, ContactsAPI.getLookup);
19
+ }
20
+
21
+ export const createCaseImpactedFilterConfig = (
22
+ params?: FilterConfigBaseParams,
23
+ ) => new CaseImpactedFilterConfig(params);
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :v="!disableValidation && v$.model"
6
7
  :model-value="model"
7
8
  option-value="id"
@@ -13,14 +14,17 @@
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, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
- import { searchMethod } from './config.js';
21
+ import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
20
23
 
21
24
  type ModelValue = number[];
22
25
 
23
26
  const props = defineProps<{
27
+ filterConfig: WtSysTypeFilterConfig;
24
28
  disableValidation?: boolean;
25
29
  }>();
26
30
 
@@ -34,6 +38,9 @@ const emit = defineEmits<{
34
38
 
35
39
  const { t } = useI18n();
36
40
 
41
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Priorities);
42
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
43
+
37
44
  const v$ = useVuelidate(
38
45
  computed(() => ({
39
46
  model: {
@@ -0,0 +1,26 @@
1
+ import { CasePrioritiesAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CasePriorityFilterValueField from './case-priority-filter-value-field.vue';
11
+ import CasePriorityFilterValuePreview from './case-priority-filter-value-preview.vue';
12
+
13
+ class CasePriorityFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CasePriority;
15
+ valueInputComponent = CasePriorityFilterValueField;
16
+ valuePreviewComponent = CasePriorityFilterValuePreview;
17
+
18
+ searchRecords = gateFilterSearch(
19
+ WtObject.Priorities,
20
+ CasePrioritiesAPI.getLookup,
21
+ );
22
+ }
23
+
24
+ export const createCasePriorityFilterConfig = (
25
+ params?: FilterConfigBaseParams,
26
+ ) => new CasePriorityFilterConfig(params);
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :v="!disableValidation && v$.model"
6
7
  :model-value="model"
7
8
  option-value="id"
@@ -13,14 +14,17 @@
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, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
- import { searchMethod } from './config.js';
21
+ import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
20
23
 
21
24
  type ModelValue = number[];
22
25
 
23
26
  const props = defineProps<{
27
+ filterConfig: WtSysTypeFilterConfig;
24
28
  disableValidation?: boolean;
25
29
  }>();
26
30
 
@@ -33,6 +37,9 @@ const emit = defineEmits<{
33
37
  }>();
34
38
  const { t } = useI18n();
35
39
 
40
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Contact);
41
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
42
+
36
43
  const v$ = useVuelidate(
37
44
  computed(() => ({
38
45
  model: {
@@ -0,0 +1,23 @@
1
+ import { ContactsAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CaseReporterFilterValueField from './case-reporter-filter-value-field.vue';
11
+ import CaseReporterFilterValuePreview from './case-reporter-filter-value-preview.vue';
12
+
13
+ class CaseReporterFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CaseReporter;
15
+ valueInputComponent = CaseReporterFilterValueField;
16
+ valuePreviewComponent = CaseReporterFilterValuePreview;
17
+
18
+ searchRecords = gateFilterSearch(WtObject.Contact, ContactsAPI.getLookup);
19
+ }
20
+
21
+ export const createCaseReporterFilterConfig = (
22
+ params?: FilterConfigBaseParams,
23
+ ) => new CaseReporterFilterConfig(params);
@@ -14,20 +14,27 @@
14
14
 
15
15
  <script lang="ts" setup>
16
16
  import { WtTree } from '@webitel/ui-sdk/components';
17
+ import { WtObject } from '@webitel/ui-sdk/enums';
17
18
  import deepCopy from 'deep-copy';
18
19
  import { onMounted, ref } from 'vue';
19
20
 
20
- import { searchMethod } from './config.js';
21
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
22
+ import type { CaseServiceFilterConfig } from './filterConfig';
21
23
 
22
24
  type ModelValue = string[];
25
+
26
+ const props = defineProps<{
27
+ filterConfig: CaseServiceFilterConfig;
28
+ }>();
29
+
23
30
  const model = defineModel<ModelValue>({
24
31
  default: (): ModelValue => [],
25
32
  });
26
33
 
27
- const catalogData = ref([]);
34
+ const catalogData = ref<unknown[]>([]);
28
35
 
29
36
  const loadCatalogs = async () => {
30
- const { items } = await searchMethod({
37
+ const { items } = await props.filterConfig.searchCatalogs({
31
38
  size: -1, // To get all catalogs with services we need to pass size -1
32
39
  fields: [
33
40
  'id',
@@ -39,14 +46,20 @@ const loadCatalogs = async () => {
39
46
  hasSubservices: true,
40
47
  });
41
48
 
42
- catalogData.value = deepCopy(items);
49
+ catalogData.value = deepCopy(items ?? []);
43
50
  };
44
51
 
45
52
  if (!model.value) {
46
53
  model.value = [];
47
54
  }
48
55
 
49
- onMounted(loadCatalogs);
56
+ const { hasReadAccess } = useFilterReadAccess(WtObject.ServiceCatalog);
57
+
58
+ onMounted(() => {
59
+ if (hasReadAccess.value) {
60
+ loadCatalogs();
61
+ }
62
+ });
50
63
  </script>
51
64
 
52
65
  <style lang="scss" scoped>
@@ -0,0 +1,33 @@
1
+ import { ServiceCatalogsAPI, ServicesAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CaseServiceFilterValueField from './case-service-filter-value-field.vue';
11
+ import CaseServiceFilterValuePreview from './case-service-filter-value-preview.vue';
12
+
13
+ class CaseServiceFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CaseService;
15
+ valueInputComponent = CaseServiceFilterValueField;
16
+ valuePreviewComponent = CaseServiceFilterValuePreview;
17
+
18
+ searchCatalogs = gateFilterSearch(
19
+ WtObject.ServiceCatalog,
20
+ ServiceCatalogsAPI.getList,
21
+ );
22
+
23
+ searchRecords = gateFilterSearch(
24
+ WtObject.ServiceCatalog,
25
+ ServicesAPI.getLookup,
26
+ );
27
+ }
28
+
29
+ export type { CaseServiceFilterConfig };
30
+
31
+ export const createCaseServiceFilterConfig = (
32
+ params?: FilterConfigBaseParams,
33
+ ) => new CaseServiceFilterConfig(params);
@@ -0,0 +1,10 @@
1
+ import CaseServiceFilterValueField from './case-service-filter-value-field.vue';
2
+ import CaseServiceFilterValuePreview from './case-service-filter-value-preview.vue';
3
+ import { createCaseServiceFilterConfig } from './filterConfig';
4
+
5
+ export type * from './filterConfig';
6
+ export {
7
+ CaseServiceFilterValueField,
8
+ CaseServiceFilterValuePreview,
9
+ createCaseServiceFilterConfig,
10
+ };
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :v="!disableValidation && v$.model"
6
7
  :model-value="model"
7
8
  option-value="id"
@@ -13,14 +14,17 @@
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, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
- import { searchMethod } from './config.js';
21
+ import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
20
23
 
21
24
  type ModelValue = number[];
22
25
 
23
26
  const props = defineProps<{
27
+ filterConfig: WtSysTypeFilterConfig;
24
28
  disableValidation?: boolean;
25
29
  }>();
26
30
 
@@ -34,6 +38,9 @@ const emit = defineEmits<{
34
38
 
35
39
  const { t } = useI18n();
36
40
 
41
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Slas);
42
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
43
+
37
44
  const v$ = useVuelidate(
38
45
  computed(() => ({
39
46
  model: {
@@ -0,0 +1,22 @@
1
+ import { SlasAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CaseSlaFilterValueField from './case-sla-filter-value-field.vue';
11
+ import CaseSlaFilterValuePreview from './case-sla-filter-value-preview.vue';
12
+
13
+ class CaseSlaFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CaseSla;
15
+ valueInputComponent = CaseSlaFilterValueField;
16
+ valuePreviewComponent = CaseSlaFilterValuePreview;
17
+
18
+ searchRecords = gateFilterSearch(WtObject.Slas, SlasAPI.getLookup);
19
+ }
20
+
21
+ export const createCaseSlaFilterConfig = (params?: FilterConfigBaseParams) =>
22
+ new CaseSlaFilterConfig(params);
@@ -3,7 +3,8 @@
3
3
  <wt-single-select
4
4
  :show-clear="false"
5
5
  :label="t('cases.appliedSLA')"
6
- :search-method="slasSearchMethod"
6
+ :disabled="!hasReadAccess"
7
+ :search-method="slasLookupSearchMethod"
7
8
  :v="!disableValidation && vSelection"
8
9
  :model-value="value.selection"
9
10
  data-key="id"
@@ -14,9 +15,9 @@
14
15
  <wt-multi-select
15
16
  v-if="value.selection"
16
17
  :key="value.selection"
17
- :disabled="!value.selection"
18
+ :disabled="!hasReadAccess || !value.selection"
18
19
  :label="t('webitelUI.filters.filterValue')"
19
- :search-method="getConditionList"
20
+ :search-method="conditionsSearchMethod"
20
21
  :v="!disableValidation && vConditions"
21
22
  :model-value="value.conditions"
22
23
  data-key="id"
@@ -30,12 +31,15 @@
30
31
  import { useVuelidate } from '@vuelidate/core';
31
32
  import { required } from '@vuelidate/validators';
32
33
  import { WtMultiSelect, WtSingleSelect } from '@webitel/ui-sdk/components';
34
+ import { WtObject } from '@webitel/ui-sdk/enums';
33
35
  import { computed, watch } from 'vue';
34
36
  import { useI18n } from 'vue-i18n';
35
37
 
36
- import { slasConditionsSearchMethod, slasSearchMethod } from './config.js';
38
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
39
+ import type { CaseSlaConditionFilterConfig } from './filterConfig';
37
40
 
38
41
  const props = defineProps<{
42
+ filterConfig: CaseSlaConditionFilterConfig;
39
43
  disableValidation?: boolean;
40
44
  }>();
41
45
 
@@ -51,6 +55,8 @@ const model = defineModel<ModelValue>({
51
55
  });
52
56
  const { t } = useI18n();
53
57
 
58
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Slas);
59
+
54
60
  const value = computed<ModelValue>(
55
61
  () =>
56
62
  model.value ?? {
@@ -77,12 +83,15 @@ const updateSelected = (selection: string) => {
77
83
  };
78
84
 
79
85
  const getConditionList = async (params: Record<string, unknown>) => {
80
- return await slasConditionsSearchMethod({
86
+ return await props.filterConfig.searchConditions({
81
87
  parentId: value.value.selection,
82
88
  ...params,
83
89
  });
84
90
  };
85
91
 
92
+ const slasLookupSearchMethod = gateSearch(props.filterConfig.searchSlas);
93
+ const conditionsSearchMethod = gateSearch(getConditionList);
94
+
86
95
  const v$ = useVuelidate<{
87
96
  model: ModelValue;
88
97
  }>(
@@ -0,0 +1,38 @@
1
+ import { SLAConditionsAPI, SlasAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ type FilterConfigSearchRequestParams,
7
+ WtSysTypeFilterConfig,
8
+ } from '../../classes/FilterConfig';
9
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
10
+ import { FilterOption } from '../../enums/FilterOption';
11
+ import CaseSlaConditionFilterValueField from './case-sla-condition-filter-value-field.vue';
12
+ import CaseSlaConditionFilterValuePreview from './case-sla-condition-filter-value-preview.vue';
13
+
14
+ class CaseSlaConditionFilterConfig extends WtSysTypeFilterConfig {
15
+ readonly name = FilterOption.CaseSlaCondition;
16
+ valueInputComponent = CaseSlaConditionFilterValueField;
17
+ valuePreviewComponent = CaseSlaConditionFilterValuePreview;
18
+
19
+ searchSlas = gateFilterSearch(WtObject.Slas, SlasAPI.getLookup);
20
+ searchConditions = gateFilterSearch(
21
+ WtObject.Slas,
22
+ SLAConditionsAPI.getLookup,
23
+ );
24
+
25
+ async searchRecords({ id: value, ...rest }: FilterConfigSearchRequestParams) {
26
+ return this.searchConditions({
27
+ parentId: value?.selection,
28
+ id: value?.conditions,
29
+ ...rest,
30
+ });
31
+ }
32
+ }
33
+
34
+ export type { CaseSlaConditionFilterConfig };
35
+
36
+ export const createCaseSlaConditionFilterConfig = (
37
+ params?: FilterConfigBaseParams,
38
+ ) => new CaseSlaConditionFilterConfig(params);
@@ -0,0 +1,10 @@
1
+ import CaseSlaConditionFilterValueField from './case-sla-condition-filter-value-field.vue';
2
+ import CaseSlaConditionFilterValuePreview from './case-sla-condition-filter-value-preview.vue';
3
+ import { createCaseSlaConditionFilterConfig } from './filterConfig';
4
+
5
+ export type * from './filterConfig';
6
+ export {
7
+ CaseSlaConditionFilterValueField,
8
+ CaseSlaConditionFilterValuePreview,
9
+ createCaseSlaConditionFilterConfig,
10
+ };
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
- :search-method="searchMethod"
4
+ :disabled="!hasReadAccess"
5
+ :search-method="lookupSearchMethod"
5
6
  :v="!disableValidation && v$.model"
6
7
  :model-value="model"
7
8
  option-value="id"
@@ -13,14 +14,17 @@
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, watch } from 'vue';
17
19
  import { useI18n } from 'vue-i18n';
18
20
 
19
- import { searchMethod } from './config.js';
21
+ import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
22
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
20
23
 
21
24
  type ModelValue = number[];
22
25
 
23
26
  const props = defineProps<{
27
+ filterConfig: WtSysTypeFilterConfig;
24
28
  disableValidation?: boolean;
25
29
  }>();
26
30
 
@@ -34,6 +38,9 @@ const emit = defineEmits<{
34
38
 
35
39
  const { t } = useI18n();
36
40
 
41
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Source);
42
+ const lookupSearchMethod = gateSearch(props.filterConfig.searchRecords);
43
+
37
44
  const v$ = useVuelidate(
38
45
  computed(() => ({
39
46
  model: {
@@ -0,0 +1,22 @@
1
+ import { CaseSourcesAPI } from '@webitel/api-services/api';
2
+ import { WtObject } from '@webitel/ui-sdk/enums';
3
+
4
+ import {
5
+ type FilterConfigBaseParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
8
+ import { gateFilterSearch } from '../../composables/useFilterReadAccess';
9
+ import { FilterOption } from '../../enums/FilterOption';
10
+ import CaseSourceFilterValueField from './case-source-filter-value-field.vue';
11
+ import CaseSourceFilterValuePreview from './case-source-filter-value-preview.vue';
12
+
13
+ class CaseSourceFilterConfig extends WtSysTypeFilterConfig {
14
+ readonly name = FilterOption.CaseSource;
15
+ valueInputComponent = CaseSourceFilterValueField;
16
+ valuePreviewComponent = CaseSourceFilterValuePreview;
17
+
18
+ searchRecords = gateFilterSearch(WtObject.Source, CaseSourcesAPI.getLookup);
19
+ }
20
+
21
+ export const createCaseSourceFilterConfig = (params?: FilterConfigBaseParams) =>
22
+ new CaseSourceFilterConfig(params);
@@ -3,7 +3,8 @@
3
3
  <wt-single-select
4
4
  :show-clear="false"
5
5
  :label="t('cases.status')"
6
- :search-method="caseStatusesSearchMethod"
6
+ :disabled="!hasReadAccess"
7
+ :search-method="statusesSearchMethod"
7
8
  :v="!disableValidation && vSelection"
8
9
  :model-value="value.selection"
9
10
  data-key="id"
@@ -14,9 +15,9 @@
14
15
  <wt-multi-select
15
16
  v-if="value.selection"
16
17
  :key="value.selection"
17
- :disabled="!value.selection"
18
+ :disabled="!hasReadAccess || !value.selection"
18
19
  :label="t('webitelUI.filters.filterValue')"
19
- :search-method="getConditionList"
20
+ :search-method="conditionsSearchMethod"
20
21
  :v="!disableValidation && vConditions"
21
22
  :model-value="value.conditions"
22
23
  data-key="id"
@@ -30,15 +31,15 @@
30
31
  import { useVuelidate } from '@vuelidate/core';
31
32
  import { required } from '@vuelidate/validators';
32
33
  import { WtMultiSelect, WtSingleSelect } from '@webitel/ui-sdk/components';
34
+ import { WtObject } from '@webitel/ui-sdk/enums';
33
35
  import { computed, watch } from 'vue';
34
36
  import { useI18n } from 'vue-i18n';
35
37
 
36
- import {
37
- caseStatusConditionsSearchMethod,
38
- caseStatusesSearchMethod,
39
- } from './config.js';
38
+ import { useFilterReadAccess } from '../../composables/useFilterReadAccess';
39
+ import type { CaseStatusFilterConfig } from './filterConfig';
40
40
 
41
41
  const props = defineProps<{
42
+ filterConfig: CaseStatusFilterConfig;
42
43
  disableValidation?: boolean;
43
44
  }>();
44
45
 
@@ -54,6 +55,8 @@ const model = defineModel<ModelValue>({
54
55
  });
55
56
  const { t } = useI18n();
56
57
 
58
+ const { hasReadAccess, gateSearch } = useFilterReadAccess(WtObject.Status);
59
+
57
60
  const value = computed<ModelValue>(
58
61
  () =>
59
62
  model.value ?? {
@@ -80,12 +83,15 @@ const updateSelected = (selection: string) => {
80
83
  };
81
84
 
82
85
  const getConditionList = (params: Record<string, unknown>) => {
83
- return caseStatusConditionsSearchMethod({
86
+ return props.filterConfig.searchConditions({
84
87
  parentId: value.value.selection,
85
88
  ...params,
86
89
  });
87
90
  };
88
91
 
92
+ const statusesSearchMethod = gateSearch(props.filterConfig.searchStatuses);
93
+ const conditionsSearchMethod = gateSearch(getConditionList);
94
+
89
95
  const v$ = useVuelidate<{
90
96
  model: ModelValue;
91
97
  }>(