@ncds/ui-admin 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/assets/scripts/datePicker.js +377 -90
- package/dist/cjs/src/components/button/ButtonGroup.js +2 -1
- package/dist/cjs/src/components/date-picker/DatePicker.js +162 -5
- package/dist/cjs/src/components/pagination/Pagination.js +5 -5
- package/dist/esm/assets/scripts/datePicker.js +377 -90
- package/dist/esm/src/components/date-picker/DatePicker.js +161 -6
- package/dist/esm/src/components/pagination/Pagination.js +5 -5
- package/dist/types/assets/scripts/datePicker.d.ts +35 -1
- package/dist/types/src/components/button/ButtonGroup.d.ts +3 -1
- package/dist/types/src/components/date-picker/DatePicker.d.ts +7 -0
- package/dist/ui-admin/assets/styles/style.css +13 -3
- package/package.json +1 -1
|
@@ -53,7 +53,8 @@ var DatePicker = exports.DatePicker = /** @class */function () {
|
|
|
53
53
|
var buttons = (_a = options.buttons, _a === void 0 ? [] : _a),
|
|
54
54
|
size = options.size,
|
|
55
55
|
autoComplete = (_b = options.autoComplete, _b === void 0 ? 'off' : _b),
|
|
56
|
-
datePickerOptions = options.datePickerOptions
|
|
56
|
+
datePickerOptions = options.datePickerOptions,
|
|
57
|
+
onValidationError = options.onValidationError;
|
|
57
58
|
this.validateWrapper(wrapper);
|
|
58
59
|
this.validationDependencies((buttons === null || buttons === void 0 ? void 0 : buttons.length) > 0);
|
|
59
60
|
this.instanceId = DatePicker.instanceCounter++;
|
|
@@ -64,6 +65,7 @@ var DatePicker = exports.DatePicker = /** @class */function () {
|
|
|
64
65
|
this.separator = '~';
|
|
65
66
|
this.autoComplete = autoComplete;
|
|
66
67
|
this.dateFormat = datePickerOptions[0].options.enableTime ? CONSTANTS.FORMATS.DATE_TIME : CONSTANTS.FORMATS.DATE;
|
|
68
|
+
this.onValidationError = onValidationError;
|
|
67
69
|
this.init();
|
|
68
70
|
}
|
|
69
71
|
DatePicker.prototype.validateWrapper = function (wrapper) {
|
|
@@ -218,82 +220,409 @@ var DatePicker = exports.DatePicker = /** @class */function () {
|
|
|
218
220
|
return '';
|
|
219
221
|
});
|
|
220
222
|
};
|
|
221
|
-
this.flatpickrInstances = createFlatpickrInstances(datePickerOptions);
|
|
223
|
+
this.flatpickrInstances = createFlatpickrInstances(this.datePickerOptions);
|
|
222
224
|
var dates = calcInitDates(datePickerOptions);
|
|
223
225
|
this.setMultipleDates(dates);
|
|
224
226
|
};
|
|
225
227
|
DatePicker.prototype.initializeFlatpickr = function (input, options, wrapper) {
|
|
226
|
-
var
|
|
228
|
+
var _this = this;
|
|
229
|
+
var _a;
|
|
227
230
|
// flatpickr locale 설정 확인
|
|
228
|
-
var locale = options.locale
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
231
|
+
var locale = typeof options.locale === 'string' ? options.locale : 'ko';
|
|
232
|
+
this.setupFlatpickrLocale(locale, options);
|
|
233
|
+
var onInputHandler = this.createInputHandler();
|
|
234
|
+
var onHourInputHandler = this.createHourInputHandler();
|
|
235
|
+
var onMinuteInputHandler = this.createMinuteInputHandler();
|
|
236
|
+
var onMouseDown = this.createMouseDownHandler(wrapper);
|
|
237
|
+
// onBlur 핸들러 추가하여 입력 전 날짜 저장
|
|
238
|
+
var onBlurHandler = this.createBlurHandler();
|
|
239
|
+
document.addEventListener('mousedown', onMouseDown, true);
|
|
240
|
+
return (0, _flatpickr.default)(input, __assign(__assign({}, options), {
|
|
241
|
+
allowInput: (_a = options.allowInput) !== null && _a !== void 0 ? _a : true,
|
|
242
|
+
appendTo: wrapper,
|
|
243
|
+
time_24hr: true,
|
|
244
|
+
defaultHour: options.defaultHour || 0,
|
|
245
|
+
defaultMinute: options.defaultMinute || 0,
|
|
246
|
+
locale: locale,
|
|
247
|
+
formatDate: function (date, format, locale) {
|
|
248
|
+
try {
|
|
249
|
+
// 유효한 날짜인지 확인
|
|
250
|
+
if (!date || !(date instanceof Date) || isNaN(date.getTime())) {
|
|
251
|
+
return '';
|
|
252
|
+
}
|
|
253
|
+
// moment로 포맷팅
|
|
254
|
+
var momentDate = (0, _moment.default)(date);
|
|
255
|
+
if (!momentDate.isValid()) {
|
|
256
|
+
return '';
|
|
257
|
+
}
|
|
258
|
+
// format을 moment 형식으로 변환
|
|
259
|
+
var momentFormat = _this.convertFlatpickrFormatToMoment(format);
|
|
260
|
+
return momentDate.format(momentFormat);
|
|
261
|
+
} catch (error) {
|
|
262
|
+
// 오류 발생 시 빈 문자열 반환 (232-23 같은 잘못된 날짜 처리)
|
|
263
|
+
return '';
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
onChange: this.createOnChangeHandler(options),
|
|
267
|
+
onReady: this.createOnReadyHandler(onInputHandler, onHourInputHandler, onMinuteInputHandler, onBlurHandler),
|
|
268
|
+
onDestroy: this.createOnDestroyHandler(onInputHandler, onHourInputHandler, onMinuteInputHandler, onMouseDown, onBlurHandler)
|
|
269
|
+
}));
|
|
270
|
+
};
|
|
271
|
+
DatePicker.prototype.createBlurHandler = function () {
|
|
272
|
+
var _this = this;
|
|
273
|
+
return function (e) {
|
|
274
|
+
var target = e.target;
|
|
275
|
+
var inputIndex = _this.findFlatpickrInstanceIndexByInput(target);
|
|
276
|
+
if (inputIndex < 0) return;
|
|
277
|
+
// blur 시점에 현재 selectedDates를 저장 (입력 전 상태)
|
|
278
|
+
var instance = _this.flatpickrInstances[inputIndex];
|
|
279
|
+
if (instance && instance.selectedDates.length > 0) {
|
|
280
|
+
// 이전 날짜를 별도로 저장 (onChange에서 사용)
|
|
281
|
+
instance._previousDateBeforeInput = instance.selectedDates[0];
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
};
|
|
285
|
+
DatePicker.prototype.setupFlatpickrLocale = function (locale, options) {
|
|
286
|
+
var _a;
|
|
287
|
+
if ((_a = _flatpickr.default === null || _flatpickr.default === void 0 ? void 0 : _flatpickr.default.l10ns) === null || _a === void 0 ? void 0 : _a[locale]) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
console.warn("flatpickr locale '".concat(locale, "' is not loaded. Available locales:"), Object.keys((_flatpickr.default === null || _flatpickr.default === void 0 ? void 0 : _flatpickr.default.l10ns) || {}));
|
|
291
|
+
if (locale === 'ko') {
|
|
292
|
+
_flatpickr.default.l10ns.ko = _ko.Korean;
|
|
293
|
+
} else {
|
|
294
|
+
options.locale = undefined;
|
|
233
295
|
}
|
|
234
|
-
|
|
296
|
+
};
|
|
297
|
+
DatePicker.prototype.createInputHandler = function () {
|
|
298
|
+
var _this = this;
|
|
299
|
+
return function (e) {
|
|
235
300
|
var target = e.target;
|
|
236
301
|
var input = target.value;
|
|
302
|
+
var instance = _this.findFlatpickrInstanceByInput(target);
|
|
303
|
+
if (!instance) return;
|
|
304
|
+
// 빈 입력 처리
|
|
305
|
+
if (!input || input.trim() === '') {
|
|
306
|
+
_this.clearInputValue(target, instance);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// 숫자나 하이픈이 없는 경우 처리
|
|
310
|
+
if (!/[0-9]/.test(input)) {
|
|
311
|
+
_this.restorePreviousDate(target, instance);
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
237
314
|
var formattedInput = (0, _datePicker.formatDateInput)(input);
|
|
238
|
-
|
|
239
|
-
|
|
315
|
+
// 포맷팅만 수행
|
|
316
|
+
if (formattedInput !== input) {
|
|
317
|
+
target.value = formattedInput;
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
// 완전한 날짜 형식이지만 유효하지 않은 경우 처리
|
|
321
|
+
if (formattedInput && formattedInput.length >= 10) {
|
|
322
|
+
var parsedDate = (0, _moment.default)(formattedInput);
|
|
323
|
+
if (!parsedDate.isValid()) {
|
|
324
|
+
_this.restorePreviousDate(target, instance);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
240
327
|
};
|
|
241
|
-
|
|
328
|
+
};
|
|
329
|
+
DatePicker.prototype.findFlatpickrInstanceByInput = function (input) {
|
|
330
|
+
var index = this.findFlatpickrInstanceIndexByInput(input);
|
|
331
|
+
return index >= 0 ? this.flatpickrInstances[index] : null;
|
|
332
|
+
};
|
|
333
|
+
DatePicker.prototype.clearInputValue = function (target, instance) {
|
|
334
|
+
target.value = '';
|
|
335
|
+
instance.setDate('', false);
|
|
336
|
+
};
|
|
337
|
+
DatePicker.prototype.restorePreviousDate = function (target, instance) {
|
|
338
|
+
var hasPreviousDate = instance.selectedDates.length > 0;
|
|
339
|
+
if (!hasPreviousDate) {
|
|
340
|
+
this.clearInputValue(target, instance);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
var previousDate = instance.selectedDates[0];
|
|
344
|
+
var isValidDate = previousDate instanceof Date && !isNaN(previousDate.getTime());
|
|
345
|
+
if (isValidDate) {
|
|
346
|
+
target.value = (0, _moment.default)(previousDate).format(this.dateFormat);
|
|
347
|
+
instance.setDate(previousDate, false);
|
|
348
|
+
} else {
|
|
349
|
+
this.clearInputValue(target, instance);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
DatePicker.prototype.createHourInputHandler = function () {
|
|
353
|
+
return function (e) {
|
|
242
354
|
var target = e.target;
|
|
243
355
|
var input = target.value;
|
|
244
356
|
var formattedInput = (0, _datePicker.formatHourInput)(input);
|
|
245
357
|
if (formattedInput === input) return;
|
|
246
358
|
target.value = formattedInput;
|
|
247
359
|
};
|
|
248
|
-
|
|
360
|
+
};
|
|
361
|
+
DatePicker.prototype.createMinuteInputHandler = function () {
|
|
362
|
+
return function (e) {
|
|
249
363
|
var target = e.target;
|
|
250
364
|
var input = target.value;
|
|
251
365
|
var formattedInput = (0, _datePicker.formatMinuteInput)(input);
|
|
252
366
|
if (formattedInput === input) return;
|
|
253
367
|
target.value = formattedInput;
|
|
254
368
|
};
|
|
255
|
-
|
|
256
|
-
|
|
369
|
+
};
|
|
370
|
+
DatePicker.prototype.createMouseDownHandler = function (wrapper) {
|
|
371
|
+
return function (e) {
|
|
257
372
|
var flatpickrCalendar = wrapper.querySelector('.flatpickr-calendar.open');
|
|
258
|
-
if (
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
373
|
+
if (!flatpickrCalendar) return;
|
|
374
|
+
if (flatpickrCalendar.contains(e.target)) return;
|
|
375
|
+
var timeInputs = flatpickrCalendar.querySelectorAll('.flatpickr-time input');
|
|
376
|
+
timeInputs.forEach(function (input) {
|
|
377
|
+
if (document.activeElement === input) {
|
|
378
|
+
input.blur();
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
DatePicker.prototype.createOnChangeHandler = function (options) {
|
|
384
|
+
var _this = this;
|
|
385
|
+
return function (selectedDates, dateStr, instance) {
|
|
386
|
+
try {
|
|
387
|
+
var inputIndex = _this.findFlatpickrInstanceIndexByInput(instance.input);
|
|
388
|
+
if (inputIndex < 0) return;
|
|
389
|
+
// blur 시 저장한 이전 날짜 사용
|
|
390
|
+
var previousDate = instance._previousDateBeforeInput;
|
|
391
|
+
// selectedDates가 비어있거나 첫 번째 날짜가 유효하지 않은 경우 처리
|
|
392
|
+
if (!selectedDates || selectedDates.length === 0 || !selectedDates[0] || !(selectedDates[0] instanceof Date) || !_this.isValidDate(selectedDates[0])) {
|
|
393
|
+
// 유효하지 않은 날짜는 이전 값으로 복원하거나 빈 값으로 처리
|
|
394
|
+
if (previousDate && _this.isValidDate(previousDate)) {
|
|
395
|
+
// 이전 값이 있으면 이전 값으로 복원
|
|
396
|
+
instance.selectedDates = [previousDate];
|
|
397
|
+
instance.setDate(previousDate, false);
|
|
398
|
+
} else {
|
|
399
|
+
// 이전 값이 없으면 빈 값으로 처리
|
|
400
|
+
instance.selectedDates = [];
|
|
401
|
+
instance.setDate('', false);
|
|
263
402
|
}
|
|
264
|
-
|
|
403
|
+
// 원본 onChange는 호출하지 않음
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
// 유효한 날짜인 경우에만 원본 onChange 호출
|
|
407
|
+
_this.invokeOriginalOnChange(options.onChange, selectedDates, dateStr, instance);
|
|
408
|
+
var selectedDate = selectedDates[0];
|
|
409
|
+
// minDate/maxDate 검증
|
|
410
|
+
_this.validateAndRestoreIfNeeded(selectedDate, instance, inputIndex, previousDate);
|
|
411
|
+
// 검증 후 현재 날짜를 이전 날짜로 업데이트
|
|
412
|
+
if (_this.isValidDate(selectedDate)) {
|
|
413
|
+
instance._previousDateBeforeInput = selectedDate;
|
|
414
|
+
_this.flatpickrInstances[inputIndex].selectedDates = [selectedDate];
|
|
415
|
+
}
|
|
416
|
+
} catch (error) {
|
|
417
|
+
// 오류 발생 시 이전 값으로 복원
|
|
418
|
+
var previousDate = instance._previousDateBeforeInput;
|
|
419
|
+
if (previousDate && _this.isValidDate(previousDate)) {
|
|
420
|
+
instance.selectedDates = [previousDate];
|
|
421
|
+
} else {
|
|
422
|
+
instance.selectedDates = [];
|
|
423
|
+
}
|
|
424
|
+
_this.restoreDateToInstance(instance, previousDate);
|
|
265
425
|
}
|
|
266
426
|
};
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
427
|
+
};
|
|
428
|
+
DatePicker.prototype.invokeOriginalOnChange = function (onChange, selectedDates, dateStr, instance) {
|
|
429
|
+
if (!onChange) return;
|
|
430
|
+
if (Array.isArray(onChange)) {
|
|
431
|
+
onChange.forEach(function (hook) {
|
|
432
|
+
void hook(selectedDates, dateStr, instance);
|
|
433
|
+
});
|
|
434
|
+
} else {
|
|
435
|
+
onChange(selectedDates, dateStr, instance);
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
DatePicker.prototype.isValidDate = function (date) {
|
|
439
|
+
return date instanceof Date && !isNaN(date.getTime());
|
|
440
|
+
};
|
|
441
|
+
DatePicker.prototype.validateAndRestoreIfNeeded = function (selectedDate, instance, inputIndex, previousDate) {
|
|
442
|
+
try {
|
|
443
|
+
var isValid = this.validateDate(selectedDate, inputIndex, previousDate);
|
|
444
|
+
if (!isValid) {
|
|
445
|
+
this.restoreDateToInstance(instance, previousDate);
|
|
446
|
+
} else {
|
|
447
|
+
// 유효한 경우에만 업데이트
|
|
448
|
+
instance._previousDateBeforeInput = selectedDate;
|
|
449
|
+
this.flatpickrInstances[inputIndex].selectedDates = [selectedDate];
|
|
450
|
+
}
|
|
451
|
+
} catch (error) {
|
|
452
|
+
// 오류 발생 시 이전 값으로 복원
|
|
453
|
+
this.restoreDateToInstance(instance, previousDate);
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
DatePicker.prototype.findFlatpickrInstanceIndexByInput = function (input) {
|
|
457
|
+
return this.flatpickrInstances.findIndex(function (inst) {
|
|
458
|
+
return inst.input === input;
|
|
459
|
+
});
|
|
460
|
+
};
|
|
461
|
+
DatePicker.prototype.restoreDateToInstance = function (instance, previousDate) {
|
|
462
|
+
try {
|
|
463
|
+
// setDate 호출 전에 날짜 유효성 확인
|
|
464
|
+
if (previousDate && this.isValidDate(previousDate)) {
|
|
465
|
+
// selectedDates 배열을 정리하여 formatting.js에서 오류가 발생하지 않도록 함
|
|
466
|
+
instance.selectedDates = [previousDate];
|
|
467
|
+
instance.setDate(previousDate, false);
|
|
468
|
+
} else {
|
|
469
|
+
// 빈 값으로 설정할 때도 selectedDates를 정리
|
|
470
|
+
instance.selectedDates = [];
|
|
471
|
+
instance.setDate('', false);
|
|
472
|
+
}
|
|
473
|
+
} catch (error) {
|
|
474
|
+
// setDate에서 오류 발생 시 selectedDates를 빈 배열로 설정
|
|
475
|
+
try {
|
|
476
|
+
instance.selectedDates = [];
|
|
477
|
+
instance.setDate('', false);
|
|
478
|
+
} catch (_a) {
|
|
479
|
+
// 최종 실패 시 무시
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
DatePicker.prototype.createOnReadyHandler = function (onInputHandler, onHourInputHandler, onMinuteInputHandler, onBlurHandler) {
|
|
484
|
+
return function (selectedDates, dateStr, instance) {
|
|
485
|
+
var _a;
|
|
486
|
+
var input = instance.input;
|
|
487
|
+
if (!input) return;
|
|
488
|
+
input.addEventListener('input', onInputHandler);
|
|
489
|
+
input.addEventListener('blur', onBlurHandler);
|
|
490
|
+
var timeInputWrapper = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-time');
|
|
491
|
+
if (!timeInputWrapper) return;
|
|
492
|
+
var hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
493
|
+
var minuteInput = timeInputWrapper.querySelector('.flatpickr-minute');
|
|
494
|
+
if (!hourInput || !minuteInput) return;
|
|
495
|
+
hourInput.addEventListener('input', onHourInputHandler);
|
|
496
|
+
minuteInput.addEventListener('input', onMinuteInputHandler);
|
|
497
|
+
};
|
|
498
|
+
};
|
|
499
|
+
DatePicker.prototype.createOnDestroyHandler = function (onInputHandler, onHourInputHandler, onMinuteInputHandler, onMouseDown, onBlurHandler) {
|
|
500
|
+
return function (selectedDates, dateStr, instance) {
|
|
501
|
+
var _a;
|
|
502
|
+
var input = instance.input;
|
|
503
|
+
if (!input) return;
|
|
504
|
+
input.removeEventListener('input', onInputHandler);
|
|
505
|
+
input.removeEventListener('blur', onBlurHandler);
|
|
506
|
+
// hourInput과 minuteInput에서 이벤트 리스너 제거 (input이 아님)
|
|
507
|
+
var timeInputWrapper = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-time');
|
|
508
|
+
if (timeInputWrapper) {
|
|
282
509
|
var hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
283
510
|
var minuteInput = timeInputWrapper.querySelector('.flatpickr-minute');
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
if (!input) return;
|
|
291
|
-
input.removeEventListener('input', onInputHandler);
|
|
292
|
-
input.removeEventListener('input', onHourInputHandler);
|
|
293
|
-
input.removeEventListener('input', onMinuteInputHandler);
|
|
294
|
-
document.removeEventListener('mousedown', handleMouseDown, true);
|
|
511
|
+
if (hourInput) {
|
|
512
|
+
hourInput.removeEventListener('input', onHourInputHandler);
|
|
513
|
+
}
|
|
514
|
+
if (minuteInput) {
|
|
515
|
+
minuteInput.removeEventListener('input', onMinuteInputHandler);
|
|
516
|
+
}
|
|
295
517
|
}
|
|
296
|
-
|
|
518
|
+
document.removeEventListener('mousedown', onMouseDown, true);
|
|
519
|
+
};
|
|
520
|
+
};
|
|
521
|
+
DatePicker.prototype.convertDateOption = function (dateOption) {
|
|
522
|
+
if (!dateOption) return undefined;
|
|
523
|
+
if (typeof dateOption === 'string' || dateOption instanceof Date) {
|
|
524
|
+
return dateOption;
|
|
525
|
+
}
|
|
526
|
+
if (typeof dateOption === 'number') {
|
|
527
|
+
return new Date(dateOption);
|
|
528
|
+
}
|
|
529
|
+
if (Array.isArray(dateOption) && dateOption.length > 0) {
|
|
530
|
+
return dateOption[0] instanceof Date ? dateOption[0] : new Date(dateOption[0]);
|
|
531
|
+
}
|
|
532
|
+
return undefined;
|
|
533
|
+
};
|
|
534
|
+
DatePicker.prototype.validateDate = function (date, index, previousDate) {
|
|
535
|
+
var _a;
|
|
536
|
+
var option = this.datePickerOptions[index];
|
|
537
|
+
if (!option) return true;
|
|
538
|
+
var minDate = (_a = option.options, _a.minDate),
|
|
539
|
+
maxDate = _a.maxDate;
|
|
540
|
+
if (!minDate && !maxDate) return true;
|
|
541
|
+
var inputDate = (0, _moment.default)(date);
|
|
542
|
+
if (!inputDate.isValid()) return true;
|
|
543
|
+
var violations = this.checkDateViolations(inputDate, minDate, maxDate);
|
|
544
|
+
if (violations.length === 0) return true;
|
|
545
|
+
if (this.onValidationError) {
|
|
546
|
+
var error = {
|
|
547
|
+
index: index,
|
|
548
|
+
date: date,
|
|
549
|
+
minDate: this.convertDateOption(minDate),
|
|
550
|
+
maxDate: this.convertDateOption(maxDate),
|
|
551
|
+
violations: violations,
|
|
552
|
+
previousDate: previousDate
|
|
553
|
+
};
|
|
554
|
+
this.onValidationError(error);
|
|
555
|
+
}
|
|
556
|
+
return false;
|
|
557
|
+
};
|
|
558
|
+
DatePicker.prototype.checkDateViolations = function (inputDate, minDate, maxDate) {
|
|
559
|
+
var violations = [];
|
|
560
|
+
if (minDate) {
|
|
561
|
+
var min = (0, _moment.default)(minDate);
|
|
562
|
+
if (min.isValid() && inputDate.isBefore(min, 'day')) {
|
|
563
|
+
violations.push('minDate');
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
if (maxDate) {
|
|
567
|
+
var max = (0, _moment.default)(maxDate);
|
|
568
|
+
if (max.isValid() && inputDate.isAfter(max, 'day')) {
|
|
569
|
+
violations.push('maxDate');
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return violations;
|
|
573
|
+
};
|
|
574
|
+
DatePicker.prototype.setDate = function (dates) {
|
|
575
|
+
var _this = this;
|
|
576
|
+
var startDate = dates[0],
|
|
577
|
+
endDate = dates[1];
|
|
578
|
+
var datesToSet = this.datePickerOptions.map(function (option, index) {
|
|
579
|
+
var date = index === 0 ? startDate : endDate;
|
|
580
|
+
return _this.formatDateForOption(date, option, index);
|
|
581
|
+
});
|
|
582
|
+
var period = this.calculatePeriod(datesToSet);
|
|
583
|
+
this.updateButtonsByPeriod(period);
|
|
584
|
+
this.setMultipleDates(datesToSet);
|
|
585
|
+
};
|
|
586
|
+
DatePicker.prototype.formatDateForOption = function (date, option, index) {
|
|
587
|
+
var _a, _b;
|
|
588
|
+
if (!date || date === '0000-00-00') return '';
|
|
589
|
+
var hasTime = (_a = option.options) === null || _a === void 0 ? void 0 : _a.enableTime;
|
|
590
|
+
var flatpickrFormat = ((_b = option.options) === null || _b === void 0 ? void 0 : _b.dateFormat) || (hasTime ? 'Y-m-d H:i' : 'Y-m-d');
|
|
591
|
+
var momentFormat = this.convertFlatpickrFormatToMoment(flatpickrFormat);
|
|
592
|
+
var momentDate = this.parseDateWithMultipleFormats(date, hasTime, momentFormat);
|
|
593
|
+
if (!momentDate || !momentDate.isValid()) return '';
|
|
594
|
+
var isValid = this.validateDate(momentDate.toDate(), index);
|
|
595
|
+
if (!isValid) return '';
|
|
596
|
+
return this.formatMomentDate(momentDate, date, hasTime, index, momentFormat);
|
|
597
|
+
};
|
|
598
|
+
DatePicker.prototype.parseDateWithMultipleFormats = function (date, hasTime, momentFormat) {
|
|
599
|
+
// hasTime이 true인 경우 (시간 포함 여부와 무관하게 moment로 파싱)
|
|
600
|
+
if (hasTime) {
|
|
601
|
+
var momentDate_1 = (0, _moment.default)(date);
|
|
602
|
+
return momentDate_1.isValid() ? momentDate_1 : null;
|
|
603
|
+
}
|
|
604
|
+
// hasTime이 false인 경우 - 여러 형식으로 시도
|
|
605
|
+
var momentDate = (0, _moment.default)(date);
|
|
606
|
+
if (momentDate.isValid()) {
|
|
607
|
+
return momentDate;
|
|
608
|
+
}
|
|
609
|
+
momentDate = (0, _moment.default)(date, momentFormat, true);
|
|
610
|
+
if (momentDate.isValid()) {
|
|
611
|
+
return momentDate;
|
|
612
|
+
}
|
|
613
|
+
momentDate = (0, _moment.default)(date, [momentFormat, 'YYYY-MM-DD', 'YYYY/MM/DD', 'MM/DD/YYYY'], true);
|
|
614
|
+
return momentDate.isValid() ? momentDate : null;
|
|
615
|
+
};
|
|
616
|
+
DatePicker.prototype.formatMomentDate = function (momentDate, originalDate, hasTime, index, momentFormat) {
|
|
617
|
+
// hasTime이 true이고 원본 날짜에 시간이 없는 경우
|
|
618
|
+
if (hasTime && !originalDate.includes(':')) {
|
|
619
|
+
return index === 0 ? momentDate.startOf('day').format(momentFormat) : momentDate.endOf('day').format(momentFormat);
|
|
620
|
+
}
|
|
621
|
+
return momentDate.format(momentFormat);
|
|
622
|
+
};
|
|
623
|
+
DatePicker.prototype.calculatePeriod = function (datesToSet) {
|
|
624
|
+
if (!datesToSet[0] || !datesToSet[1]) return null;
|
|
625
|
+
return (0, _moment.default)(datesToSet[1]).diff((0, _moment.default)(datesToSet[0]), 'days');
|
|
297
626
|
};
|
|
298
627
|
DatePicker.prototype.updateDateWithButton = function (e) {
|
|
299
628
|
var _this = this;
|
|
@@ -345,48 +674,6 @@ var DatePicker = exports.DatePicker = /** @class */function () {
|
|
|
345
674
|
return hasTime ? (0, _moment.default)().endOf('day').format(_this.dateFormat) : (0, _moment.default)().format(_this.dateFormat);
|
|
346
675
|
});
|
|
347
676
|
};
|
|
348
|
-
DatePicker.prototype.setDate = function (dates) {
|
|
349
|
-
var _this = this;
|
|
350
|
-
var startDate = dates[0],
|
|
351
|
-
endDate = dates[1];
|
|
352
|
-
var datesToSet = this.datePickerOptions.map(function (option, index) {
|
|
353
|
-
var _a, _b;
|
|
354
|
-
var date = index === 0 ? startDate : endDate;
|
|
355
|
-
if (!date || date === '0000-00-00') return '';
|
|
356
|
-
var hasTime = (_a = option.options) === null || _a === void 0 ? void 0 : _a.enableTime;
|
|
357
|
-
var flatpickrFormat = ((_b = option.options) === null || _b === void 0 ? void 0 : _b.dateFormat) || (hasTime ? 'Y-m-d H:i' : 'Y-m-d');
|
|
358
|
-
// dateFormat이 설정되어 있지 않을 때만 hasTime에 따라 기본값 설정
|
|
359
|
-
// dateFormat이 설정되어 있으면 그 형식을 그대로 사용 (enableTime과 무관하게)
|
|
360
|
-
var momentFormat = _this.convertFlatpickrFormatToMoment(flatpickrFormat);
|
|
361
|
-
var momentDate;
|
|
362
|
-
if (hasTime && !date.includes(':')) {
|
|
363
|
-
// 시간이 없는 날짜 형식으로 파싱
|
|
364
|
-
momentDate = (0, _moment.default)(date);
|
|
365
|
-
if (!momentDate.isValid()) return '';
|
|
366
|
-
return index === 0 ? momentDate.startOf('day').format(momentFormat) : momentDate.endOf('day').format(momentFormat);
|
|
367
|
-
}
|
|
368
|
-
if (hasTime && date.includes(':')) {
|
|
369
|
-
momentDate = (0, _moment.default)(date);
|
|
370
|
-
if (!momentDate.isValid()) return '';
|
|
371
|
-
return momentDate.format(momentFormat);
|
|
372
|
-
}
|
|
373
|
-
// 시간이 없는 경우 (hasTime이 false이거나 date에 시간이 없는 경우)
|
|
374
|
-
momentDate = (0, _moment.default)(date);
|
|
375
|
-
if (!momentDate.isValid()) {
|
|
376
|
-
momentDate = (0, _moment.default)(date, momentFormat, true);
|
|
377
|
-
}
|
|
378
|
-
// 둘 다 실패하면 다른 일반적인 형식들로 시도
|
|
379
|
-
if (!momentDate.isValid()) {
|
|
380
|
-
momentDate = (0, _moment.default)(date, [momentFormat, 'YYYY-MM-DD', 'YYYY/MM/DD', 'MM/DD/YYYY'], true);
|
|
381
|
-
}
|
|
382
|
-
if (!momentDate.isValid()) return '';
|
|
383
|
-
// dateFormat 형식으로 포맷팅하여 반환 (flatpickr가 표시하는 형식과 일치)
|
|
384
|
-
return momentDate.format(momentFormat);
|
|
385
|
-
});
|
|
386
|
-
var period = datesToSet[0] && datesToSet[1] ? (0, _moment.default)(datesToSet[1]).diff((0, _moment.default)(datesToSet[0]), 'days') : null;
|
|
387
|
-
this.updateButtonsByPeriod(period);
|
|
388
|
-
this.setMultipleDates(datesToSet);
|
|
389
|
-
};
|
|
390
677
|
// flatpickr 형식을 moment 형식으로 변환하는 헬퍼 메서드
|
|
391
678
|
DatePicker.prototype.convertFlatpickrFormatToMoment = function (flatpickrFormat) {
|
|
392
679
|
var map = {
|
|
@@ -10,7 +10,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _color = require("../../../constant/color");
|
|
12
12
|
var _dot = require("../dot");
|
|
13
|
-
function
|
|
13
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
14
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
16
|
var __assign = void 0 && (void 0).__assign || function () {
|
|
16
17
|
__assign = Object.assign || function (t) {
|