UNPKG

@lxlib/form

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.

174 lines 19.5 kB
/** * @fileoverview added by tsickle * Generated from: src/widgets/date/date.widget.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation } from '@angular/core'; import format from 'date-fns/format'; import parse from 'date-fns/parse'; import { toBool } from '../../utils'; import { ControlUIWidget } from '../../widget'; export class DateWidget extends ControlUIWidget { constructor() { super(...arguments); this.flatRange = false; this.displayValue = null; } /** * @return {?} */ ngOnInit() { const { mode, end, displayFormat, allowClear, showToday } = this.ui; this.mode = mode || 'date'; this.flatRange = end != null; // 构建属性对象时会对默认值进行校验,因此可以直接使用 format 作为格式化属性 this.startFormat = (/** @type {?} */ (this.ui._format)); if (this.flatRange) { this.mode = 'range'; /** @type {?} */ const endUi = (/** @type {?} */ (this.endProperty.ui)); this.endFormat = endUi.format ? endUi._format : this.startFormat; } if (!displayFormat) { switch (this.mode) { case 'year': this.displayFormat = `yyyy`; break; case 'month': this.displayFormat = `yyyy-MM`; break; case 'week': this.displayFormat = `yyyy-ww`; break; } } else { this.displayFormat = displayFormat; } this.i = { allowClear: toBool(allowClear, true), // nz-date-picker showToday: toBool(showToday, true), }; } /** * @param {?} value * @return {?} */ reset(value) { value = this.toDate(value, this.startFormat); if (this.flatRange) { this.displayValue = value == null ? [] : [value, this.toDate(this.endProperty.formData, this.endFormat || this.startFormat)]; } else { this.displayValue = value; } this.detectChanges(); } /** * @param {?} value * @return {?} */ _change(value) { if (value == null || ((/** @type {?} */ (value))).length < 2) { this.setValue(null); this.setEnd(null); return; } /** @type {?} */ const res = Array.isArray(value) ? [format(value[0], this.startFormat), format(value[1], this.endFormat || this.startFormat)] : format(value, this.startFormat); if (this.flatRange) { this.setEnd(res[1]); this.setValue(res[0]); } else { this.setValue(res); } } /** * @param {?} status * @return {?} */ _openChange(status) { if (this.ui.onOpenChange) this.ui.onOpenChange(status); } /** * @param {?} value * @return {?} */ _ok(value) { if (this.ui.onOk) this.ui.onOk(value); } /** * @private * @return {?} */ get endProperty() { return ((/** @type {?} */ ((/** @type {?} */ (this.formProperty.parent)).properties)))[(/** @type {?} */ (this.ui.end))]; } /** * @private * @param {?} value * @return {?} */ setEnd(value) { if (!this.flatRange) return; this.endProperty.setValue(value, true); } /** * @private * @param {?} value * @param {?} formatString * @return {?} */ toDate(value, formatString) { if (value instanceof Date) { return value; } if (typeof value === 'number' || (typeof value === 'string' && !isNaN(+value))) { value = new Date(+value); } /** @type {?} */ const res = value ? parse(value, formatString, new Date()) : null; return res != null && res.toString() === 'Invalid Date' ? new Date(value) : res; } } DateWidget.decorators = [ { type: Component, args: [{ selector: 'sf-date', template: "<sf-item-wrap [id]=\"id\"\n [schema]=\"schema\"\n [ui]=\"ui\"\n [showError]=\"showError\"\n [error]=\"error\"\n [showTitle]=\"schema.title\">\n <ng-container [ngSwitch]=\"mode\">\n\n <nz-year-picker *ngSwitchCase=\"'year'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [class]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"></nz-year-picker>\n\n <nz-month-picker *ngSwitchCase=\"'month'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [class]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"></nz-month-picker>\n\n <nz-week-picker *ngSwitchCase=\"'week'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [class]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"></nz-week-picker>\n\n <nz-range-picker *ngSwitchCase=\"'range'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [class]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzDisabledTime]=\"ui.disabledTime\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzRanges]=\"ui.ranges\"\n [nzShowTime]=\"ui.showTime\"\n (nzOnOk)=\"_ok($event)\"></nz-range-picker>\n\n <nz-date-picker *ngSwitchDefault\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [class]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzDisabledTime]=\"ui.disabledTime\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzShowTime]=\"ui.showTime\"\n [nzShowToday]=\"i.showToday\"\n (nzOnOk)=\"_ok($event)\"></nz-date-picker>\n </ng-container>\n\n</sf-item-wrap>\n", preserveWhitespaces: false, encapsulation: ViewEncapsulation.None }] } ]; if (false) { /** * @type {?} * @private */ DateWidget.prototype.startFormat; /** * @type {?} * @private */ DateWidget.prototype.endFormat; /** * @type {?} * @private */ DateWidget.prototype.flatRange; /** @type {?} */ DateWidget.prototype.mode; /** @type {?} */ DateWidget.prototype.displayValue; /** @type {?} */ DateWidget.prototype.displayFormat; /** @type {?} */ DateWidget.prototype.i; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS53aWRnZXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbHhsaWIvZm9ybS8iLCJzb3VyY2VzIjpbInNyYy93aWRnZXRzL2RhdGUvZGF0ZS53aWRnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVMvQyxNQUFNLE9BQU8sVUFBVyxTQUFRLGVBQW1DO0lBTm5FOztRQVNVLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFMUIsaUJBQVksR0FBeUIsSUFBSSxDQUFDO0lBOEY1QyxDQUFDOzs7O0lBMUZDLFFBQVE7Y0FDQSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO1FBQzdCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFBLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDOztrQkFDZCxLQUFLLEdBQUcsbUJBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQXNCO1lBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFD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QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7Ozs7OztJQUVDLGlDQUE0Qjs7Ozs7SUFDNUIsK0JBQTBCOzs7OztJQUMxQiwrQkFBMEI7O0lBQzFCLDBCQUFhOztJQUNiLGtDQUEwQzs7SUFDMUMsbUNBQXNCOztJQUN0Qix1QkFBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGZvcm1hdCBmcm9tICdkYXRlLWZucy9mb3JtYXQnO1xuaW1wb3J0IHBhcnNlIGZyb20gJ2RhdGUtZm5zL3BhcnNlJztcbmltcG9ydCB7IFNGVmFsdWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vbW9kZWwvZm9ybS5wcm9wZXJ0eSc7XG5pbXBvcnQgeyB0b0Jvb2wgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb250cm9sVUlXaWRnZXQgfSBmcm9tICcuLi8uLi93aWRnZXQnO1xuaW1wb3J0IHsgU0ZEYXRlV2lkZ2V0U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZi1kYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUud2lkZ2V0Lmh0bWwnLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVdpZGdldCBleHRlbmRzIENvbnRyb2xVSVdpZGdldDxTRkRhdGVXaWRnZXRTY2hlbWE+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBzdGFydEZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIGVuZEZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIGZsYXRSYW5nZSA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmc7XG4gIGRpc3BsYXlWYWx1ZTogRGF0ZSB8IERhdGVbXSB8IG51bGwgPSBudWxsO1xuICBkaXNwbGF5Rm9ybWF0OiBzdHJpbmc7XG4gIGk6IGFueTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IG1vZGUsIGVuZCwgZGlzcGxheUZvcm1hdCwgYWxsb3dDbGVhciwgc2hvd1RvZGF5IH0gPSB0aGlzLnVpO1xuICAgIHRoaXMubW9kZSA9IG1vZGUgfHwgJ2RhdGUnO1xuICAgIHRoaXMuZmxhdFJhbmdlID0gZW5kICE9IG51bGw7XG4gICAgLy8g5p6E5bu65bGe5oCn5a+56LGh5pe25Lya5a+56buY6K6k5YC86L+b6KGM5qCh6aqM77yM5Zug5q2k5Y+v5Lul55u05o6l5L2/55SoIGZvcm1hdCDkvZzkuLrmoLzlvI/ljJblsZ7mgKdcbiAgICB0aGlzLnN0YXJ0Rm9ybWF0ID0gdGhpcy51aS5fZm9ybWF0ITtcbiAgICBpZiAodGhpcy5mbGF0UmFuZ2UpIHtcbiAgICAgIHRoaXMubW9kZSA9ICdyYW5nZSc7XG4gICAgICBjb25zdCBlbmRVaSA9IHRoaXMuZW5kUHJvcGVydHkudWkgYXMgU0ZEYXRlV2lkZ2V0U2NoZW1hO1xuICAgICAgdGhpcy5lbmRGb3JtYXQgPSBlbmRVaS5mb3JtYXQgPyBlbmRVaS5fZm9ybWF0IDogdGhpcy5zdGFydEZvcm1hdDtcbiAgICB9XG4gICAgaWYgKCFkaXNwbGF5Rm9ybWF0KSB7XG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlGb3JtYXQgPSBgeXl5eWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlGb3JtYXQgPSBgeXl5eS1NTWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgIHRoaXMuZGlzcGxheUZvcm1hdCA9IGB5eXl5LXd3YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICB9XG4gICAgdGhpcy5pID0ge1xuICAgICAgYWxsb3dDbGVhcjogdG9Cb29sKGFsbG93Q2xlYXIsIHRydWUpLFxuICAgICAgLy8gbnotZGF0ZS1waWNrZXJcbiAgICAgIHNob3dUb2RheTogdG9Cb29sKHNob3dUb2RheSwgdHJ1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHJlc2V0KHZhbHVlOiBTRlZhbHVlKSB7XG4gICAgdmFsdWUgPSB0aGlzLnRvRGF0ZSh2YWx1ZSwgdGhpcy5zdGFydEZvcm1hdCk7XG4gICAgaWYgKHRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlID09IG51bGwgPyBbXSA6IFt2YWx1ZSwgdGhpcy50b0RhdGUodGhpcy5lbmRQcm9wZXJ0eS5mb3JtRGF0YSwgdGhpcy5lbmRGb3JtYXQgfHwgdGhpcy5zdGFydEZvcm1hdCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIF9jaGFuZ2UodmFsdWU6IERhdGUgfCBEYXRlW10gfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgKHZhbHVlIGFzIERhdGVbXSkubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuc2V0RW5kKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICA/IFtmb3JtYXQodmFsdWVbMF0sIHRoaXMuc3RhcnRGb3JtYXQpLCBmb3JtYXQodmFsdWVbMV0sIHRoaXMuZW5kRm9ybWF0IHx8IHRoaXMuc3RhcnRGb3JtYXQpXVxuICAgICAgOiBmb3JtYXQodmFsdWUsIHRoaXMuc3RhcnRGb3JtYXQpO1xuXG4gICAgaWYgKHRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICB0aGlzLnNldEVuZChyZXNbMV0pO1xuICAgICAgdGhpcy5zZXRWYWx1ZShyZXNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFZhbHVlKHJlcyk7XG4gICAgfVxuICB9XG5cbiAgX29wZW5DaGFuZ2Uoc3RhdHVzOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudWkub25PcGVuQ2hhbmdlKSB0aGlzLnVpLm9uT3BlbkNoYW5nZShzdGF0dXMpO1xuICB9XG5cbiAgX29rKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy51aS5vbk9rKSB0aGlzLnVpLm9uT2sodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZW5kUHJvcGVydHkoKTogRm9ybVByb3BlcnR5IHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybVByb3BlcnR5LnBhcmVudCEucHJvcGVydGllcyBhcyB7IFtrZXk6IHN0cmluZ106IEZvcm1Qcm9wZXJ0eSB9KVt0aGlzLnVpLmVuZCFdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbmQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZmxhdFJhbmdlKSByZXR1cm47XG5cbiAgICB0aGlzLmVuZFByb3BlcnR5LnNldFZhbHVlKHZhbHVlLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9EYXRlKHZhbHVlOiBTRlZhbHVlLCBmb3JtYXRTdHJpbmc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTigrdmFsdWUpKSkge1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgrdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCByZXMgPSB2YWx1ZSA/IHBhcnNlKHZhbHVlLCBmb3JtYXRTdHJpbmcsIG5ldyBEYXRlKCkpIDogbnVsbDtcbiAgICByZXR1cm4gcmVzICE9IG51bGwgJiYgcmVzLnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnID8gbmV3IERhdGUodmFsdWUpIDogcmVzO1xuICB9XG59XG4iXX0=