{"version":3,"file":"sinequa-components-selection.mjs","sources":["../../../projects/components/selection/selection.service.ts","../../../projects/components/selection/bootstrap/result-selector/result-selector.ts","../../../projects/components/selection/bootstrap/result-selector/result-selector.html","../../../projects/components/selection/bootstrap/results-selector/results-selector.ts","../../../projects/components/selection/bootstrap/results-selector/results-selector.html","../../../projects/components/selection/bootstrap/selection-arranger/selection-arranger.component.ts","../../../projects/components/selection/bootstrap/selection-arranger/selection-arranger.component.html","../../../projects/components/selection/bootstrap/selection.module.ts","../../../projects/components/selection/messages/en.ts","../../../projects/components/selection/messages/fr.ts","../../../projects/components/selection/messages/de.ts","../../../projects/components/selection/messages/index.ts","../../../projects/components/selection/sinequa-components-selection.ts"],"sourcesContent":["import {Injectable, OnDestroy, InjectionToken, Inject} from \"@angular/core\";\nimport {Subject} from \"rxjs\";\nimport {Record} from \"@sinequa/core/web-services\";\nimport {Action} from \"@sinequa/components/action\";\nimport {SearchService} from \"@sinequa/components/search\";\n\nexport enum SelectionEventType {\n    SELECT,\n    UNSELECT,\n    MOVE\n}\n\nexport interface SelectionEvent {\n    type: SelectionEventType;\n    records: Record[];\n    source?: string;\n}\n\nexport interface SelectionItem {\n    id: string;\n}\n\n/**\n * The storage mode allows to customize how the service stores records, \n * which enables different features:\n * - id: only store the id of a selected record (default)\n * - record: store the entire record\n * - a function that customize what is stored (at least the record id is required)\n */\nexport interface SelectionOptions {\n    resetOnNewResults: boolean;\n    resetOnNewQuery: boolean;\n    storage: \"id\" | \"record\" | ((record: Record) => SelectionItem);\n}\n\nexport const defaultSelectionOptions: SelectionOptions = {\n    resetOnNewResults: false,\n    resetOnNewQuery: true,\n    storage: \"id\"\n}\n\nexport const SELECTION_OPTIONS = new InjectionToken<SelectionOptions>(\"SELECTION_OPTIONS\");\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class SelectionService implements OnDestroy {\n\n    protected readonly selectedRecords: SelectionItem[] = []; // currently selected items\n    public readonly selectionActions: Action[] = []; // Actions that other services can register onto this service\n\n    private _events = new Subject<SelectionEvent>();\n\n    public readonly selectedRecordsAction: Action;\n\n    constructor(\n        public searchService : SearchService,\n        @Inject(SELECTION_OPTIONS) public selectionOptions: SelectionOptions \n    ){\n\n        this.searchService.events.subscribe(event => {\n\n            if(!this.selectionOptions.resetOnNewResults && event.type === \"new-results\" && this.searchService.haveRecords){\n\n                const newSelectedRecords: Record[] = [];\n                if (this.searchService.results?.records) {\n                    for (const record of this.searchService.results.records) {\n                        const index = this.selectedRecords.findIndex(item => item.id === record.id);\n                        if (index !== -1 && !record.$selected) {\n                            record.$selected = true;    // Select previously selected records\n                            this.selectedRecords.splice(index, 1, record);\n                            newSelectedRecords.push(record);\n                        }\n                    }\n                }\n                if(newSelectedRecords.length > 0)   // Menus might need to be refreshed\n                    this._events.next({type: SelectionEventType.SELECT, records: newSelectedRecords, source: event.type});\n\n            }\n\n            if(this.selectionOptions.resetOnNewResults && event.type === \"new-results\") {\n                this.clearSelectedRecords(event.type);\n            }\n            \n            if(this.selectionOptions.resetOnNewQuery && event.type === \"new-query\") {\n                this.clearSelectedRecords(event.type);\n            }\n\n        });\n\n        this.selectedRecordsAction = this.buildSelectRecordsAction();\n        this.selectionActions.push(this.selectedRecordsAction);\n\n        this.events.subscribe({next: () => {\n            this.selectionActions.forEach(action => action.update());\n        }});\n\n    }\n\n    /**\n     * Emits an event on any (bulk or single) selection and unselection events\n     */\n    public get events() : Subject<SelectionEvent> {\n        return this._events;\n    }\n\n    ngOnDestroy(){\n        this._events.complete();\n    }\n\n    private getItem(record: Record): SelectionItem {\n        if(this.selectionOptions.storage === \"id\") {\n            return {id: record.id};\n        }\n        else if(this.selectionOptions.storage === \"record\") {\n            return record;\n        }\n        else {\n            return this.selectionOptions.storage(record);\n        }\n    }\n\n    /**\n     * Returns a copy of the list of selected records\n     */\n    public getSelectedItems(): SelectionItem[] {\n        return this.selectedRecords.slice(0);\n    }\n\n    /**\n     * Return the list of selected record ids\n     */\n    public getSelectedIds(): string[] {\n        return this.selectedRecords.map(r => r.id);\n    }\n\n    /**\n     * @returns true if at least one record is selected\n     */\n    public get haveSelectedRecords(): boolean {\n        return this.selectedRecords.length > 0;\n    }\n\n    public getSelectedCount(): number {\n        return this.selectedRecords.length;\n    }\n\n    /**\n     * @returns true if all records in the search results are selected\n     */\n    public get allRecordsSelected(): boolean {\n        if (!this.searchService.results || !this.searchService.results.records) {\n            return false;\n        }\n        for (const record of this.searchService.results.records) {\n            if (!record.$selected) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    private selectCurrentRecords(source?: string) {\n        const newSelectedRecords: Record[] = [];\n        if (this.searchService.results && this.searchService.results.records) {\n            for (const record of this.searchService.results.records) {\n                if (!record.$selected) {\n                    this.selectedRecords.push(this.getItem(record));\n                    newSelectedRecords.push(record);\n                    record.$selected = true;\n                }\n            }\n        }\n        if(newSelectedRecords.length > 0)\n            this._events.next({type: SelectionEventType.SELECT, records: newSelectedRecords, source});\n    }\n\n\n    /**\n     * Toggles the selection of one record or all those in the results.\n     * Emits a SelectionEvent if a record is selected or unselected.\n     * @param record if provided, will toggle the selection of this record; if not will toggle all records in results\n     */\n    public toggleSelectedRecords(record?: Record, source?: string) {\n        if (!!record) {\n            const index = this.selectedRecords.findIndex(item => item.id === record.id);\n            if (index > -1) {\n                this.selectedRecords.splice(index, 1);\n                record.$selected = false;\n            }\n            else {\n                this.selectedRecords.push(this.getItem(record));\n                record.$selected = true;\n            }\n            // record might not be the one in the search service results (if passing a SelectionItem)\n            const ssRecord = this.searchService.getRecordFromId(record.id);\n            if(ssRecord) {\n                ssRecord.$selected = record.$selected;\n            }\n            this._events.next({type: record.$selected? SelectionEventType.UNSELECT : SelectionEventType.SELECT, records: [record], source});\n        }\n        else {\n            if (this.allRecordsSelected) {\n                this.clearSelectedRecords(source);\n            }\n            else {\n                this.selectCurrentRecords(source);\n            }\n        }\n    }\n\n    /**\n     * Moves a selected record to a different index;\n     * @param record \n     * @param newIndex \n     */\n    public moveSelectedRecord(record: Record, newIndex: number, source?: string) {\n        const i = this.selectedRecords.findIndex(r => r.id === record.id);\n        if(i === -1) {\n            throw new Error(`Record ${record.id} is not in the selected records`);\n        }\n        this.selectedRecords.splice(i, 1);\n        this.selectedRecords.splice(newIndex, 0, this.getItem(record));\n        this.events.next({type: SelectionEventType.MOVE, records: [record], source});\n    }\n\n    /**\n     * Unselect all selected records\n     * Emits a SelectionEvent\n     */\n    public clearSelectedRecords(source?: string) {\n        this.selectedRecords.splice(0);\n        const newUnselectedRecords: Record[] = [];\n        if (this.searchService.results && this.searchService.results.records) {\n            for (const record of this.searchService.results.records) {\n                if(record.$selected){\n                    record.$selected = false;\n                    newUnselectedRecords.push(record);\n                }\n            }\n        }\n        if(newUnselectedRecords.length > 0)\n            this._events.next({type: SelectionEventType.UNSELECT, records: newUnselectedRecords, source});\n    }\n\n    private buildSelectRecordsAction(): Action {\n        return new Action({\n            icon: \"far fa-square\",\n            text: \"msg#resultsSelector.selectDocuments\",\n            title: this.allRecordsSelected ? \"msg#resultsSelector.unselectDocumentsTitle\" : \"msg#resultsSelector.selectDocumentsTitle\",\n            name: \"selectDocuments\",\n            titlePlacement: \"top\",\n            messageParams: {values: {count: this.selectedRecords.length}},\n            action: (item, $event) => {\n                this.toggleSelectedRecords(undefined, \"multiple-selector\");\n            },\n            updater: (item) => {\n                item.icon = this.haveSelectedRecords ? \"far fa-check-square\" : \"far fa-square\";\n                item.title = this.allRecordsSelected ? \"msg#resultsSelector.unselectDocumentsTitle\" : \"msg#resultsSelector.selectDocumentsTitle\";\n                item.messageParams = {values: {count: this.selectedRecords.length}};\n            }\n        });\n    }\n}","import {Component, Input} from \"@angular/core\";\nimport {Record} from \"@sinequa/core/web-services\";\nimport {SelectionService} from \"../../selection.service\";\n\n@Component({\n    selector: \"sq-result-selector\",\n    templateUrl: \"./result-selector.html\",\n    standalone: false\n})\nexport class BsResultSelector {\n    @Input() record: Record;\n\n    constructor(\n        public selectionService: SelectionService) {\n    }\n\n}","<div class=\"sq-select-results-item form-check\"\n    title=\"{{(record.$selected ? 'msg#resultSelector.unselectDocument' : 'msg#resultSelector.selectDocument') | sqMessage}}\"\n    [attr.aria-label]=\"(record.$selected ? 'msg#resultSelector.unselectDocument' : 'msg#resultSelector.selectDocument') | sqMessage\">\n    <input type=\"checkbox\" class=\"form-check-input\" id=\"select_record_{{record.id}}\" [checked]=\"record.$selected\" (change)=\"selectionService.toggleSelectedRecords(record, 'result')\">\n    <label for=\"select_record_{{record.id}}\" role=\"button\" class=\"form-check-label\">&#8203;</label>\n</div>","import {Component, Input} from \"@angular/core\";\nimport {SelectionService} from \"../../selection.service\";\nimport {Action} from '@sinequa/components/action';\n\n@Component({\n    selector: \"sq-results-selector\",\n    templateUrl: \"./results-selector.html\",\n    standalone: false\n})\nexport class BsResultsSelector {\n    @Input() size: string;\n    @Input() style: string;\n    @Input() rightAligned: boolean;\n\n    constructor(\n        public selectionService: SelectionService) {\n    }\n\n    public get actions(): Action[] {\n        return this.rightAligned? this.selectionService.selectionActions.slice().reverse() : this.selectionService.selectionActions;\n    }\n}\n","<div class=\"btn-group\" [sq-action-buttons]=\"{items: actions, size: size, style: style, rightAligned: rightAligned}\"></div>","import { Component, ContentChild, TemplateRef, Input, Output, EventEmitter } from \"@angular/core\";\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Record } from \"@sinequa/core/web-services\";\nimport { SearchService } from '@sinequa/components/search';\nimport { SelectionService, SelectionItem } from '../../selection.service';\n\n@Component({\n    selector: \"sq-selection-arranger\",\n    templateUrl: \"./selection-arranger.component.html\",\n    styleUrls: [\"./selection-arranger.component.scss\"],\n    standalone: false\n})\nexport class BsSelectionArranger {\n\n    /**\n     * If a list of records is supplied it is used to display and rearrange the list of records.\n     * If this list is not supplied, the SelectionService list of items is used instead.\n     */\n    @Input() records?: Record[];\n\n    /**\n     * A template must be passed by transclusion to display each record in the selection\n     */\n    @ContentChild(TemplateRef, {static: false}) recordTpl: TemplateRef<any>;\n\n    /**\n     * Triggers event when the user moves or removes a record in the list.\n     */\n    @Output() change = new EventEmitter<SelectionItem[]>();\n\n    constructor(\n        public searchService: SearchService,\n        public selectionService: SelectionService\n    ) {\n    }\n\n    getRecords(): SelectionItem[] {\n        return this.records || this.selectionService.getSelectedItems();\n    }\n\n    dropRecord(event: CdkDragDrop<string[]>) {\n        if (event.isPointerOverContainer) { //https://material.angular.io/cdk/drag-drop/api#CdkDragExit\n            if(this.records) {\n                moveItemInArray(this.records, event.previousIndex, event.currentIndex); // Reorder the items when item dragged inside the drop zone\n            }\n            else {\n                const record = this.selectionService.getSelectedItems()[event.previousIndex];\n                this.selectionService.moveSelectedRecord(record as Record, event.currentIndex);\n            }\n        }\n        else {\n            if(this.records) {\n                this.records.splice(event.previousIndex, 1);\n            }\n            else {\n                const record = this.selectionService.getSelectedItems()[event.previousIndex];\n                this.selectionService.toggleSelectedRecords(record as Record, \"selection-arranger\");\n            }\n        }\n        this.change.next(this.getRecords());\n    }\n\n    removeRecord(record: Record) {\n        if(this.records) {\n            this.records.splice(this.records.indexOf(record), 1);\n        }\n        else {\n            this.selectionService.toggleSelectedRecords(record, \"selection-arranger\");\n        }\n        this.change.next(this.getRecords());\n    }\n}","<div cdkDropList  (cdkDropListDropped)=\"dropRecord($event)\">\n    <div class=\"card\" *ngFor=\"let record of getRecords(); let i=index\" cdkDrag>\n        <div class=\"record-placeholder\" *cdkDragPlaceholder></div>\n        <ng-container *ngTemplateOutlet=\"recordTpl; context:{$implicit: record, index: i}\"></ng-container>\n        <i class=\"position-absolute fas fa-times record-close\" (click)=\"removeRecord(record)\"></i>\n    </div>\n</div>","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { IntlModule } from \"@sinequa/core/intl\";\n\nimport { BsActionModule } from \"@sinequa/components/action\";\n\nimport { BsResultsSelector } from \"./results-selector/results-selector\";\nimport { BsResultSelector } from \"./result-selector/result-selector\";\nimport { BsSelectionArranger } from \"./selection-arranger/selection-arranger.component\";\nimport { SELECTION_OPTIONS, defaultSelectionOptions } from \"../selection.service\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        DragDropModule,\n\n        IntlModule,\n\n        BsActionModule,\n    ],\n    declarations: [\n        BsResultsSelector, BsResultSelector, BsSelectionArranger\n    ],\n    exports: [\n        BsResultsSelector, BsResultSelector, BsSelectionArranger\n    ],\n    providers: [\n        {provide: SELECTION_OPTIONS, useValue: defaultSelectionOptions}\n    ]\n})\nexport class BsSelectionModule {\n}\n","export default {\n    \"resultSelector\": {\n        \"selectDocument\": \"Select document\",\n        \"unselectDocument\": \"Unselect document\"\n    },\n    \"resultsSelector\": {\n        \"selectDocuments\": \"{count, selectordinal, =0 {} other {(#)}}\",\n        \"selectDocumentsTitle\": \"Select documents\",\n        \"unselectDocumentsTitle\": \"Unselect documents\"\n    },\n    \"selection\": {\n        \"selectedDocuments\": \"{count, plural, =0 {} one {# selected document} other {# selected documents}}\"\n    }\n};\n","export default {\n    \"resultSelector\": {\n        \"selectDocument\": \"Sélectionner le document\",\n        \"unselectDocument\": \"Désélectionner le document\"\n    },\n    \"resultsSelector\": {\n        \"selectDocuments\": \"{count, selectordinal, =0 {} other {(#)}}\",\n        \"selectDocumentsTitle\": \"Sélectionner les documents\",\n        \"unselectDocumentsTitle\": \"Désélectionner les documents\",\n    },\n    \"selection\": {\n        \"selectedDocuments\": \"{count, plural, =0 {} one {# document sélectionné} other {# documents sélectionnés}}\"\n    }\n};\n","export default {\n    \"resultSelector\": {\n        \"selectDocument\": \"Dokument auswählen\",\n        \"unselectDocument\": \"Dokumentauswahl aufheben\"\n    },\n    \"resultsSelector\": {\n        \"selectDocuments\": \"{count, selectordinal, =0 {} other {(#)}}\",\n        \"selectDocumentsTitle\": \"Dokumente auswählen\",\n        \"unselectDocumentsTitle\": \"Dokumentauswahl aufheben\",\n    },\n    \"selection\": {\n        \"selectedDocuments\": \"{count, plural, =0 {} one {# ausgewähltes Dokument} other {# ausgewählte Dokumente}}\"\n    }\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\n\nimport _enSelection from \"./en\";\nimport _frSelection from \"./fr\";\nimport _deSelection from \"./de\";\n\nconst enSelection = Utils.merge({}, _enSelection, enSearch);\nconst frSelection = Utils.merge({}, _frSelection, frSearch);\nconst deSelection = Utils.merge({}, _deSelection, deSearch);\n\nexport { enSelection, frSelection, deSelection };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SelectionService","i2","i2.SelectionService"],"mappings":"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"}