@candidosales/material-time-picker
Version:
Time Picker for Angular
119 lines • 17.5 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from "@angular/core";
import { Utils } from "../utils";
import { WTimeDialogComponent } from "../w-time-dialog/w-time-dialog.component";
import { MatIcon } from "@angular/material/icon";
import { MatInput } from "@angular/material/input";
import { MatFormField, MatLabel, MatSuffix } from "@angular/material/form-field";
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
export class MaterialTimePickerComponent {
constructor(dialog) {
this.dialog = dialog;
this.label = "Hour";
this.appearance = "fill";
this.change = new EventEmitter();
}
ngOnInit() {
if (!this.userTime) {
this.userTime = {
hour: 0,
minute: 0,
meriden: "PM",
format: 24,
};
}
}
time() {
if (!this.userTime) {
return "";
}
let meriden = `${this.userTime.meriden}`;
if (this.userTime.format === 24) {
meriden = "";
}
let hour = `${this.userTime.hour}`;
if (this.userTime.hour === 24) {
hour = "00";
}
if (this.userTime.minute === 0) {
return `${hour}:00 ${meriden}`;
}
else if (this.userTime.minute < 10) {
const tt = "0" + String(this.userTime.minute);
return `${hour}:${tt} ${meriden}`;
}
else {
return `${hour}:${this.userTime.minute} ${meriden}`;
}
}
showPicker() {
const dialogRef = this.dialog.open(WTimeDialogComponent, {
data: {
time: {
hour: this.userTime.hour,
minute: this.userTime.minute,
meriden: this.userTime.meriden,
format: this.userTime.format,
},
color: this.color,
revertLabel: this.revertLabel,
submitLabel: this.submitLabel,
},
});
dialogRef.afterClosed().subscribe((result) => {
// result will be update userTime object or -1 or undefined (closed dialog w/o clicking cancel)
if (result === undefined) {
return;
}
else if (result !== -1) {
this.userTime = result;
const hour = result.hour;
const minute = result.minute;
const dataEvent = {
hour: Utils.formatHour(result.format, hour),
minute: Utils.formatMinute(minute),
meriden: this.userTime.meriden,
format: this.userTime.format,
};
this.emitChange(dataEvent);
}
});
return false;
}
emitChange(data) {
this.change.emit(data);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MaterialTimePickerComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: MaterialTimePickerComponent, isStandalone: true, selector: "material-timepicker", inputs: { label: "label", appearance: "appearance", userTime: "userTime", color: "color", revertLabel: "revertLabel", submitLabel: "submitLabel", disabled: "disabled", readonly: "readonly", classFormField: "classFormField" }, outputs: { change: "change" }, ngImport: i0, template: "<div class=\"d-flex flex-row w-mat-timepicker\">\n <mat-form-field class=\"d-flex {{classFormField}}\" class=\"timeContainer\" appearance=\"{{appearance}}\">\n <mat-label>{{ label }}</mat-label>\n <input matInput class=\"timeInput\" placeholder=\"Select time\" id=\"time_Control\" name=\"time_Control\" [value]=\"time()\" [disabled]=\"disabled\" [readonly]=\"readonly\">\n <mat-icon matSuffix (click)=\"showPicker()\">access_time</mat-icon>\n </mat-form-field>\n</div>\n", styles: [".d-flex{display:flex}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.justify-content-center{justify-content:center}.justify-content-between{justify-content:space-between}.align-items-center{align-items:center}.align-items-end{align-items:end}@media (min-width: 768px){.flex-md-row{flex-direction:row}.flex-md-column{flex-direction:column}}.time-picker-button{padding:0;margin:0;min-width:44px}.mat-mdc-form-field-flex{display:inline-flex;align-items:center;box-sizing:border-box;width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MaterialTimePickerComponent, decorators: [{
type: Component,
args: [{ selector: "material-timepicker", encapsulation: ViewEncapsulation.None, standalone: true, imports: [
MatFormField,
MatLabel,
MatInput,
MatIcon,
MatSuffix,
], template: "<div class=\"d-flex flex-row w-mat-timepicker\">\n <mat-form-field class=\"d-flex {{classFormField}}\" class=\"timeContainer\" appearance=\"{{appearance}}\">\n <mat-label>{{ label }}</mat-label>\n <input matInput class=\"timeInput\" placeholder=\"Select time\" id=\"time_Control\" name=\"time_Control\" [value]=\"time()\" [disabled]=\"disabled\" [readonly]=\"readonly\">\n <mat-icon matSuffix (click)=\"showPicker()\">access_time</mat-icon>\n </mat-form-field>\n</div>\n", styles: [".d-flex{display:flex}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.justify-content-center{justify-content:center}.justify-content-between{justify-content:space-between}.align-items-center{align-items:center}.align-items-end{align-items:end}@media (min-width: 768px){.flex-md-row{flex-direction:row}.flex-md-column{flex-direction:column}}.time-picker-button{padding:0;margin:0;min-width:44px}.mat-mdc-form-field-flex{display:inline-flex;align-items:center;box-sizing:border-box;width:100%}\n"] }]
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { label: [{
type: Input
}], appearance: [{
type: Input
}], userTime: [{
type: Input
}], color: [{
type: Input
}], revertLabel: [{
type: Input
}], submitLabel: [{
type: Input
}], disabled: [{
type: Input
}], readonly: [{
type: Input
}], classFormField: [{
type: Input
}], change: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC10aW1lLXBpY2tlci9zcmMvbGliL21hdGVyaWFsLXRpbWVwaWNrZXIvbWF0ZXJpYWwtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC10aW1lLXBpY2tlci9zcmMvbGliL21hdGVyaWFsLXRpbWVwaWNrZXIvbWF0ZXJpYWwtdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQWdCakYsTUFBTSxPQUFPLDJCQUEyQjtJQWdCdEMsWUFBb0IsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQWY1QixVQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2YsZUFBVSxHQUFHLE1BQU0sQ0FBQztRQVluQixXQUFNLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7SUFFMUIsQ0FBQztJQUV6QyxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkLElBQUks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QzdCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBSTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDOzhHQTdGVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixnVkM5QnhDLHllQU9BLHVqQkRnQlEsWUFBWSw0TEFDWixRQUFRLHNEQUNSLFFBQVEsaVVBQ1IsT0FBTywySUFDUCxTQUFTOzsyRkFHSiwyQkFBMkI7a0JBZHZDLFNBQVM7K0JBQ0kscUJBQXFCLGlCQUdoQixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFNBQVM7cUJBQ1o7OEVBR00sS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSVRpbWUgfSBmcm9tIFwiLi4vdy1jbG9jay93LWNsb2NrLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFdUaW1lRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIi4uL3ctdGltZS1kaWFsb2cvdy10aW1lLWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdFN1ZmZpeCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm1hdGVyaWFsLXRpbWVwaWNrZXJcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vbWF0ZXJpYWwtdGltZXBpY2tlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL21hdGVyaWFsLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBNYXRGb3JtRmllbGQsXG4gICAgICAgIE1hdExhYmVsLFxuICAgICAgICBNYXRJbnB1dCxcbiAgICAgICAgTWF0SWNvbixcbiAgICAgICAgTWF0U3VmZml4LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxhYmVsID0gXCJIb3VyXCI7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2UgPSBcImZpbGxcIjtcbiAgQElucHV0KCkgdXNlclRpbWU6IElUaW1lO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSByZXZlcnRMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJtaXRMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDbGFzcyB0byBwdXQgaW4gdGhlIGZvcm0tZmllbGRcbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzRm9ybUZpZWxkOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPElUaW1lPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVRpbWU+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMudXNlclRpbWUpIHtcbiAgICAgIHRoaXMudXNlclRpbWUgPSB7XG4gICAgICAgIGhvdXI6IDAsXG4gICAgICAgIG1pbnV0ZTogMCxcbiAgICAgICAgbWVyaWRlbjogXCJQTVwiLFxuICAgICAgICBmb3JtYXQ6IDI0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB0aW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnVzZXJUaW1lKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgbWVyaWRlbiA9IGAke3RoaXMudXNlclRpbWUubWVyaWRlbn1gO1xuICAgIGlmICh0aGlzLnVzZXJUaW1lLmZvcm1hdCA9PT0gMjQpIHtcbiAgICAgIG1lcmlkZW4gPSBcIlwiO1xuICAgIH1cblxuICAgIGxldCBob3VyID0gYCR7dGhpcy51c2VyVGltZS5ob3VyfWA7XG4gICAgaWYgKHRoaXMudXNlclRpbWUuaG91ciA9PT0gMjQpIHtcbiAgICAgIGhvdXIgPSBcIjAwXCI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlclRpbWUubWludXRlID09PSAwKSB7XG4gICAgICByZXR1cm4gYCR7aG91cn06MDAgJHttZXJpZGVufWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVzZXJUaW1lLm1pbnV0ZSA8IDEwKSB7XG4gICAgICBjb25zdCB0dCA9IFwiMFwiICsgU3RyaW5nKHRoaXMudXNlclRpbWUubWludXRlKTtcbiAgICAgIHJldHVybiBgJHtob3VyfToke3R0fSAke21lcmlkZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke2hvdXJ9OiR7dGhpcy51c2VyVGltZS5taW51dGV9ICR7bWVyaWRlbn1gO1xuICAgIH1cbiAgfVxuXG4gIHNob3dQaWNrZXIoKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihXVGltZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aW1lOiB7XG4gICAgICAgICAgaG91cjogdGhpcy51c2VyVGltZS5ob3VyLFxuICAgICAgICAgIG1pbnV0ZTogdGhpcy51c2VyVGltZS5taW51dGUsXG4gICAgICAgICAgbWVyaWRlbjogdGhpcy51c2VyVGltZS5tZXJpZGVuLFxuICAgICAgICAgIGZvcm1hdDogdGhpcy51c2VyVGltZS5mb3JtYXQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICByZXZlcnRMYWJlbDogdGhpcy5yZXZlcnRMYWJlbCxcbiAgICAgICAgc3VibWl0TGFiZWw6IHRoaXMuc3VibWl0TGFiZWwsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IElUaW1lIHwgLTEpID0+IHtcbiAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIHVwZGF0ZSB1c2VyVGltZSBvYmplY3Qgb3IgLTEgb3IgdW5kZWZpbmVkIChjbG9zZWQgZGlhbG9nIHcvbyBjbGlja2luZyBjYW5jZWwpXG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclRpbWUgPSByZXN1bHQ7XG5cbiAgICAgICAgY29uc3QgaG91ciA9IHJlc3VsdC5ob3VyO1xuICAgICAgICBjb25zdCBtaW51dGUgPSByZXN1bHQubWludXRlO1xuXG4gICAgICAgIGNvbnN0IGRhdGFFdmVudCA9IHtcbiAgICAgICAgICBob3VyOiBVdGlscy5mb3JtYXRIb3VyKHJlc3VsdC5mb3JtYXQsIGhvdXIpLFxuICAgICAgICAgIG1pbnV0ZTogVXRpbHMuZm9ybWF0TWludXRlKG1pbnV0ZSksXG4gICAgICAgICAgbWVyaWRlbjogdGhpcy51c2VyVGltZS5tZXJpZGVuLFxuICAgICAgICAgIGZvcm1hdDogdGhpcy51c2VyVGltZS5mb3JtYXQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZShkYXRhRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZShkYXRhKSB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChkYXRhKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyB3LW1hdC10aW1lcGlja2VyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImQtZmxleCB7e2NsYXNzRm9ybUZpZWxkfX1cIiBjbGFzcz1cInRpbWVDb250YWluZXJcIiBhcHBlYXJhbmNlPVwie3thcHBlYXJhbmNlfX1cIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cInRpbWVJbnB1dFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRpbWVcIiBpZD1cInRpbWVfQ29udHJvbFwiIG5hbWU9XCJ0aW1lX0NvbnRyb2xcIiBbdmFsdWVdPVwidGltZSgpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCI+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4IChjbGljayk9XCJzaG93UGlja2VyKClcIj5hY2Nlc3NfdGltZTwvbWF0LWljb24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==