ngx-pluto
Version:
229 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, ElementRef, ViewChild, Output, EventEmitter } from "@angular/core";
import * as moment_ from 'moment';
/** @type {?} */
var moment = moment_;
import { NpDatePickerService } from "../date-picker.service";
import { NotifyService } from "../../shared/services/notify.service";
/**
* @ignore
*/
var NpTimePickerPanel = /** @class */ (function () {
function NpTimePickerPanel(datePickerService, notifyService) {
this.datePickerService = datePickerService;
this.notifyService = notifyService;
this.onTimeClicked = new EventEmitter();
this.onConfirmClicked = new EventEmitter();
this.hours = [];
this.minutes = [];
this.seconds = [];
this.selectedHour = '';
this.selectedMinute = '';
this.selectedSecond = '';
}
/**
* @return {?}
*/
NpTimePickerPanel.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.buildData();
};
/**
* @param {?} changes
* @return {?}
*/
NpTimePickerPanel.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
/** @type {?} */
var time = (/** @type {?} */ (changes['time'].currentValue));
};
/**
* @param {?} hour
* @return {?}
*/
NpTimePickerPanel.prototype.onHourClicked = /**
* @param {?} hour
* @return {?}
*/
function (hour) {
this.selectedHour = hour;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
};
/**
* @param {?} minute
* @return {?}
*/
NpTimePickerPanel.prototype.onMinuteClicked = /**
* @param {?} minute
* @return {?}
*/
function (minute) {
this.selectedMinute = minute;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
};
/**
* @param {?} second
* @return {?}
*/
NpTimePickerPanel.prototype.onSecondClicked = /**
* @param {?} second
* @return {?}
*/
function (second) {
this.selectedSecond = second;
this.buildSelectedTime();
this.onTimeClicked.emit(this.time);
};
/**
* @return {?}
*/
NpTimePickerPanel.prototype.onConfirmButtonClicked = /**
* @return {?}
*/
function () {
this.onConfirmClicked.emit(this.time);
};
/**
* 根据传入时间滚动到指定时间位置
* @param time 当前传入时间,格式为@link TIME_FORMAT
*/
/**
* 根据传入时间滚动到指定时间位置
* @param {?} time 当前传入时间,格式为\@link TIME_FORMAT
* @return {?}
*/
NpTimePickerPanel.prototype.scrollTo = /**
* 根据传入时间滚动到指定时间位置
* @param {?} time 当前传入时间,格式为\@link TIME_FORMAT
* @return {?}
*/
function (time) {
/** @type {?} */
var itemHeight = 28;
this.selectedHour = time.split(':')[0];
this.selectedMinute = time.split(':')[1];
this.selectedSecond = time.split(':')[2];
this.hoursElementRef.nativeElement.scrollTo({
top: +this.selectedHour * itemHeight
});
this.minutesElementRef.nativeElement.scrollTo({
top: +this.selectedMinute * itemHeight
});
this.secondsElementRef.nativeElement.scrollTo({
top: +this.selectedSecond * itemHeight
});
};
/**
* @private
* @return {?}
*/
NpTimePickerPanel.prototype.buildData = /**
* @private
* @return {?}
*/
function () {
for (var i = 0; i < 24; i++) {
this.hours.push((i + '').padStart(2, '0'));
}
for (var i = 0; i < 60; i++) {
this.minutes.push((i + '').padStart(2, '0'));
}
for (var i = 0; i < 60; i++) {
this.seconds.push((i + '').padStart(2, '0'));
}
};
/**
* @private
* @return {?}
*/
NpTimePickerPanel.prototype.buildSelectedTime = /**
* @private
* @return {?}
*/
function () {
this.time = this.selectedHour;
if (this.selectedMinute) {
this.time += ':' + this.selectedMinute;
}
if (this.selectedSecond) {
this.time += ':' + this.selectedSecond;
}
this.scrollTo(this.time);
};
NpTimePickerPanel.decorators = [
{ type: Component, args: [{
selector: "np-time-picker-panel",
template: "<div class=\"np-time-picker-panel flex-wrap col-flex\">\r\n <div class=\"time-picker-header\">{{ time }}</div>\r\n <div class=\"time-picker-body flex-wrap row-flex\">\r\n <div #hoursElementRef class=\"hours flex-wrap col-flex\">\r\n <span *ngFor=\"let hour of hours\" [ngClass]=\"{'selected-item': selectedHour === hour}\"\r\n (click)=\"onHourClicked(hour)\">{{ hour }}</span>\r\n </div>\r\n <div #minutesElementRef class=\"minutes flex-wrap col-flex\">\r\n <span *ngFor=\"let minute of minutes\" [ngClass]=\"{'selected-item': selectedMinute === minute}\"\r\n (click)=\"onMinuteClicked(minute)\">{{ minute }}</span>\r\n </div>\r\n <div #secondsElementRef class=\"seconds flex-wrap col-flex\">\r\n <span *ngFor=\"let second of seconds\" [ngClass]=\"{'selected-item': selectedSecond === second}\"\r\n (click)=\"onSecondClicked(second)\">{{ second }}</span>\r\n </div>\r\n </div>\r\n <div class=\"time-picker-footer flex-wrap col-flex\">\r\n <np-button *ngIf=\"confirmButtonText\" (click)=\"onConfirmButtonClicked()\">{{ confirmButtonText }}</np-button>\r\n </div>\r\n</div>\r\n",
encapsulation: ViewEncapsulation.None,
styles: [".np-time-picker-panel{width:169px}.np-time-picker-panel .time-picker-header{height:41px;line-height:41px;text-align:center;font-weight:500}.np-time-picker-panel .time-picker-body{height:232px;justify-content:space-between}.np-time-picker-panel .time-picker-body .hours,.np-time-picker-panel .time-picker-body .minutes,.np-time-picker-panel .time-picker-body .seconds{width:56px;flex-wrap:nowrap;overflow:hidden;padding-bottom:204px;scroll-behavior:smooth}.np-time-picker-panel .time-picker-body .hours:hover,.np-time-picker-panel .time-picker-body .minutes:hover,.np-time-picker-panel .time-picker-body .seconds:hover{overflow-y:auto}.np-time-picker-panel .time-picker-body .hours:hover>span,.np-time-picker-panel .time-picker-body .minutes:hover>span,.np-time-picker-panel .time-picker-body .seconds:hover>span{margin-left:-8.5px}.np-time-picker-panel .time-picker-body .hours>span,.np-time-picker-panel .time-picker-body .minutes>span,.np-time-picker-panel .time-picker-body .seconds>span{width:56px;height:28px;text-align:center;line-height:28px}.np-time-picker-panel .time-picker-footer{height:41px;justify-content:center;align-items:flex-end}.np-time-picker-panel .time-picker-footer .np-button-wrapper{width:auto;letter-spacing:initial;font-size:13px;line-height:16px}"]
}] }
];
/** @nocollapse */
NpTimePickerPanel.ctorParameters = function () { return [
{ type: NpDatePickerService },
{ type: NotifyService }
]; };
NpTimePickerPanel.propDecorators = {
time: [{ type: Input }],
confirmButtonText: [{ type: Input }],
onTimeClicked: [{ type: Output }],
onConfirmClicked: [{ type: Output }],
hoursElementRef: [{ type: ViewChild, args: ['hoursElementRef',] }],
minutesElementRef: [{ type: ViewChild, args: ['minutesElementRef',] }],
secondsElementRef: [{ type: ViewChild, args: ['secondsElementRef',] }]
};
return NpTimePickerPanel;
}());
export { NpTimePickerPanel };
if (false) {
/**
* 传入time,格式为‘HH:mm:ss,如23:59:59’
* @type {?}
*/
NpTimePickerPanel.prototype.time;
/** @type {?} */
NpTimePickerPanel.prototype.confirmButtonText;
/** @type {?} */
NpTimePickerPanel.prototype.onTimeClicked;
/** @type {?} */
NpTimePickerPanel.prototype.onConfirmClicked;
/** @type {?} */
NpTimePickerPanel.prototype.hoursElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.minutesElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.secondsElementRef;
/** @type {?} */
NpTimePickerPanel.prototype.hours;
/** @type {?} */
NpTimePickerPanel.prototype.minutes;
/** @type {?} */
NpTimePickerPanel.prototype.seconds;
/** @type {?} */
NpTimePickerPanel.prototype.selectedHour;
/** @type {?} */
NpTimePickerPanel.prototype.selectedMinute;
/** @type {?} */
NpTimePickerPanel.prototype.selectedSecond;
/**
* @type {?}
* @private
*/
NpTimePickerPanel.prototype.datePickerService;
/**
* @type {?}
* @private
*/
NpTimePickerPanel.prototype.notifyService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXItcGFuZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZGF0ZS1waWNrZXIvY29tcG9uZW50cy90aW1lLXBpY2tlci1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7SUFBTyxNQUFNLEdBQUcsT0FBTztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFLckU7SUF5QkksMkJBQW9CLGlCQUFzQyxFQUM5QyxhQUE0QjtRQURwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBZjlCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXhELFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO0lBR2dCLENBQUM7Ozs7SUFFN0Msb0NBQVE7OztJQUFSO1FBQ0ksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Ozs7O0lBRUQsdUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCOztZQUN4QixJQUFJLEdBQVcsbUJBQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxD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ImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uSW5pdCwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7IGNvbnN0IG1vbWVudCA9IG1vbWVudF9cclxuaW1wb3J0IHsgTnBEYXRlUGlja2VyU2VydmljZSB9IGZyb20gXCIuLi9kYXRlLXBpY2tlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5vdGlmeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3NlcnZpY2VzL25vdGlmeS5zZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogYG5wLXRpbWUtcGlja2VyLXBhbmVsYCxcclxuICAgIHRlbXBsYXRlVXJsOiAndGltZS1waWNrZXItcGFuZWwuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsndGltZS1waWNrZXItcGFuZWwuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnBUaW1lUGlja2VyUGFuZWwgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgLyoq5Lyg5YWldGltZe+8jOagvOW8j+S4uuKAmEhIOm1tOnNz77yM5aaCMjM6NTk6NTnigJkgKi9cclxuICAgIEBJbnB1dCgpIHRpbWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uVGltZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvbmZpcm1DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnaG91cnNFbGVtZW50UmVmJykgaG91cnNFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ21pbnV0ZXNFbGVtZW50UmVmJykgbWludXRlc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnc2Vjb25kc0VsZW1lbnRSZWYnKSBzZWNvbmRzRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgaG91cnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIG1pbnV0ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHNlY29uZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHNlbGVjdGVkSG91cjogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZFNlY29uZDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlja2VyU2VydmljZTogTnBEYXRlUGlja2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IE5vdGlmeVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYnVpbGREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IHRpbWU6IHN0cmluZyA9IGNoYW5nZXNbJ3RpbWUnXS5jdXJyZW50VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSG91ckNsaWNrZWQoaG91cjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3VyO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZWxlY3RlZFRpbWUoKTtcclxuICAgICAgICB0aGlzLm9uVGltZUNsaWNrZWQuZW1pdCh0aGlzLnRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWludXRlQ2xpY2tlZChtaW51dGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGU7XHJcbiAgICAgICAgdGhpcy5idWlsZFNlbGVjdGVkVGltZSgpO1xyXG4gICAgICAgIHRoaXMub25UaW1lQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWNvbmRDbGlja2VkKHNlY29uZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZCA9IHNlY29uZDtcclxuICAgICAgICB0aGlzLmJ1aWxkU2VsZWN0ZWRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5vblRpbWVDbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbmZpcm1CdXR0b25DbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMub25Db25maXJtQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmoLnmja7kvKDlhaXml7bpl7Tmu5rliqjliLDmjIflrprml7bpl7TkvY3nva5cclxuICAgICAqIEBwYXJhbSB0aW1lIOW9k+WJjeS8oOWFpeaXtumXtO+8jOagvOW8j+S4ukBsaW5rIFRJTUVfRk9STUFUXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbFRvKHRpbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSAyODsgICAvLyBlYWNoIGl0ZW0gaGVpZ2h0IGlzIDI4cHhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRpbWUuc3BsaXQoJzonKVswXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGltZS5zcGxpdCgnOicpWzFdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmQgPSB0aW1lLnNwbGl0KCc6JylbMl07XHJcblxyXG4gICAgICAgIHRoaXMuaG91cnNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkSG91ciAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5taW51dGVzRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgdG9wOiArdGhpcy5zZWxlY3RlZE1pbnV0ZSAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWNvbmRzRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcclxuICAgICAgICAgICAgdG9wOiArdGhpcy5zZWxlY3RlZFNlY29uZCAqIGl0ZW1IZWlnaHRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRGF0YSgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ob3Vycy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlcy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcy5wdXNoKChpICsgJycpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkU2VsZWN0ZWRUaW1lKCkge1xyXG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMuc2VsZWN0ZWRIb3VyO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSArPSAnOicgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWNvbmQpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lICs9ICc6JyArIHRoaXMuc2VsZWN0ZWRTZWNvbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMudGltZSk7XHJcbiAgICB9XHJcbn0iXX0=