From 2a3127199eae40892eaede51c9656a462a3ceb54 Mon Sep 17 00:00:00 2001 From: palajsamuel Date: Tue, 19 May 2026 14:35:23 +0200 Subject: [PATCH 1/5] [NAE-2412] EnumerationMap, MultichoiceMap with 'caseref' component are editable on unassigned task - added disabled property to task ref component - fixed behavior of task and case list components on unassigned task --- .../lib/header/abstract-header.component.ts | 1 + .../abstract-header-mode.component.ts | 1 + .../abstract-case-panel.component.ts | 3 +- .../abstract-default-task-list.component.ts | 64 +++++++++++-------- .../abstract-task-panel.component.ts | 1 + .../abstract-case-list-paginator.component.ts | 1 - .../abstract-default-case-list.component.ts | 1 + .../edit-mode/edit-mode.component.html | 2 +- .../search-mode/search-mode.component.html | 2 +- .../sort-mode/sort-mode.component.html | 2 +- .../src/lib/header/header.component.html | 3 + .../default-case-ref-list-view.component.html | 2 +- .../default-task-view.component.html | 2 +- .../default-task-view.component.ts | 13 ++-- .../case-panel/case-panel.component.html | 4 +- .../task-list-pagination.component.html | 2 +- .../task-panel/task-panel.component.html | 11 ++-- .../case-list-paginator.component.html | 4 +- .../case-list/case-list.component.html | 4 +- 19 files changed, 75 insertions(+), 48 deletions(-) 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 4dcbc14e2..46a2985ed 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 @@ -29,6 +29,7 @@ export abstract class AbstractHeaderComponent implements OnInit, OnDestroy { @Input() showSearchButton = true; @Input() showTableSection = true; @Input() public approval: boolean; + @Input() public disabled: boolean = false; 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 b6f720efd..b34e04b6f 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 @@ -12,6 +12,7 @@ export abstract class AbstractHeaderModeComponent { @Input() public indeterminate: boolean; @Input() public approvalFormControl: FormControl; @Input() public typeApproval: string; + @Input() public disabled: boolean = false; constructor() { } 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 19073640e..6f1091162 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, EventEmitter, Input, Optional, Output } from "@angular/core"; import {Observable} from 'rxjs'; import {Case} from '../../resources/interface/case'; import {toMoment} from '../../resources/types/nae-date-type'; @@ -38,6 +38,7 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi @Input() showCasePanelIcon = true; @Input() showDeleteMenu = false; @Input() textEllipsis = false; + @Input() public disabled: boolean = false; protected _approvalFormControl: FormControl; protected constructor(protected _caseResourceService: CaseResourceService, 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 39d23a52d..d28f6c3fa 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 @@ -14,11 +14,12 @@ import {InjectedTabData} from '../../../tabs/interfaces'; @Component({ - selector: 'ncc-abstract-default-task-list', - template: '' + selector: "ncc-abstract-default-task-list", + template: "" }) -export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent implements AfterViewInit, OnDestroy { - +export abstract class AbstractDefaultTaskListComponent + extends TabbedVirtualScrollComponent + implements AfterViewInit, OnDestroy { protected _tasks$: Observable>; protected _redirectTaskId: string; protected _unsubscribe$: Subject; @@ -30,6 +31,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) { @@ -48,24 +50,26 @@ export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScro protected _unsub: Subscription; protected _canReload: boolean; - constructor(protected _taskViewService: TaskViewService, - protected _log: LoggerService, - @Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabData, - protected route?: ActivatedRoute) { + constructor( + protected _taskViewService: TaskViewService, + protected _log: LoggerService, + @Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabData, + protected route?: ActivatedRoute + ) { super(injectedTabData); this.taskEvent = new EventEmitter(); 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 +103,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(); - } + 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(); + } + }); }); - }); } } 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 9b6c2f1b9..ebce40db9 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 deb0a335d..d457489a9 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 @@ -19,7 +19,6 @@ export abstract class AbstractCaseListPaginatorComponent extends AbstractDefault public pageIndex = 0; public pageSizeOptions: number[] = [10, 20, 50]; @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 6f09d38a9..3df2064e3 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 @@ -24,6 +24,7 @@ export abstract class AbstractDefaultCaseListComponent extends TabbedVirtualScro @Input() textEllipsis = false; @Input() width: string; @Input() redirectEnabled = true; + @Input() public disabled: boolean; public cases$: Observable>; public loading$: Observable; 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 bc8526f64..27aee8f05 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,6 +1,6 @@
+ (click)="$event.stopPropagation();" color='primary' class="checkbox-padding" [disabled]="disabled"> close + (click)="$event.stopPropagation();" color='primary' class="checkbox-padding" [disabled]="disabled"> close
+ (click)="$event.stopPropagation();" color='primary' class="checkbox-padding" [disabled]="disabled"> close
@@ -18,6 +19,7 @@ [indeterminate]="indeterminate()" [approval]="approval" [typeApproval]="typeApproval()" + [disabled]="disabled" >
@@ -27,6 +29,7 @@ [indeterminate]="indeterminate()" [approval]="approval" [typeApproval]="typeApproval()" + [disabled]="disabled" >
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 055eef094..eb24373ec 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,7 +13,7 @@
- + 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 1ad1ed84a..3b3d0bc35 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 efdd29ca4..893ca3fca 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,10 +1,10 @@ -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, @@ -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; + } } 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 9d2f0f613..c49e6c41f 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 0d0fa8fe4..6d9e82dcb 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 29b0d71c2..4f0498be4 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 @@ -17,7 +17,9 @@ trackBy: trackById" [showCasePanelIcon]="showCasePanelIcon" [approval]="approval" [showDeleteMenu]="showDeleteMenu" [first]="first" [last]="last" - [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)"> + [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)" + [disabled]="disabled" + >
+ [first]="first" [last]="last" + [disabled]="disabled" + >
Date: Tue, 19 May 2026 14:42:37 +0200 Subject: [PATCH 2/5] [NAE-2412] EnumerationMap, MultichoiceMap with 'caseref' component are editable on unassigned task - lint fix --- .../lib/panel/case-panel/abstract-case-panel.component.ts | 2 +- .../abstract-default-task-list.component.ts | 4 ++-- .../refs/default-task-view/default-task-view.component.ts | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) 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 6f1091162..158d23b14 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, EventEmitter, Input, Optional, Output } from "@angular/core"; +import {Component,EventEmitter,Input,Optional,Output} from '@angular/core'; import {Observable} from 'rxjs'; import {Case} from '../../resources/interface/case'; import {toMoment} from '../../resources/types/nae-date-type'; 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 d28f6c3fa..566d8b9a7 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 @@ -14,8 +14,8 @@ import {InjectedTabData} from '../../../tabs/interfaces'; @Component({ - selector: "ncc-abstract-default-task-list", - template: "" + selector: 'ncc-abstract-default-task-list', + template: '' }) export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent 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 893ca3fca..09438894e 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,4 +1,4 @@ -import { AfterViewInit, Component, Inject, Optional, ViewChild } from "@angular/core"; +import {AfterViewInit,Component,Inject,Optional,ViewChild} from '@angular/core'; import { AbstractTaskViewComponent, AllowedNetsService, @@ -10,8 +10,8 @@ import { 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(); From 2bd1f60e035ed51f64a2f84e3b04e9acf7543584 Mon Sep 17 00:00:00 2001 From: palajsamuel Date: Thu, 21 May 2026 13:50:13 +0200 Subject: [PATCH 3/5] [NAE-2412] EnumerationMap, MultichoiceMap with 'caseref' component are editable on unassigned task - selection-behavior.ts enum added - unification of disabled and approval flags into showSelection in case-list component of caseRef field --- .../lib/header/abstract-header.component.ts | 4 +- .../abstract-header-mode.component.ts | 12 +++++- .../abstract-case-panel.component.ts | 16 ++++++-- .../panel/configuration/selection-behavior.ts | 5 +++ .../src/lib/panel/public-api.ts | 1 + .../abstract-default-task-list.component.ts | 39 ++++++++----------- .../abstract-case-list-paginator.component.ts | 1 - .../abstract-default-case-list.component.ts | 7 +++- .../edit-mode/edit-mode.component.html | 9 +++-- .../search-mode/search-mode.component.html | 9 +++-- .../sort-mode/sort-mode.component.html | 9 +++-- .../src/lib/header/header.component.html | 9 ++--- .../default-case-ref-list-view.component.html | 4 +- .../default-case-ref-list-view.component.ts | 29 ++++++++++---- .../default-task-view.component.ts | 2 +- .../case-panel/case-panel.component.html | 4 +- .../case-list-paginator.component.html | 6 +-- .../case-list/case-list.component.html | 2 +- 18 files changed, 105 insertions(+), 63 deletions(-) create mode 100644 projects/netgrif-components-core/src/lib/panel/configuration/selection-behavior.ts 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 1d4bb489a..b55e1f451 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,8 +36,7 @@ export abstract class AbstractHeaderComponent implements OnInit, OnDestroy { @Input() showSortButton = true; @Input() showSearchButton = true; @Input() showTableSection = true; - @Input() public approval: boolean; - @Input() public disabled: boolean = false; + @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 b34e04b6f..2d2fb5156 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,11 +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 disabled: boolean = false; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; constructor() { } @@ -20,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 158d23b14..73db957dc 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,EventEmitter,Input,Optional,Output} 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,7 +31,6 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi @Input() public case_: Case; - @Input() public approval: boolean; @Input() public selectedHeaders$: Observable>; @Input() responsiveBody = true; @Input() first: boolean; @@ -38,7 +38,7 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi @Input() showCasePanelIcon = true; @Input() showDeleteMenu = false; @Input() textEllipsis = false; - @Input() public disabled: boolean = false; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; protected _approvalFormControl: FormControl; protected constructor(protected _caseResourceService: CaseResourceService, @@ -49,7 +49,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(); } @@ -114,4 +114,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 000000000..e66c68627 --- /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 5e321f0b7..c3aea2749 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 566d8b9a7..d7baec132 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,14 +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 { +export abstract class AbstractDefaultTaskListComponent extends TabbedVirtualScrollComponent implements AfterViewInit, OnDestroy { protected _tasks$: Observable>; protected _redirectTaskId: string; protected _unsubscribe$: Subject; @@ -50,12 +47,10 @@ export abstract class AbstractDefaultTaskListComponent protected _unsub: Subscription; protected _canReload: boolean; - constructor( - protected _taskViewService: TaskViewService, - protected _log: LoggerService, - @Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabData, - protected route?: ActivatedRoute - ) { + constructor(protected _taskViewService: TaskViewService, + protected _log: LoggerService, + @Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabData, + protected route?: ActivatedRoute) { super(injectedTabData); this.taskEvent = new EventEmitter(); this._taskPanelRefs = new Map(); @@ -103,19 +98,19 @@ export abstract class AbstractDefaultTaskListComponent } public onRedirect() { + if (!this.route) { + return; + } this.route.queryParams - .pipe(filter(pm => !!pm["taskId"])) + .pipe(filter(pm => !!pm['taskId']), takeUntil(this._unsubscribe$)) .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._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/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 adc32bb15..65a9f5269 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,7 +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; 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 3df2064e3..7014aa265 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,7 +25,7 @@ export abstract class AbstractDefaultCaseListComponent extends TabbedVirtualScro @Input() textEllipsis = false; @Input() width: string; @Input() redirectEnabled = true; - @Input() public disabled: boolean; + @Input() public showSelection: SelectionBehavior = SelectionBehavior.HIDDEN; public cases$: Observable>; public loading$: Observable; @@ -85,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 27aee8f05..bc5ff4832 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 + +
@@ -17,9 +16,8 @@ [overflowWidth]="getMinWidth()" [approvalFormControl]="approvalFormControl" [indeterminate]="indeterminate()" - [approval]="approval" [typeApproval]="typeApproval()" - [disabled]="disabled" + [showSelection]="showSelection" >
@@ -27,9 +25,8 @@ [overflowWidth]="getMinWidth()" [approvalFormControl]="approvalFormControl" [indeterminate]="indeterminate()" - [approval]="approval" [typeApproval]="typeApproval()" - [disabled]="disabled" + [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 a4965d42f..385dbd1a9 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 28b215221..9cdf4ff97 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.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-task-view/default-task-view.component.ts index 09438894e..8e082dd68 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 @@ -58,6 +58,6 @@ export class DefaultTaskViewComponent extends AbstractTaskViewComponent implemen } public disabled(): boolean { - return this._dataFieldPortalData?.dataField?.formControlRef.disabled; + 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 c49e6c41f..1ecd71d0a 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>
- - + +
@@ -28,7 +28,7 @@
- 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 111e7e56f..12a685c1a 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 @@ -24,7 +24,7 @@ [showDeleteMenu]="showDeleteMenu" [case_]="case_" [selectedHeaders$]="selectedHeaders$" (click)="onCaseClick(case_)" [first]="first" [last]="last" - [disabled]="disabled" + [showSelection]="showSelection" > From 620478eaee1877bb76235daec1f3993bfcef81f4 Mon Sep 17 00:00:00 2001 From: palajsamuel Date: Thu, 21 May 2026 14:12:45 +0200 Subject: [PATCH 4/5] [NAE-2412] EnumerationMap, MultichoiceMap with 'caseref' component are editable on unassigned task - aria-label added to clear selection buttons --- .../lib/header/header-modes/edit-mode/edit-mode.component.html | 2 +- .../header/header-modes/search-mode/search-mode.component.html | 2 +- .../lib/header/header-modes/sort-mode/sort-mode.component.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 bc5ff4832..fce004b33 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,7 @@
- diff --git a/projects/netgrif-components/src/lib/header/header-modes/search-mode/search-mode.component.html b/projects/netgrif-components/src/lib/header/header-modes/search-mode/search-mode.component.html index 385d3d1ed..4c7350ab6 100644 --- a/projects/netgrif-components/src/lib/header/header-modes/search-mode/search-mode.component.html +++ b/projects/netgrif-components/src/lib/header/header-modes/search-mode/search-mode.component.html @@ -1,7 +1,7 @@
- diff --git a/projects/netgrif-components/src/lib/header/header-modes/sort-mode/sort-mode.component.html b/projects/netgrif-components/src/lib/header/header-modes/sort-mode/sort-mode.component.html index 0cd07f2a0..52e87b381 100644 --- a/projects/netgrif-components/src/lib/header/header-modes/sort-mode/sort-mode.component.html +++ b/projects/netgrif-components/src/lib/header/header-modes/sort-mode/sort-mode.component.html @@ -1,7 +1,7 @@
- From dd06dcd3ed98da5b47d7f61477b667b4b2468716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Fri, 12 Jun 2026 11:10:26 +0200 Subject: [PATCH 5/5] [NAE-2412] EnumerationMap, MultichoiceMap with 'caseref' component are editable on unassigned task - fix merge --- .../src/lib/panel/case-panel/abstract-case-panel.component.ts | 1 - .../abstract-task-list-pagination.component.ts | 1 - 2 files changed, 2 deletions(-) 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 3d8bcde92..96540436c 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 @@ -31,7 +31,6 @@ export abstract class AbstractCasePanelComponent extends AbstractPanelWithImmedi @Input() public case_: Case; - @Input() public selectedHeaders$: Observable>; @Input() responsiveBody = true; @Input() first: boolean; @Input() last: boolean; 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 1b00842b2..b13725e4b 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(() => {