aloha-vue 2.74.0 → 2.75.0

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 (166) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +22 -21
  3. package/dist/aloha-vue.css +13594 -13594
  4. package/dist/aloha-vue.css.map +1 -1
  5. package/dist/aloha-vue.es.js +59266 -64918
  6. package/dist/aloha-vue.umd.js +338 -211
  7. package/package.json +27 -34
  8. package/scss/components/ATable.scss +2 -2
  9. package/scss/utils/button.scss +362 -362
  10. package/scss/utils/funktions.scss +162 -162
  11. package/src/AAccordion/AAccordionItem/AAccordionItem.js +235 -230
  12. package/src/ACarousel/ACarousel.js +7 -2
  13. package/src/ADropdown/ADropdown.js +4 -1
  14. package/src/AFilters/AFilterCenter/AFilterCenter.js +5 -1
  15. package/src/AFilters/AFilterCenter/AFilterCenterItem/AFilterCenterItem.js +7 -2
  16. package/src/AFilters/AFiltersHorizontal/AFiltersHorizontal.js +412 -396
  17. package/src/AFilters/AFiltersHorizontal/AFiltersHorizontalFilter/AFiltersHorizontalFilter.js +102 -99
  18. package/src/AFilters/AFiltersHorizontal/compositionAPI/FiltersSavedDeleteAPI.js +108 -108
  19. package/src/AFilters/AFiltersMain/AFiltersMain.js +114 -111
  20. package/src/AFilters/AFiltersSaveModal/compositionAPI/SaveAPI.js +65 -65
  21. package/src/ALinkCopy/ALinkCopy.js +98 -95
  22. package/src/ALinkCopy/compositionAPI/CopyAPI.js +48 -48
  23. package/src/AList/__tests__/AList.test.js +33 -33
  24. package/src/AList/compositionAPI/__tests__/TagAPI.test.js +43 -43
  25. package/src/AMenu/AMenu.js +4 -1
  26. package/src/AMenu/AMenuBreadcrumbs/AMenuBreadcrumbs.js +240 -237
  27. package/src/AMenu/AMenuPanelLink/AMenuPanelLink.js +4 -1
  28. package/src/AMenu/AMenuSearchPanelBreadcrumbs/AMenuSearchPanelBreadcrumbs.js +122 -119
  29. package/src/AModalWizard/AModalWizard.js +58 -53
  30. package/src/AModalWizard/compositionAPI/__tests__/ScrollAPI.test.js +46 -46
  31. package/src/APagination/APaginationPages/APaginationPages.js +15 -4
  32. package/src/ARate/ARate.js +254 -249
  33. package/src/ARate/ARateIcon/ADecimalIcon/ADecimalIcon.js +53 -50
  34. package/src/ARate/ARateIcon/ARateIcon.js +109 -104
  35. package/src/AResizer/AResizer.js +167 -162
  36. package/src/ATable/ATableHeaderTh/compositionAPI/SortAPI.js +172 -167
  37. package/src/ATable/ATableHeaderThAction/ATableHeaderThAction.js +14 -4
  38. package/src/ATable/ATableHeaderThAction/ATableHeaderThActionItem/ATableHeaderThActionItem.js +191 -184
  39. package/src/ATable/ATablePreviewDown/ATablePreviewDown.js +72 -69
  40. package/src/ATable/ATablePreviewRight/ATablePreviewRight.js +265 -258
  41. package/src/ATable/ATableSortingAdditional/ATableSortingAdditional.js +224 -219
  42. package/src/ATable/ATableSortingAdditional/__tests__/ATableSortingAdditional.AttributesAPI.test.js +39 -39
  43. package/src/ATable/ATableSortingAdditional/__tests__/ATableSortingAdditional.ColumnsAPI.test.js +68 -68
  44. package/src/ATable/ATableSortingAdditional/__tests__/ATableSortingAdditional.DropdownAPI.test.js +45 -45
  45. package/src/ATable/ATableSortingAdditional/__tests__/ATableSortingAdditional.FormAPI.test.js +95 -95
  46. package/src/ATable/ATableSortingAdditional/__tests__/ATableSortingAdditional.ModelAPI.test.js +1 -1
  47. package/src/ATable/ATableTd/ATableTd.js +4 -1
  48. package/src/ATable/ATableTdAction/ATableTdAction.js +19 -12
  49. package/src/ATable/ATableTopPanel/ATableTopPanel.js +11 -3
  50. package/src/ATable/ATableTr/ATableTr.js +408 -405
  51. package/src/ATable/__tests__/ATable.HeaderSlot.test.js +102 -97
  52. package/src/ATable/__tests__/ATable.RowIdsAPI.test.js +66 -66
  53. package/src/ATableForm/ATableForm.js +88 -85
  54. package/src/ATableForm/ATableFormCellAction/ATableFormCellAction.js +14 -4
  55. package/src/ATableForm/ATableFormCellDnd/ATableFormCellDnd.js +196 -187
  56. package/src/ATableForm/ATableFormRow/compositionAPI/EditAPI.js +104 -104
  57. package/src/ATableForm/__tests__/ATableForm.DragAndDropAPI.test.js +200 -212
  58. package/src/ATableForm/__tests__/ATableForm.ListView.test.js +134 -174
  59. package/src/ATableForm/compositionAPI/IconsAPI.js +24 -21
  60. package/src/AVerticalScroll/AVerticalScroll.js +182 -177
  61. package/src/AWizard/AWizard.js +26 -21
  62. package/src/AWizard/AWizardStep/AWizardStep.js +275 -270
  63. package/src/AWizard/compositionAPI/__tests__/ChangeStepAPI.test.js +32 -32
  64. package/src/AWizard/compositionAPI/__tests__/LocalAPI.test.js +55 -55
  65. package/src/PuxDatepicker/PuxDatepickerCalendarPanel/PuxDatepickerCalendarPanel.js +646 -648
  66. package/src/PuxDatepicker/panel/PanelDate/PanelDate.js +300 -301
  67. package/src/PuxDatepicker/panel/PanelMonth/PanelMonth.js +148 -149
  68. package/src/PuxDatepicker/panel/PanelTime/PanelTime.js +256 -257
  69. package/src/PuxDatepicker/panel/PanelYear/PanelYear.js +136 -137
  70. package/src/PuxDatepicker/utils/index.js +100 -100
  71. package/src/compositionAPI/AHttpAPI.js +593 -593
  72. package/src/compositionAPI/__tests__/AHttpAPI.test.js +42 -42
  73. package/src/filters/__tests__/filterBoolean.test.js +38 -38
  74. package/src/filters/__tests__/filterCapitalize.test.js +38 -38
  75. package/src/filters/__tests__/filterCurrency.test.js +21 -21
  76. package/src/filters/__tests__/filterDate.test.js +42 -42
  77. package/src/filters/__tests__/filterDefaultForEmpty.test.js +24 -24
  78. package/src/filters/__tests__/filterEmail.test.js +42 -42
  79. package/src/filters/__tests__/filterEscapeHtml.test.js +45 -45
  80. package/src/filters/__tests__/filterFileSize.test.js +45 -45
  81. package/src/filters/__tests__/filterFloat.test.js +74 -74
  82. package/src/filters/__tests__/filterJson.test.js +74 -74
  83. package/src/filters/__tests__/filterKeyValue.test.js +50 -50
  84. package/src/filters/__tests__/filterLimitTo.test.js +39 -39
  85. package/src/filters/__tests__/filterLink.test.js +41 -41
  86. package/src/filters/__tests__/filterList.test.js +149 -149
  87. package/src/filters/__tests__/filterLowerCase.test.js +38 -38
  88. package/src/filters/__tests__/filterMask.test.js +80 -80
  89. package/src/filters/__tests__/filterPropertyByValue.test.js +27 -27
  90. package/src/filters/__tests__/filterSearchHighlight.test.js +129 -129
  91. package/src/filters/__tests__/filterUpperCase.test.js +38 -38
  92. package/src/filters/__tests__/filterValueByCondition.test.js +3 -3
  93. package/src/filters/filterJson.js +39 -39
  94. package/src/filters/filterValueByCondition.js +2 -2
  95. package/src/plugins/AAlertPlugin.js +16 -5
  96. package/src/plugins/AMultiselectOrderedPlugin.js +88 -81
  97. package/src/plugins/ASelectPlugin.js +12 -10
  98. package/src/ui/ACheckbox/ACheckbox.js +82 -79
  99. package/src/ui/ADatepicker/compositionAPI/EventsAPI.js +297 -297
  100. package/src/ui/ADatepicker/utils/index.js +76 -76
  101. package/src/ui/ADatepickerAlt/ADatepicker.js +912 -912
  102. package/src/ui/ADatepickerAlt/utils/index.js +98 -98
  103. package/src/ui/AFieldset/__tests__/AFieldset.ClassColumn.test.js +113 -114
  104. package/src/ui/AFormElementBtnClear/AFormElementBtnClear.js +4 -1
  105. package/src/ui/AInputCurrency/AInputCurrency.js +20 -15
  106. package/src/ui/AInputCurrency/__tests__/AInputCurrency.ModelAPI.test.js +73 -73
  107. package/src/ui/AInputNumber/AInputNumber.js +17 -12
  108. package/src/ui/AJson/AJson.js +12 -3
  109. package/src/ui/AJson/compositionAPI/JsonAPI.js +116 -116
  110. package/src/ui/ALabel/__tests__/ALabel.IdAPI.test.js +42 -42
  111. package/src/ui/ALabel/__tests__/ALabel.LabelAPI.test.js +33 -33
  112. package/src/ui/ARadio/ARadio.js +80 -77
  113. package/src/ui/ASelect/ASelect.js +390 -383
  114. package/src/ui/ASelect/ASelectElement/ASelectElement.js +179 -176
  115. package/src/ui/ASelect/ASelectValueCloseable/ASelectValueCloseable.js +143 -141
  116. package/src/ui/ASelect/__tests__/SelectedFirstAPI.test.js +101 -101
  117. package/src/ui/ASelect/__tests__/SelectedVisibleAPI.test.js +98 -98
  118. package/src/ui/ASlider/compositionAPI/SliderAPI.js +23 -23
  119. package/src/ui/AValidatedJson/AValidatedJson.js +4 -1
  120. package/src/ui/AValidatedJson/AValidatedJsonItem/AValidatedJsonItem.js +308 -298
  121. package/src/ui/compositionApi/UiCollapseAPI.js +68 -63
  122. package/src/ui/compositionApi/UiInputAutofillAPI.js +41 -41
  123. package/src/ui/compositionApi/__tests__/UIDataGroupAPI.test.js +106 -106
  124. package/src/ui/compositionApi/__tests__/UIExcludeRenderAttributesAPI.test.js +39 -39
  125. package/src/ui/compositionApi/__tests__/UiDataWithKeyIdAndLabelAPI.test.js +128 -128
  126. package/src/ui/compositionApi/__tests__/UiSearchAPI.test.js +71 -71
  127. package/src/utils/EventBus.js +51 -8
  128. package/src/utils/__tests__/EventBus.test.js +138 -0
  129. package/src/utils/__tests__/utils.aOrderBy.test.js +1 -1
  130. package/src/utils/__tests__/utils.aSortBy.test.js +1 -1
  131. package/src/utils/__tests__/utils.getTotalNestedCount.test.js +56 -56
  132. package/src/utils/__tests__/utils.isArrayOfArrays.test.js +44 -44
  133. package/src/utils/__tests__/utils.isArrayOfStrings.test.js +36 -36
  134. package/src/utils/__tests__/utilsArray.aFirst.test.js +1 -1
  135. package/src/utils/__tests__/utilsArray.aLast.test.js +1 -1
  136. package/src/utils/__tests__/utilsLang.isArguments.test.js +1 -1
  137. package/src/utils/__tests__/utilsLang.isArray.test.js +1 -1
  138. package/src/utils/__tests__/utilsLang.isArrayBuffer.test.js +1 -1
  139. package/src/utils/__tests__/utilsLang.isBoolean.test.js +1 -1
  140. package/src/utils/__tests__/utilsLang.isBuffer.test.js +1 -1
  141. package/src/utils/__tests__/utilsLang.isDate.test.js +1 -1
  142. package/src/utils/__tests__/utilsLang.isElement.test.js +5 -3
  143. package/src/utils/__tests__/utilsLang.isError.test.js +1 -1
  144. package/src/utils/__tests__/utilsLang.isFinite.test.js +1 -1
  145. package/src/utils/__tests__/utilsLang.isFunction.test.js +1 -1
  146. package/src/utils/__tests__/utilsLang.isInteger.test.js +1 -1
  147. package/src/utils/__tests__/utilsLang.isMap.test.js +1 -1
  148. package/src/utils/__tests__/utilsLang.isNaN.test.js +1 -1
  149. package/src/utils/__tests__/utilsLang.isNil.test.js +1 -1
  150. package/src/utils/__tests__/utilsLang.isNull.test.js +1 -1
  151. package/src/utils/__tests__/utilsLang.isNumber.test.js +1 -1
  152. package/src/utils/__tests__/utilsLang.isObject.test.js +1 -1
  153. package/src/utils/__tests__/utilsLang.isObjectLike.test.js +5 -3
  154. package/src/utils/__tests__/utilsLang.isPlainObject.test.js +3 -2
  155. package/src/utils/__tests__/utilsLang.isPromise.test.js +5 -2
  156. package/src/utils/__tests__/utilsLang.isRegExp.test.js +1 -1
  157. package/src/utils/__tests__/utilsLang.isSet.test.js +1 -1
  158. package/src/utils/__tests__/utilsLang.isString.test.js +1 -1
  159. package/src/utils/__tests__/utilsLang.isSymbol.test.js +5 -3
  160. package/src/utils/__tests__/utilsLang.isUndefined.test.js +1 -1
  161. package/src/utils/__tests__/utilsLang.isWeakMap.test.js +1 -1
  162. package/src/utils/__tests__/utilsLang.isWeakSet.test.js +1 -1
  163. package/src/utils/__tests__/utilsMath.isEven.test.js +43 -43
  164. package/src/utils/__tests__/utilsMath.isOdd.test.js +43 -43
  165. package/src/utils/__tests__/utilsUi.isModelForFilterNotEmpty.test.js +65 -65
  166. package/src/utils/autosize.js +1 -1
