@webitel/ui-datalist 1.0.2 → 1.0.3

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 (112) hide show
  1. package/package.json +5 -10
  2. package/src/filter-presets/api/PresetQuery.api.ts +2 -2
  3. package/src/filter-presets/components/_shared/input-fields/preset-description-field.vue +2 -2
  4. package/src/filter-presets/components/_shared/input-fields/preset-name-field.vue +2 -2
  5. package/src/filter-presets/components/_shared/preset-filters-preview.vue +2 -2
  6. package/src/filter-presets/components/apply-preset/apply-preset-action.vue +5 -5
  7. package/src/filter-presets/components/apply-preset/preset-preview.vue +2 -2
  8. package/src/filter-presets/components/save-preset/overwrite-preset-popup.vue +1 -1
  9. package/src/filter-presets/components/save-preset/save-preset-action.vue +4 -4
  10. package/src/filter-presets/components/save-preset/save-preset-popup.vue +1 -1
  11. package/src/filters/classes/FiltersManager.ts +1 -1
  12. package/src/filters/components/config/dynamic-filter-config-form-label.vue +2 -2
  13. package/src/filters/components/config/dynamic-filter-config-form.vue +33 -12
  14. package/src/filters/components/config/dynamic-filter-config-view.vue +4 -4
  15. package/src/filters/components/dynamic-filter-add-action.vue +26 -4
  16. package/src/filters/components/dynamic-filter-panel-wrapper.vue +1 -1
  17. package/src/filters/components/dynamic-filter-search.vue +2 -2
  18. package/src/filters/components/filter-options/_shared/has-options/has-option-filter-value-field.vue +2 -2
  19. package/src/filters/components/filter-options/actual-reaction-time/actual-reaction-time-filter-value-field.vue +1 -1
  20. package/src/filters/components/filter-options/actual-resolution-time/actual-resolution-time-filter-value-field.vue +1 -1
  21. package/src/filters/components/filter-options/agent/agent-filter-value-field.vue +2 -2
  22. package/src/filters/components/filter-options/agent/agent-filter-value-preview.vue +1 -1
  23. package/src/filters/components/filter-options/agent/config.js +1 -1
  24. package/src/filters/components/filter-options/amd-result/amd-result-filter-value-field.vue +2 -2
  25. package/src/filters/components/filter-options/amd-result/amd-result-filter-value-preview.vue +1 -1
  26. package/src/filters/components/filter-options/assignee/assignee-filter-value-field.vue +2 -2
  27. package/src/filters/components/filter-options/assignee/assignee-filter-value-preview.vue +1 -1
  28. package/src/filters/components/filter-options/assignee/config.js +1 -1
  29. package/src/filters/components/filter-options/author/author-filter-value-field.vue +2 -2
  30. package/src/filters/components/filter-options/author/author-filter-value-preview.vue +1 -1
  31. package/src/filters/components/filter-options/author/config.js +1 -1
  32. package/src/filters/components/filter-options/cause/cause-filter-value-field.vue +2 -2
  33. package/src/filters/components/filter-options/cause/cause-filter-value-preview.vue +1 -1
  34. package/src/filters/components/filter-options/close-reason-groups-case/close-reason-groups-case-filter-value-field.vue +2 -2
  35. package/src/filters/components/filter-options/close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue +1 -1
  36. package/src/filters/components/filter-options/close-reason-groups-case/config.js +2 -2
  37. package/src/filters/components/filter-options/contact/config.js +1 -1
  38. package/src/filters/components/filter-options/contact/contact-filter-value-field.vue +2 -2
  39. package/src/filters/components/filter-options/contact/contact-filter-value-preview.vue +1 -1
  40. package/src/filters/components/filter-options/contact-group/config.js +1 -1
  41. package/src/filters/components/filter-options/contact-group/contact-group-filter-value-field.vue +3 -3
  42. package/src/filters/components/filter-options/contact-group/contact-group-filter-value-preview.vue +1 -1
  43. package/src/filters/components/filter-options/created-at-from/created-at-from-filter-value-field.vue +1 -1
  44. package/src/filters/components/filter-options/created-at-from/created-at-from-filter-value-preview.vue +1 -1
  45. package/src/filters/components/filter-options/created-at-to/created-at-to-filter-value-field.vue +1 -1
  46. package/src/filters/components/filter-options/created-at-to/created-at-to-filter-value-preview.vue +1 -1
  47. package/src/filters/components/filter-options/direction/direction-filter-value-field.vue +2 -2
  48. package/src/filters/components/filter-options/direction/direction-filter-value-preview.vue +1 -1
  49. package/src/filters/components/filter-options/gateway/config.js +1 -1
  50. package/src/filters/components/filter-options/gateway/gateway-filter-value-field.vue +2 -2
  51. package/src/filters/components/filter-options/gateway/gateway-filter-value-preview.vue +1 -1
  52. package/src/filters/components/filter-options/grantee/config.js +1 -1
  53. package/src/filters/components/filter-options/grantee/grantee-filter-value-field.vue +2 -2
  54. package/src/filters/components/filter-options/grantee/grantee-filter-value-preview.vue +1 -1
  55. package/src/filters/components/filter-options/has-attachment/has-attachment-filter-value-field.vue +1 -1
  56. package/src/filters/components/filter-options/has-attachment/has-attachment-filter-value-preview.vue +1 -1
  57. package/src/filters/components/filter-options/has-file/has-file-filter-value-field.vue +1 -1
  58. package/src/filters/components/filter-options/has-file/has-file-filter-value-preview.vue +1 -1
  59. package/src/filters/components/filter-options/has-rating/has-rating-filter-value-field.vue +1 -1
  60. package/src/filters/components/filter-options/has-rating/has-rating-filter-value-preview.vue +1 -1
  61. package/src/filters/components/filter-options/has-transcription/has-transcription-filter-value-field.vue +1 -1
  62. package/src/filters/components/filter-options/has-transcription/has-transcription-filter-value-preview.vue +1 -1
  63. package/src/filters/components/filter-options/impacted/config.js +1 -1
  64. package/src/filters/components/filter-options/impacted/impacted-filter-value-field.vue +2 -2
  65. package/src/filters/components/filter-options/impacted/impacted-filter-value-preview.vue +1 -1
  66. package/src/filters/components/filter-options/priority-case/config.js +1 -1
  67. package/src/filters/components/filter-options/priority-case/priority-case-filter-value-field.vue +2 -2
  68. package/src/filters/components/filter-options/priority-case/priority-case-filter-value-preview.vue +1 -1
  69. package/src/filters/components/filter-options/queue/config.js +1 -1
  70. package/src/filters/components/filter-options/queue/queue-filter-value-field.vue +2 -2
  71. package/src/filters/components/filter-options/queue/queue-filter-value-preview.vue +1 -1
  72. package/src/filters/components/filter-options/rated-by/config.js +1 -1
  73. package/src/filters/components/filter-options/rated-by/rated-by-filter-value-field.vue +2 -2
  74. package/src/filters/components/filter-options/rated-by/rated-by-filter-value-preview.vue +1 -1
  75. package/src/filters/components/filter-options/rating/rating-from-to-filter-value-field.vue +1 -1
  76. package/src/filters/components/filter-options/reaction-time/reaction-time-filter-value-field.vue +1 -1
  77. package/src/filters/components/filter-options/reporter/config.js +1 -1
  78. package/src/filters/components/filter-options/reporter/reporter-filter-value-field.vue +2 -2
  79. package/src/filters/components/filter-options/reporter/reporter-filter-value-preview.vue +1 -1
  80. package/src/filters/components/filter-options/resolution-time/resolution-time-filter-value-field.vue +1 -1
  81. package/src/filters/components/filter-options/service-case/config.js +2 -2
  82. package/src/filters/components/filter-options/service-case/service-case-filter-value-field.vue +1 -1
  83. package/src/filters/components/filter-options/service-case/service-case-filter-value-preview.vue +1 -1
  84. package/src/filters/components/filter-options/sla/config.js +1 -1
  85. package/src/filters/components/filter-options/sla/sla-filter-value-field.vue +2 -2
  86. package/src/filters/components/filter-options/sla/sla-filter-value-preview.vue +1 -1
  87. package/src/filters/components/filter-options/sla-condition/config.js +2 -2
  88. package/src/filters/components/filter-options/sla-condition/sla-condition-filter-value-field.vue +2 -2
  89. package/src/filters/components/filter-options/sla-condition/sla-condition-filter-value-preview.vue +1 -1
  90. package/src/filters/components/filter-options/source-case/config.js +1 -1
  91. package/src/filters/components/filter-options/source-case/source-case-filter-value-field.vue +2 -2
  92. package/src/filters/components/filter-options/source-case/source-case-filter-value-preview.vue +1 -1
  93. package/src/filters/components/filter-options/status-case/config.js +2 -2
  94. package/src/filters/components/filter-options/status-case/status-case-filter-value-field.vue +2 -2
  95. package/src/filters/components/filter-options/status-case/status-case-filter-value-preview.vue +1 -1
  96. package/src/filters/components/filter-options/tag/tag-filter-value-field.vue +2 -2
  97. package/src/filters/components/filter-options/tag/tag-filter-value-preview.vue +1 -1
  98. package/src/filters/components/filter-options/talk-duration/talk-duration-filter-value-field.vue +1 -1
  99. package/src/filters/components/filter-options/team/config.js +1 -1
  100. package/src/filters/components/filter-options/team/team-filter-value-field.vue +2 -2
  101. package/src/filters/components/filter-options/team/team-filter-value-preview.vue +1 -1
  102. package/src/filters/components/filter-options/total-duration/total-duration-filter-value-field.vue +1 -1
  103. package/src/filters/components/filter-options/user/config.js +1 -1
  104. package/src/filters/components/filter-options/user/user-filter-value-field.vue +2 -2
  105. package/src/filters/components/filter-options/user/user-filter-value-preview.vue +1 -1
  106. package/src/filters/components/filter-options/variable/variable-filter-value-field.vue +2 -2
  107. package/src/filters/components/preview/dynamic-filter-preview.vue +24 -6
  108. package/src/filters/components/table-filters-panel.vue +142 -68
  109. package/src/filters/index.ts +10 -1
  110. package/src/filters/types/Filter.d.ts +5 -0
  111. package/src/headers/createTableHeadersStore.ts +3 -3
  112. package/src/types/tableStore.types.ts +1 -1
