@webitel/ui-sdk 3.2.21 → 3.2.23

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-sdk",
3
- "version": "3.2.21",
3
+ "version": "3.2.23",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve-lib": "vue-cli-service serve",
@@ -64,6 +64,7 @@ export default {
64
64
  default: 1000,
65
65
  },
66
66
  },
67
+ emits: ['change', 'input', 'prev', 'next'],
67
68
  model: {
68
69
  prop: 'size',
69
70
  event: 'change',
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <wt-pagination
3
+ :next="isNext"
4
+ :prev="page > 1"
5
+ :size="localSize"
6
+ debounce
7
+ @input="localSize = $event"
8
+ @change="setSize(localSize)"
9
+ @next="setPage(+page + 1)"
10
+ @prev="setPage(page - 1)"
11
+ ></wt-pagination>
12
+ </template>
13
+
14
+ <script setup>
15
+ import { computed, ref, watch } from 'vue';
16
+ import { useStore } from 'vuex';
17
+ import getNamespacedState from '../../../store/helpers/getNamespacedState';
18
+
19
+ const props = defineProps({
20
+ namespace: {
21
+ type: String,
22
+ required: true,
23
+ },
24
+ isNext: {
25
+ type: Boolean,
26
+ default: false,
27
+ },
28
+ });
29
+
30
+ const pageFilterName = 'page';
31
+ const sizeFilterName = 'size';
32
+
33
+ const store = useStore();
34
+
35
+ const localSize = ref(0);
36
+
37
+ const page = computed(() => getNamespacedState(store.state, props.namespace)[pageFilterName].value);
38
+ const size = computed(() => getNamespacedState(store.state, props.namespace)[sizeFilterName].value);
39
+
40
+ function setFilter(payload) {
41
+ return store.dispatch(`${props.namespace}/SET_FILTER`, payload);
42
+ }
43
+
44
+ function setPage(value) {
45
+ return setFilter({ value, filter: pageFilterName });
46
+ }
47
+
48
+ function setSize(value) {
49
+ if (value === size.value) return;
50
+ // eslint-disable-next-line consistent-return
51
+ return setFilter({ value, filter: sizeFilterName });
52
+ }
53
+
54
+ watch(size, () => {
55
+ localSize.value = size.value;
56
+ }, { immediate: true });
57
+ </script>
58
+
59
+ <style lang="scss" scoped>
60
+
61
+ </style>
@@ -0,0 +1,101 @@
1
+ import deepEqual from 'deep-equal';
2
+ import isEmpty from '../../../scripts/isEmpty';
3
+ import BaseStoreModule from '../../../store/BaseStoreModules/BaseStoreModule';
4
+
5
+ export default class FiltersStoreModule extends BaseStoreModule {
6
+ getters = {
7
+ GET_FILTERS: (state, getters) => Object.keys(state)
8
+ .reduce((filters, filterKey) => {
9
+ const filterValue = getters.GET_FILTER(filterKey);
10
+ return isEmpty(filterValue) ? filters : {
11
+ ...filters,
12
+ [filterKey]: filterValue,
13
+ };
14
+ }, {}),
15
+ GET_FILTER: (state) => (filter) => {
16
+ if (!state[filter]) return null;
17
+ const { value, storedProp, multiple } = state[filter];
18
+ if (multiple) return value.map((item) => item[storedProp]); // if arr, map
19
+ if (storedProp) return value[storedProp]; // if object and has specific prop, return this prop
20
+ return value; // else return val
21
+ },
22
+ GET_VALUE_FROM_QUERY: (state, getters) => ({ filterQuery }) => (
23
+ getters.ROUTER.currentRoute.value.query[filterQuery]
24
+ ),
25
+ };
26
+
27
+ actions = {
28
+ SET_FILTER: async (context, { filter, value }) => {
29
+ const { multiple, defaultValue } = context.state[filter];
30
+ let newValue = value;
31
+ if (newValue) {
32
+ if (multiple && !Array.isArray(newValue)) newValue = [newValue];
33
+ } else if (newValue === null || newValue
34
+ === undefined) newValue = defaultValue;
35
+ await context.dispatch('SET_VALUE_TO_QUERY', {
36
+ filterQuery: filter,
37
+ value,
38
+ storedProp: context.state[filter].storedProp,
39
+ });
40
+ context.commit('SET_FILTER', { filter, value: newValue });
41
+ return context.dispatch('ON_FILTER_SET', { filter, value });
42
+ },
43
+ SET_VALUE_TO_QUERY: async (
44
+ context,
45
+ { filterQuery, value, storedProp = 'id' },
46
+ ) => {
47
+ let newValue = '';
48
+ if (Array.isArray(value)) {
49
+ if (value.length && typeof value[0] !== 'object') {
50
+ newValue = value;
51
+ } else {
52
+ newValue = value.map((item) => item[storedProp]);
53
+ }
54
+ } else if (typeof value === 'object' && value !== null) {
55
+ newValue = value[storedProp];
56
+ } else {
57
+ newValue = value;
58
+ }
59
+
60
+ return context.dispatch('CHANGE_ROUTE_QUERY', ({
61
+ value: newValue,
62
+ filterQuery,
63
+ }));
64
+ },
65
+ CHANGE_ROUTE_QUERY: (context, { value, filterQuery }) => {
66
+ if (deepEqual(context.getters.GET_VALUE_FROM_QUERY({ filterQuery }), value)) return;
67
+ const query = { ...context.getters.ROUTER.currentRoute.value.query };
68
+ query[filterQuery] = value;
69
+ // eslint-disable-next-line consistent-return
70
+ return context.getters.ROUTER.replace({
71
+ name: context.getters.ROUTER.currentRoute.value.name,
72
+ query,
73
+ });
74
+ },
75
+ // eslint-disable-next-line consistent-return
76
+ RESTORE_FILTER: (context, { filter }) => {
77
+ const value = context.getters.GET_VALUE_FROM_QUERY({ filterQuery: filter });
78
+ if (value) return context.dispatch('SET_FILTER', ({ filter, value }));
79
+ },
80
+ RESTORE_FILTERS: (context) => {
81
+ Object.keys(context.state)
82
+ .forEach((filter) => context.dispatch('RESTORE_FILTER', { filter }));
83
+ },
84
+ RESET_FILTERS: (context) => {
85
+ context.commit('RESET_FILTERS');
86
+ },
87
+ ON_FILTER_SET: (context, { filter, value }) => context.dispatch('LOAD_DATA_LIST'),
88
+ LOAD_DATA_LIST: () => console.error('please override LOAD_DATA_LIST action in filters store'),
89
+ };
90
+
91
+ mutations = {
92
+ SET_FILTER: (state, { filter, value }) => {
93
+ state[filter].value = value;
94
+ },
95
+ RESET_FILTERS: (state) => {
96
+ Object.keys(state).forEach((filter) => {
97
+ state[filter].value = state[filter].defaultValue;
98
+ });
99
+ },
100
+ };
101
+ }
@@ -8,10 +8,6 @@ export default class TableStoreModule extends BaseStoreModule {
8
8
  state = {
9
9
  headers: [],
10
10
  dataList: [],
11
- size: 10,
12
- search: '',
13
- page: 1,
14
- sort: '',
15
11
  error: {},
16
12
  isLoading: false,
17
13
  isNextPage: false,
@@ -31,15 +27,15 @@ export default class TableStoreModule extends BaseStoreModule {
31
27
  },
32
28
 
33
29
  // main GET_LIST params collector
34
- GET_LIST_PARAMS: (state, getters) => (query) => {
30
+ GET_LIST_PARAMS: (state, getters) => (overrideFilters) => {
35
31
  const fields = getters.FIELDS.concat(getters.REQUIRED_FIELDS);
36
32
 
37
33
  const filters = getters.GET_FILTERS || getters['filters/GET_FILTERS'];
38
34
 
39
35
  return {
40
- ...query,
41
36
  ...filters,
42
37
  fields,
38
+ ...overrideFilters,
43
39
  };
44
40
  },
45
41
  };
@@ -50,13 +46,6 @@ export default class TableStoreModule extends BaseStoreModule {
50
46
  AFTER_SET_DATA_LIST_HOOK: (context, { items, next }) => ({ items, next }),
51
47
 
52
48
  LOAD_DATA_LIST: async (context, query) => {
53
- /*
54
- https://my.webitel.com/browse/WTEL-3560
55
- preventively disable isNext to handle case when user is clicking
56
- "next" faster than actual request is made
57
- */
58
- context.commit('SET_IS_NEXT', false);
59
-
60
49
  const params = context.getters.GET_LIST_PARAMS(query);
61
50
  try {
62
51
  context.commit('SET_LOADING', true);