@ansible/ansible-ui-framework 0.0.259 → 0.0.261

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 (110) hide show
  1. package/{mjs → cjs}/BulkActionDialog.d.ts +0 -0
  2. package/{mjs → cjs}/BulkProgressDialog.d.ts +0 -0
  3. package/{mjs → cjs}/FilterDrawer.d.ts +0 -0
  4. package/{mjs → cjs}/PageAlertToaster.d.ts +0 -0
  5. package/{mjs → cjs}/PageBody.d.ts +0 -0
  6. package/{mjs → cjs}/PageCells.d.ts +0 -0
  7. package/{mjs → cjs}/PageColumnModal.d.ts +0 -0
  8. package/{mjs → cjs}/PageDataList.d.ts +0 -0
  9. package/{mjs → cjs}/PageDialog.d.ts +0 -0
  10. package/{mjs → cjs}/PageForm.d.ts +0 -0
  11. package/{mjs → cjs}/PageFramework.d.ts +0 -0
  12. package/{mjs → cjs}/PageHeader.d.ts +0 -0
  13. package/{mjs → cjs}/PageLayout.d.ts +0 -0
  14. package/{mjs → cjs}/PagePagination.d.ts +0 -0
  15. package/{mjs → cjs}/PageTable.d.ts +0 -0
  16. package/{mjs → cjs}/PageTableCard.d.ts +0 -0
  17. package/{mjs → cjs}/PageTableCards.d.ts +0 -0
  18. package/{mjs → cjs}/PageTableDetails.d.ts +0 -0
  19. package/{mjs → cjs}/PageTableList.d.ts +0 -0
  20. package/{mjs → cjs}/PageTableViewType.d.ts +0 -0
  21. package/{mjs → cjs}/PageTabs.d.ts +0 -0
  22. package/{mjs → cjs}/PageToolbar.d.ts +0 -0
  23. package/{mjs → cjs}/Settings.d.ts +0 -0
  24. package/{mjs → cjs}/TypedActions/TypedActions.d.ts +0 -0
  25. package/{mjs → cjs}/TypedActions/TypedActionsButtons.d.ts +0 -0
  26. package/{mjs → cjs}/TypedActions/index.d.ts +0 -0
  27. package/{mjs → cjs}/components/BulkSelector.d.ts +0 -0
  28. package/{mjs → cjs}/components/Collapse.d.ts +0 -0
  29. package/{mjs → cjs}/components/DetailInfo.d.ts +0 -0
  30. package/{mjs → cjs}/components/Details.d.ts +0 -0
  31. package/{mjs → cjs}/components/Dotted.d.ts +0 -0
  32. package/{mjs → cjs}/components/DropdownControlled.d.ts +0 -0
  33. package/{mjs → cjs}/components/ErrorBoundary.d.ts +0 -0
  34. package/{mjs → cjs}/components/Grid.d.ts +0 -0
  35. package/{mjs → cjs}/components/Help.d.ts +0 -0
  36. package/{mjs → cjs}/components/IconWrapper.d.ts +0 -0
  37. package/{mjs → cjs}/components/LoadingPage.d.ts +0 -0
  38. package/{mjs → cjs}/components/Masonry.d.ts +0 -0
  39. package/{mjs → cjs}/components/Scrollable.d.ts +0 -0
  40. package/{mjs → cjs}/components/SingleSelect.d.ts +0 -0
  41. package/{mjs → cjs}/components/patternfly-colors.d.ts +0 -0
  42. package/{mjs → cjs}/components/useBreakPoint.d.ts +0 -0
  43. package/{mjs → cjs}/components/useOpen.d.ts +0 -0
  44. package/{mjs → cjs}/components/useWindowLocation.d.ts +0 -0
  45. package/{mjs → cjs}/index.d.ts +3 -0
  46. package/cjs/index.js +3 -0
  47. package/{mjs → cjs}/useFrameworkTranslations.d.ts +0 -0
  48. package/{mjs → cjs}/useInMemoryView.d.ts +0 -0
  49. package/{mjs → cjs}/useSelectDialog.d.ts +0 -0
  50. package/{mjs → cjs}/useSelectMultipleDialog.d.ts +0 -0
  51. package/{mjs → cjs}/useTableItems.d.ts +0 -0
  52. package/{mjs → cjs}/useView.d.ts +0 -0
  53. package/{mjs → cjs}/utils/compare.d.ts +0 -0
  54. package/{mjs → cjs}/utils/download-file.d.ts +0 -0
  55. package/{mjs → cjs}/utils/random-string.d.ts +0 -0
  56. package/package.json +3 -11
  57. package/mjs/BulkActionDialog.js +0 -104
  58. package/mjs/BulkProgressDialog.js +0 -131
  59. package/mjs/FilterDrawer.js +0 -24
  60. package/mjs/PageAlertToaster.js +0 -48
  61. package/mjs/PageBody.js +0 -29
  62. package/mjs/PageCells.js +0 -102
  63. package/mjs/PageColumnModal.js +0 -64
  64. package/mjs/PageDataList.js +0 -44
  65. package/mjs/PageDialog.js +0 -12
  66. package/mjs/PageForm.js +0 -316
  67. package/mjs/PageFramework.js +0 -8
  68. package/mjs/PageHeader.js +0 -86
  69. package/mjs/PageLayout.js +0 -23
  70. package/mjs/PagePagination.js +0 -22
  71. package/mjs/PageTable.js +0 -191
  72. package/mjs/PageTableCard.js +0 -69
  73. package/mjs/PageTableCards.js +0 -23
  74. package/mjs/PageTableDetails.js +0 -11
  75. package/mjs/PageTableList.js +0 -62
  76. package/mjs/PageTableViewType.js +0 -6
  77. package/mjs/PageTabs.js +0 -45
  78. package/mjs/PageToolbar.js +0 -172
  79. package/mjs/Settings.js +0 -87
  80. package/mjs/TypedActions/TypedActions.js +0 -190
  81. package/mjs/TypedActions/TypedActionsButtons.js +0 -87
  82. package/mjs/TypedActions/index.js +0 -2
  83. package/mjs/components/BulkSelector.js +0 -56
  84. package/mjs/components/Collapse.js +0 -7
  85. package/mjs/components/DetailInfo.js +0 -8
  86. package/mjs/components/Details.js +0 -68
  87. package/mjs/components/Dotted.js +0 -4
  88. package/mjs/components/DropdownControlled.js +0 -8
  89. package/mjs/components/ErrorBoundary.js +0 -25
  90. package/mjs/components/Grid.js +0 -27
  91. package/mjs/components/Help.js +0 -9
  92. package/mjs/components/IconWrapper.js +0 -40
  93. package/mjs/components/LoadingPage.js +0 -9
  94. package/mjs/components/Masonry.js +0 -69
  95. package/mjs/components/Scrollable.js +0 -60
  96. package/mjs/components/SingleSelect.js +0 -37
  97. package/mjs/components/patternfly-colors.js +0 -38
  98. package/mjs/components/useBreakPoint.js +0 -118
  99. package/mjs/components/useOpen.js +0 -16
  100. package/mjs/components/useWindowLocation.js +0 -48
  101. package/mjs/index.js +0 -24
  102. package/mjs/useFrameworkTranslations.js +0 -22
  103. package/mjs/useInMemoryView.js +0 -60
  104. package/mjs/useSelectDialog.js +0 -49
  105. package/mjs/useSelectMultipleDialog.js +0 -29
  106. package/mjs/useTableItems.js +0 -378
  107. package/mjs/useView.js +0 -108
  108. package/mjs/utils/compare.js +0 -53
  109. package/mjs/utils/download-file.js +0 -18
  110. package/mjs/utils/random-string.js +0 -12
