@seniorsistemas/angular-components 19.3.4 → 19.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +1 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +5 -3
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +401 -43
- package/esm2022/picklist/lib/picklist/picklist.module.mjs +5 -25
- package/esm2022/picklist/lib/picklist/types/index.mjs +1 -1
- package/esm2022/picklist/lib/picklist/types/picklist-item.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +4 -2
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +402 -64
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/package.json +1 -1
- package/picklist/lib/picklist/picklist.component.d.ts +86 -19
- package/picklist/lib/picklist/picklist.module.d.ts +1 -6
- package/picklist/lib/picklist/types/index.d.ts +1 -1
- package/picklist/lib/picklist/types/picklist-item.d.ts +20 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-picklist.mjs","sources":["../../projects/angular-components/picklist/src/lib/picklist/picklist.component.ts","../../projects/angular-components/picklist/src/lib/picklist/picklist.component.html","../../projects/angular-components/picklist/src/lib/picklist/picklist.module.ts","../../projects/angular-components/picklist/src/seniorsistemas-angular-components-picklist.ts"],"sourcesContent":["import { CdkDrag, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { AfterViewInit, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, OnChanges, Output, QueryList, SimpleChanges, TemplateRef, inject } from '@angular/core';\nimport { pipe } from 'rxjs';\nimport { PickListItem } from './types';\nimport { randomHash } from '@seniorsistemas/angular-components/utils';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\n\ninterface InternalPicklistItem<T = any> extends PickListItem<T> {\n invisible?: boolean;\n selected?: boolean;\n}\n\ntype CdkDragEvent = { source: CdkDrag<InternalPicklistItem<any>> };\n\n/**\n * @description Componente de lista de dupla seleção (picklist) com suporte a\n * arrastar e soltar, filtro, checkboxes e template customizável para cada item.\n * Emite eventos ao mover itens entre as listas.\n *\n * @example\n * ```html\n * <s-picklist\n * [itensToSelect]=\"itensDisponiveis\"\n * [selectedItens]=\"itensSelecionados\"\n * (selectedItensChange)=\"onSelecaoMudou($event)\" />\n * ```\n *\n * @category Data\n */\n@Component({\n selector: 's-picklist',\n templateUrl: './picklist.component.html',\n styleUrls: ['./picklist.component.scss'],\n})\nexport class PicklistComponent implements AfterViewInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n /** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */\n @Input()\n public itensToSelect: PickListItem<any>[] = [];\n\n /** @description Lista de itens já selecionados (coluna direita). @default [] */\n @Input()\n public selectedItens: PickListItem<any>[] = [];\n\n /** @description Rótulo do título da lista de disponíveis. */\n @Input()\n public availableItensLabel?: string;\n\n /** @description Placeholder da busca na lista de disponíveis. */\n @Input()\n public availableItensPlaceholder?: string;\n\n /** @description Rótulo do botão de adicionar itens selecionados. */\n @Input()\n public addSelectedItensLabel?: string;\n\n /** @description Rótulo do botão de adicionar todos os itens. */\n @Input()\n public addAllItensLabel?: string;\n\n /** @description Rótulo do título da lista de selecionados. */\n @Input()\n public selectedItensLabel?: string;\n\n /** @description Placeholder da busca na lista de selecionados. */\n @Input()\n public selectedItensPlaceholder?: string;\n\n /** @description Rótulo do botão de remover itens selecionados. */\n @Input()\n public removeSelectedItemsLabel?: string;\n\n /** @description Rótulo do botão de remover todos os itens. */\n @Input()\n public removeAllItemsLabel?: string;\n\n /** @description Exibe checkbox nos itens das listas. @default false */\n @Input()\n public showCheckbox = false;\n\n /** @description Propriedade usada para filtrar os itens das listas. @default '' */\n @Input()\n public filterBy = '';\n\n /** @description Emitido quando a lista de selecionados muda. */\n @Output()\n public selectedItensChange = new EventEmitter<any[]>();\n\n /** @description Emitido quando a lista de disponíveis muda. */\n @Output()\n public itensToSelectChange = new EventEmitter<any[]>();\n\n public availableItensFilter = '';\n\n public selectedItensFilter = '';\n\n public itemToSelectTemplate: TemplateRef<any> | null = null;\n\n public itemSelectedTemplate: TemplateRef<any> | null = null;\n\n public itensToSelectFilterUtil: {\n rawItensToSelect: InternalPicklistItem[];\n filteredItensToSelect: InternalPicklistItem[];\n } = {\n rawItensToSelect: [],\n filteredItensToSelect: [],\n };\n\n selectedItensFilterUtil: {\n rawSelectedItens: InternalPicklistItem[];\n filteredSelectedItens: InternalPicklistItem[];\n } = {\n rawSelectedItens: [],\n filteredSelectedItens: [],\n };\n\n public selectedItensMap: Set<InternalPicklistItem> = new Set();\n public itensToSelectId = randomHash('itensToSelect');\n public selectedItensId = randomHash('selectedItens');\n\n private _logErrorTemplate = true;\n @ContentChildren(TemplateDirective)\n private templates: QueryList<TemplateDirective> | null = null;\n\n ngAfterViewInit(): void {\n this.itemToSelectTemplate = this.templates?.find((x) => x.type === 'item-to-select')?.template ?? null;\n this.itemSelectedTemplate = this.templates?.find((x) => x.type === 'selected-item')?.template ?? null;\n if (this._logErrorTemplate) {\n if (!this.itemToSelectTemplate) {\n console.error(`Missing template for 'item-to-select' add this template using sTemplate directive.`);\n }\n if (!this.itemSelectedTemplate) {\n console.error(`Missing template for 'selected-item' add this template using sTemplate directive.`);\n }\n }\n this.cdr.detectChanges();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['itensToSelect']?.firstChange) {\n this.itensToSelectFilterUtil = {\n rawItensToSelect: this.itensToSelect,\n filteredItensToSelect: this.itensToSelect,\n };\n }\n\n if (changes['selectedItens']?.firstChange) {\n this.selectedItensFilterUtil = {\n filteredSelectedItens: this.selectedItens,\n rawSelectedItens: this.selectedItens,\n };\n }\n }\n\n toggleSelected(internalPicklistItem: InternalPicklistItem, containerListId: string) {\n if (internalPicklistItem.disabled) {\n return;\n }\n this.unselectedItensByListId(this.getOppositiveId(containerListId));\n internalPicklistItem.selected = !internalPicklistItem.selected;\n if (internalPicklistItem.selected) {\n this.selectedItensMap.add(internalPicklistItem);\n } else {\n this.selectedItensMap.delete(internalPicklistItem);\n }\n this.cdr.detectChanges();\n }\n\n remove(all = false) {\n const itens = filterEnabled(all ? this.selectedItensFilterUtil.rawSelectedItens : this.selectedItensMap);\n if (!itens.length) {\n return;\n }\n itens.forEach((itemRemove) => {\n this.itensToSelect.push(itemRemove);\n itemRemove.selected = false;\n this.selectedItensMap.delete(itemRemove);\n });\n this.selectedItens = this.selectedItens.filter((x) => !itens.includes(x));\n this.selectedItensFilterUtil.rawSelectedItens = this.selectedItens;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n this.cdr.detectChanges();\n }\n\n add(all = false) {\n const itens = filterEnabled(all ? this.itensToSelectFilterUtil.rawItensToSelect : this.selectedItensMap);\n if (!itens.length) {\n return;\n }\n itens.forEach((itemRemove) => {\n this.selectedItens.push(itemRemove);\n itemRemove.selected = false;\n this.selectedItensMap.delete(itemRemove);\n });\n this.itensToSelect = this.itensToSelect.filter((x) => !itens.includes(x));\n this.itensToSelectFilterUtil.rawItensToSelect = this.itensToSelect;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n this.cdr.detectChanges();\n }\n\n filterItensToSelect() {\n let searchTerm = this.availableItensFilter;\n searchTerm = searchTerm.trim();\n if (searchTerm) {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter(\n (item) => compareStrings(item.data[this.filterBy], searchTerm),\n );\n } else {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n }\n this.cdr.detectChanges();\n }\n\n filterSelectedItens() {\n let searchTerm = this.selectedItensFilter;\n searchTerm = searchTerm.trim();\n if (searchTerm) {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter(\n (item) => compareStrings(item.data[this.filterBy], searchTerm),\n );\n } else {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n }\n }\n\n drop(event: CdkDragDrop<InternalPicklistItem[]>) {\n const isDifferentContainer = event.container !== event.previousContainer;\n if (!isDifferentContainer) {\n return;\n }\n\n const isRemovedItens = event.previousContainer.id === this.selectedItensId;\n if (isRemovedItens) {\n this.remove();\n } else {\n this.add();\n }\n this.cdr.detectChanges();\n }\n\n onDragStart(event: CdkDragEvent, dragListId: string) {\n this.unselectedItensByListId(this.getOppositiveId(dragListId));\n event.source.data.selected = true;\n this.selectedItensMap.add(event.source.data);\n this.selectedItensMap.forEach((x) => (x.invisible = true));\n this.cdr.detectChanges();\n }\n\n onDragRelease() {\n this.selectedItensMap.forEach((item) => (item.invisible = false));\n }\n\n checkAllAvailableItensChange(target: HTMLInputElement) {\n const checked = target.checked;\n this._checkAllSelectedItensChange(\n checked,\n this.itensToSelectFilterUtil.filteredItensToSelect,\n this.itensToSelectId,\n );\n }\n\n checkAllSelectedItensChange(target: HTMLInputElement) {\n const checked = target.checked;\n this._checkAllSelectedItensChange(\n checked,\n this.selectedItensFilterUtil.filteredSelectedItens,\n this.selectedItensId,\n );\n }\n\n get disableSelectedItensCheckbox() {\n return filterEnabled(this.selectedItensFilterUtil.filteredSelectedItens).length === 0;\n }\n\n get disableItensToSelectCheckbox() {\n return filterEnabled(this.itensToSelectFilterUtil.filteredItensToSelect).length === 0;\n }\n\n get itensToSelectAllSelected() {\n return this._checkAllSelectedByList(this.itensToSelectFilterUtil.filteredItensToSelect);\n }\n\n get selectedItensAllSelected() {\n return this._checkAllSelectedByList(this.selectedItensFilterUtil.filteredSelectedItens);\n }\n\n get canAddItens() {\n return (this.itensToSelect as InternalPicklistItem[]).filter((x) => x?.selected).length > 0;\n }\n\n get canRemoveItens() {\n return (this.selectedItens as InternalPicklistItem[]).filter((x) => x?.selected).length > 0;\n }\n\n private _checkAllSelectedByList(list: InternalPicklistItem[]) {\n const _listItens = filterEnabled(list);\n if (!_listItens.length) {\n return false;\n } else {\n return _listItens.every((x) => x.selected);\n }\n }\n\n private _checkAllSelectedItensChange(checked: boolean, list: InternalPicklistItem[], listId: string) {\n this.unselectedItensByListId(listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId);\n filterEnabled(list).forEach((item) => {\n item.selected = checked;\n this.selectedItensMap.add(item);\n });\n this.cdr.detectChanges();\n }\n\n private unselectedItensByListId(listId: string) {\n const clearList = this.getAllElementsByListId(listId);\n clearList.forEach((x) => {\n x.selected = false;\n this.selectedItensMap.delete(x);\n });\n this.cdr.detectChanges();\n }\n\n private getAllElementsByListId(listId: string) {\n return listId === this.selectedItensId\n ? this.selectedItensFilterUtil.rawSelectedItens\n : this.itensToSelectFilterUtil.rawItensToSelect;\n }\n\n private getOppositiveId(listId: string) {\n return listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId;\n }\n\n private emitData() {\n this.itensToSelectChange.emit(parseValueEmit(this.itensToSelect));\n this.selectedItensChange.emit(parseValueEmit(this.selectedItens));\n }\n}\n\nconst normalizeString = (str: string) => {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n};\n\n/**\n * Compares two strings by normalizing them to a case-insensitive and accent-free form,\n * and checks if the main string contains the substring.\n *\n * @param mainString - The string to be searched.\n * @param substring - The string to search for within the main string.\n * @returns A boolean indicating whether the normalized main string contains the normalized substring.\n */\n\nconst compareStrings = (mainString: string, substring: string) => {\n return normalizeString(mainString).includes(normalizeString(substring));\n};\n\nconst filterEnabled = (list: PickListItem<any>[] | Set<InternalPicklistItem>): InternalPicklistItem[] => {\n const _list = list instanceof Set ? Array.from(list) : list;\n return _list.filter((x) => !x.disabled);\n};\n\nconst mapData = (list: PickListItem<any>[]) => {\n return list.map((x) => x.data);\n};\n\nconst parseValueEmit = pipe(filterEnabled, mapData);\n\nexport const parseItensPickList = <T>(array: T[], disabledFn?: (item: T) => boolean): PickListItem<T>[] => {\n return array.map((x) => {\n return {\n data: x,\n disabled: disabledFn ? disabledFn(x) : false,\n };\n });\n};\n\n","<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data, selected: item.selected, disabled: item.disabled }\"></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n>\n @if (showCheckbox) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($event.target)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy && showCheckbox) {\n <div class=\"picklist-filter\">\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!canAddItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n }\n \"\n ></ng-container>\n </ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n <div\n class=\"picklist-filter\"\n *ngIf=\"filterBy && showCheckbox\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: { disabled: disableSelectedItensCheckbox, checked: selectedItensAllSelected, changeFn: checkAllSelectedItensChange.bind(this) }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!canRemoveItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { PicklistComponent } from './picklist.component';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\n\n\n@NgModule({\n declarations: [PicklistComponent],\n imports: [\n CommonModule,\n TranslateModule,\n DragDropModule,\n FormsModule,\n ButtonModule,\n ],\n exports: [PicklistComponent]\n})\nexport class PicklistModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-picklist.mjs","sources":["../../projects/angular-components/picklist/src/lib/picklist/picklist.component.ts","../../projects/angular-components/picklist/src/lib/picklist/picklist.component.html","../../projects/angular-components/picklist/src/lib/picklist/picklist.module.ts","../../projects/angular-components/picklist/src/seniorsistemas-angular-components-picklist.ts"],"sourcesContent":["import { CdkDrag, CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n EventEmitter,\n inject,\n input,\n Input,\n OnChanges,\n OnInit,\n output,\n Output,\n QueryList,\n signal,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\nimport { LoadingStateIndicators, LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { randomHash } from '@seniorsistemas/angular-components/utils';\nimport { debounceTime, distinctUntilChanged, pipe, Subject, switchMap, tap } from 'rxjs';\nimport { PickListItem, PicklistItemMove, PicklistLazyLoadEvent, PicklistLoader, PicklistTarget } from './types';\n\ninterface InternalPicklistItem<T = any> extends PickListItem<T> {\n invisible?: boolean;\n selected?: boolean;\n}\n\ntype CdkDragEvent<T> = { source: CdkDrag<InternalPicklistItem<T>> };\n\n/**\n * @description Componente de lista de dupla seleção (picklist) com suporte a\n * arrastar e soltar, filtro, checkboxes e template customizável para cada item.\n * Emite eventos ao mover itens entre as listas.\n *\n * @example\n * ```html\n * <s-picklist\n * [itensToSelect]=\"itensDisponiveis\"\n * [selectedItens]=\"itensSelecionados\"\n * (selectedItensChange)=\"onSelecaoMudou($event)\" />\n * ```\n *\n * @category Data\n */\n@Component({\n standalone: true,\n imports: [TranslateModule, DragDropModule, FormsModule, ButtonComponent, NgTemplateOutlet, LoadingStateModule],\n selector: 's-picklist',\n templateUrl: './picklist.component.html',\n styleUrls: ['./picklist.component.scss'],\n})\nexport class PicklistComponent<T> implements AfterViewInit, OnChanges, OnInit {\n private cdr = inject(ChangeDetectorRef);\n /** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */\n @Input()\n public itensToSelect: PickListItem<T>[] = [];\n\n /** @description Lista de itens já selecionados (coluna direita). @default [] */\n @Input()\n public selectedItens: PickListItem<T>[] = [];\n\n /** @description Rótulo do título da lista de disponíveis. */\n @Input()\n public availableItensLabel?: string;\n\n /** @description Placeholder da busca na lista de disponíveis. */\n @Input()\n public availableItensPlaceholder?: string;\n\n /** @description Rótulo do botão de adicionar itens selecionados. */\n @Input()\n public addSelectedItensLabel?: string;\n\n /** @description Rótulo do botão de adicionar todos os itens. */\n @Input()\n public addAllItensLabel?: string;\n\n /** @description Rótulo do título da lista de selecionados. */\n @Input()\n public selectedItensLabel?: string;\n\n /** @description Placeholder da busca na lista de selecionados. */\n @Input()\n public selectedItensPlaceholder?: string;\n\n /** @description Rótulo do botão de remover itens selecionados. */\n @Input()\n public removeSelectedItemsLabel?: string;\n\n /** @description Rótulo do botão de remover todos os itens. */\n @Input()\n public removeAllItemsLabel?: string;\n\n /** @description Exibe checkbox nos itens das listas. @default false */\n @Input()\n public showCheckbox = false;\n\n /** @description Propriedade usada para filtrar os itens das listas. @default '' */\n @Input()\n public filterBy = '';\n\n /** @description Habilita o carregamento preguiçoso (lazy load) para as listas. @default false */\n lazyLoad = input<boolean>(false);\n\n /** @description Número de linhas a serem exibidas por página caso o lazyLoad esteja habilitado. @default 10 */\n rows = input<number>(10);\n\n /** @description Função loader para a lista de disponíveis (to-select). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */\n sourceLoader = input<PicklistLoader<T>>();\n\n /** @description Função loader para a lista de selecionados (selected). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */\n targetLoader = input<PicklistLoader<T>>();\n\n protected readonly _loadingTarget = signal<boolean>(false);\n\n protected readonly _loadingSource = signal<boolean>(false);\n\n /** @description Emitido quando um item é movido entre as listas e o lazy load está habilitado. */\n nodeMoved = output<PicklistItemMove<T>>();\n\n /** @description Emitido quando a lista de selecionados muda. */\n @Output()\n public selectedItensChange = new EventEmitter<any[]>();\n\n /** @description Emitido quando a lista de disponíveis muda. */\n @Output()\n public itensToSelectChange = new EventEmitter<any[]>();\n\n public availableItensFilter = '';\n\n public selectedItensFilter = '';\n\n public itemToSelectTemplate: TemplateRef<T> | null = null;\n\n public itemSelectedTemplate: TemplateRef<T> | null = null;\n\n protected logoIndicator = LoadingStateIndicators.Logo;\n\n protected itensToSelectFilterUtil: {\n allItensSelected: boolean;\n rawItensToSelect: InternalPicklistItem[];\n filteredItensToSelect: InternalPicklistItem[];\n } = {\n allItensSelected: false,\n rawItensToSelect: [],\n filteredItensToSelect: [],\n };\n\n protected selectedItensFilterUtil: {\n allItensSelected: boolean;\n rawSelectedItens: InternalPicklistItem[];\n filteredSelectedItens: InternalPicklistItem[];\n } = {\n allItensSelected: false,\n rawSelectedItens: [],\n filteredSelectedItens: [],\n };\n\n public selectedItensMap: Set<InternalPicklistItem> = new Set();\n public itensToSelectId = randomHash('itensToSelect');\n public selectedItensId = randomHash('selectedItens');\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly sourceFilterSubject = new Subject<string>();\n private readonly targetFilterSubject = new Subject<string>();\n private readonly sourceLoadSubject = new Subject<PicklistLazyLoadEvent>();\n private readonly targetLoadSubject = new Subject<PicklistLazyLoadEvent>();\n private _internalTotalSource = 0;\n private _internalTotalTarget = 0;\n private sourceCurrentPage = 0;\n private targetCurrentPage = 0;\n\n private _logErrorTemplate = true;\n @ContentChildren(TemplateDirective)\n private templates: QueryList<TemplateDirective> | null = null;\n\n ngAfterViewInit(): void {\n this.itemToSelectTemplate = this.templates?.find((x) => x.type === 'item-to-select')?.template ?? null;\n this.itemSelectedTemplate = this.templates?.find((x) => x.type === 'selected-item')?.template ?? null;\n if (this._logErrorTemplate) {\n if (!this.itemToSelectTemplate) {\n console.error(`Missing template for 'item-to-select' add this template using sTemplate directive.`);\n }\n if (!this.itemSelectedTemplate) {\n console.error(`Missing template for 'selected-item' add this template using sTemplate directive.`);\n }\n }\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.setupLoaderPipelines();\n this.setupLazyLoadEvents();\n this.setupFilterDebounce();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n const changedItensToSelect = changes['itensToSelect'];\n const changedSelectedItens = changes['selectedItens'];\n if (changedItensToSelect && !this.lazyLoad()) {\n this.itensToSelectFilterUtil = {\n allItensSelected: this.itensToSelectFilterUtil.allItensSelected || false,\n rawItensToSelect: this.itensToSelect,\n filteredItensToSelect: this.itensToSelect,\n };\n } else if (changedItensToSelect && this.lazyLoad()) {\n this.itensToSelectFilterUtil.rawItensToSelect = [\n ...this.itensToSelectFilterUtil.rawItensToSelect,\n ...this.itensToSelect,\n ];\n if (this.itensToSelectFilterUtil.allItensSelected) {\n this._checkAllSelectedItensChange(\n this.itensToSelectFilterUtil.allItensSelected,\n this.itensToSelectFilterUtil.rawItensToSelect,\n this.itensToSelectId,\n );\n }\n this.itensToSelectFilterUtil.filteredItensToSelect = [...this.itensToSelectFilterUtil.rawItensToSelect];\n }\n\n if (changedSelectedItens && !this.lazyLoad()) {\n this.selectedItensFilterUtil = {\n allItensSelected: this.selectedItensFilterUtil.allItensSelected || false,\n filteredSelectedItens: this.selectedItens,\n rawSelectedItens: this.selectedItens,\n };\n } else if (changedSelectedItens && this.lazyLoad()) {\n this.selectedItensFilterUtil.rawSelectedItens = [\n ...this.selectedItensFilterUtil.rawSelectedItens,\n ...this.selectedItens,\n ];\n if (this.selectedItensFilterUtil.allItensSelected) {\n this._checkAllSelectedItensChange(\n this.selectedItensFilterUtil.allItensSelected,\n this.selectedItensFilterUtil.rawSelectedItens,\n this.selectedItensId,\n );\n }\n this.selectedItensFilterUtil.filteredSelectedItens = [...this.selectedItensFilterUtil.rawSelectedItens];\n }\n }\n\n toggleSelected(internalPicklistItem: InternalPicklistItem, containerListId: string) {\n if (internalPicklistItem.disabled) {\n return;\n }\n this.unselectedItensByListId(this.getOppositiveId(containerListId));\n internalPicklistItem.selected = !internalPicklistItem.selected;\n if (internalPicklistItem.selected) {\n this.selectedItensMap.add(internalPicklistItem);\n } else {\n this.selectedItensMap.delete(internalPicklistItem);\n }\n\n const containerFilterUtil =\n containerListId === this.selectedItensId ? this.selectedItensFilterUtil : this.itensToSelectFilterUtil;\n const isAllSelected = this._checkAllSelectedByList(\n containerListId === this.selectedItensId\n ? this.selectedItensFilterUtil.filteredSelectedItens\n : this.itensToSelectFilterUtil.filteredItensToSelect,\n );\n if (this.lazyLoad() && !internalPicklistItem.selected && containerFilterUtil.allItensSelected) {\n containerFilterUtil.allItensSelected = false;\n } else if (this.lazyLoad() && isAllSelected && containerFilterUtil.allItensSelected !== isAllSelected) {\n containerFilterUtil.allItensSelected = isAllSelected;\n }\n this.cdr.detectChanges();\n }\n\n remove(all = false) {\n const itens = filterEnabled<T>(all ? this.selectedItensFilterUtil.rawSelectedItens : this.selectedItensMap);\n if (!itens.length) {\n return;\n }\n const allElements = this.lazyLoad() ? [] : this.selectedItensFilterUtil.rawSelectedItens;\n const revertAction = () => {\n this.selectedItensFilterUtil.rawSelectedItens = [\n ...this.selectedItensFilterUtil.rawSelectedItens,\n ...itens.map((i) => {\n i.selected = false;\n return i;\n }),\n ];\n this.itensToSelectFilterUtil.rawItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter(\n (x) => !itens.includes(x),\n );\n this.selectedItensFilterUtil.allItensSelected = false;\n if (this.lazyLoad()) {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n } else {\n this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n }\n this.cdr.detectChanges();\n };\n this.nodeMoved.emit({\n direction: 'to-select',\n items: all ? allElements : parseValueEmit(Array.from(this.selectedItensMap)),\n moveAll: all,\n revertAction,\n });\n this.itensToSelectFilterUtil.rawItensToSelect = [\n ...this.itensToSelectFilterUtil.rawItensToSelect,\n ...itens.map((itemRemove) => {\n itemRemove.selected = false;\n this.selectedItensMap.delete(itemRemove);\n return itemRemove;\n }),\n ];\n this.selectedItensFilterUtil.rawSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter(\n (x) => !itens.includes(x),\n );\n this.selectedItensFilterUtil.allItensSelected = false;\n if (this.lazyLoad()) {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n } else {\n this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n }\n this.cdr.detectChanges();\n }\n\n add(all = false) {\n const itens = filterEnabled<T>(all ? this.itensToSelectFilterUtil.rawItensToSelect : this.selectedItensMap);\n if (!itens.length) {\n return;\n }\n\n const allElements = this.lazyLoad() ? [] : this.itensToSelectFilterUtil.rawItensToSelect;\n const revertAction = () => {\n this.itensToSelectFilterUtil.rawItensToSelect = [\n ...this.itensToSelectFilterUtil.rawItensToSelect,\n ...itens.map((i) => {\n i.selected = false;\n this.selectedItensMap.delete(i);\n return i;\n }),\n ];\n this.selectedItensFilterUtil.rawSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter(\n (x) => !itens.includes(x),\n );\n this.itensToSelectFilterUtil.allItensSelected = false;\n if (this.lazyLoad()) {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n } else {\n this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n }\n this.cdr.detectChanges();\n };\n this.nodeMoved.emit({\n direction: 'selected',\n items: all ? allElements : parseValueEmit(Array.from(this.selectedItensMap)),\n moveAll: all,\n revertAction,\n });\n this.selectedItensFilterUtil.rawSelectedItens = [\n ...this.selectedItensFilterUtil.rawSelectedItens,\n ...itens.map((itemRemove) => {\n itemRemove.selected = false;\n this.selectedItensMap.delete(itemRemove);\n return itemRemove;\n }),\n ];\n this.itensToSelectFilterUtil.rawItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter(\n (x) => !itens.includes(x),\n );\n this.itensToSelectFilterUtil.allItensSelected = false;\n if (this.lazyLoad()) {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n } else {\n this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n this.filterSelectedItens();\n this.filterItensToSelect();\n this.emitData();\n }\n this.cdr.detectChanges();\n }\n\n filterItensToSelect(): void {\n if (this.lazyLoad()) {\n this._loadingSource.set(true);\n this.sourceFilterSubject.next(this.availableItensFilter);\n return;\n }\n let searchTerm = this.availableItensFilter.trim();\n if (searchTerm) {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter(\n (item) => compareStrings(item.data[this.filterBy], searchTerm),\n );\n } else {\n this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;\n }\n this.cdr.detectChanges();\n }\n\n filterSelectedItens(): void {\n if (this.lazyLoad()) {\n this._loadingTarget.set(true);\n this.targetFilterSubject.next(this.selectedItensFilter);\n return;\n }\n let searchTerm = this.selectedItensFilter.trim();\n if (searchTerm) {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter(\n (item) => compareStrings(item.data[this.filterBy], searchTerm),\n );\n } else {\n this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;\n }\n }\n\n drop(event: CdkDragDrop<InternalPicklistItem[]>) {\n const isDifferentContainer = event.container !== event.previousContainer;\n if (!isDifferentContainer) {\n return;\n }\n\n const isRemovedItens = event.previousContainer.id === this.selectedItensId;\n if (isRemovedItens) {\n this.remove();\n } else {\n this.add();\n }\n this.cdr.detectChanges();\n }\n\n onDragStart(event: CdkDragEvent<T>, dragListId: string) {\n this.unselectedItensByListId(this.getOppositiveId(dragListId));\n event.source.data.selected = true;\n this.selectedItensMap.add(event.source.data);\n this.selectedItensMap.forEach((x) => (x.invisible = true));\n this.cdr.detectChanges();\n }\n\n onDragRelease() {\n this.selectedItensMap.forEach((item) => (item.invisible = false));\n }\n\n checkAllAvailableItensChange(checked: boolean) {\n this._checkAllSelectedItensChange(\n checked,\n this.itensToSelectFilterUtil.filteredItensToSelect,\n this.itensToSelectId,\n );\n }\n\n checkAllSelectedItensChange(checked: boolean) {\n this._checkAllSelectedItensChange(\n checked,\n this.selectedItensFilterUtil.filteredSelectedItens,\n this.selectedItensId,\n );\n }\n\n onScroll(event: Event, listId: string) {\n if (!this.lazyLoad()) {\n return;\n }\n\n const element = event.target as HTMLElement;\n const reachLimit = element.offsetHeight + element.scrollTop >= element.scrollHeight;\n if (!reachLimit) {\n return;\n }\n const target: PicklistTarget = listId === this.selectedItensId ? 'selected' : 'to-select';\n const targetReachLimit =\n target === 'selected'\n ? this.selectedItensFilterUtil.filteredSelectedItens.length >= this._internalTotalTarget\n : this.itensToSelectFilterUtil.filteredItensToSelect.length >= this._internalTotalSource;\n if (targetReachLimit) {\n return;\n }\n this.loadNextPage(target);\n }\n\n get disableSelectedItensCheckbox() {\n return filterEnabled<T>(this.selectedItensFilterUtil.filteredSelectedItens).length === 0;\n }\n\n get disableItensToSelectCheckbox() {\n return filterEnabled<T>(this.itensToSelectFilterUtil.filteredItensToSelect).length === 0;\n }\n\n get itensToSelectAllSelected() {\n return this._checkAllSelectedByList(this.itensToSelectFilterUtil.filteredItensToSelect);\n }\n\n get selectedItensAllSelected() {\n return this._checkAllSelectedByList(this.selectedItensFilterUtil.filteredSelectedItens);\n }\n\n get hasSelectedItens() {\n return this.selectedItensMap.size > 0;\n }\n\n /**\n * @description Recarrega as listas após a confirmação de uma movimentação pelo backend.\n *\n * **Por que usar?**\n * Ao mover itens, o componente atualiza a UI de forma otimista — os itens são movidos\n * imediatamente antes da confirmação do servidor. Após o backend confirmar a operação,\n * chame `resetList` para limpar e recarregar as listas afetadas do zero, garantindo que\n * o estado da UI reflita os dados reais persistidos.\n *\n * **O que espera?**\n * Recebe o objeto `PicklistItemMove<T>` emitido pelo output `(nodeMoved)`. O componente\n * utiliza `node.direction` para determinar qual lista recarregar (a lista de destino da\n * movimentação) e `node.moveAll` para verificar se a origem também deve ser recarregada\n * (por exemplo, ao mover todos os itens de uma lista para outra, ambas ficam com estado\n * alterado no backend).\n *\n * **O que faz?**\n * - Reseta o contador de página da lista de destino para `0` (primeira página).\n * - Limpa todos os itens carregados na lista de destino.\n * - Dispara imediatamente o carregamento da primeira página via `sourceLoader`/`targetLoader`.\n * - Se `node.moveAll === true`, repete o processo para a lista de origem.\n *\n * **Exemplo de uso:**\n * ```typescript\n * nodeMoved(node: PicklistItemMove<MyItem>): void {\n * this.service.moveItems(node).subscribe({\n * next: () => this.myPicklist().resetList(node),\n * error: () => node.revertAction(),\n * });\n * }\n * ```\n *\n * @param node - O objeto de movimentação emitido pelo output `(nodeMoved)`.\n */\n public resetList(node: PicklistItemMove<T>): void {\n if (!this.lazyLoad()) {\n return;\n }\n\n this._resetListByTarget(node.direction);\n if (node.moveAll) {\n this._resetListByTarget(node.direction === 'selected' ? 'to-select' : 'selected');\n }\n }\n\n private _resetListByTarget(target: PicklistTarget): void {\n if (target === 'selected') {\n this.targetCurrentPage = -1;\n this._internalTotalTarget = 0;\n this.selectedItens = [];\n this.selectedItensFilterUtil.rawSelectedItens = [];\n this.selectedItensFilterUtil.filteredSelectedItens = [];\n } else {\n this.sourceCurrentPage = -1;\n this._internalTotalSource = 0;\n this.itensToSelect = [];\n this.itensToSelectFilterUtil.rawItensToSelect = [];\n this.itensToSelectFilterUtil.filteredItensToSelect = [];\n }\n\n this.cdr.detectChanges();\n Promise.resolve().then(() => this.loadNextPage(target));\n }\n\n private _checkAllSelectedByList(list: InternalPicklistItem[]) {\n const _listItens = filterEnabled<T>(list);\n if (!_listItens.length) {\n return false;\n } else {\n return _listItens.every((x) => x.selected);\n }\n }\n\n private setupLoaderPipelines(): void {\n if (!this.lazyLoad()) {\n return;\n }\n\n if (!this.sourceLoader && !this.targetLoader && this._logErrorTemplate) {\n console.error(\n `Lazy load is enabled but no loader function was provided. Please provide at least one loader function using 'sourceLoader' or 'targetLoader' input.`,\n );\n }\n\n if (this.sourceLoader()) {\n this.sourceLoadSubject\n .pipe(\n switchMap((event) => {\n this._loadingSource.set(true);\n return this.sourceLoader()!(event);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(({ items, totalRecords }) => {\n this._internalTotalSource = totalRecords;\n this.itensToSelectFilterUtil.rawItensToSelect = [\n ...this.itensToSelectFilterUtil.rawItensToSelect,\n ...items,\n ];\n if (this.itensToSelectFilterUtil.allItensSelected) {\n this._checkAllSelectedItensChange(\n true,\n this.itensToSelectFilterUtil.rawItensToSelect,\n this.itensToSelectId,\n );\n }\n this.itensToSelectFilterUtil.filteredItensToSelect = [\n ...this.itensToSelectFilterUtil.rawItensToSelect,\n ];\n this._loadingSource.set(false);\n this.cdr.detectChanges();\n });\n }\n\n if (this.targetLoader()) {\n this.targetLoadSubject\n .pipe(\n switchMap((event) => {\n this._loadingTarget.set(true);\n return this.targetLoader()!(event);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(({ items, totalRecords }) => {\n this._internalTotalTarget = totalRecords;\n this.selectedItensFilterUtil.rawSelectedItens = [\n ...this.selectedItensFilterUtil.rawSelectedItens,\n ...items,\n ];\n if (this.selectedItensFilterUtil.allItensSelected) {\n this._checkAllSelectedItensChange(\n true,\n this.selectedItensFilterUtil.rawSelectedItens,\n this.selectedItensId,\n );\n }\n this.selectedItensFilterUtil.filteredSelectedItens = [\n ...this.selectedItensFilterUtil.rawSelectedItens,\n ];\n this._loadingTarget.set(false);\n this.cdr.detectChanges();\n });\n }\n }\n\n private setupFilterDebounce(): void {\n if (!this.lazyLoad()) {\n return;\n }\n\n this.sourceFilterSubject\n .pipe(\n distinctUntilChanged(),\n debounceTime(300),\n tap(() => {\n this.sourceCurrentPage = -1;\n this.itensToSelect = [];\n this.itensToSelectFilterUtil.rawItensToSelect = [];\n this.itensToSelectFilterUtil.filteredItensToSelect = [];\n this.cdr.detectChanges();\n }),\n switchMap(() => {\n this.loadNextPage('to-select');\n return [];\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n\n this.targetFilterSubject\n .pipe(\n distinctUntilChanged(),\n debounceTime(300),\n tap(() => {\n this.targetCurrentPage = -1;\n this.selectedItens = [];\n this.selectedItensFilterUtil.rawSelectedItens = [];\n this.selectedItensFilterUtil.filteredSelectedItens = [];\n this.cdr.detectChanges();\n }),\n switchMap(() => {\n this.loadNextPage('selected');\n return [];\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private setupLazyLoadEvents() {\n if (!this.lazyLoad()) {\n return;\n }\n\n Promise.resolve().then(() => {\n this.loadNextPage('to-select');\n this.loadNextPage('selected');\n });\n }\n\n private loadNextPage(target: PicklistTarget): void {\n const totalRegisters = target === 'selected' ? this._internalTotalTarget : this._internalTotalSource;\n const lastPage = Math.ceil(totalRegisters / this.rows());\n\n if (target === 'selected' && this.targetCurrentPage < lastPage) {\n this.targetCurrentPage++;\n } else if (target === 'to-select' && this.sourceCurrentPage < lastPage) {\n this.sourceCurrentPage++;\n }\n\n this.emitCurrentPage(target);\n }\n\n private emitCurrentPage(target: PicklistTarget): void {\n const filter = target === 'selected' ? this.selectedItensFilter : this.availableItensFilter;\n const page = target === 'selected' ? this.targetCurrentPage : this.sourceCurrentPage;\n\n const event: PicklistLazyLoadEvent = { target, page, filter, pageSize: this.rows() };\n\n if (target === 'selected') {\n this.targetLoadSubject.next(event);\n } else {\n this.sourceLoadSubject.next(event);\n }\n }\n\n private _checkAllSelectedItensChange(checked: boolean, list: InternalPicklistItem[], listId: string) {\n this.unselectedItensByListId(listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId);\n filterEnabled<T>(list).forEach((item) => {\n item.selected = checked;\n if (checked) {\n this.selectedItensMap.add(item);\n } else {\n this.selectedItensMap.delete(item);\n }\n });\n if (listId === this.selectedItensId) {\n this.selectedItensFilterUtil.allItensSelected = checked;\n } else {\n this.itensToSelectFilterUtil.allItensSelected = checked;\n }\n this.cdr.detectChanges();\n }\n\n private unselectedItensByListId(listId: string) {\n const clearList = this.getAllElementsByListId(listId);\n clearList.forEach((x) => {\n x.selected = false;\n this.selectedItensMap.delete(x);\n });\n this.cdr.detectChanges();\n }\n\n private getAllElementsByListId(listId: string) {\n return listId === this.selectedItensId\n ? this.selectedItensFilterUtil.rawSelectedItens\n : this.itensToSelectFilterUtil.rawItensToSelect;\n }\n\n private getOppositiveId(listId: string) {\n return listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId;\n }\n\n private emitData() {\n this.itensToSelectChange.emit(parseValueEmit(this.itensToSelect));\n this.selectedItensChange.emit(parseValueEmit(this.selectedItens));\n }\n}\n\nconst normalizeString = (str: string) => {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n};\n\n/**\n * Compares two strings by normalizing them to a case-insensitive and accent-free form,\n * and checks if the main string contains the substring.\n *\n * @param mainString - The string to be searched.\n * @param substring - The string to search for within the main string.\n * @returns A boolean indicating whether the normalized main string contains the normalized substring.\n */\n\nconst compareStrings = (mainString: string, substring: string) => {\n return normalizeString(mainString).includes(normalizeString(substring));\n};\n\nconst filterEnabled = <T>(list: PickListItem<T>[] | Set<InternalPicklistItem>): InternalPicklistItem[] => {\n const _list = list instanceof Set ? Array.from(list) : list;\n return _list.filter((x) => !x.disabled);\n};\n\nconst mapData = <T>(list: PickListItem<T>[]) => {\n return list.map((x) => x.data);\n};\n\nconst parseValueEmit = pipe(filterEnabled, mapData);\n\nexport const parseItensPickList = <T>(\n array: T[],\n disabledFn?: (item: T) => boolean,\n idKey?: keyof T,\n): PickListItem<T>[] => {\n return array.map((x) => {\n return {\n data: x,\n disabled: disabledFn ? disabledFn(x) : false,\n id: idKey ? String(x[idKey]) : crypto.randomUUID(),\n };\n });\n};\n\n","<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n let-isLoading=\"isLoading\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n *sLoadingState=\"{ loading: isLoading, indicator: logoIndicator }\"\n (scroll)=\"onScroll($event, id)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: { item: item.data, selected: item.selected, disabled: item.disabled }\n \"\n ></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container\n *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"\n ></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n let-id=\"id\"\n>\n @if (showCheckbox && !lazyLoad()) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === itensToSelectId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"itensToSelectFilterUtil.allItensSelected\"\n (change)=\"checkAllAvailableItensChange($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === selectedItensId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"selectedItensFilterUtil.allItensSelected\"\n (change)=\"checkAllSelectedItensChange($any($event.target).checked)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"\n availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n isLoading: _loadingSource(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!hasSelectedItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"\n selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n isLoading: _loadingTarget(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!hasSelectedItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n\n","import { NgModule } from '@angular/core';\n\nimport { PicklistComponent } from './picklist.component';\n\n@NgModule({\n imports: [PicklistComponent],\n exports: [PicklistComponent],\n})\nexport class PicklistModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { CdkDrag, CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
2
|
-
import { AfterViewInit, EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
|
|
3
|
-
import {
|
|
2
|
+
import { AfterViewInit, EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
|
|
3
|
+
import { LoadingStateIndicators } from '@seniorsistemas/angular-components/loading-state';
|
|
4
|
+
import { PickListItem, PicklistItemMove, PicklistLoader } from './types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
interface InternalPicklistItem<T = any> extends PickListItem<T> {
|
|
6
7
|
invisible?: boolean;
|
|
7
8
|
selected?: boolean;
|
|
8
9
|
}
|
|
9
|
-
type CdkDragEvent = {
|
|
10
|
-
source: CdkDrag<InternalPicklistItem<
|
|
10
|
+
type CdkDragEvent<T> = {
|
|
11
|
+
source: CdkDrag<InternalPicklistItem<T>>;
|
|
11
12
|
};
|
|
12
13
|
/**
|
|
13
14
|
* @description Componente de lista de dupla seleção (picklist) com suporte a
|
|
@@ -24,12 +25,12 @@ type CdkDragEvent = {
|
|
|
24
25
|
*
|
|
25
26
|
* @category Data
|
|
26
27
|
*/
|
|
27
|
-
export declare class PicklistComponent implements AfterViewInit, OnChanges {
|
|
28
|
+
export declare class PicklistComponent<T> implements AfterViewInit, OnChanges, OnInit {
|
|
28
29
|
private cdr;
|
|
29
30
|
/** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */
|
|
30
|
-
itensToSelect: PickListItem<
|
|
31
|
+
itensToSelect: PickListItem<T>[];
|
|
31
32
|
/** @description Lista de itens já selecionados (coluna direita). @default [] */
|
|
32
|
-
selectedItens: PickListItem<
|
|
33
|
+
selectedItens: PickListItem<T>[];
|
|
33
34
|
/** @description Rótulo do título da lista de disponíveis. */
|
|
34
35
|
availableItensLabel?: string;
|
|
35
36
|
/** @description Placeholder da busca na lista de disponíveis. */
|
|
@@ -50,28 +51,53 @@ export declare class PicklistComponent implements AfterViewInit, OnChanges {
|
|
|
50
51
|
showCheckbox: boolean;
|
|
51
52
|
/** @description Propriedade usada para filtrar os itens das listas. @default '' */
|
|
52
53
|
filterBy: string;
|
|
54
|
+
/** @description Habilita o carregamento preguiçoso (lazy load) para as listas. @default false */
|
|
55
|
+
lazyLoad: import("@angular/core").InputSignal<boolean>;
|
|
56
|
+
/** @description Número de linhas a serem exibidas por página caso o lazyLoad esteja habilitado. @default 10 */
|
|
57
|
+
rows: import("@angular/core").InputSignal<number>;
|
|
58
|
+
/** @description Função loader para a lista de disponíveis (to-select). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */
|
|
59
|
+
sourceLoader: import("@angular/core").InputSignal<PicklistLoader<T> | undefined>;
|
|
60
|
+
/** @description Função loader para a lista de selecionados (selected). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */
|
|
61
|
+
targetLoader: import("@angular/core").InputSignal<PicklistLoader<T> | undefined>;
|
|
62
|
+
protected readonly _loadingTarget: import("@angular/core").WritableSignal<boolean>;
|
|
63
|
+
protected readonly _loadingSource: import("@angular/core").WritableSignal<boolean>;
|
|
64
|
+
/** @description Emitido quando um item é movido entre as listas e o lazy load está habilitado. */
|
|
65
|
+
nodeMoved: import("@angular/core").OutputEmitterRef<PicklistItemMove<T>>;
|
|
53
66
|
/** @description Emitido quando a lista de selecionados muda. */
|
|
54
67
|
selectedItensChange: EventEmitter<any[]>;
|
|
55
68
|
/** @description Emitido quando a lista de disponíveis muda. */
|
|
56
69
|
itensToSelectChange: EventEmitter<any[]>;
|
|
57
70
|
availableItensFilter: string;
|
|
58
71
|
selectedItensFilter: string;
|
|
59
|
-
itemToSelectTemplate: TemplateRef<
|
|
60
|
-
itemSelectedTemplate: TemplateRef<
|
|
61
|
-
|
|
72
|
+
itemToSelectTemplate: TemplateRef<T> | null;
|
|
73
|
+
itemSelectedTemplate: TemplateRef<T> | null;
|
|
74
|
+
protected logoIndicator: LoadingStateIndicators;
|
|
75
|
+
protected itensToSelectFilterUtil: {
|
|
76
|
+
allItensSelected: boolean;
|
|
62
77
|
rawItensToSelect: InternalPicklistItem[];
|
|
63
78
|
filteredItensToSelect: InternalPicklistItem[];
|
|
64
79
|
};
|
|
65
|
-
selectedItensFilterUtil: {
|
|
80
|
+
protected selectedItensFilterUtil: {
|
|
81
|
+
allItensSelected: boolean;
|
|
66
82
|
rawSelectedItens: InternalPicklistItem[];
|
|
67
83
|
filteredSelectedItens: InternalPicklistItem[];
|
|
68
84
|
};
|
|
69
85
|
selectedItensMap: Set<InternalPicklistItem>;
|
|
70
86
|
itensToSelectId: string;
|
|
71
87
|
selectedItensId: string;
|
|
88
|
+
private readonly destroyRef;
|
|
89
|
+
private readonly sourceFilterSubject;
|
|
90
|
+
private readonly targetFilterSubject;
|
|
91
|
+
private readonly sourceLoadSubject;
|
|
92
|
+
private readonly targetLoadSubject;
|
|
93
|
+
private _internalTotalSource;
|
|
94
|
+
private _internalTotalTarget;
|
|
95
|
+
private sourceCurrentPage;
|
|
96
|
+
private targetCurrentPage;
|
|
72
97
|
private _logErrorTemplate;
|
|
73
98
|
private templates;
|
|
74
99
|
ngAfterViewInit(): void;
|
|
100
|
+
ngOnInit(): void;
|
|
75
101
|
ngOnChanges(changes: SimpleChanges): void;
|
|
76
102
|
toggleSelected(internalPicklistItem: InternalPicklistItem, containerListId: string): void;
|
|
77
103
|
remove(all?: boolean): void;
|
|
@@ -79,24 +105,65 @@ export declare class PicklistComponent implements AfterViewInit, OnChanges {
|
|
|
79
105
|
filterItensToSelect(): void;
|
|
80
106
|
filterSelectedItens(): void;
|
|
81
107
|
drop(event: CdkDragDrop<InternalPicklistItem[]>): void;
|
|
82
|
-
onDragStart(event: CdkDragEvent
|
|
108
|
+
onDragStart(event: CdkDragEvent<T>, dragListId: string): void;
|
|
83
109
|
onDragRelease(): void;
|
|
84
|
-
checkAllAvailableItensChange(
|
|
85
|
-
checkAllSelectedItensChange(
|
|
110
|
+
checkAllAvailableItensChange(checked: boolean): void;
|
|
111
|
+
checkAllSelectedItensChange(checked: boolean): void;
|
|
112
|
+
onScroll(event: Event, listId: string): void;
|
|
86
113
|
get disableSelectedItensCheckbox(): boolean;
|
|
87
114
|
get disableItensToSelectCheckbox(): boolean;
|
|
88
115
|
get itensToSelectAllSelected(): boolean;
|
|
89
116
|
get selectedItensAllSelected(): boolean;
|
|
90
|
-
get
|
|
91
|
-
|
|
117
|
+
get hasSelectedItens(): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* @description Recarrega as listas após a confirmação de uma movimentação pelo backend.
|
|
120
|
+
*
|
|
121
|
+
* **Por que usar?**
|
|
122
|
+
* Ao mover itens, o componente atualiza a UI de forma otimista — os itens são movidos
|
|
123
|
+
* imediatamente antes da confirmação do servidor. Após o backend confirmar a operação,
|
|
124
|
+
* chame `resetList` para limpar e recarregar as listas afetadas do zero, garantindo que
|
|
125
|
+
* o estado da UI reflita os dados reais persistidos.
|
|
126
|
+
*
|
|
127
|
+
* **O que espera?**
|
|
128
|
+
* Recebe o objeto `PicklistItemMove<T>` emitido pelo output `(nodeMoved)`. O componente
|
|
129
|
+
* utiliza `node.direction` para determinar qual lista recarregar (a lista de destino da
|
|
130
|
+
* movimentação) e `node.moveAll` para verificar se a origem também deve ser recarregada
|
|
131
|
+
* (por exemplo, ao mover todos os itens de uma lista para outra, ambas ficam com estado
|
|
132
|
+
* alterado no backend).
|
|
133
|
+
*
|
|
134
|
+
* **O que faz?**
|
|
135
|
+
* - Reseta o contador de página da lista de destino para `0` (primeira página).
|
|
136
|
+
* - Limpa todos os itens carregados na lista de destino.
|
|
137
|
+
* - Dispara imediatamente o carregamento da primeira página via `sourceLoader`/`targetLoader`.
|
|
138
|
+
* - Se `node.moveAll === true`, repete o processo para a lista de origem.
|
|
139
|
+
*
|
|
140
|
+
* **Exemplo de uso:**
|
|
141
|
+
* ```typescript
|
|
142
|
+
* nodeMoved(node: PicklistItemMove<MyItem>): void {
|
|
143
|
+
* this.service.moveItems(node).subscribe({
|
|
144
|
+
* next: () => this.myPicklist().resetList(node),
|
|
145
|
+
* error: () => node.revertAction(),
|
|
146
|
+
* });
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* @param node - O objeto de movimentação emitido pelo output `(nodeMoved)`.
|
|
151
|
+
*/
|
|
152
|
+
resetList(node: PicklistItemMove<T>): void;
|
|
153
|
+
private _resetListByTarget;
|
|
92
154
|
private _checkAllSelectedByList;
|
|
155
|
+
private setupLoaderPipelines;
|
|
156
|
+
private setupFilterDebounce;
|
|
157
|
+
private setupLazyLoadEvents;
|
|
158
|
+
private loadNextPage;
|
|
159
|
+
private emitCurrentPage;
|
|
93
160
|
private _checkAllSelectedItensChange;
|
|
94
161
|
private unselectedItensByListId;
|
|
95
162
|
private getAllElementsByListId;
|
|
96
163
|
private getOppositiveId;
|
|
97
164
|
private emitData;
|
|
98
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PicklistComponent
|
|
99
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PicklistComponent
|
|
165
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PicklistComponent<any>, never>;
|
|
166
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PicklistComponent<any>, "s-picklist", never, { "itensToSelect": { "alias": "itensToSelect"; "required": false; }; "selectedItens": { "alias": "selectedItens"; "required": false; }; "availableItensLabel": { "alias": "availableItensLabel"; "required": false; }; "availableItensPlaceholder": { "alias": "availableItensPlaceholder"; "required": false; }; "addSelectedItensLabel": { "alias": "addSelectedItensLabel"; "required": false; }; "addAllItensLabel": { "alias": "addAllItensLabel"; "required": false; }; "selectedItensLabel": { "alias": "selectedItensLabel"; "required": false; }; "selectedItensPlaceholder": { "alias": "selectedItensPlaceholder"; "required": false; }; "removeSelectedItemsLabel": { "alias": "removeSelectedItemsLabel"; "required": false; }; "removeAllItemsLabel": { "alias": "removeAllItemsLabel"; "required": false; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; }; "filterBy": { "alias": "filterBy"; "required": false; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "sourceLoader": { "alias": "sourceLoader"; "required": false; "isSignal": true; }; "targetLoader": { "alias": "targetLoader"; "required": false; "isSignal": true; }; }, { "nodeMoved": "nodeMoved"; "selectedItensChange": "selectedItensChange"; "itensToSelectChange": "itensToSelectChange"; }, ["templates"], never, true, never>;
|
|
100
167
|
}
|
|
101
|
-
export declare const parseItensPickList: <T>(array: T[], disabledFn?: (item: T) => boolean) => PickListItem<T>[];
|
|
168
|
+
export declare const parseItensPickList: <T>(array: T[], disabledFn?: (item: T) => boolean, idKey?: keyof T) => PickListItem<T>[];
|
|
102
169
|
export {};
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./picklist.component";
|
|
3
|
-
import * as i2 from "@angular/common";
|
|
4
|
-
import * as i3 from "@ngx-translate/core";
|
|
5
|
-
import * as i4 from "@angular/cdk/drag-drop";
|
|
6
|
-
import * as i5 from "@angular/forms";
|
|
7
|
-
import * as i6 from "@seniorsistemas/angular-components/button";
|
|
8
3
|
export declare class PicklistModule {
|
|
9
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<PicklistModule, never>;
|
|
10
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<PicklistModule, [typeof i1.PicklistComponent], [typeof
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<PicklistModule, never, [typeof i1.PicklistComponent], [typeof i1.PicklistComponent]>;
|
|
11
6
|
static ɵinj: i0.ɵɵInjectorDeclaration<PicklistModule>;
|
|
12
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { PickListItem } from './picklist-item';
|
|
1
|
+
export type { PickListItem, PicklistItemMove, PicklistLazyLoadEvent, PicklistLoader, PicklistLoaderResponse, PicklistTarget, } from './picklist-item';
|
|
2
2
|
export type { PicklistTemplateTypes } from './picklist-template-types';
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
1
2
|
export interface PickListItem<T> {
|
|
2
3
|
disabled?: boolean;
|
|
3
4
|
data: T;
|
|
5
|
+
id?: string;
|
|
4
6
|
}
|
|
7
|
+
export type PicklistTarget = 'to-select' | 'selected';
|
|
8
|
+
export type PicklistLazyLoadEvent = {
|
|
9
|
+
target: PicklistTarget;
|
|
10
|
+
page: number;
|
|
11
|
+
filter: string;
|
|
12
|
+
pageSize: number;
|
|
13
|
+
};
|
|
14
|
+
export type PicklistItemMove<T> = {
|
|
15
|
+
items: T[];
|
|
16
|
+
direction: PicklistTarget;
|
|
17
|
+
moveAll: boolean;
|
|
18
|
+
revertAction: VoidFunction;
|
|
19
|
+
};
|
|
20
|
+
export type PicklistLoaderResponse<T> = {
|
|
21
|
+
items: PickListItem<T>[];
|
|
22
|
+
totalRecords: number;
|
|
23
|
+
};
|
|
24
|
+
export type PicklistLoader<T> = (event: PicklistLazyLoadEvent) => Observable<PicklistLoaderResponse<T>>;
|