@@ -28,4 +28,4 @@ const getLocalValue = async () => {
28
28
  getLocalValue();
29
29
  </script>
30
30
 
31
- <style lang="scss" scoped></style>
31
+ <style scoped></style>
@@ -8,7 +8,7 @@
8
8
 
9
9
  <script lang="ts" setup>
10
10
  import { useVuelidate } from '@vuelidate/core';
11
- import variableSearchValidator from '@webitel/ui-sdk/src/validators/variableSearchValidator/variableSearchValidator';
11
+ import variableSearchValidator from '@webitel/ui-sdk/validators/variableSearchValidator/variableSearchValidator';
12
12
  import { computed, watch } from 'vue';
13
13
  import { useI18n } from 'vue-i18n';
14
14
 
@@ -46,4 +46,4 @@ watch(
46
46
  );
47
47
  </script>
48
48
 
49
- <style lang="scss" scoped></style>
49
+ <style scoped></style>
@@ -22,7 +22,12 @@
22
22
  </template>
23
23
 
24
24
  <template #default>
25
- <slot name="info" />
25
+ <slot name="info">
26
+ <component
27
+ :is="FilterOptionToPreviewComponentMap[filter.name]"
28
+ :value="filter.value"
29
+ />
30
+ </slot>
26
31
  </template>
27
32
  </dynamic-filter-preview-info>
28
33
  </template>
@@ -33,19 +38,27 @@
33
38
  <slot
34
39
  name="form"
35
40
  v-bind="slotScope"
36
- />
41
+ >
42
+ <dynamic-filter-config-form
43
+ :filter="filter"
44
+ @cancel="() => slotScope.hide()"
45
+ @submit="(payload) => submitFilterChange(payload) && slotScope.hide()"
46
+ />
47
+ </slot>
37
48
  </template>
38
49
  </dynamic-filter-config-view>
39
50
  </template>
40
51
 
41
52
  <script lang="ts" setup>
42
- import { WtChip } from '@webitel/ui-sdk/src/components/index';
43
- import { WtIconBtn } from '@webitel/ui-sdk/src/components/index';
44
- import { WtTooltip } from '@webitel/ui-sdk/src/components/index';
53
+ import { WtChip } from '@webitel/ui-sdk/components';
54
+ import { WtIconBtn } from '@webitel/ui-sdk/components';
55
+ import { WtTooltip } from '@webitel/ui-sdk/components';
45
56
  import { useI18n } from 'vue-i18n';
46
57
 
47
- import type { IFilter } from '../../types/Filter';
58
+ import type { FilterInitParams, IFilter } from '../../types/Filter';
59
+ import DynamicFilterConfigForm from '../config/dynamic-filter-config-form.vue';
48
60
  import DynamicFilterConfigView from '../config/dynamic-filter-config-view.vue';
61
+ import { FilterOptionToPreviewComponentMap } from '../filter-options';
49
62
  import DynamicFilterPreviewInfo from './dynamic-filter-preview-info.vue';
50
63
 
51
64
  interface Props {
@@ -58,12 +71,17 @@ const { t } = useI18n();
58
71
  const props = defineProps<Props>();
59
72
 
60
73
  const emit = defineEmits<{
74
+ 'update:filter': [IFilter];
61
75
  'delete:filter': [IFilter];
62
76
  }>();
63
77
 
64
78
  const deleteFilter = () => {
65
79
  emit('delete:filter', props.filter);
66
80
  };
81
+
82
+ const submitFilterChange = (filter: FilterInitParams) => {
83
+ emit('update:filter', filter);
84
+ };
67
85
  </script>
68
86
 
69
87
  <style lang="scss" scoped>
@@ -1,83 +1,157 @@
1
1
  <template>
2
- <section class="table-filters-panel">
3
- <slot></slot>
4
- <div class="table-filters-panel-filters">
5
- <dynamic-filter-add-action>
6
- <template #form>
7
- <dynamic-filter-config-form
8
- :options="unappliedFilters"
9
- @submit="applyFilter"
10
- >
11
- <template
12
- #value-input="{
13
- filterName,
14
- filterValue,
15
- onValueChange,
16
- onValueInvalidChange,
17
- }"
18
- >
19
- <component
20
- :is="getFilterValueComponent(filterName)"
21
- :key="filterName"
22
- :model-value="filterValue"
23
- @update:model-value="onValueChange"
24
- @undate:invalid="onValueInvalidChange"
25
- />
26
- </template>
27
- </dynamic-filter-config-form>
28
- </template>
29
- </dynamic-filter-add-action>
2
+ <dynamic-filter-panel-wrapper>
3
+ <template #filters>
4
+ <!-- WTF? - /* https://webitel.atlassian.net/browse/WTEL-6308?focusedCommentId=657415 */ -->
5
+ <!--TODO-->
6
+ <!-- <dynamic-filter-preview-->
7
+ <!-- v-if="!hasCreatedAtFromFilter"-->
8
+ <!-- :filter="defaultCreatedAtFromFilterDataPreview"-->
9
+ <!-- dummy-->
10
+ <!-- >-->
11
+ <!-- <template #info>-->
12
+ <!-- <component-->
13
+ <!-- :is="FilterOptionToPreviewComponentMap[FilterOption.CreatedAtFrom]"-->
14
+ <!-- :value="defaultCreatedAtFromFilterDataPreview.value"-->
15
+ <!-- />-->
16
+ <!-- </template>-->
17
+ <!-- </dynamic-filter-preview>-->
30
18
 
31
19
  <dynamic-filter-preview
32
20
  v-for="filter of appliedFilters"
33
21
  :key="filter.name"
34
22
  :filter="filter"
35
- @delete:filter="deleteAppliedFilter($event.name)"
36
- >
37
- <template #form>
38
- <dynamic-filter-config-form
39
- :filter="filter"
40
- @submit="updateAppliedFilter"
41
- >
42
- <template
43
- #value-input="{
44
- filterName,
45
- filterValue,
46
- onValueChange,
47
- onValueInvalidChange,
48
- }"
49
- >
50
- <component
51
- :is="getFilterValueComponent(filterName)"
52
- :key="filterName"
53
- :model-value="filterValue"
54
- @update:model-value="onValueChange"
55
- @undate:invalid="onValueInvalidChange"
56
- />
57
- </template>
58
- </dynamic-filter-config-form>
59
- </template>
60
- </dynamic-filter-preview>
61
- </div>
62
- <div class="table-filters-panel-actions"></div>
63
- </section>
23
+ disable-click-away
24
+ @update:filter="emit('filter:update', $event)"
25
+ @delete:filter="emit('filter:delete', filter)"
26
+ />
27
+
28
+ <dynamic-filter-add-action
29
+ :show-label="!appliedFilters.length"
30
+ :filter-options="availableFilterOptions"
31
+ @add:filter="emit('filter:add', $event)"
32
+ />
33
+ </template>
34
+
35
+ <template #actions>
36
+ <apply-preset-action
37
+ :namespace="props.presetNamespace"
38
+ :use-presets-store="props.usePresetsStore"
39
+ @apply="emit('preset:apply', $event)"
40
+ />
41
+
42
+ <save-preset-action
43
+ v-if="enablePresets"
44
+ :namespace="props.presetNamespace"
45
+ :filters-manager="props.filtersManager"
46
+ />
47
+
48
+ <wt-icon-action
49
+ action="clear"
50
+ @click="emit('filter:reset-all')"
51
+ />
52
+
53
+ <wt-icon-action
54
+ action="close"
55
+ @click="emit('hide')"
56
+ />
57
+ </template>
58
+ </dynamic-filter-panel-wrapper>
64
59
  </template>
