{"version":3,"file":"deja-js-component-date-picker-datepicker-with-time.mjs","sources":["../../../../projects/deja-js/component/date-picker/datepicker-with-time/date-time-adapter.ts","../../../../projects/deja-js/component/date-picker/datepicker-with-time/datepicker-with-time.component.ts","../../../../projects/deja-js/component/date-picker/datepicker-with-time/datepicker-with-time.component.html","../../../../projects/deja-js/component/date-picker/datepicker-with-time/index.ts","../../../../projects/deja-js/component/date-picker/datepicker-with-time/deja-js-component-date-picker-datepicker-with-time.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\nimport { InjectionToken } from '@angular/core';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const DATE_TIME_ADAPTER = new InjectionToken<DateTimeAdapter<unknown>>('DATE_TIME_ADAPTER');\n\nexport interface DateTimeAdapter<D> {\n    setTime: (date: D, hours: number, minutes: number, seconds: number) => D;\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 { TemplatePortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, OnDestroy, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DateAdapter } from '@angular/material/core';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerModule, MatDateSelectionModel } from '@angular/material/datepicker';\nimport { Destroy } from '@deja-js/component/core';\nimport { DateOrDuration, DejaTimePickerComponent, DejaTimePickerModule } from '@deja-js/component/time-picker';\nimport { cloneDeep } from 'lodash-es';\nimport { delay, filter, map, takeUntil, tap } from 'rxjs';\n\nimport { DateTimeAdapter } from './date-time-adapter';\n\n\n@Component({\n    selector: 'datepicker-with-time',\n    templateUrl: './datepicker-with-time.component.html',\n    styleUrls: ['./datepicker-with-time.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [\n        CommonModule,\n        DejaTimePickerModule,\n        MatButtonModule,\n        MatDatepickerModule\n    ]\n})\nexport class DatepickerWithTimeComponent extends Destroy implements AfterViewInit, OnDestroy {\n    @ViewChild(TemplateRef)\n    private template?: TemplateRef<unknown>;\n\n    @ViewChild(DejaTimePickerComponent, { read: ElementRef, static: false })\n    private timePickerElement?: ElementRef<HTMLElement>;\n\n    public time?: DateOrDuration;\n\n    private portal?: TemplatePortal;\n\n    private dateAdapter = inject(DateAdapter, { optional: true }) as unknown as DateTimeAdapter<unknown>;\n    private datepicker = inject(MatDatepicker);\n    private viewContainerRef = inject(ViewContainerRef);\n\n    public constructor(\n        private globalModel: MatDateSelectionModel<unknown, unknown>\n    ) {\n        super();\n\n        this.datepicker.openedStream.pipe(\n            tap(() => {\n                const datePickerInput = this.datepicker.datepickerInput as MatDatepickerInput<Date>;\n                this.time = datePickerInput.value || new Date();\n            }),\n            delay(1),\n            map(() => this.timePickerElement?.nativeElement.parentElement),\n            filter(Boolean),\n            takeUntil(this.destroyed$)\n        ).subscribe(datePickerContainer => {\n            const containerRef = this.viewContainerRef.element.nativeElement as HTMLElement;\n            datePickerContainer.setAttribute('layout', containerRef?.ownerDocument?.body?.clientHeight <= 500 ? 'h' : 'v');\n        });\n    }\n\n    public onDateTimeClosed(): void {\n        let date = cloneDeep(this.globalModel.selection) || new Date() as unknown;\n        if (this.time) {\n            let hours: number;\n            let minutes: number;\n            let seconds: number;\n            if (this.time instanceof Date) {\n                hours = this.time.getHours();\n                minutes = this.time.getMinutes();\n                seconds = this.time.getSeconds();\n            } else {\n                hours = this.time.hours || 0;\n                minutes = this.time.minutes || 0;\n                seconds = this.time.seconds || 0;\n            }\n            if (date instanceof Date) {\n                date.setHours(hours, minutes, seconds);\n            } else {\n                date = this.dateAdapter?.setTime?.(date, hours, minutes, seconds);\n            }\n        }\n        this.globalModel.updateSelection(date, this);\n        const datePickerInput = this.datepicker.datepickerInput as MatDatepickerInput<unknown>;\n        datePickerInput.writeValue(date);\n    }\n\n    public ngAfterViewInit(): void {\n        if (this.template) {\n            this.portal = new TemplatePortal(this.template, this.viewContainerRef);\n        }\n\n        if (this.portal) {\n            this.datepicker.registerActions(this.portal);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        if (this.portal) {\n            this.datepicker.removeActions(this.portal);\n        }\n\n        // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n        if (this.portal?.isAttached) {\n            this.portal?.detach();\n        }\n    }\n}\n","<ng-template>\n    <ng-container *ngIf=\"time\">\n        <deja-time-picker\n            #timepicker\n            class=\"datepicker-with-time\"\n            [(time)]=\"time\"\n        ></deja-time-picker>\n        <div class=\"datepicker-with-time action-buttons\">\n            <button\n                mat-raised-button\n                color=\"primary\"\n                matDatepickerApply\n                (click)=\"onDateTimeClosed()\"\n            >\n                OK\n            </button>\n        </div>\n    </ng-container>\n</ng-template>\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 * from './date-time-adapter';\nexport * from './datepicker-with-time.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}