lite-datetime-picker
Version:
Spliced Angular Material date and time picker
109 lines • 17.6 kB
JavaScript
import { Component, Input, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/material/datepicker";
import * as i3 from "@angular/material/form-field";
import * as i4 from "@angular/material/input";
export class LiteDatetimePickerComponent {
constructor() {
this.isDisabled = false;
this.max = null;
this.min = null;
this.placeholder = 'Date';
this.step = null;
this.required = false;
this.onChange = () => { };
this.onTouched = () => { };
this._value = null;
}
get value() { return this._value; }
set value(val) {
this._value = val ? new Date(val) : null;
this.onChange(this._value);
this.onTouched();
}
get datePart() {
return this.value;
}
set datePart(val) {
const value = new Date(this.value || new Date().toDateString());
if (!!val && this.isValidDate(val)) {
value.setDate(val.getDate());
value.setMonth(val.getMonth());
value.setFullYear(val.getFullYear());
this.value = value;
}
else {
this.value = null;
}
}
get timePart() {
return this.value
? this.value.toTimeString().substr(0, 5)
: null;
}
set timePart(val) {
const value = new Date(this.value || new Date());
if (!!val && val.includes(':')) {
const subParts = val.split(':');
value.setHours(Number(subParts[0]));
value.setMinutes(Number(subParts[1]));
}
else {
value.setHours(0);
value.setMinutes(0);
}
this.value = value;
}
isValidDate(d) {
return d instanceof Date
&& !isNaN(d.getTime());
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
setDisabledState(isDisabled) {
this.isDisabled = isDisabled;
}
writeValue(value) {
if (value) {
this.value = value;
}
}
}
LiteDatetimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: LiteDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
LiteDatetimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: LiteDatetimePickerComponent, selector: "lft-lite-datetime-picker", inputs: { max: "max", min: "min", placeholder: "placeholder", step: "step", required: "required", _value: ["value", "_value"] }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => LiteDatetimePickerComponent),
multi: true
}
], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col\">\r\n <mat-form-field>\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input matInput\r\n [(ngModel)]=\"datePart\"\r\n (blur)=\"onTouched()\"\r\n [disabled]=\"isDisabled\"\r\n [matDatepicker]=\"datePicker\"\r\n [max]=\"max\"\r\n [min]=\"min\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col\">\r\n <mat-form-field>\r\n <input type=\"time\" matInput\r\n (blur)=\"onTouched()\"\r\n [(ngModel)]=\"timePart\"\r\n [disabled]=\"isDisabled || !datePart\"\r\n [step]=\"step\">\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n", styles: ["input[type=time]{height:18px}.row{display:flex}.row .col{flex:1;margin-right:20px;min-width:50px}.row .col:last-child{margin-right:0}.row .col>mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i4.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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: LiteDatetimePickerComponent, decorators: [{
type: Component,
args: [{ selector: 'lft-lite-datetime-picker', providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => LiteDatetimePickerComponent),
multi: true
}
], template: "<div class=\"row\">\r\n <div class=\"col\">\r\n <mat-form-field>\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input matInput\r\n [(ngModel)]=\"datePart\"\r\n (blur)=\"onTouched()\"\r\n [disabled]=\"isDisabled\"\r\n [matDatepicker]=\"datePicker\"\r\n [max]=\"max\"\r\n [min]=\"min\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col\">\r\n <mat-form-field>\r\n <input type=\"time\" matInput\r\n (blur)=\"onTouched()\"\r\n [(ngModel)]=\"timePart\"\r\n [disabled]=\"isDisabled || !datePart\"\r\n [step]=\"step\">\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n", styles: ["input[type=time]{height:18px}.row{display:flex}.row .col{flex:1;margin-right:20px;min-width:50px}.row .col:last-child{margin-right:0}.row .col>mat-form-field{width:100%}\n"] }]
}], propDecorators: { max: [{
type: Input
}], min: [{
type: Input
}], placeholder: [{
type: Input
}], step: [{
type: Input
}], required: [{
type: Input
}], _value: [{
type: Input,
args: ['value']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl0ZS1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGl0ZS1kYXRldGltZS1waWNrZXIvc3JjL2xpYi9saXRlLWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saXRlLWRhdGV0aW1lLXBpY2tlci9zcmMvbGliL2xpdGUtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWN6RSxNQUFNLE9BQU8sMkJBQTJCO0lBWnhDO1FBYUksZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNWLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRUgsV0FBTSxHQUFnQixJQUFJLENBQUM7S0FxRXREO0lBcEVHLElBQVksS0FBSyxLQUFrQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQVksS0FBSyxDQUFDLEdBQUc7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJ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Q2JMLDRnQ0EyQkE7MkZEWmEsMkJBQTJCO2tCQVp2QyxTQUFTOytCQUNJLDBCQUEwQixhQUd6Qjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7OEJBSVEsR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtrQixNQUFNO3NCQUE3QixLQUFLO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsZnQtbGl0ZS1kYXRldGltZS1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpdGUtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2xpdGUtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMaXRlRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpdGVEYXRldGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG1heDogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgQElucHV0KCkgbWluOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdEYXRlJztcclxuICAgIEBJbnB1dCgpIHN0ZXA6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgQElucHV0KCd2YWx1ZScpIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7IHJldHVybiB0aGlzLl92YWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBzZXQgdmFsdWUodmFsKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWwgPyBuZXcgRGF0ZSh2YWwpIDogbnVsbDtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkYXRlUGFydCgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0ZVBhcnQodmFsKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlIHx8IG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICBpZiAoISF2YWwgJiYgdGhpcy5pc1ZhbGlkRGF0ZSh2YWwpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldERhdGUodmFsLmdldERhdGUoKSk7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldE1vbnRoKHZhbC5nZXRNb250aCgpKTtcclxuICAgICAgICAgICAgdmFsdWUuc2V0RnVsbFllYXIodmFsLmdldEZ1bGxZZWFyKCkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgdGltZVBhcnQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcclxuICAgICAgICAgICAgPyB0aGlzLnZhbHVlLnRvVGltZVN0cmluZygpLnN1YnN0cigwLCA1KVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBzZXQgdGltZVBhcnQodmFsKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlIHx8IG5ldyBEYXRlKCkpO1xyXG5cclxuICAgICAgICBpZiAoISF2YWwgJiYgdmFsLmluY2x1ZGVzKCc6JykpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViUGFydHMgPSB2YWwuc3BsaXQoJzonKTtcclxuXHJcbiAgICAgICAgICAgIHZhbHVlLnNldEhvdXJzKE51bWJlcihzdWJQYXJ0c1swXSkpO1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKE51bWJlcihzdWJQYXJ0c1sxXSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNldEhvdXJzKDApO1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZVxyXG4gICAgICAgICAgICAmJiAhaXNOYU4oZC5nZXRUaW1lKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGVQYXJ0XCJcclxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlUGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0aW1lXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGltZVBhcnRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgIWRhdGVQYXJ0XCJcclxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=