65
60
 
66
61
  <script lang="ts" setup>
67
- import DynamicFilterConfigForm from './config/dynamic-filter-config-form.vue';
62
+ import { WtIconAction } from '@webitel/ui-sdk/components';
63
+ import { Store } from 'pinia';
64
+ import { computed } from 'vue';
65
+ import { useI18n } from 'vue-i18n';
66
+
67
+ import { ApplyPresetAction, SavePresetAction } from '../../filter-presets';
68
+ import { FilterOption } from '../enums/FilterOption';
69
+ import { FilterData, IFilter } from '../types/Filter';
70
+ import { IFiltersManager } from '../types/FiltersManager';
68
71
  import DynamicFilterAddAction from './dynamic-filter-add-action.vue';
72
+ import DynamicFilterPanelWrapper from './dynamic-filter-panel-wrapper.vue';
69
73
  import DynamicFilterPreview from './preview/dynamic-filter-preview.vue';
70
74
 
71
- // interface Props {}
72
- // const props = defineProps<Props>();
75
+ type Props = {
76
+ /**
77
+ * @description
78
+ * available filter options to set
79
+ */
80
+ filterOptions: FilterOption[];
81
+ /**
82
+ * @description
83
+ * Looks like a anti-pattern, but save-preset.vue component needs filterManager
84
+ */
85
+ filtersManager: IFiltersManager;
86
+ /**
87
+ * @description
88
+ * QueryPreset "section" field
89
+ */
90
+ presetNamespace?: string;
91
+ /**
92
+ * @author @dlohvinov
93
+ *
94
+ * @description
95
+ * table store for operating with presets as dataList.
96
+ * Seems to me like a bad idea, because apply-preset should not store
97
+ * any data in a specific store – component state should be enough.
98
+ * However as for now, there's no composable implementing this logic,
99
+ * so store is used instead.
100
+ *
101
+ * TODO: https://github.com/webitel/webitel-ui-sdk/pull/551
102
+ */
103
+ usePresetsStore: Store;
104
+ };
105
+
106
+ const props = defineProps<Props>();
107
+
108
+ /**
109
+ * @author @dlohvinov
110
+ *
111
+ * @description
112
+ * There are 2 reasons to use `add`/`update`/`delete` events
113
+ * instead of mutate `props.filtersManager` directly:
114
+ * 1. It's possible to add some custom logic on those event in parent component/store
115
+ * 2. filtersManager shouldn't be passed here, it seems to me like an anti-pattern
116
+ */
117
+ const emit = defineEmits<{
118
+ 'filter:add': [FilterData];
119
+ 'filter:update': [FilterData];
120
+ 'filter:delete': [IFilter];
121
+ 'filter:reset-all': [];
122
+ /**
123
+ * string == filtersManager.toString() snapshot
124
+ */
125
+ 'preset:apply': [string];
126
+ hide: [];
127
+ }>();
128
+
129
+ const { t } = useI18n();
130
+
131
+ const appliedFilters = computed(() => {
132
+ return props.filtersManager.getFiltersList({
133
+ include: props.filterOptions,
134
+ });
135
+ });
136
+
137
+ /**
138
+ * @description
139
+ * available filters to add, with appliedFilters excluded
140
+ */
141
+ const availableFilterOptions = computed(() => {
142
+ return props.filterOptions
143
+ .filter((opt) => {
144
+ return appliedFilters.value.every((filter) => {
145
+ return filter.name !== opt;
146
+ });
147
+ })
148
+ .map((opt) => ({
149
+ name: t(`webitelUI.filters.${opt}`),
150
+ value: opt,
151
+ }));
152
+ });
73
153
 
