diff --git a/projects/netgrif-components-core/src/lib/header/abstract-header.component.ts b/projects/netgrif-components-core/src/lib/header/abstract-header.component.ts index 7f43627888..8506478280 100644 --- a/projects/netgrif-components-core/src/lib/header/abstract-header.component.ts +++ b/projects/netgrif-components-core/src/lib/header/abstract-header.component.ts @@ -19,6 +19,7 @@ import { } from "../data-fields/models/data-field-portal-data-injection-token"; import {MultichoiceField} from "../data-fields/multichoice-field/models/multichoice-field"; import {EnumerationField} from "../data-fields/enumeration-field/models/enumeration-field"; +import {SelectionBehavior} from '../panel/configuration/selection-behavior'; @Component({ selector: 'ncc-abstract-header', @@ -35,7 +36,7 @@ export abstract class AbstractHeaderComponent implements OnInit, OnDestroy { @Input() showSortButton = true; @Input() showSearchButton = true; @Input() showTableSection = true; - @Input() public approval: boolean; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; public headerService: AbstractHeaderService; protected _headerSearch: HeaderSearchService; diff --git a/projects/netgrif-components-core/src/lib/header/header-modes/abstract-header-mode.component.ts b/projects/netgrif-components-core/src/lib/header/header-modes/abstract-header-mode.component.ts index 3a88da5f3b..947c81501b 100644 --- a/projects/netgrif-components-core/src/lib/header/header-modes/abstract-header-mode.component.ts +++ b/projects/netgrif-components-core/src/lib/header/header-modes/abstract-header-mode.component.ts @@ -1,5 +1,6 @@ import {Component, Input} from '@angular/core'; import {FormControl} from '@angular/forms'; +import { SelectionBehavior } from "../../panel/configuration/selection-behavior"; @Component({ selector: 'ncc-abstract-header-mode', @@ -8,10 +9,10 @@ import {FormControl} from '@angular/forms'; export abstract class AbstractHeaderModeComponent { @Input() public overflowWidth: string; - @Input() public approval: boolean; @Input() public indeterminate: boolean; @Input() public approvalFormControl: FormControl; @Input() public typeApproval: string; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; constructor() { } @@ -19,4 +20,12 @@ export abstract class AbstractHeaderModeComponent { getMinWidth() { return this.overflowWidth; } + + public isInSelectionMode(): boolean { + return this.showSelection !== SelectionBehavior.HIDDEN; + } + + public isSelectionDisabled(): boolean { + return this.showSelection !== SelectionBehavior.EDITABLE; + } } diff --git a/projects/netgrif-components-core/src/lib/panel/case-panel/abstract-case-panel.component.ts b/projects/netgrif-components-core/src/lib/panel/case-panel/abstract-case-panel.component.ts index e669acb59b..96540436c8 100644 --- a/projects/netgrif-components-core/src/lib/panel/case-panel/abstract-case-panel.component.ts +++ b/projects/netgrif-components-core/src/lib/panel/case-panel/abstract-case-panel.component.ts @@ -1,4 +1,4 @@ -import {Component, Input, Optional} from '@angular/core'; +import {Component,Input,Optional} from '@angular/core'; import {Observable} from 'rxjs'; import {Case} from '../../resources/interface/case'; import {toMoment} from '../../resources/types/nae-date-type'; @@ -21,6 +21,7 @@ import {CurrencyPipe} from '@angular/common'; import {PermissionService} from '../../authorization/permission/permission.service'; import {PermissionType} from '../../process/permissions'; import {FormControl} from '@angular/forms'; +import {SelectionBehavior} from '../configuration/selection-behavior'; @Component({ selector: 'ncc-abstract-case-panel', @@ -30,13 +31,13 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi @Input() public case_: Case; - @Input() public approval: boolean; @Input() responsiveBody = true; @Input() first: boolean; @Input() last: boolean; @Input() showCasePanelIcon = true; @Input() showDeleteMenu = false; @Input() textEllipsis = false; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; protected _approvalFormControl: FormControl; protected constructor(protected _caseResourceService: CaseResourceService, @@ -47,7 +48,7 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi protected _userService: UserService, protected _currencyPipe: CurrencyPipe, protected _permissionService: PermissionService, - @Optional() protected _overflowService: OverflowService,) { + @Optional() protected _overflowService: OverflowService) { super(_translateService, _currencyPipe, _overflowService); this._approvalFormControl = new FormControl(); } @@ -112,4 +113,12 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi public getMinWidth() { return (this._overflowService && this._overflowService.overflowMode) ? `${this._overflowService.columnWidth}px` : '0'; } + + public isInSelectionMode(): boolean { + return this.showSelection !== SelectionBehavior.HIDDEN; + } + + public isSelectionDisabled(): boolean { + return this.showSelection !== SelectionBehavior.EDITABLE; + } } diff --git a/projects/netgrif-components-core/src/lib/panel/configuration/selection-behavior.ts b/projects/netgrif-components-core/src/lib/panel/configuration/selection-behavior.ts new file mode 100644 index 0000000000..e66c686271 --- /dev/null +++ b/projects/netgrif-components-core/src/lib/panel/configuration/selection-behavior.ts @@ -0,0 +1,5 @@ +export enum SelectionBehavior { + EDITABLE, + VISIBLE, + HIDDEN +} diff --git a/projects/netgrif-components-core/src/lib/panel/public-api.ts b/projects/netgrif-components-core/src/lib/panel/public-api.ts index 5e321f0b77..c3aea2749c 100644 --- a/projects/netgrif-components-core/src/lib/panel/public-api.ts +++ b/projects/netgrif-components-core/src/lib/panel/public-api.ts @@ -20,3 +20,4 @@ export * from './task-panel/models/task-panel-context'; /* ENUM */ export * from './configuration/config-params'; +export * from './configuration/selection-behavior'; diff --git a/projects/netgrif-components-core/src/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.ts b/projects/netgrif-components-core/src/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.ts index 39d23a52db..d7baec1323 100644 --- a/projects/netgrif-components-core/src/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.ts +++ b/projects/netgrif-components-core/src/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.ts @@ -1,6 +1,6 @@ import {MatExpansionPanel} from '@angular/material/expansion'; import {ActivatedRoute} from '@angular/router'; -import {filter} from 'rxjs/operators'; +import {filter, takeUntil} from 'rxjs/operators'; import {TabbedVirtualScrollComponent} from '../../abstract/tabbed-virtual-scroll.component'; import {AfterViewInit, Component, EventEmitter, Inject, Input, OnDestroy, Optional, Output} from '@angular/core'; import {Observable, Subject, Subscription} from 'rxjs'; @@ -12,13 +12,11 @@ import {LoggerService} from '../../../logger/services/logger.service'; import {NAE_TAB_DATA} from '../../../tabs/tab-data-injection-token/tab-data-injection-token'; import {InjectedTabData} from '../../../tabs/interfaces'; - @Component({ selector: 'ncc-abstract-default-task-list', template: '' }) export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent implements AfterViewInit, OnDestroy { - protected _tasks$: Observable>; protected _redirectTaskId: string; protected _unsubscribe$: Subject; @@ -30,6 +28,7 @@ export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScro @Input() forceLoadDataOnOpen = false; @Input() textEllipsis = false; @Input() showMoreMenu: boolean = true; + @Input() public disabled: boolean = false; @Input() set allowMultiOpen(bool: boolean) { @@ -57,15 +56,15 @@ export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScro this._taskPanelRefs = new Map(); this._unsubscribe$ = new Subject(); if (injectedTabData !== null) { - this._unsub = injectedTabData.tabSelected$.pipe( - filter(bool => bool) - ).subscribe( () => { - if (this._canReload) { - this._taskViewService.reloadCurrentPage(); - } else { - this._canReload = true; - } - }); + this._unsub = injectedTabData.tabSelected$ + .pipe(filter(bool => bool)) + .subscribe(() => { + if (this._canReload) { + this._taskViewService.reloadCurrentPage(); + } else { + this._canReload = true; + } + }); } } @@ -99,16 +98,22 @@ export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScro } public onRedirect() { - this.route.queryParams.pipe(filter(pm => !!pm['taskId'])).subscribe(pm => { - this._redirectTaskId = pm['taskId']; - this._tasks$.pipe().subscribe(tasks => { - const task = tasks.find(t => t.task.stringId === this._redirectTaskId); - if (!!task && !task.initiallyExpanded) { - this._taskPanelRefs.get(this._redirectTaskId).open(); - this._taskPanelRefs.get(this._redirectTaskId).expanded = true; - this._unsubscribe$.next(); - } + if (!this.route) { + return; + } + this.route.queryParams + .pipe(filter(pm => !!pm['taskId']), takeUntil(this._unsubscribe$)) + .subscribe(pm => { + this._redirectTaskId = pm['taskId']; + this._tasks$.pipe(takeUntil(this._unsubscribe$)).subscribe(tasks => { + const task = tasks.find(t => t.task.stringId === this._redirectTaskId); + const panelRef = this._taskPanelRefs.get(this._redirectTaskId); + if (!!task && !task.initiallyExpanded && !!panelRef) { + panelRef.open(); + panelRef.expanded = true; + this._unsubscribe$.next(); + } + }); }); - }); } } diff --git a/projects/netgrif-components-core/src/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.ts b/projects/netgrif-components-core/src/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.ts index 1b00842b27..b13725e4b7 100644 --- a/projects/netgrif-components-core/src/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.ts +++ b/projects/netgrif-components-core/src/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.ts @@ -20,7 +20,6 @@ export abstract class AbstractTaskListPaginationComponent extends AbstractDefaul public pageIndex = 0; public pageSizeOptions: Array = [10, 20, 50, 100]; - @Input() public disabled: boolean; @Input() set tasks$(tasks: Observable>) { this._tasks$ = tasks.pipe((tap(() => { diff --git a/projects/netgrif-components-core/src/lib/panel/task-panel/abstract-task-panel.component.ts b/projects/netgrif-components-core/src/lib/panel/task-panel/abstract-task-panel.component.ts index 42bffe6d9e..0b45f11d4e 100644 --- a/projects/netgrif-components-core/src/lib/panel/task-panel/abstract-task-panel.component.ts +++ b/projects/netgrif-components-core/src/lib/panel/task-panel/abstract-task-panel.component.ts @@ -79,6 +79,7 @@ export abstract class AbstractTaskPanelComponent extends AbstractPanelWithImmedi @Input() actionRowJustifyContent: 'space-between' | 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'initial' | 'start' | 'end' | 'left' | 'right' | 'revert' | 'inherit' | 'unset' @Input() showMoreMenu: boolean = true; + @Input() public disabled: boolean = false; thisContext: TaskPanelContext = { canAssign: () => this.canAssign(), diff --git a/projects/netgrif-components-core/src/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.ts b/projects/netgrif-components-core/src/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.ts index 1f6d2f48d1..65a9f5269f 100644 --- a/projects/netgrif-components-core/src/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.ts +++ b/projects/netgrif-components-core/src/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.ts @@ -18,8 +18,6 @@ export abstract class AbstractCaseListPaginatorComponent extends AbstractDefault public pageSize = 20; public pageIndex = 0; public pageSizeOptions: number[] = [10, 20, 50, 100]; - @Input() public approval: boolean; - @Input() public disabled: boolean; constructor(protected _caseViewService: CaseViewService, protected _log: LoggerService, diff --git a/projects/netgrif-components-core/src/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.ts b/projects/netgrif-components-core/src/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.ts index 6f09d38a97..7014aa2652 100644 --- a/projects/netgrif-components-core/src/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.ts +++ b/projects/netgrif-components-core/src/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.ts @@ -9,6 +9,7 @@ import {InjectedTabData} from '../../../../tabs/interfaces'; import {ActivatedRoute} from '@angular/router'; import {filter, takeUntil} from 'rxjs/operators'; import {TabbedVirtualScrollComponent} from '../../../../panel/abstract/tabbed-virtual-scroll.component'; +import {SelectionBehavior} from '../../../../panel/configuration/selection-behavior'; @Component({ selector: 'ncc-abstract-default-case-list', @@ -24,6 +25,7 @@ export abstract class AbstractDefaultCaseListComponent extends TabbedVirtualScro @Input() textEllipsis = false; @Input() width: string; @Input() redirectEnabled = true; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; public cases$: Observable>; public loading$: Observable; @@ -84,4 +86,8 @@ export abstract class AbstractDefaultCaseListComponent extends TabbedVirtualScro }); }); } + + public isSelectionDisabled(): boolean { + return this.showSelection !== SelectionBehavior.EDITABLE; + } } diff --git a/projects/netgrif-components/src/lib/header/header-modes/edit-mode/edit-mode.component.html b/projects/netgrif-components/src/lib/header/header-modes/edit-mode/edit-mode.component.html index bc8526f648..fce004b33c 100644 --- a/projects/netgrif-components/src/lib/header/header-modes/edit-mode/edit-mode.component.html +++ b/projects/netgrif-components/src/lib/header/header-modes/edit-mode/edit-mode.component.html @@ -1,7 +1,10 @@
- - close + + - - close + +
- - close + +
@@ -16,8 +16,8 @@ [overflowWidth]="getMinWidth()" [approvalFormControl]="approvalFormControl" [indeterminate]="indeterminate()" - [approval]="approval" [typeApproval]="typeApproval()" + [showSelection]="showSelection" >
@@ -25,8 +25,8 @@ [overflowWidth]="getMinWidth()" [approvalFormControl]="approvalFormControl" [indeterminate]="indeterminate()" - [approval]="approval" [typeApproval]="typeApproval()" + [showSelection]="showSelection" >
diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html index 59436a2280..385dbd1a98 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html @@ -13,9 +13,9 @@
- + -
diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts index 28b2152210..9cdf4ff978 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts @@ -26,15 +26,16 @@ import { SavedFilterMetadata, SearchMode, SearchService, + SelectionBehavior, SimpleFilter, TaskSetDataRequestFields, ViewIdService } from '@netgrif/components-core'; -import {HeaderComponent} from '../../../../../header/header.component' +import {HeaderComponent} from '../../../../../header/header.component'; import {DefaultTabbedTaskViewComponent} from '../../tabbed/default-tabbed-task-view/default-tabbed-task-view.component'; import { InjectedTabbedTaskViewDataWithNavigationItemTaskData -} from "../../model/injected-tabbed-task-view-data-with-navigation-item-task-data"; +} from '../../model/injected-tabbed-task-view-data-with-navigation-item-task-data'; const localAllowedNetsFactory = (factory: AllowedNetsServiceFactory) => { return factory.createWithAllNets(); @@ -87,7 +88,7 @@ export class DefaultCaseRefListViewComponent extends AbstractCaseViewComponent i return; } if (this._baseFilter.filter instanceof Filter) { - this.initFilter = this._baseFilter.filter + this.initFilter = this._baseFilter.filter; } else { this._baseFilter.filter.subscribe(observableFilter => { this.initFilter = observableFilter; @@ -99,16 +100,30 @@ export class DefaultCaseRefListViewComponent extends AbstractCaseViewComponent i this.initializeHeader(this.caseHeaderComponent); } - public isApproval() { - return this._dataFieldPortalData?.dataField instanceof MultichoiceField || this._dataFieldPortalData?.dataField instanceof EnumerationField; - } - public handleCaseClick(clickedCase: Case): void { if (this._injectedTabData !== null) { this.openTab(clickedCase); } } + public resolveSelectionBehavior(): SelectionBehavior { + if (!this.isApproval()) { + return SelectionBehavior.HIDDEN; + } + + if (this.disabled()) { + return SelectionBehavior.VISIBLE; + } + return SelectionBehavior.EDITABLE; + } + + public isApproval() { + return ( + this._dataFieldPortalData?.dataField instanceof MultichoiceField || + this._dataFieldPortalData?.dataField instanceof EnumerationField + ); + } + public disabled(): boolean { return this._dataFieldPortalData?.dataField?.formControlRef.disabled; } diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.html b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.html index 1ad1ed84aa..3b3d0bc35d 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.html +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.html @@ -2,6 +2,6 @@
+ [selectedHeaders$]="selectedHeaders$" (taskEvent)="logEvent($event)" fxFlex [disabled]="disabled()">
diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.ts index efdd29ca43..8e082dd689 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.ts +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.ts @@ -1,17 +1,17 @@ -import {AfterViewInit, Component, ViewChild} from '@angular/core'; +import {AfterViewInit,Component,Inject,Optional,ViewChild} from '@angular/core'; import { AbstractTaskViewComponent, AllowedNetsService, - AllowedNetsServiceFactory, + AllowedNetsServiceFactory, CaseRefField, CategoryFactory, - ChangedFieldsService, + ChangedFieldsService, DATA_FIELD_PORTAL_DATA, DataFieldPortalData, EnumerationField, MultichoiceField, NAE_ASYNC_RENDERING_CONFIGURATION, NAE_TASK_FORCE_OPEN, SearchService, TaskEventNotification, TaskViewService, ViewIdService -} from "@netgrif/components-core"; -import {HeaderComponent} from "../../../../../header/header.component"; +} from '@netgrif/components-core'; +import {HeaderComponent} from '../../../../../header/header.component'; const localAllowedNetsFactory = (factory: AllowedNetsServiceFactory) => { return factory.createWithAllNets(); @@ -43,7 +43,9 @@ export class DefaultTaskViewComponent extends AbstractTaskViewComponent implemen @ViewChild('header') public taskHeaderComponent: HeaderComponent; - constructor(taskViewService: TaskViewService) { + constructor(taskViewService: TaskViewService, + @Optional() @Inject(DATA_FIELD_PORTAL_DATA) + protected _dataFieldPortalData: DataFieldPortalData) { super(taskViewService); } @@ -55,4 +57,7 @@ export class DefaultTaskViewComponent extends AbstractTaskViewComponent implemen console.log(event); } + public disabled(): boolean { + return this._dataFieldPortalData?.dataField?.formControlRef.disabled ?? false; + } } diff --git a/projects/netgrif-components/src/lib/panel/case-panel/case-panel.component.html b/projects/netgrif-components/src/lib/panel/case-panel/case-panel.component.html index 9d2f0f6132..1ecd71d0aa 100644 --- a/projects/netgrif-components/src/lib/panel/case-panel/case-panel.component.html +++ b/projects/netgrif-components/src/lib/panel/case-panel/case-panel.component.html @@ -2,8 +2,8 @@ [caseColor]=case_.color>
- - + +
diff --git a/projects/netgrif-components/src/lib/panel/task-panel/task-panel.component.html b/projects/netgrif-components/src/lib/panel/task-panel/task-panel.component.html index 0d0fa8fe4b..6d9e82dcbe 100644 --- a/projects/netgrif-components/src/lib/panel/task-panel/task-panel.component.html +++ b/projects/netgrif-components/src/lib/panel/task-panel/task-panel.component.html @@ -21,6 +21,7 @@
@@ -70,27 +71,27 @@ - - - - - diff --git a/projects/netgrif-components/src/lib/view/case-view/components/case-list-paginator/case-list-paginator.component.html b/projects/netgrif-components/src/lib/view/case-view/components/case-list-paginator/case-list-paginator.component.html index 3a158fcfaf..e4e5e5355a 100644 --- a/projects/netgrif-components/src/lib/view/case-view/components/case-list-paginator/case-list-paginator.component.html +++ b/projects/netgrif-components/src/lib/view/case-view/components/case-list-paginator/case-list-paginator.component.html @@ -15,9 +15,11 @@ let first = first; let last = last; trackBy: trackById" - [showCasePanelIcon]="showCasePanelIcon" [approval]="approval" + [showCasePanelIcon]="showCasePanelIcon" [showDeleteMenu]="showDeleteMenu" [first]="first" [last]="last" - [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)"> + [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)" + [showSelection]="showSelection" + >
- diff --git a/projects/netgrif-components/src/lib/view/case-view/components/case-list/case-list.component.html b/projects/netgrif-components/src/lib/view/case-view/components/case-list/case-list.component.html index 5b06f3ea54..bf382fc9e9 100644 --- a/projects/netgrif-components/src/lib/view/case-view/components/case-list/case-list.component.html +++ b/projects/netgrif-components/src/lib/view/case-view/components/case-list/case-list.component.html @@ -23,7 +23,9 @@ [showCasePanelIcon]="showCasePanelIcon" [showDeleteMenu]="showDeleteMenu" [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)" - [first]="first" [last]="last"> + [first]="first" [last]="last" + [showSelection]="showSelection" + >