@@ -1,593 +1,593 @@
1
- import {
2
- ref,
3
- } from "vue";
4
-
5
- import axios from "axios";
6
- import {
7
- forEach,
8
- isArray,
9
- isFunction,
10
- isNil,
11
- isPlainObject,
12
- isString,
13
- keyBy,
14
- } from "lodash-es";
15
-
16
-
17
- const BASE_URL = ref("/api/");
18
- const API = ref(axios.create());
19
- const API_SAVED = ref({});
20
- const ERROR_CALLBACKS = ref({});
21
- const HEADER_PARAMS = ref({});
22
- const abortGroupController = {};
23
- const abortGroupPending = {};
24
-
25
- export const API_CONFIG = ref({
26
- setUrlForArray: setUrlForArray,
27
- });
28
-
29
- export function create({ axiosCreateOptions = {} }) {
30
- API.value = axios.create(axiosCreateOptions);
31
- }
32
-
33
- export function setBaseUrl({ baseUrl = "" }) {
34
- BASE_URL.value = baseUrl;
35
- }
36
-
37
- export function setErrorCallbacks({ errorCallbacks = {} }) {
38
- ERROR_CALLBACKS.value = errorCallbacks;
39
- }
40
-
41
- export function setHeaderParams({ headerParams = {} } = {}) {
42
- HEADER_PARAMS.value = headerParams;
43
- }
44
-
45
- export function abortHttp({
46
- all = false,
47
- abortGroup,
48
- excludeAbortGroup,
49
- }) {
50
- const EXCLUDE_ABORT_GROUP_OBJ = getExcludeAbortGroup({ excludeAbortGroup });
51
-
52
- if (all) {
53
- forEach(abortGroupController, (abortController, abortKey) => {
54
- if (EXCLUDE_ABORT_GROUP_OBJ[abortKey]) {
55
- return;
56
- }
57
- abortController.abort();
58
- delete abortGroupController[abortKey];
59
- if (abortGroupPending[abortGroup]) {
60
- delete abortGroupPending[abortGroup];
61
- }
62
- });
63
- } else if (abortGroup) {
64
- let abortGroupList = [];
65
- if (isString(abortGroup)) {
66
- abortGroupList.push(abortGroup);
67
- } else if (isArray(abortGroup)) {
68
- abortGroupList = abortGroup;
69
- }
70
- forEach(abortGroupList, abortKey => {
71
- if (EXCLUDE_ABORT_GROUP_OBJ[abortKey]) {
72
- return;
73
- }
74
- if (abortGroupController[abortKey]) {
75
- abortGroupController[abortKey].abort();
76
- delete abortGroupController[abortKey];
77
- if (abortGroupPending[abortGroup]) {
78
- delete abortGroupPending[abortGroup];
79
- }
80
- }
81
- });
82
- }
83
- }
84
-
85
- export function clearAllApiSaved() {
86
- API_SAVED.value = {};
87
- }
88
-
89
- export function clearApiSaved({ apiSaveId }) {
90
- if (apiSaveId in API_SAVED.value) {
91
- delete API_SAVED.value[apiSaveId];
92
- }
93
- }
94
-
95
- export default function AHttpAPI() {
96
- return {
97
- abortHttp,
98
- clearAllApiSaved,
99
- clearApiSaved,
100
- deleteHttp,
101
- getHttp,
102
- getListHttp,
103
- getOptionsHttp,
104
- patchHttp,
105
- postHttp,
106
- putHttp,
107
- };
108
- }
109
-
110
- export function getHttp({
111
- url,
112
- urlBase,
113
- data,
114
- urlParams = {},
115
- headerParams,
116
- responseType,
117
- apiSaveId,
118
- keyId,
119
- fullResponse,
120
- showError,
121
- ignoreErrorHandler = false,
122
- abortable = true,
123
- abortGroup = "",
124
- }) {
125
- return callHttpRequestAndCheckSavedApi({
126
- methodHttp: "get",
127
- url,
128
- urlBase,
129
- urlParams,
130
- data,
131
- headerParams,
132
- responseType,
133
- apiSaveId,
134
- keyId,
135
- fullResponse,
136
- showError,
137
- ignoreErrorHandler,
138
- abortable,
139
- abortGroup,
140
- });
141
- }
142
-
143
- export function getListHttp({
144
- url,
145
- urlBase,
146
- data,
147
- urlParams = {},
148
- headerParams,
149
- responseType,
150
- apiSaveId,
151
- keyId,
152
- fullResponse,
153
- showError,
154
- ignoreErrorHandler = false,
155
- abortable = true,
156
- abortGroup = "",
157
- }) {
158
- return callHttpRequestAndCheckSavedApi({
159
- methodHttp: "get",
160
- url,
161
- urlBase,
162
- urlParams,
163
- data,
164
- headerParams,
165
- responseType,
166
- apiSaveId,
167
- keyId,
168
- fullResponse,
169
- showError,
170
- ignoreErrorHandler,
171
- abortable,
172
- abortGroup,
173
- expectedList: true,
174
- });
175
- }
176
-
177
- export function getOptionsHttp({
178
- url,
179
- urlBase,
180
- data,
181
- urlParams = {},
182
- headerParams,
183
- responseType,
184
- keyId,
185
- fullResponse,
186
- showError,
187
- ignoreErrorHandler = false,
188
- abortable = true,
189
- abortGroup = "",
190
- }) {
191
- return callHttpRequestAndCheckSavedApi({
192
- methodHttp: "options",
193
- url,
194
- urlBase,
195
- urlParams,
196
- data,
197
- headerParams,
198
- responseType,
199
- keyId,
200
- fullResponse,
201
- showError,
202
- abortable,
203
- abortGroup,
204
- ignoreErrorHandler,
205
- });
206
- }
207
-
208
- export function postHttp({
209
- url,
210
- urlBase,
211
- data,
212
- urlParams = {},
213
- headerParams,
214
- responseType,
215
- fullResponse,
216
- showError,
217
- ignoreErrorHandler = false,
218
- abortable = true,
219
- abortGroup = "",
220
- }) {
221
- return callHttpRequestAndCheckSavedApi({
222
- methodHttp: "post",
223
- url,
224
- urlBase,
225
- urlParams,
226
- data,
227
- headerParams,
228
- responseType,
229
- fullResponse,
230
- showError,
231
- abortable,
232
- abortGroup,
233
- ignoreErrorHandler,
234
- });
235
- }
236
-
237
- export function putHttp({
238
- url,
239
- urlBase,
240
- data,
241
- urlParams = {},
242
- headerParams,
243
- responseType,
244
- fullResponse,
245
- showError,
246
- ignoreErrorHandler = false,
247
- abortable = true,
248
- abortGroup = "",
249
- }) {
250
- return callHttpRequestAndCheckSavedApi({
251
- methodHttp: "put",
252
- url,
253
- urlBase,
254
- urlParams,
255
- data,
256
- headerParams,
257
- responseType,
258
- fullResponse,
259
- showError,
260
- abortable,
261
- abortGroup,
262
- ignoreErrorHandler,
263
- });
264
- }
265
-
266
- export function patchHttp({
267
- url,
268
- urlBase,
269
- data,
270
- urlParams = {},
271
- headerParams,
272
- responseType,
273
- fullResponse,
274
- showError,
275
- ignoreErrorHandler = false,
276
- abortable = true,
277
- abortGroup = "",
278
- }) {
279
- return callHttpRequestAndCheckSavedApi({
280
- methodHttp: "patch",
281
- url,
282
- urlBase,
283
- urlParams,
284
- data,
285
- headerParams,
286
- responseType,
287
- fullResponse,
288
- showError,
289
- abortable,
290
- abortGroup,
291
- ignoreErrorHandler,
292
- });
293
- }
294
-
295
- export function deleteHttp({
296
- url,
297
- urlBase,
298
- data,
299
- urlParams = {},
300
- headerParams,
301
- responseType,
302
- fullResponse,
303
- showError,
304
- ignoreErrorHandler = false,
305
- abortable = true,
306
- abortGroup = "",
307
- }) {
308
- return callHttpRequestAndCheckSavedApi({
309
- methodHttp: "delete",
310
- url,
311
- urlBase,
312
- urlParams,
313
- data,
314
- headerParams,
315
- responseType,
316
- fullResponse,
317
- showError,
318
- abortable,
319
- abortGroup,
320
- ignoreErrorHandler,
321
- });
322
- }
323
-
324
- export function callHttpRequestAndCheckSavedApi({
325
- methodHttp,
326
- url,
327
- urlBase,
328
- urlParams,
329
- data,
330
- headerParams = {},
331
- responseType = "json",
332
- apiSaveId,
333
- keyId,
334
- fullResponse,
335
- showError = false,
336
- ignoreErrorHandler = false,
337
- abortable = true,
338
- abortGroup = "",
339
- expectedList,
340
- }) {
341
- let apiSavedData = undefined;
342
- if (apiSaveId) {
343
- apiSavedData = API_SAVED.value[apiSaveId];
344
- if (apiSavedData) {
345
- if (apiSavedData.loading) {
346
- return apiSavedData.promise;
347
- }
348
- }
349
- }
350
-
351
- const PROMISE = new Promise((resolve, reject) => {
352
- if (apiSavedData) {
353
- if (!apiSavedData.loading) {
354
- if (keyId) {
355
- if (apiSavedData.keyData) {
356
- return resolve(apiSavedData.keyData);
357
- }
358
- const KEY_DATA = setKeyData({ data: apiSavedData.data, keyId });
359
- API_SAVED.value[apiSaveId].keyData = KEY_DATA;
360
- return resolve(KEY_DATA);
361
- }
362
- return resolve(apiSavedData.data);
363
- }
364
- }
365
- const URL_NEW = setUrlWithParams({ url, params: urlParams });
366
- let urlFull = `${ isNil(urlBase) ? BASE_URL.value : urlBase }${ URL_NEW }`;
367
- urlFull = urlFull.replace(/^(https?:\/\/)|(\/){2,}/g, (match, protocol) => {
368
- return protocol || "/";
369
- });
370
- const HEADER_PARAMS_LOCAL = {
371
- ...HEADER_PARAMS.value,
372
- ...headerParams,
373
- };
374
-
375
- const signal = getAbortGroupSignal({ abortGroup, abortable });
376
- setAbortGroupPendingCurrent({ abortGroup, abortable });
377
-
378
- API.value({
379
- method: methodHttp,
380
- url: urlFull,
381
- data,
382
- headers: HEADER_PARAMS_LOCAL,
383
- responseType,
384
- signal,
385
- }).then(
386
- response => {
387
- if (fullResponse) {
388
- return resolve(response);
389
- }
390
- const DATA = checkedExpectedList({ expectedList, response });
391
- const KEY_DATA = setKeyData({ data: DATA, keyId });
392
- if (apiSaveId) {
393
- API_SAVED.value[apiSaveId].data = DATA;
394
- API_SAVED.value[apiSaveId].keyData = KEY_DATA;
395
- API_SAVED.value[apiSaveId].loading = false;
396
- }
397
- if (keyId) {
398
- return resolve(KEY_DATA);
399
- }
400
- return resolve(DATA);
401
- },
402
- error => {
403
- if (error?.code === "ERR_CANCELED") { // workaround. we'll remake this in v2.0.0
404
- return reject(error);
405
- }
406
- if (isFunction(ignoreErrorHandler)) {
407
- if (ignoreErrorHandler({ error: error.response, showError, client: API })) {
408
- return reject(error.response);
409
- }
410
- } else if (ignoreErrorHandler || checkErrorStatus({ error: error.response, showError, client: API, reject, resolve })) {
411
- return reject(error.response);
412
- }
413
- },
414
- ).finally(
415
- () => {
416
- removeAbortGroupCurrent({ abortGroup, abortable });
417
- },
418
- );
419
- });
420
-
421
- if (!apiSavedData) {
422
- API_SAVED.value[apiSaveId] = API_SAVED.value[apiSaveId] || {};
423
- API_SAVED.value[apiSaveId].loading = true;
424
- API_SAVED.value[apiSaveId].promise = PROMISE;
425
- }
426
-
427
- return PROMISE;
428
- }
429
-
430
- function checkErrorStatus({ error, showError, client, resolve, reject }) {
431
- if (!error) {
432
- return true;
433
- }
434
- const ERROR_CALLBACK = () => {
435
- const CALLBACK = ERROR_CALLBACKS.value[error.status];
436
- if (isFunction(CALLBACK)) {
437
- return CALLBACK({ error, showError, client, resolve, reject });
438
- }
439
- if (isFunction(ERROR_CALLBACKS.value.all)) {
440
- return ERROR_CALLBACKS.value.all({ error, showError, client, resolve, reject });
441
- }
442
- return true;
443
- };
444
-
445
- return ERROR_CALLBACK();
446
- }
447
-
448
- export function setUrlWithParams({ url, params }) {
449
- const URL = url || "";
450
- let urlParams = "";
451
- forEach(params, (value, key) => {
452
- if (isArray(value)) {
453
- urlParams = API_CONFIG.value.setUrlForArray({ id: key, array: value, url: urlParams });
454
- } else if (isPlainObject(value)) {
455
- forEach(value, (v, k) => {
456
- if (v) {
457
- if (urlParams) {
458
- urlParams += "&";
459
- }
460
- urlParams += `${ k }=${ v }`;
461
- }
462
- });
463
- } else if (!isNil(value)) {
464
- if (urlParams) {
465
- urlParams += "&";
466
- }
467
- urlParams += `${ key }=${ value }`;
468
- }
469
- });
470
- const prefix = urlParams && URL ? URL.indexOf("?") === -1 ? "?" : "&" : "";
471
-
472
- return `${ URL }${ prefix }${ urlParams }`;
473
- }
474
-
475
- export function setUrlForArray({ array, url, id }) {
476
- if (!array.length) {
477
- return url;
478
- }
479
- let URL = url || "";
480
- if (id === "fields" || id === "ordering") { // TODO: soll in plugin sein.
481
- if (URL) {
482
- URL += "&";
483
- }
484
- URL += `${ id }=`;
485
- URL += array.join(",");
486
- } else {
487
- forEach(array, v => {
488
- if (URL) {
489
- URL += "&";
490
- }
491
- URL += `${ id }=${ v }`;
492
- });
493
- }
494
- return URL;
495
- }
496
-
497
- function setKeyData({ data, keyId }) {
498
- if (!keyId) {
499
- return undefined;
500
- }
501
- return keyBy(data, keyId);
502
- }
503
-
504
- function checkedExpectedList({ expectedList, response }) {
505
- if (expectedList) {
506
- if (isArray(response.data)) {
507
- return response.data;
508
- }
509
- return response.data.results ? response.data.results : [];
510
- }
511
- return response.data;
512
- }
513
-
514
- function getAbortGroupSignal({ abortGroup = "_global", abortable } = {}) {
515
- if (!abortable) {
516
- return undefined;
517
- }
518
- abortGroupController[abortGroup] = abortGroupController[abortGroup] || new AbortController();
519
- return abortGroupController[abortGroup].signal;
520
- }
521
-
522
- function getExcludeAbortGroup({ excludeAbortGroup }) {
523
- const EXCLUDE_ABORT_GROUP_OBJ = {};
524
- if (excludeAbortGroup) {
525
- if (isString(excludeAbortGroup)) {
526
- EXCLUDE_ABORT_GROUP_OBJ[excludeAbortGroup] = true;
527
- } else if (isArray(excludeAbortGroup)) {
528
- forEach(excludeAbortGroup, abortGroupkey => {
529
- EXCLUDE_ABORT_GROUP_OBJ[abortGroupkey] = true;
530
- });
531
- }
532
- }
533
- return EXCLUDE_ABORT_GROUP_OBJ;
534
- }
535
-
536
- function setAbortGroupPendingCurrent({ abortGroup, abortable }) {
537
- if (!abortable || !abortGroup) {
538
- return;
539
- }
540
- if (abortGroupPending[abortGroup]) {
541
- abortGroupPending[abortGroup]++;
542
- } else {
543
- abortGroupPending[abortGroup] = 1;
544
- }
545
- }
546
-
547
- function removeAbortGroupCurrent({ abortGroup, abortable }) {
548
- if (!abortable || !abortGroup) {
549
- return;
550
- }
551
- if (abortGroupPending[abortGroup]) {
552
- abortGroupPending[abortGroup]--;
553
- }
554
- if (abortGroupPending[abortGroup] === 0 && abortGroupController[abortGroup]) {
555
- delete abortGroupPending[abortGroup];
556
- delete abortGroupController[abortGroup];
557
- }
558
- }
559
-
560
- export function getUrlParams({ url, allCommasToArray = false, keysCommaToArray = [] } = {}) {
561
- let urlParamsString = url || window.location.search.substring(1);
562
- try {
563
- urlParamsString = decodeURI(urlParamsString);
564
- } catch (e) {
565
- console.error(e);
566
- }
567
- const urlParamsArray = urlParamsString.split("&");
568
- const urlParamsObj = {};
569
- forEach(urlParamsArray, item => {
570
- const pair = item.split("=");
571
- if (pair && pair.length === 2) {
572
- if (pair[1].indexOf("[") !== -1 || pair[1].indexOf("%5B") !== -1) { // Wenn in URL array steht. Z.B.: doc_type1=%5B%22uuid1%22%5D oder doc_type1=["uuid1"]
573
- const stringValue = pair[1].replace("%5B", "[").replace("%5D", "]").replace(/%22/g, `"`);
574
- urlParamsObj[pair[0]] = JSON.parse(stringValue);
575
- } else if (pair[1].indexOf(",") !== -1 &&
576
- (allCommasToArray ||
577
- keysCommaToArray.indexOf(pair[0]) !== -1)) {
578
- const LIST = pair[1].split(",");
579
- urlParamsObj[pair[0]] = LIST;
580
- } else if (urlParamsObj[pair[0]]) {
581
- if (isString(urlParamsObj[pair[0]])) {
582
- urlParamsObj[pair[0]] = [urlParamsObj[pair[0]]];
583
- urlParamsObj[pair[0]].push(pair[1]);
584
- } else if (isArray(urlParamsObj[pair[0]])) {
585
- urlParamsObj[pair[0]].push(pair[1]);
586
- }
587
- } else {
588
- urlParamsObj[pair[0]] = pair[1];
589
- }
590
- }
591
- });
592
- return urlParamsObj;
593
- }
1
+ import {
2
+ ref,
3
+ } from "vue";
4
+
5
+ import axios from "axios";
6
+ import {
7
+ forEach,
8
+ isArray,
9
+ isFunction,
10
+ isNil,
11
+ isPlainObject,
12
+ isString,
13
+ keyBy,
14
+ } from "lodash-es";
15
+
16
+
17
+ const BASE_URL = ref("/api/");
18
+ const API = ref(axios.create());
19
+ const API_SAVED = ref({});
20
+ const ERROR_CALLBACKS = ref({});
21
+ const HEADER_PARAMS = ref({});
22
+ const abortGroupController = {};
23
+ const abortGroupPending = {};
24
+
25
+ export const API_CONFIG = ref({
26
+ setUrlForArray: setUrlForArray,
27
+ });
28
+
29
+ export function create({ axiosCreateOptions = {} }) {
30
+ API.value = axios.create(axiosCreateOptions);
31
+ }
32
+
33
+ export function setBaseUrl({ baseUrl = "" }) {
34
+ BASE_URL.value = baseUrl;
35
+ }
36
+
37
+ export function setErrorCallbacks({ errorCallbacks = {} }) {
38
+ ERROR_CALLBACKS.value = errorCallbacks;
39
+ }
40
+
41
+ export function setHeaderParams({ headerParams = {} } = {}) {
42
+ HEADER_PARAMS.value = headerParams;
43
+ }
44
+
45
+ export function abortHttp({
46
+ all = false,
47
+ abortGroup,
48
+ excludeAbortGroup,
49
+ }) {
50
+ const EXCLUDE_ABORT_GROUP_OBJ = getExcludeAbortGroup({ excludeAbortGroup });
51
+
52
+ if (all) {
53
+ forEach(abortGroupController, (abortController, abortKey) => {
54
+ if (EXCLUDE_ABORT_GROUP_OBJ[abortKey]) {
55
+ return;
56
+ }
57
+ abortController.abort();
58
+ delete abortGroupController[abortKey];
59
+ if (abortGroupPending[abortGroup]) {
60
+ delete abortGroupPending[abortGroup];
61
+ }
62
+ });
63
+ } else if (abortGroup) {
64
+ let abortGroupList = [];
65
+ if (isString(abortGroup)) {
66
+ abortGroupList.push(abortGroup);
67
+ } else if (isArray(abortGroup)) {
68
+ abortGroupList = abortGroup;
69
+ }
70
+ forEach(abortGroupList, abortKey => {
71
+ if (EXCLUDE_ABORT_GROUP_OBJ[abortKey]) {
72
+ return;
73
+ }
74
+ if (abortGroupController[abortKey]) {
75
+ abortGroupController[abortKey].abort();
76
+ delete abortGroupController[abortKey];
77
+ if (abortGroupPending[abortGroup]) {
78
+ delete abortGroupPending[abortGroup];
79
+ }
80
+ }
81
+ });
82
+ }
83
+ }
84
+
85
+ export function clearAllApiSaved() {
86
+ API_SAVED.value = {};
87
+ }
88
+
89
+ export function clearApiSaved({ apiSaveId }) {
90
+ if (apiSaveId in API_SAVED.value) {
91
+ delete API_SAVED.value[apiSaveId];
92
+ }
93
+ }
94
+
95
+ export default function AHttpAPI() {
96
+ return {
97
+ abortHttp,
98
+ clearAllApiSaved,
99
+ clearApiSaved,
100
+ deleteHttp,
101
+ getHttp,
102
+ getListHttp,
103
+ getOptionsHttp,
104
+ patchHttp,
105
+ postHttp,
106
+ putHttp,
107
+ };
108
+ }
109
+
110
+ export function getHttp({
111
+ url,
112
+ urlBase,
113
+ data,
114
+ urlParams = {},
115
+ headerParams,
116
+ responseType,
117
+ apiSaveId,
118
+ keyId,
119
+ fullResponse,
120
+ showError,
121
+ ignoreErrorHandler = false,
122
+ abortable = true,
123
+ abortGroup = "",
124
+ }) {
125
+ return callHttpRequestAndCheckSavedApi({
126
+ methodHttp: "get",
127
+ url,
128
+ urlBase,
129
+ urlParams,
130
+ data,
131
+ headerParams,
132
+ responseType,
133
+ apiSaveId,
134
+ keyId,
135
+ fullResponse,
136
+ showError,
137
+ ignoreErrorHandler,
138
+ abortable,
139
+ abortGroup,
140
+ });
141
+ }
142
+
143
+ export function getListHttp({
144
+ url,
145
+ urlBase,
146
+ data,
147
+ urlParams = {},
148
+ headerParams,
149
+ responseType,
150
+ apiSaveId,
151
+ keyId,
152
+ fullResponse,
153
+ showError,
154
+ ignoreErrorHandler = false,
155
+ abortable = true,
156
+ abortGroup = "",
157
+ }) {
158
+ return callHttpRequestAndCheckSavedApi({
159
+ methodHttp: "get",
160
+ url,
161
+ urlBase,
162
+ urlParams,
163
+ data,
164
+ headerParams,
165
+ responseType,
166
+ apiSaveId,
167
+ keyId,
168
+ fullResponse,
169
+ showError,
170
+ ignoreErrorHandler,
171
+ abortable,
172
+ abortGroup,
173
+ expectedList: true,
174
+ });
175
+ }
176
+
177
+ export function getOptionsHttp({
178
+ url,
179
+ urlBase,
180
+ data,
181
+ urlParams = {},
182
+ headerParams,
183
+ responseType,
184
+ keyId,
185
+ fullResponse,
186
+ showError,
187
+ ignoreErrorHandler = false,
188
+ abortable = true,
189
+ abortGroup = "",
190
+ }) {
191
+ return callHttpRequestAndCheckSavedApi({
192
+ methodHttp: "options",
193
+ url,
194
+ urlBase,
195
+ urlParams,
196
+ data,
197
+ headerParams,
198
+ responseType,
199
+ keyId,
200
+ fullResponse,
201
+ showError,
202
+ abortable,
203
+ abortGroup,
204
+ ignoreErrorHandler,
205
+ });
206
+ }
207
+
208
+ export function postHttp({
209
+ url,
210
+ urlBase,
211
+ data,
212
+ urlParams = {},
213
+ headerParams,
214
+ responseType,
215
+ fullResponse,
216
+ showError,
217
+ ignoreErrorHandler = false,
218
+ abortable = true,
219
+ abortGroup = "",
220
+ }) {
221
+ return callHttpRequestAndCheckSavedApi({
222
+ methodHttp: "post",
223
+ url,
224
+ urlBase,
225
+ urlParams,
226
+ data,
227
+ headerParams,
228
+ responseType,
229
+ fullResponse,
230
+ showError,
231
+ abortable,
232
+ abortGroup,
233
+ ignoreErrorHandler,
234
+ });
235
+ }
236
+
237
+ export function putHttp({
238
+ url,
239
+ urlBase,
240
+ data,
241
+ urlParams = {},
242
+ headerParams,
243
+ responseType,
244
+ fullResponse,
245
+ showError,
246
+ ignoreErrorHandler = false,
247
+ abortable = true,
248
+ abortGroup = "",
249
+ }) {
250
+ return callHttpRequestAndCheckSavedApi({
251
+ methodHttp: "put",
252
+ url,
253
+ urlBase,
254
+ urlParams,
255
+ data,
256
+ headerParams,
257
+ responseType,
258
+ fullResponse,
259
+ showError,
260
+ abortable,
261
+ abortGroup,
262
+ ignoreErrorHandler,
263
+ });
264
+ }
265
+
266
+ export function patchHttp({
267
+ url,
268
+ urlBase,
269
+ data,
270
+ urlParams = {},
271
+ headerParams,
272
+ responseType,
273
+ fullResponse,
274
+ showError,
275
+ ignoreErrorHandler = false,
276
+ abortable = true,
277
+ abortGroup = "",
278
+ }) {
279
+ return callHttpRequestAndCheckSavedApi({
280
+ methodHttp: "patch",
281
+ url,
282
+ urlBase,
283
+ urlParams,
284
+ data,
285
+ headerParams,
286
+ responseType,
287
+ fullResponse,
288
+ showError,
289
+ abortable,
290
+ abortGroup,
291
+ ignoreErrorHandler,
292
+ });
293
+ }
294
+
295
+ export function deleteHttp({
296
+ url,
297
+ urlBase,
298
+ data,
299
+ urlParams = {},
300
+ headerParams,
301
+ responseType,
302
+ fullResponse,
303
+ showError,
304
+ ignoreErrorHandler = false,
305
+ abortable = true,
306
+ abortGroup = "",
307
+ }) {
308
+ return callHttpRequestAndCheckSavedApi({
309
+ methodHttp: "delete",
310
+ url,
311
+ urlBase,
312
+ urlParams,
313
+ data,
314
+ headerParams,
315
+ responseType,
316
+ fullResponse,
317
+ showError,
318
+ abortable,
319
+ abortGroup,
320
+ ignoreErrorHandler,
321
+ });
322
+ }
323
+
324
+ export function callHttpRequestAndCheckSavedApi({
325
+ methodHttp,
326
+ url,
327
+ urlBase,
328
+ urlParams,
329
+ data,
330
+ headerParams = {},
331
+ responseType = "json",
332
+ apiSaveId,
333
+ keyId,
334
+ fullResponse,
335
+ showError = false,
336
+ ignoreErrorHandler = false,
337
+ abortable = true,
338
+ abortGroup = "",
339
+ expectedList,
340
+ }) {
341
+ let apiSavedData = undefined;
342
+ if (apiSaveId) {
343
+ apiSavedData = API_SAVED.value[apiSaveId];
344
+ if (apiSavedData) {
345
+ if (apiSavedData.loading) {
346
+ return apiSavedData.promise;
347
+ }
348
+ }
349
+ }
350
+
351
+ const PROMISE = new Promise((resolve, reject) => {
352
+ if (apiSavedData) {
353
+ if (!apiSavedData.loading) {
354
+ if (keyId) {
355
+ if (apiSavedData.keyData) {
356
+ return resolve(apiSavedData.keyData);
357
+ }
358
+ const KEY_DATA = setKeyData({ data: apiSavedData.data, keyId });
359
+ API_SAVED.value[apiSaveId].keyData = KEY_DATA;
360
+ return resolve(KEY_DATA);
361
+ }
362
+ return resolve(apiSavedData.data);
363
+ }
364
+ }
365
+ const URL_NEW = setUrlWithParams({ url, params: urlParams });
366
+ let urlFull = `${ isNil(urlBase) ? BASE_URL.value : urlBase }${ URL_NEW }`;
367
+ urlFull = urlFull.replace(/^(https?:\/\/)|(\/){2,}/g, (match, protocol) => {
368
+ return protocol || "/";
369
+ });
370
+ const HEADER_PARAMS_LOCAL = {
371
+ ...HEADER_PARAMS.value,
372
+ ...headerParams,
373
+ };
374
+
375
+ const signal = getAbortGroupSignal({ abortGroup, abortable });
376
+ setAbortGroupPendingCurrent({ abortGroup, abortable });
377
+
378
+ API.value({
379
+ method: methodHttp,
380
+ url: urlFull,
381
+ data,
382
+ headers: HEADER_PARAMS_LOCAL,
383
+ responseType,
384
+ signal,
385
+ }).then(
386
+ response => {
387
+ if (fullResponse) {
388
+ return resolve(response);
389
+ }
390
+ const DATA = checkedExpectedList({ expectedList, response });
391
+ const KEY_DATA = setKeyData({ data: DATA, keyId });
392
+ if (apiSaveId) {
393
+ API_SAVED.value[apiSaveId].data = DATA;
394
+ API_SAVED.value[apiSaveId].keyData = KEY_DATA;
395
+ API_SAVED.value[apiSaveId].loading = false;
396
+ }
397
+ if (keyId) {
398
+ return resolve(KEY_DATA);
399
+ }
400
+ return resolve(DATA);
401
+ },
402
+ error => {
403
+ if (error?.code === "ERR_CANCELED") { // workaround. we'll remake this in v2.0.0
404
+ return reject(error);
405
+ }
406
+ if (isFunction(ignoreErrorHandler)) {
407
+ if (ignoreErrorHandler({ error: error.response, showError, client: API })) {
408
+ return reject(error.response);
409
+ }
410
+ } else if (ignoreErrorHandler || checkErrorStatus({ error: error.response, showError, client: API, reject, resolve })) {
411
+ return reject(error.response);
412
+ }
413
+ },
414
+ ).finally(
415
+ () => {
416
+ removeAbortGroupCurrent({ abortGroup, abortable });
417
+ },
418
+ );
419
+ });
420
+
421
+ if (!apiSavedData) {
422
+ API_SAVED.value[apiSaveId] = API_SAVED.value[apiSaveId] || {};
423
+ API_SAVED.value[apiSaveId].loading = true;
424
+ API_SAVED.value[apiSaveId].promise = PROMISE;
425
+ }
426
+
427
+ return PROMISE;
428
+ }
429
+
430
+ function checkErrorStatus({ error, showError, client, resolve, reject }) {
431
+ if (!error) {
432
+ return true;
433
+ }
434
+ const ERROR_CALLBACK = () => {
435
+ const CALLBACK = ERROR_CALLBACKS.value[error.status];
436
+ if (isFunction(CALLBACK)) {
437
+ return CALLBACK({ error, showError, client, resolve, reject });
438
+ }
439
+ if (isFunction(ERROR_CALLBACKS.value.all)) {
440
+ return ERROR_CALLBACKS.value.all({ error, showError, client, resolve, reject });
441
+ }
442
+ return true;
443
+ };
444
+
445
+ return ERROR_CALLBACK();
446
+ }
447
+
448
+ export function setUrlWithParams({ url, params }) {
449
+ const URL = url || "";
450
+ let urlParams = "";
451
+ forEach(params, (value, key) => {
452
+ if (isArray(value)) {
453
+ urlParams = API_CONFIG.value.setUrlForArray({ id: key, array: value, url: urlParams });
454
+ } else if (isPlainObject(value)) {
455
+ forEach(value, (v, k) => {
456
+ if (v) {
457
+ if (urlParams) {
458
+ urlParams += "&";
459
+ }
460
+ urlParams += `${ k }=${ v }`;
461
+ }
462
+ });
463
+ } else if (!isNil(value)) {
464
+ if (urlParams) {
465
+ urlParams += "&";
466
+ }
467
+ urlParams += `${ key }=${ value }`;
468
+ }
469
+ });
470
+ const prefix = urlParams && URL ? URL.indexOf("?") === -1 ? "?" : "&" : "";
471
+
472
+ return `${ URL }${ prefix }${ urlParams }`;
473
+ }
474
+
475
+ export function setUrlForArray({ array, url, id }) {
476
+ if (!array.length) {
477
+ return url;
478
+ }
479
+ let URL = url || "";
480
+ if (id === "fields" || id === "ordering") { // TODO: soll in plugin sein.
481
+ if (URL) {
482
+ URL += "&";
483
+ }
484
+ URL += `${ id }=`;
485
+ URL += array.join(",");
486
+ } else {
487
+ forEach(array, v => {
488
+ if (URL) {
489
+ URL += "&";
490
+ }
491
+ URL += `${ id }=${ v }`;
492
+ });
493
+ }
494
+ return URL;
495
+ }
496
+
497
+ function setKeyData({ data, keyId }) {
498
+ if (!keyId) {
499
+ return undefined;
500
+ }
501
+ return keyBy(data, keyId);
502
+ }
503
+
504
+ function checkedExpectedList({ expectedList, response }) {
505
+ if (expectedList) {
506
+ if (isArray(response.data)) {
507
+ return response.data;
508
+ }
509
+ return response.data.results ? response.data.results : [];
510
+ }
511
+ return response.data;
512
+ }
513
+
514
+ function getAbortGroupSignal({ abortGroup = "_global", abortable } = {}) {
515
+ if (!abortable) {
516
+ return undefined;
517
+ }
518
+ abortGroupController[abortGroup] = abortGroupController[abortGroup] || new AbortController();
519
+ return abortGroupController[abortGroup].signal;
520
+ }
521
+
522
+ function getExcludeAbortGroup({ excludeAbortGroup }) {
523
+ const EXCLUDE_ABORT_GROUP_OBJ = {};
524
+ if (excludeAbortGroup) {
525
+ if (isString(excludeAbortGroup)) {
526
+ EXCLUDE_ABORT_GROUP_OBJ[excludeAbortGroup] = true;
527
+ } else if (isArray(excludeAbortGroup)) {
528
+ forEach(excludeAbortGroup, abortGroupkey => {
529
+ EXCLUDE_ABORT_GROUP_OBJ[abortGroupkey] = true;
530
+ });
531
+ }
532
+ }
533
+ return EXCLUDE_ABORT_GROUP_OBJ;
534
+ }
535
+
536
+ function setAbortGroupPendingCurrent({ abortGroup, abortable }) {
537
+ if (!abortable || !abortGroup) {
538
+ return;
539
+ }
540
+ if (abortGroupPending[abortGroup]) {
541
+ abortGroupPending[abortGroup]++;
542
+ } else {
543
+ abortGroupPending[abortGroup] = 1;
544
+ }
545
+ }
546
+
547
+ function removeAbortGroupCurrent({ abortGroup, abortable }) {
548
+ if (!abortable || !abortGroup) {
549
+ return;
550
+ }
551
+ if (abortGroupPending[abortGroup]) {
552
+ abortGroupPending[abortGroup]--;
553
+ }
554
+ if (abortGroupPending[abortGroup] === 0 && abortGroupController[abortGroup]) {
555
+ delete abortGroupPending[abortGroup];
556
+ delete abortGroupController[abortGroup];
557
+ }
558
+ }
559
+
560
+ export function getUrlParams({ url, allCommasToArray = false, keysCommaToArray = [] } = {}) {
561
+ let urlParamsString = url || window.location.search.substring(1);
562
+ try {
563
+ urlParamsString = decodeURI(urlParamsString);
564
+ } catch(e) {
565
+ console.error(e);
566
+ }
567
+ const urlParamsArray = urlParamsString.split("&");
568
+ const urlParamsObj = {};
569
+ forEach(urlParamsArray, item => {
570
+ const pair = item.split("=");
571
+ if (pair && pair.length === 2) {
572
+ if (pair[1].indexOf("[") !== -1 || pair[1].indexOf("%5B") !== -1) { // Wenn in URL array steht. Z.B.: doc_type1=%5B%22uuid1%22%5D oder doc_type1=["uuid1"]
573
+ const stringValue = pair[1].replace("%5B", "[").replace("%5D", "]").replace(/%22/g, `"`);
574
+ urlParamsObj[pair[0]] = JSON.parse(stringValue);
575
+ } else if (pair[1].indexOf(",") !== -1 &&
576
+ (allCommasToArray ||
577
+ keysCommaToArray.indexOf(pair[0]) !== -1)) {
578
+ const LIST = pair[1].split(",");
579
+ urlParamsObj[pair[0]] = LIST;
580
+ } else if (urlParamsObj[pair[0]]) {
581
+ if (isString(urlParamsObj[pair[0]])) {
582
+ urlParamsObj[pair[0]] = [urlParamsObj[pair[0]]];
583
+ urlParamsObj[pair[0]].push(pair[1]);
584
+ } else if (isArray(urlParamsObj[pair[0]])) {
585
+ urlParamsObj[pair[0]].push(pair[1]);
586
+ }
587
+ } else {
588
+ urlParamsObj[pair[0]] = pair[1];
589
+ }
590
+ }
591
+ });
592
+ return urlParamsObj;
593
+ }