@webitel/ui-sdk 24.10.49 → 24.10.51

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.
@@ -0,0 +1,183 @@
1
+ import deepmerge from 'deepmerge';
2
+ import { computed, inject } from 'vue';
3
+ import { useI18n } from 'vue-i18n';
4
+ import { useStore } from 'vuex';
5
+ import { isEmpty } from '../../../scripts/index.js';
6
+ import EmptyTableDark from '../_internals/assets/empty-table-dark.svg';
7
+ import EmptyTableLight from '../_internals/assets/empty-table-light.svg';
8
+
9
+ export const useTableEmpty = ({ dataList, filters, error, isLoading }, overrides = {}) => {
10
+ const store = useStore();
11
+ const { t } = useI18n();
12
+
13
+ // use computed, so that at locale change, texts will be updated too
14
+ const defaults = computed(() => ({
15
+ image: {
16
+ filters: {
17
+ dark: EmptyTableDark,
18
+ light: EmptyTableLight,
19
+ },
20
+ error: {
21
+ dark: EmptyTableDark,
22
+ light: EmptyTableLight,
23
+ },
24
+ empty: {
25
+ dark: EmptyTableDark,
26
+ light: EmptyTableLight,
27
+ },
28
+ },
29
+ headline: {
30
+ filters: t(''),
31
+ error: t(''),
32
+ empty: t(''),
33
+ },
34
+ title: {
35
+ filters: t(''),
36
+ error: t(''),
37
+ empty: t(''),
38
+ },
39
+ text: {
40
+ filters: t('web'),
41
+ error: t(''),
42
+ empty: t(''),
43
+ },
44
+ primaryActionText: {
45
+ filters: t(''),
46
+ error: t(''),
47
+ empty: t(''),
48
+ },
49
+ secondaryActionText: {
50
+ filters: t(''),
51
+ error: t(''),
52
+ empty: t(''),
53
+ },
54
+ }));
55
+
56
+ const merged = computed(() => deepmerge(defaults, overrides));
57
+
58
+ let darkMode = computed(() => false);
59
+
60
+ try {
61
+ darkMode = inject('darkMode');
62
+ } catch {
63
+ try {
64
+ darkMode = computed(() => store.getters['appearance/DARK_MODE']);
65
+ } catch {
66
+ console.warn('"darkMode" value not found, using "false" as default');
67
+ }
68
+ }
69
+
70
+ const EmptyCause = Object.freeze({
71
+ ERROR: 'error',
72
+ FILTERS: 'filters',
73
+ EMPTY: 'empty',
74
+ });
75
+
76
+ const emptyState = computed(() => {
77
+ return !isLoading.value && !error.value && !!dataList.value.length;
78
+ });
79
+
80
+ const emptyCause = computed(() => {
81
+ if (!emptyState.value) return null;
82
+
83
+ if (error.value) return EmptyCause.ERROR;
84
+ if (filters.value) {
85
+ const uncheckedFilters = ['page', 'size', 'sort', 'fields'];
86
+ const filtersApplied = Object.entries(filters.value).some(
87
+ ([filterValue, filterName]) =>
88
+ !isEmpty(filterValue) && !uncheckedFilters.includes(filterName),
89
+ );
90
+ if (filtersApplied) return EmptyCause.FILTERS;
91
+ }
92
+
93
+ return EmptyCause.EMPTY;
94
+ });
95
+
96
+ const image = computed(() => {
97
+ switch (emptyCause.value) {
98
+ case EmptyCause.ERROR:
99
+ return darkMode.value ? merged.value.image.error.dark : merged.value.image.error.light;
100
+ case EmptyCause.FILTERS:
101
+ return darkMode.value ? merged.value.image.filters.dark : merged.value.image.filters.light;
102
+ case EmptyCause.EMPTY:
103
+ return darkMode.value ? merged.value.image.empty.dark : merged.value.image.empty.light;
104
+ default:
105
+ return null;
106
+ }
107
+ });
108
+ const headline = computed(() => {
109
+ switch (emptyCause.value) {
110
+ case EmptyCause.ERROR:
111
+ return merged.value.headline.error;
112
+ case EmptyCause.FILTERS:
113
+ return merged.value.headline.filters;
114
+ case EmptyCause.EMPTY:
115
+ return merged.value.headline.empty;
116
+ default:
117
+ return null;
118
+ }
119
+ });
120
+
121
+ const title = computed(() => {
122
+ switch (emptyCause.value) {
123
+ case EmptyCause.ERROR:
124
+ return merged.value.title.error;
125
+ case EmptyCause.FILTERS:
126
+ return merged.value.title.filters;
127
+ case EmptyCause.EMPTY:
128
+ return merged.value.title.empty;
129
+ default:
130
+ return null;
131
+ }
132
+ });
133
+
134
+ const text = computed(() => {
135
+ switch (emptyCause.value) {
136
+ case EmptyCause.ERROR:
137
+ return merged.value.text.error;
138
+ case EmptyCause.FILTERS:
139
+ return merged.value.text.filters;
140
+ case EmptyCause.EMPTY:
141
+ return merged.value.text.empty;
142
+ default:
143
+ return null;
144
+ }
145
+ });
146
+
147
+ const primaryActionText = computed(() => {
148
+ switch (emptyCause.value) {
149
+ case EmptyCause.ERROR:
150
+ return merged.value.primaryActionText.error;
151
+ case EmptyCause.FILTERS:
152
+ return merged.value.primaryActionText.filters;
153
+ case EmptyCause.EMPTY:
154
+ return merged.value.primaryActionText.empty;
155
+ default:
156
+ return null;
157
+ }
158
+ });
159
+
160
+ const secondaryActionText = computed(() => {
161
+ switch (emptyCause.value) {
162
+ case EmptyCause.ERROR:
163
+ return merged.value.secondaryActionText.error;
164
+ case EmptyCause.FILTERS:
165
+ return merged.value.secondaryActionText.filters;
166
+ case EmptyCause.EMPTY:
167
+ return merged.value.secondaryActionText.empty;
168
+ default:
169
+ return null;
170
+ }
171
+ });
172
+
173
+ return {
174
+ showEmpty: emptyState,
175
+
176
+ image,
177
+ headline,
178
+ title,
179
+ text,
180
+ primaryActionText,
181
+ secondaryActionText,
182
+ };
183
+ };
@@ -0,0 +1,67 @@
1
+ import convertDuration from './convertDuration.js';
2
+ import debounce from './debounce.js';
3
+ import eventBus from './eventBus.js';
4
+ import isEmpty from './isEmpty.js';
5
+ import prettifyFileSize from './prettifyFileSize.js';
6
+ import prettifyTime from './prettifyTime.js';
7
+ import preventHiddenPageCallsDecorator
8
+ from './preventHiddenPageCallsDecorator.js';
9
+ import saveAsJSON from './saveAsJSON.js';
10
+ import {
11
+ sortToQueryAdapter,
12
+ queryToSortAdapter,
13
+ } from './sortQueryAdapters.js';
14
+ import updateObject from './updateObject.js';
15
+ import {
16
+ compareSize,
17
+ smallerOrEqual as sizeSmallerOrEqual,
18
+ greaterOrEqual as sizeGreaterOrEqual,
19
+ smallerThen as sizeSmallerThen,
20
+ greaterThen as sizeGreaterThen,
21
+ } from './compareSize.js';
22
+ import {
23
+ camelToSnake,
24
+ camelToKebab,
25
+ snakeToCamel,
26
+ snakeToKebab,
27
+ kebabToCamel,
28
+ kebabToSnake,
29
+ objSnakeToCamel,
30
+ objCamelToSnake,
31
+ objCamelToKebab,
32
+ } from 'caseConverters.js';
33
+
34
+
35
+ export {
36
+ // sortQueryAdapters.js
37
+ sortToQueryAdapter,
38
+ queryToSortAdapter,
39
+
40
+ updateObject,
41
+ preventHiddenPageCallsDecorator,
42
+ saveAsJSON,
43
+ prettifyTime,
44
+ prettifyFileSize,
45
+ debounce,
46
+ eventBus,
47
+ isEmpty,
48
+ convertDuration,
49
+
50
+ // compareSize.js
51
+ compareSize,
52
+ sizeSmallerOrEqual,
53
+ sizeGreaterOrEqual,
54
+ sizeSmallerThen,
55
+ sizeGreaterThen,
56
+
57
+ // caseConverters.js
58
+ camelToSnake,
59
+ camelToKebab,
60
+ snakeToCamel,
61
+ snakeToKebab,
62
+ kebabToCamel,
63
+ kebabToSnake,
64
+ objSnakeToCamel,
65
+ objCamelToSnake,
66
+ objCamelToKebab,
67
+ };
@@ -1,5 +1,4 @@
1
1
  import FilterEvent from '../../../../modules/Filters/enums/FilterEvent.enum.js';
