mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Merge pull request #3997 from 4Science/task/main/DURACOM-307
Migration to new Angular Control Flow syntax
This commit is contained in:
@@ -294,7 +294,8 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
// Custom DSpace Angular rules
|
// Custom DSpace Angular rules
|
||||||
"dspace-angular-html/themed-component-usages": "error",
|
"dspace-angular-html/themed-component-usages": "error",
|
||||||
"dspace-angular-html/no-disabled-attribute-on-button": "error"
|
"dspace-angular-html/no-disabled-attribute-on-button": "error",
|
||||||
|
"@angular-eslint/template/prefer-control-flow": "error"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -36,9 +36,11 @@
|
|||||||
[showPaginator]="false"
|
[showPaginator]="false"
|
||||||
(prev)="pagePrev()"
|
(prev)="pagePrev()"
|
||||||
(next)="pageNext()">
|
(next)="pageNext()">
|
||||||
<ul *ngIf="(objectsSelected$|async)?.hasSucceeded" class="list-unstyled ms-4">
|
@if ((objectsSelected$|async)?.hasSucceeded) {
|
||||||
<li *ngFor='let object of (objectsSelected$|async)?.payload?.page | paginate: { itemsPerPage: (paginationOptions$ | async).pageSize,
|
<ul class="list-unstyled ms-4">
|
||||||
currentPage: (paginationOptions$ | async).currentPage, totalItems: (objectsSelected$|async)?.payload?.page.length }; let i = index; let last = last '
|
@for (object of (objectsSelected$|async)?.payload?.page | paginate: { itemsPerPage: (paginationOptions$ | async).pageSize,
|
||||||
|
currentPage: (paginationOptions$ | async).currentPage, totalItems: (objectsSelected$|async)?.payload?.page.length }; track object; let i = $index; let last = $last) {
|
||||||
|
<li
|
||||||
class="mt-4 mb-4 d-flex"
|
class="mt-4 mb-4 d-flex"
|
||||||
[attr.data-test]="'list-object' | dsBrowserOnly">
|
[attr.data-test]="'list-object' | dsBrowserOnly">
|
||||||
<ds-selectable-list-item-control [index]="i"
|
<ds-selectable-list-item-control [index]="i"
|
||||||
@@ -50,7 +52,9 @@
|
|||||||
[showThumbnails]="false"
|
[showThumbnails]="false"
|
||||||
[viewMode]="'list'"></ds-listable-object-component-loader>
|
[viewMode]="'list'"></ds-listable-object-component-loader>
|
||||||
</li>
|
</li>
|
||||||
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
}
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</li>
|
</li>
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -59,11 +55,9 @@ import { BrowserOnlyPipe } from '../../../shared/utils/browser-only.pipe';
|
|||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgbAccordionModule,
|
NgbAccordionModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
NgbNavModule,
|
NgbNavModule,
|
||||||
ThemedSearchComponent,
|
ThemedSearchComponent,
|
||||||
BrowserOnlyPipe,
|
BrowserOnlyPipe,
|
||||||
NgForOf,
|
|
||||||
NgxPaginationModule,
|
NgxPaginationModule,
|
||||||
SelectableListItemControlComponent,
|
SelectableListItemControlComponent,
|
||||||
ListableObjectComponentLoaderComponent,
|
ListableObjectComponentLoaderComponent,
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgIf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
ViewChild,
|
ViewChild,
|
||||||
@@ -16,7 +16,6 @@ import { AccessControlFormContainerComponent } from '../../../shared/access-cont
|
|||||||
imports: [
|
imports: [
|
||||||
NgbAccordionModule,
|
NgbAccordionModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
AccessControlFormContainerComponent,
|
AccessControlFormContainerComponent,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -41,14 +41,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<ds-loading *ngIf="searching$ | async"></ds-loading>
|
@if (searching$ | async) {
|
||||||
|
<ds-loading></ds-loading>
|
||||||
|
}
|
||||||
|
@if ((pageInfoState$ | async)?.totalElements > 0 && (searching$ | async) !== true) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="(pageInfoState$ | async)?.totalElements > 0 && (searching$ | async) !== true"
|
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(pageInfoState$ | async)?.totalElements"
|
[collectionSize]="(pageInfoState$ | async)?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="epeople" class="table table-striped table-hover table-bordered">
|
<table id="epeople" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -60,7 +61,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let epersonDto of (ePeopleDto$ | async)?.page"
|
@for (epersonDto of (ePeopleDto$ | async)?.page; track epersonDto) {
|
||||||
|
<tr
|
||||||
[ngClass]="{'table-primary' : (activeEPerson$ | async) === epersonDto.eperson}">
|
[ngClass]="{'table-primary' : (activeEPerson$ | async) === epersonDto.eperson}">
|
||||||
<td>{{epersonDto.eperson.id}}</td>
|
<td>{{epersonDto.eperson.id}}</td>
|
||||||
<td>{{ dsoNameService.getName(epersonDto.eperson) }}</td>
|
<td>{{ dsoNameService.getName(epersonDto.eperson) }}</td>
|
||||||
@@ -72,23 +74,28 @@
|
|||||||
title="{{labelPrefix + 'table.edit.buttons.edit' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
|
title="{{labelPrefix + 'table.edit.buttons.edit' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
|
||||||
<i class="fas fa-edit fa-fw"></i>
|
<i class="fas fa-edit fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="epersonDto.ableToDelete" (click)="deleteEPerson(epersonDto.eperson)"
|
@if (epersonDto.ableToDelete) {
|
||||||
|
<button (click)="deleteEPerson(epersonDto.eperson)"
|
||||||
class="delete-button btn btn-outline-danger btn-sm access-control-deleteEPersonButton"
|
class="delete-button btn btn-outline-danger btn-sm access-control-deleteEPersonButton"
|
||||||
title="{{labelPrefix + 'table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
|
title="{{labelPrefix + 'table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
|
||||||
<i class="fas fa-trash-alt fa-fw"></i>
|
<i class="fas fa-trash-alt fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(pageInfoState$ | async)?.totalElements === 0" class="alert alert-info w-100 mb-2" role="alert">
|
@if ((pageInfoState$ | async)?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2" role="alert">
|
||||||
{{labelPrefix + 'no-items' | translate}}
|
{{labelPrefix + 'no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -72,13 +70,11 @@ import { EPersonFormComponent } from './eperson-form/eperson-form.component';
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
RouterModule,
|
RouterModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
EPersonFormComponent,
|
EPersonFormComponent,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -2,15 +2,13 @@
|
|||||||
<div class="group-form row">
|
<div class="group-form row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|
||||||
<div *ngIf="activeEPerson$ | async; then editHeader; else createHeader"></div>
|
@if (activeEPerson$ | async) {
|
||||||
|
|
||||||
<ng-template #createHeader>
|
|
||||||
<h1 class="border-bottom pb-2">{{messagePrefix + '.create' | translate}}</h1>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #editHeader>
|
|
||||||
<h1 class="border-bottom pb-2">{{messagePrefix + '.edit' | translate}}</h1>
|
<h1 class="border-bottom pb-2">{{messagePrefix + '.edit' | translate}}</h1>
|
||||||
</ng-template>
|
} @else {
|
||||||
|
<h1 class="border-bottom pb-2">{{messagePrefix + '.create' | translate}}</h1>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ds-form [formId]="formId"
|
<ds-form [formId]="formId"
|
||||||
[formModel]="formModel"
|
[formModel]="formModel"
|
||||||
@@ -24,39 +22,51 @@
|
|||||||
<i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}
|
<i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="displayResetPassword" between class="btn-group">
|
@if (displayResetPassword) {
|
||||||
|
<div between class="btn-group">
|
||||||
<button class="btn btn-primary" [dsBtnDisabled]="(canReset$ | async) !== true" type="button" (click)="resetPassword()">
|
<button class="btn btn-primary" [dsBtnDisabled]="(canReset$ | async) !== true" type="button" (click)="resetPassword()">
|
||||||
<i class="fa fa-key"></i> {{'admin.access-control.epeople.actions.reset' | translate}}
|
<i class="fa fa-key"></i> {{'admin.access-control.epeople.actions.reset' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="canImpersonate$ | async" between class="btn-group ms-1">
|
}
|
||||||
<button *ngIf="!isImpersonated" class="btn btn-primary" type="button" (click)="impersonate()">
|
@if (canImpersonate$ | async) {
|
||||||
|
<div between class="btn-group ms-1">
|
||||||
|
@if (!isImpersonated) {
|
||||||
|
<button class="btn btn-primary" type="button" (click)="impersonate()">
|
||||||
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}
|
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="isImpersonated" class="btn btn-primary" type="button" (click)="stopImpersonating()">
|
}
|
||||||
|
@if (isImpersonated) {
|
||||||
|
<button class="btn btn-primary" type="button" (click)="stopImpersonating()">
|
||||||
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.stop-impersonating' | translate}}
|
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.stop-impersonating' | translate}}
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<button *ngIf="canDelete$ | async" after class="btn btn-danger delete-button" type="button" (click)="delete()">
|
}
|
||||||
|
@if (canDelete$ | async) {
|
||||||
|
<button after class="btn btn-danger delete-button" type="button" (click)="delete()">
|
||||||
<i class="fas fa-trash"></i> {{'admin.access-control.epeople.actions.delete' | translate}}
|
<i class="fas fa-trash"></i> {{'admin.access-control.epeople.actions.delete' | translate}}
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</ds-form>
|
</ds-form>
|
||||||
|
|
||||||
<ds-loading [showMessage]="false" *ngIf="!formGroup"></ds-loading>
|
@if (!formGroup) {
|
||||||
|
<ds-loading [showMessage]="false"></ds-loading>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="activeEPerson$ | async">
|
@if (activeEPerson$ | async) {
|
||||||
|
<div>
|
||||||
<h2>{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}</h2>
|
<h2>{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}</h2>
|
||||||
|
@if (groups$ | async | dsHasNoValue) {
|
||||||
<ds-loading [showMessage]="false" *ngIf="groups$ | async | dsHasNoValue"></ds-loading>
|
<ds-loading [showMessage]="false"></ds-loading>
|
||||||
|
}
|
||||||
|
@if ((groups$ | async)?.payload?.totalElements > 0) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="(groups$ | async)?.payload?.totalElements > 0"
|
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(groups$ | async)?.payload?.totalElements"
|
[collectionSize]="(groups$ | async)?.payload?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true"
|
[hidePagerWhenSinglePage]="true"
|
||||||
(pageChange)="onPageChange($event)">
|
(pageChange)="onPageChange($event)">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="groups" class="table table-striped table-hover table-bordered">
|
<table id="groups" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -67,7 +77,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let group of (groups$ | async)?.payload?.page">
|
@for (group of (groups$ | async)?.payload?.page; track group) {
|
||||||
|
<tr>
|
||||||
<td class="align-middle">{{group.id}}</td>
|
<td class="align-middle">{{group.id}}</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a (click)="groupsDataService.startEditingNewGroup(group)"
|
<a (click)="groupsDataService.startEditingNewGroup(group)"
|
||||||
@@ -79,20 +90,23 @@
|
|||||||
{{ dsoNameService.getName((group.object | async)?.payload) }}
|
{{ dsoNameService.getName((group.object | async)?.payload) }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
<div *ngIf="(groups$ | async)?.payload?.totalElements === 0" class="alert alert-info w-100 mb-2" role="alert">
|
@if ((groups$ | async)?.payload?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2" role="alert">
|
||||||
<div>{{messagePrefix + '.memberOfNoGroups' | translate}}</div>
|
<div>{{messagePrefix + '.memberOfNoGroups' | translate}}</div>
|
||||||
<div>
|
<div>
|
||||||
<button [routerLink]="[groupsDataService.getGroupRegistryRouterLink()]"
|
<button [routerLink]="[groupsDataService.getGroupRegistryRouterLink()]"
|
||||||
class="btn btn-primary">{{messagePrefix + '.goToGroups' | translate}}</button>
|
class="btn btn-primary">{{messagePrefix + '.goToGroups' | translate}}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
@@ -84,8 +82,6 @@ import { ValidateEmailNotTaken } from './validators/email-taken.validator';
|
|||||||
templateUrl: './eperson-form.component.html',
|
templateUrl: './eperson-form.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
FormComponent,
|
FormComponent,
|
||||||
NgIf,
|
|
||||||
NgFor,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgClass,
|
NgClass,
|
||||||
|
@@ -2,13 +2,7 @@
|
|||||||
<div class="group-form row">
|
<div class="group-form row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|
||||||
<div *ngIf="activeGroup$ | async; then editHeader; else createHeader"></div>
|
@if (activeGroup$ | async) {
|
||||||
|
|
||||||
<ng-template #createHeader>
|
|
||||||
<h1 class="border-bottom pb-2">{{messagePrefix + '.head.create' | translate}}</h1>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #editHeader>
|
|
||||||
<h1 class="border-bottom pb-2">
|
<h1 class="border-bottom pb-2">
|
||||||
<span
|
<span
|
||||||
*dsContextHelp="{
|
*dsContextHelp="{
|
||||||
@@ -21,17 +15,25 @@
|
|||||||
{{messagePrefix + '.head.edit' | translate}}
|
{{messagePrefix + '.head.edit' | translate}}
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
</ng-template>
|
} @else {
|
||||||
|
<h1 class="border-bottom pb-2">{{messagePrefix + '.head.create' | translate}}</h1>
|
||||||
|
}
|
||||||
|
|
||||||
<ng-container *ngIf="(activeGroup$ | async) as groupBeingEdited">
|
|
||||||
<ds-alert *ngIf="groupBeingEdited?.permanent" [type]="AlertType.Warning"
|
|
||||||
|
@if ((activeGroup$ | async); as groupBeingEdited) {
|
||||||
|
@if (groupBeingEdited?.permanent) {
|
||||||
|
<ds-alert [type]="AlertType.Warning"
|
||||||
[content]="messagePrefix + '.alert.permanent'"></ds-alert>
|
[content]="messagePrefix + '.alert.permanent'"></ds-alert>
|
||||||
<ng-container *ngIf="(activeGroupLinkedDSO$ | async) as activeGroupLinkedDSO">
|
}
|
||||||
<ds-alert *ngIf="(canEdit$ | async) !== true" [type]="AlertType.Warning"
|
@if ((activeGroupLinkedDSO$ | async); as activeGroupLinkedDSO) {
|
||||||
|
@if ((canEdit$ | async) !== true) {
|
||||||
|
<ds-alert [type]="AlertType.Warning"
|
||||||
[content]="(messagePrefix + '.alert.workflowGroup' | translate:{ name: dsoNameService.getName(activeGroupLinkedDSO), comcol: activeGroupLinkedDSO.type, comcolEditRolesRoute: (linkedEditRolesRoute$ | async) })">
|
[content]="(messagePrefix + '.alert.workflowGroup' | translate:{ name: dsoNameService.getName(activeGroupLinkedDSO), comcol: activeGroupLinkedDSO.type, comcolEditRolesRoute: (linkedEditRolesRoute$ | async) })">
|
||||||
</ds-alert>
|
</ds-alert>
|
||||||
</ng-container>
|
}
|
||||||
</ng-container>
|
}
|
||||||
|
}
|
||||||
|
|
||||||
<ds-form [formId]="formId"
|
<ds-form [formId]="formId"
|
||||||
[formModel]="formModel"
|
[formModel]="formModel"
|
||||||
@@ -43,21 +45,27 @@
|
|||||||
<button (click)="onCancel()" type="button"
|
<button (click)="onCancel()" type="button"
|
||||||
class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}</button>
|
class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}</button>
|
||||||
</div>
|
</div>
|
||||||
<div after *ngIf="(canEdit$ | async) && !(activeGroup$ | async)?.permanent" class="btn-group">
|
@if ((canEdit$ | async) && !(activeGroup$ | async)?.permanent) {
|
||||||
|
<div after class="btn-group">
|
||||||
<button (click)="delete()" class="btn btn-danger delete-button" type="button">
|
<button (click)="delete()" class="btn btn-danger delete-button" type="button">
|
||||||
<i class="fa fa-trash"></i> {{ messagePrefix + '.actions.delete' | translate}}
|
<i class="fa fa-trash"></i> {{ messagePrefix + '.actions.delete' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</ds-form>
|
</ds-form>
|
||||||
|
|
||||||
<ng-container *ngIf="(activeGroup$ | async) as groupBeingEdited">
|
@if ((activeGroup$ | async); as groupBeingEdited) {
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<ds-members-list *ngIf="groupBeingEdited !== undefined"
|
@if (groupBeingEdited !== undefined) {
|
||||||
|
<ds-members-list
|
||||||
[messagePrefix]="messagePrefix + '.members-list'"></ds-members-list>
|
[messagePrefix]="messagePrefix + '.members-list'"></ds-members-list>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<ds-subgroups-list *ngIf="groupBeingEdited !== undefined"
|
@if (groupBeingEdited !== undefined) {
|
||||||
|
<ds-subgroups-list
|
||||||
[messagePrefix]="messagePrefix + '.subgroups-list'"></ds-subgroups-list>
|
[messagePrefix]="messagePrefix + '.subgroups-list'"></ds-subgroups-list>
|
||||||
</ng-container>
|
}
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component,
|
Component,
|
||||||
@@ -92,7 +89,6 @@ import { ValidateGroupExists } from './validators/group-exists.validator';
|
|||||||
imports: [
|
imports: [
|
||||||
FormComponent,
|
FormComponent,
|
||||||
AlertComponent,
|
AlertComponent,
|
||||||
NgIf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ContextHelpDirective,
|
ContextHelpDirective,
|
||||||
|
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
<h3>{{messagePrefix + '.headMembers' | translate}}</h3>
|
<h3>{{messagePrefix + '.headMembers' | translate}}</h3>
|
||||||
|
|
||||||
<ds-pagination *ngIf="(ePeopleMembersOfGroup | async)?.totalElements > 0"
|
@if ((ePeopleMembersOfGroup | async)?.totalElements > 0) {
|
||||||
|
<ds-pagination
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(ePeopleMembersOfGroup | async)?.totalElements"
|
[collectionSize]="(ePeopleMembersOfGroup | async)?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="ePeopleMembersOfGroup" class="table table-striped table-hover table-bordered">
|
<table id="ePeopleMembersOfGroup" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -20,7 +20,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let epersonDTO of (ePeopleMembersOfGroup | async)?.page">
|
@for (epersonDTO of (ePeopleMembersOfGroup | async)?.page; track epersonDTO) {
|
||||||
|
<tr>
|
||||||
<td class="align-middle">{{epersonDTO.eperson.id}}</td>
|
<td class="align-middle">{{epersonDTO.eperson.id}}</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a [routerLink]="getEPersonEditRoute(epersonDTO.eperson.id)">
|
<a [routerLink]="getEPersonEditRoute(epersonDTO.eperson.id)">
|
||||||
@@ -33,33 +34,39 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<div class="btn-group edit-field">
|
<div class="btn-group edit-field">
|
||||||
|
@if (epersonDTO.ableToDelete) {
|
||||||
<button (click)="deleteMemberFromGroup(epersonDTO.eperson)"
|
<button (click)="deleteMemberFromGroup(epersonDTO.eperson)"
|
||||||
*ngIf="epersonDTO.ableToDelete"
|
|
||||||
[dsBtnDisabled]="actionConfig.remove.disabled"
|
[dsBtnDisabled]="actionConfig.remove.disabled"
|
||||||
[ngClass]="['btn btn-sm', actionConfig.remove.css]"
|
[ngClass]="['btn btn-sm', actionConfig.remove.css]"
|
||||||
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDTO.eperson) } }}">
|
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDTO.eperson) } }}">
|
||||||
<i [ngClass]="actionConfig.remove.icon"></i>
|
<i [ngClass]="actionConfig.remove.icon"></i>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="!epersonDTO.ableToDelete"
|
}
|
||||||
|
@if (!epersonDTO.ableToDelete) {
|
||||||
|
<button
|
||||||
(click)="addMemberToGroup(epersonDTO.eperson)"
|
(click)="addMemberToGroup(epersonDTO.eperson)"
|
||||||
[dsBtnDisabled]="actionConfig.add.disabled"
|
[dsBtnDisabled]="actionConfig.add.disabled"
|
||||||
[ngClass]="['btn btn-sm', actionConfig.add.css]"
|
[ngClass]="['btn btn-sm', actionConfig.add.css]"
|
||||||
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(epersonDTO.eperson) } }}">
|
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(epersonDTO.eperson) } }}">
|
||||||
<i [ngClass]="actionConfig.add.icon"></i>
|
<i [ngClass]="actionConfig.add.icon"></i>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(ePeopleMembersOfGroup | async) === undefined || (ePeopleMembersOfGroup | async)?.totalElements === 0" class="alert alert-info w-100 mb-2"
|
@if ((ePeopleMembersOfGroup | async) === undefined || (ePeopleMembersOfGroup | async)?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
{{messagePrefix + '.no-members-yet' | translate}}
|
{{messagePrefix + '.no-members-yet' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<h3 id="search" class="border-bottom pb-2">
|
<h3 id="search" class="border-bottom pb-2">
|
||||||
<span
|
<span
|
||||||
@@ -91,12 +98,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<ds-pagination *ngIf="(ePeopleSearch | async)?.totalElements > 0"
|
@if ((ePeopleSearch | async)?.totalElements > 0) {
|
||||||
|
<ds-pagination
|
||||||
[paginationOptions]="configSearch"
|
[paginationOptions]="configSearch"
|
||||||
[collectionSize]="(ePeopleSearch | async)?.totalElements"
|
[collectionSize]="(ePeopleSearch | async)?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="epersonsSearch" class="table table-striped table-hover table-bordered">
|
<table id="epersonsSearch" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -108,7 +115,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let eperson of (ePeopleSearch | async)?.page">
|
@for (eperson of (ePeopleSearch | async)?.page; track eperson) {
|
||||||
|
<tr>
|
||||||
<td class="align-middle">{{eperson.id}}</td>
|
<td class="align-middle">{{eperson.id}}</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a [routerLink]="getEPersonEditRoute(eperson.id)">
|
<a [routerLink]="getEPersonEditRoute(eperson.id)">
|
||||||
@@ -130,16 +138,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(ePeopleSearch | async)?.totalElements === 0 && searchDone"
|
@if ((ePeopleSearch | async)?.totalElements === 0 && searchDone) {
|
||||||
|
<div
|
||||||
class="alert alert-info w-100 mb-2"
|
class="alert alert-info w-100 mb-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
{{messagePrefix + '.no-items' | translate}}
|
{{messagePrefix + '.no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -109,11 +107,9 @@ export interface EPersonListActionConfig {
|
|||||||
ContextHelpDirective,
|
ContextHelpDirective,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgIf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
RouterLink,
|
RouterLink,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
BtnDisabledDirective,
|
BtnDisabledDirective,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
<h4>{{messagePrefix + '.headSubgroups' | translate}}</h4>
|
<h4>{{messagePrefix + '.headSubgroups' | translate}}</h4>
|
||||||
|
|
||||||
<ds-pagination *ngIf="(subGroups$ | async)?.payload?.totalElements > 0"
|
@if ((subGroups$ | async)?.payload?.totalElements > 0) {
|
||||||
|
<ds-pagination
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(subGroups$ | async)?.payload?.totalElements"
|
[collectionSize]="(subGroups$ | async)?.payload?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="subgroupsOfGroup" class="table table-striped table-hover table-bordered">
|
<table id="subgroupsOfGroup" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -20,7 +20,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let group of (subGroups$ | async)?.payload?.page">
|
@for (group of (subGroups$ | async)?.payload?.page; track group) {
|
||||||
|
<tr>
|
||||||
<td class="align-middle">{{group.id}}</td>
|
<td class="align-middle">{{group.id}}</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a (click)="groupDataService.startEditingNewGroup(group)"
|
<a (click)="groupDataService.startEditingNewGroup(group)"
|
||||||
@@ -39,15 +40,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(subGroups$ | async)?.payload?.totalElements === 0" class="alert alert-info w-100 mb-2"
|
@if ((subGroups$ | async)?.payload?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
{{messagePrefix + '.no-subgroups-yet' | translate}}
|
{{messagePrefix + '.no-subgroups-yet' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<h4 id="search" class="border-bottom pb-2">
|
<h4 id="search" class="border-bottom pb-2">
|
||||||
<span *dsContextHelp="{
|
<span *dsContextHelp="{
|
||||||
@@ -81,12 +86,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<ds-pagination *ngIf="(searchResults$ | async)?.payload?.totalElements > 0"
|
@if ((searchResults$ | async)?.payload?.totalElements > 0) {
|
||||||
|
<ds-pagination
|
||||||
[paginationOptions]="configSearch"
|
[paginationOptions]="configSearch"
|
||||||
[collectionSize]="(searchResults$ | async)?.payload?.totalElements"
|
[collectionSize]="(searchResults$ | async)?.payload?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="groupsSearch" class="table table-striped table-hover table-bordered">
|
<table id="groupsSearch" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -98,7 +103,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let group of (searchResults$ | async)?.payload?.page">
|
@for (group of (searchResults$ | async)?.payload?.page; track group) {
|
||||||
|
<tr>
|
||||||
<td class="align-middle">{{group.id}}</td>
|
<td class="align-middle">{{group.id}}</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a (click)="groupDataService.startEditingNewGroup(group)"
|
<a (click)="groupDataService.startEditingNewGroup(group)"
|
||||||
@@ -117,14 +123,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(searchResults$ | async)?.payload?.totalElements === 0 && searchDone" class="alert alert-info w-100 mb-2"
|
@if ((searchResults$ | async)?.payload?.totalElements === 0 && searchDone) {
|
||||||
|
<div class="alert alert-info w-100 mb-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
{{messagePrefix + '.no-items' | translate}}
|
{{messagePrefix + '.no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -65,12 +61,10 @@ enum SubKey {
|
|||||||
imports: [
|
imports: [
|
||||||
RouterLink,
|
RouterLink,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgForOf,
|
|
||||||
ContextHelpDirective,
|
ContextHelpDirective,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgIf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -33,14 +33,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<ds-loading *ngIf="loading$ | async"></ds-loading>
|
@if (loading$ | async) {
|
||||||
|
<ds-loading></ds-loading>
|
||||||
|
}
|
||||||
|
@if ((pageInfoState$ | async)?.totalElements > 0 && (loading$ | async) !== true) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="(pageInfoState$ | async)?.totalElements > 0 && (loading$ | async) !== true"
|
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(pageInfoState$ | async)?.totalElements"
|
[collectionSize]="(pageInfoState$ | async)?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="groups" class="table table-striped table-hover table-bordered">
|
<table id="groups" class="table table-striped table-hover table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -53,22 +54,26 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let groupDto of (groupsDto$ | async)?.page">
|
@for (groupDto of (groupsDto$ | async)?.page; track groupDto) {
|
||||||
|
<tr>
|
||||||
<td>{{groupDto.group.id}}</td>
|
<td>{{groupDto.group.id}}</td>
|
||||||
<td>{{ dsoNameService.getName(groupDto.group) }}</td>
|
<td>{{ dsoNameService.getName(groupDto.group) }}</td>
|
||||||
<td>{{ dsoNameService.getName((groupDto.group.object | async)?.payload) }}</td>
|
<td>{{ dsoNameService.getName((groupDto.group.object | async)?.payload) }}</td>
|
||||||
<td>{{groupDto.epersons?.totalElements + groupDto.subgroups?.totalElements}}</td>
|
<td>{{groupDto.epersons?.totalElements + groupDto.subgroups?.totalElements}}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="btn-group edit-field">
|
<div class="btn-group edit-field">
|
||||||
<ng-container [ngSwitch]="groupDto.ableToEdit">
|
@switch (groupDto.ableToEdit) {
|
||||||
<button *ngSwitchCase="true"
|
@case (true) {
|
||||||
|
<button
|
||||||
[routerLink]="groupService.getGroupEditPageRouterLink(groupDto.group)"
|
[routerLink]="groupService.getGroupEditPageRouterLink(groupDto.group)"
|
||||||
class="btn btn-outline-primary btn-sm btn-edit"
|
class="btn btn-outline-primary btn-sm btn-edit"
|
||||||
title="{{messagePrefix + 'table.edit.buttons.edit' | translate: {name: dsoNameService.getName(groupDto.group) } }}"
|
title="{{messagePrefix + 'table.edit.buttons.edit' | translate: {name: dsoNameService.getName(groupDto.group) } }}"
|
||||||
>
|
>
|
||||||
<i class="fas fa-edit fa-fw"></i>
|
<i class="fas fa-edit fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
<button *ngSwitchCase="false"
|
}
|
||||||
|
@case (false) {
|
||||||
|
<button
|
||||||
[dsBtnDisabled]="true"
|
[dsBtnDisabled]="true"
|
||||||
class="btn btn-outline-primary btn-sm btn-edit"
|
class="btn btn-outline-primary btn-sm btn-edit"
|
||||||
placement="left"
|
placement="left"
|
||||||
@@ -76,23 +81,30 @@
|
|||||||
>
|
>
|
||||||
<i class="fas fa-edit fa-fw"></i>
|
<i class="fas fa-edit fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
</ng-container>
|
}
|
||||||
<button *ngIf="!groupDto.group?.permanent && groupDto.ableToDelete"
|
}
|
||||||
|
@if (!groupDto.group?.permanent && groupDto.ableToDelete) {
|
||||||
|
<button
|
||||||
(click)="deleteGroup(groupDto)" class="btn btn-outline-danger btn-sm btn-delete"
|
(click)="deleteGroup(groupDto)" class="btn btn-outline-danger btn-sm btn-delete"
|
||||||
title="{{messagePrefix + 'table.edit.buttons.remove' | translate: {name: dsoNameService.getName(groupDto.group) } }}">
|
title="{{messagePrefix + 'table.edit.buttons.remove' | translate: {name: dsoNameService.getName(groupDto.group) } }}">
|
||||||
<i class="fas fa-trash-alt fa-fw"></i>
|
<i class="fas fa-trash-alt fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(pageInfoState$ | async)?.totalElements === 0" class="alert alert-info w-100 mb-2" role="alert">
|
@if ((pageInfoState$ | async)?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2" role="alert">
|
||||||
{{messagePrefix + 'no-items' | translate}}
|
{{messagePrefix + 'no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,10 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
NgSwitch,
|
|
||||||
NgSwitchCase,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
@@ -79,12 +73,8 @@ import { followLink } from '../../shared/utils/follow-link-config.model';
|
|||||||
RouterLink,
|
RouterLink,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgSwitch,
|
|
||||||
NgSwitchCase,
|
|
||||||
NgbTooltipModule,
|
NgbTooltipModule,
|
||||||
NgForOf,
|
|
||||||
BtnDisabledDirective,
|
BtnDisabledDirective,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 id="header">{{'admin.batch-import.page.header' | translate}}</h1>
|
<h1 id="header">{{'admin.batch-import.page.header' | translate}}</h1>
|
||||||
<p>{{'admin.batch-import.page.help' | translate}}</p>
|
<p>{{'admin.batch-import.page.help' | translate}}</p>
|
||||||
<p *ngIf="dso">
|
@if (dso) {
|
||||||
|
<p>
|
||||||
selected collection: <b>{{getDspaceObjectName()}}</b>
|
selected collection: <b>{{getDspaceObjectName()}}</b>
|
||||||
<a href="javascript:void(0)" (click)="removeDspaceObject()">{{'admin.batch-import.page.remove' | translate}}</a>
|
<a href="javascript:void(0)" (click)="removeDspaceObject()">{{'admin.batch-import.page.remove' | translate}}</a>
|
||||||
</p>
|
</p>
|
||||||
|
}
|
||||||
<p>
|
<p>
|
||||||
<button class="btn btn-primary" (click)="this.selectCollection();">{{'admin.metadata-import.page.button.select-collection' | translate}}</button>
|
<button class="btn btn-primary" (click)="this.selectCollection();">{{'admin.metadata-import.page.button.select-collection' | translate}}</button>
|
||||||
</p>
|
</p>
|
||||||
@@ -30,18 +32,21 @@
|
|||||||
</small>
|
</small>
|
||||||
|
|
||||||
|
|
||||||
|
@if (isUpload) {
|
||||||
<ds-file-dropzone-no-uploader
|
<ds-file-dropzone-no-uploader
|
||||||
*ngIf="isUpload"
|
|
||||||
data-test="file-dropzone"
|
data-test="file-dropzone"
|
||||||
(onFileAdded)="setFile($event)"
|
(onFileAdded)="setFile($event)"
|
||||||
[dropMessageLabel]="'admin.batch-import.page.dropMsg'"
|
[dropMessageLabel]="'admin.batch-import.page.dropMsg'"
|
||||||
[dropMessageLabelReplacement]="'admin.batch-import.page.dropMsgReplace'">
|
[dropMessageLabelReplacement]="'admin.batch-import.page.dropMsgReplace'">
|
||||||
</ds-file-dropzone-no-uploader>
|
</ds-file-dropzone-no-uploader>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="mb-3 mt-2" *ngIf="!isUpload">
|
@if (!isUpload) {
|
||||||
|
<div class="mb-3 mt-2">
|
||||||
<input class="form-control" type="text" placeholder="{{'admin.metadata-import.page.urlMsg' | translate}}"
|
<input class="form-control" type="text" placeholder="{{'admin.metadata-import.page.urlMsg' | translate}}"
|
||||||
data-test="file-url-input" [(ngModel)]="fileURL">
|
data-test="file-url-input" [(ngModel)]="fileURL">
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="space-children-mr">
|
<div class="space-children-mr">
|
||||||
<button class="btn btn-secondary" id="backButton"
|
<button class="btn btn-secondary" id="backButton"
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { Location } from '@angular/common';
|
||||||
Location,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
@@ -36,7 +33,6 @@ import { FileDropzoneNoUploaderComponent } from '../../shared/upload/file-dropzo
|
|||||||
selector: 'ds-batch-import-page',
|
selector: 'ds-batch-import-page',
|
||||||
templateUrl: './batch-import-page.component.html',
|
templateUrl: './batch-import-page.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
NgIf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
UiSwitchModule,
|
UiSwitchModule,
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
<h1 class="flex-grow-1">{{ isNewService ? ('ldn-create-service.title' | translate) : ('ldn-edit-registered-service.title' | translate) }}</h1>
|
<h1 class="flex-grow-1">{{ isNewService ? ('ldn-create-service.title' | translate) : ('ldn-edit-registered-service.title' | translate) }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<!-- In the toggle section -->
|
<!-- In the toggle section -->
|
||||||
<div class="toggle-switch-container" *ngIf="!isNewService">
|
@if (!isNewService) {
|
||||||
|
<div class="toggle-switch-container">
|
||||||
<label class="status-label font-weight-bold" for="enabled">{{ 'ldn-service-status' | translate }}</label>
|
<label class="status-label font-weight-bold" for="enabled">{{ 'ldn-service-status' | translate }}</label>
|
||||||
<div>
|
<div>
|
||||||
<input formControlName="enabled" hidden id="enabled" name="enabled" type="checkbox">
|
<input formControlName="enabled" hidden id="enabled" name="enabled" type="checkbox">
|
||||||
@@ -13,6 +14,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
<!-- In the Name section -->
|
<!-- In the Name section -->
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<label for="name" class="font-weight-bold">{{ 'ldn-new-service.form.label.name' | translate }}</label>
|
<label for="name" class="font-weight-bold">{{ 'ldn-new-service.form.label.name' | translate }}</label>
|
||||||
@@ -22,9 +24,11 @@
|
|||||||
id="name"
|
id="name"
|
||||||
name="name"
|
name="name"
|
||||||
type="text">
|
type="text">
|
||||||
<div *ngIf="formModel.get('name').invalid && formModel.get('name').touched" class="error-text">
|
@if (formModel.get('name').invalid && formModel.get('name').touched) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.name' | translate }}
|
{{ 'ldn-new-service.form.error.name' | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- In the description section -->
|
<!-- In the description section -->
|
||||||
@@ -45,9 +49,11 @@
|
|||||||
id="url"
|
id="url"
|
||||||
name="url"
|
name="url"
|
||||||
type="text">
|
type="text">
|
||||||
<div *ngIf="formModel.get('url').invalid && formModel.get('url').touched" class="error-text">
|
@if (formModel.get('url').invalid && formModel.get('url').touched) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.url' | translate }}
|
{{ 'ldn-new-service.form.error.url' | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex flex-column w-50">
|
<div class="d-flex flex-column w-50">
|
||||||
@@ -61,9 +67,11 @@
|
|||||||
step=".01"
|
step=".01"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="number">
|
type="number">
|
||||||
<div *ngIf="formModel.get('score').invalid && formModel.get('score').touched" class="error-text">
|
@if (formModel.get('score').invalid && formModel.get('score').touched) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.score' | translate }}
|
{{ 'ldn-new-service.form.error.score' | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -85,9 +93,11 @@
|
|||||||
name="upperIp"
|
name="upperIp"
|
||||||
type="text">
|
type="text">
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="(formModel.get('lowerIp').invalid && formModel.get('lowerIp').touched) || (formModel.get('upperIp').invalid && formModel.get('upperIp').touched)" class="error-text">
|
@if ((formModel.get('lowerIp').invalid && formModel.get('lowerIp').touched) || (formModel.get('upperIp').invalid && formModel.get('upperIp').touched)) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.ipRange' | translate }}
|
{{ 'ldn-new-service.form.error.ipRange' | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
<div class="text-muted">
|
<div class="text-muted">
|
||||||
{{ 'ldn-new-service.form.hint.ipRange' | translate }}
|
{{ 'ldn-new-service.form.hint.ipRange' | translate }}
|
||||||
</div>
|
</div>
|
||||||
@@ -102,43 +112,50 @@
|
|||||||
id="ldnUrl"
|
id="ldnUrl"
|
||||||
name="ldnUrl"
|
name="ldnUrl"
|
||||||
type="text">
|
type="text">
|
||||||
<div *ngIf="formModel.get('ldnUrl').invalid && formModel.get('ldnUrl').touched" >
|
@if (formModel.get('ldnUrl').invalid && formModel.get('ldnUrl').touched) {
|
||||||
<div *ngIf="formModel.get('ldnUrl').errors['required']" class="error-text">
|
<div >
|
||||||
|
@if (formModel.get('ldnUrl').errors['required']) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.ldnurl' | translate }}
|
{{ 'ldn-new-service.form.error.ldnurl' | translate }}
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="formModel.get('ldnUrl').errors['ldnUrlAlreadyAssociated']" class="error-text">
|
}
|
||||||
|
@if (formModel.get('ldnUrl').errors['ldnUrlAlreadyAssociated']) {
|
||||||
|
<div class="error-text">
|
||||||
{{ 'ldn-new-service.form.error.ldnurl.ldnUrlAlreadyAssociated' | translate }}
|
{{ 'ldn-new-service.form.error.ldnurl.ldnUrlAlreadyAssociated' | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- In the Inbound Patterns Labels section -->
|
<!-- In the Inbound Patterns Labels section -->
|
||||||
<div class="row mb-1 mt-5" *ngIf="areControlsInitialized">
|
@if (areControlsInitialized) {
|
||||||
|
<div class="row mb-1 mt-5">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.inboundPattern' | translate }} </label>
|
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.inboundPattern' | translate }} </label>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="formModel.get('notifyServiceInboundPatterns')['controls'][0]?.value?.pattern">
|
@if (formModel.get('notifyServiceInboundPatterns')['controls'][0]?.value?.pattern) {
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.ItemFilter' | translate }}</label>
|
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.ItemFilter' | translate }}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-1">
|
<div class="col-sm-1">
|
||||||
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.automatic' | translate }}</label>
|
<label class="font-weight-bold">{{ 'ldn-new-service.form.label.automatic' | translate }}</label>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
}
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<!-- In the Inbound Patterns section -->
|
<!-- In the Inbound Patterns section -->
|
||||||
<div *ngIf="areControlsInitialized">
|
@if (areControlsInitialized) {
|
||||||
<div *ngFor="let patternGroup of formModel.get('notifyServiceInboundPatterns')['controls']; let i = index"
|
<div>
|
||||||
|
@for (patternGroup of formModel.get('notifyServiceInboundPatterns')['controls']; track patternGroup; let i = $index) {
|
||||||
|
<div
|
||||||
[class.marked-for-deletion]="markedForDeletionInboundPattern.includes(i)"
|
[class.marked-for-deletion]="markedForDeletionInboundPattern.includes(i)"
|
||||||
formGroupName="notifyServiceInboundPatterns">
|
formGroupName="notifyServiceInboundPatterns">
|
||||||
|
|
||||||
<ng-container [formGroupName]="i">
|
<ng-container [formGroupName]="i">
|
||||||
|
|
||||||
|
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div #inboundPatternDropdown="ngbDropdown" class="w-80" display="dynamic"
|
<div #inboundPatternDropdown="ngbDropdown" class="w-80" display="dynamic"
|
||||||
@@ -162,23 +179,22 @@
|
|||||||
class="dropdown-menu dropdown-menu-top w-100 "
|
class="dropdown-menu dropdown-menu-top w-100 "
|
||||||
ngbDropdownMenu>
|
ngbDropdownMenu>
|
||||||
<div class="scrollable-menu" role="listbox">
|
<div class="scrollable-menu" role="listbox">
|
||||||
|
@for (pattern of inboundPatterns; track pattern; let internalIndex = $index) {
|
||||||
<button (click)="selectInboundPattern(pattern, i); $event.stopPropagation()"
|
<button (click)="selectInboundPattern(pattern, i); $event.stopPropagation()"
|
||||||
*ngFor="let pattern of inboundPatterns; let internalIndex = index"
|
|
||||||
[title]="'ldn-service.form.pattern.' + pattern + '.description' | translate"
|
[title]="'ldn-service.form.pattern.' + pattern + '.description' | translate"
|
||||||
class="dropdown-item collection-item text-truncate w-100"
|
class="dropdown-item collection-item text-truncate w-100"
|
||||||
ngbDropdownItem
|
ngbDropdownItem
|
||||||
type="button">
|
type="button">
|
||||||
<div>{{ 'ldn-service.form.pattern.' + pattern + '.label' | translate }}</div>
|
<div>{{ 'ldn-service.form.pattern.' + pattern + '.label' | translate }}</div>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<ng-container
|
@if (formModel.get('notifyServiceInboundPatterns')['controls'][i].value.pattern) {
|
||||||
*ngIf="formModel.get('notifyServiceInboundPatterns')['controls'][i].value.pattern">
|
|
||||||
<div #inboundItemfilterDropdown="ngbDropdown" class="w-100" id="constraint{{i}}" ngbDropdown
|
<div #inboundItemfilterDropdown="ngbDropdown" class="w-100" id="constraint{{i}}" ngbDropdown
|
||||||
placement="top-start">
|
placement="top-start">
|
||||||
<div class="position-relative right-addon" aria-expanded="false" aria-controls="inboundItemfilterDropdown" role="combobox">
|
<div class="position-relative right-addon" aria-expanded="false" aria-controls="inboundItemfilterDropdown" role="combobox">
|
||||||
@@ -211,20 +227,20 @@
|
|||||||
class="dropdown-item collection-item text-truncate w-100" ngbDropdownItem type="button">
|
class="dropdown-item collection-item text-truncate w-100" ngbDropdownItem type="button">
|
||||||
<span> {{'ldn-service.control-constaint-select-none' | translate}} </span>
|
<span> {{'ldn-service.control-constaint-select-none' | translate}} </span>
|
||||||
</button>
|
</button>
|
||||||
|
@for (constraint of (itemFiltersRD$ | async)?.payload?.page; track constraint; let internalIndex = $index) {
|
||||||
<button (click)="selectInboundItemFilter(constraint.id, i); $event.stopPropagation()"
|
<button (click)="selectInboundItemFilter(constraint.id, i); $event.stopPropagation()"
|
||||||
*ngFor="let constraint of (itemFiltersRD$ | async)?.payload?.page; let internalIndex = index"
|
|
||||||
class="dropdown-item collection-item text-truncate w-100"
|
class="dropdown-item collection-item text-truncate w-100"
|
||||||
ngbDropdownItem
|
ngbDropdownItem
|
||||||
type="button">
|
type="button">
|
||||||
<div>{{ constraint.id + '.label' | translate }}</div>
|
<div>{{ constraint.id + '.label' | translate }}</div>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
[style.visibility]="formModel.get('notifyServiceInboundPatterns')['controls'][i].value.pattern ? 'visible' : 'hidden'"
|
[style.visibility]="formModel.get('notifyServiceInboundPatterns')['controls'][i].value.pattern ? 'visible' : 'hidden'"
|
||||||
class="col-sm-1">
|
class="col-sm-1">
|
||||||
@@ -236,8 +252,6 @@
|
|||||||
<div class="slider"></div>
|
<div class="slider"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button (click)="markForInboundPatternDeletion(i)" class="btn btn-outline-dark trash-button"
|
<button (click)="markForInboundPatternDeletion(i)" class="btn btn-outline-dark trash-button"
|
||||||
@@ -245,21 +259,22 @@
|
|||||||
type="button">
|
type="button">
|
||||||
<i class="fas fa-trash"></i>
|
<i class="fas fa-trash"></i>
|
||||||
</button>
|
</button>
|
||||||
|
@if (markedForDeletionInboundPattern.includes(i)) {
|
||||||
|
|
||||||
<button (click)="unmarkForInboundPatternDeletion(i)"
|
<button (click)="unmarkForInboundPatternDeletion(i)"
|
||||||
*ngIf="markedForDeletionInboundPattern.includes(i)"
|
|
||||||
[title]="'ldn-service-button-unmark-inbound-deletion' | translate"
|
[title]="'ldn-service-button-unmark-inbound-deletion' | translate"
|
||||||
class="btn btn-warning "
|
class="btn btn-warning "
|
||||||
type="button">
|
type="button">
|
||||||
<i class="fas fa-undo"></i>
|
<i class="fas fa-undo"></i>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<span (click)="addInboundPattern()"
|
<span (click)="addInboundPattern()"
|
||||||
class="add-pattern-link mb-2">{{ 'ldn-new-service.form.label.addPattern' | translate }}</span>
|
class="add-pattern-link mb-2">{{ 'ldn-new-service.form.label.addPattern' | translate }}</span>
|
||||||
@@ -280,8 +295,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<ng-template #confirmModal>
|
<ng-template #confirmModal>
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h4 *ngIf="!isNewService">{{'service.overview.edit.modal' | translate }}</h4>
|
@if (!isNewService) {
|
||||||
<h4 *ngIf="isNewService">{{'service.overview.create.modal' | translate }}</h4>
|
<h4>{{'service.overview.edit.modal' | translate }}</h4>
|
||||||
|
}
|
||||||
|
@if (isNewService) {
|
||||||
|
<h4>{{'service.overview.create.modal' | translate }}</h4>
|
||||||
|
}
|
||||||
<button (click)="closeModal()" aria-label="Close"
|
<button (click)="closeModal()" aria-label="Close"
|
||||||
class="close" type="button">
|
class="close" type="button">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
@@ -289,23 +308,32 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div *ngIf="!isNewService">
|
@if (!isNewService) {
|
||||||
|
<div>
|
||||||
{{ 'service.overview.edit.body' | translate }}
|
{{ 'service.overview.edit.body' | translate }}
|
||||||
</div>
|
</div>
|
||||||
<span *ngIf="isNewService">
|
}
|
||||||
|
@if (isNewService) {
|
||||||
|
<span>
|
||||||
{{ 'service.overview.create.body' | translate }}
|
{{ 'service.overview.create.body' | translate }}
|
||||||
</span>
|
</span>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<div *ngIf="!isNewService">
|
@if (!isNewService) {
|
||||||
|
<div>
|
||||||
<button (click)="closeModal()" class="btn btn-outline-secondary me-2"
|
<button (click)="closeModal()" class="btn btn-outline-secondary me-2"
|
||||||
id="delete-confirm-edit">{{ 'service.detail.return' | translate }}
|
id="delete-confirm-edit">{{ 'service.detail.return' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="!isNewService" (click)="patchService()"
|
@if (!isNewService) {
|
||||||
|
<button (click)="patchService()"
|
||||||
class="btn btn-primary">{{ 'service.detail.update' | translate }}
|
class="btn btn-primary">{{ 'service.detail.update' | translate }}
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="isNewService">
|
}
|
||||||
|
@if (isNewService) {
|
||||||
|
<div>
|
||||||
<button (click)="closeModal()" class="btn btn-outline-secondary me-2 "
|
<button (click)="closeModal()" class="btn btn-outline-secondary me-2 "
|
||||||
id="delete-confirm-new">{{ 'service.refuse.create' | translate }}
|
id="delete-confirm-new">{{ 'service.refuse.create' | translate }}
|
||||||
</button>
|
</button>
|
||||||
@@ -313,6 +341,7 @@
|
|||||||
class="btn btn-primary">{{ 'service.confirm.create' | translate }}
|
class="btn btn-primary">{{ 'service.confirm.create' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
|
@@ -5,11 +5,7 @@ import {
|
|||||||
transition,
|
transition,
|
||||||
trigger,
|
trigger,
|
||||||
} from '@angular/animations';
|
} from '@angular/animations';
|
||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component,
|
Component,
|
||||||
@@ -77,9 +73,7 @@ import { notifyPatterns } from '../ldn-services-patterns/ldn-service-coar-patter
|
|||||||
imports: [
|
imports: [
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
NgbDropdownModule,
|
NgbDropdownModule,
|
||||||
NgForOf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
@@ -6,7 +6,8 @@
|
|||||||
<button class="btn btn-success" routerLink="/admin/ldn/services/new"><i
|
<button class="btn btn-success" routerLink="/admin/ldn/services/new"><i
|
||||||
class="fas fa-plus pe-2"></i>{{ 'process.overview.new' | translate }}</button>
|
class="fas fa-plus pe-2"></i>{{ 'process.overview.new' | translate }}</button>
|
||||||
</div>
|
</div>
|
||||||
<ds-pagination *ngIf="(ldnServicesRD$ | async)?.payload?.totalElements > 0"
|
@if ((ldnServicesRD$ | async)?.payload?.totalElements > 0) {
|
||||||
|
<ds-pagination
|
||||||
[collectionSize]="(ldnServicesRD$ | async)?.payload?.totalElements"
|
[collectionSize]="(ldnServicesRD$ | async)?.payload?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true"
|
[hidePagerWhenSinglePage]="true"
|
||||||
@@ -22,7 +23,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let ldnService of (ldnServicesRD$ | async)?.payload?.page">
|
@for (ldnService of (ldnServicesRD$ | async)?.payload?.page; track ldnService) {
|
||||||
|
<tr>
|
||||||
<td class="col-3">{{ ldnService.name }}</td>
|
<td class="col-3">{{ ldnService.name }}</td>
|
||||||
<td>
|
<td>
|
||||||
<ds-truncatable [id]="ldnService.id">
|
<ds-truncatable [id]="ldnService.id">
|
||||||
@@ -57,10 +59,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-template #deleteModal>
|
<ng-template #deleteModal>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
@@ -54,8 +52,6 @@ import { LdnService } from '../ldn-services-model/ldn-services.model';
|
|||||||
styleUrls: ['./ldn-services-directory.component.scss'],
|
styleUrls: ['./ldn-services-directory.component.scss'],
|
||||||
changeDetection: ChangeDetectionStrategy.Default,
|
changeDetection: ChangeDetectionStrategy.Default,
|
||||||
imports: [
|
imports: [
|
||||||
NgIf,
|
|
||||||
NgFor,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
|
@@ -15,7 +15,9 @@
|
|||||||
<a class="nav-link" [routerLink]="'outbound'" [queryParams]="{view: 'table'}">{{'admin.notify.dashboard.outbound-logs' | translate}}</a>
|
<a class="nav-link" [routerLink]="'outbound'" [queryParams]="{view: 'table'}">{{'admin.notify.dashboard.outbound-logs' | translate}}</a>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="mt-2">
|
<div class="mt-2">
|
||||||
<ds-admin-notify-metrics *ngIf="(notifyMetricsRows$ | async)?.length" [boxesConfig]="notifyMetricsRows$ | async"></ds-admin-notify-metrics>
|
@if ((notifyMetricsRows$ | async)?.length) {
|
||||||
|
<ds-admin-notify-metrics [boxesConfig]="notifyMetricsRows$ | async"></ds-admin-notify-metrics>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Inject,
|
Inject,
|
||||||
@@ -46,7 +43,6 @@ import {
|
|||||||
imports: [
|
imports: [
|
||||||
AdminNotifyMetricsComponent,
|
AdminNotifyMetricsComponent,
|
||||||
RouterLink,
|
RouterLink,
|
||||||
NgIf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
],
|
],
|
||||||
|
@@ -5,12 +5,14 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body p-4">
|
<div class="modal-body p-4">
|
||||||
<div *ngFor="let key of notifyMessageKeys">
|
@for (key of notifyMessageKeys; track key) {
|
||||||
|
<div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="font-weight-bold col">{{ key + '.notify-detail-modal' | translate}}</div>
|
<div class="font-weight-bold col">{{ key + '.notify-detail-modal' | translate}}</div>
|
||||||
<div class="col text-right">{{'notify-detail-modal.' + notifyMessage[key] | translate: {default: notifyMessage[key] ?? "n/a" } }}</div>
|
<div class="col text-right">{{'notify-detail-modal.' + notifyMessage[key] | translate: {default: notifyMessage[key] ?? "n/a" } }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<button class="btn-primary" (click)="toggleCoarMessage()">
|
<button class="btn-primary" (click)="toggleCoarMessage()">
|
||||||
@@ -18,5 +20,7 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre @fadeIn [innerHTML]="notifyMessage.message" class="bg-secondary text-white mt-2 p-2" *ngIf="isCoarMessageVisible"></pre>
|
@if (isCoarMessageVisible) {
|
||||||
|
<pre @fadeIn [innerHTML]="notifyMessage.message" class="bg-secondary text-white mt-2 p-2"></pre>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -26,9 +23,7 @@ import { AdminNotifyMessage } from '../models/admin-notify-message.model';
|
|||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
NgForOf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
|
@@ -3,10 +3,12 @@
|
|||||||
<div class="col-12 col-md-3 text-left h4">{{((isInbound$ | async) ? 'admin.notify.dashboard.inbound' : 'admin.notify.dashboard.outbound') | translate}}</div>
|
<div class="col-12 col-md-3 text-left h4">{{((isInbound$ | async) ? 'admin.notify.dashboard.inbound' : 'admin.notify.dashboard.outbound') | translate}}</div>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="h4">
|
<div class="h4">
|
||||||
<button (click)="resetDefaultConfiguration()" *ngIf="(selectedSearchConfig$ | async) !== defaultConfiguration" class="badge bg-primary me-1 mb-1">
|
@if ((selectedSearchConfig$ | async) !== defaultConfiguration) {
|
||||||
|
<button (click)="resetDefaultConfiguration()" class="badge bg-primary me-1 mb-1">
|
||||||
{{ 'admin-notify-logs.' + (selectedSearchConfig$ | async) | translate}}
|
{{ 'admin-notify-logs.' + (selectedSearchConfig$ | async) | translate}}
|
||||||
<span> ×</span>
|
<span> ×</span>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<ds-search-labels [inPlaceSearch]="true"></ds-search-labels>
|
<ds-search-labels [inPlaceSearch]="true"></ds-search-labels>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Inject,
|
Inject,
|
||||||
@@ -39,7 +36,6 @@ import { ThemedSearchComponent } from '../../../../shared/search/themed-search.c
|
|||||||
ThemedSearchComponent,
|
ThemedSearchComponent,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -1,9 +1,13 @@
|
|||||||
<div class="mb-5" *ngFor="let row of boxesConfig">
|
@for (row of boxesConfig; track row) {
|
||||||
|
<div class="mb-5">
|
||||||
<div class="mb-2">{{ row.title | translate }}</div>
|
<div class="mb-2">{{ row.title | translate }}</div>
|
||||||
<div class="row justify-content-between">
|
<div class="row justify-content-between">
|
||||||
<div class="col-sm" *ngFor="let box of row.boxes">
|
@for (box of row.boxes; track box) {
|
||||||
|
<div class="col-sm">
|
||||||
<ds-notification-box (selectedBoxConfig)="navigateToSelectedSearchConfig($event)" [boxConfig]="box"></ds-notification-box>
|
<ds-notification-box (selectedBoxConfig)="navigateToSelectedSearchConfig($event)" [boxConfig]="box"></ds-notification-box>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgForOf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -17,7 +17,6 @@ import { AdminNotifyMetricsRow } from './admin-notify-metrics.model';
|
|||||||
imports: [
|
imports: [
|
||||||
NotificationBoxComponent,
|
NotificationBoxComponent,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgForOf,
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
|
@@ -11,22 +11,35 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let message of (messagesSubject$ | async)">
|
@for (message of (messagesSubject$ | async); track message) {
|
||||||
|
<tr>
|
||||||
<td class="text-nowrap">
|
<td class="text-nowrap">
|
||||||
<div *ngIf="message.queueLastStartTime">{{ message.queueLastStartTime | date:"YYYY/MM/d hh:mm:ss" }}</div>
|
@if (message.queueLastStartTime) {
|
||||||
<div *ngIf="!message.queueLastStartTime">n/a</div>
|
<div>{{ message.queueLastStartTime | date:"YYYY/MM/d hh:mm:ss" }}</div>
|
||||||
|
}
|
||||||
|
@if (!message.queueLastStartTime) {
|
||||||
|
<div>n/a</div>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ds-truncatable [id]="message.id">
|
<ds-truncatable [id]="message.id">
|
||||||
<ds-truncatable-part [id]="message.id" [minLines]="2">
|
<ds-truncatable-part [id]="message.id" [minLines]="2">
|
||||||
<a *ngIf="message.relatedItem" [routerLink]="'/items/' + (message.context || message.object)">{{ message.relatedItem }}</a>
|
@if (message.relatedItem) {
|
||||||
|
<a [routerLink]="'/items/' + (message.context || message.object)">{{ message.relatedItem }}</a>
|
||||||
|
}
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</ds-truncatable>
|
</ds-truncatable>
|
||||||
<div *ngIf="!message.relatedItem">n/a</div>
|
@if (!message.relatedItem) {
|
||||||
|
<div>n/a</div>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div *ngIf="message.ldnService">{{ message.ldnService }}</div>
|
@if (message.ldnService) {
|
||||||
<div *ngIf="!message.ldnService">n/a</div>
|
<div>{{ message.ldnService }}</div>
|
||||||
|
}
|
||||||
|
@if (!message.ldnService) {
|
||||||
|
<div>n/a</div>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div>{{ message.activityStreamType }}</div>
|
<div>{{ message.activityStreamType }}</div>
|
||||||
@@ -37,15 +50,18 @@
|
|||||||
<td>
|
<td>
|
||||||
<div class="d-flex flex-column">
|
<div class="d-flex flex-column">
|
||||||
<button class="btn mb-2 btn-dark" (click)="openDetailModal(message)">{{ 'notify-message-result.detail' | translate }}</button>
|
<button class="btn mb-2 btn-dark" (click)="openDetailModal(message)">{{ 'notify-message-result.detail' | translate }}</button>
|
||||||
<button *ngIf="message.queueStatusLabel !== reprocessStatus && validStatusesForReprocess.includes(message.queueStatusLabel)"
|
@if (message.queueStatusLabel !== reprocessStatus && validStatusesForReprocess.includes(message.queueStatusLabel)) {
|
||||||
|
<button
|
||||||
(click)="reprocessMessage(message)"
|
(click)="reprocessMessage(message)"
|
||||||
class="btn btn-warning"
|
class="btn btn-warning"
|
||||||
>
|
>
|
||||||
{{ 'notify-message-result.reprocess' | translate }}
|
{{ 'notify-message-result.reprocess' | translate }}
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
DatePipe,
|
DatePipe,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -42,8 +40,6 @@ import { AdminNotifyMessagesService } from '../services/admin-notify-messages.se
|
|||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
DatePipe,
|
DatePipe,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TruncatableComponent,
|
TruncatableComponent,
|
||||||
|
@@ -8,8 +8,8 @@
|
|||||||
<p id="create-new" class="mb-2"><a [routerLink]="'add'" class="btn btn-success">{{'admin.registries.bitstream-formats.create.new' | translate}}</a></p>
|
<p id="create-new" class="mb-2"><a [routerLink]="'add'" class="btn btn-success">{{'admin.registries.bitstream-formats.create.new' | translate}}</a></p>
|
||||||
|
|
||||||
|
|
||||||
|
@if ((bitstreamFormats$ | async)?.payload?.totalElements > 0) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="(bitstreamFormats$ | async)?.payload?.totalElements > 0"
|
|
||||||
[paginationOptions]="pageConfig"
|
[paginationOptions]="pageConfig"
|
||||||
[collectionSize]="(bitstreamFormats$ | async)?.payload?.totalElements"
|
[collectionSize]="(bitstreamFormats$ | async)?.payload?.totalElements"
|
||||||
[hideGear]="false"
|
[hideGear]="false"
|
||||||
@@ -26,7 +26,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let bitstreamFormat of (bitstreamFormats$ | async)?.payload?.page">
|
@for (bitstreamFormat of (bitstreamFormats$ | async)?.payload?.page; track bitstreamFormat) {
|
||||||
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<label class="form-label mb-0">
|
<label class="form-label mb-0">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
@@ -39,20 +40,30 @@
|
|||||||
</td>
|
</td>
|
||||||
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.id}}</a></td>
|
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.id}}</a></td>
|
||||||
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.shortDescription}}</a></td>
|
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.shortDescription}}</a></td>
|
||||||
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.mimetype}} <span *ngIf="bitstreamFormat.internal">({{'admin.registries.bitstream-formats.table.internal' | translate}})</span></a></td>
|
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{bitstreamFormat.mimetype}} @if (bitstreamFormat.internal) {
|
||||||
|
<span>({{'admin.registries.bitstream-formats.table.internal' | translate}})</span>
|
||||||
|
}</a></td>
|
||||||
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{'admin.registries.bitstream-formats.table.supportLevel.'+bitstreamFormat.supportLevel | translate}}</a></td>
|
<td><a [routerLink]="['/admin/registries/bitstream-formats', bitstreamFormat.id, 'edit']">{{'admin.registries.bitstream-formats.table.supportLevel.'+bitstreamFormat.supportLevel | translate}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
<div *ngIf="(bitstreamFormats$ | async)?.payload?.totalElements === 0" class="alert alert-info" role="alert">
|
}
|
||||||
|
@if ((bitstreamFormats$ | async)?.payload?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
{{'admin.registries.bitstream-formats.no-items' | translate}}
|
{{'admin.registries.bitstream-formats.no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button *ngIf="(bitstreamFormats$ | async)?.payload?.page?.length > 0" class="btn btn-primary deselect" (click)="deselectAll()">{{'admin.registries.bitstream-formats.table.deselect-all' | translate}}</button>
|
@if ((bitstreamFormats$ | async)?.payload?.page?.length > 0) {
|
||||||
<button *ngIf="(bitstreamFormats$ | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteFormats()">{{'admin.registries.bitstream-formats.table.delete' | translate}}</button>
|
<button class="btn btn-primary deselect" (click)="deselectAll()">{{'admin.registries.bitstream-formats.table.deselect-all' | translate}}</button>
|
||||||
|
}
|
||||||
|
@if ((bitstreamFormats$ | async)?.payload?.page?.length > 0) {
|
||||||
|
<button type="submit" class="btn btn-danger float-end" (click)="deleteFormats()">{{'admin.registries.bitstream-formats.table.delete' | translate}}</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
@@ -41,12 +37,10 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio
|
|||||||
selector: 'ds-bitstream-formats',
|
selector: 'ds-bitstream-formats',
|
||||||
templateUrl: './bitstream-formats.component.html',
|
templateUrl: './bitstream-formats.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
NgIf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
RouterLink,
|
RouterLink,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgForOf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
<ds-form *ngIf="formModel"
|
@if (formModel) {
|
||||||
|
<ds-form
|
||||||
[formId]="'comcol-form-id'"
|
[formId]="'comcol-form-id'"
|
||||||
[formModel]="formModel" (submitForm)="onSubmit()" (cancel)="onCancel()"></ds-form>
|
[formModel]="formModel" (submitForm)="onSubmit()" (cancel)="onCancel()"></ds-form>
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgIf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -35,7 +35,6 @@ import { getBitstreamFormatsModuleRoute } from '../../admin-registries-routing-p
|
|||||||
templateUrl: './format-form.component.html',
|
templateUrl: './format-form.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
FormComponent,
|
FormComponent,
|
||||||
NgIf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -8,13 +8,12 @@
|
|||||||
|
|
||||||
<ds-metadata-schema-form (submitForm)="forceUpdateSchemas()"></ds-metadata-schema-form>
|
<ds-metadata-schema-form (submitForm)="forceUpdateSchemas()"></ds-metadata-schema-form>
|
||||||
|
|
||||||
|
@if ((metadataSchemas | async)?.payload?.totalElements > 0) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="(metadataSchemas | async)?.payload?.totalElements > 0"
|
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="(metadataSchemas | async)?.payload?.totalElements"
|
[collectionSize]="(metadataSchemas | async)?.payload?.totalElements"
|
||||||
[hideGear]="true"
|
[hideGear]="true"
|
||||||
[hidePagerWhenSinglePage]="true">
|
[hidePagerWhenSinglePage]="true">
|
||||||
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="metadata-schemas" class="table table-striped table-hover">
|
<table id="metadata-schemas" class="table table-striped table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -26,7 +25,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let schema of (metadataSchemas | async)?.payload?.page"
|
@for (schema of (metadataSchemas | async)?.payload?.page; track schema) {
|
||||||
|
<tr
|
||||||
[ngClass]="{'table-primary' : (activeMetadataSchema$ | async)?.id === schema.id}">
|
[ngClass]="{'table-primary' : (activeMetadataSchema$ | async)?.id === schema.id}">
|
||||||
<td>
|
<td>
|
||||||
<label class="form-label mb-0">
|
<label class="form-label mb-0">
|
||||||
@@ -41,18 +41,23 @@
|
|||||||
<td class="selectable-row" (click)="editSchema(schema)"><a [routerLink]="[schema.prefix]">{{schema.namespace}}</a></td>
|
<td class="selectable-row" (click)="editSchema(schema)"><a [routerLink]="[schema.prefix]">{{schema.namespace}}</a></td>
|
||||||
<td class="selectable-row" (click)="editSchema(schema)"><a [routerLink]="[schema.prefix]">{{schema.prefix}}</a></td>
|
<td class="selectable-row" (click)="editSchema(schema)"><a [routerLink]="[schema.prefix]">{{schema.prefix}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="(metadataSchemas | async)?.payload?.totalElements === 0" class="alert alert-info w-100 mb-2" role="alert">
|
@if ((metadataSchemas | async)?.payload?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2" role="alert">
|
||||||
{{'admin.registries.metadata.schemas.no-items' | translate}}
|
{{'admin.registries.metadata.schemas.no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button *ngIf="(metadataSchemas | async)?.payload?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteSchemas()">{{'admin.registries.metadata.schemas.table.delete' | translate}}</button>
|
@if ((metadataSchemas | async)?.payload?.page?.length > 0) {
|
||||||
|
<button type="submit" class="btn btn-danger float-end" (click)="deleteSchemas()">{{'admin.registries.metadata.schemas.table.delete' | translate}}</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -49,8 +47,6 @@ import { MetadataSchemaFormComponent } from './metadata-schema-form/metadata-sch
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgIf,
|
|
||||||
NgForOf,
|
|
||||||
NgClass,
|
NgClass,
|
||||||
RouterLink,
|
RouterLink,
|
||||||
],
|
],
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
<div *ngIf="activeMetadataSchema$ | async; then editheader; else createHeader"></div>
|
@if (activeMetadataSchema$ | async) {
|
||||||
|
|
||||||
<ng-template #createHeader>
|
|
||||||
<h2>{{messagePrefix + '.create' | translate}}</h2>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #editheader>
|
|
||||||
<h2>{{messagePrefix + '.edit' | translate}}</h2>
|
<h2>{{messagePrefix + '.edit' | translate}}</h2>
|
||||||
</ng-template>
|
} @else {
|
||||||
|
<h2>{{messagePrefix + '.create' | translate}}</h2>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ds-form [formId]="formId"
|
<ds-form [formId]="formId"
|
||||||
[formModel]="formModel"
|
[formModel]="formModel"
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -39,7 +36,6 @@ import { FormComponent } from '../../../../shared/form/form.component';
|
|||||||
selector: 'ds-metadata-schema-form',
|
selector: 'ds-metadata-schema-form',
|
||||||
templateUrl: './metadata-schema-form.component.html',
|
templateUrl: './metadata-schema-form.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
NgIf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
FormComponent,
|
FormComponent,
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
<div *ngIf="registryService.getActiveMetadataField() | async; then editheader; else createHeader"></div>
|
@if (registryService.getActiveMetadataField() | async) {
|
||||||
|
|
||||||
<ng-template #createHeader>
|
|
||||||
<h2>{{messagePrefix + '.create' | translate}}</h2>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #editheader>
|
|
||||||
<h2>{{messagePrefix + '.edit' | translate}}</h2>
|
<h2>{{messagePrefix + '.edit' | translate}}</h2>
|
||||||
</ng-template>
|
} @else {
|
||||||
|
<h2>{{messagePrefix + '.create' | translate}}</h2>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ds-form [formId]="formId"
|
<ds-form [formId]="formId"
|
||||||
[formModel]="formModel"
|
[formModel]="formModel"
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -35,7 +32,6 @@ import { FormComponent } from '../../../../shared/form/form.component';
|
|||||||
selector: 'ds-metadata-field-form',
|
selector: 'ds-metadata-field-form',
|
||||||
templateUrl: './metadata-field-form.component.html',
|
templateUrl: './metadata-field-form.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
NgIf,
|
|
||||||
FormComponent,
|
FormComponent,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
|
@@ -13,8 +13,8 @@
|
|||||||
<h2>{{'admin.registries.schema.fields.head' | translate}}</h2>
|
<h2>{{'admin.registries.schema.fields.head' | translate}}</h2>
|
||||||
|
|
||||||
<ng-container *ngVar="(metadataFields$ | async)?.payload as fields">
|
<ng-container *ngVar="(metadataFields$ | async)?.payload as fields">
|
||||||
|
@if (fields?.totalElements > 0) {
|
||||||
<ds-pagination
|
<ds-pagination
|
||||||
*ngIf="fields?.totalElements > 0"
|
|
||||||
[paginationOptions]="config"
|
[paginationOptions]="config"
|
||||||
[collectionSize]="fields?.totalElements"
|
[collectionSize]="fields?.totalElements"
|
||||||
[hideGear]="false"
|
[hideGear]="false"
|
||||||
@@ -30,7 +30,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let field of fields?.page"
|
@for (field of fields?.page; track field) {
|
||||||
|
<tr
|
||||||
[ngClass]="{'table-primary' : (activeField$ | async)?.id === field.id}">
|
[ngClass]="{'table-primary' : (activeField$ | async)?.id === field.id}">
|
||||||
<td *ngVar="(selectedMetadataFieldIDs$ | async)?.includes(field.id) as selected">
|
<td *ngVar="(selectedMetadataFieldIDs$ | async)?.includes(field.id) as selected">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
@@ -42,18 +43,24 @@
|
|||||||
<td class="selectable-row" (click)="editField(field)">{{schema?.prefix}}.{{field.element}}{{field.qualifier ? '.' + field.qualifier : ''}}</td>
|
<td class="selectable-row" (click)="editField(field)">{{schema?.prefix}}.{{field.element}}{{field.qualifier ? '.' + field.qualifier : ''}}</td>
|
||||||
<td class="selectable-row" (click)="editField(field)">{{field.scopeNote}}</td>
|
<td class="selectable-row" (click)="editField(field)">{{field.scopeNote}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</ds-pagination>
|
</ds-pagination>
|
||||||
|
}
|
||||||
|
|
||||||
<div *ngIf="fields?.totalElements === 0" class="alert alert-info w-100 mb-2" role="alert">
|
@if (fields?.totalElements === 0) {
|
||||||
|
<div class="alert alert-info w-100 mb-2" role="alert">
|
||||||
{{'admin.registries.schema.fields.no-items' | translate}}
|
{{'admin.registries.schema.fields.no-items' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button [routerLink]="['/admin/registries/metadata']" class="btn btn-primary">{{'admin.registries.schema.return' | translate}}</button>
|
<button [routerLink]="['/admin/registries/metadata']" class="btn btn-primary">{{'admin.registries.schema.return' | translate}}</button>
|
||||||
<button *ngIf="fields?.page?.length > 0" type="submit" class="btn btn-danger float-end" (click)="deleteFields()">{{'admin.registries.schema.fields.table.delete' | translate}}</button>
|
@if (fields?.page?.length > 0) {
|
||||||
|
<button type="submit" class="btn btn-danger float-end" (click)="deleteFields()">{{'admin.registries.schema.fields.table.delete' | translate}}</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -59,8 +57,6 @@ import { MetadataFieldFormComponent } from './metadata-field-form/metadata-field
|
|||||||
MetadataFieldFormComponent,
|
MetadataFieldFormComponent,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
PaginationComponent,
|
PaginationComponent,
|
||||||
NgIf,
|
|
||||||
NgForOf,
|
|
||||||
NgClass,
|
NgClass,
|
||||||
RouterLink,
|
RouterLink,
|
||||||
],
|
],
|
||||||
|
@@ -36,22 +36,30 @@
|
|||||||
<th rowspan="2">{{ "admin.reports.collections.collection" | translate }}</th>
|
<th rowspan="2">{{ "admin.reports.collections.collection" | translate }}</th>
|
||||||
<th>{{ "admin.reports.collections.nb_items" | translate }}</th>
|
<th>{{ "admin.reports.collections.nb_items" | translate }}</th>
|
||||||
<th>{{ "admin.reports.collections.match_all_selected_filters" | translate }}</th>
|
<th>{{ "admin.reports.collections.match_all_selected_filters" | translate }}</th>
|
||||||
<th *ngFor="let filter of results.summary.values | keyvalue">{{ ("admin.reports.commons.filters." + getGroup(filter.key) + "." + filter.key) | translate }}</th>
|
@for (filter of results.summary.values | keyvalue; track filter) {
|
||||||
|
<th>{{ ("admin.reports.commons.filters." + getGroup(filter.key) + "." + filter.key) | translate }}</th>
|
||||||
|
}
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="header">
|
<tr class="header">
|
||||||
<th class="num">{{ results.summary.nbTotalItems }}</th>
|
<th class="num">{{ results.summary.nbTotalItems }}</th>
|
||||||
<th class="num">{{ results.summary.allFiltersValue }}</th>
|
<th class="num">{{ results.summary.allFiltersValue }}</th>
|
||||||
<th class="num" *ngFor="let filter of results.summary.values | keyvalue">{{ filter.value }}</th>
|
@for (filter of results.summary.values | keyvalue; track filter) {
|
||||||
|
<th class="num">{{ filter.value }}</th>
|
||||||
|
}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let coll of results.collections">
|
@for (coll of results.collections; track coll) {
|
||||||
|
<tr>
|
||||||
<td><a href="/handle/{{ coll.communityHandle }}" rel="noopener noreferrer" target="_blank">{{ coll.communityLabel }}</a></td>
|
<td><a href="/handle/{{ coll.communityHandle }}" rel="noopener noreferrer" target="_blank">{{ coll.communityLabel }}</a></td>
|
||||||
<td><a href="/handle/{{ coll.handle }}" rel="noopener noreferrer" target="_blank">{{ coll.label }}</a></td>
|
<td><a href="/handle/{{ coll.handle }}" rel="noopener noreferrer" target="_blank">{{ coll.label }}</a></td>
|
||||||
<td class="num">{{ coll.nbTotalItems }}</td>
|
<td class="num">{{ coll.nbTotalItems }}</td>
|
||||||
<td class="num">{{ coll.allFiltersValue }}</td>
|
<td class="num">{{ coll.allFiltersValue }}</td>
|
||||||
<td class="num" *ngFor="let filter of results.summary.values | keyvalue">{{ coll.values[filter.key] || 0 }}</td>
|
@for (filter of results.summary.values | keyvalue; track filter) {
|
||||||
|
<td class="num">{{ coll.values[filter.key] || 0 }}</td>
|
||||||
|
}
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { KeyValuePipe } from '@angular/common';
|
||||||
KeyValuePipe,
|
|
||||||
NgForOf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnInit,
|
OnInit,
|
||||||
@@ -37,7 +34,6 @@ import { FilteredCollections } from './filtered-collections.model';
|
|||||||
NgbAccordionModule,
|
NgbAccordionModule,
|
||||||
FiltersComponent,
|
FiltersComponent,
|
||||||
KeyValuePipe,
|
KeyValuePipe,
|
||||||
NgForOf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
import { Item } from 'src/app/core/shared/item.model';
|
import { Item } from 'src/app/core/shared/item.model';
|
||||||
|
|
||||||
|
import { Collection } from '../../../core/shared/collection.model';
|
||||||
|
|
||||||
export class FilteredItems {
|
export class FilteredItems {
|
||||||
|
|
||||||
public items: Item[] = [];
|
public items: FilteredItem[] = [];
|
||||||
public itemCount: number;
|
public itemCount: number;
|
||||||
|
|
||||||
public clear() {
|
public clear() {
|
||||||
@@ -21,3 +23,8 @@ export class FilteredItems {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface FilteredItem extends Omit<Item, 'owningCollection'> {
|
||||||
|
index: number;
|
||||||
|
owningCollection?: Collection;
|
||||||
|
}
|
||||||
|
@@ -12,7 +12,9 @@
|
|||||||
</ng-template>
|
</ng-template>
|
||||||
<ng-template ngbPanelContent>
|
<ng-template ngbPanelContent>
|
||||||
<select id="collSel" name="collSel" class="form-control" multiple="multiple" size="10" formControlName="collections">
|
<select id="collSel" name="collSel" class="form-control" multiple="multiple" size="10" formControlName="collections">
|
||||||
<option *ngFor="let item of collections" [value]="item.id" [disabled]="item.disabled">{{item.name$ | async}}</option>
|
@for (item of collections; track item) {
|
||||||
|
<option [value]="item.id" [disabled]="item.disabled">{{item.name$ | async}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<span class="col-3"></span>
|
<span class="col-3"></span>
|
||||||
@@ -30,22 +32,29 @@
|
|||||||
{{'admin.reports.items.predefinedQueries' | translate}}
|
{{'admin.reports.items.predefinedQueries' | translate}}
|
||||||
</label>
|
</label>
|
||||||
<select id="predefselect" formControlName="presetQuery" class="form-control" (change)="setPresetQuery()">
|
<select id="predefselect" formControlName="presetQuery" class="form-control" (change)="setPresetQuery()">
|
||||||
<option *ngFor="let item of presetQueries" [value]="item.id" [selected]="item.isDefault">{{item.label | translate}}</option>
|
@for (item of presetQueries; track item.id) {
|
||||||
|
<option [value]="item.id" [selected]="item.isDefault">{{item.label | translate}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<div class="row"> </div>
|
<div class="row"> </div>
|
||||||
<div id="queries">
|
<div id="queries">
|
||||||
<div class="metadata" *ngFor="let pred of queryPredicatesArray().controls; let i = index">
|
@for (pred of queryPredicatesArray().controls; track pred; let i = $index) {
|
||||||
|
<div class="metadata">
|
||||||
<div [formGroup]="pred" class="form-group">
|
<div [formGroup]="pred" class="form-group">
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<select class="query-tool" formControlName="field" class="form-control">
|
<select class="query-tool" formControlName="field" class="form-control">
|
||||||
<option *ngFor="let item of metadataFieldsWithAny" [value]="item.id">{{item.name$ | async}}</option>
|
@for (item of metadataFieldsWithAny; track item) {
|
||||||
|
<option [value]="item.id">{{item.name$ | async}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<select class="query-tool" formControlName="operator" class="form-control">
|
<select class="query-tool" formControlName="operator" class="form-control">
|
||||||
<option *ngFor="let item of predicates" [value]="item.id">{{item.name$ | async | translate}}</option>
|
@for (item of predicates; track item) {
|
||||||
|
<option [value]="item.id">{{item.name$ | async | translate}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
@@ -59,6 +68,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<span class="col-3"></span>
|
<span class="col-3"></span>
|
||||||
@@ -75,7 +85,9 @@
|
|||||||
<label for="limit" class="col-sm-2 col-form-label">{{'admin.reports.items.limit' | translate}}:</label>
|
<label for="limit" class="col-sm-2 col-form-label">{{'admin.reports.items.limit' | translate}}:</label>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<select id="limit" name="limit" formControlName="pageLimit" class="form-control col-6">
|
<select id="limit" name="limit" formControlName="pageLimit" class="form-control col-6">
|
||||||
<option *ngFor="let item of pageLimits" value="{{item.id}}" [selected]="item.isDefault">{{item.name$ | async}}</option>
|
@for (item of pageLimits; track item) {
|
||||||
|
<option value="{{item.id}}" [selected]="item.isDefault">{{item.name$ | async}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -114,7 +126,9 @@
|
|||||||
<ng-template ngbPanelContent>
|
<ng-template ngbPanelContent>
|
||||||
<div id="show-fields">
|
<div id="show-fields">
|
||||||
<select class="query-tool" name="show_fields" multiple="multiple" size="8" class="form-control" formControlName="additionalFields">
|
<select class="query-tool" name="show_fields" multiple="multiple" size="8" class="form-control" formControlName="additionalFields">
|
||||||
<option *ngFor="let item of metadataFields" [value]="item.id">{{item.name$ | async}}</option>
|
@for (item of metadataFields; track item) {
|
||||||
|
<option [value]="item.id">{{item.name$ | async}}</option>
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -136,22 +150,34 @@
|
|||||||
<th>{{ "admin.reports.items.collection" | translate }}</th>
|
<th>{{ "admin.reports.items.collection" | translate }}</th>
|
||||||
<th>{{ "admin.reports.items.handle" | translate }}</th>
|
<th>{{ "admin.reports.items.handle" | translate }}</th>
|
||||||
<th>{{ "admin.reports.items.title" | translate }}</th>
|
<th>{{ "admin.reports.items.title" | translate }}</th>
|
||||||
<th *ngFor="let field of queryForm.value['additionalFields']">{{ field }}</th>
|
@for (field of queryForm.value['additionalFields']; track field) {
|
||||||
|
<th>{{ field }}</th>
|
||||||
|
}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let item of results$ | async">
|
@for (item of results$ | async; track item) {
|
||||||
|
<tr>
|
||||||
<td class="num">{{ item.index }}</td>
|
<td class="num">{{ item.index }}</td>
|
||||||
<td>{{ item.uuid }}</td>
|
<td>{{ item.uuid }}</td>
|
||||||
<td><a *ngIf="item.owningCollection" href="/handle/{{ item.owningCollection.handle }}" rel="noopener noreferrer" target="_blank">{{ item.owningCollection.name }}</a></td>
|
<td>@if (item.owningCollection) {
|
||||||
<td><a *ngIf="item.handle" href="/handle/{{ item.handle }}" rel="noopener noreferrer" target="_blank">{{ item.handle }}</a></td>
|
<a href="/handle/{{ item.owningCollection.handle }}" rel="noopener noreferrer" target="_blank">{{ item.owningCollection.name }}</a>
|
||||||
|
}</td>
|
||||||
|
<td>@if (item.handle) {
|
||||||
|
<a href="/handle/{{ item.handle }}" rel="noopener noreferrer" target="_blank">{{ item.handle }}</a>
|
||||||
|
}</td>
|
||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td class="num" *ngFor="let field of queryForm.value['additionalFields']">
|
@for (field of queryForm.value['additionalFields']; track field) {
|
||||||
<span *ngFor="let mdvalue of item.metadata[field]">
|
<td class="num">
|
||||||
|
@for (mdvalue of item.metadata[field]; track mdvalue) {
|
||||||
|
<span>
|
||||||
{{ mdvalue.value || "" }}
|
{{ mdvalue.value || "" }}
|
||||||
</span>
|
</span>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
|
}
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div>
|
<div>
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnInit,
|
OnInit,
|
||||||
@@ -38,14 +34,16 @@ import { MetadataField } from 'src/app/core/metadata/metadata-field.model';
|
|||||||
import { MetadataSchema } from 'src/app/core/metadata/metadata-schema.model';
|
import { MetadataSchema } from 'src/app/core/metadata/metadata-schema.model';
|
||||||
import { Collection } from 'src/app/core/shared/collection.model';
|
import { Collection } from 'src/app/core/shared/collection.model';
|
||||||
import { Community } from 'src/app/core/shared/community.model';
|
import { Community } from 'src/app/core/shared/community.model';
|
||||||
import { Item } from 'src/app/core/shared/item.model';
|
|
||||||
import { getFirstSucceededRemoteListPayload } from 'src/app/core/shared/operators';
|
import { getFirstSucceededRemoteListPayload } from 'src/app/core/shared/operators';
|
||||||
import { isEmpty } from 'src/app/shared/empty.util';
|
import { isEmpty } from 'src/app/shared/empty.util';
|
||||||
import { environment } from 'src/environments/environment';
|
import { environment } from 'src/environments/environment';
|
||||||
|
|
||||||
import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive';
|
import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive';
|
||||||
import { FiltersComponent } from '../filters-section/filters-section.component';
|
import { FiltersComponent } from '../filters-section/filters-section.component';
|
||||||
import { FilteredItems } from './filtered-items-model';
|
import {
|
||||||
|
FilteredItem,
|
||||||
|
FilteredItems,
|
||||||
|
} from './filtered-items-model';
|
||||||
import { OptionVO } from './option-vo.model';
|
import { OptionVO } from './option-vo.model';
|
||||||
import { PresetQuery } from './preset-query.model';
|
import { PresetQuery } from './preset-query.model';
|
||||||
import { QueryPredicate } from './query-predicate.model';
|
import { QueryPredicate } from './query-predicate.model';
|
||||||
@@ -62,8 +60,6 @@ import { QueryPredicate } from './query-predicate.model';
|
|||||||
NgbAccordionModule,
|
NgbAccordionModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
NgForOf,
|
|
||||||
FiltersComponent,
|
FiltersComponent,
|
||||||
BtnDisabledDirective,
|
BtnDisabledDirective,
|
||||||
],
|
],
|
||||||
@@ -81,7 +77,7 @@ export class FilteredItemsComponent implements OnInit {
|
|||||||
queryForm: FormGroup;
|
queryForm: FormGroup;
|
||||||
currentPage = 0;
|
currentPage = 0;
|
||||||
results: FilteredItems = new FilteredItems();
|
results: FilteredItems = new FilteredItems();
|
||||||
results$: Observable<Item[]>;
|
results$: Observable<FilteredItem[]>;
|
||||||
@ViewChild('acc') accordionComponent: NgbAccordion;
|
@ViewChild('acc') accordionComponent: NgbAccordion;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
@@ -9,6 +9,7 @@ export class OptionVO {
|
|||||||
id: string;
|
id: string;
|
||||||
name$: Observable<string>;
|
name$: Observable<string>;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
|
isDefault?: boolean;
|
||||||
|
|
||||||
static collection(id: string, name: string, disabled: boolean = false): OptionVO {
|
static collection(id: string, name: string, disabled: boolean = false): OptionVO {
|
||||||
const opt = new OptionVO();
|
const opt = new OptionVO();
|
||||||
|
@@ -5,6 +5,7 @@ export class PresetQuery {
|
|||||||
id: string;
|
id: string;
|
||||||
label: string;
|
label: string;
|
||||||
predicates: QueryPredicate[];
|
predicates: QueryPredicate[];
|
||||||
|
isDefault?: boolean;
|
||||||
|
|
||||||
static of(id: string, label: string, predicates: QueryPredicate[]) {
|
static of(id: string, label: string, predicates: QueryPredicate[]) {
|
||||||
const query = new PresetQuery();
|
const query = new PresetQuery();
|
||||||
|
@@ -9,11 +9,15 @@
|
|||||||
<span class="col-12"> </span>
|
<span class="col-12"> </span>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset class="row row-cols-2" *ngFor="let group of allFilters()">
|
@for (group of allFilters(); track group) {
|
||||||
|
<fieldset class="row row-cols-2">
|
||||||
<legend>{{group.key | translate}}</legend>
|
<legend>{{group.key | translate}}</legend>
|
||||||
<ng-container [formGroup]="filtersForm">
|
<ng-container [formGroup]="filtersForm">
|
||||||
<div *ngFor="let filter of group.filters" class="col-6">
|
@for (filter of group.filters; track filter) {
|
||||||
|
<div class="col-6">
|
||||||
<input type="checkbox" id="flt-{{filter.id}}" value="{{filter.id}}" class="form-check-input col-1" formControlName="{{filter.id}}"><label for="flt-{{filter.id}}" class="col-11 align-middle" title="{{filter.tooltipKey | translate}}">{{filter.key | translate}}</label>
|
<input type="checkbox" id="flt-{{filter.id}}" value="{{filter.id}}" class="form-check-input col-1" formControlName="{{filter.id}}"><label for="flt-{{filter.id}}" class="col-11 align-middle" title="{{filter.tooltipKey | translate}}">{{filter.key | translate}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgForOf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -23,7 +23,6 @@ import { FilterGroup } from './filter-group.model';
|
|||||||
templateUrl: './filters-section.component.html',
|
templateUrl: './filters-section.component.html',
|
||||||
styleUrls: ['./filters-section.component.scss'],
|
styleUrls: ['./filters-section.component.scss'],
|
||||||
imports: [
|
imports: [
|
||||||
NgForOf,
|
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
],
|
],
|
||||||
|
@@ -1,30 +1,52 @@
|
|||||||
<div class="space-children-mr my-1">
|
<div class="space-children-mr my-1">
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary move-link" [routerLink]="[getMoveRoute()]" [title]="'admin.search.item.move' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary move-link" [routerLink]="[getMoveRoute()]" [title]="'admin.search.item.move' | translate">
|
||||||
<i class="fa fa-arrow-circle-right"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.move" | translate}}</span>
|
<i class="fa fa-arrow-circle-right"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.move" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" *ngIf="item && item.isDiscoverable" class="btn btn-secondary private-link" [routerLink]="[getPrivateRoute()]" [title]="'admin.search.item.make-private' | translate">
|
@if (item && item.isDiscoverable) {
|
||||||
<i class="fa fa-eye-slash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.make-private" | translate}}</span>
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary private-link" [routerLink]="[getPrivateRoute()]" [title]="'admin.search.item.make-private' | translate">
|
||||||
|
<i class="fa fa-eye-slash"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.make-private" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
}
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" *ngIf="item && !item.isDiscoverable" class="btn btn-secondary public-link" [routerLink]="[getPublicRoute()]" [title]="'admin.search.item.make-public' | translate">
|
@if (item && !item.isDiscoverable) {
|
||||||
<i class="fa fa-eye"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.make-public" | translate}}</span>
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary public-link" [routerLink]="[getPublicRoute()]" [title]="'admin.search.item.make-public' | translate">
|
||||||
|
<i class="fa fa-eye"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.make-public" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
}
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary edit-link" [routerLink]="[getEditRoute()]" [title]="'admin.search.item.edit' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-secondary edit-link" [routerLink]="[getEditRoute()]" [title]="'admin.search.item.edit' | translate">
|
||||||
<i class="fa fa-edit"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.edit" | translate}}</span>
|
<i class="fa fa-edit"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.edit" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" *ngIf="item && !item.isWithdrawn" class="btn btn-warning t withdraw-link" [routerLink]="[getWithdrawRoute()]" [title]="'admin.search.item.withdraw' | translate">
|
@if (item && !item.isWithdrawn) {
|
||||||
<i class="fa fa-ban"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.withdraw" | translate}}</span>
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-warning t withdraw-link" [routerLink]="[getWithdrawRoute()]" [title]="'admin.search.item.withdraw' | translate">
|
||||||
|
<i class="fa fa-ban"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.withdraw" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
}
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" *ngIf="item && item.isWithdrawn" class="btn btn-warning reinstate-link" [routerLink]="[getReinstateRoute()]" [title]="'admin.search.item.reinstate' | translate">
|
@if (item && item.isWithdrawn) {
|
||||||
<i class="fa fa-undo"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.reinstate" | translate}}</span>
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-warning reinstate-link" [routerLink]="[getReinstateRoute()]" [title]="'admin.search.item.reinstate' | translate">
|
||||||
|
<i class="fa fa-undo"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.reinstate" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
|
}
|
||||||
|
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-danger delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.search.item.delete' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-danger delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.search.item.delete' | translate">
|
||||||
<i class="fa fa-trash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.delete" | translate}}</span>
|
<i class="fa fa-trash"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.search.item.delete" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { NgClass } from '@angular/common';
|
||||||
NgClass,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -26,7 +23,7 @@ import { getItemEditRoute } from '../../../item-page/item-page-routing-paths';
|
|||||||
styleUrls: ['./item-admin-search-result-actions.component.scss'],
|
styleUrls: ['./item-admin-search-result-actions.component.scss'],
|
||||||
templateUrl: './item-admin-search-result-actions.component.html',
|
templateUrl: './item-admin-search-result-actions.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgClass, RouterLink, NgIf, TranslateModule],
|
imports: [NgClass, RouterLink, TranslateModule],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying the actions for a list element for an item search result on the admin search page
|
* The component for displaying the actions for a list element for an item search result on the admin search page
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
@if (menuVisible | async) {
|
||||||
<nav class="navbar navbar-dark p-0 vh-100"
|
<nav class="navbar navbar-dark p-0 vh-100"
|
||||||
id="admin-sidebar"
|
id="admin-sidebar"
|
||||||
[attr.aria-label]="'menu.header.nav.description' | translate"
|
[attr.aria-label]="'menu.header.nav.description' | translate"
|
||||||
@@ -6,12 +7,9 @@
|
|||||||
value: ((sidebarExpanded | async) !== true ? 'collapsed' : 'expanded'),
|
value: ((sidebarExpanded | async) !== true ? 'collapsed' : 'expanded'),
|
||||||
params: { collapsedWidth: (collapsedSidebarWidth$ | async), expandedWidth: (expandedSidebarWidth$ | async) }
|
params: { collapsedWidth: (collapsedSidebarWidth$ | async), expandedWidth: (expandedSidebarWidth$ | async) }
|
||||||
}" (@slideSidebar.done)="finishSlide($event)" (@slideSidebar.start)="startSlide($event)"
|
}" (@slideSidebar.done)="finishSlide($event)" (@slideSidebar.start)="startSlide($event)"
|
||||||
*ngIf="menuVisible | async"
|
|
||||||
(mouseenter)="handleMouseEnter($event)"
|
(mouseenter)="handleMouseEnter($event)"
|
||||||
(mouseleave)="handleMouseLeave($event)">
|
(mouseleave)="handleMouseLeave($event)">
|
||||||
|
|
||||||
<!-- HEADER -->
|
<!-- HEADER -->
|
||||||
|
|
||||||
<div class="sidebar-full-width-container" id="sidebar-header-container" aria-hidden="true">
|
<div class="sidebar-full-width-container" id="sidebar-header-container" aria-hidden="true">
|
||||||
<div class="sidebar-section-wrapper">
|
<div class="sidebar-section-wrapper">
|
||||||
<div class="sidebar-fixed-element-wrapper">
|
<div class="sidebar-fixed-element-wrapper">
|
||||||
@@ -24,21 +22,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ITEMS -->
|
<!-- ITEMS -->
|
||||||
|
|
||||||
<div class="sidebar-full-width-container" id="sidebar-top-level-items-container">
|
<div class="sidebar-full-width-container" id="sidebar-top-level-items-container">
|
||||||
<div class="sidebar-full-width-container" id="sidebar-top-level-items" role="menubar"
|
<div class="sidebar-full-width-container" id="sidebar-top-level-items" role="menubar"
|
||||||
[attr.aria-label]="'menu.header.admin.description' |translate">
|
[attr.aria-label]="'menu.header.admin.description' |translate">
|
||||||
<ng-container *ngFor="let section of (sections | async)">
|
@for (section of (sections | async); track section) {
|
||||||
<ng-container
|
<ng-container
|
||||||
*ngComponentOutlet="(sectionMap$ | async).get(section.id).component; injector: (sectionMap$ | async).get(section.id).injector;"></ng-container>
|
*ngComponentOutlet="(sectionMap$ | async).get(section.id).component; injector: (sectionMap$ | async).get(section.id).injector;"></ng-container>
|
||||||
</ng-container>
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- TOGGLER -->
|
<!-- TOGGLER -->
|
||||||
|
|
||||||
<div class="sidebar-full-width-container" id="sidebar-collapse-toggle-container">
|
<div class="sidebar-full-width-container" id="sidebar-collapse-toggle-container">
|
||||||
<a class="sidebar-section-wrapper sidebar-full-width-container"
|
<a class="sidebar-section-wrapper sidebar-full-width-container"
|
||||||
id="sidebar-collapse-toggle"
|
id="sidebar-collapse-toggle"
|
||||||
@@ -48,10 +42,14 @@
|
|||||||
(keyup.space)="toggle($event)"
|
(keyup.space)="toggle($event)"
|
||||||
>
|
>
|
||||||
<div class="sidebar-fixed-element-wrapper">
|
<div class="sidebar-fixed-element-wrapper">
|
||||||
<i *ngIf="(menuCollapsed | async)" class="fas fa-fw fa-angle-double-right"
|
@if ((menuCollapsed | async)) {
|
||||||
|
<i class="fas fa-fw fa-angle-double-right"
|
||||||
[title]="'menu.section.icon.pin' | translate"></i>
|
[title]="'menu.section.icon.pin' | translate"></i>
|
||||||
<i *ngIf="(menuCollapsed | async) !== true" class="fas fa-fw fa-angle-double-left"
|
}
|
||||||
|
@if ((menuCollapsed | async) !== true) {
|
||||||
|
<i class="fas fa-fw fa-angle-double-left"
|
||||||
[title]="'menu.section.icon.unpin' | translate"></i>
|
[title]="'menu.section.icon.unpin' | translate"></i>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="sidebar-collapsible-element-outer-wrapper">
|
<div class="sidebar-collapsible-element-outer-wrapper">
|
||||||
<div class="sidebar-collapsible-element-inner-wrapper sidebar-item">
|
<div class="sidebar-collapsible-element-inner-wrapper sidebar-item">
|
||||||
@@ -60,5 +58,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
}
|
||||||
|
@@ -2,8 +2,6 @@ import {
|
|||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgComponentOutlet,
|
NgComponentOutlet,
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -47,7 +45,7 @@ import { BrowserOnlyPipe } from '../../shared/utils/browser-only.pipe';
|
|||||||
styleUrls: ['./admin-sidebar.component.scss'],
|
styleUrls: ['./admin-sidebar.component.scss'],
|
||||||
animations: [slideSidebar],
|
animations: [slideSidebar],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf, NgbDropdownModule, NgClass, NgFor, NgComponentOutlet, AsyncPipe, TranslateModule, BrowserOnlyPipe],
|
imports: [NgbDropdownModule, NgClass, NgComponentOutlet, AsyncPipe, TranslateModule, BrowserOnlyPipe],
|
||||||
})
|
})
|
||||||
export class AdminSidebarComponent extends MenuComponent implements OnInit {
|
export class AdminSidebarComponent extends MenuComponent implements OnInit {
|
||||||
/**
|
/**
|
||||||
|
@@ -29,17 +29,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="sidebar-section-wrapper subsection" @slide *ngIf="(isExpanded$ | async)">
|
@if ((isExpanded$ | async)) {
|
||||||
|
<div class="sidebar-section-wrapper subsection" @slide>
|
||||||
<div class="sidebar-fixed-element-wrapper"></div>
|
<div class="sidebar-fixed-element-wrapper"></div>
|
||||||
<div class="sidebar-collapsible-element-outer-wrapper">
|
<div class="sidebar-collapsible-element-outer-wrapper">
|
||||||
<div class="sidebar-collapsible-element-inner-wrapper">
|
<div class="sidebar-collapsible-element-inner-wrapper">
|
||||||
<div class="sidebar-sub-level-item-list" role="menu" [id]="adminMenuSectionId(section.id)" [attr.aria-label]="('menu.section.' + section.id) | translate">
|
<div class="sidebar-sub-level-item-list" role="menu" [id]="adminMenuSectionId(section.id)" [attr.aria-label]="('menu.section.' + section.id) | translate">
|
||||||
<div class="sidebar-item" *ngFor="let subSection of (subSections$ | async)">
|
@for (subSection of (subSections$ | async); track subSection) {
|
||||||
|
<div class="sidebar-item">
|
||||||
<ng-container
|
<ng-container
|
||||||
*ngComponentOutlet="(sectionMap$ | async).get(subSection.id).component; injector: (sectionMap$ | async).get(subSection.id).injector;"></ng-container>
|
*ngComponentOutlet="(sectionMap$ | async).get(subSection.id).component; injector: (sectionMap$ | async).get(subSection.id).injector;"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -2,8 +2,6 @@ import {
|
|||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgClass,
|
NgClass,
|
||||||
NgComponentOutlet,
|
NgComponentOutlet,
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -37,7 +35,7 @@ import { AdminSidebarSectionComponent } from '../admin-sidebar-section/admin-sid
|
|||||||
styleUrls: ['./expandable-admin-sidebar-section.component.scss'],
|
styleUrls: ['./expandable-admin-sidebar-section.component.scss'],
|
||||||
animations: [rotate, slide, bgColor],
|
animations: [rotate, slide, bgColor],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgClass, NgComponentOutlet, NgIf, NgFor, AsyncPipe, TranslateModule, BrowserOnlyPipe],
|
imports: [NgClass, NgComponentOutlet, AsyncPipe, TranslateModule, BrowserOnlyPipe],
|
||||||
})
|
})
|
||||||
|
|
||||||
export class ExpandableAdminSidebarSectionComponent extends AdminSidebarSectionComponent implements OnInit {
|
export class ExpandableAdminSidebarSectionComponent extends AdminSidebarSectionComponent implements OnInit {
|
||||||
|
@@ -1,8 +1,12 @@
|
|||||||
<div class="space-children-mr">
|
<div class="space-children-mr">
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.workflow.item.delete' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.workflow.item.delete' | translate">
|
||||||
<i class="fa fa-trash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.workflow.item.delete" | translate}}</span>
|
<i class="fa fa-trash"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.workflow.item.delete" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 send-back-link" [routerLink]="[getSendBackRoute()]" [title]="'admin.workflow.item.send-back' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 send-back-link" [routerLink]="[getSendBackRoute()]" [title]="'admin.workflow.item.send-back' | translate">
|
||||||
<i class="fa fa-hand-point-left"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.workflow.item.send-back" | translate}}</span>
|
<i class="fa fa-hand-point-left"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.workflow.item.send-back" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { NgClass } from '@angular/common';
|
||||||
NgClass,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -20,7 +17,7 @@ import {
|
|||||||
styleUrls: ['./workflow-item-admin-workflow-actions.component.scss'],
|
styleUrls: ['./workflow-item-admin-workflow-actions.component.scss'],
|
||||||
templateUrl: './workflow-item-admin-workflow-actions.component.html',
|
templateUrl: './workflow-item-admin-workflow-actions.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgClass, RouterLink, NgIf, TranslateModule],
|
imports: [NgClass, RouterLink, TranslateModule],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying the actions for a list element for a workflow-item on the admin workflow search page
|
* The component for displaying the actions for a list element for a workflow-item on the admin workflow search page
|
||||||
|
@@ -13,8 +13,10 @@
|
|||||||
<option value="EDITOR">{{'supervision-group-selector.select.type-of-order.option.editor' | translate}}</option>
|
<option value="EDITOR">{{'supervision-group-selector.select.type-of-order.option.editor' | translate}}</option>
|
||||||
<option value="OBSERVER">{{'supervision-group-selector.select.type-of-order.option.observer' | translate}}</option>
|
<option value="OBSERVER">{{'supervision-group-selector.select.type-of-order.option.observer' | translate}}</option>
|
||||||
</select>
|
</select>
|
||||||
<ds-error *ngIf="isSubmitted && (!selectedOrderType || selectedOrderType === '')"
|
@if (isSubmitted && (!selectedOrderType || selectedOrderType === '')) {
|
||||||
|
<ds-error
|
||||||
message="{{'supervision-group-selector.select.type-of-order.error' | translate}}"></ds-error>
|
message="{{'supervision-group-selector.select.type-of-order.error' | translate}}"></ds-error>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -22,7 +24,9 @@
|
|||||||
<label for="supervisionGroup" class="form-label">{{'supervision-group-selector.select.group.label' | translate}}</label>
|
<label for="supervisionGroup" class="form-label">{{'supervision-group-selector.select.group.label' | translate}}</label>
|
||||||
<ng-container class="mb-3">
|
<ng-container class="mb-3">
|
||||||
<input id="supervisionGroup" class="form-control" type="text" [value]="selectedGroup ? dsoNameService.getName(selectedGroup) : ''" disabled>
|
<input id="supervisionGroup" class="form-control" type="text" [value]="selectedGroup ? dsoNameService.getName(selectedGroup) : ''" disabled>
|
||||||
<ds-error *ngIf="isSubmitted && !selectedGroup" message="{{'supervision-group-selector.select.group.error' | translate}}"></ds-error>
|
@if (isSubmitted && !selectedGroup) {
|
||||||
|
<ds-error message="{{'supervision-group-selector.select.group.error' | translate}}"></ds-error>
|
||||||
|
}
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ds-eperson-group-list [isListOfEPerson]="false"
|
<ds-eperson-group-list [isListOfEPerson]="false"
|
||||||
(select)="updateGroupObjectSelected($event)"></ds-eperson-group-list>
|
(select)="updateGroupObjectSelected($event)"></ds-eperson-group-list>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgIf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -34,7 +34,7 @@ import { ErrorComponent } from '../../../../../../shared/error/error.component';
|
|||||||
styleUrls: ['./supervision-order-group-selector.component.scss'],
|
styleUrls: ['./supervision-order-group-selector.component.scss'],
|
||||||
templateUrl: './supervision-order-group-selector.component.html',
|
templateUrl: './supervision-order-group-selector.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [FormsModule, NgIf, ErrorComponent, EpersonGroupListComponent, TranslateModule],
|
imports: [FormsModule, ErrorComponent, EpersonGroupListComponent, TranslateModule],
|
||||||
})
|
})
|
||||||
export class SupervisionOrderGroupSelectorComponent {
|
export class SupervisionOrderGroupSelectorComponent {
|
||||||
|
|
||||||
|
@@ -1,15 +1,19 @@
|
|||||||
<ng-container *ngVar="(supervisionOrderEntries$ | async) as supervisionOrders">
|
<ng-container *ngVar="(supervisionOrderEntries$ | async) as supervisionOrders">
|
||||||
<div class="item-list-supervision" *ngIf="supervisionOrders?.length > 0">
|
@if (supervisionOrders?.length > 0) {
|
||||||
|
<div class="item-list-supervision">
|
||||||
<div>
|
<div>
|
||||||
<span>{{'workflow-item.search.result.list.element.supervised-by' | translate}} </span>
|
<span>{{'workflow-item.search.result.list.element.supervised-by' | translate}} </span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a class="badge bg-primary me-1 mb-1 text-capitalize mw-100 text-truncate" *ngFor="let supervisionOrder of supervisionOrders" data-test="soBadge"
|
@for (supervisionOrder of supervisionOrders; track supervisionOrder) {
|
||||||
|
<a class="badge bg-primary me-1 mb-1 text-capitalize mw-100 text-truncate" data-test="soBadge"
|
||||||
[ngbTooltip]="'workflow-item.search.result.list.element.supervised.remove-tooltip' | translate"
|
[ngbTooltip]="'workflow-item.search.result.list.element.supervised.remove-tooltip' | translate"
|
||||||
(click)="$event.preventDefault(); $event.stopImmediatePropagation(); deleteSupervisionOrder(supervisionOrder)" aria-label="Close">
|
(click)="$event.preventDefault(); $event.stopImmediatePropagation(); deleteSupervisionOrder(supervisionOrder)" aria-label="Close">
|
||||||
{{ dsoNameService.getName(supervisionOrder.group) }}
|
{{ dsoNameService.getName(supervisionOrder.group) }}
|
||||||
<span aria-hidden="true"> ×</span>
|
<span aria-hidden="true"> ×</span>
|
||||||
</a>
|
</a>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -42,7 +38,7 @@ export interface SupervisionOrderListEntry {
|
|||||||
templateUrl: './supervision-order-status.component.html',
|
templateUrl: './supervision-order-status.component.html',
|
||||||
styleUrls: ['./supervision-order-status.component.scss'],
|
styleUrls: ['./supervision-order-status.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [VarDirective, NgIf, NgFor, NgbTooltipModule, AsyncPipe, TranslateModule],
|
imports: [VarDirective, NgbTooltipModule, AsyncPipe, TranslateModule],
|
||||||
})
|
})
|
||||||
export class SupervisionOrderStatusComponent implements OnChanges {
|
export class SupervisionOrderStatusComponent implements OnChanges {
|
||||||
|
|
||||||
|
@@ -5,12 +5,18 @@
|
|||||||
|
|
||||||
<div class="space-children-mr">
|
<div class="space-children-mr">
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.workflow.item.delete' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 delete-link" [routerLink]="[getDeleteRoute()]" [title]="'admin.workflow.item.delete' | translate">
|
||||||
<i class="fa fa-trash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.workflow.item.delete" | translate}}</span>
|
<i class="fa fa-trash"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{"admin.workflow.item.delete" | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 policies-link" [routerLink]="resourcePoliciesPageRoute" [title]="'admin.workflow.item.policies' | translate">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 policies-link" [routerLink]="resourcePoliciesPageRoute" [title]="'admin.workflow.item.policies' | translate">
|
||||||
<i class="fas fa-edit"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{'admin.workflow.item.policies' | translate}}</span>
|
<i class="fas fa-edit"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{'admin.workflow.item.policies' | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 supervision-group-selector" [title]="'admin.workflow.item.supervision' | translate" (click)="openSupervisionModal()">
|
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 supervision-group-selector" [title]="'admin.workflow.item.supervision' | translate" (click)="openSupervisionModal()">
|
||||||
<i class="fas fa-users-cog"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{'admin.workflow.item.supervision' | translate}}</span>
|
<i class="fas fa-users-cog"></i>@if (!small) {
|
||||||
|
<span class="d-none d-sm-inline"> {{'admin.workflow.item.supervision' | translate}}</span>
|
||||||
|
}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { NgClass } from '@angular/common';
|
||||||
NgClass,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -52,7 +49,7 @@ import {
|
|||||||
styleUrls: ['./workspace-item-admin-workflow-actions.component.scss'],
|
styleUrls: ['./workspace-item-admin-workflow-actions.component.scss'],
|
||||||
templateUrl: './workspace-item-admin-workflow-actions.component.html',
|
templateUrl: './workspace-item-admin-workflow-actions.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [SupervisionOrderStatusComponent, NgClass, RouterLink, NgIf, TranslateModule],
|
imports: [SupervisionOrderStatusComponent, NgClass, RouterLink, TranslateModule],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying the actions for a list element for a workspace-item on the admin workflow search page
|
* The component for displaying the actions for a list element for a workspace-item on the admin workflow search page
|
||||||
|
@@ -7,6 +7,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<ul #buttons class="list-group list-group-flush">
|
<ul #buttons class="list-group list-group-flush">
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<ds-workflow-item-admin-workflow-actions-element *ngIf="object" class="d-flex justify-content-between" [wfi]="dso" [small]="true"></ds-workflow-item-admin-workflow-actions-element>
|
@if (object) {
|
||||||
|
<ds-workflow-item-admin-workflow-actions-element class="d-flex justify-content-between" [wfi]="dso" [small]="true"></ds-workflow-item-admin-workflow-actions-element>
|
||||||
|
}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { NgIf } from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
ComponentRef,
|
ComponentRef,
|
||||||
@@ -43,7 +43,7 @@ import { WorkflowItemAdminWorkflowActionsComponent } from '../../actions/workflo
|
|||||||
styleUrls: ['./workflow-item-search-result-admin-workflow-grid-element.component.scss'],
|
styleUrls: ['./workflow-item-search-result-admin-workflow-grid-element.component.scss'],
|
||||||
templateUrl: './workflow-item-search-result-admin-workflow-grid-element.component.html',
|
templateUrl: './workflow-item-search-result-admin-workflow-grid-element.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf, WorkflowItemAdminWorkflowActionsComponent, TranslateModule, DynamicComponentLoaderDirective],
|
imports: [WorkflowItemAdminWorkflowActionsComponent, TranslateModule, DynamicComponentLoaderDirective],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying a grid element for an workflow item on the admin workflow search page
|
* The component for displaying a grid element for an workflow item on the admin workflow search page
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
<div class="workflow-badge">
|
<div class="workflow-badge">
|
||||||
<span class="badge bg-info">{{ "admin.workflow.item.workflow" | translate }}</span>
|
<span class="badge bg-info">{{ "admin.workflow.item.workflow" | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
<ds-listable-object-component-loader *ngIf="item$ | async"
|
@if (item$ | async) {
|
||||||
|
<ds-listable-object-component-loader
|
||||||
[object]="item$ | async"
|
[object]="item$ | async"
|
||||||
[viewMode]="viewModes.ListElement"
|
[viewMode]="viewModes.ListElement"
|
||||||
[index]="index"
|
[index]="index"
|
||||||
[linkType]="linkType"
|
[linkType]="linkType"
|
||||||
[listID]="listID"></ds-listable-object-component-loader>
|
[listID]="listID"></ds-listable-object-component-loader>
|
||||||
|
}
|
||||||
<ds-workflow-item-admin-workflow-actions-element [wfi]="dso" [small]="false"></ds-workflow-item-admin-workflow-actions-element>
|
<ds-workflow-item-admin-workflow-actions-element [wfi]="dso" [small]="false"></ds-workflow-item-admin-workflow-actions-element>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Inject,
|
Inject,
|
||||||
@@ -42,7 +39,7 @@ import { WorkflowItemAdminWorkflowActionsComponent } from '../../actions/workflo
|
|||||||
styleUrls: ['./workflow-item-search-result-admin-workflow-list-element.component.scss'],
|
styleUrls: ['./workflow-item-search-result-admin-workflow-list-element.component.scss'],
|
||||||
templateUrl: './workflow-item-search-result-admin-workflow-list-element.component.html',
|
templateUrl: './workflow-item-search-result-admin-workflow-list-element.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf, ListableObjectComponentLoaderComponent, WorkflowItemAdminWorkflowActionsComponent, AsyncPipe, TranslateModule],
|
imports: [ListableObjectComponentLoaderComponent, WorkflowItemAdminWorkflowActionsComponent, AsyncPipe, TranslateModule],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying a list element for a workflow item on the admin workflow search page
|
* The component for displaying a list element for a workflow item on the admin workflow search page
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
<span class="badge bg-info">{{ "admin.workflow.item.workspace" | translate }}</span>
|
<span class="badge bg-info">{{ "admin.workflow.item.workspace" | translate }}</span>
|
||||||
<ds-listable-object-component-loader *ngIf="item$ | async"
|
@if (item$ | async) {
|
||||||
|
<ds-listable-object-component-loader
|
||||||
[object]="item$ | async"
|
[object]="item$ | async"
|
||||||
[viewMode]="viewModes.ListElement"
|
[viewMode]="viewModes.ListElement"
|
||||||
[index]="index"
|
[index]="index"
|
||||||
[linkType]="linkType"
|
[linkType]="linkType"
|
||||||
[listID]="listID"></ds-listable-object-component-loader>
|
[listID]="listID"></ds-listable-object-component-loader>
|
||||||
|
}
|
||||||
|
|
||||||
<ds-workspace-item-admin-workflow-actions-element [small]="false"
|
<ds-workspace-item-admin-workflow-actions-element [small]="false"
|
||||||
[supervisionOrderList]="supervisionOrder$ | async"
|
[supervisionOrderList]="supervisionOrder$ | async"
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Inject,
|
Inject,
|
||||||
@@ -52,7 +49,7 @@ import { WorkspaceItemAdminWorkflowActionsComponent } from '../../actions/worksp
|
|||||||
styleUrls: ['./workspace-item-search-result-admin-workflow-list-element.component.scss'],
|
styleUrls: ['./workspace-item-search-result-admin-workflow-list-element.component.scss'],
|
||||||
templateUrl: './workspace-item-search-result-admin-workflow-list-element.component.html',
|
templateUrl: './workspace-item-search-result-admin-workflow-list-element.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf, ListableObjectComponentLoaderComponent, WorkspaceItemAdminWorkflowActionsComponent, AsyncPipe, TranslateModule],
|
imports: [ListableObjectComponentLoaderComponent, WorkspaceItemAdminWorkflowActionsComponent, AsyncPipe, TranslateModule],
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* The component for displaying a list element for a workflow item on the admin workflow search page
|
* The component for displaying a list element for a workflow item on the admin workflow search page
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<ng-container *ngVar="(bitstreamRD$ | async) as bitstreamRD">
|
<ng-container *ngVar="(bitstreamRD$ | async) as bitstreamRD">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row" *ngIf="bitstreamRD?.hasSucceeded">
|
@if (bitstreamRD?.hasSucceeded) {
|
||||||
|
<div class="row">
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<ds-thumbnail [thumbnail]="bitstreamRD?.payload"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="bitstreamRD?.payload"></ds-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
@@ -12,7 +13,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ds-form *ngIf="formGroup" [formId]="'edit-bitstream-form-id'"
|
@if (formGroup) {
|
||||||
|
<ds-form [formId]="'edit-bitstream-form-id'"
|
||||||
[formGroup]="formGroup"
|
[formGroup]="formGroup"
|
||||||
[formModel]="formModel"
|
[formModel]="formModel"
|
||||||
[formLayout]="formLayout"
|
[formLayout]="formLayout"
|
||||||
@@ -24,10 +26,16 @@
|
|||||||
<a [routerLink]="['/bitstreams', bitstreamRD?.payload?.id, 'authorizations']">{{'bitstream.edit.authorizations.link' | translate}}</a>
|
<a [routerLink]="['/bitstreams', bitstreamRD?.payload?.id, 'authorizations']">{{'bitstream.edit.authorizations.link' | translate}}</a>
|
||||||
</div>
|
</div>
|
||||||
</ds-form>
|
</ds-form>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ds-error *ngIf="bitstreamRD?.hasFailed" message="{{'error.bitstream' | translate}}"></ds-error>
|
}
|
||||||
<ds-loading *ngIf="!bitstreamRD || bitstreamRD?.isLoading"
|
@if (bitstreamRD?.hasFailed) {
|
||||||
|
<ds-error message="{{'error.bitstream' | translate}}"></ds-error>
|
||||||
|
}
|
||||||
|
@if (!bitstreamRD || bitstreamRD?.isLoading) {
|
||||||
|
<ds-loading
|
||||||
message="{{'loading.bitstream' | translate}}"></ds-loading>
|
message="{{'loading.bitstream' | translate}}"></ds-loading>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
@@ -87,7 +84,6 @@ import { ThemedThumbnailComponent } from '../../thumbnail/themed-thumbnail.compo
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
imports: [
|
imports: [
|
||||||
FormComponent,
|
FormComponent,
|
||||||
NgIf,
|
|
||||||
VarDirective,
|
VarDirective,
|
||||||
ThemedThumbnailComponent,
|
ThemedThumbnailComponent,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
|
@@ -1,13 +1,15 @@
|
|||||||
<ng-container *ngVar="(breadcrumbs$ | async) as breadcrumbs">
|
<ng-container *ngVar="(breadcrumbs$ | async) as breadcrumbs">
|
||||||
<nav *ngIf="(showBreadcrumbs$ | async)" aria-label="breadcrumb" class="nav-breadcrumb">
|
@if ((showBreadcrumbs$ | async)) {
|
||||||
|
<nav aria-label="breadcrumb" class="nav-breadcrumb">
|
||||||
<ol class="container breadcrumb my-0">
|
<ol class="container breadcrumb my-0">
|
||||||
<ng-container
|
<ng-container
|
||||||
*ngTemplateOutlet="breadcrumbs?.length > 0 ? breadcrumb : activeBreadcrumb; context: {text: 'home.breadcrumbs', url: '/'}"></ng-container>
|
*ngTemplateOutlet="breadcrumbs?.length > 0 ? breadcrumb : activeBreadcrumb; context: {text: 'home.breadcrumbs', url: '/'}"></ng-container>
|
||||||
<ng-container *ngFor="let bc of breadcrumbs; let last = last;">
|
@for (bc of breadcrumbs; track bc; let last = $last) {
|
||||||
<ng-container *ngTemplateOutlet="!last ? breadcrumb : activeBreadcrumb; context: bc"></ng-container>
|
<ng-container *ngTemplateOutlet="!last ? breadcrumb : activeBreadcrumb; context: bc"></ng-container>
|
||||||
</ng-container>
|
}
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
|
}
|
||||||
|
|
||||||
<ng-template #breadcrumb let-text="text" let-url="url">
|
<ng-template #breadcrumb let-text="text" let-url="url">
|
||||||
<li class="breadcrumb-item"><div class="breadcrumb-item-limiter"><a [routerLink]="url" class="text-truncate" [ngbTooltip]="text | translate" placement="bottom" >{{text | translate}}</a></div></li>
|
<li class="breadcrumb-item"><div class="breadcrumb-item-limiter"><a [routerLink]="url" class="text-truncate" [ngbTooltip]="text | translate" placement="bottom" >{{text | translate}}</a></div></li>
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgFor,
|
|
||||||
NgIf,
|
|
||||||
NgTemplateOutlet,
|
NgTemplateOutlet,
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
@@ -22,7 +20,7 @@ import { BreadcrumbsService } from './breadcrumbs.service';
|
|||||||
templateUrl: './breadcrumbs.component.html',
|
templateUrl: './breadcrumbs.component.html',
|
||||||
styleUrls: ['./breadcrumbs.component.scss'],
|
styleUrls: ['./breadcrumbs.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [VarDirective, NgIf, NgTemplateOutlet, NgFor, RouterLink, NgbTooltipModule, AsyncPipe, TranslateModule],
|
imports: [VarDirective, NgTemplateOutlet, RouterLink, NgbTooltipModule, AsyncPipe, TranslateModule],
|
||||||
})
|
})
|
||||||
export class BreadcrumbsComponent {
|
export class BreadcrumbsComponent {
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
isPlatformServer,
|
isPlatformServer,
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
@@ -62,7 +61,6 @@ import {
|
|||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
ThemedBrowseByComponent,
|
ThemedBrowseByComponent,
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
<section class="comcol-page-browse-section" *ngIf="(!ssrRenderingDisabled)">
|
@if ((!ssrRenderingDisabled)) {
|
||||||
|
<section class="comcol-page-browse-section">
|
||||||
<div class="browse-by-metadata w-100">
|
<div class="browse-by-metadata w-100">
|
||||||
<ds-browse-by *ngIf="(loading$ | async) !== true" class="col-xs-12 w-100"
|
@if ((loading$ | async) !== true) {
|
||||||
|
<ds-browse-by class="col-xs-12 w-100"
|
||||||
title="{{'browse.title' | translate:{
|
title="{{'browse.title' | translate:{
|
||||||
field: 'browse.metadata.' + browseId | translate,
|
field: 'browse.metadata.' + browseId | translate,
|
||||||
startsWith: (startsWith)? ('browse.startsWith' | translate: { startsWith: '"' + startsWith + '"' }) : '',
|
startsWith: (startsWith)? ('browse.startsWith' | translate: { startsWith: '"' + startsWith + '"' }) : '',
|
||||||
@@ -15,7 +17,11 @@
|
|||||||
(prev)="goPrev()"
|
(prev)="goPrev()"
|
||||||
(next)="goNext()">
|
(next)="goNext()">
|
||||||
</ds-browse-by>
|
</ds-browse-by>
|
||||||
<ds-loading *ngIf="loading$ | async"
|
}
|
||||||
|
@if (loading$ | async) {
|
||||||
|
<ds-loading
|
||||||
message="{{'loading.browse-by-page' | translate}}"></ds-loading>
|
message="{{'loading.browse-by-page' | translate}}"></ds-loading>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
}
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
isPlatformServer,
|
isPlatformServer,
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -69,7 +68,6 @@ export const BBM_PAGINATION_ID = 'bbm';
|
|||||||
templateUrl: './browse-by-metadata.component.html',
|
templateUrl: './browse-by-metadata.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
ThemedBrowseByComponent,
|
ThemedBrowseByComponent,
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
<section>
|
<section>
|
||||||
<h1 *ngIf="displayTitle">
|
@if (displayTitle) {
|
||||||
|
<h1>
|
||||||
{{ ('browse.title') | translate:{
|
{{ ('browse.title') | translate:{
|
||||||
field: 'browse.metadata.' + vocabularyName | translate,
|
field: 'browse.metadata.' + vocabularyName | translate,
|
||||||
startsWith: '',
|
startsWith: '',
|
||||||
value: '',
|
value: '',
|
||||||
} }}
|
} }}
|
||||||
</h1>
|
</h1>
|
||||||
|
}
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<ds-vocabulary-treeview [description]="description"
|
<ds-vocabulary-treeview [description]="description"
|
||||||
[vocabularyOptions]=vocabularyOptions
|
[vocabularyOptions]=vocabularyOptions
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
Input,
|
Input,
|
||||||
@@ -52,7 +49,6 @@ import { BrowseByDataType } from '../browse-by-switcher/browse-by-data-type';
|
|||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
ComcolPageHeaderComponent,
|
ComcolPageHeaderComponent,
|
||||||
ComcolPageLogoComponent,
|
ComcolPageLogoComponent,
|
||||||
NgIf,
|
|
||||||
ThemedComcolPageHandleComponent,
|
ThemedComcolPageHandleComponent,
|
||||||
ThemedComcolPageContentComponent,
|
ThemedComcolPageContentComponent,
|
||||||
DsoEditMenuComponent,
|
DsoEditMenuComponent,
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
isPlatformServer,
|
isPlatformServer,
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -39,7 +38,6 @@ import {
|
|||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
ThemedBrowseByComponent,
|
ThemedBrowseByComponent,
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgClass,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component,
|
Component,
|
||||||
@@ -64,8 +60,6 @@ import {
|
|||||||
UploaderComponent,
|
UploaderComponent,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
ComcolPageLogoComponent,
|
ComcolPageLogoComponent,
|
||||||
NgIf,
|
|
||||||
NgClass,
|
|
||||||
VarDirective,
|
VarDirective,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
@@ -39,7 +39,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="performedSearch">
|
@if (performedSearch) {
|
||||||
|
<div>
|
||||||
<ds-item-select class="mt-2"
|
<ds-item-select class="mt-2"
|
||||||
[key]="'map'"
|
[key]="'map'"
|
||||||
[dsoRD$]="mappedItemsRD$"
|
[dsoRD$]="mappedItemsRD$"
|
||||||
@@ -50,9 +51,12 @@
|
|||||||
(confirm)="mapItems($event)"
|
(confirm)="mapItems($event)"
|
||||||
(cancel)="onCancel()"></ds-item-select>
|
(cancel)="onCancel()"></ds-item-select>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!performedSearch" class="alert alert-info w-100" role="alert">
|
}
|
||||||
|
@if (!performedSearch) {
|
||||||
|
<div class="alert alert-info w-100" role="alert">
|
||||||
{{'collection.edit.item-mapper.no-search' | translate}}
|
{{'collection.edit.item-mapper.no-search' | translate}}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
Component,
|
Component,
|
||||||
@@ -86,7 +83,6 @@ import { followLink } from '../../shared/utils/follow-link-config.model';
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
ItemSelectComponent,
|
ItemSelectComponent,
|
||||||
NgIf,
|
|
||||||
BrowserOnlyPipe,
|
BrowserOnlyPipe,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="collection-page"
|
<div class="collection-page"
|
||||||
*ngVar="(collectionRD$ | async) as collectionRD">
|
*ngVar="(collectionRD$ | async) as collectionRD">
|
||||||
<div *ngIf="collectionRD?.hasSucceeded" @fadeInOut>
|
@if (collectionRD?.hasSucceeded) {
|
||||||
<div *ngIf="collectionRD?.payload as collection">
|
<div @fadeInOut>
|
||||||
|
@if (collectionRD?.payload; as collection) {
|
||||||
|
<div>
|
||||||
<ds-view-tracker [object]="collection"></ds-view-tracker>
|
<ds-view-tracker [object]="collection"></ds-view-tracker>
|
||||||
<div class="d-flex flex-row border-bottom mb-4 pb-4">
|
<div class="d-flex flex-row border-bottom mb-4 pb-4">
|
||||||
<header class="comcol-header me-auto">
|
<header class="comcol-header me-auto">
|
||||||
@@ -11,11 +13,12 @@
|
|||||||
[name]="dsoNameService.getName(collection)">
|
[name]="dsoNameService.getName(collection)">
|
||||||
</ds-comcol-page-header>
|
</ds-comcol-page-header>
|
||||||
<!-- Collection logo -->
|
<!-- Collection logo -->
|
||||||
<ds-comcol-page-logo *ngIf="logoRD$"
|
@if (logoRD$) {
|
||||||
|
<ds-comcol-page-logo
|
||||||
[logo]="(logoRD$ | async)?.payload"
|
[logo]="(logoRD$ | async)?.payload"
|
||||||
[alternateText]="'collection.logo' | translate">
|
[alternateText]="'collection.logo' | translate">
|
||||||
</ds-comcol-page-logo>
|
</ds-comcol-page-logo>
|
||||||
|
}
|
||||||
<!-- Handle -->
|
<!-- Handle -->
|
||||||
<ds-comcol-page-handle
|
<ds-comcol-page-handle
|
||||||
[content]="collection.handle"
|
[content]="collection.handle"
|
||||||
@@ -41,21 +44,28 @@
|
|||||||
[id]="collection.id"
|
[id]="collection.id"
|
||||||
[contentType]="collection.type">
|
[contentType]="collection.type">
|
||||||
</ds-comcol-page-browse-by>
|
</ds-comcol-page-browse-by>
|
||||||
|
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
</section>
|
</section>
|
||||||
<footer *ngIf="collection.copyrightText" class="border-top my-5 pt-4">
|
@if (collection.copyrightText) {
|
||||||
|
<footer class="border-top my-5 pt-4">
|
||||||
<!-- Copyright -->
|
<!-- Copyright -->
|
||||||
<ds-comcol-page-content
|
<ds-comcol-page-content
|
||||||
[content]="collection.copyrightText"
|
[content]="collection.copyrightText"
|
||||||
[hasInnerHtml]="true">
|
[hasInnerHtml]="true">
|
||||||
</ds-comcol-page-content>
|
</ds-comcol-page-content>
|
||||||
</footer>
|
</footer>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<ds-error *ngIf="collectionRD?.hasFailed"
|
}
|
||||||
|
@if (collectionRD?.hasFailed) {
|
||||||
|
<ds-error
|
||||||
message="{{'error.collection' | translate}}"></ds-error>
|
message="{{'error.collection' | translate}}"></ds-error>
|
||||||
<ds-loading *ngIf="collectionRD?.isLoading"
|
}
|
||||||
|
@if (collectionRD?.isLoading) {
|
||||||
|
<ds-loading
|
||||||
message="{{'loading.collection' | translate}}"></ds-loading>
|
message="{{'loading.collection' | translate}}"></ds-loading>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
Component,
|
Component,
|
||||||
@@ -65,7 +62,6 @@ import { getCollectionPageRoute } from './collection-page-routing-paths';
|
|||||||
imports: [
|
imports: [
|
||||||
ThemedComcolPageContentComponent,
|
ThemedComcolPageContentComponent,
|
||||||
ErrorComponent,
|
ErrorComponent,
|
||||||
NgIf,
|
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
ViewTrackerComponent,
|
ViewTrackerComponent,
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
<div class="container" *ngIf="(isLoading$ | async) === false">
|
@if ((isLoading$ | async) === false) {
|
||||||
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 pb-4">
|
<div class="col-12 pb-4">
|
||||||
<h1 id="sub-header"
|
<h1 id="sub-header"
|
||||||
@@ -9,7 +10,10 @@
|
|||||||
[isCreation]="true"
|
[isCreation]="true"
|
||||||
(back)="navigateToHome()"></ds-collection-form>
|
(back)="navigateToHome()"></ds-collection-form>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<ds-loading *ngIf="isLoading$ | async"></ds-loading>
|
@if (isLoading$ | async) {
|
||||||
|
<ds-loading></ds-loading>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import {
|
import {
|
||||||
@@ -32,7 +29,6 @@ import { CollectionFormComponent } from '../collection-form/collection-form.comp
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
ThemedLoadingComponent,
|
ThemedLoadingComponent,
|
||||||
NgIf,
|
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
})
|
})
|
||||||
|
@@ -10,8 +10,12 @@
|
|||||||
<i class="fas fa-times"></i> {{'collection.delete.cancel' | translate}}
|
<i class="fas fa-times"></i> {{'collection.delete.cancel' | translate}}
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-danger" (click)="onConfirm(dso)" [dsBtnDisabled]="(processing$ | async)">
|
<button class="btn btn-danger" (click)="onConfirm(dso)" [dsBtnDisabled]="(processing$ | async)">
|
||||||
<span *ngIf="processing$ | async"><i class='fas fa-circle-notch fa-spin'></i> {{'collection.delete.processing' | translate}}</span>
|
@if (processing$ | async) {
|
||||||
<span *ngIf="(processing$ | async) !== true"><i class="fas fa-trash"></i> {{'collection.delete.confirm' | translate}}</span>
|
<span><i class='fas fa-circle-notch fa-spin'></i> {{'collection.delete.processing' | translate}}</span>
|
||||||
|
}
|
||||||
|
@if ((processing$ | async) !== true) {
|
||||||
|
<span><i class="fas fa-trash"></i> {{'collection.delete.confirm' | translate}}</span>
|
||||||
|
}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
ActivatedRoute,
|
ActivatedRoute,
|
||||||
@@ -30,7 +27,6 @@ import { VarDirective } from '../../shared/utils/var.directive';
|
|||||||
imports: [
|
imports: [
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
VarDirective,
|
VarDirective,
|
||||||
BtnDisabledDirective,
|
BtnDisabledDirective,
|
||||||
],
|
],
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
|
@if (itemRD$ | async; as itemRD) {
|
||||||
<ds-access-control-form-container
|
<ds-access-control-form-container
|
||||||
titleMessage="collection-access-control-title"
|
titleMessage="collection-access-control-title"
|
||||||
*ngIf="itemRD$ | async as itemRD"
|
|
||||||
[itemRD]="itemRD"
|
[itemRD]="itemRD"
|
||||||
[showLimitToSpecificBitstreams]="false">
|
[showLimitToSpecificBitstreams]="false">
|
||||||
</ds-access-control-form-container>
|
</ds-access-control-form-container>
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnInit,
|
OnInit,
|
||||||
@@ -21,7 +18,6 @@ import { AccessControlFormContainerComponent } from '../../../shared/access-cont
|
|||||||
styleUrls: ['./collection-access-control.component.scss'],
|
styleUrls: ['./collection-access-control.component.scss'],
|
||||||
imports: [
|
imports: [
|
||||||
AccessControlFormContainerComponent,
|
AccessControlFormContainerComponent,
|
||||||
NgIf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -1,19 +1,25 @@
|
|||||||
<div class="container-fluid mb-2" *ngVar="(itemTemplateRD$ | async) as itemTemplateRD">
|
<div class="container-fluid mb-2" *ngVar="(itemTemplateRD$ | async) as itemTemplateRD">
|
||||||
<span class="d-inline-block mb-2">{{ 'collection.edit.template.label' | translate}}</span>
|
<span class="d-inline-block mb-2">{{ 'collection.edit.template.label' | translate}}</span>
|
||||||
<div class="button-row space-children-mr">
|
<div class="button-row space-children-mr">
|
||||||
<button *ngIf="!itemTemplateRD?.payload" class="btn btn-success" (click)="addItemTemplate()">
|
@if (!itemTemplateRD?.payload) {
|
||||||
|
<button class="btn btn-success" (click)="addItemTemplate()">
|
||||||
<i class="fas fa-plus" aria-hidden="true"></i>
|
<i class="fas fa-plus" aria-hidden="true"></i>
|
||||||
<span class="d-none d-sm-inline"> {{"collection.edit.template.add-button" | translate}}</span>
|
<span class="d-none d-sm-inline"> {{"collection.edit.template.add-button" | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="itemTemplateRD?.payload" class="btn btn-danger" (click)="deleteItemTemplate()">
|
}
|
||||||
|
@if (itemTemplateRD?.payload) {
|
||||||
|
<button class="btn btn-danger" (click)="deleteItemTemplate()">
|
||||||
<i class="fas fa-trash-alt" aria-hidden="true"></i>
|
<i class="fas fa-trash-alt" aria-hidden="true"></i>
|
||||||
<span class="d-none d-sm-inline"> {{"collection.edit.template.delete-button" | translate}}</span>
|
<span class="d-none d-sm-inline"> {{"collection.edit.template.delete-button" | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="itemTemplateRD?.payload" class="btn btn-primary"
|
}
|
||||||
|
@if (itemTemplateRD?.payload) {
|
||||||
|
<button class="btn btn-primary"
|
||||||
[routerLink]="'/collections/' + (dsoRD$ | async)?.payload.uuid + '/itemtemplate'">
|
[routerLink]="'/collections/' + (dsoRD$ | async)?.payload.uuid + '/itemtemplate'">
|
||||||
<i class="fas fa-edit" aria-hidden="true"></i>
|
<i class="fas fa-edit" aria-hidden="true"></i>
|
||||||
<span class="d-none d-sm-inline"> {{"collection.edit.template.edit-button" | translate}}</span>
|
<span class="d-none d-sm-inline"> {{"collection.edit.template.edit-button" | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ds-collection-form [dso]="(dsoRD$ | async)?.payload"
|
<ds-collection-form [dso]="(dsoRD$ | async)?.payload"
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component,
|
Component,
|
||||||
@@ -56,7 +53,6 @@ import { getCollectionItemTemplateRoute } from '../../collection-page-routing-pa
|
|||||||
RouterLink,
|
RouterLink,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
NgIf,
|
|
||||||
VarDirective,
|
VarDirective,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
<div class="custom-alignment">
|
<div class="custom-alignment">
|
||||||
|
@for (comcolRole of comcolRoles$ | async; track comcolRole) {
|
||||||
<ds-comcol-role
|
<ds-comcol-role
|
||||||
*ngFor="let comcolRole of comcolRoles$ | async"
|
|
||||||
[dso]="collection$ | async"
|
[dso]="collection$ | async"
|
||||||
[comcolRole]="comcolRole"
|
[comcolRole]="comcolRole"
|
||||||
>
|
>
|
||||||
</ds-comcol-role>
|
</ds-comcol-role>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgForOf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
OnInit,
|
OnInit,
|
||||||
@@ -31,7 +28,6 @@ import { hasValue } from '../../../shared/empty.util';
|
|||||||
templateUrl: './collection-roles.component.html',
|
templateUrl: './collection-roles.component.html',
|
||||||
imports: [
|
imports: [
|
||||||
ComcolRoleComponent,
|
ComcolRoleComponent,
|
||||||
NgForOf,
|
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
],
|
],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
<div *ngVar="(contentSource$ |async) as contentSource">
|
<div *ngVar="(contentSource$ |async) as contentSource">
|
||||||
<div class="container-fluid space-children-mr" *ngIf="shouldShow">
|
@if (shouldShow) {
|
||||||
|
<div class="container-fluid space-children-mr">
|
||||||
<h3>{{ 'collection.source.controls.head' | translate }}</h3>
|
<h3>{{ 'collection.source.controls.head' | translate }}</h3>
|
||||||
<div>
|
<div>
|
||||||
<span class="fw-bold">{{'collection.source.controls.harvest.status' | translate}}</span>
|
<span class="fw-bold">{{'collection.source.controls.harvest.status' | translate}}</span>
|
||||||
@@ -17,38 +18,48 @@
|
|||||||
<span class="fw-bold">{{'collection.source.controls.harvest.message' | translate}}</span>
|
<span class="fw-bold">{{'collection.source.controls.harvest.message' | translate}}</span>
|
||||||
<span>{{contentSource?.message ? contentSource?.message: 'collection.source.controls.harvest.no-information'|translate }}</span>
|
<span>{{contentSource?.message ? contentSource?.message: 'collection.source.controls.harvest.no-information'|translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@if ((testConfigRunning$ |async) !== true) {
|
||||||
<button *ngIf="(testConfigRunning$ |async) !== true" class="btn btn-secondary"
|
<button class="btn btn-secondary"
|
||||||
[dsBtnDisabled]="!(isEnabled)"
|
[dsBtnDisabled]="!(isEnabled)"
|
||||||
(click)="testConfiguration(contentSource)">
|
(click)="testConfiguration(contentSource)">
|
||||||
<span>{{'collection.source.controls.test.submit' | translate}}</span>
|
<span>{{'collection.source.controls.test.submit' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="(testConfigRunning$ |async)" class="btn btn-secondary"
|
}
|
||||||
|
@if ((testConfigRunning$ |async)) {
|
||||||
|
<button class="btn btn-secondary"
|
||||||
[dsBtnDisabled]="true">
|
[dsBtnDisabled]="true">
|
||||||
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
||||||
<span>{{'collection.source.controls.test.running' | translate}}</span>
|
<span>{{'collection.source.controls.test.running' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="(importRunning$ |async) !== true" class="btn btn-primary"
|
}
|
||||||
|
@if ((importRunning$ |async) !== true) {
|
||||||
|
<button class="btn btn-primary"
|
||||||
[dsBtnDisabled]="!(isEnabled)"
|
[dsBtnDisabled]="!(isEnabled)"
|
||||||
(click)="importNow()">
|
(click)="importNow()">
|
||||||
<span class="d-none d-sm-inline">{{'collection.source.controls.import.submit' | translate}}</span>
|
<span class="d-none d-sm-inline">{{'collection.source.controls.import.submit' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="(importRunning$ |async)" class="btn btn-primary"
|
}
|
||||||
|
@if ((importRunning$ |async)) {
|
||||||
|
<button class="btn btn-primary"
|
||||||
[dsBtnDisabled]="true">
|
[dsBtnDisabled]="true">
|
||||||
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
||||||
<span class="d-none d-sm-inline">{{'collection.source.controls.import.running' | translate}}</span>
|
<span class="d-none d-sm-inline">{{'collection.source.controls.import.running' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="(reImportRunning$ |async) !== true" class="btn btn-primary"
|
}
|
||||||
|
@if ((reImportRunning$ |async) !== true) {
|
||||||
|
<button class="btn btn-primary"
|
||||||
[dsBtnDisabled]="!(isEnabled)"
|
[dsBtnDisabled]="!(isEnabled)"
|
||||||
(click)="resetAndReimport()">
|
(click)="resetAndReimport()">
|
||||||
<span class="d-none d-sm-inline"> {{'collection.source.controls.reset.submit' | translate}}</span>
|
<span class="d-none d-sm-inline"> {{'collection.source.controls.reset.submit' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="(reImportRunning$ |async)" class="btn btn-primary"
|
}
|
||||||
|
@if ((reImportRunning$ |async)) {
|
||||||
|
<button class="btn btn-primary"
|
||||||
[dsBtnDisabled]="true">
|
[dsBtnDisabled]="true">
|
||||||
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
<span class="spinner-border spinner-border-sm spinner-button" role="status" aria-hidden="true"></span>
|
||||||
<span class="d-none d-sm-inline"> {{'collection.source.controls.reset.running' | translate}}</span>
|
<span class="d-none d-sm-inline"> {{'collection.source.controls.reset.running' | translate}}</span>
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
import {
|
import { AsyncPipe } from '@angular/common';
|
||||||
AsyncPipe,
|
|
||||||
NgIf,
|
|
||||||
} from '@angular/common';
|
|
||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
@@ -55,7 +52,6 @@ import { VarDirective } from '../../../../shared/utils/var.directive';
|
|||||||
imports: [
|
imports: [
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
|
||||||
VarDirective,
|
VarDirective,
|
||||||
BtnDisabledDirective,
|
BtnDisabledDirective,
|
||||||
],
|
],
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user