{"version":3,"file":"ng-stalk-datetime.mjs","sources":["../../components/datetime/mag-datetime.component.ts","../../components/datetime/mag-datetime.component.html","../../components/datetime/mag-datetime.module.ts","../../components/datetime/types.ts","../../components/datetime/public-api.ts","../../components/datetime/ng-stalk-datetime.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { DOCUMENT } from \"@angular/common\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { differenceInSeconds, formatDistance, getYear, isAfter, isEqual, setHours, setMilliseconds } from 'date-fns';\nimport { format, toDate } from 'date-fns-tz';\nimport { getTimezone, MagFrameState } from 'ng-stalk/core/frame-store';\nimport { MagDateService, MagGlobalConfigService } from 'ng-stalk/core/service';\nimport { MagTimeZone, MagZoneDateTime } from 'ng-stalk/core/types';\n// import * as moment_ from 'moment';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { DateTimeTable, DisplayType } from './types';\nimport {NsConfigKey, NsConfigService, WithNsConfig} from \"ng-stalk/core/config\";\n\n// const moment = moment_;\n\nconst NS_CONFIG_MODULE_NAME = 'datetime';\n\ntype DisplayTextCallback = () => string;\n\n@Component({\n  selector: 'mag-datetime',\n  templateUrl: './mag-datetime.component.html',\n  styleUrls: ['./mag-datetime.component.less'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MagDatetimeComponent implements OnInit, OnDestroy {\n  readonly _nsModuleName: NsConfigKey = NS_CONFIG_MODULE_NAME;\n  @Input()\n  value?: string;\n\n  @Input()\n  magValue?: string;\n\n  @Input()\n  magTitle = 'mag.datetime.title';\n\n  @Input()\n  magFormat: 'auto' | DisplayType = 'auto';\n\n  @Input()\n  magEmptyText = '-';\n\n  @Input()\n  magCopyText = 'mag.datetime.copy_text';\n\n  @Input()\n  magCancelText = 'mag.datetime.close';\n\n  @Input() @WithNsConfig() nsDebug: boolean = false;\n  @Input() @WithNsConfig() nsDatetimeAsNoLimitedTime?: string;\n  @Input() @WithNsConfig() nsNoLimitedTimeText: string = 'mag.datetime.no_limited_time';\n  @Input() @WithNsConfig() nsExposeValueIfNoLimitedTime: boolean = false;\n\n  valid = false;\n\n  // @ts-ignore\n  dateTimeTable: DateTimeTable;\n\n  private $destroy: Subject<boolean>;\n\n  timezone$: Observable<MagTimeZone>;\n\n  // @ts-ignore\n  print$: Observable<string>;\n\n  exposeAsNoLimitedTime: boolean = false;\n\n  noLimitedTime = true;\n\n  window: Window;\n\n  constructor(\n    @Inject(DOCUMENT) private document: Document,\n    public nsConfigService: NsConfigService,\n    private cdr: ChangeDetectorRef,\n    public magConfigService: MagGlobalConfigService,\n    private _store: Store<MagFrameState>,\n    private translateService: TranslateService,\n    private magDateService: MagDateService\n  ) {\n    this.window = this.document.defaultView!;\n    this.$destroy = new Subject();\n    this.timezone$ = this._store.pipe(takeUntil(this.$destroy)).pipe(select(getTimezone));\n  }\n\n  ngOnInit(): void {\n    const value = this.magValue || this.value;\n    this.transform(value)\n      .pipe(takeUntil(this.$destroy))\n      .subscribe(() => {\n        this.cdr.markForCheck();\n      });\n  }\n\n  transform(value: NzSafeAny): Observable<NzSafeAny> {\n    this.noLimitedTime = false;\n\n    // @ts-ignore\n    this.print$ = combineLatest(this.timezone$, of(value))\n      .pipe(takeUntil(this.$destroy))\n      .pipe(\n        map(([timeZone, lastValue]) => {\n          if (!lastValue) {\n            this.valid = false;\n            return;\n          }\n\n          const magZoneDateTime = this.magDateService.parseToMagZoneDateTime(lastValue, timeZone.timezoneId);\n          // return format(magZoneDateTime.value, \"yyy-MM-dd'T'HH:mm:ss.SSSxxx\", {\n          //   timeZone: timezone.timezoneId,\n          // })\n\n          // const zoneOffset = timezone.timezoneOffset || '+09:00';\n          const dateTimeText = format(magZoneDateTime.value, 'yyyy-MM-dd HH:mm:ss', {\n            timeZone: magZoneDateTime.zoneId\n          });\n          const zoneOffset = format(magZoneDateTime.value, 'XXX', {\n            timeZone: magZoneDateTime.zoneId\n          });\n\n          // const momentValue = moment(lastValue).zone(zoneOffset);\n\n          const full = new BehaviorSubject<string>(`${dateTimeText} (${zoneOffset})`);\n          if (this.exposeAsNoLimitedTime) {\n            this.noLimitedTime = true;\n            this.translateService\n              .get(this.nsNoLimitedTimeText)\n              .pipe(takeUntil(this.$destroy))\n              .subscribe(text => {\n                full.next(text);\n              });\n          }\n          const displayTextSubject = new BehaviorSubject<string>(`${dateTimeText} (${zoneOffset})`);\n\n          const rfc3339 = magZoneDateTime.rfc3339Value; // , 'yyyy-MM-ddTHH:mm:ssXXX');\n\n          this.dateTimeTable = {\n            value: magZoneDateTime, // momentValue,\n            timezone: {\n              timezoneId: timeZone.timezoneId,\n              timezoneOffset: zoneOffset // timezone.timezoneOffset 은 현재 브라우저의 offset 만 나타나는 문제가 있다.\n            },\n            full: full,\n            rfc3339: rfc3339,\n            date: format(magZoneDateTime.value, 'yyyy-MM-dd'),\n            time: format(magZoneDateTime.value, 'HH:mm:ss'),\n            displayText: displayTextSubject,\n            displayType: 'date-time-zone'\n          };\n\n          if (this.magFormat === 'auto') {\n            this.fillDisplayTypeAndText(this.dateTimeTable, magZoneDateTime, zoneOffset);\n          } else if (this.magFormat === 'rfc3339') {\n            this.dateTimeTable.displayType = 'rfc3339';\n            this.dateTimeTable.displayText.next(this.replaceIfNoLimitedTime(magZoneDateTime.value, () => rfc3339));\n          } else if (this.magFormat === 'date-time-zone') {\n            // skip : 기본 적용됨\n          } else if (this.magFormat === 'date-time') {\n            this.dateTimeTable.displayType = 'date-time';\n            this.dateTimeTable.displayText.next(\n              this.replaceIfNoLimitedTime(magZoneDateTime.value, () => format(magZoneDateTime.value, 'yyyy-MM-dd HH:mm'))\n            );\n          } else if (this.magFormat === 'date-time-with-second') {\n            this.dateTimeTable.displayType = 'date-time-with-second';\n            this.dateTimeTable.displayText.next(\n              this.replaceIfNoLimitedTime(magZoneDateTime.value, () => format(magZoneDateTime.value, 'yyyy-MM-dd HH:mm:ss'))\n            );\n          } else if (this.magFormat === 'month-day') {\n            this.dateTimeTable.displayType = 'month-day';\n            this.dateTimeTable.displayText.next(\n              this.replaceIfNoLimitedTime(magZoneDateTime.value, () => format(magZoneDateTime.value, 'MM-dd'))\n            );\n          } else if (this.magFormat === 'time') {\n            this.dateTimeTable.displayType = 'time';\n            this.dateTimeTable.displayText.next(\n              this.replaceIfNoLimitedTime(magZoneDateTime.value, () => format(magZoneDateTime.value, 'HH:mm'))\n            );\n          } else if (this.magFormat === 'time-with-second') {\n            this.dateTimeTable.displayType = 'time-with-second';\n            this.dateTimeTable.displayText.next(\n              this.replaceIfNoLimitedTime(magZoneDateTime.value, () => format(magZoneDateTime.value, 'HH:mm:ss'))\n            );\n          }\n\n          this.valid = true;\n          return rfc3339;\n        })\n      );\n    return this.print$;\n  }\n\n  // @ts-ignore\n  fillDisplayTypeAndText(dateTimeTable: DateTimeTable, momentValue: MagZoneDateTime, zoneOffset: string): void {\n    const tryValue: MagZoneDateTime = {\n      value: toDate(momentValue.value, {\n        timeZone: momentValue.zoneId\n      }),\n      zoneId: momentValue.zoneId,\n      rfc3339Value: momentValue.rfc3339Value\n    };\n\n    tryValue.value = setMilliseconds(tryValue.value, 0);\n\n    // 오늘인지 체크\n    tryValue.value = setHours(tryValue.value, 0);\n    // @ts-ignore\n    const now: Date = this.magDateService.now().value;\n    let diffStartDaySec = differenceInSeconds(tryValue.value, now);\n    if (diffStartDaySec < 0) {\n      diffStartDaySec = -diffStartDaySec;\n    }\n    if (diffStartDaySec >= 0 && diffStartDaySec < 86400) {\n      dateTimeTable.displayType = 'time';\n      dateTimeTable.displayText.next(this.replaceIfNoLimitedTime(momentValue.value, () => format(momentValue.value, 'HH:mm')));\n      return;\n    }\n\n    // 같은 해인지 체크\n    if (getYear(momentValue.value) === getYear(now)) {\n      dateTimeTable.displayType = 'month-day';\n      dateTimeTable.displayText.next(this.replaceIfNoLimitedTime(momentValue.value, () => format(momentValue.value, 'MM-dd')));\n      return;\n    }\n\n    // 그 외의 경우\n    dateTimeTable.displayType = 'year-month-day';\n    dateTimeTable.displayText.next(this.replaceIfNoLimitedTime(momentValue.value, () => format(momentValue.value, 'yyyy-MM-dd')));\n  }\n\n  ngOnDestroy(): void {\n    this.$destroy.next(true);\n    this.$destroy.complete();\n  }\n\n  cancel(): void {\n    // this.nzMessageService.info('click cancel');\n  }\n\n  confirm(): void {\n    // this.nzMessageService.info('click confirm');\n    // @ts-ignore\n    this.onClick(null);\n  }\n\n  // @HostListener('click', ['$event'])\n  // @ts-ignore\n  public onClick(event: MouseEvent): void {\n    // event.preventDefault();\n    // if (!this.payload) {\n    //   return;\n    // }\n\n    const listener = (e: ClipboardEvent) => {\n      // @ts-ignore\n      const clipboard = e.clipboardData || window.clipboardData;\n      clipboard.setData('text', this.dateTimeTable.rfc3339);\n      e.preventDefault();\n\n      // this.copied.emit(this.dateTimeTable.rfc3339);\n    };\n\n    document.addEventListener('copy', listener, false);\n    document.execCommand('copy');\n    document.removeEventListener('copy', listener, false);\n  }\n\n  get fromNow(): string {\n    const now = this.magDateService.now();\n    const duration = formatDistance(this.dateTimeTable.value.value, now.value);\n    if (isEqual(this.dateTimeTable.value.value, now.value)) {\n      return 'now';\n    }\n    const future = isAfter(this.dateTimeTable.value.value, now.value);\n    if (future) {\n      return `in ${duration}`;\n    } else {\n      return `${duration} ago`;\n    }\n  }\n\n  private replaceIfNoLimitedTime(value: Date, callback: DisplayTextCallback): string {\n    if (this.nsDatetimeAsNoLimitedTime) {\n      if (isAfter(value, this.magDateService.parseToMagZoneDateTime(this.nsDatetimeAsNoLimitedTime).value)) {\n        return this.translateService.instant(this.nsNoLimitedTimeText) as string;\n      }\n    }\n    return callback();\n  }\n}\n","<span nz-tooltip [nzTooltipTitle]=\"dateTimeTable.full | async\"\n      nz-popconfirm [nzPopconfirmTitle]=\"popDetail\"\n      (nzOnConfirm)=\"confirm()\"\n      (nzOnCancel)=\"cancel()\"\n      [nzOkText]=\"magCopyText | translate\"\n      [nzCancelText]=\"magCancelText | translate\"\n      nzPopconfirmPlacement=\"bottom\"\n      *ngIf=\"valid\"\n  >{{ dateTimeTable.displayText | async }} <i nz-icon nzType=\"clock-circle\" nzTheme=\"outline\"></i></span>\n<span *ngIf=\"!valid\">{{ magEmptyText }}</span>\n<ng-template #popDetail>\n  <nz-descriptions [nzTitle]=\"magTitle | translate\" nzBordered [nzColumn]=\"2\" nzSize=\"small\">\n    <nz-descriptions-item nzTitle=\"{{ 'mag.datetime.datetime' | translate }}\" [nzSpan]=\"2\">{{ dateTimeTable.full | async }}</nz-descriptions-item>\n    <nz-descriptions-item nzTitle=\"ISO8601(RFC3339)\" [nzSpan]=\"2\">{{ dateTimeTable.rfc3339 }}</nz-descriptions-item>\n    <nz-descriptions-item nzTitle=\"{{ 'mag.datetime.date' | translate }}\">{{ dateTimeTable.date }}</nz-descriptions-item>\n    <nz-descriptions-item nzTitle=\"{{ 'mag.datetime.time' | translate }}\">{{ dateTimeTable.time }}</nz-descriptions-item>\n    <nz-descriptions-item nzTitle=\"{{ 'mag.datetime.time_zone' | translate }}\">{{ dateTimeTable.timezone.timezoneId }} ({{ dateTimeTable.timezone.timezoneOffset }})</nz-descriptions-item>\n    <nz-descriptions-item nzTitle=\"{{ 'mag.datetime.from_now' | translate }}\">{{ fromNow }}</nz-descriptions-item>\n  </nz-descriptions>\n</ng-template>","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MagFrameStoreModule } from 'ng-stalk/core/frame-store';\nimport { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { MagDatetimeComponent } from './mag-datetime.component';\n\n@NgModule({\n  imports: [CommonModule, NzToolTipModule, NzPopconfirmModule, NzDescriptionsModule, NzIconModule, MagFrameStoreModule, TranslateModule],\n  declarations: [MagDatetimeComponent],\n  exports: [MagDatetimeComponent]\n})\nexport class MagDatetimeModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { MagTimeZone, MagZoneDateTime } from 'ng-stalk/core/types';\nimport { BehaviorSubject } from 'rxjs';\n\nexport type DisplayType =\n  | 'rfc3339'\n  | 'date-time-zone'\n  | 'date-time'\n  | 'date-time-with-second'\n  | 'year-month-day'\n  | 'month-day'\n  | 'time-with-second'\n  | 'time';\n\nexport interface DateTimeTable {\n  value: MagZoneDateTime; // original moment value\n  full: BehaviorSubject<string>;\n  rfc3339: string;\n  date: string;\n  time: string;\n  timezone: MagTimeZone;\n\n  displayType: DisplayType;\n  displayText: BehaviorSubject<string>;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './mag-datetime.module';\nexport * from './mag-datetime.component';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}