{"version":3,"file":"sinequa-components-baskets.mjs","sources":["../../../projects/components/baskets/baskets.service.ts","../../../projects/components/baskets/bootstrap/edit-basket/edit-basket.ts","../../../projects/components/baskets/bootstrap/edit-basket/edit-basket.html","../../../projects/components/baskets/bootstrap/manage-baskets/manage-baskets.ts","../../../projects/components/baskets/bootstrap/manage-baskets/manage-baskets.html","../../../projects/components/baskets/bootstrap/select-basket/select-basket.ts","../../../projects/components/baskets/bootstrap/select-basket/select-basket.html","../../../projects/components/baskets/bootstrap/result-baskets/result-baskets.ts","../../../projects/components/baskets/bootstrap/result-baskets/result-baskets.html","../../../projects/components/baskets/bootstrap/baskets-menu/baskets-menu.component.ts","../../../projects/components/baskets/bootstrap/baskets-menu/baskets-menu.component.html","../../../projects/components/baskets/bootstrap/facet-baskets/facet-baskets.component.ts","../../../projects/components/baskets/bootstrap/facet-baskets/facet-baskets.component.html","../../../projects/components/baskets/bootstrap/baskets.module.ts","../../../projects/components/baskets/messages/en.ts","../../../projects/components/baskets/messages/fr.ts","../../../projects/components/baskets/messages/de.ts","../../../projects/components/baskets/messages/index.ts","../../../projects/components/baskets/sinequa-components-baskets.ts"],"sourcesContent":["import {Injectable, Inject, InjectionToken, Type, OnDestroy} from \"@angular/core\";\nimport {Observable, Subject} from \"rxjs\";\nimport {UserSettingsWebService, AuditEvent, AuditEvents} from \"@sinequa/core/web-services\";\nimport {ModalService, ModalResult} from \"@sinequa/core/modal\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {SelectionService} from \"@sinequa/components/selection\";\nimport {Action} from \"@sinequa/components/action\";\nimport {SearchService} from \"@sinequa/components/search\";\nimport {Query} from '@sinequa/core/app-utils';\n\n// Basket interface (from models/UserSettings)\nexport interface Basket {\n    name: string;\n    description?: string;\n    ids?: string[];\n}\n\n\n// Audit Events (from models/Audit)\nexport const enum BasketEventType {\n    Loaded = \"Basket_Loaded\",\n    Add = \"Basket_Add\",\n    Delete = \"Basket_Delete\",\n    DeleteAll = \"Basket_DeleteAll\",\n    Update = \"Basket_Update\",\n    Rename = \"Basket_Rename\",\n\n    AddDoc = \"Basket_AddDoc\",\n    RemoveDoc = \"Basket_RemoveDoc\",\n    Open = \"Basket_Open\",\n    ExportCSV = \"Basket_ExportCSV\",\n    Patched = \"Basked_Patched\"\n}\n\n\n// Types of events triggering a change event\nexport const BASKET_CHANGE_EVENTS = [\n    BasketEventType.Loaded,\n    BasketEventType.Add,\n    BasketEventType.Delete,\n    BasketEventType.DeleteAll,\n    BasketEventType.Update,\n    BasketEventType.Rename\n];\n\n\n// CRUD Events\nexport interface BasketChangeEvent {\n    type: BasketEventType;\n    basket?: Basket;\n}\n\n\n// Model expected by the SelectBasket Modal.\n// The filter allows to filter out baskets from the complete list\nexport interface SelectBasketModel {\n    basket: Basket | undefined;\n    basketFilter?: (basket: Basket) => boolean;\n    allowNew?: boolean;\n}\n\n// Model expected by the ManageBaskets Modal.\nexport interface ManageBasketsModel {\n    baskets: Basket[];\n    auditEvents?: AuditEvent[];\n}\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<BasketsModule> {\n        return {\n            ngModule: BasketsModule,\n            providers: [\n                {\n                    provide: BASKET_COMPONENTS,\n                    useValue: {\n                        selectBasketModal: SelectBasket,\n                        editBasketModal: EditBasket,\n                        manageBasketsModal: ManageBaskets\n                    }\n                },\n                BasketsService\n            ]\n        };\n    }\n */\nexport interface BasketComponents {\n    selectBasketModal: Type<any>;\n    editBasketModal: Type<any>;\n    manageBasketsModal: Type<any>;\n}\nexport const BASKET_COMPONENTS = new InjectionToken<BasketComponents>('BASKET_COMPONENTS');\n\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class BasketsService implements OnDestroy {\n\n    private readonly _events = new Subject<BasketChangeEvent>();\n    private readonly _changes = new Subject<BasketChangeEvent>();\n\n    // An application may want to alter the action (icon, etc.)\n    public selectedRecordsAction: Action;\n\n    constructor(\n        public userSettingsService: UserSettingsWebService,\n        public searchService: SearchService,\n        public modalService: ModalService,\n        public selectionService: SelectionService,\n        @Inject(BASKET_COMPONENTS) public basketComponents: BasketComponents\n    ){\n        // Listen to the user settings\n        this.userSettingsService.events.subscribe(event => {\n            // E.g. new login occurs\n            // ==> Menus need to be rebuilt\n            this._events.next({type: BasketEventType.Loaded});\n        });\n        // Listen to own events, to trigger change events\n        this._events.subscribe(event => {\n            if(BASKET_CHANGE_EVENTS.indexOf(event.type) !== -1){\n                this.changes.next(event);\n            }\n        });\n        // Register a basket action onto the selection service, so that users can add/remove to/from baskets when documents are selected\n        this.selectedRecordsAction = this.buildBasketsAction();\n    }\n\n    // GETTERS\n\n    /**\n     * Returns the list of this user's baskets.\n     * The list is stored in the user settings (this is a redirection).\n     * Using this service creates the list of baskets if it does not already exist.\n     */\n    public get baskets() : Basket[] {\n        return this.userSettingsService.get(\"baskets\");\n    }\n\n    /**\n     * Triggers any event among BasketChangeEvent\n     * (use for fine-grained control of baskets workflow)\n     */\n    public get events() : Subject<BasketChangeEvent> {\n        return this._events;\n    }\n\n    /**\n     * Triggers when events affect the list of baskets\n     * (use to refresh basket menus)\n     * Cf. CHANGE_EVENTS list\n     */\n    public get changes() : Subject<BasketChangeEvent> {\n        return this._changes;\n    }\n\n    /**\n     * @returns true if there is at least one basket\n     */\n    public get hasBasket(): boolean {\n        return this.baskets.length > 0;\n    }\n\n    /**\n     * @returns a basket with the given name or null if it does not exist\n     * @param name\n     */\n    public basket(name: string): Basket | undefined {\n        const i = this.basketIndex(name);\n        return i>= 0? this.baskets[i] : undefined;\n    }\n\n    private basketIndex(name: string): number {\n        for (let i = 0, ic = this.baskets.length; i < ic; i++) {\n            const basket = this.baskets[i];\n            if (basket && basket.name === name) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n\n    // CRUD\n\n    /**\n     * Creates a new basket unless it already exists.\n     * Emits an Basket event.\n     * Update the data on the server.\n     * @param basket the basket to create\n     * @returns true if basket was created\n     */\n    public createBasket(basket: Basket) : boolean {\n\n        if(this.basketIndex(basket.name) >= 0)\n            return false; // This basket already exists\n\n        this.baskets.unshift(basket);\n        this._events.next({type : BasketEventType.Add, basket: basket});\n        this.patchBaskets([{\n            type: BasketEventType.Add,\n            detail: {\n                basket: basket.name\n            }\n        }]);\n        return true;\n    }\n\n    /**\n     * Update the basket at the given index, unless a basket with the same name\n     * already exists in the list of baskets.\n     * Emits a Basket event.\n     * Update the data on the server.\n     * @param basket the basket to update\n     * @param index the index at which to update the basket\n     * @returns true if basket was updated\n     */\n    public updateBasket(basket: Basket, index : number) : boolean {\n\n        const prevIndex = this.basketIndex(basket.name);\n        if(prevIndex !== -1 && index !== prevIndex)\n            return false; // A basket with the same name exists at a different index\n\n        if(index >= 0 && index < this.baskets.length){\n\n            this.baskets.splice(index, 1, basket);\n            this._events.next({type : BasketEventType.Update, basket: basket});\n            this.patchBaskets([\n                {\n                    type: BasketEventType.Update,\n                    detail: {\n                        basket: basket.name\n                    }\n                }\n            ], true);\n            return true;\n\n        }\n        return false;   // This basket does not exist\n    }\n\n    /**\n     * Updates the full list of Baskets.\n     * Emits a Basket event.\n     * Update the data on the server.\n     * @param baskets the new list of baskets\n     * @param auditEvents the list of audit events to log\n     */\n    public updateBaskets(baskets: Basket[], auditEvents?: AuditEvents) : boolean {\n        Utils.arraySet(this.baskets, baskets);\n        this._events.next({type : BasketEventType.Update});\n        this.patchBaskets(auditEvents, true);\n        return true;\n    }\n\n    /**\n     * Deletes the given Basket (based on its name)\n     * Emits an Basket event.\n     * Update the data on the server.\n     * @param basket\n     * @returns true if basket was deleted\n     */\n    public deleteBasket(basket: Basket) : boolean {\n\n        const index = this.basketIndex(basket.name);\n\n        if(index === -1)\n            return false; // Nothing to delete\n\n        this.baskets.splice(index, 1);\n        this._events.next({type : BasketEventType.Delete, basket: basket});\n        this.patchBaskets([\n            {\n                type: BasketEventType.Delete,\n                detail: {\n                    savedquery: basket.name\n                }\n            }\n        ], true);\n        return true;\n    }\n\n    /**\n     * Adds one or more documents to a basket.\n     * Emits a Basket event.\n     * Update the data on the server.\n     * @param name basket to which to add the document(s)\n     * @param ids id(s) of the document(s) to add to the basket\n     * @param skipPatch if true, will not update the data on the server (use for bulk updates)\n     * @returns true if the document was added\n     */\n    public addToBasket(name: string, ids: string | string[], skipPatch?: boolean): boolean {\n        if (!ids) {\n            return false;\n        }\n        const basket = this.basket(name);\n        if (!basket) return false;\n        if (!basket.ids) basket.ids = [];\n        ids = Utils.asArray(ids);\n        for (let i = 0, ic = ids.length; i < ic; i++) {\n            const id = ids[i];\n            if (basket.ids.indexOf(id) === -1) {\n                basket.ids.push(id);\n            }\n        }\n        if(!skipPatch){\n            this._events.next({type : BasketEventType.AddDoc});\n            this.patchBaskets({\n                type: BasketEventType.AddDoc,\n                detail: {\n                    basket: name,\n                    docid: basket.ids[0]\n                }\n            });\n        }\n        return true;\n    }\n\n    /**\n     * Removes one or more documents from a basket.\n     * Emits a Basket event.\n     * Update the data on the server.\n     * @param name basket from which to remove the document(s)\n     * @param ids id(s) of the document(s) to remove from the basket\n     * @param skipPatch if true, will not update the data on the server (use for bulk updates)\n     * @returns true if the document was removed\n     */\n    public removeFromBasket(name: string, ids: string | string[], skipPatch?: boolean): boolean {\n        if (!ids) {\n            return false;\n        }\n        const basket = this.basket(name);\n        if (!basket) return false;\n        if (!basket.ids) basket.ids = [];\n        ids = Utils.asArray(ids);\n        for (let i = 0, ic = ids.length; i < ic; i++) {\n            const id = ids[i];\n            const index = basket.ids.indexOf(id);\n            if (index !== -1) {\n                basket.ids.splice(index, 1);\n            }\n        }\n        if(!skipPatch){\n            this._events.next({type : BasketEventType.RemoveDoc});\n            this.patchBaskets({\n                type: BasketEventType.RemoveDoc,\n                detail: {\n                    basket: name,\n                    docid: basket.ids[0]\n                }\n            }, true);\n        }\n        return true;\n    }\n\n    /**\n     * Removes a document from all the baskets\n     * @param id id of the document to remove\n     */\n    public removeFromAllBaskets(id: string) : boolean {\n        const auditEvents: AuditEvent[] = [];\n        for (const basket of this.baskets) {\n            if( this.removeFromBasket(basket.name, id, true) ){\n                auditEvents.push({\n                    type: BasketEventType.RemoveDoc,\n                    detail: {\n                        basket: basket.name,\n                        docid: id\n                    }\n                });\n            }\n        }\n        if(auditEvents.length > 0) {\n            this._events.next({type : BasketEventType.RemoveDoc});\n            this.patchBaskets(auditEvents, true);\n            return true;\n        }\n        return false;\n    }\n\n\n    /**\n     * Updates Baskets 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 patchBaskets(auditEvents?: AuditEvents, updateSearch?: boolean): Observable<void> {\n        const obs = this.userSettingsService.patch({baskets: this.baskets}, auditEvents);\n        obs.subscribe(\n            next => {\n                this._events.next({type: BasketEventType.Patched});\n                if(updateSearch && this.searchService.query.basket) {\n                    this.searchService.search(); // Update search results to reflect the new basket content\n                }\n            },\n            error => {\n                console.error(\"Could not patch Baskets!\", error);\n        });\n        return obs;\n    }\n\n\n\n\n    // EVENT HANDLERS (Menus)\n\n    /**\n     * Uses the SearchService to perform a search returning all\n     * the documents in this basket\n     * @param basket\n     * @param path\n     * @returns the search service promise\n     */\n    public searchBasket(basket : Basket, path?: string) : Promise<boolean> {\n        const query = this.searchService.makeQuery({ basket: basket.name });\n        this.searchService.setQuery(query);\n        this._events.next({type: BasketEventType.Open, basket: basket});\n        return this.searchService.search({ path: path }, {\n            type: BasketEventType.Open,\n            detail: {\n                basket: basket.name\n            }\n        });\n    }\n\n    /**\n     * Opens a dialog allowing a user to add one (or more) document(s)\n     * to a basket.\n     * @param ids id(s) of the documents to add to a basket\n     * @param recordBaskets names of the baskets the document already belongs to\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true if the document was added to a basket\n     */\n    public addToBasketModal(ids: string | string[], recordBaskets?: string[])\n            : Promise<boolean> {\n        const model : SelectBasketModel = {\n            basket: undefined,\n            basketFilter: recordBaskets? b => !recordBaskets.includes(b.name) : undefined,\n            allowNew: true\n        };\n        return this.modalService\n            .open(this.basketComponents.selectBasketModal, {model: model})\n            .then(result => {\n                if (result === ModalResult.OK && model.basket) {\n                    return this.addToBasket(model.basket.name, ids);\n                }\n                return false;\n            });\n    }\n\n    /**\n     * Opens a dialog allowing a user to remove one (or more) document(s)\n     * from a basket.\n     * @param ids id(s) of the documents to remove from a basket\n     * @param recordBaskets names of the baskets the document already belongs to\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true if the document was removed from a basket\n     */\n    public removeFromBasketModal(ids: string | string[], recordBaskets?: string[])\n            : Promise<boolean> {\n        const model : SelectBasketModel = {\n            basket: undefined,\n            basketFilter: recordBaskets? b => recordBaskets.includes(b.name) : undefined\n        };\n        return this.modalService\n            .open(this.basketComponents.selectBasketModal, {model: model})\n            .then(result => {\n                if (result === ModalResult.OK && model.basket) {\n                    return this.removeFromBasket(model.basket.name, ids);\n                }\n                return false;\n            });\n    }\n\n    /**\n     * Opens a dialog allowing a user to create new basket.\n     * @param model the initial basket object model\n     * @returns a boolean promise resolved when the user closes the dialog\n     * the result is true if the basket was created.\n     */\n    public createBasketModal(model: Basket = {name: \"\"}) : Promise<boolean> {\n\n        return this.modalService.open(this.basketComponents.editBasketModal, {model: model})\n            .then((result) => {\n\n                if (result === ModalResult.OK) {\n                    const index = this.basketIndex(model.name);\n                    if (index !== -1) {\n\n                        return this.modalService.yesNo(\"msg#baskets.basketAlreadyExists\")\n                            .then((res) => {\n                                if (res === ModalResult.Yes) {\n                                    return this.updateBasket(model, index);\n                                }\n                                return false;\n                            });\n\n                    }\n                    else {\n\n                        return this.createBasket(model);\n\n                    }\n                }\n\n                return false;\n            });\n    }\n\n    // Not relevant as of now\n    // public editBasketModal(basket: Basket)\n\n    /**\n     * Opens a dialog allowing a user to reorganize and edit the\n     * list of baskets.\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 manageBasketsModal() : Promise<boolean> {\n\n        const model: ManageBasketsModel = { baskets: Utils.copy(this.baskets) };\n\n        return this.modalService.open(this.basketComponents.manageBasketsModal, {model: model})\n            .then((result) => {\n                if (result === ModalResult.OK) {\n                    return this.updateBaskets(model.baskets, model.auditEvents);\n                }\n                return false;\n            });\n\n    }\n\n\n    private buildBasketsAction() : Action {\n        return new Action({\n            icon: \"fas fa-shopping-basket\",\n            title: \"msg#baskets.baskets\",\n            name: \"baskets\",\n            hidden: true,\n            children: [\n                new Action({\n                    text: \"msg#baskets.addToBasket\",\n                    action: (item, $event) => {\n                        this.addToBasketModal(this.selectionService.getSelectedIds());\n                    }\n                }),\n                new Action({\n                    text: \"msg#baskets.removeFromBasket\",\n                    action: (item, $event) => {\n                        this.removeFromBasketModal(this.selectionService.getSelectedIds());\n                    }\n                })\n            ],\n            updater: (action) => {\n                action.hidden = !this.selectionService.haveSelectedRecords;\n            }\n        });\n    }\n\n    makeQuery(basket: Basket): Query {\n        const query = this.searchService.makeQuery({ basket: basket.name });\n        return query;\n    }\n\n    notifyOpenBasket(basket: Basket) {\n        this._events.next({type: BasketEventType.Open, basket});\n    }\n\n    ngOnDestroy() {\n        this.events.complete();\n        this.changes.complete();\n    }\n}\n","import {Component, OnInit, OnDestroy, Inject} from \"@angular/core\";\nimport {UntypedFormBuilder, UntypedFormGroup, UntypedFormControl, Validators} from \"@angular/forms\";\nimport {Subscription} from \"rxjs\";\nimport {MODAL_MODEL, ModalButton, ModalResult} from \"@sinequa/core/modal\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {Basket} from \"../../baskets.service\";\n\n@Component({\n    selector: \"sq-edit-basket\",\n    templateUrl: \"./edit-basket.html\",\n    standalone: false\n})\nexport class BsEditBasket implements OnInit, OnDestroy {\n    nameControl: UntypedFormControl;\n    form: UntypedFormGroup;\n    formChanges: Subscription;\n    buttons: ModalButton[];\n\n    constructor(\n        @Inject(MODAL_MODEL) public model: Basket,\n        private formBuilder: UntypedFormBuilder) {\n    }\n\n    ngOnInit() {\n        this.nameControl = new UntypedFormControl(this.model.name, Validators.required);\n        this.form = this.formBuilder.group({\n            basketName: this.nameControl\n        });\n        this.formChanges = Utils.subscribe(this.form.valueChanges,\n            (value) => {\n                this.model.name = this.nameControl.value;\n            }\n        );\n\n        this.buttons = [\n            new ModalButton({\n                result: ModalResult.OK,\n                primary: true,\n                validation: this.form\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel\n            })\n        ];\n    }\n\n    ngOnDestroy() {\n        this.formChanges.unsubscribe();\n    }\n}\n","<form name=\"editBasket\" novalidate [formGroup]=\"form\">\n    <sq-modal [title]=\"'msg#editBasket.title'\" [buttons]=\"buttons\">\n        <div class=\"mb-3 sq-form-group\">\n            <label class=\"form-label\" for=\"basketName\">{{'msg#editBasket.name' | sqMessage}}</label>\n            <input [sqValidation]=\"form\" type=\"text\" class=\"form-control\" id=\"basketName\" formControlName=\"basketName\" spellcheck=\"off\" sqAutofocus>\n        </div>\n    </sq-modal>\n</form>","import {Component, OnInit, Inject} from \"@angular/core\";\nimport {Validators, AbstractControl} from \"@angular/forms\";\nimport {ValidatorFn} from \"@angular/forms\";\nimport {CdkDragDrop} from \"@angular/cdk/drag-drop\";\nimport {MODAL_MODEL, ModalButton, ModalResult} from \"@sinequa/core/modal\";\nimport {Utils} from \"@sinequa/core/base\";\nimport {AuditEvent, ExportSourceType} from \"@sinequa/core/web-services\";\nimport {BasketsService, Basket, BasketEventType, ManageBasketsModel} from \"../../baskets.service\";\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { SavedQueriesService } from \"@sinequa/components/saved-queries\";\n\n@Component({\n    selector: \"sq-manage-baskets\",\n    templateUrl: \"./manage-baskets.html\",\n    styleUrls: [\"./manage-baskets.scss\"],\n    standalone: false\n})\nexport class BsManageBaskets implements OnInit {\n    reordering: boolean;\n    buttons: ModalButton[];\n    removeAllButton: ModalButton;\n    nameValidators: ValidatorFn[];\n\n    constructor(\n        @Inject(MODAL_MODEL) public model: ManageBasketsModel,\n        public savedQueryService: SavedQueriesService,\n        public basketsService: BasketsService,\n        public appService: AppService\n    ) {\n        this.reordering = false;\n\n        this.nameValidators = [\n            Validators.required,\n            (control: AbstractControl) => {\n                const modelControl = control.root.get(\"model\");\n                if (modelControl) {\n                    for (const item of this.model.baskets) {\n                        if (modelControl.value === item) {\n                            continue;\n                        }\n                        if (control.value === item.name) {\n                            return {\n                                unique: true\n                            };\n                        }\n                    }\n                }\n                return null;\n            }\n        ];\n    }\n\n    ngOnInit() {\n        this.buttons = [\n            this.removeAllButton = new ModalButton({\n                text: \"msg#manageBaskets.removeAll\",\n                result: ModalResult.Custom,\n                action: (button) => {\n                    this.model.baskets.splice(0);\n                    button.visible = false;\n                    this.addAuditEvent({\n                        type: BasketEventType.DeleteAll\n                    });\n                },\n                visible: this.model.baskets.length > 0\n            }),\n            new ModalButton({\n                result: ModalResult.OK,\n                primary: true\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel\n            })\n        ];\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    setName(basket: Basket, name: string) {\n        if (!Utils.eqNC(basket.name, name)) {\n            this.addAuditEvent({\n                type: BasketEventType.Rename,\n                detail: {\n                    basket: name,\n                    oldname: basket.name\n                }\n            });\n            basket.name = name;\n        }\n    }\n\n    remove(basket: Basket, index: number) {\n        this.model.baskets.splice(index, 1);\n        this.removeAllButton.visible = this.model.baskets.length > 0;\n        this.addAuditEvent({\n            type: BasketEventType.Delete,\n            detail: {\n                basket: basket.name\n            }\n        });\n        return false;\n    }\n\n    dropped(drop: CdkDragDrop<Basket[]>) {\n        Utils.arrayMove(this.model.baskets, drop.previousIndex, drop.currentIndex);\n    }\n\n    export(basket: Basket) {\n        this.basketsService.searchBasket(basket).then(_ =>\n            this.savedQueryService.exportModal(ExportSourceType.Result, undefined, basket.name)\n        );\n        return false;\n    }\n}\n","<form name=\"manageBaskets\" novalidate>\n    <sq-modal [title]=\"'msg#manageBaskets.title'\" [buttons]=\"buttons\">\n        <div *ngIf=\"model.baskets.length\" class=\"mb-3 clearfix\">\n            <button type=\"button\" class=\"btn btn-secondary float-right\" (click)=\"reorder()\">{{(reordering ? \"msg#manageBaskets.save\" : \"msg#manageBaskets.reorder\") | sqMessage}}</button>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"list-group\" cdkDropList [cdkDropListData]=\"model.baskets\" [cdkDropListDisabled]=\"!reordering\" (cdkDropListDropped)=\"dropped($event)\">\n                <div *ngFor=\"let basket of model.baskets; let $index = index\" cdkDrag\n                    role=\"button\"\n                    class=\"list-group-item list-group-item-action d-flex\"\n                    [ngClass]=\"{'cursor-move': reordering}\">\n                    <div *ngIf=\"reordering\" class=\"sq-basket-text\">{{basket.name}}</div>\n                    <sq-editable *ngIf=\"!reordering\" [value]=\"basket.name\" (valueChange)=\"setName(basket, $event)\" name=\"msg#manageBaskets.name\"\n                        [model]=\"basket\" [validators]=\"nameValidators\"></sq-editable>\n                    <div class=\"ms-auto\">\n                        <i *ngIf=\"!reordering && appService.app?.queryExport\" class=\"fas fa-download sq-export ms-2\" (click)=\"export(basket)\" title=\"{{ 'msg#manageBaskets.tooltip.export' | sqMessage }}\"></i>\n                        <i *ngIf=\"!reordering\" class=\"fas fa-times sq-remove m-2\" (click)=\"remove(basket, $index)\" title=\"{{'msg#manageBaskets.remove' | sqMessage}}\"></i>\n                        <i *ngIf=\"reordering\" class=\"ms-2 fas fa-bars sq-move\"></i>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </sq-modal>\n</form>\n","import {Component, OnInit, Inject} from \"@angular/core\";\nimport {MODAL_MODEL, ModalRef, ModalButton, ModalResult} from \"@sinequa/core/modal\";\nimport {Basket, BasketsService, SelectBasketModel} from \"../../baskets.service\";\n\n@Component({\n    selector: \"sq-select-basket\",\n    templateUrl: \"./select-basket.html\",\n    standalone: false,\n    styles: `\nli {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n    `\n})\nexport class BsSelectBasket implements OnInit {\n    baskets: Basket[];\n    buttons: ModalButton[];\n\n    constructor(\n        @Inject(MODAL_MODEL) public model: SelectBasketModel,\n        private basketsService: BasketsService,\n        private modalRef: ModalRef) {\n        this.baskets = this.basketsService.baskets;\n\n        if (!this.baskets) {\n            this.baskets = [];\n        }\n\n        this.buttons = [\n            new ModalButton({\n                result: ModalResult.Cancel\n            })\n        ];\n    }\n\n    ngOnInit(): void {\n        if (!!this.model.basketFilter) {\n            this.baskets = this.baskets.filter(this.model.basketFilter);\n        }\n    }\n\n    activate(model) {\n        this.model = model;\n    }\n\n    select(basket: Basket) {\n        if (basket) {\n            this.model.basket = basket;\n            this.modalRef.close(ModalResult.OK);\n        }\n    }\n\n    newBasket(){\n        const model : Basket = {name : \"\"};\n        this.basketsService.createBasketModal(model)\n            .then((result) => {\n                if(result){ // The basket was created\n                    this.select(model);\n                }\n            });\n    }\n}\n","<form name=\"selectBasket\" novalidate>\n    <sq-modal [title]=\"'msg#selectBasket.title'\" [buttons]=\"buttons\">\n        <div class=\"mb-3\">\n            <ul class=\"list-group sq-list-group\">\n                <li *ngFor=\"let basket of baskets\" class=\"list-group-item list-group-item-action\" (click)=\"select(basket)\">{{basket.name | sqMessage}}</li>\n                <li *ngIf=\"model.allowNew\" class=\"list-group-item list-group-item-action\" (click)=\"newBasket()\"><i>{{'msg#selectBasket.newBasket' | sqMessage}}</i></li>\n            </ul>\n        </div>\n    </sq-modal>\n</form>","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { Record } from \"@sinequa/core/web-services\";\nimport { ModalService, ModalResult } from \"@sinequa/core/modal\";\nimport { BasketsService, Basket } from \"../../baskets.service\";\nimport { Action } from \"@sinequa/components/action\";\n\n/**\n * Component representing the add-to-baskets button in one item of the result list view.\n *\n */\n@Component({\n    selector: 'sq-result-baskets',\n    templateUrl: './result-baskets.html',\n    standalone: false\n})\nexport class BsResultBaskets implements OnChanges, OnDestroy {\n    @Input() record: Record;\n    @Input() rightAligned: boolean;\n\n    public basketsAction: Action;\n    private addToBasketAction: Action;\n    private removeFromBasketAction: Action;\n    private removeFromAllBasketsAction: Action;\n\n    private baskets: string[];\n    private initialized: boolean;\n    private basketsSubscription: Subscription;\n\n    constructor(\n        private modalService: ModalService,\n        private basketsService: BasketsService,\n        private changeDetectorRef: ChangeDetectorRef\n    ) {\n        this.baskets = [];\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (!this.initialized) {\n            this.initialized = true;\n            this.addToBasketAction = this.buildAddToBasketAction();\n            this.removeFromBasketAction = this.buildRemoveFromBasketAction();\n            this.removeFromAllBasketsAction = this.buildRemovalFromAllBasketsAction();\n            this.basketsSubscription = this.basketsService.changes.subscribe(event => {\n                this.updateRecordBaskets();\n                this.refreshVisualization();\n            });\n        }\n        this.updateRecordBaskets();\n        this.refreshVisualization();\n    }\n\n    ngOnDestroy(): void {\n        if (this.basketsSubscription) {\n            this.basketsSubscription.unsubscribe();\n        }\n    }\n\n    public get isInBaskets(): boolean {\n        return this.baskets.length > 0;\n    }\n\n    private refreshVisualization(): void {\n        this.basketsAction = this.buildBasketsAction();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    private updateRecordBaskets(): void {\n        const currentBaskets: Basket[] = this.basketsService.baskets;\n        this.baskets = [];\n        for (const basket of currentBaskets) {\n            if (!!basket.ids && basket.ids.includes(this.record.id)) {\n                this.baskets.push(basket.name);\n            }\n        }\n    }\n\n    private buildAddToBasketAction(): Action {\n        return new Action({\n            text: 'msg#baskets.addToBasket',\n            action: (item, $event) => {\n                this.basketsService.addToBasketModal(this.record.id, this.baskets);\n            }\n        });\n    }\n\n    private buildRemoveFromBasketAction(): Action {\n        return new Action({\n            text: 'msg#baskets.removeFromBasket',\n            action: (item, $event) => {\n                this.basketsService.removeFromBasketModal(this.record.id, this.baskets);\n            }\n        });\n    }\n\n    private buildRemovalFromAllBasketsAction(): Action {\n        return new Action({\n            text: 'msg#baskets.removeFromAllBaskets',\n            action: () => {\n                this.modalService\n                    .yesNo(\n                        'msg#baskets.removeFromAllBasketsConfirmation',\n                        {values: {baskets: this.baskets.join(', ')}})\n                    .then(result => {\n                        if (result === ModalResult.Yes) {\n                            this.basketsService.removeFromAllBaskets(this.record.id);\n                        }\n                    });\n            }\n        });\n    }\n\n    private buildBasketsAction(): Action {\n        return new Action({\n            icon: 'fas fa-shopping-basket',\n            title: 'msg#baskets.baskets',\n            children: this.isInBaskets\n                ? this.baskets.length === 1\n                    ? [this.addToBasketAction, this.removeFromBasketAction]\n                    : [this.addToBasketAction, this.removeFromBasketAction, this.removeFromAllBasketsAction]\n                : [this.addToBasketAction]\n        });\n    }\n}\n","<div class=\"btn-group {{ isInBaskets ? 'sq-document-in-baskets' : 'sq-document-not-in-baskets' }}\"\n    [sq-action-buttons]=\"{\n        items: [basketsAction],\n        autoAdjust: true,\n        rightAligned: rightAligned\n    }\"></div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Action } from '@sinequa/components/action';\nimport { LoginService } from '@sinequa/core/login';\nimport { BasketsService } from '../../baskets.service';\n\n@Component({\n    selector: 'sq-baskets-menu',\n    templateUrl: './baskets-menu.component.html',\n    standalone: false\n})\nexport class BsBasketsMenuComponent implements OnInit {\n  @Input() searchRoute: string = \"/search\";\n  @Input() icon: string = \"fas fa-shopping-basket\";\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  // Basket actions\n  createAction: Action;\n  manageAction: Action;\n\n  constructor(\n    public loginService: LoginService,\n    public basketsService: BasketsService) {\n\n    this.createAction = new Action({\n      text: \"msg#baskets.createBasket\",\n      action: _ => { this.basketsService.createBasketModal(); }\n    });\n\n    this.manageAction = new Action({\n      text: \"msg#baskets.manageBaskets\",\n      action: _ => { this.basketsService.manageBasketsModal(); }\n    });\n  }\n\n  ngOnInit() {\n    this.updateMenu();\n    this.basketsService.changes.subscribe({\n      next: () => { this.updateMenu(); }\n    });\n    this.loginService.events.subscribe(event => {\n      if(event.type === \"session-changed\"){\n        this.updateMenu();\n      }\n    });\n  }\n\n  updateMenu() {\n\n    if (!this.loginService.complete) {\n        this.menu = undefined;\n        return;\n    }\n\n    const basketsActions: Action[] = [];\n\n    if (this.basketsService.hasBasket) {\n        const scrollGroup = new Action({\n            scrollGroup: true,\n            children: this.basketsService.baskets.map(basket => new Action({\n                text: basket.name,\n                data: basket,\n                action: () => this.basketsService.searchBasket(basket, this.searchRoute)\n            }))\n        });\n        basketsActions.push(scrollGroup);\n    }\n\n    basketsActions.push(this.createAction);\n\n    if (this.basketsService.hasBasket) {\n      basketsActions.push(this.manageAction);\n    }\n\n    this.menu = new Action({\n      icon: this.icon,\n      text: \"msg#baskets.baskets\",\n      title: \"msg#baskets.baskets\",\n      children: basketsActions\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 { Component, Input } from '@angular/core';\nimport { BasketsService, Basket, BasketEventType } from '../../baskets.service';\nimport { AbstractFacet } from '@sinequa/components/facet';\nimport { Action } from '@sinequa/components/action';\n\n@Component({\n    selector: 'sq-facet-baskets',\n    templateUrl: './facet-baskets.component.html',\n    styles: [`\n.basket-item .basket-delete,\n.basket-item:hover .basket-count {\n    display: none;\n}\n\n.basket-item:hover .basket-delete,\n.basket-item .basket-count {\n    display: block;\n}\n  `],\n    standalone: false\n})\nexport class BsFacetBasketsComponent extends AbstractFacet {\n  @Input() searchRoute: string = \"/search\";\n  @Input() maxBaskets: number = 5;\n  @Input() enableDelete: boolean = true;\n\n  page: number = 0;\n\n  createBasket: Action;\n  manageBasket: Action;\n  previousPage: Action;\n  nextPage: Action;\n\n  constructor(\n    public basketsService: BasketsService) {\n    super();\n\n    this.createBasket = new Action({\n      icon: \"fas fa-plus\",\n      title: \"msg#baskets.createBasket\",\n      action: () => {\n        this.basketsService.createBasketModal();\n      }\n    });\n\n    this.manageBasket = new Action({\n      icon: \"fas fa-cog\",\n      title: \"msg#baskets.manageBaskets\",\n      action: () => {\n        this.basketsService.manageBasketsModal();\n      }\n    });\n\n    this.previousPage = new Action({\n      icon: \"fas fa-chevron-left\",\n      title: \"msg#facet.previous\",\n      action: () => {\n        this.page--;\n      },\n      updater: (action: Action) => {\n        action.disabled = this.page <= 0;\n        action.hidden = this.maxPage === 0;\n      }\n    });\n\n    this.nextPage = new Action({\n      icon: \"fas fa-chevron-right\",\n      title: \"msg#facet.next\",\n      action: () => {\n        this.page++;\n      },\n      updater: (action: Action) => {\n        action.disabled = this.page >= this.maxPage;\n        action.hidden = this.maxPage === 0;\n      }\n    });\n  }\n\n  get maxPage(): number {\n    return Math.max(0, Math.ceil(this.basketsService.baskets.length / this.maxBaskets) - 1);\n  }\n\n  get startIndex(): number {\n    return this.page * this.maxBaskets;\n  }\n\n  get endIndex(): number {\n    return (this.page+1) * this.maxBaskets;\n  }\n\n  openBasket(basket: Basket){\n    this.basketsService.notifyOpenBasket(basket)\n    return true;\n  }\n\n  override get actions(): Action[] {\n    this.previousPage.update();\n    this.nextPage.update();\n    return [this.createBasket, this.previousPage, this.nextPage, this.manageBasket];\n  }\n\n  deleteBasket(basket: Basket, event: Event){\n    event.stopPropagation();\n    this.basketsService.deleteBasket(basket);\n    this.page = Math.min(this.page, this.maxPage);\n    return false;\n  }\n\n  getQueryParams(basket: Basket) {\n    const query = this.basketsService.makeQuery(basket);\n    const queryParams = query.toJsonForQueryString();\n    return {query: queryParams};\n  }\n\n  getRouterState(basket: Basket) {\n    return {\n      audit: {\n        type: BasketEventType.Open,\n        detail: {\n          basket: basket.name\n        }\n      }\n    }\n  }\n}\n","<div class=\"list-group list-group-flush\">\n    <a *ngFor=\"let basket of basketsService.baskets | slice:startIndex:endIndex\"\n        class=\"basket-item list-group-item list-group-item-action d-flex align-items-center\"\n        [routerLink]=\"[searchRoute]\" [queryParams]=\"getQueryParams(basket)\" [state]=\"getRouterState(basket)\"\n        (click)=\"openBasket(basket)\">\n        <span class=\"basket-name text-truncate me-auto\">{{ basket.name }}</span>\n        <span *ngIf=\"basket.ids\" class=\"basket-count ms-2 text-muted small\">{{ basket.ids.length }}</span>\n        <i *ngIf=\"enableDelete\" class=\"basket-delete ms-2 fas fa-times\" [title]=\"'msg#baskets.delete' | sqMessage\" (click)=\"deleteBasket(basket, $event)\"></i>\n    </a>\n    <div *ngIf=\"basketsService.baskets.length === 0\" class=\"list-group-item text-center text-muted fst-italic small unstriped py-5\">\n        {{ 'msg#baskets.noBasket' | sqMessage }}\n    </div>\n</div>\n","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 {BsSelectionModule} from \"@sinequa/components/selection\";\nimport {BsModalModule} from \"@sinequa/components/modal\";\nimport {BsActionModule} from \"@sinequa/components/action\";\n\nimport {BASKET_COMPONENTS} from \"../baskets.service\";\nimport {BsEditBasket} from \"./edit-basket/edit-basket\";\nimport {BsManageBaskets} from \"./manage-baskets/manage-baskets\";\nimport {BsSelectBasket} from \"./select-basket/select-basket\";\nimport {BsResultBaskets} from \"./result-baskets/result-baskets\";\nimport {BsBasketsMenuComponent} from \"./baskets-menu/baskets-menu.component\";\nimport {BsFacetBasketsComponent} from './facet-baskets/facet-baskets.component';\nimport {RouterModule} from '@angular/router';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule, ReactiveFormsModule,\n        DragDropModule,\n        RouterModule,\n\n        BsModalModule,\n        IntlModule,\n        ValidationModule,\n\n        UtilsModule,\n        BsSelectionModule,\n        BsActionModule\n    ],\n    declarations: [\n        BsEditBasket, BsManageBaskets, BsSelectBasket,\n        BsResultBaskets, BsBasketsMenuComponent,\n        BsFacetBasketsComponent\n    ],\n    exports: [\n        BsEditBasket, BsManageBaskets, BsSelectBasket,\n        BsResultBaskets, BsBasketsMenuComponent,\n        BsFacetBasketsComponent\n    ],\n    providers: [\n        {\n            provide: BASKET_COMPONENTS,\n            useValue: {\n                selectBasketModal: BsSelectBasket,\n                editBasketModal: BsEditBasket,\n                manageBasketsModal: BsManageBaskets\n            }\n        }\n    ]\n})\nexport class BsBasketsModule {\n}\n","export default {\n    \"baskets\": {\n        \"baskets\": \"Baskets\",\n        \"addToBasket\": \"Add to basket\",\n        \"removeFromBasket\": \"Remove from basket\",\n        \"removeFromAllBaskets\": \"Remove from all baskets\",\n        \"removeFromAllBasketsConfirmation\": \"Are you sure you want to remove this result from these baskets: {baskets}?\",\n        \"basketAlreadyExists\": \"A basket with that name already exists. Would you like to replace it?\",\n        \"noBasket\": \"You have not yet added a document to a basket...\",\n        \"createBasket\": \"Create Basket\",\n        \"manageBaskets\": \"Manage Baskets\",\n        \"delete\": \"Delete this basket\"\n    },\n\n    \"editBasket\": {\n        \"title\": \"Basket\",\n        \"name\": \"Name\"\n    },\n\n    \"manageBaskets\": {\n        \"title\": \"Manage Baskets\",\n        \"save\": \"Save\",\n        \"reorder\": \"Reorder\",\n        \"remove\": \"Remove\",\n        \"removeAll\": \"Remove all\",\n        \"name\": \"Name\",\n        \"tooltip\": {\n            \"export\": \"Export this basket\"\n        }\n    },\n\n    \"selectBasket\": {\n        \"title\": \"Select Basket\",\n        \"newBasket\": \"New basket...\"\n    }\n};\n","export default {\n    \"baskets\": {\n        \"baskets\": \"Paniers\",\n        \"addToBasket\": \"Ajouter au panier\",\n        \"removeFromBasket\": \"Supprimer du panier\",\n        \"removeFromAllBaskets\": \"Supprimer de tous les paniers\",\n        \"removeFromAllBasketsConfirmation\": \"Êtes-vous sûr de vouloir supprimer ce résultat de ces paniers : {baskets} ?\",\n        \"basketAlreadyExists\": \"Un panier avec ce nom existe déjà. Voulez-vous le remplacer ?\",\n        \"noBasket\": \"Vous n'avez pas encore ajouté de document à un panier...\",\n        \"createBasket\": \"Créer un panier\",\n        \"manageBaskets\": \"Gérer les paniers\",\n        \"delete\": \"Supprimer ce panier\"\n    },\n\n    \"editBasket\": {\n        \"title\": \"Panier\",\n        \"name\": \"Nom\"\n    },\n\n    \"manageBaskets\": {\n        \"title\": \"Gérer les paniers\",\n        \"save\": \"Enregistrer\",\n        \"reorder\": \"Réorganiser\",\n        \"remove\": \"Effacer\",\n        \"removeAll\": \"Effacer tout\",\n        \"name\": \"Nom\",\n        \"tooltip\": {\n            \"export\": \"Exporter ce panier\"\n        }\n    },\n\n    \"selectBasket\": {\n        \"title\": \"Sélectionner un panier\",\n        \"newBasket\": \"Nouveau panier...\"\n    },\n\n};\n","export default {\n    \"baskets\": {\n        \"baskets\": \"Ablagekörbe\",\n        \"addToBasket\": \"Zum Ablagekorb hinzufügen\",\n        \"removeFromBasket\": \"Aus dem Ablagekorb entfernen\",\n        \"removeFromAllBaskets\": \"Von allen Ablagekörben entfernen\",\n        \"removeFromAllBasketsConfirmation\": \"Möchten Sie dieses Eregbnis wirklich von diesen Ablagekörben entfernen: {baskets}?\",\n        \"basketAlreadyExists\": \"Es existiert bereits ein Ablagekorb mit diesem Namen. Möchten Sie ihn ersetzen?\",\n        \"noBasket\": \"Sie haben noch kein Dokument zu einem Ablagekorb hinzugefügt...\",\n        \"createBasket\": \"Ablagekorb erstellen\",\n        \"manageBaskets\": \"Ablagekörbe verwalten\",\n        \"delete\": \"Diesen Ablagekorb löschen\"\n    },\n\n    \"editBasket\": {\n        \"title\": \"Ablagekorb\",\n        \"name\": \"Name\"\n    },\n\n    \"manageBaskets\": {\n        \"title\": \"Ablagekörbe verwalten\",\n        \"save\": \"Aufzeichnung\",\n        \"reorder\": \"Neu sortieren\",\n        \"remove\": \"Entfernen\",\n        \"removeAll\": \"Alle entfernen\",\n        \"name\": \"Name\",\n        \"tooltip\": {\n            \"export\": \"Exportieren sie diesen Korb\"\n        }\n    },\n\n    \"selectBasket\": {\n        \"title\": \"Ablagekorb auswählen\",\n        \"newBasket\": \"Neuer Ablagekorb...\"\n    },\n\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\nimport {enSelection, frSelection, deSelection} from \"@sinequa/components/selection\";\nimport {enModal, frModal, deModal} from \"@sinequa/components/modal\";\nimport _enBaskets from \"./en\";\nimport _frBaskets from \"./fr\";\nimport _deBaskets from \"./de\";\n\nconst enBaskets = Utils.merge({}, _enBaskets, enSearch, enSelection, enModal);\nconst frBaskets = Utils.merge({}, _frBaskets, frSearch, frSelection, frModal);\nconst deBaskets = Utils.merge({}, _deBaskets, deSearch, deSelection, deModal);\n\nexport { enBaskets, frBaskets, deBaskets };","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i2.BasketsService","i5","i8","i1.BasketsService","i6"],"mappings":"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"}