aloha-vue 2.74.0 → 2.75.1

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 (167) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +22 -21
  3. package/dist/aloha-vue.css +105 -105
  4. package/dist/aloha-vue.css.map +1 -1
  5. package/dist/aloha-vue.es.js +59267 -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/ADatepicker.js +6 -5
  100. package/src/ui/ADatepicker/compositionAPI/EventsAPI.js +297 -297
  101. package/src/ui/ADatepicker/utils/index.js +76 -76
  102. package/src/ui/ADatepickerAlt/ADatepicker.js +912 -912
  103. package/src/ui/ADatepickerAlt/utils/index.js +98 -98
  104. package/src/ui/AFieldset/__tests__/AFieldset.ClassColumn.test.js +113 -114
  105. package/src/ui/AFormElementBtnClear/AFormElementBtnClear.js +4 -1
  106. package/src/ui/AInputCurrency/AInputCurrency.js +20 -15
  107. package/src/ui/AInputCurrency/__tests__/AInputCurrency.ModelAPI.test.js +73 -73
  108. package/src/ui/AInputNumber/AInputNumber.js +17 -12
  109. package/src/ui/AJson/AJson.js +12 -3
  110. package/src/ui/AJson/compositionAPI/JsonAPI.js +116 -116
  111. package/src/ui/ALabel/__tests__/ALabel.IdAPI.test.js +42 -42
  112. package/src/ui/ALabel/__tests__/ALabel.LabelAPI.test.js +33 -33
  113. package/src/ui/ARadio/ARadio.js +80 -77
  114. package/src/ui/ASelect/ASelect.js +390 -383
  115. package/src/ui/ASelect/ASelectElement/ASelectElement.js +179 -176
  116. package/src/ui/ASelect/ASelectValueCloseable/ASelectValueCloseable.js +143 -141
  117. package/src/ui/ASelect/__tests__/SelectedFirstAPI.test.js +101 -101
  118. package/src/ui/ASelect/__tests__/SelectedVisibleAPI.test.js +98 -98
  119. package/src/ui/ASlider/compositionAPI/SliderAPI.js +23 -23
  120. package/src/ui/AValidatedJson/AValidatedJson.js +4 -1
  121. package/src/ui/AValidatedJson/AValidatedJsonItem/AValidatedJsonItem.js +308 -298
  122. package/src/ui/compositionApi/UiCollapseAPI.js +68 -63
  123. package/src/ui/compositionApi/UiInputAutofillAPI.js +41 -41
  124. package/src/ui/compositionApi/__tests__/UIDataGroupAPI.test.js +106 -106
  125. package/src/ui/compositionApi/__tests__/UIExcludeRenderAttributesAPI.test.js +39 -39
  126. package/src/ui/compositionApi/__tests__/UiDataWithKeyIdAndLabelAPI.test.js +128 -128
  127. package/src/ui/compositionApi/__tests__/UiSearchAPI.test.js +71 -71
  128. package/src/utils/EventBus.js +51 -8
  129. package/src/utils/__tests__/EventBus.test.js +138 -0
  130. package/src/utils/__tests__/utils.aOrderBy.test.js +1 -1
  131. package/src/utils/__tests__/utils.aSortBy.test.js +1 -1
  132. package/src/utils/__tests__/utils.getTotalNestedCount.test.js +56 -56
  133. package/src/utils/__tests__/utils.isArrayOfArrays.test.js +44 -44
  134. package/src/utils/__tests__/utils.isArrayOfStrings.test.js +36 -36
  135. package/src/utils/__tests__/utilsArray.aFirst.test.js +1 -1
  136. package/src/utils/__tests__/utilsArray.aLast.test.js +1 -1
  137. package/src/utils/__tests__/utilsLang.isArguments.test.js +1 -1
  138. package/src/utils/__tests__/utilsLang.isArray.test.js +1 -1
  139. package/src/utils/__tests__/utilsLang.isArrayBuffer.test.js +1 -1
  140. package/src/utils/__tests__/utilsLang.isBoolean.test.js +1 -1
  141. package/src/utils/__tests__/utilsLang.isBuffer.test.js +1 -1
  142. package/src/utils/__tests__/utilsLang.isDate.test.js +1 -1
  143. package/src/utils/__tests__/utilsLang.isElement.test.js +5 -3
  144. package/src/utils/__tests__/utilsLang.isError.test.js +1 -1
  145. package/src/utils/__tests__/utilsLang.isFinite.test.js +1 -1
  146. package/src/utils/__tests__/utilsLang.isFunction.test.js +1 -1
  147. package/src/utils/__tests__/utilsLang.isInteger.test.js +1 -1
  148. package/src/utils/__tests__/utilsLang.isMap.test.js +1 -1
  149. package/src/utils/__tests__/utilsLang.isNaN.test.js +1 -1
  150. package/src/utils/__tests__/utilsLang.isNil.test.js +1 -1
  151. package/src/utils/__tests__/utilsLang.isNull.test.js +1 -1
  152. package/src/utils/__tests__/utilsLang.isNumber.test.js +1 -1
  153. package/src/utils/__tests__/utilsLang.isObject.test.js +1 -1
  154. package/src/utils/__tests__/utilsLang.isObjectLike.test.js +5 -3
  155. package/src/utils/__tests__/utilsLang.isPlainObject.test.js +3 -2
  156. package/src/utils/__tests__/utilsLang.isPromise.test.js +5 -2
  157. package/src/utils/__tests__/utilsLang.isRegExp.test.js +1 -1
  158. package/src/utils/__tests__/utilsLang.isSet.test.js +1 -1
  159. package/src/utils/__tests__/utilsLang.isString.test.js +1 -1
  160. package/src/utils/__tests__/utilsLang.isSymbol.test.js +5 -3
  161. package/src/utils/__tests__/utilsLang.isUndefined.test.js +1 -1
  162. package/src/utils/__tests__/utilsLang.isWeakMap.test.js +1 -1
  163. package/src/utils/__tests__/utilsLang.isWeakSet.test.js +1 -1
  164. package/src/utils/__tests__/utilsMath.isEven.test.js +43 -43
  165. package/src/utils/__tests__/utilsMath.isOdd.test.js +43 -43
  166. package/src/utils/__tests__/utilsUi.isModelForFilterNotEmpty.test.js +65 -65
  167. package/src/utils/autosize.js +1 -1
