| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | import { ReactiveCache } from '/imports/reactiveCache';import { TAPi18n } from '/imports/i18n';import {   formatDateTime,   formatDate,   formatTime,   getISOWeek,   isValidDate,   isBefore,   isAfter,   isSame,   add,   subtract,   startOf,   endOf,   format,   parseDate,   now,   createDate,   fromNow,   calendar } from '/imports/lib/dateUtils';// Helper function to get time format for 24 hoursfunction adjustedTimeFormat() {  return 'HH:mm';}//   .replace(/HH/i, 'H');export class DatePicker extends BlazeComponent {  template() {    return 'datepicker';  }  onCreated(defaultTime = '1970-01-01 08:00:00') {    this.error = new ReactiveVar('');    this.card = this.data();    this.date = new ReactiveVar(new Date('invalid'));    this.defaultTime = defaultTime;  }  startDayOfWeek() {    const currentUser = ReactiveCache.getCurrentUser();    if (currentUser) {      return currentUser.getStartDayOfWeek();    } else {      return 1;    }  }  onRendered() {    // Set initial values for native HTML inputs    if (isValidDate(this.date.get())) {      const dateInput = this.find('#date');      const timeInput = this.find('#time');            if (dateInput) {        dateInput.value = formatDate(this.date.get());      }      if (timeInput && !timeInput.value && this.defaultTime) {        const defaultDate = new Date(this.defaultTime);        timeInput.value = formatTime(defaultDate);      } else if (timeInput && isValidDate(this.date.get())) {        timeInput.value = formatTime(this.date.get());      }    }  }  showDate() {    if (isValidDate(this.date.get())) return formatDate(this.date.get());    return '';  }  showTime() {    if (isValidDate(this.date.get())) return formatTime(this.date.get());    return '';  }  dateFormat() {    return 'L';  }  timeFormat() {    return 'LT';  }  events() {    return [      {        'change .js-date-field'() {          // Native HTML date input validation          const dateValue = this.find('#date').value;          if (dateValue) {            const dateObj = new Date(dateValue);            if (isValidDate(dateObj)) {              this.error.set('');            } else {              this.error.set('invalid-date');            }          }        },        'change .js-time-field'() {          // Native HTML time input validation          const timeValue = this.find('#time').value;          if (timeValue) {            const timeObj = new Date(`1970-01-01T${timeValue}`);            if (isValidDate(timeObj)) {              this.error.set('');            } else {              this.error.set('invalid-time');            }          }        },        'submit .edit-date'(evt) {          evt.preventDefault();          const dateValue = evt.target.date.value;          const timeValue = evt.target.time.value || '12:00'; // Default to 12:00 if no time given                    if (!dateValue) {            this.error.set('invalid-date');            evt.target.date.focus();            return;          }          const newCompleteDate = new Date(`${dateValue}T${timeValue}`);                    if (!isValidDate(newCompleteDate)) {            this.error.set('invalid');            return;          }          this._storeDate(newCompleteDate);          Popup.back();        },        'click .js-delete-date'(evt) {          evt.preventDefault();          this._deleteDate();          Popup.back();        },      },    ];  }}
 |