{"version":3,"file":"uofx-app-components-date-picker.mjs","sources":["../../../projects/uofx-app-pack/date-picker/src/date-picker.component.ts","../../../projects/uofx-app-pack/date-picker/src/date-picker.component.html","../../../projects/uofx-app-pack/date-picker/src/date-picker.module.ts","../../../projects/uofx-app-pack/date-picker/uofx-app-components-date-picker.ts"],"sourcesContent":["import { Component, HostBinding, Input, OnChanges, OnInit, SimpleChanges, ViewChild, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Guid, UofxI18NService } from '@uofx/core';\r\n\r\nimport { IonModal } from '@ionic/angular';\r\nimport { UofxCoreDateFormatPipe } from '@uofx/app-components';\r\n\r\n@Component({\r\n  selector: 'uofx-date-picker',\r\n  templateUrl: './date-picker.component.html',\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UofxDatePickerComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n})\r\nexport class UofxDatePickerComponent implements ControlValueAccessor, OnInit, OnChanges {\r\n  /** date pick modal */\r\n  @ViewChild(IonModal) modal!: IonModal;\r\n  /** 格式 yyyy/MM/dd */\r\n  @Input() displayFormat: string = 'yyyy/MM/dd';\r\n  /** 日期最小值 */\r\n  @Input('min') minDate: string | Date;\r\n  /** 日期最大值 */\r\n  @Input('max') maxDate: string | Date;\r\n  // *UKEY:\"global.comm.datepicker-placeholder-select-date\"\r\n  @Input() placeholder: string = 'global.comm.datepicker-placeholder-select-date';\r\n  /** 日期(date)、日期時間(date-time) */\r\n  @Input('presentation') presentation: 'date' | 'date-time' = 'date';\r\n  /** 是否顯示清除按鈕 */\r\n  @Input() showClearButton: boolean = true;\r\n  /** 可選分鐘值，例如 \"0,15,30,45\"，僅當 presentation 為 date-time 時才有作用\r\n   * @default 每分鐘\r\n   * @example\r\n   * <uofx-date-picker [minuteValues]=\"[0, 15, 30, 45]\"></uofx-date-picker>\r\n   * <uofx-date-picker minuteValues=\"0,15,30,45\"></uofx-date-picker>\r\n   * <uofx-date-picker minuteValues=\"15\"></uofx-date-picker> (每15分鐘)\r\n   *\r\n  */\r\n  @Input() minuteValues: number | number[] | string | undefined;\r\n\r\n  @HostBinding('class.uofx-date-picker') defaultClass = true;\r\n  @HostBinding('class.date-disabled') dateDisabledClass = false;\r\n\r\n  /** 原始值 */\r\n  rawValue: Date;\r\n  /** 供元件使用的 ISOString，為後端傳回來的資料(obj)透過 UofxCoreDateFormatPipe 轉成的 ISOString */\r\n  value: string;\r\n  /** value 格式化後要傳給後端的資料 yyyy/MM/dd */\r\n  apiValue: string;\r\n  _propagateChange: (value) => {};\r\n  isDisabled: boolean = false;\r\n  /** 動態產生picker ic */\r\n  pickerId: string;\r\n  showPicker: boolean;\r\n  /** 轉換成顯示格式 */\r\n  formatDate: string;\r\n  /** 時間format pipe */\r\n  dateFormat = new UofxCoreDateFormatPipe();\r\n\r\n  constructor(public i18n: UofxI18NService) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.displayFormat && this.rawValue) {\r\n      this.apiValue = this.dateFormat.transform(this.rawValue, this.displayFormat);\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.pickerId = Guid.makeNew().toString();\r\n    // ionic的最大值預設是給現在年份的最後一天，為了要能選擇後面一點的時間所已把年份延長，\r\n    // 不能設定太長會有效能問題，目前暫時設定2100。\r\n    // 如果沒有傳入的最大值日期，才使用最大值預設。\r\n    if (!this.maxDate) {\r\n      this.maxDate = this.dateFormat.transform(new Date(2100, 12, 31), 'ISOString');\r\n    }\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    this.rawValue = new Date(obj);\r\n    if (obj) this.apiValue = this.dateFormat.transform(obj, this.displayFormat);\r\n    this.value = obj ? this.dateFormat.transform(obj, 'ISOString') : undefined; //obj 是後端資料所以要轉offset給元件使用\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this._propagateChange = fn;\r\n  }\r\n  registerOnTouched(fn: any): void {}\r\n  /** 設定是否禁用 */\r\n  setDisabledState?(isDisabled: boolean): void {\r\n    this.isDisabled = isDisabled;\r\n    this.dateDisabledClass = isDisabled;\r\n  }\r\n\r\n  /** 開啟 date picker */\r\n  onOpenPicker() {\r\n    this.modal.present();\r\n  }\r\n\r\n  /** 資料異動 (選擇日期事件) */\r\n  onDateTimeChange() {\r\n    if (this.value) {\r\n      this.rawValue = new Date(this.value);\r\n      this.apiValue = this.dateFormat.transform(this.value, this.displayFormat);\r\n    }\r\n    this._propagateChange(this.value);\r\n  }\r\n\r\n  /** 清除資料 */\r\n  onClearClick() {\r\n    this.rawValue = null;\r\n    this.value = null;\r\n    this.apiValue = null;\r\n    this.onDateTimeChange();\r\n  }\r\n}\r\n","<div class=\"u-datepicker\">\r\n  <div class=\"width-100\" (click)=\"onOpenPicker()\">\r\n    <ion-input\r\n      readonly=\"true\"\r\n      [disabled]=\"isDisabled\"\r\n      [(ngModel)]=\"apiValue\"\r\n      [placeholder]=\"placeholder | translate\"></ion-input>\r\n  </div>\r\n  <div class=\"pick-icon margin-right\">\r\n    <ion-icon\r\n      name=\"calendar-outline\"\r\n      class=\"pick-icon-inner text-20-fixed text-or-550\"\r\n      (click)=\"onOpenPicker()\"></ion-icon>\r\n    <ion-icon\r\n      *ngIf=\"showClearButton && apiValue\"\r\n      icon=\"close-outline\"\r\n      class=\"clear-icon-inner text-20-fixed text-gr-700\"\r\n      (click)=\"onClearClick()\"></ion-icon>\r\n  </div>\r\n</div>\r\n\r\n<ion-modal class=\"u-datecalendar\">\r\n  <ng-template>\r\n    <ion-content>\r\n      <ion-datetime\r\n        hourCycle=\"h23\"\r\n        [locale]=\"i18n.currentLang\"\r\n        [presentation]=\"presentation\"\r\n        showDefaultButtons=\"true\"\r\n        [minuteValues]=\"minuteValues\"\r\n        [min]=\"minDate\"\r\n        [max]=\"maxDate\"\r\n        [attr.disabled]=\"isDisabled\"\r\n        [(ngModel)]=\"value\"\r\n        [doneText]=\"'global.comm.button.ok' | translate\"\r\n        [cancelText]=\"'global.comm.button.cancel' | translate\"\r\n        (ngModelChange)=\"onDateTimeChange()\">\r\n        <span slot=\"time-label\" [translate]=\"'global.comm.datepicker-time-title' | translate\"></span>\r\n      </ion-datetime>\r\n    </ion-content>\r\n  </ng-template>\r\n</ion-modal>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { UofxTranslateModule } from '@uofx/app-components';\r\nimport { UofxIconModule } from '@uofx/app-components/icon';\r\nimport { UofxDatePickerComponent } from './date-picker.component';\r\n\r\nconst COMPONENTS = [UofxDatePickerComponent];\r\n\r\n@NgModule({\r\n  imports: [CommonModule, IonicModule, FormsModule, UofxIconModule, UofxTranslateModule],\r\n  exports: [...COMPONENTS],\r\n  declarations: [...COMPONENTS],\r\n  providers: [],\r\n})\r\nexport class UofxDatePickerModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}