UNPKG

@sixbell-telco/sdk

Version:

A collection of reusable components designed for use in Sixbell Telco Angular projects

1 lines 20.5 kB
{"version":3,"file":"sixbell-telco-sdk-components-dual-list.mjs","sources":["../../../projects/sdk/components/dual-list/src/dual-list.component.ts","../../../projects/sdk/components/dual-list/src/dual-list.component.html","../../../projects/sdk/components/dual-list/sixbell-telco-sdk-components-dual-list.ts"],"sourcesContent":["import { Component, computed, effect, input, output, signal } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ButtonComponent } from '@sixbell-telco/sdk/components/button';\nimport { CheckboxComponent } from '@sixbell-telco/sdk/components/forms/checkbox';\nimport { InputComponent, InputContentComponent } from '@sixbell-telco/sdk/components/forms/input';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { matSearch } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { matChevronLeftOutline, matChevronRightOutline } from '@sixbell-telco/sdk/components/icon/material/outline';\nimport { TableComponent, TableContainerHeightProps, TableContentSizeProps, TablePagination } from '@sixbell-telco/sdk/components/table';\nimport { TypographyDirective } from '@sixbell-telco/sdk/directives/typography';\nimport { NgxPaginationModule } from 'ngx-pagination';\n\nexport type DualListData<T> = T & {\n\tselected: boolean;\n};\n\n@Component({\n\tselector: 'st-dual-list',\n\timports: [\n\t\tReactiveFormsModule,\n\t\tTableComponent,\n\t\tCheckboxComponent,\n\t\tInputComponent,\n\t\tNgxPaginationModule,\n\t\tButtonComponent,\n\t\tTypographyDirective,\n\t\tTranslatePipe,\n\t\tInputContentComponent,\n\t\tIconComponent,\n\t],\n\ttemplateUrl: './dual-list.component.html',\n})\nexport class DualListComponent<T> {\n\t// Styles for tables\n\tsize = input<TableContentSizeProps>('sm');\n\theight = input<TableContainerHeightProps>('sm');\n\n\t// Styles for buttons\n\tchevronLeftIcon = matChevronLeftOutline;\n\tchevronRightIcon = matChevronRightOutline;\n\tsearchIcon = matSearch;\n\n\t// Key and label inputs and getters\n\tkey = input('id');\n\tvalue = input<string>('item');\n\tlabel = input<string>('');\n\ttitleLeft = input<string>('');\n\ttitleRight = input<string>('');\n\n\tgetKey(item: DualListData<T>): string {\n\t\treturn item[this.key() as keyof DualListData<T>] as string;\n\t}\n\n\tgetValue(item: DualListData<T>): string {\n\t\treturn item[this.value() as keyof DualListData<T>] as string;\n\t}\n\n\tgetLabel() {\n\t\treturn this.label()\n\t\t\t.replace(/([A-Z])/g, ' $1')\n\t\t\t.replace(/^./, function (str) {\n\t\t\t\treturn str.toUpperCase();\n\t\t\t});\n\t}\n\n\t// Signals for dual list management\n\titems = input.required<unknown[]>();\n\ttarget = signal<DualListData<T>[]>([]);\n\tselectedItems = signal<DualListData<T>[]>([]);\n\titemsToRemove = signal<DualListData<T>[]>([]);\n\ttotalItems = input<number>(0);\n\n\taddedItems = input.required({\n\t\t// Input used when there are items added on dual list initialization\n\t\ttransform: (items: T[]) => {\n\t\t\tthis.selectedItems.set(items as DualListData<T>[]);\n\t\t\tthis.handleAddItems();\n\t\t\treturn items;\n\t\t},\n\t});\n\n\tcomputedItems = computed(() => {\n\t\treturn (this.items() as DualListData<T>[]).map((item) => {\n\t\t\tconst selected = this.selectedItems().some((addedItem) => addedItem[this.key() as keyof T] === item[this.key() as keyof T]);\n\t\t\treturn { ...item, selected };\n\t\t});\n\t});\n\n\tallToAdd = computed(() => {\n\t\treturn this.computedItems().filter((item) => item.selected).length === this.items().length;\n\t});\n\n\tallToRemove = computed(() => {\n\t\treturn this.target().length === this.itemsToRemove().length;\n\t});\n\n\t// Output for dual list change\n\titemsAdded = output<DualListData<T>[]>();\n\titemsAddedEffect = effect(() => {\n\t\tthis.itemsAdded.emit(this.target());\n\t});\n\n\t// Left side search (managed by parent)\n\tsearchQuery = output<string>();\n\thandleSearch(search: string) {\n\t\tthis.searchQuery.emit(search);\n\t}\n\n\t// Right side search (local)\n\tsearchTarget = signal('');\n\tsearchTargetComputed = computed(() => {\n\t\tif (this.searchTarget() === '') return this.target();\n\t\treturn this.target().filter((item) => `${item[this.value() as keyof DualListData<T>]}`.toLowerCase().includes(this.searchTarget().toLowerCase()));\n\t});\n\n\thandleTargetListSearch(search: string) {\n\t\tthis.searchTarget.set(search);\n\t}\n\n\t// Pagination\n\tpagination = input.required<TablePagination>();\n\tpageChanged = output<number>();\n\tpageSizeChanged = output<number>();\n\n\thandlePageChange(page: number) {\n\t\tthis.pageChanged.emit(page);\n\t}\n\n\thandlePageSizeChange(size: number) {\n\t\tthis.pageSizeChanged.emit(size);\n\t}\n\n\t// Select item handlers\n\thandleSelectSourceItem(checked: boolean, item: DualListData<T>) {\n\t\tif (checked) {\n\t\t\tconst exists: boolean = this.selectedItems().some((selectedItem) => selectedItem[this.key() as keyof T] === item[this.key() as keyof T]);\n\t\t\tif (exists) return;\n\n\t\t\tthis.selectedItems.update((items) => [...items, { ...item }]);\n\t\t} else {\n\t\t\tconst selectedItems = this.selectedItems().filter((selectedItem: T) => {\n\t\t\t\tif (selectedItem && selectedItem[this.key() as keyof T] === item[this.key() as keyof T]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\tthis.selectedItems.set(selectedItems);\n\t\t}\n\t}\n\n\thandleSelectTargetItem(checked: boolean, item: DualListData<T>) {\n\t\tif (checked) {\n\t\t\titem.selected = true;\n\t\t\tthis.itemsToRemove.update((items) => [...items, { ...item, selected: true }]);\n\t\t} else {\n\t\t\titem.selected = false;\n\t\t\tconst itemsToRemove = this.itemsToRemove().filter((selectedItem: T) => {\n\t\t\t\tif (selectedItem && selectedItem[this.key() as keyof T] === item[this.key() as keyof T]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\tthis.itemsToRemove.set(itemsToRemove);\n\t\t}\n\t}\n\n\t// Select ALL handlers\n\thandleSelectAll(all: boolean) {\n\t\tconst itemsList: DualListData<T>[] = this.items() as DualListData<T>[];\n\t\titemsList.forEach((item) => {\n\t\t\tthis.handleSelectSourceItem(all, item);\n\t\t});\n\t}\n\n\thandleSelectAllToRemove(all: boolean) {\n\t\tconst targetList = this.target();\n\n\t\ttargetList.forEach((item) => {\n\t\t\tthis.handleSelectTargetItem(all, item);\n\t\t});\n\t}\n\n\t// Add and remove handlers\n\thandleAddItems() {\n\t\tconst items = this.selectedItems().map((selectedItem: T) => {\n\t\t\treturn { ...selectedItem, selected: false };\n\t\t});\n\t\tthis.target.set(items);\n\t\tthis.itemsToRemove.set([]);\n\t}\n\n\thandleRemoveItems() {\n\t\tif (this.itemsToRemove().length === 0) return;\n\n\t\tconst selectedItems = this.selectedItems().filter((selectedItem) =>\n\t\t\tthis.itemsToRemove().every((itemToRemove) => selectedItem[this.key() as keyof T] !== itemToRemove[this.key() as keyof T]),\n\t\t);\n\n\t\tthis.selectedItems.set(selectedItems);\n\n\t\tthis.updateTargetList(this.itemsToRemove());\n\t\tthis.itemsToRemove.set([]);\n\t\tthis.handlePageChange(this.pagination().currentPage ?? 1);\n\t}\n\n\tprivate updateTargetList(itemsToRemove: DualListData<T>[]) {\n\t\tconst items = this.target().filter((addedItem) => {\n\t\t\treturn itemsToRemove.every((itemToRemove) => addedItem[this.key() as keyof T] !== itemToRemove[this.key() as keyof T]);\n\t\t});\n\n\t\tthis.target.set(items);\n\t}\n}\n","@let id = pagination().id;\n@let currentPage = pagination().currentPage;\n@let itemsPerPage = pagination().itemsPerPage;\n@let titleLeftVar = titleLeft();\n@let titleRightVar = titleRight();\n@let heightVar = height();\n@let sizeVar = size();\n<div class=\"grid flex-1 grid-cols-[3fr_min-content_3fr] gap-6\">\n\t<div class=\"rounded-box border-neutral flex flex-col gap-6 border p-6\">\n\t\t@if (titleLeftVar) {\n\t\t\t<div>\n\t\t\t\t<h3 typography [tyVariant]=\"'h3'\">{{ titleLeftVar }}</h3>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"flex h-full flex-col gap-4\">\n\t\t\t<st-input\n\t\t\t\t[placeholder]=\"'sdk.dualList.searchPlaceHolder' | translate\"\n\t\t\t\t(enterPressed)=\"handleSearch($event)\"\n\t\t\t\t(valueDebounced)=\"handleSearch($event)\"\n\t\t\t>\n\t\t\t\t<st-input-content alignment=\"start\">\n\t\t\t\t\t<st-icon [icon]=\"searchIcon\"></st-icon>\n\t\t\t\t</st-input-content>\n\t\t\t</st-input>\n\t\t\t<st-table\n\t\t\t\tclass=\"h-full\"\n\t\t\t\t[pagination]=\"pagination()\"\n\t\t\t\t[totalItems]=\"totalItems()\"\n\t\t\t\t(pageChanged)=\"handlePageChange($event)\"\n\t\t\t\t(pageSizeChanged)=\"handlePageSizeChange($event)\"\n\t\t\t\t[showItemsPerPage]=\"false\"\n\t\t\t\t[showEntries]=\"false\"\n\t\t\t\t[maxSize]=\"4\"\n\t\t\t\t[size]=\"sizeVar\"\n\t\t\t\t[height]=\"heightVar\"\n\t\t\t\t[pinRows]=\"true\"\n\t\t\t\t[showEntries]=\"false\"\n\t\t\t\t[showItemsPerPage]=\"false\"\n\t\t\t>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th class=\"w-6\">\n\t\t\t\t\t\t\t<st-checkbox [value]=\"allToAdd()\" (valueUpdated)=\"handleSelectAll($event)\"></st-checkbox>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>{{ getLabel() }}</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t@for (item of computedItems() | paginate: { id, currentPage, itemsPerPage, totalItems: totalItems() }; track getKey(item)) {\n\t\t\t\t\t\t<tr class=\"hover:bg-neutral\">\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t<st-checkbox [(value)]=\"item.selected\" (valueUpdated)=\"handleSelectSourceItem($event, item)\"></st-checkbox>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td>{{ getValue(item) }}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t}\n\t\t\t\t</tbody>\n\t\t\t</st-table>\n\t\t</div>\n\t</div>\n\n\t<!-- Buttons -->\n\t<div class=\"grid place-content-center gap-4\">\n\t\t<st-button variant=\"secondary\" [circle]=\"true\" [icon]=\"chevronRightIcon\" (click)=\"handleAddItems()\" />\n\t\t<st-button variant=\"secondary\" [circle]=\"true\" [icon]=\"chevronLeftIcon\" (click)=\"handleRemoveItems()\" />\n\t</div>\n\n\t<!-- END Buttons -->\n\n\t<div class=\"rounded-box border-neutral flex flex-1 flex-col gap-6 border p-6\">\n\t\t@if (titleRightVar) {\n\t\t\t<div>\n\t\t\t\t<h3 typography [tyVariant]=\"'h3'\">{{ titleRightVar }}</h3>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"flex h-full flex-col gap-4\">\n\t\t\t<st-input\n\t\t\t\t[placeholder]=\"'sdk.dualList.searchPlaceHolder' | translate\"\n\t\t\t\t(enterPressed)=\"handleTargetListSearch($event)\"\n\t\t\t\t(valueDebounced)=\"handleTargetListSearch($event)\"\n\t\t\t>\n\t\t\t\t<st-input-content alignment=\"start\">\n\t\t\t\t\t<st-icon [icon]=\"searchIcon\"></st-icon>\n\t\t\t\t</st-input-content>\n\t\t\t</st-input>\n\t\t\t@let added = searchTargetComputed();\n\t\t\t@if (added) {\n\t\t\t\t<st-table\n\t\t\t\t\t[data]=\"added\"\n\t\t\t\t\t[size]=\"sizeVar\"\n\t\t\t\t\t[height]=\"heightVar\"\n\t\t\t\t\t[pinRows]=\"true\"\n\t\t\t\t\t[showItemsPerPage]=\"false\"\n\t\t\t\t\t[showPagination]=\"false\"\n\t\t\t\t\t[totalItems]=\"added.length\"\n\t\t\t\t\tclass=\"h-full\"\n\t\t\t\t>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th class=\"w-6\">\n\t\t\t\t\t\t\t\t@if (searchTarget() === '') {\n\t\t\t\t\t\t\t\t\t<st-checkbox [value]=\"allToRemove()\" (valueUpdated)=\"handleSelectAllToRemove($event)\"></st-checkbox>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t<th>{{ getLabel() }}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t@for (item of added; track getKey(item)) {\n\t\t\t\t\t\t\t<tr class=\"hover:bg-neutral\">\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<st-checkbox [(value)]=\"item.selected\" (valueUpdated)=\"handleSelectTargetItem($event, item)\"></st-checkbox>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td>{{ getValue(item) }}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tbody>\n\t\t\t\t</st-table>\n\t\t\t}\n\t\t</div>\n\t</div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}