@@ -1,297 +1,297 @@
1
- import {
2
- computed,
3
- ref,
4
- toRef,
5
- } from "vue";
6
-
7
- import AKeysCode from "../../../const/AKeysCode";
8
- import moment from "moment";
9
- import {
10
- formatDate,
11
- isDateObject,
12
- isPlainObject,
13
- isValidDate,
14
- isValidRangeDate,
15
- parseDate,
16
- } from "../utils";
17
-
18
-
19
- export default function EventsAPI(props, { emit }, {
20
- calendarPanelRef = ref(undefined),
21
- changeModel = () => {},
22
- closePopover = () => {},
23
- formatLocal = computed(() => ""),
24
- formatSaveLocal = computed(() => ""),
25
- setCloseFocus = () => {},
26
- }) {
27
- const range = toRef(props, "range");
28
- const confirm = toRef(props, "confirm");
29
- const disabled = toRef(props, "disabled");
30
- const modelValue = toRef(props, "modelValue");
31
- const editable = toRef(props, "editable");
32
- const type = toRef(props, "type");
33
-
34
- const currentValue = ref(null);
35
- const userInput = ref(null);
36
-
37
- const initCurrentValue = () => {
38
- currentValue.value = range.value ? [null, null] : null;
39
- };
40
-
41
- const isValidValueText = value => {
42
- return !!parseDate(value, formatLocal.value, formatSaveLocal.value);
43
- };
44
-
45
- const valueToText = value => {
46
- try {
47
- if (moment(value, formatSaveLocal.value).isValid()) {
48
- return moment(value, formatSaveLocal.value).format(formatLocal.value) || "";
49
- }
50
- return "";
51
- } catch (e) {
52
- return "";
53
- }
54
- };
55
-
56
- const isValidModelValue = value => {
57
- try {
58
- if (moment(value, formatSaveLocal.value).isValid()) {
59
- return true;
60
- }
61
- return false;
62
- } catch (e) {
63
- return false;
64
- }
65
- };
66
-
67
- const stringify = date => {
68
- return (isPlainObject(formatLocal.value) && typeof this.format.stringify === "function")
69
- ? formatLocal.value.stringify(date)
70
- : formatDate(date, formatLocal.value);
71
- };
72
-
73
- const text = computed(() => {
74
- if (userInput.value !== null) {
75
- return userInput.value;
76
- }
77
-
78
- if (!range.value) {
79
- if (isValidValueText(modelValue.value)) {
80
- return valueToText(modelValue.value);
81
- }
82
- return "";
83
- }
84
-
85
- /*
86
- * return this.isValidRangeValue(this.modelValue)
87
- * ? `${ this.stringify(value2date(this.modelValue[0])) } ${ this.rangeSeparator } ${ this.stringify(value2date(this.modelValue[1])) }`
88
- * : "";
89
- */
90
- return ""; // TODO: range
91
- });
92
-
93
- const isDatesEqual = (a, b) => {
94
- return isDateObject(a) && isDateObject(b) && a.getTime() === b.getTime();
95
- };
96
-
97
- const isRangeEqual = (a, b) => {
98
- return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((item, index) => isDatesEqual(item, b[index]));
99
- };
100
-
101
- const emitDate = eventName => {
102
- const value = range.value ?
103
- "" : // TODO: range this.currentValue.map(date2value)
104
- formatDate(currentValue.value, formatSaveLocal.value);
105
- changeModel({
106
- model: value,
107
- });
108
- emit(eventName, value);
109
- };
110
-
111
- const updateDate = (confirmLocal = false) => {
112
- if ((confirm.value && !confirmLocal) || disabled.value) {
113
- return false;
114
- }
115
- const equal = range.value ? isRangeEqual(modelValue.value, currentValue.value) : isDatesEqual(modelValue.value, currentValue.value);
116
- if (equal) {
117
- return false;
118
- }
119
- emitDate("change");
120
- return true;
121
- };
122
-
123
- const clearDate = $event => {
124
- if ($event) {
125
- $event.stopPropagation();
126
- }
127
- const date = range.value ? [null, null] : null;
128
- currentValue.value = date;
129
- updateDate(true);
130
- emit("clear");
131
- };
132
-
133
- const selectDate = date => {
134
- currentValue.value = date;
135
- updateDate() && closePopover();
136
- setCloseFocus();
137
- };
138
-
139
- const selectTime = (time, close) => {
140
- currentValue.value = time;
141
- updateDate() && close && closePopover();
142
- if (close) {
143
- setCloseFocus();
144
- }
145
- };
146
-
147
- const selectStartDate = date => {
148
- currentValue.value[0] = date;
149
- if (currentValue.value[1]) {
150
- updateDate();
151
- }
152
- };
153
-
154
- const selectEndDate = date => {
155
- currentValue.value[1] = date;
156
- if (currentValue.value[0]) {
157
- updateDate();
158
- }
159
- };
160
-
161
- const selectStartTime = time => {
162
- selectStartDate(time);
163
- };
164
-
165
- const selectEndTime = time => {
166
- selectEndDate(time);
167
- };
168
-
169
- const parse = value => {
170
- return (isPlainObject(formatLocal.value) && typeof formatLocal.value.parse === "function")
171
- ? formatLocal.value.parse(value)
172
- : parseDate(value, formatLocal.value, formatSaveLocal.value);
173
- };
174
-
175
- const fromValueToDate = value => {
176
- try {
177
- if (moment(value, formatLocal.value).isValid()) {
178
- return moment(value, formatLocal.value).format() || null;
179
- }
180
- return null;
181
- } catch (e) {
182
- return null;
183
- }
184
- };
185
-
186
- const fromModalValueToDate = value => {
187
- try {
188
- if (moment(value, formatSaveLocal.value).isValid()) {
189
- return moment(value, formatSaveLocal.value).format() || null;
190
- }
191
- return null;
192
- } catch (e) {
193
- return null;
194
- }
195
- };
196
-
197
- const handleChange = () => {
198
- if (editable.value && userInput.value !== null) {
199
- let value = text.value;
200
- const checkDate = calendarPanelRef.value.isDisabledTime;
201
- if (!value) {
202
- clearDate();
203
- return;
204
- }
205
- if (range.value) {
206
- /*
207
- * const range = value.split(` ${ this.rangeSeparator } `); // TODO: range
208
- * if (range.length === 2) {
209
- * const start = this.parse(range[0]);
210
- * const end = this.parse(range[1]);
211
- * if (start && end && !checkDate(start, null, end) && !checkDate(end, start, null)) {
212
- * this.currentValue = [start, end];
213
- * this.updateDate(true);
214
- * this.closePopover();
215
- * return;
216
- * }
217
- * }
218
- */
219
- return;
220
- }
221
- if (type.value === "time") {
222
- value = `${ moment().format("DD.MM.YYYY") } ${ value }`;
223
- }
224
- const date = fromValueToDate(value);
225
- if (date && !checkDate(date, null, null)) {
226
- currentValue.value = date;
227
- updateDate(true);
228
- closePopover();
229
- return;
230
- }
231
-
232
- emit("inputError", value);
233
- }
234
- };
235
-
236
- const setFocusToPanel = () => {
237
- calendarPanelRef.value.setFocusToActivePanelFromParent();
238
- };
239
-
240
- const handleKeydown = $event => {
241
- const KEY_CODE = $event.keyCode;
242
- if (KEY_CODE === AKeysCode.tab || KEY_CODE === AKeysCode.enter) {
243
- // ie emit the watch before the change event
244
- handleChange();
245
- userInput.value = null;
246
- closePopover();
247
- } else if (KEY_CODE === AKeysCode.arrowUp || KEY_CODE === AKeysCode.arrowDown) {
248
- setFocusToPanel();
249
- $event.stopPropagation();
250
- $event.preventDefault();
251
- }
252
- };
253
-
254
- const confirmDate = () => {
255
- const valid = range.value ? isValidRangeDate(currentValue.value) : isValidDate(currentValue.value);
256
- if (valid) {
257
- updateDate(true);
258
- }
259
- emitDate("confirm");
260
- closePopover();
261
- };
262
-
263
- const handleInput = event => {
264
- userInput.value = event.target.value;
265
- };
266
-
267
- const onModelValueChange = value => {
268
- if (range.value) {
269
- currentValue.value = [null, null]; // TODO: range this.isValidRangeValue(value) ? value.map(value2date) : [null, null];
270
- } else {
271
- currentValue.value = isValidModelValue(value) ? fromModalValueToDate(value) : null;
272
- }
273
- };
274
-
275
- return {
276
- clearDate,
277
- confirmDate,
278
- currentValue,
279
- emitDate,
280
- handleChange,
281
- handleInput,
282
- handleKeydown,
283
- initCurrentValue,
284
- onModelValueChange,
285
- parse,
286
- selectDate,
287
- selectEndDate,
288
- selectEndTime,
289
- selectStartDate,
290
- selectStartTime,
291
- selectTime,
292
- stringify,
293
- text,
294
- updateDate,
295
- userInput,
296
- };
297
- }
1
+ import {
2
+ computed,
3
+ ref,
4
+ toRef,
5
+ } from "vue";
6
+
7
+ import AKeysCode from "../../../const/AKeysCode";
8
+ import moment from "moment";
9
+ import {
10
+ formatDate,
11
+ isDateObject,
12
+ isPlainObject,
13
+ isValidDate,
14
+ isValidRangeDate,
15
+ parseDate,
16
+ } from "../utils";
17
+
18
+
19
+ export default function EventsAPI(props, { emit }, {
20
+ calendarPanelRef = ref(undefined),
21
+ changeModel = () => {},
22
+ closePopover = () => {},
23
+ formatLocal = computed(() => ""),
24
+ formatSaveLocal = computed(() => ""),
25
+ setCloseFocus = () => {},
26
+ }) {
27
+ const range = toRef(props, "range");
28
+ const confirm = toRef(props, "confirm");
29
+ const disabled = toRef(props, "disabled");
30
+ const modelValue = toRef(props, "modelValue");
31
+ const editable = toRef(props, "editable");
32
+ const type = toRef(props, "type");
33
+
34
+ const currentValue = ref(null);
35
+ const userInput = ref(null);
36
+
37
+ const initCurrentValue = () => {
38
+ currentValue.value = range.value ? [null, null] : null;
39
+ };
40
+
41
+ const isValidValueText = value => {
42
+ return !!parseDate(value, formatLocal.value, formatSaveLocal.value);
43
+ };
44
+
45
+ const valueToText = value => {
46
+ try {
47
+ if (moment(value, formatSaveLocal.value).isValid()) {
48
+ return moment(value, formatSaveLocal.value).format(formatLocal.value) || "";
49
+ }
50
+ return "";
51
+ } catch(e) {
52
+ return "";
53
+ }
54
+ };
55
+
56
+ const isValidModelValue = value => {
57
+ try {
58
+ if (moment(value, formatSaveLocal.value).isValid()) {
59
+ return true;
60
+ }
61
+ return false;
62
+ } catch(e) {
63
+ return false;
64
+ }
65
+ };
66
+
67
+ const stringify = date => {
68
+ return (isPlainObject(formatLocal.value) && typeof this.format.stringify === "function")
69
+ ? formatLocal.value.stringify(date)
70
+ : formatDate(date, formatLocal.value);
71
+ };
72
+
73
+ const text = computed(() => {
74
+ if (userInput.value !== null) {
75
+ return userInput.value;
76
+ }
77
+
78
+ if (!range.value) {
79
+ if (isValidValueText(modelValue.value)) {
80
+ return valueToText(modelValue.value);
81
+ }
82
+ return "";
83
+ }
84
+
85
+ /*
86
+ * return this.isValidRangeValue(this.modelValue)
87
+ * ? `${ this.stringify(value2date(this.modelValue[0])) } ${ this.rangeSeparator } ${ this.stringify(value2date(this.modelValue[1])) }`
88
+ * : "";
89
+ */
90
+ return ""; // TODO: range
91
+ });
92
+
93
+ const isDatesEqual = (a, b) => {
94
+ return isDateObject(a) && isDateObject(b) && a.getTime() === b.getTime();
95
+ };
96
+
97
+ const isRangeEqual = (a, b) => {
98
+ return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((item, index) => isDatesEqual(item, b[index]));
99
+ };
100
+
101
+ const emitDate = eventName => {
102
+ const value = range.value ?
103
+ "" : // TODO: range this.currentValue.map(date2value)
104
+ formatDate(currentValue.value, formatSaveLocal.value);
105
+ changeModel({
106
+ model: value,
107
+ });
108
+ emit(eventName, value);
109
+ };
110
+
111
+ const updateDate = (confirmLocal = false) => {
112
+ if ((confirm.value && !confirmLocal) || disabled.value) {
113
+ return false;
114
+ }
115
+ const equal = range.value ? isRangeEqual(modelValue.value, currentValue.value) : isDatesEqual(modelValue.value, currentValue.value);
116
+ if (equal) {
117
+ return false;
118
+ }
119
+ emitDate("change");
120
+ return true;
121
+ };
122
+
123
+ const clearDate = $event => {
124
+ if ($event) {
125
+ $event.stopPropagation();
126
+ }
127
+ const date = range.value ? [null, null] : null;
128
+ currentValue.value = date;
129
+ updateDate(true);
130
+ emit("clear");
131
+ };
132
+
133
+ const selectDate = date => {
134
+ currentValue.value = date;
135
+ updateDate() && closePopover();
136
+ setCloseFocus();
137
+ };
138
+
139
+ const selectTime = (time, close) => {
140
+ currentValue.value = time;
141
+ updateDate() && close && closePopover();
142
+ if (close) {
143
+ setCloseFocus();
144
+ }
145
+ };
146
+
147
+ const selectStartDate = date => {
148
+ currentValue.value[0] = date;
149
+ if (currentValue.value[1]) {
150
+ updateDate();
151
+ }
152
+ };
153
+
154
+ const selectEndDate = date => {
155
+ currentValue.value[1] = date;
156
+ if (currentValue.value[0]) {
157
+ updateDate();
158
+ }
159
+ };
160
+
161
+ const selectStartTime = time => {
162
+ selectStartDate(time);
163
+ };
164
+
165
+ const selectEndTime = time => {
166
+ selectEndDate(time);
167
+ };
168
+
169
+ const parse = value => {
170
+ return (isPlainObject(formatLocal.value) && typeof formatLocal.value.parse === "function")
171
+ ? formatLocal.value.parse(value)
172
+ : parseDate(value, formatLocal.value, formatSaveLocal.value);
173
+ };
174
+
175
+ const fromValueToDate = value => {
176
+ try {
177
+ if (moment(value, formatLocal.value).isValid()) {
178
+ return moment(value, formatLocal.value).format() || null;
179
+ }
180
+ return null;
181
+ } catch(e) {
182
+ return null;
183
+ }
184
+ };
185
+
186
+ const fromModalValueToDate = value => {
187
+ try {
188
+ if (moment(value, formatSaveLocal.value).isValid()) {
189
+ return moment(value, formatSaveLocal.value).format() || null;
190
+ }
191
+ return null;
192
+ } catch(e) {
193
+ return null;
194
+ }
195
+ };
196
+
197
+ const handleChange = () => {
198
+ if (editable.value && userInput.value !== null) {
199
+ let value = text.value;
200
+ const checkDate = calendarPanelRef.value.isDisabledTime;
201
+ if (!value) {
202
+ clearDate();
203
+ return;
204
+ }
205
+ if (range.value) {
206
+ /*
207
+ * const range = value.split(` ${ this.rangeSeparator } `); // TODO: range
208
+ * if (range.length === 2) {
209
+ * const start = this.parse(range[0]);
210
+ * const end = this.parse(range[1]);
211
+ * if (start && end && !checkDate(start, null, end) && !checkDate(end, start, null)) {
212
+ * this.currentValue = [start, end];
213
+ * this.updateDate(true);
214
+ * this.closePopover();
215
+ * return;
216
+ * }
217
+ * }
218
+ */
219
+ return;
220
+ }
221
+ if (type.value === "time") {
222
+ value = `${ moment().format("DD.MM.YYYY") } ${ value }`;
223
+ }
224
+ const date = fromValueToDate(value);
225
+ if (date && !checkDate(date, null, null)) {
226
+ currentValue.value = date;
227
+ updateDate(true);
228
+ closePopover();
229
+ return;
230
+ }
231
+
232
+ emit("inputError", value);
233
+ }
234
+ };
235
+
236
+ const setFocusToPanel = () => {
237
+ calendarPanelRef.value.setFocusToActivePanelFromParent();
238
+ };
239
+
240
+ const handleKeydown = $event => {
241
+ const KEY_CODE = $event.keyCode;
242
+ if (KEY_CODE === AKeysCode.tab || KEY_CODE === AKeysCode.enter) {
243
+ // ie emit the watch before the change event
244
+ handleChange();
245
+ userInput.value = null;
246
+ closePopover();
247
+ } else if (KEY_CODE === AKeysCode.arrowUp || KEY_CODE === AKeysCode.arrowDown) {
248
+ setFocusToPanel();
249
+ $event.stopPropagation();
250
+ $event.preventDefault();
251
+ }
252
+ };
253
+
254
+ const confirmDate = () => {
255
+ const valid = range.value ? isValidRangeDate(currentValue.value) : isValidDate(currentValue.value);
256
+ if (valid) {
257
+ updateDate(true);
258
+ }
259
+ emitDate("confirm");
260
+ closePopover();
261
+ };
262
+
263
+ const handleInput = event => {
264
+ userInput.value = event.target.value;
265
+ };
266
+
267
+ const onModelValueChange = value => {
268
+ if (range.value) {
269
+ currentValue.value = [null, null]; // TODO: range this.isValidRangeValue(value) ? value.map(value2date) : [null, null];
270
+ } else {
271
+ currentValue.value = isValidModelValue(value) ? fromModalValueToDate(value) : null;
272
+ }
273
+ };
274
+
275
+ return {
276
+ clearDate,
277
+ confirmDate,
278
+ currentValue,
279
+ emitDate,
280
+ handleChange,
281
+ handleInput,
282
+ handleKeydown,
283
+ initCurrentValue,
284
+ onModelValueChange,
285
+ parse,
286
+ selectDate,
287
+ selectEndDate,
288
+ selectEndTime,
289
+ selectStartDate,
290
+ selectStartTime,
291
+ selectTime,
292
+ stringify,
293
+ text,
294
+ updateDate,
295
+ userInput,
296
+ };
297
+ }