sb-element
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]
111 lines • 17.8 kB
JavaScript
import { Component, Input } from '@angular/core';
import { mixinDisable, mixinFocus, Color, Size } from "../../../core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import * as fns from "date-fns";
import { SbDoubleInput } from "../../input";
import { MarkedDates } from "../../../calendar";
import * as i0 from "@angular/core";
import * as i1 from "../../../popper/popper/popper.component";
import * as i2 from "../../../calendar/calendar/calendar.component";
import * as i3 from "../../input/double-input/double-input.component";
import * as i4 from "../../../core/trigger/click-outside-trigger.directive";
import * as i5 from "@angular/forms";
const SbDateRangeInputCore = mixinDisable(mixinFocus(class {
}));
export class SbDateRangeInputComponent extends SbDateRangeInputCore {
constructor() {
super(...arguments);
this.color = Color.PRIMARY;
this.size = Size.MEDIUM;
this.format = 'yyyy-MM-dd';
this.markedDates = new MarkedDates();
this.pickerMarkedDates = new MarkedDates();
this.doubleInputDates = new SbDoubleInput();
this.onChange = () => { };
this.onTouch = () => { };
}
handlePickerSelect(date) {
if (this.pickerMarkedDates.isRangeDays || !this.pickerMarkedDates.start) {
this.pickerMarkedDates = new MarkedDates();
this.pickerMarkedDates.start = date;
}
else {
this.pickerMarkedDates.end = date;
}
if (this.doUpdate(this.pickerMarkedDates)) {
this.pickerMarkedDates.sort();
this.markedDates = this.pickerMarkedDates;
this.updateInput();
this.onChange(this.pickerMarkedDates);
}
}
handleInput(dates) {
const startDateString = dates.first;
const endDateString = dates.second;
var startDate = startDateString ? fns.parseISO(startDateString) : undefined;
var endDate = endDateString ? fns.parseISO(endDateString) : undefined;
const markedDates = new MarkedDates();
if (fns.isValid(startDate)) {
markedDates.start = startDate;
}
if (fns.isValid(endDate)) {
markedDates.end = endDate;
}
if (this.doUpdate(markedDates)) {
markedDates.sort();
this.markedDates = markedDates;
this.onChange(markedDates);
}
}
updateInput() {
if (this.markedDates.start && this.markedDates.end) {
this.doubleInputDates = new SbDoubleInput(fns.format(this.markedDates.start, this.format), fns.format(this.markedDates.end, this.format));
}
}
writeValue(dates) {
if (this.doUpdate(dates)) {
dates.sort();
this.markedDates = dates;
this.updateInput();
}
}
doUpdate(dates) {
if (dates && dates.start && dates.end) {
const isStartDateValid = fns.isValid(dates.start);
const isEndDateValid = fns.isValid(dates.end);
if (isStartDateValid && isEndDateValid) {
return true;
}
}
return false;
}
registerOnChange(fn) { this.onChange = fn; }
registerOnTouched(fn) { this.onTouch = fn; }
onBlur() { this.onTouch(); }
}
SbDateRangeInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbDateRangeInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
SbDateRangeInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: SbDateRangeInputComponent, selector: "sb-input[type=date-range]", inputs: { disabled: "disabled", color: "color", size: "size", format: "format" }, outputs: { focus: "focus", blur: "blur" }, providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDateRangeInputComponent,
multi: true
}], usesInheritance: true, ngImport: i0, template: "<sb-popper #dateRangePopper position=\"bottom\">\n <sb-calendar popper\n [color]=\"color\"\n [markedDates]=\"markedDates\"\n (select)=\"handlePickerSelect($event)\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n </sb-calendar>\n <sb-input\n content\n [size]=\"size\"\n [color]=\"color\"\n firstPlaceholder=\"Start\"\n secondPlaceholder=\"End\"\n [prefixIcon]=\"'\\ue878'\"\n type=\"double\"\n [ngModel]=\"doubleInputDates\"\n (ngModelChange)=\"handleInput($event)\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\"\n sbElClickOutsideTrigger\n [triggerable]=\"dateRangePopper\">\n </sb-input>\n</sb-popper>\n", components: [{ type: i1.SbPopperComponent, selector: "sb-popper", inputs: ["visible", "position"], outputs: ["show", "hide"] }, { type: i2.SbCalendarsComponent, selector: "sb-calendar", inputs: ["color", "disabled", "weekDayFormat", "monthFormat", "yearFormat", "monthYearFormat", "selectionMode", "markedDates"], outputs: ["focus", "blur", "select"] }, { type: i3.SbDoubleInputComponent, selector: "sb-input[type=double]", inputs: ["size", "color", "disabled", "firstPlaceholder", "secondPlaceholder", "delimiter", "type", "spellcheck", "prefixIcon", "suffixIcon"], outputs: ["focus", "blur"] }], directives: [{ type: i4.SbClickOutsideTriggerDirective, selector: "[sbElClickOutsideTrigger]", inputs: ["triggerable"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbDateRangeInputComponent, decorators: [{
type: Component,
args: [{ selector: 'sb-input[type=date-range]', inputs: [
'disabled'
], outputs: [
'focus',
'blur'
], providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: SbDateRangeInputComponent,
multi: true
}], template: "<sb-popper #dateRangePopper position=\"bottom\">\n <sb-calendar popper\n [color]=\"color\"\n [markedDates]=\"markedDates\"\n (select)=\"handlePickerSelect($event)\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\">\n </sb-calendar>\n <sb-input\n content\n [size]=\"size\"\n [color]=\"color\"\n firstPlaceholder=\"Start\"\n secondPlaceholder=\"End\"\n [prefixIcon]=\"'\\ue878'\"\n type=\"double\"\n [ngModel]=\"doubleInputDates\"\n (ngModelChange)=\"handleInput($event)\"\n (blur)=\"setFocusedState(false)\"\n (focus)=\"setFocusedState(true)\"\n [disabled]=\"disabled\"\n sbElClickOutsideTrigger\n [triggerable]=\"dateRangePopper\">\n </sb-input>\n</sb-popper>\n" }]
}], propDecorators: { color: [{
type: Input
}], size: [{
type: Input
}], format: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zYi1lbGVtZW50L3NyYy9saWIvZm9ybXMvZGF0ZS1pbnB1dC9kYXRlLXJhbmdlLWlucHV0L2RhdGUtcmFuZ2UtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2ItZWxlbWVudC9zcmMvbGliL2Zvcm1zL2RhdGUtaW5wdXQvZGF0ZS1yYW5nZS1pbnB1dC9kYXRlLXJhbmdlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBRWhELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztDQUFRLENBQUMsQ0FBQyxDQUFDO0FBa0JoRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsb0JBQW9CO0lBaEJuRTs7UUFtQlMsVUFBSyxHQUFXLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFHOUIsU0FBSSxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUM7UUFHM0IsV0FBTSxHQUFXLFlBQVksQ0FBQztRQUU5QixnQkFBVyxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLHNCQUFpQixHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3BELHFC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bmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1peGluRGlzYWJsZSwgbWl4aW5Gb2N1cywgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vLi4vY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgKiBhcyBmbnMgZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgeyBTYkRvdWJsZUlucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0XCI7XG5pbXBvcnQgeyBNYXJrZWREYXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jYWxlbmRhclwiO1xuXG5jb25zdCBTYkRhdGVSYW5nZUlucHV0Q29yZSA9IG1peGluRGlzYWJsZShtaXhpbkZvY3VzKGNsYXNzIHt9KSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLWlucHV0W3R5cGU9ZGF0ZS1yYW5nZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIGlucHV0czogW1xuICAgICdkaXNhYmxlZCdcbiAgXSxcbiAgb3V0cHV0czogW1xuICAgICdmb2N1cycsXG4gICAgJ2JsdXInXG4gIF0sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogU2JEYXRlUmFuZ2VJbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBTYkRhdGVSYW5nZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgU2JEYXRlUmFuZ2VJbnB1dENvcmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbG9yOiBzdHJpbmcgPSBDb2xvci5QUklNQVJZO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXplOiBzdHJpbmcgPSBTaXplLk1FRElVTTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9ybWF0OiBzdHJpbmcgPSAneXl5eS1NTS1kZCc7XG5cbiAgcHVibGljIG1hcmtlZERhdGVzOiBNYXJrZWREYXRlcyA9IG5ldyBNYXJrZWREYXRlcygpO1xuICBwcml2YXRlIHBpY2tlck1hcmtlZERhdGVzOiBNYXJrZWREYXRlcyA9IG5ldyBNYXJrZWREYXRlcygpO1xuICBwdWJsaWMgZG91YmxlSW5wdXREYXRlczogU2JEb3VibGVJbnB1dDxzdHJpbmc+ID0gbmV3IFNiRG91YmxlSW5wdXQoKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAoZGF0ZXM6IE1hcmtlZERhdGVzKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIHB1YmxpYyBoYW5kbGVQaWNrZXJTZWxlY3QoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlck1hcmtlZERhdGVzLmlzUmFuZ2VEYXlzIHx8ICF0aGlzLnBpY2tlck1hcmtlZERhdGVzLnN0YXJ0KSB7XG4gICAgICB0aGlzLnBpY2tlck1hcmtlZERhdGVzID0gbmV3IE1hcmtlZERhdGVzKCk7XG4gICAgICB0aGlzLnBpY2tlck1hcmtlZERhdGVzLnN0YXJ0ID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waWNrZXJNYXJrZWREYXRlcy5lbmQgPSBkYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kb1VwZGF0ZSh0aGlzLnBpY2tlck1hcmtlZERhdGVzKSkge1xuICAgICAgdGhpcy5waWNrZXJNYXJrZWREYXRlcy5zb3J0KCk7XG4gICAgICB0aGlzLm1hcmtlZERhdGVzID0gdGhpcy5waWNrZXJNYXJrZWREYXRlcztcbiAgICAgIHRoaXMudXBkYXRlSW5wdXQoKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5waWNrZXJNYXJrZWREYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUlucHV0KGRhdGVzOiBTYkRvdWJsZUlucHV0PHN0cmluZz4pOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydERhdGVTdHJpbmcgPSBkYXRlcy5maXJzdDtcbiAgICBjb25zdCBlbmREYXRlU3RyaW5nID0gZGF0ZXMuc2Vjb25kO1xuXG4gICAgdmFyIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZVN0cmluZyA/IGZucy5wYXJzZUlTTyhzdGFydERhdGVTdHJpbmcpIDogdW5kZWZpbmVkO1xuICAgIHZhciBlbmREYXRlID0gZW5kRGF0ZVN0cmluZyA/IGZucy5wYXJzZUlTTyhlbmREYXRlU3RyaW5nKSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG1hcmtlZERhdGVzID0gbmV3IE1hcmtlZERhdGVzKCk7XG5cbiAgICBpZiAoZm5zLmlzVmFsaWQoc3RhcnREYXRlKSkge1xuICAgICAgbWFya2VkRGF0ZXMuc3RhcnQgPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGZucy5pc1ZhbGlkKGVuZERhdGUpKSB7XG4gICAgICBtYXJrZWREYXRlcy5lbmQgPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRvVXBkYXRlKG1hcmtlZERhdGVzKSkge1xuICAgICAgbWFya2VkRGF0ZXMuc29ydCgpO1xuICAgICAgdGhpcy5tYXJrZWREYXRlcyA9IG1hcmtlZERhdGVzO1xuICAgICAgdGhpcy5vbkNoYW5nZShtYXJrZWREYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXJrZWREYXRlcy5zdGFydCAmJiB0aGlzLm1hcmtlZERhdGVzLmVuZCkge1xuICAgICAgdGhpcy5kb3VibGVJbnB1dERhdGVzID0gbmV3IFNiRG91YmxlSW5wdXQoXG4gICAgICAgIGZucy5mb3JtYXQodGhpcy5tYXJrZWREYXRlcy5zdGFydCwgdGhpcy5mb3JtYXQpLFxuICAgICAgICBmbnMuZm9ybWF0KHRoaXMubWFya2VkRGF0ZXMuZW5kLCB0aGlzLmZvcm1hdClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUoZGF0ZXM6IE1hcmtlZERhdGVzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9VcGRhdGUoZGF0ZXMpKSB7XG4gICAgICBkYXRlcy5zb3J0KCk7XG4gICAgICB0aGlzLm1hcmtlZERhdGVzID0gZGF0ZXM7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkb1VwZGF0ZShkYXRlczogTWFya2VkRGF0ZXMpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0ZXMgJiYgZGF0ZXMuc3RhcnQgJiYgZGF0ZXMuZW5kKSB7XG4gICAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gZm5zLmlzVmFsaWQoZGF0ZXMuc3RhcnQpO1xuICAgICAgY29uc3QgaXNFbmREYXRlVmFsaWQgPSBmbnMuaXNWYWxpZChkYXRlcy5lbmQpO1xuICAgICAgaWYgKGlzU3RhcnREYXRlVmFsaWQgJiYgaXNFbmREYXRlVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoZGF0ZXM6IE1hcmtlZERhdGVzKSA9PiB2b2lkKTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbiB9XG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaCA9IGZuIH1cbiAgcHJvdGVjdGVkIG9uQmx1cigpOiB2b2lkIHsgdGhpcy5vblRvdWNoKCkgfVxuXG59XG4iLCI8c2ItcG9wcGVyICNkYXRlUmFuZ2VQb3BwZXIgcG9zaXRpb249XCJib3R0b21cIj5cbiAgPHNiLWNhbGVuZGFyIHBvcHBlclxuICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgW21hcmtlZERhdGVzXT1cIm1hcmtlZERhdGVzXCJcbiAgICAoc2VsZWN0KT1cImhhbmRsZVBpY2tlclNlbGVjdCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJzZXRGb2N1c2VkU3RhdGUoZmFsc2UpXCJcbiAgICAoZm9jdXMpPVwic2V0Rm9jdXNlZFN0YXRlKHRydWUpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgPC9zYi1jYWxlbmRhcj5cbiAgPHNiLWlucHV0XG4gICAgY29udGVudFxuICAgIFtzaXplXT1cInNpemVcIlxuICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgZmlyc3RQbGFjZWhvbGRlcj1cIlN0YXJ0XCJcbiAgICBzZWNvbmRQbGFjZWhvbGRlcj1cIkVuZFwiXG4gICAgW3ByZWZpeEljb25dPVwiJ1xcdWU4NzgnXCJcbiAgICB0eXBlPVwiZG91YmxlXCJcbiAgICBbbmdNb2RlbF09XCJkb3VibGVJbnB1dERhdGVzXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJzZXRGb2N1c2VkU3RhdGUoZmFsc2UpXCJcbiAgICAoZm9jdXMpPVwic2V0Rm9jdXNlZFN0YXRlKHRydWUpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIHNiRWxDbGlja091dHNpZGVUcmlnZ2VyXG4gICAgW3RyaWdnZXJhYmxlXT1cImRhdGVSYW5nZVBvcHBlclwiPlxuICA8L3NiLWlucHV0PlxuPC9zYi1wb3BwZXI+XG4iXX0=