{"version":3,"file":"sinequa-components-alerts.mjs","sources":["../../../projects/components/alerts/alerts.service.ts","../../../projects/components/alerts/bootstrap/alert-message/alert-message.component.ts","../../../projects/components/alerts/bootstrap/alert-message/alert-message.component.html","../../../projects/components/alerts/bootstrap/edit-alert/edit-alert.ts","../../../projects/components/alerts/bootstrap/edit-alert/edit-alert.html","../../../projects/components/alerts/bootstrap/manage-alerts/manage-alerts.ts","../../../projects/components/alerts/bootstrap/manage-alerts/manage-alerts.html","../../../projects/components/alerts/bootstrap/alerts-menu/alerts-menu.component.ts","../../../projects/components/alerts/bootstrap/alerts-menu/alerts-menu.component.html","../../../projects/components/alerts/bootstrap/alerts.module.ts","../../../projects/components/alerts/messages/en.ts","../../../projects/components/alerts/messages/fr.ts","../../../projects/components/alerts/messages/de.ts","../../../projects/components/alerts/messages/index.ts","../../../projects/components/alerts/sinequa-components-alerts.ts"],"sourcesContent":["import { Subject } from \"rxjs\";\n\nimport { Inject, Injectable, InjectionToken, OnDestroy, Type } from \"@angular/core\";\n\nimport { SearchService } from \"@sinequa/components/search\";\nimport { Query } from \"@sinequa/core/app-utils\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { ModalResult, ModalService } from \"@sinequa/core/modal\";\nimport { AuditEvent, AuditEvents, UserSettingsWebService } from \"@sinequa/core/web-services\";\n\n// From core/models/usersettings\nexport namespace Alert {\n    export enum Frequency {\n        Daily,\n        Hourly,\n        Immediate,\n        Weekly,\n        Monthly\n    }\n\n    export enum Days {\n        None = 0x00,\n        Monday = 0x01,\n        Tuesday = 0x02,\n        Wednesday = 0x04,\n        Thursday = 0x08,\n        Friday = 0x10,\n        Saturday = 0x20,\n        Sunday = 0x40,\n        AllDays = (Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday),\n        WeekDays = (Monday | Tuesday | Wednesday | Thursday | Friday)\n    }\n}\n\nexport interface Alert {\n    name: string;\n    description?: string;\n    query: Query;\n    timezone: string;\n    timezoneOffset?: string;\n    frequency: Alert.Frequency;\n    days: Alert.Days;\n    interval: number; // every \"n\"...\n    index: number; // day of month\n    times: string; //times: number[]; // offsets from 00:00 in milliseconds\n    active: boolean;\n    combine: boolean;\n    respectTabSelection: boolean;\n    appQueryUrl?: string; // the URL reference the query of the Alert in the SBA.\n}\n\n// from core/models/audit\nexport const enum AlertEventType {\n    Loaded = \"Alert_Loaded\",\n    Patched = \"Alert_Patched\",\n\n    Add = \"Alert_Add\",\n    Delete = \"Alert_Delete\",\n    DeleteAll = \"Alert_DeleteAll\",\n    Update = \"Alert_Update\",\n\n    Search_AlertQuery = \"Search_AlertQuery\",\n}\n\n// Types of events triggering a change event\nexport const ALERT_CHANGE_EVENTS = [\n    AlertEventType.Loaded,\n    AlertEventType.Add,\n    AlertEventType.Delete,\n    AlertEventType.Update\n];\n\n\n// CRUD Events\nexport interface AlertChangeEvent {\n    type: AlertEventType;\n    alert?: Alert;\n}\n\n\n// Model expected by the ManageAlerts Modal.\nexport interface ManageAlertsModel {\n    alerts: Alert[];\n    auditEvents?: AuditEvent[];\n    searchRoute?: string;\n}\n\n/**\n * The modal types are unknown to this service.\n * The module using this service must provide these components\n * in their forRoot() method\n *\n * Example below:\n *\n *  public static forRoot(): ModuleWithProviders<AlertsModule> {\n        return {\n            ngModule: AlertsModule,\n            providers: [\n                {\n                    provide: ALERT_COMPONENTS,\n                    useValue: {\n                        editAlertModal: EditAlert,\n                        manageAlertsModal: ManageAlerts\n                    }\n                },\n                AlertsService\n            ]\n        };\n    }\n *\n */\nexport interface AlertComponents {\n    editAlertModal: Type<any>;\n    manageAlertsModal: Type<any>;\n}\nexport const ALERT_COMPONENTS = new InjectionToken<AlertComponents>('ALERT_COMPONENTS');\nexport const WINDOW = new InjectionToken('WindowToken');\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class AlertsService implements OnDestroy {\n\n    private readonly _events = new Subject<AlertChangeEvent>();\n    private readonly _changes = new Subject<AlertChangeEvent>();\n\n    constructor(\n        public userSettingsService: UserSettingsWebService,\n        public searchService: SearchService,\n        public modalService: ModalService,\n        @Inject(ALERT_COMPONENTS) public alertComponents: AlertComponents,\n        @Inject(WINDOW) private window : Window\n    ){\n        // Listen to the user settings\n        this.userSettingsService.events.subscribe(() => {\n            // E.g. new login occurs\n            // ==> Menus need to be rebuilt\n            this.events.next({type: AlertEventType.Loaded});\n        });\n        // Listen to own events, to trigger change events\n        this._events.subscribe(event => {\n            if(ALERT_CHANGE_EVENTS.indexOf(event.type) !== -1){\n                this.changes.next(event);\n            }\n        });\n    }\n\n    // GETTERS\n\n    /**\n     * Returns the list of this user's alerts.\n     * The list is stored in the user settings (this is a redirection).\n     * Using this service creates the list of alerts if it does not already exist.\n     */\n    public get alerts() : Alert[]{\n        return this.userSettingsService.get(\"alerts\");\n    }\n\n    public set alerts(alerts: Alert[]){\n        this.userSettingsService.set(\"alerts\", alerts);\n    }\n\n    /**\n     * Triggers any event among AlertChangeEvent\n     * (use for fine-grained control of alerts workflow)\n     */\n    public get events() : Subject<AlertChangeEvent> {\n        return this._events;\n    }\n\n    /**\n     * Triggers when events affect the list of alerts\n     * (use to refresh alert menus)\n     * Cf. CHANGE_EVENTS list\n     */\n    public get changes() : Subject<AlertChangeEvent> {\n        return this._changes;\n    }\n\n    /**\n     * @returns true if there is at least one alert\n     */\n    public get hasAlert(): boolean {\n        return this.alerts.length > 0;\n    }\n\n    /**\n     * @returns an alert with the given name or undefined if it does not exist\n     * @param name\n     */\n    public alert(name: string): Alert | undefined {\n        const i = this.alertIndex(name);\n        return i>= 0? this.alerts[i] : undefined;\n    }\n\n    private alertIndex(name: string): number {\n        for (let i = 0, ic = this.alerts.length; i < ic; i++) {\n            const alert = this.alerts[i];\n            if (alert && alert.name === name) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n\n    // CRUD\n\n    /**\n     * Creates a new alert unless it already exists.\n     * Emits an Alert event.\n     * Update the data on the server.\n     * @param alert the alert to create\n     * @returns true if alert was created\n     */\n    public createAlert(alert: Alert) : boolean {\n\n        if(this.alertIndex(alert.name) >= 0)\n            return false; // This alert already exists\n\n        this.alerts.unshift(alert);\n        this.events.next({type : AlertEventType.Add, alert: alert});\n        this.patchAlerts([{\n            type: AlertEventType.Add,\n            detail: {\n                alert: alert.name\n            }\n        }]);\n        return true;\n    }\n\n    /**\n     * Update the alert at the given index, unless an alert with the same name\n     * already exists in the list of alerts.\n     * Emits an Alert event.\n     * Update the data on the server.\n     * @param alert the alert to update\n     * @param index the index at which to update the alert\n     * @returns true if alert was updated\n     */\n    public updateAlert(alert: Alert, index : number) : boolean {\n\n        const prevIndex = this.alertIndex(alert.name);\n        if(prevIndex !== -1 && index !== prevIndex)\n            return false; // An alert with the same name exists at a different index\n\n        if(index >= 0 && index < this.alerts.length){\n\n            this.alerts.splice(index, 1, alert);\n            this.events.next({type : AlertEventType.Update, alert: alert});\n            this.patchAlerts([\n                {\n                    type: AlertEventType.Update,\n                    detail: {\n                        alert: alert.name\n                    }\n                }\n            ]);\n            return true;\n\n        }\n        return false;   // This alert does not exist\n    }\n\n    /**\n     * Updates the full list of alerts.\n     * Emits an Alert event.\n     * Update the data on the server.\n     * @param alerts the new list of alerts\n     * @param auditEvents the list of audit events to log\n     */\n    public updateAlerts(alerts : Alert[], auditEvents?: AuditEvents) : boolean {\n        Utils.arraySet(this.alerts, alerts);\n        this.events.next({type : AlertEventType.Update});\n        this.patchAlerts(auditEvents);\n        return true;\n    }\n\n    /**\n     * Deletes the given alert (based on its name)\n     * Emits an Alert event.\n     * Update the data on the server.\n     * @param alert\n     * @returns true if alert was deleted\n     */\n    public deleteAlert(alert: Alert) : boolean {\n\n        const index = this.alertIndex(alert.name);\n\n        if(index === -1)\n            return false; // Nothing to delete\n\n        this.alerts.splice(index, 1);\n        this.events.next({type : AlertEventType.Delete, alert: alert});\n        this.patchAlerts([\n            {\n                type: AlertEventType.Delete,\n                detail: {\n                    alert: alert.name\n                }\n            }\n        ]);\n        return true;\n    }\n\n    /**\n     * Sets this alert to the current search context, using the search service\n     */\n    public setAlertToCurrentQuery(alert: Alert){\n        alert.query = Query.copy(this.searchService.query);\n    }\n\n    /**\n     * Updates Alerts in User settings.\n     * @param auditEvents : Audit Events to be triggered\n     * @returns an Observable which can be used to trigger further events\n     */\n    private patchAlerts(auditEvents?: AuditEvents) {\n        return this.userSettingsService.patch({alerts: this.alerts}, auditEvents)\n            .subscribe(\n                next => {\n                    this.events.next({type: AlertEventType.Patched});\n                },\n                error => {\n                    console.error(\"Could not patch Alerts!\", error);\n                }\n            );\n    }\n\n\n\n\n    // EVENT HANDLERS (Menus)\n\n    /**\n     * Uses the SearchService to perform a search returning all\n     * the documents matching this alert.\n     * @param alert\n     * @returns the search service promise\n     */\n    public searchAlert(alert: Alert, path?: string) : Promise<boolean> {\n        this.searchService.setQuery(Utils.extend(this.searchService.makeQuery(), Utils.copy(alert.query)));\n        this.events.next({type: AlertEventType.Search_AlertQuery, alert: alert});\n        return this.searchService.search( {path: path}, {\n            type: AlertEventType.Search_AlertQuery,\n            detail: {\n                alert: alert.name\n            }\n        });\n    }\n\n    /**\n     * Opens a dialog allowing a user to create a new alert.\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true if the alert was created.\n     */\n    public createAlertModal() : Promise<boolean> {\n        const alert: Alert = {\n            name: \"\",\n            description: \"\",\n            timezone: this.userSettingsService.timezone,\n            query: Query.copy(this.searchService.query),\n            frequency: Alert.Frequency.Daily,\n            days: Alert.Days.WeekDays,\n            interval: 1,\n            index: 1,\n            times: \"9:00\",\n            active: true,\n            combine: true,\n            respectTabSelection: false\n        };\n        const queryUrl = this.window.location.href;\n        return this.modalService.open(this.alertComponents.editAlertModal, {model: { alert: alert }})\n            .then((result) => {\n                if (result === ModalResult.OK) {\n\n                    const index = this.alertIndex(alert.name);\n                    if (index !== -1) {\n\n                        return this.modalService.yesNo(\"msg#alerts.alertAlreadyExists\")\n                            .then((result) => {\n                                if (result === ModalResult.Yes) {\n                                    alert.appQueryUrl = queryUrl;\n                                    return this.updateAlert(alert, index);\n                                }\n                                return false;\n                            });\n\n                    } else {\n                        alert.appQueryUrl = queryUrl;\n                        return this.createAlert(alert);\n                    }\n                }\n                return false;\n            });\n    }\n\n    /**\n     * Opens a dialog allowing a user to edit an existing alert.\n     * @param alert: The alert to edit\n     * @param noUpdate: if true, will not update the server after the edit\n     * @param searchRoute: the route to use when replaying the alert's query\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true if the alert was updated.\n     */\n    public editAlertModal(alert: Alert, noUpdate?: boolean, searchRoute?: string) : Promise<boolean> {\n\n        const prevName = alert.name;\n\n        const queryUrl = this.window.location.href;\n        return this.modalService.open(this.alertComponents.editAlertModal,  {model: { alert: alert, searchRoute: searchRoute }})\n            .then((result) => {\n\n                if (result === ModalResult.OK) {\n\n                    if(noUpdate) return true;\n\n                    const prevIndex = this.alertIndex(prevName);\n                    if(prevIndex === -1) return false; // this alert did not exist\n\n                    const index = this.alertIndex(alert.name);\n                    if (index !== -1 && index !== prevIndex) {  // An alert with the same (new) name exists\n\n                        return this.modalService.yesNo(\"msg#alerts.alertAlreadyExists\")\n                            .then((result) => {\n                                if (result === ModalResult.Yes) {\n                                    const prevAlert = this.alert(prevName);\n                                    if (prevAlert) {\n                                        this.deleteAlert(prevAlert); // Remove the alert with old name\n                                    }\n                                    alert.appQueryUrl = queryUrl;\n                                    return this.updateAlert(alert, this.alertIndex(alert.name)); // Update the alert with new name (index might have changed due to delete of old name)\n                                }\n                                return false;\n                            });\n\n                    } else {\n\n                        alert.appQueryUrl = queryUrl;\n                        return this.updateAlert(alert, prevIndex); // Update this alert\n\n                    }\n                }\n\n                return false;\n            });\n    }\n\n    /**\n     * Opens a dialog allowing a user to reorganize and edit the\n     * list of alerts.\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true is the list was updated.\n     */\n    public manageAlertsModal(searchRoute?: string) : Promise<boolean> {\n\n        const model: ManageAlertsModel =  { alerts: Utils.copy(this.alerts), searchRoute: searchRoute };\n\n        return this.modalService.open(this.alertComponents.manageAlertsModal, {model})\n            .then((result) => {\n                if (result === ModalResult.OK) {\n                    return this.updateAlerts(model.alerts, model.auditEvents);\n                }\n                return false;\n            });\n\n    }\n\n    ngOnDestroy() {\n        this.events.complete();\n        this.changes.complete();\n    }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'sq-alert-message',\n    templateUrl: './alert-message.component.html',\n    standalone: false\n})\nexport class BsAlertMessageComponent {\n  @Input() message: string;\n}\n","<div class=\"alert alert-danger m-0 text-center\" role=\"alert\">\n  {{ message }}\n</div>","import {Component, OnInit, OnDestroy, Inject} from \"@angular/core\";\nimport {UntypedFormBuilder, UntypedFormGroup, UntypedFormControl, Validators} from \"@angular/forms\";\nimport {Subscription} from \"rxjs\";\nimport {ModalRef, MODAL_MODEL, ModalButton, ModalResult} from \"@sinequa/core/modal\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {AlertsService, Alert} from \"../../alerts.service\";\nimport {SearchService} from \"@sinequa/components/search\";\nimport {KeyValue} from \"@angular/common\";\n\n@Component({\n    selector: \"sq-edit-alert\",\n    templateUrl: \"./edit-alert.html\",\n    styleUrls: [\"./edit-alert.scss\"],\n    standalone: false\n})\nexport class BsEditAlert implements OnInit, OnDestroy {\n    form: UntypedFormGroup;\n    formChanges: Subscription;\n    buttons: ModalButton[];\n    frequencies: Alert.Frequency[];\n    frequency: typeof Alert.Frequency;\n    canUpdateQuery: boolean;\n    updateQuery: boolean;\n    weekdays = {\n        'monday': Alert.Days.Monday,\n        'tuesday': Alert.Days.Tuesday,\n        'wednesday': Alert.Days.Wednesday,\n        'thursday': Alert.Days.Thursday,\n        'friday': Alert.Days.Friday,\n        'saturday': Alert.Days.Saturday,\n        'sunday': Alert.Days.Sunday\n    };\n\n    showDirtyMessage = false;\n\n    // Preserve original property order\n    originalOrder = (a: KeyValue<string, Alert.Days>, b: KeyValue<string, Alert.Days>): number => 0\n\n    private alertDaysControl: UntypedFormControl;\n    private alertNameControl: UntypedFormControl;\n    private alertFrequencyControl: UntypedFormControl;\n    private alertTimesControl: UntypedFormControl;\n    private alertActiveControl: UntypedFormControl;\n    private alertRespectTabSelectionControl: UntypedFormControl;\n    private alertCombineWithOtherAlertsControl: UntypedFormControl;\n    private updateQueryControl: UntypedFormControl;\n\n    constructor(\n        @Inject(MODAL_MODEL) public model: { alert: Alert, searchRoute?: string },\n        private formBuilder: UntypedFormBuilder,\n        private searchService: SearchService,\n        private alertsService: AlertsService,\n        private modalRef: ModalRef) {\n        this.frequencies = [\n            Alert.Frequency.Daily,\n            Alert.Frequency.Hourly,\n            Alert.Frequency.Immediate,\n        ];\n        this.frequency = Alert.Frequency;\n    }\n\n    get alert() {\n        return this.model.alert;\n    }\n\n    ngOnInit() {\n        if (!this.alert.days) {\n            this.alert.days = Alert.Days.None;\n        }\n        this.canUpdateQuery = (!!this.alertsService.alert(this.alert.name)) &&\n            !!this.searchService.results && !!this.searchService.results.records;\n\n        this.alertDaysControl = new UntypedFormControl(this.alert.days);\n        this.alertNameControl = new UntypedFormControl(this.alert.name, Validators.required);\n        this.alertFrequencyControl = new UntypedFormControl(this.alert.frequency);\n        this.alertTimesControl = new UntypedFormControl(this.alert.times); // TODO validator\n        this.alertActiveControl = new UntypedFormControl(this.alert.active);\n        this.alertRespectTabSelectionControl = new UntypedFormControl(this.alert.respectTabSelection);\n        this.alertCombineWithOtherAlertsControl = new UntypedFormControl(this.alert.combine);\n        this.updateQueryControl = new UntypedFormControl(this.updateQuery);\n        this.form = this.formBuilder.group({\n            alertName: this.alertNameControl,\n            alertFrequency: this.alertFrequencyControl,\n            alertTimes: this.alertTimesControl,\n            alertActive: this.alertActiveControl,\n            alertRespectTabSelection: this.alertRespectTabSelectionControl,\n            alertCombineWithOtherAlerts: this.alertCombineWithOtherAlertsControl,\n            updateQuery: this.updateQueryControl\n        });\n        this.formChanges = Utils.subscribe(this.form.valueChanges,\n            (value) => {\n                this.alert.name = this.alertNameControl.value;\n                this.alert.frequency = this.alertFrequencyControl.value;\n                this.alert.times = this.alertTimesControl.value;\n                this.alert.active = this.alertActiveControl.value;\n                this.alert.days = this.alertDaysControl.value;\n                this.alert.respectTabSelection = this.alertRespectTabSelectionControl.value;\n                this.alert.combine = this.alertCombineWithOtherAlertsControl.value;\n                this.updateQuery = this.updateQueryControl.value;\n            }\n        );\n\n        this.createButtons();\n    }\n\n    private createButtons() {\n        this.buttons = [\n            new ModalButton({\n                text: \"msg#editAlert.runQuery\",\n                result: ModalResult.Custom,\n                action: (button) => {\n                    this.runQuery();\n                    this.modalRef.close(ModalResult.Cancel); // dismiss the dialog too (?)\n                },\n                visible: !!this.alertsService.alert(this.alert.name)\n            }),\n            new ModalButton({\n                result: ModalResult.OK,\n                primary: true,\n                validation: this.form,\n                action: (button) => {\n                    if (this.updateQuery) {\n                        this.alertsService.setAlertToCurrentQuery(this.alert);\n                    }\n                }\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n                action: (button) => {\n                    if (this.form.dirty) {\n                        button.result = ModalResult.Custom;\n                        this.showDirtyMessage = true;\n                        this.createYesNoButtons();\n                    }\n                }\n            })\n        ];\n    }\n    private createYesNoButtons() {\n        this.buttons = [\n            new ModalButton({\n                result: ModalResult.Yes,\n                primary: true,\n            }),\n            new ModalButton({\n                result: ModalResult.No,\n                action: (button) => {\n                    button.result = ModalResult.Custom;\n                    this.showDirtyMessage = false;\n                    this.createButtons();\n                }\n            })\n        ];\n    }\n    ngOnDestroy() {\n        this.formChanges.unsubscribe();\n    }\n\n    dayChecked(day: Alert.Days): boolean {\n        return (this.alert.days & day) !== 0;\n    }\n\n    dayChange(event: UIEvent, day: Alert.Days) {\n        const input = event.target as HTMLInputElement;\n        if (input.checked) {\n            this.alertDaysControl.setValue(this.alert.days |= day);\n            // this.alert.days |= day;\n        }\n        else {\n            this.alertDaysControl.setValue(this.alert.days &= ~day);\n            // this.alert.days &= ~day;\n        }\n        this.form.markAsDirty();\n    }\n\n    runQuery() {\n        this.alertsService.searchAlert(this.alert, this.model.searchRoute);\n    }\n}","<form name=\"editAlert\" novalidate [formGroup]=\"form\">\n    <sq-modal [title]=\"'msg#editAlert.title'\" [buttons]=\"buttons\">\n        <div class=\"mb-3 sq-form-group\">\n            <label class=\"form-label\" for=\"alertName\">{{'msg#editAlert.name' | sqMessage}}</label>\n            <input [sqValidation]=\"form\" type=\"text\" class=\"form-control\" id=\"alertName\" formControlName=\"alertName\" autocomplete=\"off\" spellcheck=\"off\" sqAutofocus>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"form-label\" for=\"alertFrequency\">{{'msg#editAlert.frequency' | sqMessage}}</label>\n            <select class=\"form-select\" id=\"alertFrequency\" formControlName=\"alertFrequency\">\n                <option *ngFor=\"let frequencyValue of frequencies\" [value]=\"frequencyValue\">{{frequency[frequencyValue] | sqMessage}}</option>\n            </select>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"form-label\">{{'msg#editAlert.days' | sqMessage}}</label>\n            <div class=\"weekdays-grid\">\n                <div *ngFor=\"let day of weekdays | keyvalue: originalOrder; let i = index\" class=\"form-check\">\n                    <input class=\"form-check-input\" type=\"checkbox\" id=\"day_{{day.value}}\" [checked]=\"dayChecked(day.value)\" (change)=\"dayChange($event, day.value)\">\n                    <label role=\"button\" for=\"day_{{day.value}}\" class=\"form-check-label user-select-none cursor-pointer\">{{ 'msg#editAlert.'+day.key | sqMessage}}</label>\n                </div>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label class=\"form-label\" for=\"alertTimes\">{{'msg#editAlert.times' | sqMessage}}</label>\n            <input type=\"text\" class=\"form-control\" id=\"alertTimes\" formControlName=\"alertTimes\" autocomplete=\"off\" spellcheck=\"off\">\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" id=\"alertActive\" formControlName=\"alertActive\">\n                <label role=\"button\" for=\"alertActive\" class=\"form-check-label user-select-none cursor-pointer\">{{'msg#editAlert.active' | sqMessage}}</label>\n            </div>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" id=\"alertRespectTabSelection\" formControlName=\"alertRespectTabSelection\">\n                <label role=\"button\" for=\"alertRespectTabSelection\" class=\"form-check-label user-select-none cursor-pointer\">{{'msg#editAlert.respectTabSelection' | sqMessage}}</label>\n            </div>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" id=\"alertCombineWithOtherAlerts\" formControlName=\"alertCombineWithOtherAlerts\">\n                <label role=\"button\" for=\"alertCombineWithOtherAlerts\" class=\"form-check-label user-select-none cursor-pointer\">{{'msg#editAlert.combineWithOtherAlerts' | sqMessage}}</label>\n            </div>\n            <div *ngIf=\"canUpdateQuery\" class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" id=\"updateQuery\" formControlName=\"updateQuery\">\n                <label role=\"button\" for=\"updateQuery\" class=\"form-check-label user-select-none cursor-pointer\">{{'msg#editAlert.updateQuery' | sqMessage}}</label>\n            </div>\n        </div>\n        <sq-alert-message footer [message]=\"'msg#editAlert.lossDataMessage' | sqMessage\" style=\"flex: 0 1 100%\" *ngIf=\"showDirtyMessage\"></sq-alert-message>\n    </sq-modal>\n</form>","import { CdkDragDrop } from \"@angular/cdk/drag-drop\";\nimport { Component, Inject, OnInit } from \"@angular/core\";\nimport { ValidatorFn } from \"@angular/forms\";\n\nimport { Utils } from \"@sinequa/core/base\";\nimport { MODAL_MODEL, ModalButton, ModalResult } from \"@sinequa/core/modal\";\nimport { AuditEvent, AuditEventType } from \"@sinequa/core/web-services\";\n\nimport { Alert, AlertEventType, AlertsService, ManageAlertsModel } from \"../../alerts.service\";\n\n@Component({\n    selector: \"sq-manage-alerts\",\n    templateUrl: \"./manage-alerts.html\",\n    styleUrls: [\"./manage-alerts.scss\"],\n    standalone: false\n})\nexport class BsManageAlerts implements OnInit {\n    reordering: boolean;\n    buttons: ModalButton[];\n    removeAllButton: ModalButton;\n    nameValidators: ValidatorFn[];\n    showDirtyMessage = false;\n\n    constructor(\n        @Inject(MODAL_MODEL) public model: ManageAlertsModel,\n        public alertsService: AlertsService) {\n        this.reordering = false;\n    }\n\n    ngOnInit() {\n        this.createButtons();\n    }\n\n    addAuditEvent(auditEvent: AuditEvent) {\n        if (!this.model.auditEvents) {\n            this.model.auditEvents = [];\n        }\n        this.model.auditEvents.push(auditEvent);\n    }\n\n    reorder() {\n        this.reordering = !this.reordering;\n    }\n\n    remove(alert: Alert, index: number) {\n        this.model.alerts.splice(index, 1);\n        this.removeAllButton.visible = this.model.alerts.length > 0;\n        this.addAuditEvent({\n            type: AuditEventType.Alert_Delete,\n            detail: {\n                alert: alert.name\n            }\n        });\n        return false;\n    }\n\n    editAlert(alert: Alert) {\n        if (!this.reordering) {\n            const alert1 = Utils.copy(alert);\n            this.alertsService.editAlertModal(alert1, true, this.model.searchRoute)\n                .then(result => {\n                    if (result) {\n                        Utils.copy(alert1, alert);\n                        this.addAuditEvent({\n                            type: AuditEventType.Alert_Edit,\n                            detail: {\n                                alert: alert.name\n                            }\n                        });\n                    }\n                });\n        }\n        return false;\n    }\n\n    dropped(drop: CdkDragDrop<Alert[]>) {\n        Utils.arrayMove(this.model.alerts, drop.previousIndex, drop.currentIndex);\n    }\n\n    private createButtons() {\n        this.buttons = [\n            this.removeAllButton = new ModalButton({\n                text: \"msg#manageAlerts.removeAll\",\n                result: ModalResult.Custom,\n                action: (button) => {\n                    this.model.alerts.splice(0);\n                    button.visible = false;\n                    this.addAuditEvent({\n                        type: AlertEventType.DeleteAll\n                    });\n                },\n                visible: this.model.alerts.length > 0\n            }),\n            new ModalButton({\n                result: ModalResult.OK,\n                primary: true\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n                action: (button) => {\n                    if (this.model.auditEvents && this.model.auditEvents?.length > 0) {\n                        button.result = ModalResult.Custom;\n                        this.showDirtyMessage = true;\n                        this.createYesNoButtons();\n                    }\n                }\n            })\n        ];\n    }\n\n    private createYesNoButtons() {\n        this.buttons = [\n            new ModalButton({\n                result: ModalResult.Yes,\n                primary: true,\n            }),\n            new ModalButton({\n                result: ModalResult.No,\n                action: (button) => {\n                    button.result = ModalResult.Custom;\n                    this.showDirtyMessage = false;\n                    this.createButtons();\n                }\n            })\n        ];\n    }\n}\n","<form name=\"manageAlerts\" novalidate>\n    <sq-modal [title]=\"'msg#manageAlerts.title'\" [buttons]=\"buttons\">\n        <div *ngIf=\"model.alerts.length\" class=\"mb-3 clearfix\">\n            <button type=\"button\" class=\"btn btn-secondary float-right\" (click)=\"reorder()\">{{(reordering ? \"msg#manageAlerts.edit\" : \"msg#manageAlerts.reorder\") | sqMessage}}</button>\n        </div>\n        <div class=\"mb-3\">\n            <ul class=\"list-group\" cdkDropList [cdkDropListData]=\"model.alerts\" [cdkDropListDisabled]=\"!reordering\" (cdkDropListDropped)=\"dropped($event)\">\n                <li *ngFor=\"let alert of model.alerts; let $index = index\" (click)=\"editAlert(alert)\" cdkDrag\n                    role=\"button\"\n                    class=\"list-group-item list-group-item-action d-flex user-select-none\"\n                    [ngClass]=\"{'cursor-move': reordering}\">\n                    <div [ngClass]=\"{'sq-active': !reordering, 'sq-alert-text': true}\">{{alert.name}}</div>\n                    <div class=\"ms-auto\">\n                        <i *ngIf=\"!reordering\" class=\"fas fa-times sq-remove ms-2\" (click)=\"remove(alert, $index)\" title=\"{{'msg#manageAlerts.remove' | sqMessage}}\"></i>\n                        <i *ngIf=\"reordering\" class=\"ms-2 fas fa-bars sq-move\"></i>\n                    </div>\n                </li>\n            </ul>\n        </div>\n        <sq-alert-message footer [message]=\"'msg#editAlert.lossDataMessage' | sqMessage\" style=\"flex: 0 1 100%\" *ngIf=\"showDirtyMessage\"></sq-alert-message>\n    </sq-modal>\n</form>\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { Action } from '@sinequa/components/action';\nimport { LoginService } from '@sinequa/core/login';\nimport { AlertsService, Alert } from '../../alerts.service';\nimport { SearchService } from '@sinequa/components/search';\nimport { Utils } from '@sinequa/core/base';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'sq-alerts-menu',\n    templateUrl: './alerts-menu.component.html',\n    standalone: false\n})\nexport class BsAlertsMenuComponent implements OnInit, OnDestroy {\n\n  @Input() searchRoute: string = \"/search\";\n  @Input() icon: string = \"fas fa-bell\";\n  @Input() autoAdjust: boolean = true;\n  @Input() autoAdjustBreakpoint: string = 'xl';\n  @Input() collapseBreakpoint: string = 'sm';\n  @Input() size: string;\n\n  menu: Action | undefined;\n\n  // Alerts actions\n  createAction: Action;\n  manageAction: Action;\n\n  constructor(\n    public loginService: LoginService,\n    public alertsService: AlertsService,\n    public searchService: SearchService\n  ) {\n\n    this.createAction = new Action({\n      text: \"msg#alerts.createAlert\",\n      action: () => { this.alertsService.createAlertModal(); }\n    });\n\n    this.manageAction = new Action({\n      text: \"msg#alerts.manageAlerts\",\n      action: () => { this.alertsService.manageAlertsModal(this.searchRoute); }\n    });\n\n  }\n\n  ngOnInit() {\n    this.updateMenu();\n    this._alertsServiceSubscription = this.alertsService.changes.subscribe({\n      next: () => { this.updateMenu(); }\n    });\n    this._loginServiceSubscription = this.loginService.events.subscribe(event => {\n      if(event.type === \"session-changed\"){\n        this.updateMenu();\n      }\n    });\n    this._searchServiceSubscription = this.searchService.resultsStream.subscribe(results => {\n      this.updateMenu();\n    });\n  }\n\n  private _alertsServiceSubscription: Subscription;\n  private _loginServiceSubscription: Subscription;\n  private _searchServiceSubscription: Subscription;\n  ngOnDestroy(){\n    if(this._alertsServiceSubscription){\n      this._alertsServiceSubscription.unsubscribe();\n    }\n    if(this._loginServiceSubscription){\n      this._loginServiceSubscription.unsubscribe();\n    }\n    if(this._searchServiceSubscription){\n      this._searchServiceSubscription.unsubscribe();\n    }\n  }\n\n  updateMenu() {\n\n    if (!this.loginService.complete) {\n      this.menu = undefined;\n      return;\n    }\n\n    const alertsActions: Action[] = [];\n\n    if (this.alertsService.hasAlert) {\n        const scrollGroup = new Action({\n            scrollGroup: true,\n            children: this.alertsService.alerts.map(alert => new Action({\n              text: alert.name,\n              data: alert,\n              action: (item: Action) => {\n                const _alert: Alert = Utils.copy(item.data);\n                this.alertsService.editAlertModal(_alert, undefined, this.searchRoute);\n              }\n          }))\n        });\n        alertsActions.push(scrollGroup);\n    }\n\n    if (!!this.searchService.results) {\n        alertsActions.push(this.createAction);\n    }\n\n    if (this.alertsService.hasAlert) {\n        alertsActions.push(this.manageAction);\n    }\n\n    this.menu = new Action({\n      icon: this.icon,\n      text: \"msg#alerts.alerts\",\n      children: alertsActions\n    });\n  }\n\n}\n","<li *ngIf=\"!!menu && !menu.hidden\" class=\"nav-item dropdown\" \n    [sq-action-item]=\"{item: menu, size: size, autoAdjust: autoAdjust, autoAdjustBreakpoint: autoAdjustBreakpoint, inMenu: true, rightAligned: true}\"\n    [collapseBreakpoint]=\"collapseBreakpoint\"\n></li>","import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {DragDropModule} from \"@angular/cdk/drag-drop\";\n\nimport {IntlModule} from \"@sinequa/core/intl\";\nimport {ValidationModule} from \"@sinequa/core/validation\";\n\nimport {UtilsModule} from \"@sinequa/components/utils\";\nimport {BsActionModule} from \"@sinequa/components/action\";\nimport {BsModalModule} from \"@sinequa/components/modal\";\n\nimport {ALERT_COMPONENTS, WINDOW} from \"../alerts.service\";\nimport {BsEditAlert} from \"./edit-alert/edit-alert\";\nimport {BsManageAlerts} from \"./manage-alerts/manage-alerts\";\nimport {BsAlertsMenuComponent} from \"./alerts-menu/alerts-menu.component\";\nimport {BsAlertMessageComponent} from \"./alert-message/alert-message.component\";\n\nfunction windowFactory() {\n    return window;\n}\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule, ReactiveFormsModule,\n        DragDropModule,\n\n        BsModalModule,\n\n        IntlModule,\n        ValidationModule,\n\n        UtilsModule,\n        BsActionModule\n    ],\n    declarations: [\n        BsEditAlert, BsManageAlerts, BsAlertsMenuComponent, BsAlertMessageComponent\n    ],\n    exports: [\n        BsEditAlert, BsManageAlerts, BsAlertsMenuComponent\n    ],\n    providers: [\n        {\n            provide: ALERT_COMPONENTS,\n            useValue: {\n                editAlertModal: BsEditAlert,\n                manageAlertsModal: BsManageAlerts\n            }\n        },\n        {\n            provide: WINDOW,\n            useFactory: windowFactory\n        }\n    ]\n})\nexport class BsAlertsModule {\n}\n","export default {\n    \"alerts\": {\n        \"alerts\": \"Alerts\",\n        \"createAlert\": \"Create Alert\",\n        \"manageAlerts\": \"Manage Alerts\",\n        \"alertAlreadyExists\": \"An alert with that name already exists. Would you like to replace it?\"\n    },\n\n    \"editAlert\": {\n        \"title\": \"Alert\",\n        \"name\": \"Name\",\n        \"frequency\": \"Frequency\",\n        \"days\": \"Days\",\n        \"monday\": \"Monday\",\n        \"tuesday\": \"Tuesday\",\n        \"wednesday\": \"Wednesday\",\n        \"thursday\": \"Thursday\",\n        \"friday\": \"Friday\",\n        \"saturday\": \"Saturday\",\n        \"sunday\": \"Sunday\",\n        \"times\": \"Times\",\n        \"active\": \"Active\",\n        \"updateQuery\": \"Update Query\",\n        \"runQuery\": \"Run Query\",\n        \"lossDataMessage\": \"Do you want to leave without saving your modifications?\",\n        \"respectTabSelection\": \"Respect tab selection\",\n        \"combineWithOtherAlerts\": \"Combine with other alerts\"\n    },\n\n    \"manageAlerts\": {\n        \"title\": \"Manage Alerts\",\n        \"edit\": \"Edit\",\n        \"reorder\": \"Reorder\",\n        \"remove\": \"Remove\",\n        \"removeAll\": \"Remove all\"\n    },\n\n};\n","export default {\n    \"alerts\": {\n        \"alerts\": \"Alertes\",\n        \"createAlert\": \"Créer une alerte\",\n        \"manageAlerts\": \"Gérer les alertes\",\n        \"alertAlreadyExists\": \"Une alerte avec ce nom existe déjà. Voulez-vous la remplacer ?\"\n    },\n\n    \"editAlert\": {\n        \"title\": \"Alerte\",\n        \"name\": \"Nom\",\n        \"frequency\": \"Fréquence\",\n        \"days\": \"Jours\",\n        \"monday\": \"lundi\",\n        \"tuesday\": \"mardi\",\n        \"wednesday\": \"mercredi\",\n        \"thursday\": \"jeudi\",\n        \"friday\": \"vendredi\",\n        \"saturday\": \"samedi\",\n        \"sunday\": \"dimanche\",\n        \"times\": \"Horaires\",\n        \"active\": \"Active\",\n        \"updateQuery\": \"Mettre à jour la requête\",\n        \"runQuery\": \"Exécuter la requête\",\n        \"lossDataMessage\": \"Voulez-vous quitter sans sauvegarder vos modifications ?\",\n        \"respectTabSelection\": \"Repecter la séléction des onglets\",\n        \"combineWithOtherAlerts\": \"Combiner avec d'autres alertes\"\n    },\n\n    \"manageAlerts\": {\n        \"title\": \"Gérer les alertes\",\n        \"edit\": \"Editer\",\n        \"reorder\": \"Réorganiser\",\n        \"remove\": \"Effacer\",\n        \"removeAll\": \"Effacer tout\"\n    },\n\n};\n","export default {\n    \"alerts\": {\n        \"alerts\": \"Alarme\",\n        \"createAlert\": \"Alarm erstellen\",\n        \"manageAlerts\": \"Alarme verwalten\",\n        \"alertAlreadyExists\": \"Ein Alarm mit diesem Namen existiert bereits. Möchten Sie ihn ersetzen?\"\n    },\n\n    \"editAlert\": {\n        \"title\": \"Alarm\",\n        \"name\": \"Name\",\n        \"frequency\": \"Häufigkeit\",\n        \"days\": \"Tage\",\n        \"monday\": \"Montag\",\n        \"tuesday\": \"Dienstag\",\n        \"wednesday\": \"Mittwoch\",\n        \"thursday\": \"Donnerstag\",\n        \"friday\": \"Freitag\",\n        \"saturday\": \"Samstag\",\n        \"sunday\": \"Sonntag\",\n        \"times\": \"Uhrzeitangaben\",\n        \"active\": \"Aktiv\",\n        \"updateQuery\": \"Aktualisiere Suchanfrage\",\n        \"runQuery\": \"Führe Suchanfrage aus\",\n        \"lossDataMessage\": \"Möchten Sie gehen, ohne Ihre Änderungen zu speichern?\",\n        \"respectTabSelection\": \"Auswahl der Registerkarte respektieren\",\n        \"combineWithOtherAlerts\": \"Kombinieren mit anderen Ausschreibungen\"\n    },\n\n    \"manageAlerts\": {\n        \"title\": \"Alarme verwalten\",\n        \"edit\": \"Bearbeiten\",\n        \"reorder\": \"Neu sortieren\",\n        \"remove\": \"Entfernen\",\n        \"removeAll\": \"Alle entfernen\"\n    },\n\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\nimport {enModal, frModal, deModal} from \"@sinequa/components/modal\";\nimport _enAlerts from \"./en\";\nimport _frAlerts from \"./fr\";\nimport _deAlerts from \"./de\";\n\nconst enAlerts = Utils.merge({}, _enAlerts, enSearch, enModal);\nconst frAlerts = Utils.merge({}, _frAlerts, frSearch, frModal);\nconst deAlerts = Utils.merge({}, _deAlerts, deSearch, deModal);\n\nexport { enAlerts, frAlerts, deAlerts };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.AlertsService","i4","i9.BsAlertMessageComponent","i1.AlertsService","i2","i3","i5","i6.BsAlertMessageComponent","i7","i2.AlertsService"],"mappings":"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"}