{"version":3,"file":"deja-js-component-date-selector.mjs","sources":["../../../../projects/deja-js/component/date-selector/date-selector.component.ts","../../../../projects/deja-js/component/date-selector/date-selector.component.html","../../../../projects/deja-js/component/date-selector/date-selector-item.model.ts","../../../../projects/deja-js/component/date-selector/index.ts","../../../../projects/deja-js/component/date-selector/deja-js-component-date-selector.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Optional, Output, Self, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { Destroy, KeyCodes } from '@deja-js/component/core';\nimport { format } from 'date-fns';\nimport { debounceTime, filter, fromEvent, mergeWith, Subject, takeUntil, tap } from 'rxjs';\n\nimport { IDateSelectorItem } from './date-selector-item.model';\n\n\nexport enum DaysOfWeek {\n    Sunday = 0,\n    Monday = 1,\n    Tuesday = 2,\n    Wednesday = 3,\n    Thursday = 4,\n    Friday = 5,\n    Saturday = 6,\n}\n\nexport enum DateComponentLayout {\n    dateonly = 1,\n    datetime,\n    timeonly,\n}\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    selector: 'deja-date-time-selector',\n    styleUrls: ['./date-selector.scss'],\n    templateUrl: './date-selector.component.html'\n})\nexport class DejaDateSelectorComponent extends Destroy implements OnInit, ControlValueAccessor {\n    @Input() public startDay: DaysOfWeek = DaysOfWeek.Monday;\n    @Input() public disableDates: Array<(DaysOfWeek | Date)>; // | ((d: Date) => boolean);\n    @Input() public dateMax: Date;\n    @Input() public dateMin: Date;\n    @Input() public format: string;\n\n    @Output() public readonly dateChange = new EventEmitter();\n    @Output() public readonly timeChange = new EventEmitter();\n\n    public _local = 'fr';\n    public layoutClass: string;\n    public layoutId: number;\n\n    public zeroHourDate = new Date(0, 0, 0, 0, 0, 0, 0);\n\n    private _keyboardNavigation = false;\n    private _keyboardNavigation$ = new Subject<boolean>();\n\n    public get keyboardNavigation(): boolean {\n        return this._keyboardNavigation;\n    }\n\n    public get displayedDate(): Date {\n        return this._displayedDate;\n    }\n\n    public get local(): string {\n        return this._local;\n    }\n\n    private _currentDays: IDateSelectorItem[];\n    private _currentDate: Date = new Date();\n\n    private selectedDate: Date;\n    private _displayedDate = new Date();\n\n    private _days = [] as string[];\n    private _emptyDays: number[];\n    private _time: boolean;\n    private _disabled: boolean;\n\n    /**\n     * Component Layout\n     */\n    @Input()\n    public set layout(value: DateComponentLayout | string) {\n        if (value) {\n            if (typeof value === 'string') {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                this.layoutId = (<any>DateComponentLayout)[value];\n                if (!this.layoutId) {\n                    throw new Error('Invalid type for DateComponentLayout');\n                }\n                this.layoutClass = value;\n            } else {\n                this.layoutId = value;\n                this.layoutClass = DateComponentLayout[value];\n            }\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /**\n     * Time property setter. Can be string or empty so you can use it like : <deja-date-selector time></deja-date-selector>\n     * Used to add time selector next to calendar\n     */\n    @Input()\n    public set time(value: BooleanInput) {\n        this._time = coerceBooleanProperty(value) ? true : null;\n        if (this._time) {\n            this.layout = DateComponentLayout.datetime;\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Time property getter. */\n    public get time(): BooleanInput {\n        return this._time;\n    }\n\n    public get days(): string[] {\n        return this._days;\n    }\n\n    public get emptyDays(): number[] {\n        return this._emptyDays;\n    }\n\n    public get currentDate(): Date {\n        return this._currentDate;\n    }\n\n    public get currentDays(): IDateSelectorItem[] {\n        return this._currentDays;\n    }\n\n    /** Disabled property setter. Can be string or empty so you can use it like : <deja-date-selector disabled></deja-date-selector> */\n    @Input()\n    public set disabled(value: BooleanInput) {\n        this._disabled = coerceBooleanProperty(value) ? true : null;\n        // this.changeDetectorRef.markForCheck();\n        this.bind();\n    }\n\n    /** Disabled property getter. */\n    public get disabled(): BooleanInput {\n        return this._disabled;\n    }\n\n    public constructor(elementRef: ElementRef, private changeDetectorRef: ChangeDetectorRef, @Self() @Optional() public _control: NgControl) {\n        super();\n\n        const element = elementRef.nativeElement as HTMLElement;\n\n        if (this._control) {\n            this._control.valueAccessor = this;\n        }\n\n        fromEvent<MouseEvent>(element, 'mousedown').pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            event.stopPropagation();\n            event.preventDefault();\n            return false;\n        });\n\n        fromEvent<Event>(element, 'click').pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            const target = event.target as HTMLElement;\n            if (target.hasAttribute('dateindex')) {\n                const dateSelectorItem = this._currentDays[+target.getAttribute('dateindex')];\n                if (!dateSelectorItem.disabled) {\n                    const val = new Date(dateSelectorItem.date);\n                    if (this._displayedDate) {\n                        val.setHours(this._displayedDate.getHours(), this._displayedDate.getMinutes(), this._displayedDate.getSeconds(), this._displayedDate.getMilliseconds());\n                    }\n                    this.value = val;\n                    this.dateChange.emit(this.value);\n                }\n            }\n        });\n\n        this._keyboardNavigation$.pipe(\n            mergeWith(fromEvent<MouseEvent>(element, 'mouseleave'), fromEvent<Event>(element, 'click')),\n            filter(() => this._keyboardNavigation),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this._keyboardNavigation = false;\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this._keyboardNavigation$.pipe(\n            filter(value => value),\n            tap(value => this._keyboardNavigation = value),\n            debounceTime(2000),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this._keyboardNavigation$.next(false));\n\n        this.layout = DateComponentLayout.dateonly;\n    }\n\n    public ngOnInit(): void {\n        if (!this._displayedDate) {\n            this._displayedDate = this._currentDate;\n            this.bind();\n        }\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    // set accessor including call the onchange callback\n    public set value(v: Date) {\n        if (v !== this.selectedDate) {\n            this.writeValue(v);\n            this.onChangeCallback(v);\n        }\n    }\n\n    // get accessor\n    public get value(): Date {\n        return this.selectedDate;\n    }\n\n    // From ControlValueAccessor interface\n    public writeValue(value: Date | string): void {\n        if (value instanceof Date && value !== this.selectedDate) {\n            const clone = new Date(value.getTime());\n            if (this.selectedDate) {\n                // When using a date-picker without time keep the time specified in the selectedDate when changing date\n                if (this.layoutId === 1 && this.selectedDate.toLocaleDateString() !== clone.toLocaleDateString()) {\n                    clone.setHours(this.selectedDate.getHours(), this.selectedDate.getMinutes(), this.selectedDate.getSeconds());\n                }\n            }\n            this.selectedDate = clone;\n            this._displayedDate = clone || this._currentDate;\n        } else {\n            this._displayedDate = this._currentDate;\n        }\n        this.bind();\n    }\n\n    // From ControlValueAccessor interface\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    // From ControlValueAccessor interface\n    public registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    // ************* End of ControlValueAccessor Implementation **************\n\n    /**\n     * @param month (attention : Janvier = 0, Décembre = 11)\n     * @param year\n     * @return Jours du mois au format IDateSelectorItem\n     */\n    public getAllDaysInMonth(month: number, year: number): IDateSelectorItem[] {\n        const days: IDateSelectorItem[] = [];\n\n        let day = 1;\n        let date = new Date(year, month, day);\n\n        // eslint-disable-next-line no-loops/no-loops\n        while (date.getDay() !== this.startDay) {\n            date = new Date(year, month, --day);\n            const dateSelectorItem: IDateSelectorItem = {\n                background: true,\n                date: date\n            };\n            days.splice(0, 0, dateSelectorItem);\n        }\n\n        let d = 0;\n        // eslint-disable-next-line no-loops/no-loops\n        for (d = 1; d <= this.daysInMonth(month + 1, year); d++) {\n            date = new Date(year, month, d);\n\n            const dateSelectorItem = {\n                currentDate: (this._currentDate.setHours(0, 0, 0, 0) === date.setHours(0, 0, 0, 0)) ? true : null,\n                date: date\n            };\n            days.push(dateSelectorItem);\n        }\n\n        // eslint-disable-next-line no-loops/no-loops, no-constant-condition\n        while (true) {\n            date = new Date(year, month, d);\n            if (date.getDay() === this.startDay) {\n                break;\n            } else {\n                const dateSelectorItem = {\n                    background: true,\n                    date: date\n                };\n                days.push(dateSelectorItem);\n                d++;\n            }\n        }\n\n        // Il nous faut 6 lignes de 7 jours pour correspondre à tous les mois. 6*7=42\n        // Du coup on ajoute une ligne vide quand c'est nécessaire\n        if (days.length < 42) {\n            const x = 42 - days.length;\n            this._emptyDays = new Array<number>(x);\n        } else {\n            this._emptyDays = null;\n        }\n\n        return days;\n    }\n\n    public daysInMonth(month: number, year: number): number {\n        return new Date(year, month, 0).getDate();\n    }\n\n    public keyDown(event: KeyboardEvent): boolean {\n        if (this.disabled) {\n            return undefined;\n        }\n\n        if (!this.selectedDate) {\n            this.selectedDate = new Date(this._currentDate);\n        }\n\n        this._keyboardNavigation$.next(true);\n        let d: Date;\n        switch (event.code) {\n            case KeyCodes.PageUp:\n            case KeyCodes.PageDown:\n            case KeyCodes.UpArrow:\n            case KeyCodes.DownArrow:\n            case KeyCodes.LeftArrow:\n            case KeyCodes.RightArrow:\n                event.preventDefault();\n                d = new Date(this.selectedDate);\n                switch (event.code) {\n                    case KeyCodes.PageUp:\n                        // d.setMonth(d.getMonth() - 1);\n                        this.setMonthIfPossible(d, -1);\n                        break;\n                    case KeyCodes.PageDown:\n                        // d.setMonth(d.getMonth() + 1);\n                        this.setMonthIfPossible(d, 1);\n                        break;\n                    case KeyCodes.UpArrow:\n                        // d.setDate(d.getDate() - 7);\n                        this.setDateIfPossible(d, -7);\n                        break;\n                    case KeyCodes.DownArrow:\n                        // d.setDate(d.getDate() + 7);\n                        this.setDateIfPossible(d, 7);\n                        break;\n                    case KeyCodes.LeftArrow:\n                        // d.setDate(d.getDate() - 1);\n                        this.setDateIfPossible(d, -1);\n                        break;\n                    case KeyCodes.RightArrow:\n                        // d.setDate(d.getDate() + 1);\n                        this.setDateIfPossible(d, 1);\n                        break;\n                    default:\n                        break;\n                }\n                // this.selectedDate = d;\n                // this._displayedDate = d;\n                // this.bind();\n                break;\n            case KeyCodes.Space:\n            case KeyCodes.Enter:\n                event.preventDefault();\n                this.onChangeCallback(this.selectedDate);\n                break;\n\n            default:\n                return true;\n        }\n        return undefined;\n    }\n\n    public changeMonth(x: number): boolean {\n        this.setMonthIfPossible(this._displayedDate, x);\n        return false;\n    }\n\n    public changeYear(x: number): boolean {\n        this.setYearIfPossible(this._displayedDate, x);\n        return false;\n    }\n\n    public updateTime(hours: Date): void {\n        let d: Date;\n\n        if (this.selectedDate) {\n            d = new Date(this.selectedDate);\n        } else {\n            d = new Date();\n            d.setHours(0, 0, 0, 0);\n        }\n\n        if (hours) {\n            d.setHours(hours.getHours(), hours.getMinutes(), hours.getSeconds(), hours.getMilliseconds());\n        } else {\n            d.setHours(0, 0, 0, 0);\n        }\n        this.value = d;\n        this.timeChange.emit(this.value);\n    }\n\n    public getDisplayedDate(): string {\n        return this.getDateLabel(this.displayedDate);\n    }\n\n    public getSelectedDate(): string {\n        return this.getDateLabel(this.selectedDate);\n    }\n\n    public onTouchedCallback = (): void => undefined;\n    public onChangeCallback = (_a?: unknown): void => undefined;\n\n    private getDateLabel(date: Date): string {\n        if (!date) {\n            return '-';\n        }\n        const sb = new Array<string>();\n        if (!this.format) {\n            if (this.layoutId < 3) {\n                sb.push(date?.toLocaleDateString());\n            }\n            if (this.layoutId > 1) {\n                const hours = `0${date.getHours()}`;\n                const minutes = `0${date.getMinutes()}`;\n                sb.push(`${hours.slice(-2)}:${minutes.slice(-2)}`);\n            }\n        } else {\n            sb.push((date && this.format && format(date, this.format)) || date?.toLocaleDateString());\n        }\n\n        return sb.join('&nbsp;&nbsp;');\n    }\n\n    private bind(): void {\n        const month = this._displayedDate.getMonth();\n        const year = this._displayedDate.getFullYear();\n\n        this._currentDays = this.getAllDaysInMonth(month, year);\n\n        this._currentDays.forEach((day: IDateSelectorItem) => day.disabled = this.isDisabledDate(day.date));\n\n        // eslint-disable-next-line no-loops/no-loops\n        for (let i = 0; i < 7; i++) {\n            this._days[i] = this._currentDays[i].date.toLocaleString('fr', { weekday: 'narrow' });\n        }\n\n        if (this.selectedDate && this.selectedDate.getFullYear() === year && this.selectedDate.getMonth() === month) {\n            const selectedDay = this.selectedDate.getDate();\n            this._currentDays.forEach((day: IDateSelectorItem) => day.selected = day.date.getDate() === selectedDay && day.date.getMonth() === month);\n        }\n\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /**\n     * Vérifie si la date passée en param est désactivée.\n     *\n     * @param date\n     * @return sera false si this.disableDates n'existe pas / n'est pas un tableau,\n     *         si la date envoyée en param est valide,\n     *         si la date est superieure a dateMax\n     *         ou si la date est inférieure a dateMin\n     */\n    private isDisabledDate(date: Date): boolean {\n        if (this._disabled) {\n            return true;\n        }\n        if (this.disableDates && this.disableDates instanceof Array) {\n            const find = this.disableDates.find((d: Date | number) => {\n                if (typeof d === 'number') {\n                    return d === date.getDay();\n                } else {\n                    return d.toLocaleDateString() === date.toLocaleDateString();\n                }\n            });\n\n            if (typeof find !== 'undefined') {\n                return true;\n            }\n        }\n\n        if ((this.dateMax && date.getTime() > this.dateMax.getTime()) || (this.dateMin && date.getTime() < this.dateMin.getTime())) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Fonction récursive. Si le jour séléctionné + num est invalide, la fonction\n     * se rappelle pour séléctionner le jour suivant (ou précédent)\n     *\n     * @param date\n     * @param num : nombre de jours à ajouter à date.\n     */\n    private setDateIfPossible(date: Date, num: number): void {\n        const d = new Date(date);\n        d.setDate(d.getDate() + num);\n        if ((this.dateMin && d.getTime() < this.dateMin.getTime()) || (this.dateMax && d.getTime() > this.dateMax.getTime())) {\n            this._displayedDate = d;\n            this.bind();\n            this.dateChange.emit(this._displayedDate);\n        } else if (this.disableDates && this.isDisabledDate(d)) {\n            this.setDateIfPossible(d, num);\n        } else {\n            this._displayedDate = d;\n            this.bind();\n            this.dateChange.emit(this._displayedDate);\n        }\n    }\n\n    /**\n     * Fonction récursive. Si le mois séléctionné + num est invalide, la fonction\n     * se rappelle pour séléctionner le jour suivant (ou précédent)\n     *\n     * @param date\n     * @param num : nombre de mois à ajouter à date.\n     */\n    private setMonthIfPossible(date: Date, num: number): void {\n        const d = new Date(date);\n        d.setMonth(d.getMonth() + num);\n        if (this.disableDates && this.isDisabledDate(d)) {\n            num = (num < 0) ? -1 : 1;\n            this.setDateIfPossible(d, num);\n        } else {\n            this._displayedDate = d;\n            this.bind();\n            this.dateChange.emit(this._displayedDate);\n        }\n    }\n\n    /**\n     * Fonction récursive. Si l'année séléctionné + num est invalide, la fonction\n     * se rappelle pour séléctionner le jour suivant (ou précédent)\n     *\n     * @param date\n     * @param num : nombre de jours à ajouter à date.\n     */\n    private setYearIfPossible(date: Date, num: number): void {\n        const d = new Date(date);\n        d.setFullYear(d.getFullYear() + num);\n        if (this.disableDates && this.isDisabledDate(d)) {\n            num = (num < 0) ? -1 : 1;\n            this.setDateIfPossible(d, num);\n        } else {\n            this._displayedDate = d;\n            this.bind();\n            this.dateChange.emit(this._displayedDate);\n        }\n    }\n}\n","<div id=\"date-time-selector\" [ngClass]=\"layoutClass\" tabindex=\"-1\">\n    <div id=\"date-header\">\n        <div class=\"year\" *ngIf=\"layoutId < 3\">\n            <button mat-mini-fab type=\"button\" (click)=\"changeYear(-1)\" [disabled]=\"disabled\">\n                <mat-icon>keyboard_arrow_left</mat-icon>\n            </button>\n            <div>{{displayedDate.getFullYear()}}</div>\n            <button mat-mini-fab type=\"button\" (click)=\"changeYear(1)\" [disabled]=\"disabled\">\n                <mat-icon>keyboard_arrow_right</mat-icon>\n            </button>\n        </div>\n        <div current [innerHTML]=\"getSelectedDate() || '-'\">\n        </div>\n    </div>\n    <div id=\"date-selector\" *ngIf=\"layoutId < 3\">\n        <div id=\"sub-header\">\n            <div class=\"month\">\n                <div class=\"previous\">\n                    <button mat-mini-fab type=\"button\" (click)=\"changeMonth(-1)\" [disabled]=\"disabled\">\n                        <mat-icon>keyboard_arrow_left</mat-icon>\n                    </button>\n                </div>\n                <span>{{displayedDate.toLocaleString(local, { month: 'long' })}} {{displayedDate.getFullYear()}}</span>\n                <div class=\"next\">\n                    <button mat-mini-fab type=\"button\" (click)=\"changeMonth(1)\" [disabled]=\"disabled\">\n                        <mat-icon>keyboard_arrow_right</mat-icon>\n                    </button>\n                </div>\n            </div>\n            <div class=\"days\">\n                <span *ngFor=\"let day of days\">{{day}}</span>\n            </div>\n        </div>\n        <div id=\"date-body\" (keydown)=\"keyDown($event)\" tabindex=\"0\" [attr.keynav]=\"keyboardNavigation\">\n            <div class=\"date\" *ngFor=\"let dateSelectorItem of currentDays; let index=index\">\n                <div class=\"day\" [attr.dateindex]=\"index\" [class.background]=\"dateSelectorItem.background\" [class.disabled]=\"dateSelectorItem.disabled\" [attr.current]=\"dateSelectorItem.currentDate || null\" [attr.selected]=\"dateSelectorItem.selected || null\">\n                    {{dateSelectorItem.date.getDate()}}\n                </div>\n            </div>\n            <div class=\"date\" *ngFor=\"let emptyDay of emptyDays\"></div>\n        </div>\n    </div>\n    <div id=\"time-selector\" *ngIf=\"layoutId > 1\">\n        <deja-time-picker [ngModel]=\"(displayedDate) ? displayedDate : zeroHourDate\" (ngModelChange)=\"updateTime($event)\" [disabled]=\"disabled\"></deja-time-picker>\n    </div>\n</div>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nexport interface IDateSelectorItem {\n    date: Date;\n    disabled?: boolean;\n    background?: boolean;\n    selected?: boolean;\n    currentDate?: boolean;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DejaTimePickerModule } from '@deja-js/component/time-picker';\n\nimport { DejaDateSelectorComponent } from './date-selector.component';\n\n@NgModule({\n    declarations: [DejaDateSelectorComponent],\n    exports: [DejaDateSelectorComponent],\n    imports: [\n        CommonModule,\n        DejaTimePickerModule,\n        FormsModule,\n        MatButtonModule,\n        MatIconModule\n    ]\n})\nexport class DejaDateSelectorModule { }\n\nexport * from './date-selector-item.model';\nexport * from './date-selector.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}