"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _VDatePickerTitle = _interopRequireDefault(require("./VDatePickerTitle")); var _VDatePickerHeader = _interopRequireDefault(require("./VDatePickerHeader")); var _VDatePickerDateTable = _interopRequireDefault(require("./VDatePickerDateTable")); var _VDatePickerMonthTable = _interopRequireDefault(require("./VDatePickerMonthTable")); var _VDatePickerYears = _interopRequireDefault(require("./VDatePickerYears")); var _localable = _interopRequireDefault(require("../../mixins/localable")); var _picker = _interopRequireDefault(require("../../mixins/picker")); var _util = require("./util"); var _isDateAllowed2 = _interopRequireDefault(require("./util/isDateAllowed")); var _console = require("../../util/console"); var _timestamp = require("../VCalendar/util/timestamp"); var _mixins = _interopRequireDefault(require("../../util/mixins")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year', // 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date' function sanitizeDateString(dateString, type) { var _dateString$split = dateString.split('-'), _dateString$split2 = _slicedToArray(_dateString$split, 3), year = _dateString$split2[0], _dateString$split2$ = _dateString$split2[1], month = _dateString$split2$ === void 0 ? 1 : _dateString$split2$, _dateString$split2$2 = _dateString$split2[2], date = _dateString$split2$2 === void 0 ? 1 : _dateString$split2$2; return "".concat(year, "-").concat((0, _util.pad)(month), "-").concat((0, _util.pad)(date)).substr(0, { date: 10, month: 7, year: 4 }[type]); } var _default2 = (0, _mixins.default)(_localable.default, _picker.default /* @vue/component */ ).extend({ name: 'v-date-picker', props: { allowedDates: Function, // Function formatting the day in date picker table dayFormat: Function, disabled: Boolean, events: { type: [Array, Function, Object], default: function _default() { return null; } }, eventColor: { type: [Array, Function, Object, String], default: function _default() { return 'warning'; } }, firstDayOfWeek: { type: [String, Number], default: 0 }, // Function formatting the tableDate in the day/month table header headerDateFormat: Function, max: String, min: String, // Function formatting month in the months table monthFormat: Function, multiple: Boolean, nextIcon: { type: String, default: '$vuetify.icons.next' }, pickerDate: String, prevIcon: { type: String, default: '$vuetify.icons.prev' }, reactive: Boolean, readonly: Boolean, scrollable: Boolean, showCurrent: { type: [Boolean, String], default: true }, selectedItemsText: { type: String, default: '$vuetify.datePicker.itemsSelected' }, showWeek: Boolean, // Function formatting currently selected date in the picker title titleDateFormat: Function, type: { type: String, default: 'date', validator: function validator(type) { return ['date', 'month'].includes(type); } }, value: [Array, String], weekdayFormat: Function, // Function formatting the year in table header and pickup title yearFormat: Function, yearIcon: String }, data: function data() { var _this = this; var now = new Date(); return { activePicker: this.type.toUpperCase(), inputDay: null, inputMonth: null, inputYear: null, isReversing: false, now: now, // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required) tableDate: function () { if (_this.pickerDate) { return _this.pickerDate; } var date = (_this.multiple ? _this.value[_this.value.length - 1] : _this.value) || "".concat(now.getFullYear(), "-").concat(now.getMonth() + 1); return sanitizeDateString(date, _this.type === 'date' ? 'month' : 'year'); }() }; }, computed: { lastValue: function lastValue() { return this.multiple ? this.value[this.value.length - 1] : this.value; }, selectedMonths: function selectedMonths() { if (!this.value || !this.value.length || this.type === 'month') { return this.value; } else if (this.multiple) { return this.value.map(function (val) { return val.substr(0, 7); }); } else { return this.value.substr(0, 7); } }, current: function current() { if (this.showCurrent === true) { return sanitizeDateString("".concat(this.now.getFullYear(), "-").concat(this.now.getMonth() + 1, "-").concat(this.now.getDate()), this.type); } return this.showCurrent || null; }, inputDate: function inputDate() { return this.type === 'date' ? "".concat(this.inputYear, "-").concat((0, _util.pad)(this.inputMonth + 1), "-").concat((0, _util.pad)(this.inputDay)) : "".concat(this.inputYear, "-").concat((0, _util.pad)(this.inputMonth + 1)); }, tableMonth: function tableMonth() { return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1; }, tableYear: function tableYear() { return Number((this.pickerDate || this.tableDate).split('-')[0]); }, minMonth: function minMonth() { return this.min ? sanitizeDateString(this.min, 'month') : null; }, maxMonth: function maxMonth() { return this.max ? sanitizeDateString(this.max, 'month') : null; }, minYear: function minYear() { return this.min ? sanitizeDateString(this.min, 'year') : null; }, maxYear: function maxYear() { return this.max ? sanitizeDateString(this.max, 'year') : null; }, formatters: function formatters() { return { year: this.yearFormat || (0, _util.createNativeLocaleFormatter)(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }), titleDate: this.titleDateFormat || (this.multiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter) }; }, defaultTitleMultipleDateFormatter: function defaultTitleMultipleDateFormatter() { var _this2 = this; return function (dates) { if (!dates.length) { return '-'; } if (dates.length === 1) { return _this2.defaultTitleDateFormatter(dates[0]); } return _this2.$vuetify.lang.t(_this2.selectedItemsText, [dates.length]); }; }, defaultTitleDateFormatter: function defaultTitleDateFormatter() { var titleFormats = { year: { year: 'numeric', timeZone: 'UTC' }, month: { month: 'long', timeZone: 'UTC' }, date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' } }; var titleDateFormatter = (0, _util.createNativeLocaleFormatter)(this.currentLocale, titleFormats[this.type], { start: 0, length: { date: 10, month: 7, year: 4 }[this.type] }); var landscapeFormatter = function landscapeFormatter(date) { return titleDateFormatter(date).replace(/([^\d\s])([\d])/g, function (match, nonDigit, digit) { return "".concat(nonDigit, " ").concat(digit); }).replace(', ', ',
'); }; return this.landscape ? landscapeFormatter : titleDateFormatter; } }, watch: { tableDate: function tableDate(val, prev) { // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly // compare for example '2000-9' and '2000-10' var sanitizeType = this.type === 'month' ? 'year' : 'month'; this.isReversing = sanitizeDateString(val, sanitizeType) < sanitizeDateString(prev, sanitizeType); this.$emit('update:picker-date', val); }, pickerDate: function pickerDate(val) { if (val) { this.tableDate = val; } else if (this.lastValue && this.type === 'date') { this.tableDate = sanitizeDateString(this.lastValue, 'month'); } else if (this.lastValue && this.type === 'month') { this.tableDate = sanitizeDateString(this.lastValue, 'year'); } }, value: function value(newValue, oldValue) { this.checkMultipleProp(); this.setInputDate(); if (!this.multiple && this.value && !this.pickerDate) { this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month'); } else if (this.multiple && this.value.length && !oldValue.length && !this.pickerDate) { this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month'); } }, type: function type(_type) { this.activePicker = _type.toUpperCase(); if (this.value && this.value.length) { var output = (this.multiple ? this.value : [this.value]).map(function (val) { return sanitizeDateString(val, _type); }).filter(this.isDateAllowed); this.$emit('input', this.multiple ? output : output[0]); } } }, created: function created() { this.checkMultipleProp(); if (this.pickerDate !== this.tableDate) { this.$emit('update:picker-date', this.tableDate); } this.setInputDate(); }, methods: { emitInput: function emitInput(newInput) { var output = this.multiple ? this.value.indexOf(newInput) === -1 ? this.value.concat([newInput]) : this.value.filter(function (x) { return x !== newInput; }) : newInput; this.$emit('input', output); this.multiple || this.$emit('change', newInput); }, checkMultipleProp: function checkMultipleProp() { if (this.value == null) return; var valueType = this.value.constructor.name; var expected = this.multiple ? 'Array' : 'String'; if (valueType !== expected) { (0, _console.consoleWarn)("Value must be ".concat(this.multiple ? 'an' : 'a', " ").concat(expected, ", got ").concat(valueType), this); } }, isDateAllowed: function isDateAllowed(value) { return (0, _isDateAllowed2.default)(value, this.min, this.max, this.allowedDates); }, yearClick: function yearClick(value) { this.inputYear = value; if (this.type === 'month') { this.tableDate = "".concat(value); } else { this.tableDate = "".concat(value, "-").concat((0, _util.pad)((this.tableMonth || 0) + 1)); } this.activePicker = 'MONTH'; if (this.reactive && !this.readonly && !this.multiple && this.isDateAllowed(this.inputDate)) { this.$emit('input', this.inputDate); } }, monthClick: function monthClick(value) { this.inputYear = parseInt(value.split('-')[0], 10); this.inputMonth = parseInt(value.split('-')[1], 10) - 1; if (this.type === 'date') { if (this.inputDay) { this.inputDay = Math.min(this.inputDay, (0, _timestamp.daysInMonth)(this.inputYear, this.inputMonth + 1)); } this.tableDate = value; this.activePicker = 'DATE'; if (this.reactive && !this.readonly && !this.multiple && this.isDateAllowed(this.inputDate)) { this.$emit('input', this.inputDate); } } else { this.emitInput(this.inputDate); } }, dateClick: function dateClick(value) { this.inputYear = parseInt(value.split('-')[0], 10); this.inputMonth = parseInt(value.split('-')[1], 10) - 1; this.inputDay = parseInt(value.split('-')[2], 10); this.emitInput(this.inputDate); }, genPickerTitle: function genPickerTitle() { var _this3 = this; return this.$createElement(_VDatePickerTitle.default, { props: { date: this.value ? this.formatters.titleDate(this.value) : '', disabled: this.disabled, readonly: this.readonly, selectingYear: this.activePicker === 'YEAR', year: this.formatters.year(this.value ? "".concat(this.inputYear) : this.tableDate), yearIcon: this.yearIcon, value: this.multiple ? this.value[0] : this.value }, slot: 'title', on: { 'update:selecting-year': function updateSelectingYear(value) { return _this3.activePicker = value ? 'YEAR' : _this3.type.toUpperCase(); } } }); }, genTableHeader: function genTableHeader() { var _this4 = this; return this.$createElement(_VDatePickerHeader.default, { props: { nextIcon: this.nextIcon, color: this.color, dark: this.dark, disabled: this.disabled, format: this.headerDateFormat, light: this.light, locale: this.locale, min: this.activePicker === 'DATE' ? this.minMonth : this.minYear, max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear, prevIcon: this.prevIcon, readonly: this.readonly, value: this.activePicker === 'DATE' ? "".concat((0, _util.pad)(this.tableYear, 4), "-").concat((0, _util.pad)(this.tableMonth + 1)) : "".concat((0, _util.pad)(this.tableYear, 4)) }, on: { toggle: function toggle() { return _this4.activePicker = _this4.activePicker === 'DATE' ? 'MONTH' : 'YEAR'; }, input: function input(value) { return _this4.tableDate = value; } } }); }, genDateTable: function genDateTable() { var _this5 = this; return this.$createElement(_VDatePickerDateTable.default, { props: { allowedDates: this.allowedDates, color: this.color, current: this.current, dark: this.dark, disabled: this.disabled, events: this.events, eventColor: this.eventColor, firstDayOfWeek: this.firstDayOfWeek, format: this.dayFormat, light: this.light, locale: this.locale, min: this.min, max: this.max, readonly: this.readonly, scrollable: this.scrollable, showWeek: this.showWeek, tableDate: "".concat((0, _util.pad)(this.tableYear, 4), "-").concat((0, _util.pad)(this.tableMonth + 1)), value: this.value, weekdayFormat: this.weekdayFormat }, ref: 'table', on: { input: this.dateClick, 'update:table-date': function updateTableDate(value) { return _this5.tableDate = value; }, 'click:date': function clickDate(value) { return _this5.$emit('click:date', value); }, 'dblclick:date': function dblclickDate(value) { return _this5.$emit('dblclick:date', value); } } }); }, genMonthTable: function genMonthTable() { var _this6 = this; return this.$createElement(_VDatePickerMonthTable.default, { props: { allowedDates: this.type === 'month' ? this.allowedDates : null, color: this.color, current: this.current ? sanitizeDateString(this.current, 'month') : null, dark: this.dark, disabled: this.disabled, events: this.type === 'month' ? this.events : null, eventColor: this.type === 'month' ? this.eventColor : null, format: this.monthFormat, light: this.light, locale: this.locale, min: this.minMonth, max: this.maxMonth, readonly: this.readonly && this.type === 'month', scrollable: this.scrollable, value: this.selectedMonths, tableDate: "".concat((0, _util.pad)(this.tableYear, 4)) }, ref: 'table', on: { input: this.monthClick, 'update:table-date': function updateTableDate(value) { return _this6.tableDate = value; }, 'click:month': function clickMonth(value) { return _this6.$emit('click:month', value); }, 'dblclick:month': function dblclickMonth(value) { return _this6.$emit('dblclick:month', value); } } }); }, genYears: function genYears() { return this.$createElement(_VDatePickerYears.default, { props: { color: this.color, format: this.yearFormat, locale: this.locale, min: this.minYear, max: this.maxYear, value: this.tableYear }, on: { input: this.yearClick } }); }, genPickerBody: function genPickerBody() { var children = this.activePicker === 'YEAR' ? [this.genYears()] : [this.genTableHeader(), this.activePicker === 'DATE' ? this.genDateTable() : this.genMonthTable()]; return this.$createElement('div', { key: this.activePicker }, children); }, setInputDate: function setInputDate() { if (this.lastValue) { var array = this.lastValue.split('-'); this.inputYear = parseInt(array[0], 10); this.inputMonth = parseInt(array[1], 10) - 1; if (this.type === 'date') { this.inputDay = parseInt(array[2], 10); } } else { this.inputYear = this.inputYear || this.now.getFullYear(); this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth(); this.inputDay = this.inputDay || this.now.getDate(); } } }, render: function render() { return this.genPicker('v-picker--date'); } }); exports.default = _default2; //# sourceMappingURL=VDatePicker.js.map