74
- // const emit = defineEmits<{
75
- // 'add:filter': [];
76
- // 'update:filter': [];
77
- // 'delete:filter': [];
78
- // 'reset:filters': [];
79
- // hide: [];
80
- // }>();
154
+ const enablePresets = computed(() => !!props.presetNamespace);
81
155
  </script>
82
156
 
83
- <style lang="scss" scoped></style>
157
+ <style scoped></style>
@@ -1,5 +1,8 @@
1
1
  import { Filter } from './classes/Filter.ts';
2
2
  import { createFiltersManager } from './classes/FiltersManager';
3
+ import DynamicFilterSearchComponent from './components/dynamic-filter-search.vue';
4
+ import TableFiltersPanelComponent from './components/table-filters-panel.vue';
5
+ import { FilterOption } from './enums/FilterOption';
3
6
  import type {
4
7
  FilterConfig,
5
8
  FilterInitParams,
@@ -13,7 +16,13 @@ import type {
13
16
  IFiltersManager,
14
17
  } from './types/FiltersManager.d.ts';
15
18
 
16
- export { createFiltersManager, Filter };
19
+ export {
20
+ createFiltersManager,
21
+ DynamicFilterSearchComponent,
22
+ Filter,
23
+ FilterOption,
24
+ TableFiltersPanelComponent,
25
+ };
17
26
 
18
27
  export type {
19
28
  FilterConfig,
@@ -44,3 +44,8 @@ export interface IFilter {
44
44
  label?: FilterLabel;
45
45
  set: (data: FilterData) => IFilter;
46
46
  }
47
+
48
+ export interface FilterNameSelectRepresentation {
49
+ name: string;
50
+ value: FilterName;
51
+ }
@@ -1,6 +1,6 @@
1
- import { WtTableHeader } from '@webitel/ui-sdk/src/components/wt-table/types/WtTable';
2
- import { sortToQueryAdapter } from '@webitel/ui-sdk/src/scripts';
3
- import { SortSymbols } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters';
1
+ import { WtTableHeader } from '@webitel/ui-sdk/components/wt-table/types/WtTable';
2
+ import { sortToQueryAdapter } from '@webitel/ui-sdk/scripts';
3
+ import { SortSymbols } from '@webitel/ui-sdk/scripts/sortQueryAdapters';
4
4
  import { defineStore } from 'pinia';
5
5
  import { computed, ref } from 'vue';
6
6
 
@@ -1,4 +1,4 @@
1
- import { ApiModule } from '@webitel/ui-sdk/src/api/types/ApiModule.type.ts';
1
+ import { ApiModule } from '@webitel/ui-sdk/api/types/ApiModule.type.ts';
2
2
  import type { Ref } from 'vue';
3
3
 
4
4
  import { IFiltersManager } from '../filters';