@webitel/ui-datalist 1.0.6 → 1.0.7

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.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Toolkit for building data lists in webitel ui system",
5
5
  "scripts": {
6
6
  "lint:fix": "eslint --fix ./src && prettier --write --check ./src",
@@ -55,7 +55,7 @@ class FiltersManager implements IFiltersManager {
55
55
  return filter;
56
56
  }
57
57
 
58
- deleteFilter({ name }: IFilter): IFilter {
58
+ deleteFilter({ name }: { name: FilterName }): IFilter {
59
59
  const filter = this.filters.get(name);
60
60
  this.filters.delete(name);
61
61
  return filter;
@@ -0,0 +1,123 @@
1
+ <template>
2
+ <wt-search-bar
3
+ :placeholder="t('reusable.search')"
4
+ :search-mode="searchMode"
5
+ :search-mode-options="searchModeOptions"
6
+ :value="localSearchValue"
7
+ @input="localSearchValue = $event"
8
+ @search="handleSearch"
9
+ @update:search-mode="updateSearchMode"
10
+ />
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { WtSearchBar } from '@webitel/ui-sdk/components';
15
+ import {computed, type Ref, ref,watch} from 'vue';
16
+ import { useI18n } from 'vue-i18n';
17
+
18
+ import {FilterInitParams, FilterName} from "../../types/Filter";
19
+ import {IFiltersManager} from "../../types/FiltersManager";
20
+ import type { DynamicFilterSearchSearchModeOption } from './types/DynamicFilterSearch';
21
+
22
+ /**
23
+ * @description
24
+ * default search name is used when there are no search modes
25
+ */
26
+ const defaultSearchName = 'search';
27
+
28
+ const props = defineProps<{
29
+ filtersManager: IFiltersManager;
30
+ searchModeOptions?: DynamicFilterSearchSearchModeOption[];
31
+ isFiltersRestoring?: boolean;
32
+ }>();
33
+
34
+ const emit = defineEmits<{
35
+ 'filter:add': [FilterInitParams];
36
+ 'filter:update': [FilterInitParams];
37
+ 'filter:delete': [{ name: FilterName }];
38
+ }>();
39
+
40
+ const { t } = useI18n();
41
+
42
+ const searchMode: Ref<FilterName> = ref();
43
+ const localSearchValue = ref('');
44
+
45
+ const hasFilter = (filterName = searchMode.value) => {
46
+ return props.filtersManager.filters.has(filterName);
47
+ };
48
+ const addFilter = (filterInitParams: FilterInitParams) => {
49
+ return emit('filter:add', filterInitParams);
50
+ };
51
+ const updateFilter = (filterInitParams: FilterInitParams) => {
52
+ return emit('filter:update', filterInitParams);
53
+ };
54
+ const deleteFilter = ({ name }: { name: FilterName }) => {
55
+ return emit('filter:delete', { name });
56
+ };
57
+
58
+ const hasSearchModes = computed(() => {
59
+ return props.searchModeOptions && props.searchModeOptions.length > 0;
60
+ });
61
+
62
+ if (hasSearchModes.value) {
63
+ searchMode.value = props.searchModeOptions[0].value;
64
+ }
65
+
66
+ const currentSearchName = computed(() => {
67
+ if (hasSearchModes.value) {
68
+ return searchMode.value;
69
+ }
70
+
71
+ return defaultSearchName;
72
+ });
73
+
74
+ const handleSearch = (value = localSearchValue.value) => {
75
+ if (hasFilter(currentSearchName.value)) {
76
+ updateFilter({
77
+ name: currentSearchName.value,
78
+ value,
79
+ });
80
+ } else {
81
+ addFilter({
82
+ name: currentSearchName.value,
83
+ value,
84
+ });
85
+ }
86
+ };
87
+
88
+ const updateSearchMode = (nextSearchMode: DynamicFilterSearchSearchModeOption) => {
89
+ if (hasFilter(currentSearchName.value)) {
90
+ deleteFilter({
91
+ name: currentSearchName.value,
92
+ });
93
+ }
94
+ searchMode.value = nextSearchMode.value;
95
+ localSearchValue.value = '';
96
+ };
97
+
98
+ /**
99
+ * @description
100
+ * Restoring search value after filters were restored
101
+ */
102
+ watch(() => props.isFiltersRestoring,
103
+ (next) => {
104
+ if (next) return;
105
+
106
+ let searchModes = [defaultSearchName];
107
+ if (hasSearchModes.value) {
108
+ searchModes = props.searchModeOptions?.map((option) => option.value);
109
+ }
110
+
111
+ for (const mode of searchModes) {
112
+ if (hasFilter(mode)) {
113
+ searchMode.value = mode;
114
+ localSearchValue.value = props.filtersManager.filters.get(mode).value;
115
+
116
+ break;
117
+ }
118
+ }
119
+ },
120
+ );
121
+ </script>
122
+
123
+ <style scoped></style>
@@ -0,0 +1,5 @@
1
+ import { WtSearchBarSearchModeOption } from '../../../../../../../src/components/wt-search-bar/types/WtSearchBar';
2
+ import { FilterName } from '../../../types/Filter';
3
+
4
+ export type DynamicFilterSearchSearchModeOption =
5
+ WtSearchBarSearchModeOption<FilterName>;
@@ -1,6 +1,6 @@
1
1
  import { Filter } from './classes/Filter.ts';
2
2
  import { createFiltersManager } from './classes/FiltersManager';
3
- import DynamicFilterSearchComponent from './components/dynamic-filter-search.vue';
3
+ import DynamicFilterSearchComponent from './components/search-bar/dynamic-filter-search.vue';
4
4
  import TableFiltersPanelComponent from './components/table-filters-panel.vue';
5
5
  import { FilterOption } from './enums/FilterOption';
6
6
  import type {
@@ -1,60 +0,0 @@
1
- <template>
2
- <wt-search-bar
3
- :placeholder="t('reusable.search')"
4
- :search-mode="props.searchMode"
5
- :search-mode-options="searchModeOptions"
6
- :value="model"
7
- @input="model = $event"
8
- @search="handleSearch"
9
- @update:search-mode="onSearchModeChange($event.value)"
10
- >
11
- <template
12
- v-if="props.showTextSearchIcon"
13
- #search-icon
14
- >
15
- <wt-icon icon="stt-search" />
16
- </template>
17
- </wt-search-bar>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- import { WtSearchBar } from '@webitel/ui-sdk/components';
22
- import { computed } from 'vue';
23
- import { useI18n } from 'vue-i18n';
24
-
25
- type ModelValue = string;
26
- const model = defineModel<ModelValue>();
27
-
28
- const props = defineProps<{
29
- searchMode: string;
30
- searchModeOptions: Record<string, string>;
31
- showTextSearchIcon?: boolean;
32
- }>();
33
-
34
- const emit = defineEmits<{
35
- 'update:search-mode': [string];
36
- 'handle-search': [string];
37
- }>();
38
-
39
- const { t } = useI18n();
40
-
41
- const onSearchModeChange = (value: string) => {
42
- emit('update:search-mode', value);
43
- model.value = '';
44
- };
45
-
46
- const handleSearch = () => {
47
- emit('handle-search', model.value);
48
- };
49
-
50
- const searchModeOptions = computed(() =>
51
- Object.values(props.searchModeOptions).map((mode) => {
52
- return {
53
- value: mode,
54
- text: t(`filters.search.${mode}`),
55
- };
56
- }),
57
- );
58
- </script>
59
-
60
- <style scoped></style>