2
- import isEmpty from '../../../../scripts/isEmpty.js';
3
2
  import {
4
3
  queryToSortAdapter,
5
4
  sortToQueryAdapter,
@@ -31,33 +30,6 @@ const getters = {
31
30
  return [...new Set([...getters.REQUIRED_FIELDS, ...fields])];
32
31
  },
33
32
 
34
- EMPTY_STATE: (state, getters) => {
35
- if (state.isLoading) {
36
- return { value: false };
37
- }
38
-
39
- if (state.error) {
40
- return { value: true, cause: 'error' };
41
- }
42
-
43
- if (!state.dataList.length) {
44
- const filters = getters.FILTERS();
45
- const uncheckedFilters = ['page', 'size', 'sort', 'fields'];
46
- const filtersApplied = Object.entries(filters).some(
47
- ([filterValue, filterName]) =>
48
- !isEmpty(filterValue) && !uncheckedFilters.includes(filterName),
49
- );
50
-
51
- if (filtersApplied) {
52
- return { value: true, cause: 'filters' };
53
- }
54
-
55
- return { value: true, cause: 'empty' };
56
- }
57
-
58
- return { value: false };
59
- },
60
-
61
33
  GET_LIST_PARAMS: (state, getters) => (overrides) => {
62
34
  const filters = getters.FILTERS();
63
35
  const fields = getters.FIELDS;
@@ -1,20 +0,0 @@
1
- import { computed } from 'vue';
2
- import { useI18n } from 'vue-i18n';
3
-
4
- export const useTableEmpty = (emptyState) => {
5
- const { t } = useI18n();
6
-
7
- const media = computed(() => {});
8
- const headline = computed(() => {});
9
- const title = computed(() => {});
10
- const text = computed(() => {});
11
- const actionText = computed(() => {});
12
-
13
- return {
14
- media,
15
- headline,
16
- title,
17
- text,
18
- actionText,
19
- };
20
- };