@ohayojp/form
Version:
174 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: src/widgets/date/date.widget.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation } from '@angular/core';
import { toDate } from '@ohayojp/util';
import format from 'date-fns/format';
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 = toDate(value, { formatString: this.startFormat, defaultValue: null });
if (this.flatRange) {
/** @type {?} */
const endValue = toDate((/** @type {?} */ (this.endProperty.formData)), {
formatString: this.endFormat || this.startFormat,
defaultValue: null,
});
this.displayValue = value == null || endValue == null ? [] : [value, endValue];
}
else {
this.displayValue = value;
}
this.detectChanges();
// TODO: Need to wait for the rendering to complete, otherwise it will be overwritten of end widget
if (this.displayValue) {
setTimeout((/**
* @return {?}
*/
() => this._change(this.displayValue, false)));
}
}
/**
* @param {?} value
* @param {?=} emitModelChange
* @return {?}
*/
_change(value, emitModelChange = true) {
if (emitModelChange && this.ui.change) {
this.ui.change(value);
}
if (value == null || (Array.isArray(value) && 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.setValue(res[0]);
this.setEnd(res[1]);
}
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);
this.endProperty.updateValueAndValidity();
}
}
DateWidget.decorators = [
{ type: Component, args: [{
selector: 'sf-date',
template: "<sf-item-wrap [id]=\"id\" [schema]=\"schema\" [ui]=\"ui\" [showError]=\"showError\" [error]=\"error\" [showTitle]=\"schema.title\">\n <ng-container [ngSwitch]=\"mode\">\n <nz-year-picker\n *ngSwitchCase=\"'year'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"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\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n ></nz-year-picker>\n\n <nz-month-picker\n *ngSwitchCase=\"'month'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"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\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n ></nz-month-picker>\n\n <nz-week-picker\n *ngSwitchCase=\"'week'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale\"\n [nzPlaceHolder]=\"ui.placeholder\"\n [nzPopupStyle]=\"ui.popupStyle\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n (nzOnOpenChange)=\"_openChange($event)\"\n ></nz-week-picker>\n\n <nz-range-picker\n *ngSwitchCase=\"'range'\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"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 [nzMode]=\"ui.rangeMode\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n (nzOnOk)=\"_ok($event)\"\n ></nz-range-picker>\n\n <nz-date-picker\n *ngSwitchDefault\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"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 [nzInputReadOnly]=\"ui.inputReadOnly\"\n (nzOnOk)=\"_ok($event)\"\n ></nz-date-picker>\n </ng-container>\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS53aWRnZXQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS8iLCJzb3VyY2VzIjpbInNyYy93aWRnZXRzL2RhdGUvZGF0ZS53aWRnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFJckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBUy9DLE1BQU0sT0FBTyxVQUFXLFNBQVEsZUFBbUM7SUFObkU7O1FBU1UsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQixpQkFBWSxHQUF5QixJQUFJLENBQUM7SUErRjVDLENBQUM7Ozs7SUEzRkMsUUFBUTtjQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ25FLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDN0IsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7O2tCQUNkLEtBQUssR0FBRyxtQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBc0I7WUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENB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Q3RDOzs7Ozs7O0lBRUMsaUNBQTRCOzs7OztJQUM1QiwrQkFBMEI7Ozs7O0lBQzFCLCtCQUEwQjs7SUFDMUIsMEJBQWE7O0lBQ2Isa0NBQTBDOztJQUMxQyxtQ0FBc0I7O0lBQ3RCLHVCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tICdAb2hheW9qcC91dGlsJztcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0JztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBTRlZhbHVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvcm1Qcm9wZXJ0eSB9IGZyb20gJy4uLy4uL21vZGVsL2Zvcm0ucHJvcGVydHknO1xuaW1wb3J0IHsgdG9Cb29sIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29udHJvbFVJV2lkZ2V0IH0gZnJvbSAnLi4vLi4vd2lkZ2V0JztcbmltcG9ydCB7IFNGRGF0ZVdpZGdldFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2YtZGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLndpZGdldC5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVXaWRnZXQgZXh0ZW5kcyBDb250cm9sVUlXaWRnZXQ8U0ZEYXRlV2lkZ2V0U2NoZW1hPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgc3RhcnRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBlbmRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBmbGF0UmFuZ2UgPSBmYWxzZTtcbiAgbW9kZTogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU6IERhdGUgfCBEYXRlW10gfCBudWxsID0gbnVsbDtcbiAgZGlzcGxheUZvcm1hdDogc3RyaW5nO1xuICBpOiBhbnk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBtb2RlLCBlbmQsIGRpc3BsYXlGb3JtYXQsIGFsbG93Q2xlYXIsIHNob3dUb2RheSB9ID0gdGhpcy51aTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlIHx8ICdkYXRlJztcbiAgICB0aGlzLmZsYXRSYW5nZSA9IGVuZCAhPSBudWxsO1xuICAgIC8vIOaehOW7uuWxnuaAp+WvueixoeaXtuS8muWvuem7mOiupOWAvOi/m+ihjOagoemqjO+8jOWboOatpOWPr+S7peebtOaOpeS9v+eUqCBmb3JtYXQg5L2c5Li65qC85byP5YyW5bGe5oCnXG4gICAgdGhpcy5zdGFydEZvcm1hdCA9IHRoaXMudWkuX2Zvcm1hdCE7XG4gICAgaWYgKHRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICB0aGlzLm1vZGUgPSAncmFuZ2UnO1xuICAgICAgY29uc3QgZW5kVWkgPSB0aGlzLmVuZFByb3BlcnR5LnVpIGFzIFNGRGF0ZVdpZGdldFNjaGVtYTtcbiAgICAgIHRoaXMuZW5kRm9ybWF0ID0gZW5kVWkuZm9ybWF0ID8gZW5kVWkuX2Zvcm1hdCA6IHRoaXMuc3RhcnRGb3JtYXQ7XG4gICAgfVxuICAgIGlmICghZGlzcGxheUZvcm1hdCkge1xuICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Rm9ybWF0ID0gYHl5eXlgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Rm9ybWF0ID0gYHl5eXktTU1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlGb3JtYXQgPSBgeXl5eS13d2A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgfVxuICAgIHRoaXMuaSA9IHtcbiAgICAgIGFsbG93Q2xlYXI6IHRvQm9vbChhbGxvd0NsZWFyLCB0cnVlKSxcbiAgICAgIC8vIG56LWRhdGUtcGlja2VyXG4gICAgICBzaG93VG9kYXk6IHRvQm9vbChzaG93VG9kYXksIHRydWUpLFxuICAgIH07XG4gIH1cblxuICByZXNldCh2YWx1ZTogU0ZWYWx1ZSk6IHZvaWQge1xuICAgIHZhbHVlID0gdG9EYXRlKHZhbHVlLCB7IGZvcm1hdFN0cmluZzogdGhpcy5zdGFydEZvcm1hdCwgZGVmYXVsdFZhbHVlOiBudWxsIH0pO1xuICAgIGlmICh0aGlzLmZsYXRSYW5nZSkge1xuICAgICAgY29uc3QgZW5kVmFsdWUgPSB0b0RhdGUodGhpcy5lbmRQcm9wZXJ0eS5mb3JtRGF0YSBhcyBOelNhZmVBbnksIHtcbiAgICAgICAgZm9ybWF0U3RyaW5nOiB0aGlzLmVuZEZvcm1hdCB8fCB0aGlzLnN0YXJ0Rm9ybWF0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUgPT0gbnVsbCB8fCBlbmRWYWx1ZSA9PSBudWxsID8gW10gOiBbdmFsdWUsIGVuZFZhbHVlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gVE9ETzogTmVlZCB0byB3YWl0IGZvciB0aGUgcmVuZGVyaW5nIHRvIGNvbXBsZXRlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBvZiBlbmQgd2lkZ2V0XG4gICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2NoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSwgZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBfY2hhbmdlKHZhbHVlOiBEYXRlIHwgRGF0ZVtdIHwgbnVsbCwgZW1pdE1vZGVsQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmIChlbWl0TW9kZWxDaGFuZ2UgJiYgdGhpcy51aS5jaGFuZ2UpIHtcbiAgICAgIHRoaXMudWkuY2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA8IDIpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5zZXRFbmQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gW2Zvcm1hdCh2YWx1ZVswXSwgdGhpcy5zdGFydEZvcm1hdCksIGZvcm1hdCh2YWx1ZVsxXSwgdGhpcy5lbmRGb3JtYXQgfHwgdGhpcy5zdGFydEZvcm1hdCldXG4gICAgICA6IGZvcm1hdCh2YWx1ZSwgdGhpcy5zdGFydEZvcm1hdCk7XG5cbiAgICBpZiAodGhpcy5mbGF0UmFuZ2UpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUocmVzWzBdKTtcbiAgICAgIHRoaXMuc2V0RW5kKHJlc1sxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUocmVzKTtcbiAgICB9XG4gIH1cblxuICBfb3BlbkNoYW5nZShzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy51aS5vbk9wZW5DaGFuZ2UpIHRoaXMudWkub25PcGVuQ2hhbmdlKHN0YXR1cyk7XG4gIH1cblxuICBfb2sodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVpLm9uT2spIHRoaXMudWkub25Payh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBlbmRQcm9wZXJ0eSgpOiBGb3JtUHJvcGVydHkge1xuICAgIHJldHVybiAodGhpcy5mb3JtUHJvcGVydHkucGFyZW50IS5wcm9wZXJ0aWVzIGFzIHsgW2tleTogc3RyaW5nXTogRm9ybVByb3BlcnR5IH0pW3RoaXMudWkuZW5kIV07XG4gIH1cblxuICBwcml2YXRlIHNldEVuZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mbGF0UmFuZ2UpIHJldHVybjtcblxuICAgIHRoaXMuZW5kUHJvcGVydHkuc2V0VmFsdWUodmFsdWUsIHRydWUpO1xuICAgIHRoaXMuZW5kUHJvcGVydHkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG59XG4iXX0=