@@ -1,378 +0,0 @@
1
- import debounce from 'debounce';
2
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
- export function useTableItems(items, keyFn, defaults) {
4
- const { selectedItems, selectItem, unselectItem, isSelected, selectItems, unselectAll, allSelected, } = useSelected(items, keyFn);
5
- const { sorted, sort, setSort } = useSorted(items);
6
- const { filtered, setFilterFn } = useFiltered(sorted, keyFn);
7
- const { searched, search, setSearch, setSearchFn } = useSearched(filtered, keyFn, defaults?.search);
8
- const { paged, page, setPage, perPage, setPerPage } = usePaged(searched);
9
- const selectPage = useCallback(() => selectItems(paged), [paged, selectItems]);
10
- const selectAll = useCallback(() => selectItems(searched), [searched, selectItems]);
11
- return useMemo(() => ({
12
- allSelected,
13
- filtered,
14
- isSelected,
15
- page,
16
- paged,
17
- perPage,
18
- search,
19
- searched,
20
- selectAll,
21
- selectItem,
22
- selectPage,
23
- selectedItems,
24
- setFilterFn,
25
- setPage,
26
- setPerPage,
27
- setSearch,
28
- setSearchFn,
29
- setSort,
30
- sort,
31
- sorted,
32
- unselectAll,
33
- unselectItem,
34
- }), [
35
- allSelected,
36
- filtered,
37
- isSelected,
38
- page,
39
- paged,
40
- perPage,
41
- search,
42
- searched,
43
- selectAll,
44
- selectItem,
45
- selectPage,
46
- selectedItems,
47
- setFilterFn,
48
- setPage,
49
- setPerPage,
50
- setSearch,
51
- setSearchFn,
52
- setSort,
53
- sort,
54
- sorted,
55
- unselectAll,
56
- unselectItem,
57
- ]);
58
- }
59
- export function useSelected(items, keyFn) {
60
- const [selectedMap, setSelectedMap] = useState({});
61
- useEffect(() => {
62
- setSelectedMap((selectedMap) => {
63
- let changed = false;
64
- items.forEach((item) => {
65
- const key = keyFn(item);
66
- if (selectedMap[key] && selectedMap[key] !== item) {
67
- changed = true;
68
- selectedMap[key] = item;
69
- }
70
- });
71
- return changed ? { ...selectedMap } : selectedMap;
72
- });
73
- }, [items, keyFn]);
74
- const selectItem = useCallback((item) => {
75
- setSelectedMap((selectedMap) => {
76
- const itemKey = keyFn(item);
77
- const existing = selectedMap[itemKey];
78
- if (existing !== item) {
79
- selectedMap = { ...selectedMap };
80
- selectedMap[itemKey] = item;
81
- }
82
- return selectedMap;
83
- });
84
- }, [keyFn]);
85
- const unselectItem = useCallback((item) => {
86
- setSelectedMap((selectedMap) => {
87
- const itemKey = keyFn(item);
88
- const existing = selectedMap[itemKey];
89
- if (existing) {
90
- selectedMap = { ...selectedMap };
91
- delete selectedMap[itemKey];
92
- }
93
- return selectedMap;
94
- });
95
- }, [keyFn]);
96
- const isSelected = useCallback((item) => {
97
- const itemKey = keyFn(item);
98
- return selectedMap[itemKey] !== undefined;
99
- }, [keyFn, selectedMap]);
100
- const selectItems = useCallback((items) => {
101
- setSelectedMap((selectedMap) => {
102
- selectedMap = { ...selectedMap };
103
- for (const item of items) {
104
- const itemKey = keyFn(item);
105
- selectedMap[itemKey] = item;
106
- }
107
- return selectedMap;
108
- });
109
- }, [keyFn]);
110
- const selectAll = useCallback(() => selectItems(items), [items, selectItems]);
111
- const unselectItems = useCallback((items) => {
112
- for (const item of items) {
113
- unselectItem(item);
114
- }
115
- }, [unselectItem]);
116
- const unselectAll = useCallback(() => {
117
- setSelectedMap((selectedMap) => {
118
- if (Object.keys(selectedMap).length > 0) {
119
- return {};
120
- }
121
- return selectedMap;
122
- });
123
- }, []);
124
- const selectedItems = useMemo(() => Object.values(selectedMap), [selectedMap]);
125
- const allSelected = useMemo(() => selectedItems.length === items.length, [items.length, selectedItems.length]);
126
- return useMemo(() => ({
127
- selectedItems,
128
- selectItem,
129
- unselectItem,
130
- isSelected,
131
- selectItems,
132
- selectAll,
133
- unselectAll,
134
- allSelected,
135
- keyFn,
136
- unselectItems,
137
- }), [
138
- allSelected,
139
- isSelected,
140
- keyFn,
141
- selectAll,
142
- selectItem,
143
- selectItems,
144
- selectedItems,
145
- unselectAll,
146
- unselectItem,
147
- unselectItems,
148
- ]);
149
- }
150
- export function useSelectedInMemory(items, keyFn) {
151
- const [selectedMap, setSelectedMap] = useState({});
152
- useEffect(() => {
153
- setSelectedMap((selectedMap) => {
154
- let changed = false;
155
- const itemsKeys = items.reduce((itemsKeys, item) => {
156
- const key = keyFn(item);
157
- itemsKeys[key] = item;
158
- if (selectedMap[key] && selectedMap[key] !== item) {
159
- changed = true;
160
- selectedMap[key] = item;
161
- }
162
- return itemsKeys;
163
- }, {});
164
- const removeKeyMap = {};
165
- for (const key in selectedMap) {
166
- if (!itemsKeys[key]) {
167
- removeKeyMap[key] = true;
168
- }
169
- }
170
- const removeKeys = Object.keys(removeKeyMap);
171
- if (removeKeys.length) {
172
- changed = true;
173
- for (const key of removeKeys) {
174
- delete selectedMap[key];
175
- }
176
- }
177
- return changed ? { ...selectedMap } : selectedMap;
178
- });
179
- }, [items, keyFn]);
180
- const selectItem = useCallback((item) => {
181
- setSelectedMap((selectedMap) => {
182
- const itemKey = keyFn(item);
183
- const existing = selectedMap[itemKey];
184
- if (existing !== item) {
185
- selectedMap = { ...selectedMap };
186
- selectedMap[itemKey] = item;
187
- }
188
- return selectedMap;
189
- });
190
- }, [keyFn]);
191
- const unselectItem = useCallback((item) => {
192
- setSelectedMap((selectedMap) => {
193
- const itemKey = keyFn(item);
194
- const existing = selectedMap[itemKey];
195
- if (existing) {
196
- selectedMap = { ...selectedMap };
197
- delete selectedMap[itemKey];
198
- }
199
- return selectedMap;
200
- });
201
- }, [keyFn]);
202
- const unselectItems = useCallback((items) => {
203
- for (const item of items) {
204
- unselectItem(item);
205
- }
206
- }, [unselectItem]);
207
- const isSelected = useCallback((item) => {
208
- const itemKey = keyFn(item);
209
- return selectedMap[itemKey] !== undefined;
210
- }, [keyFn, selectedMap]);
211
- const selectItems = useCallback((items) => {
212
- setSelectedMap((selectedMap) => {
213
- selectedMap = { ...selectedMap };
214
- for (const item of items) {
215
- const itemKey = keyFn(item);
216
- selectedMap[itemKey] = item;
217
- }
218
- return selectedMap;
219
- });
220
- }, [keyFn]);
221
- const selectAll = useCallback(() => {
222
- selectItems(items);
223
- }, [items, selectItems]);
224
- const unselectAll = useCallback(() => {
225
- setSelectedMap((selectedMap) => {
226
- if (Object.keys(selectedMap).length > 0) {
227
- return {};
228
- }
229
- return selectedMap;
230
- });
231
- }, []);
232
- const selectedItems = useMemo(() => Object.values(selectedMap), [selectedMap]);
233
- const allSelected = useMemo(() => selectedItems.length === items.length, [items.length, selectedItems.length]);
234
- return useMemo(() => ({
235
- selectedItems,
236
- selectItem,
237
- unselectItem,
238
- isSelected,
239
- selectItems,
240
- selectAll,
241
- unselectAll,
242
- allSelected,
243
- keyFn,
244
- unselectItems,
245
- }), [
246
- allSelected,
247
- isSelected,
248
- keyFn,
249
- selectAll,
250
- selectItem,
251
- selectItems,
252
- selectedItems,
253
- unselectAll,
254
- unselectItem,
255
- unselectItems,
256
- ]);
257
- }
258
- export function useSorted(items) {
259
- const [sort, setSort] = useState();
260
- const { direction, sortFn } = sort ?? {};
261
- const sorted = useMemo(() => {
262
- if (sortFn) {
263
- if (direction === 'asc') {
264
- return [...items.sort(sortFn)];
265
- }
266
- else {
267
- return [...items.sort(sortFn).reverse()];
268
- }
269
- }
270
- else {
271
- return items;
272
- }
273
- }, [direction, items, sortFn]);
274
- return useMemo(() => ({ sorted, sort, setSort }), [sort, sorted]);
275
- }
276
- export function useFiltered(items, keyFn) {
277
- const filterMapRef = useRef({
278
- map: {},
279
- });
280
- const [filterFn, setFilterFnState] = useState();
281
- const setFilterFn = useCallback((filterFn) => setFilterFnState(() => filterFn), []);
282
- const [filtered, setFiltered] = useState([]);
283
- useEffect(() => {
284
- filterMapRef.current.map = {};
285
- }, [filterFn]);
286
- const cachedFilterFn = useCallback((item) => {
287
- const key = keyFn(item);
288
- let cached = filterMapRef.current.map[key];
289
- if (!cached) {
290
- cached = { item, passes: filterFn ? filterFn(item) : true };
291
- filterMapRef.current.map[key] = cached;
292
- }
293
- else if (cached.item !== item) {
294
- cached.item = item;
295
- cached.passes = filterFn ? filterFn(item) : true;
296
- }
297
- return cached.passes;
298
- }, [filterFn, keyFn]);
299
- useEffect(() => {
300
- if (filterFn) {
301
- setFiltered(items.filter(cachedFilterFn));
302
- }
303
- else {
304
- setFiltered(items);
305
- }
306
- }, [items, filterFn, cachedFilterFn]);
307
- return useMemo(function memoFiltered() {
308
- return { filtered, setFilterFn };
309
- }, [filtered, setFilterFn]);
310
- }
311
- function useSearched(items, keyFn, defaultSearch) {
312
- const searchMapRef = useRef({
313
- map: {},
314
- });
315
- const [searchFn, setSearchFnState] = useState();
316
- const setSearchFn = useCallback((searchFn) => setSearchFnState(() => searchFn), []);
317
- const [searched, setSearched] = useState([]);
318
- const [search, setSearchState] = useState(defaultSearch ?? '');
319
- // eslint-disable-next-line react-hooks/exhaustive-deps
320
- const setSearch = useCallback(debounce((search) => setSearchState(search), 200), []);
321
- useEffect(() => {
322
- searchMapRef.current.map = {};
323
- }, [search, searchFn]);
324
- const cachedSearchFn = useCallback((item) => {
325
- const key = keyFn(item);
326
- let cached = searchMapRef.current.map[key];
327
- if (!cached) {
328
- cached = { item, score: searchFn ? searchFn(item, search) : 0 };
329
- searchMapRef.current.map[key] = cached;
330
- }
331
- else if (cached.item !== item) {
332
- cached.item = item;
333
- cached.score = searchFn ? searchFn(item, search) : 0;
334
- }
335
- return cached;
336
- }, [keyFn, searchFn, search]);
337
- useEffect(() => {
338
- if (searchFn && search) {
339
- setSearched(items
340
- .map(cachedSearchFn)
341
- .filter((cached) => cached.score < 0.5)
342
- .sort((l, r) => l.score - r.score)
343
- .map((cached) => cached.item));
344
- }
345
- else {
346
- setSearched(items);
347
- }
348
- }, [search, items, searchFn, cachedSearchFn]);
349
- return useMemo(function memoFiltered() {
350
- return { searched, search, setSearch, setSearchFn };
351
- }, [searched, search, setSearch, setSearchFn]);
352
- }
353
- export function usePaged(source) {
354
- const [paged, setPaged] = useState([]);
355
- const [page, setPage] = useState(1);
356
- const [perPage, setPerPage] = useState(10);
357
- useEffect(() => {
358
- setPaged((paged) => {
359
- const newPaged = source.slice((page - 1) * perPage, page * perPage);
360
- if (paged.length !== newPaged.length) {
361
- return newPaged;
362
- }
363
- let index = 0;
364
- for (const item of newPaged) {
365
- if (paged[index++] !== item) {
366
- return newPaged;
367
- }
368
- }
369
- return paged;
370
- });
371
- }, [page, perPage, source]);
372
- useEffect(() => {
373
- if (page > Math.ceil(source.length / perPage)) {
374
- setPage(1);
375
- }
376
- }, [page, perPage, source.length]);
377
- return useMemo(() => ({ paged, page, setPage, perPage, setPerPage }), [page, paged, perPage]);
378
- }
package/mjs/useView.js DELETED
@@ -1,108 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { useSearchParams } from 'react-router-dom';
3
- export function useView(view, disableQueryString) {
4
- const [searchParams, setSearchParams] = useSearchParams();
5
- const [page, setPage] = useState(() => {
6
- if (!disableQueryString) {
7
- const queryPage = searchParams.get('page');
8
- if (queryPage) {
9
- const page = Number(queryPage);
10
- if (Number.isInteger(page)) {
11
- return page;
12
- }
13
- }
14
- }
15
- return view?.page ?? 1;
16
- });
17
- const [perPage, setPerPage] = useState(() => {
18
- if (!disableQueryString) {
19
- const queryPerPage = searchParams.get('perPage');
20
- if (queryPerPage) {
21
- const perPage = Number(queryPerPage);
22
- if (Number.isInteger(perPage)) {
23
- return perPage;
24
- }
25
- }
26
- }
27
- const localPerPage = localStorage.getItem('perPage');
28
- if (localPerPage) {
29
- const perPage = Number(localPerPage);
30
- if (Number.isInteger(perPage)) {
31
- return perPage;
32
- }
33
- }
34
- return view?.perPage ?? 10;
35
- });
36
- const [sort, setSort] = useState(() => {
37
- if (!disableQueryString) {
38
- const querySort = searchParams.get('sort');
39
- if (querySort) {
40
- if (querySort.startsWith('-'))
41
- return querySort.slice(1);
42
- return querySort;
43
- }
44
- }
45
- return view?.sort ?? '';
46
- });
47
- const [sortDirection, setSortDirection] = useState(() => {
48
- if (!disableQueryString) {
49
- const querySort = searchParams.get('sort');
50
- if (querySort) {
51
- if (querySort.startsWith('-'))
52
- return 'desc';
53
- return 'asc';
54
- }
55
- }
56
- return view?.sortDirection ?? 'asc';
57
- });
58
- const [filters, setFilters] = useState(() => {
59
- const filters = {};
60
- for (const key of searchParams.keys()) {
61
- switch (key) {
62
- case 'sort':
63
- case 'page':
64
- case 'perPage':
65
- break;
66
- default: {
67
- const value = searchParams.get(key);
68
- if (value) {
69
- const values = value.split(',');
70
- filters[key] = values;
71
- }
72
- }
73
- }
74
- }
75
- if (Object.keys(filters))
76
- return filters;
77
- return view?.filters ?? {};
78
- });
79
- const clearAllFilters = useCallback(() => setFilters({}), [setFilters]);
80
- useEffect(() => {
81
- if (disableQueryString)
82
- return;
83
- const newSearchParams = new URLSearchParams();
84
- sortDirection === 'asc'
85
- ? newSearchParams.set('sort', sort)
86
- : newSearchParams.set('sort', `-${sort}`);
87
- newSearchParams.set('page', page.toString());
88
- newSearchParams.set('perPage', perPage.toString());
89
- for (const filter in filters) {
90
- newSearchParams.set(filter, filters[filter].join(','));
91
- }
92
- localStorage.setItem('perPage', perPage.toString());
93
- setSearchParams(newSearchParams, { replace: true });
94
- }, [sort, sortDirection, setSearchParams, disableQueryString, page, perPage, filters]);
95
- return useMemo(() => ({
96
- page,
97
- setPage,
98
- perPage,
99
- setPerPage,
100
- sort,
101
- setSort,
102
- sortDirection,
103
- setSortDirection,
104
- filters,
105
- setFilters,
106
- clearAllFilters,
107
- }), [clearAllFilters, filters, page, perPage, sort, sortDirection]);
108
- }
@@ -1,53 +0,0 @@
1
- /* istanbul ignore file */
2
- export function compareUnknowns(a, b) {
3
- /* istanbul ignore next */
4
- if (a == undefined && b == undefined)
5
- return 0;
6
- /* istanbul ignore next */
7
- if (a == undefined)
8
- return 1;
9
- /* istanbul ignore next */
10
- if (b == undefined)
11
- return -1;
12
- /* istanbul ignore else */
13
- if (typeof a === 'string') {
14
- /* istanbul ignore else */
15
- if (typeof b === 'string') {
16
- return compareStrings(a, b);
17
- }
18
- else if (typeof b === 'number') {
19
- return compareStrings(a, b.toString());
20
- }
21
- }
22
- else if (typeof a === 'number') {
23
- /* istanbul ignore else */
24
- if (typeof b === 'number') {
25
- return compareNumbers(a, b);
26
- }
27
- else if (typeof b === 'string') {
28
- return compareStrings(a.toString(), b);
29
- }
30
- }
31
- /* istanbul ignore next */
32
- return 0;
33
- }
34
- /* istanbul ignore next */
35
- export function compareStrings(a, b) {
36
- if (a == undefined && b == undefined)
37
- return 0;
38
- if (a == undefined)
39
- return 1;
40
- if (b == undefined)
41
- return -1;
42
- return a < b ? -1 : a > b ? 1 : 0;
43
- }
44
- /* istanbul ignore next */
45
- export function compareNumbers(a, b) {
46
- if (a == undefined && b == undefined)
47
- return 0;
48
- if (a == undefined)
49
- return 1;
50
- if (b == undefined)
51
- return -1;
52
- return a < b ? -1 : a > b ? 1 : 0;
53
- }
@@ -1,18 +0,0 @@
1
- export function downloadTextFile(name, content) {
2
- const file = new Blob(content.split('/n'), { type: 'text/plain' });
3
- const element = document.createElement('a');
4
- element.href = URL.createObjectURL(file);
5
- element.download = name + '.txt';
6
- document.body.appendChild(element);
7
- element.click();
8
- document.body.removeChild(element);
9
- }
10
- export function downloadCvsFile(name, content) {
11
- const file = new Blob(content, { type: 'text/csv' });
12
- const element = document.createElement('a');
13
- element.href = URL.createObjectURL(file);
14
- element.download = name + '.csv';
15
- document.body.appendChild(element);
16
- element.click();
17
- document.body.removeChild(element);
18
- }
@@ -1,12 +0,0 @@
1
- /* istanbul ignore file */
2
- const randomCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
3
- export function randomString(length, base = randomCharacters.length) {
4
- if (base > randomCharacters.length || base <= 0)
5
- base = randomCharacters.length;
6
- let text = '';
7
- for (let i = 0; i < length; i++) {
8
- const index = Math.floor(Math.random() * base) % base;
9
- text += randomCharacters.charAt(index);
10
- }
11
- return text;
12
- }