Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 5f0faa63 authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

[EDELIVERY-1682] PR updates + implement review list page

parent 65579c0b
No related branches found
No related tags found
No related merge requests found
Pipeline #205317 failed
Showing
with 1169 additions and 77 deletions
......@@ -182,6 +182,12 @@ import {ReviewTasksComponent} from "./edit/review-task/review-tasks.component";
import {
ReviewTasksPanelComponent
} from "./common/panels/review-tasks-panel/review-tasks-panel.component";
import {
DocumentEditPanelComponent
} from "./common/panels/document-edit-panel/document-edit-panel.component";
import {
ReviewDocumentPanelComponent
} from "./common/panels/review-tasks-panel/review-document-panel/review-document-panel.component";
@NgModule({
......@@ -214,6 +220,7 @@ import {
DnsToolsComponent,
DnsQueryPanelComponent,
DocumentWizardDialogComponent,
DocumentEditPanelComponent,
DocumentEventsPanelComponent,
DocumentPropertiesPanelComponent,
DocumentPropertyDialogComponent,
......@@ -256,6 +263,7 @@ import {
RowLimiterComponent,
SaveDialogComponent,
SearchTableComponent,
ReviewDocumentPanelComponent,
ReviewTasksComponent,
ReviewTasksPanelComponent,
ResourceSearchComponent,
......
import {RouterModule, Routes} from '@angular/router';
import {LoginComponent} from './login/login.component';
import {ResourceSearchComponent} from './resource-search/resource-search.component';
import {PropertyComponent} from "./system-settings/admin-properties/property.component";
import {UserProfileComponent} from "./user-settings/user-profile/user-profile.component";
import {
ResourceSearchComponent
} from './resource-search/resource-search.component';
import {
PropertyComponent
} from "./system-settings/admin-properties/property.component";
import {
UserProfileComponent
} from "./user-settings/user-profile/user-profile.component";
import {authenticationGuard} from "./guards/authentication.guard";
import {UserAccessTokensComponent} from "./user-settings/user-access-tokens/user-access-tokens.component";
import {UserCertificatesComponent} from "./user-settings/user-certificates/user-certificates.component";
import {ExtensionComponent} from "./system-settings/admin-extension/extension.component";
import {AdminTruststoreComponent} from "./system-settings/admin-truststore/admin-truststore.component";
import {AdminKeystoreComponent} from "./system-settings/admin-keystore/admin-keystore.component";
import {AdminDomainComponent} from "./system-settings/admin-domain/admin-domain.component";
import {
UserAccessTokensComponent
} from "./user-settings/user-access-tokens/user-access-tokens.component";
import {
UserCertificatesComponent
} from "./user-settings/user-certificates/user-certificates.component";
import {
ExtensionComponent
} from "./system-settings/admin-extension/extension.component";
import {
AdminTruststoreComponent
} from "./system-settings/admin-truststore/admin-truststore.component";
import {
AdminKeystoreComponent
} from "./system-settings/admin-keystore/admin-keystore.component";
import {
AdminDomainComponent
} from "./system-settings/admin-domain/admin-domain.component";
import {dirtyDeactivateGuard} from "./guards/dirty.guard";
import {AdminUserComponent} from "./system-settings/admin-users/admin-user.component";
import {
AdminUserComponent
} from "./system-settings/admin-users/admin-user.component";
import {EditDomainComponent} from "./edit/edit-domain/edit-domain.component";
import {EditGroupComponent} from "./edit/edit-group/edit-group.component";
import {EditResourceComponent} from "./edit/edit-resources/edit-resource.component";
import {ResourceDocumentPanelComponent} from "./edit/edit-resources/resource-document-panel/resource-document-panel.component";
import {SubresourceDocumentPanelComponent} from "./edit/edit-resources/subresource-document-panel/subresource-document-panel.component";
import {authorizeChildSystemAdminGuard} from "./guards/authorize-child-system-admin.guard";
import {activateChildResourceGuard} from "./guards/activate-child-document.guard";
import {UserAlertsComponent} from "./user-settings/user-alerts/user-alerts.component";
import {AdminAlertsComponent} from "./system-settings/admin-alerts/admin-alerts.component";
import {ResetCredentialComponent} from "./security/reset-credential/reset-credential.component";
import {
EditResourceComponent
} from "./edit/edit-resources/edit-resource.component";
import {
ResourceDocumentPanelComponent
} from "./edit/edit-resources/resource-document-panel/resource-document-panel.component";
import {
SubresourceDocumentPanelComponent
} from "./edit/edit-resources/subresource-document-panel/subresource-document-panel.component";
import {
authorizeChildSystemAdminGuard
} from "./guards/authorize-child-system-admin.guard";
import {
activateChildResourceGuard
} from "./guards/activate-child-document.guard";
import {
UserAlertsComponent
} from "./user-settings/user-alerts/user-alerts.component";
import {
AdminAlertsComponent
} from "./system-settings/admin-alerts/admin-alerts.component";
import {
ResetCredentialComponent
} from "./security/reset-credential/reset-credential.component";
import {DnsToolsComponent} from "./tools/dns-tools/dns-tools.component";
import {ReviewTasksComponent} from "./edit/review-task/review-tasks.component";
import {
ReviewDocumentPanelComponent
} from "./common/panels/review-tasks-panel/review-document-panel/review-document-panel.component";
import {activateChildReviewGuard} from "./guards/activate-child-review.guard";
const appRoutes: Routes = [
......@@ -37,9 +77,16 @@ const appRoutes: Routes = [
path: 'edit',
canActivateChild: [authenticationGuard],
children: [
{path: 'edit-domain', component: EditDomainComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'edit-group', component: EditGroupComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'review-tasks', component: ReviewTasksComponent },
{
path: 'edit-domain',
component: EditDomainComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'edit-group',
component: EditGroupComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'edit-resource',
canDeactivate: [dirtyDeactivateGuard],
......@@ -56,8 +103,23 @@ const appRoutes: Routes = [
component: SubresourceDocumentPanelComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{path: '', component: EditResourceComponent, canDeactivate: [dirtyDeactivateGuard]},
{
path: '',
component: EditResourceComponent,
canDeactivate: [dirtyDeactivateGuard]
},
]
},
{
path: 'review-tasks',
children: [
{
path: 'review-document',
canActivate: [activateChildReviewGuard],
component: ReviewDocumentPanelComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{path: '', component: ReviewTasksComponent},]
}
]
},
......@@ -65,24 +127,72 @@ const appRoutes: Routes = [
path: 'system-settings',
canActivateChild: [authenticationGuard, authorizeChildSystemAdminGuard],
children: [
{path: 'domain', component: AdminDomainComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'user', component: AdminUserComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'properties', component: PropertyComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'keystore', component: AdminKeystoreComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'truststore', component: AdminTruststoreComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'extension', component: ExtensionComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'alert', component: AdminAlertsComponent, canDeactivate: [dirtyDeactivateGuard]},
{
path: 'domain',
component: AdminDomainComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'user',
component: AdminUserComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'properties',
component: PropertyComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'keystore',
component: AdminKeystoreComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'truststore',
component: AdminTruststoreComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'extension',
component: ExtensionComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'alert',
component: AdminAlertsComponent,
canDeactivate: [dirtyDeactivateGuard]
},
]
},
{
path: 'user-settings',
canActivateChild: [authenticationGuard],
children: [
{path: 'user-profile', component: UserProfileComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'user-access-token', component: UserAccessTokensComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'user-certificate', component: UserCertificatesComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'user-alert', component: UserAlertsComponent, canDeactivate: [dirtyDeactivateGuard]},
{path: 'user-membership', component: UserProfileComponent, canDeactivate: [dirtyDeactivateGuard]},
{
path: 'user-profile',
component: UserProfileComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'user-access-token',
component: UserAccessTokensComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'user-certificate',
component: UserCertificatesComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'user-alert',
component: UserAlertsComponent,
canDeactivate: [dirtyDeactivateGuard]
},
{
path: 'user-membership',
component: UserProfileComponent,
canDeactivate: [dirtyDeactivateGuard]
},
]
},
{path: '**', redirectTo: ''},
......
......@@ -142,6 +142,10 @@ export class AlertMessageService {
this.showMessage(message, 'warning', keepAfterNavigationChange, timeoutInSeconds);
}
errorForTranslation(translationCode: string, keepAfterNavigationChange = false, timeoutInSeconds: number = null) {
this.showMessageForTranslation(translationCode, 'error', keepAfterNavigationChange, timeoutInSeconds);
}
error(message: any, keepAfterNavigationChange = false, timeoutInSeconds: number = null) {
this.showMessage(message, 'error', keepAfterNavigationChange, timeoutInSeconds);
}
......
......@@ -7,8 +7,7 @@ import {AlertMessageService} from "../alert-message/alert-message.service";
export class HttpErrorHandlerService {
constructor (private navigationService: NavigationService,
private alertMessageService: AlertMessageService,) {
private alertMessageService: AlertMessageService) {
}
public logoutOnInvalidSessionError(err: any): boolean {
......@@ -21,4 +20,20 @@ export class HttpErrorHandlerService {
}
return false;
}
public handleHttpError(err: any) {
if (err instanceof HttpErrorResponse) {
if (this.logoutOnInvalidSessionError(err)) {
return;
}
if (err.status === 0) {
this.alertMessageService.error("Server is not reachable. Please try again later.");
} else {
this.alertMessageService.error(err.error.errorDescription);
}
} else {
this.alertMessageService.error(err.error?.errorDescription);
}
}
}
import {SearchTableEntity} from "../search-table/search-table-entity.model";
export interface ReviewDocumentVersionRo extends SearchTableEntity {
documentId: string;
documentVersionId: string;
resourceId: string;
subresourceId?: string;
version: number;
currentStatus: string;
resourceIdentifierValue: string;
resourceIdentifierScheme: string;
subresourceIdentifierValue?: string;
subresourceIdentifierScheme?: string;
target: string;
lastUpdatedOn: Date;
}
import {SearchTableEntity} from "../search-table/search-table-entity.model";
import {VisibilityEnum} from "../enums/visibility.enum";
export interface SubresourceRo extends SearchTableEntity {
subresourceId?: string;
subresourceTypeIdentifier?: string;
identifierValue: string;
identifierScheme?: string;
}
<div id="resource-document-panel">
<mat-toolbar class="mat-elevation-z2" style="min-height: 50px !important;">
<mat-toolbar-row class="smp-toolbar-row"
style="justify-content: space-between;min-height: 50px !important;">
<button id="newVersion_id"
*ngIf="isNotReviewMode"
mat-raised-button
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.version.new' | translate }}"
[disabled]="emptyDocument"
(click)="onNewDocumentVersionButtonClicked()">
<mat-icon>add_circle</mat-icon>
<span>{{ "document.edit.panel.button.version.new" | translate }}</span>
</button>
<button id="validateResource_id" mat-raised-button
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.validate' | translate }}"
[disabled]="emptyDocument"
(click)="onDocumentValidateButtonClicked()">
<mat-icon>check_circle</mat-icon>
<span>{{ "document.edit.panel.button.validate" | translate }}</span>
</button>
<button id="GenerateResource_id"
*ngIf="isNotReviewMode"
mat-raised-button
color="primary"
[disabled]="!documentEditable"
matTooltip="{{ 'document.edit.panel.tooltip.generate' | translate }}"
(click)="onGenerateButtonClicked()">
<mat-icon>change_circle</mat-icon>
<span>{{ "document.edit.panel.button.generate" | translate }}</span>
</button>
<button id="documentWizard_id" mat-raised-button
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.document.wizard' | translate }}"
[disabled]="!documentEditable"
*ngIf="showWizardDialog && isNotReviewMode"
(click)="onShowDocumentWizardDialog()">
<mat-icon>code_block</mat-icon>
<span>{{ "document.edit.panel.button.document.wizard" | translate }}</span>
</button>
<span style="flex: 1 1 auto;"></span>
</mat-toolbar-row>
</mat-toolbar>
<div class="panel" [formGroup]="documentForm"
style="display: flex;flex-direction: row;flex-grow: 1; ">
<div
style="display:flex; overflow: auto;flex: 2;align-self: stretch; flex-direction: column;">
<div style="display: flex;flex-direction: row">
<mat-form-field style="min-width: 140px"
subscriptSizing="dynamic"
appearance="fill"
>
<mat-label>{{ "document.edit.panel.label.selected.version" | translate }}</mat-label>
<mat-select
placeholder="{{ 'document.edit.panel.placeholder.version' | translate }}"
matTooltip="{{ 'document.edit.panel.tooltip.version' | translate }}"
id="document-version_id"
formControlName="payloadVersion"
(selectionChange)="onSelectionDocumentVersionChanged()">
<mat-option *ngFor="let version of getDocumentVersions"
[value]="version">
{{ version }}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field style="min-width: 180px"
subscriptSizing="dynamic"
appearance="fill">
<mat-label>{{ "document.edit.panel.label.selected.status" | translate }}</mat-label>
<input matInput id="status_id"
formControlName="documentVersionStatus"
readonly>
</mat-form-field>
<mat-form-field style="width:100%"
subscriptSizing="dynamic"
appearance="fill">
<mat-label>{{ "document.edit.panel.label.selected.created.on" | translate }}</mat-label>
<input id="payloadCreatedOn_id"
matInput [ngxMatDatetimePicker]="payloadCreatedOnPicker"
formControlName="payloadCreatedOn"
readonly>
<mat-datepicker-toggle matSuffix [for]="payloadCreatedOnPicker"
style="visibility: hidden"></mat-datepicker-toggle>
<ngx-mat-datetime-picker #payloadCreatedOnPicker [showSpinners]="true"
[showSeconds]="false"
[hideTime]="false"></ngx-mat-datetime-picker>
</mat-form-field>
</div>
<div
style="display:block; overflow: auto;flex: 2;align-self: stretch; flex-direction: column;border: ridge 3px #b0bec5"
(click)="onEditPanelClick()">
<smp-editor #smpDocumentEditor formControlName="payload"
ngDefaultControl></smp-editor>
</div>
<smp-warning-panel *ngIf="!documentEditable"
icon="info"
type="desc"
[label]="'document.edit.panel.note.editable' | translate: { editableDocStatusList: editableDocStatusList }">
</smp-warning-panel>
</div>
<expandable-panel>
<expandable-item icon="settings"
title="{{'document.properties.panel.tab.title' | translate }}"
buttonLabel="{{'document.properties.panel.tab.button.properties' | translate }}">
<document-properties-panel formControlName="properties"
[showEditToolbarButton]="isNotReviewMode"
ngDefaultControl></document-properties-panel>
</expandable-item>
<expandable-item icon="list"
*ngIf="isNotReviewMode"
title="{{'document.versions.panel.tab.title' | translate }}"
buttonLabel="{{'document.versions.panel.tab.button.versions' | translate }}">
<document-versions-panel
formControlName="documentVersions"
[selectedVersion]="currentDocumentVersion"
(selectedVersionChange) = "loadDocumentForVersion($event)"
ngDefaultControl></document-versions-panel>
</expandable-item>
<expandable-item icon="event"
title="{{'document.events.panel.tab.title' | translate }}"
buttonLabel="{{'document.events.panel.tab.button.events' | translate }}">
<document-events-panel formControlName="documentVersionEvents"
ngDefaultControl></document-events-panel>
</expandable-item>
</expandable-panel>
</div>
<mat-toolbar class="mat-elevation-z2"
style="flex-grow: 0;">
<mat-toolbar-row class="smp-toolbar-row">
<button id="back_id" mat-raised-button color="primary"
(click)="onBackButtonClicked()">
<mat-icon>arrow_circle_left</mat-icon>
<span>{{ "document.edit.panel.button.back" | translate }}</span>
</button>
<button id="cancel_id"
*ngIf="isNotReviewMode"
mat-raised-button
color="primary"
[disabled]="cancelButtonDisabled"
(click)="onDocumentResetButtonClicked()">
<mat-icon>cancel</mat-icon>
<span>{{ "document.edit.panel.button.cancel" | translate }}</span>
</button>
<tool-button-spacer></tool-button-spacer>
<button id="saveResource_id"
*ngIf="isNotReviewMode"
mat-raised-button
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.save' | translate }}"
[disabled]="saveButtonDisabled"
(click)="onSaveButtonClicked()">
<mat-icon>save</mat-icon>
<span>{{ "document.edit.panel.button.save" | translate }}</span>
</button>
<button id="publishResource_id" mat-raised-button
*ngIf="isNotReviewMode"
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.version.publish' | translate }}"
[disabled]="publishButtonDisabled"
(click)="onPublishButtonClicked()">
<mat-icon>publish</mat-icon>
<span>{{ "document.edit.panel.button.version.publish" | translate }}</span>
</button>
<tool-button-spacer></tool-button-spacer>
<button *ngIf="reviewEnabled && isNotReviewMode" id="reviewResource_id" mat-raised-button
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.version.review' | translate }}"
[disabled]="reviewButtonDisabled"
(click)="onReviewRequestButtonClicked()">
<mat-icon>task</mat-icon>
<span>{{ "document.edit.panel.button.version.review" | translate }}</span>
</button>
<button mat-raised-button
*ngIf="!isNotReviewMode || reviewEnabled"
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.version.approve' | translate }}"
[disabled]="reviewActionButtonDisabled"
(click)="onApproveButtonClicked()">
<mat-icon>check_circle</mat-icon>
<span>{{ "document.edit.panel.button.version.approve" | translate }}</span>
</button>
<button mat-raised-button
*ngIf="!isNotReviewMode || reviewEnabled"
color="primary"
matTooltip="{{ 'document.edit.panel.tooltip.version.reject' | translate }}"
[disabled]="reviewActionButtonDisabled"
(click)="onRejectButtonClicked()">
<mat-icon>unpublished</mat-icon>
<span>{{ "document.edit.panel.button.version.reject" | translate }}</span>
</button>
</mat-toolbar-row>
</mat-toolbar>
</div>
#resource-document-panel {
display: flex;
height: 100%;
flex-direction: column;
}
.CodeMirror {
height: auto;
}
<div style="display:flex; flex-grow: 1; flex-direction: column">
<mat-toolbar class="mat-elevation-z2"
<mat-toolbar *ngIf="shotToolbar"
class="mat-elevation-z2"
style="flex-grow: 0;">
<mat-toolbar-row class="smp-toolbar-row">
<button id="createButton" mat-mini-fab attr.aria-label="{{ 'document.properties.panel.label.create' | translate }}"
......
......@@ -68,6 +68,7 @@ export class DocumentPropertiesPanelComponent implements AfterViewInit, BeforeLe
private onChangeCallback: (_: any) => void = () => {
};
selected?: DocumentPropertyRo = null;
@Input() showEditToolbarButton: boolean = true;
dataChanged: boolean = false;
initPropertyList: DocumentPropertyRo[] = [];
propertyDataSource: MatTableDataSource<DocumentPropertyRo> = new MatTableDataSource();
......@@ -114,6 +115,10 @@ export class DocumentPropertiesPanelComponent implements AfterViewInit, BeforeLe
return this.dataChanged;
}
get shotToolbar(): boolean {
return this.showEditToolbarButton;
}
/**
* Method created a new property and opens the dialog to edit it.
* After the dialog is closed with 'Save' button, the new property is added
......
......@@ -41,6 +41,7 @@
*matHeaderRowDef="displayedColumns; sticky:true"></tr>
<tr mat-row
*matRowDef="let odd = odd; let row; columns: displayedColumns;"
(dblclick)="onRowSelect(row)"
[ngClass]="getRowClass(row, odd)"
></tr>
<tr class="mat-row" *matNoDataRow>
......
......@@ -19,8 +19,10 @@
import {
AfterViewInit,
Component,
EventEmitter,
forwardRef,
Input,
Output,
ViewChild,
} from '@angular/core';
import {MatTable, MatTableDataSource} from "@angular/material/table";
......@@ -58,28 +60,62 @@ import {GlobalLookups} from "../../global-lookups";
]
})
export class DocumentVersionsPanelComponent implements AfterViewInit, BeforeLeaveGuard, ControlValueAccessor {
@Output() selectedVersionChange: EventEmitter<number> = new EventEmitter<number>();
displayedColumns: string[] = [ 'version', 'status', 'createdOn', 'lastUpdatedOn'];
displayedColumns: string[] = ['version', 'status', 'createdOn', 'lastUpdatedOn'];
private onChangeCallback: (_: any) => void = () => {
};
versionDataSource: MatTableDataSource<DocumentVersionRo> = new MatTableDataSource();
dataChanged: boolean = false;
selected: DocumentVersionRo;
_currentVersion: number;
@ViewChild("DocumentVersionsTable") table: MatTable<DocumentVersionRo>;
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
constructor(
private globalLookups: GlobalLookups,
public dialog: MatDialog,
private controlContainer: ControlContainer) {
public dialog: MatDialog,
private controlContainer: ControlContainer) {
}
get dateTimeFormat(): string {
return this.globalLookups.getDateTimeFormat();
}
@Input() set selectedVersion(version: number) {
this._currentVersion = version;
// find selected version
this.updateSelectedVersion();
}
get selectedVersion(): number {
return this._currentVersion;
}
/**
* Private method to locate selected row for current version
* @private
*/
private updateSelectedVersion(): void {
const selectedVersion :DocumentVersionRo = this.versionDataSource.data.find(v => v.version === this._currentVersion);
this.selected = selectedVersion;
}
/**
* Method to handle row selection
* @param row
*/
onRowSelect(row: DocumentVersionRo) {
this.selected = row;
this.selectedVersionChange.emit(row.version);
}
@ViewChild(FormControlDirective, {static: true})
formControlDirective: FormControlDirective;
@Input()
......@@ -97,6 +133,7 @@ export class DocumentVersionsPanelComponent implements AfterViewInit, BeforeLeav
*/
writeValue(eventList: DocumentVersionRo[]): void {
this.versionDataSource.data = !eventList?.length ? [] : [...eventList];
this.updateSelectedVersion();
this.dataChanged = false;
}
......
<document-edit-panel #reviewDocumentEditor
editorMode="REVIEW_EDITOR">
</document-edit-panel>
import {Component, ViewChild, ViewEncapsulation,} from '@angular/core';
import {
BeforeLeaveGuard
} from "../../../../window/sidenav/navigation-on-leave-guard";
import {
DocumentEditPanelComponent
} from "../../document-edit-panel/document-edit-panel.component";
@Component({
templateUrl: './review-document-panel.component.html',
styleUrls: ['./review-document-panel.component.scss'],
encapsulation: ViewEncapsulation.None,
})
export class ReviewDocumentPanelComponent implements BeforeLeaveGuard {
@ViewChild('reviewDocumentEditor') documentEditor: DocumentEditPanelComponent;
constructor() {
}
isDirty(): boolean {
return false;
}
}
......@@ -43,22 +43,13 @@ export class ReviewTasksController implements SearchTableController {
}
public edit(row: any): MatDialogRef<any> {
return this.dialog.open(ObjectPropertiesDialogComponent, {
data: {
title: "Update Review tasks",
object: row,
}
});
return null;
}
public delete(row: any) {
}
newDialog(config): MatDialogRef<any> {
if (config && config.data && config.data.edit) {
return this.edit(config.data);
} else {
return this.showDetails(config.data);
}
return null;
}
}
......@@ -10,6 +10,7 @@
[allowDeleteItems]="false"
[allowEditItems]="true"
[showActionButtons]="false"
(onRowDoubleClicked)="onRowDoubleClicked($event)"
>
<ng-template #additionalToolButtons>
<span style="width: 2px">&nbsp;</span>
......
......@@ -16,12 +16,19 @@ import {HttpClient} from '@angular/common/http';
import {GlobalLookups} from "../../global-lookups";
import {SearchTableComponent} from "../../search-table/search-table.component";
import {SecurityService} from "../../../security/security.service";
import {
ObjectPropertiesDialogComponent
} from "../../dialogs/object-properties-dialog/object-properties-dialog.component";
import {ReviewTasksController} from "./review-tasks-controller";
import {lastValueFrom} from "rxjs";
import {TranslateService} from "@ngx-translate/core";
import {
NavigationNode,
NavigationService
} from "../../../window/sidenav/navigation-model.service";
import {
EditResourceService
} from "../../../edit/edit-resources/edit-resource.service";
import {
ReviewDocumentVersionRo
} from "../../model/review-document-version-ro.model";
/**
* This is a generic alert panel component for previewing alert list
......@@ -46,6 +53,7 @@ export class ReviewTasksPanelComponent implements OnInit, AfterViewInit, AfterVi
columnPicker: ColumnPicker = new ColumnPicker();
reviewTaskController: ReviewTasksController;
filter: any = {};
selected: any;
constructor(public securityService: SecurityService,
protected lookups: GlobalLookups,
......@@ -53,7 +61,9 @@ export class ReviewTasksPanelComponent implements OnInit, AfterViewInit, AfterVi
protected alertService: AlertMessageService,
private translateService: TranslateService,
public dialog: MatDialog,
private changeDetector: ChangeDetectorRef) {
private changeDetector: ChangeDetectorRef,
private navigationService: NavigationService,
private editResourceService: EditResourceService,) {
}
ngOnInit() {
......@@ -71,31 +81,51 @@ export class ReviewTasksPanelComponent implements OnInit, AfterViewInit, AfterVi
title: "Review date",
prop: 'lastUpdatedOn',
showInitially: true,
maxWidth: 250,
maxWidth: 200,
cellTemplate: this.dateTimeColumn,
},
{
name: await lastValueFrom(this.translateService.get("resource.search.label.column.resource.scheme")),
prop: 'resourceScheme',
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.target")),
prop: 'target',
maxWidth: 160,
showInitially: true,
},
{
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.version")),
prop: 'version',
maxWidth: 60,
showInitially: true,
},
{
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.resource.scheme")),
prop: 'resourceIdentifierScheme',
width: 250,
maxWidth: 250,
resizable: 'true',
showInitially: true,
},
{
name: await lastValueFrom(this.translateService.get("resource.search.label.column.resource.id")),
prop: 'resourceIdentifier',
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.resource.value")),
prop: 'resourceIdentifierValue',
resizable: 'true',
showInitially: true,
},
{
name: 'Version',
title: "Version",
prop: 'version',
maxWidth: 60,
cellTemplate: this.credentialType,
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.subresource.scheme")),
prop: 'subresourceIdentifierScheme',
width: 250,
maxWidth: 250,
resizable: 'true',
showInitially: true,
},
{
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.column.subresource.value")),
prop: 'subresourceIdentifierValue',
resizable: 'true',
showInitially: true,
}
},
];
this.columnPicker.selectedColumns = this.columnPicker.allColumns.filter(col => col.showInitially);
......@@ -108,13 +138,6 @@ export class ReviewTasksPanelComponent implements OnInit, AfterViewInit, AfterVi
details(row: any) {
this.dialog.open(ObjectPropertiesDialogComponent, {
data: {
title: "Alert details",
object: row.alertDetails,
}
});
}
// for dirty guard...
......@@ -125,4 +148,27 @@ export class ReviewTasksPanelComponent implements OnInit, AfterViewInit, AfterVi
get dateTimeFormat(): string {
return this.lookups.getDateTimeFormat();
}
async onRowDoubleClicked(row: ReviewDocumentVersionRo) {
// set selected resource
this.editResourceService.selectedReviewDocument = row;
let node: NavigationNode = await this.createNewReviewDocumentNavigationNode();
this.navigationService.selected.children = [node]
this.navigationService.select(node);
}
public async createNewReviewDocumentNavigationNode() {
return {
code: "review-document",
icon: "note",
name: await lastValueFrom(this.translateService.get("review.edit.panel.label.review")),
routerLink: "review-document",
selected: true,
tooltip: "",
transient: true,
i18n: "navigation.label.edit.document.review"
}
}
}
......@@ -25,4 +25,5 @@ export interface SearchTableController {
* @param row the row for which the row expander should be disabled or not
*/
isRowExpanderDisabled(row: SearchTableEntity): boolean;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment