[DURACOM-307] start migration and type fixing

This commit is contained in:
FrancescoMolinaro
2025-02-05 18:33:54 +01:00
parent b9e164de78
commit 069fd02517
598 changed files with 5674 additions and 6015 deletions

View File

@@ -1,8 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -59,14 +55,12 @@ 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
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,4 +1,4 @@
import { NgIf } from '@angular/common';
import { import {
Component, Component,
ViewChild, ViewChild,
@@ -16,8 +16,7 @@ import { AccessControlFormContainerComponent } from '../../../shared/access-cont
imports: [ imports: [
NgbAccordionModule, NgbAccordionModule,
TranslateModule, TranslateModule,
NgIf, AccessControlFormContainerComponent
AccessControlFormContainerComponent,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnDestroy, OnDestroy,
@@ -72,13 +67,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,
}) })

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgFor,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
@@ -84,8 +79,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,
@@ -93,7 +86,7 @@ import { ValidateEmailNotTaken } from './validators/email-taken.validator';
PaginationComponent, PaginationComponent,
RouterLink, RouterLink,
HasNoValuePipe, HasNoValuePipe,
BtnDisabledDirective, BtnDisabledDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
@@ -92,12 +89,11 @@ import { ValidateGroupExists } from './validators/group-exists.validator';
imports: [ imports: [
FormComponent, FormComponent,
AlertComponent, AlertComponent,
NgIf,
AsyncPipe, AsyncPipe,
TranslateModule, TranslateModule,
ContextHelpDirective, ContextHelpDirective,
MembersListComponent, MembersListComponent,
SubgroupsListComponent, SubgroupsListComponent
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -109,12 +104,10 @@ export interface EPersonListActionConfig {
ContextHelpDirective, ContextHelpDirective,
ReactiveFormsModule, ReactiveFormsModule,
PaginationComponent, PaginationComponent,
NgIf,
AsyncPipe, AsyncPipe,
RouterLink, RouterLink,
NgClass, NgClass,
NgForOf, BtnDisabledDirective
BtnDisabledDirective,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -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,
}) })

View File

@@ -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,13 +73,9 @@ 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,
}) })

View File

@@ -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,11 +33,10 @@ 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,
FileDropzoneNoUploaderComponent, FileDropzoneNoUploaderComponent
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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,10 +73,8 @@ import { notifyPatterns } from '../ldn-services-patterns/ldn-service-coar-patter
imports: [ imports: [
ReactiveFormsModule, ReactiveFormsModule,
TranslateModule, TranslateModule,
NgIf,
NgbDropdownModule, NgbDropdownModule,
NgForOf, AsyncPipe
AsyncPipe,
], ],
}) })
export class LdnServiceFormComponent implements OnInit, OnDestroy { export class LdnServiceFormComponent implements OnInit, OnDestroy {

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgFor,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
ChangeDetectorRef, ChangeDetectorRef,
@@ -54,15 +49,13 @@ 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,
TruncatableComponent, TruncatableComponent,
TruncatablePartComponent, TruncatablePartComponent,
NgClass, NgClass,
RouterLink, RouterLink
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Inject, Inject,
@@ -46,9 +43,8 @@ import {
imports: [ imports: [
AdminNotifyMetricsComponent, AdminNotifyMetricsComponent,
RouterLink, RouterLink,
NgIf,
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe
], ],
}) })

View File

@@ -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>

View File

@@ -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,
], ],
}) })
/** /**

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Inject, Inject,
@@ -38,8 +35,7 @@ import { ThemedSearchComponent } from '../../../../shared/search/themed-search.c
SearchLabelsComponent, SearchLabelsComponent,
ThemedSearchComponent, ThemedSearchComponent,
AsyncPipe, AsyncPipe,
TranslateModule, TranslateModule
NgIf,
], ],
}) })

View File

@@ -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>
}

View File

@@ -1,4 +1,4 @@
import { NgForOf } from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -16,8 +16,7 @@ import { AdminNotifyMetricsRow } from './admin-notify-metrics.model';
standalone: true, standalone: true,
imports: [ imports: [
NotificationBoxComponent, NotificationBoxComponent,
TranslateModule, TranslateModule
NgForOf,
], ],
}) })
/** /**

View File

@@ -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>

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, DatePipe } from '@angular/common';
AsyncPipe,
DatePipe,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Inject, Inject,
@@ -42,13 +37,11 @@ import { AdminNotifyMessagesService } from '../services/admin-notify-messages.se
standalone: true, standalone: true,
imports: [ imports: [
TranslateModule, TranslateModule,
NgForOf,
NgIf,
DatePipe, DatePipe,
AsyncPipe, AsyncPipe,
TruncatableComponent, TruncatableComponent,
TruncatablePartComponent, TruncatablePartComponent,
RouterLink, RouterLink
], ],
}) })
/** /**

View File

@@ -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,
}) })

View File

@@ -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>
}

View File

@@ -1,4 +1,4 @@
import { NgIf } from '@angular/common';
import { import {
Component, Component,
EventEmitter, EventEmitter,
@@ -34,8 +34,7 @@ import { getBitstreamFormatsModuleRoute } from '../../admin-registries-routing-p
selector: 'ds-bitstream-format-form', selector: 'ds-bitstream-format-form',
templateUrl: './format-form.component.html', templateUrl: './format-form.component.html',
imports: [ imports: [
FormComponent, FormComponent
NgIf,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnDestroy, OnDestroy,
@@ -49,10 +44,8 @@ import { MetadataSchemaFormComponent } from './metadata-schema-form/metadata-sch
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
PaginationComponent, PaginationComponent,
NgIf,
NgForOf,
NgClass, NgClass,
RouterLink, RouterLink
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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"

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
EventEmitter, EventEmitter,
@@ -39,10 +36,9 @@ 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
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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"

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
EventEmitter, EventEmitter,
@@ -35,10 +32,9 @@ 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
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgForOf,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnDestroy, OnDestroy,
@@ -59,10 +54,8 @@ import { MetadataFieldFormComponent } from './metadata-field-form/metadata-field
MetadataFieldFormComponent, MetadataFieldFormComponent,
TranslateModule, TranslateModule,
PaginationComponent, PaginationComponent,
NgIf,
NgForOf,
NgClass, NgClass,
RouterLink, RouterLink
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,7 +1,4 @@
import { import { KeyValuePipe } from '@angular/common';
KeyValuePipe,
NgForOf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -36,8 +33,7 @@ import { FilteredCollections } from './filtered-collections.model';
TranslateModule, TranslateModule,
NgbAccordionModule, NgbAccordionModule,
FiltersComponent, FiltersComponent,
KeyValuePipe, KeyValuePipe
NgForOf,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,8 +1,10 @@
import { Item } from 'src/app/core/shared/item.model'; import { Item } from 'src/app/core/shared/item.model';
import { Observable } from "rxjs";
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;
}

View File

@@ -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">&nbsp;</div> <div class="row">&nbsp;</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>

View File

@@ -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,13 @@ 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,10 +57,8 @@ import { QueryPredicate } from './query-predicate.model';
NgbAccordionModule, NgbAccordionModule,
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
NgIf,
NgForOf,
FiltersComponent, FiltersComponent,
BtnDisabledDirective, BtnDisabledDirective
], ],
standalone: true, standalone: true,
}) })
@@ -81,7 +74,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(

View File

@@ -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();

View File

@@ -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();

View File

@@ -1,4 +1,4 @@
import { NgForOf } from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -23,9 +23,8 @@ 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
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -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

View File

@@ -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>
}

View File

@@ -1,10 +1,4 @@
import { import { AsyncPipe, NgClass, NgComponentOutlet } from '@angular/common';
AsyncPipe,
NgClass,
NgComponentOutlet,
NgFor,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
HostListener, HostListener,
@@ -47,7 +41,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 {
/** /**

View File

@@ -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>

View File

@@ -1,10 +1,4 @@
import { import { AsyncPipe, NgClass, NgComponentOutlet } from '@angular/common';
AsyncPipe,
NgClass,
NgComponentOutlet,
NgFor,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Inject, Inject,
@@ -37,7 +31,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 {

View File

@@ -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>

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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,
@@ -95,7 +91,7 @@ import { ThemedThumbnailComponent } from '../../thumbnail/themed-thumbnail.compo
ErrorComponent, ErrorComponent,
ThemedLoadingComponent, ThemedLoadingComponent,
TranslateModule, TranslateModule,
FileSizePipe, FileSizePipe
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
AsyncPipe,
NgFor,
NgIf,
NgTemplateOutlet,
} from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterLink } from '@angular/router'; import { RouterLink } from '@angular/router';
import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
@@ -22,7 +17,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 {

View File

@@ -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: '&quot;' + startsWith + '&quot;' }) : '', startsWith: (startsWith)? ('browse.startsWith' | translate: { startsWith: '&quot;' + startsWith + '&quot;' }) : '',
@@ -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>
}

View File

@@ -1,8 +1,4 @@
import { import { AsyncPipe, isPlatformServer } from '@angular/common';
AsyncPipe,
isPlatformServer,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Inject, Inject,
@@ -69,10 +65,9 @@ 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
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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

View File

@@ -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,
@@ -61,7 +57,7 @@ import { BrowseByDataType } from '../browse-by-switcher/browse-by-data-type';
ThemedLoadingComponent, ThemedLoadingComponent,
ThemedBrowseByComponent, ThemedBrowseByComponent,
VocabularyTreeviewComponent, VocabularyTreeviewComponent,
RouterLink, RouterLink
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
@@ -86,8 +83,7 @@ import { followLink } from '../../shared/utils/follow-link-config.model';
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
ItemSelectComponent, ItemSelectComponent,
NgIf, BrowserOnlyPipe
BrowserOnlyPipe,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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,
@@ -77,7 +73,7 @@ import { getCollectionPageRoute } from './collection-page-routing-paths';
DsoEditMenuComponent, DsoEditMenuComponent,
ThemedComcolPageBrowseByComponent, ThemedComcolPageBrowseByComponent,
ObjectCollectionComponent, ObjectCollectionComponent,
RouterOutlet, RouterOutlet
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>

View File

@@ -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 {
@@ -31,8 +28,7 @@ import { CollectionFormComponent } from '../collection-form/collection-form.comp
CollectionFormComponent, CollectionFormComponent,
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
ThemedLoadingComponent, ThemedLoadingComponent
NgIf,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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,9 +27,8 @@ import { VarDirective } from '../../shared/utils/var.directive';
imports: [ imports: [
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
NgIf,
VarDirective, VarDirective,
BtnDisabledDirective, BtnDisabledDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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>
}

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -21,8 +18,7 @@ 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,
}) })

View File

@@ -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">&nbsp;{{"collection.edit.template.add-button" | translate}}</span> <span class="d-none d-sm-inline">&nbsp;{{"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">&nbsp;{{"collection.edit.template.delete-button" | translate}}</span> <span class="d-none d-sm-inline">&nbsp;{{"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">&nbsp;{{"collection.edit.template.edit-button" | translate}}</span> <span class="d-none d-sm-inline">&nbsp;{{"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"

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
@@ -56,8 +53,7 @@ import { getCollectionItemTemplateRoute } from '../../collection-page-routing-pa
RouterLink, RouterLink,
AsyncPipe, AsyncPipe,
TranslateModule, TranslateModule,
NgIf, VarDirective
VarDirective,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgForOf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -31,8 +28,7 @@ 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,
}) })

View File

@@ -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,9 +52,8 @@ import { VarDirective } from '../../../../shared/utils/var.directive';
imports: [ imports: [
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
NgIf,
VarDirective, VarDirective,
BtnDisabledDirective, BtnDisabledDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,8 +1,4 @@
import { import { AsyncPipe, Location } from '@angular/common';
AsyncPipe,
Location,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnDestroy, OnDestroy,
@@ -78,11 +74,10 @@ import { CollectionSourceControlsComponent } from './collection-source-controls/
imports: [ imports: [
AsyncPipe, AsyncPipe,
TranslateModule, TranslateModule,
NgIf,
ThemedLoadingComponent, ThemedLoadingComponent,
FormComponent, FormComponent,
CollectionSourceControlsComponent, CollectionSourceControlsComponent,
BtnDisabledDirective, BtnDisabledDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,13 +1,17 @@
<div class="container" *ngVar="(collectionRD$ | async)?.payload as collection"> <div class="container" *ngVar="(collectionRD$ | async)?.payload as collection">
<div class="row"> <div class="row">
<div class="col-12" *ngVar="(itemRD$ | async) as itemRD"> <div class="col-12" *ngVar="(itemRD$ | async) as itemRD">
<ng-container *ngIf="itemRD?.hasSucceeded"> @if (itemRD?.hasSucceeded) {
<h1 class="border-bottom">{{ 'collection.edit.template.head' | translate:{ collection: dsoNameService.getName(collection) } }}</h1> <h1 class="border-bottom">{{ 'collection.edit.template.head' | translate:{ collection: dsoNameService.getName(collection) } }}</h1>
<ds-dso-edit-metadata [updateDataService]="itemTemplateService" [dso]="itemRD?.payload"></ds-dso-edit-metadata> <ds-dso-edit-metadata [updateDataService]="itemTemplateService" [dso]="itemRD?.payload"></ds-dso-edit-metadata>
<button [routerLink]="getCollectionEditUrl(collection)" class="btn btn-outline-secondary">{{ 'collection.edit.template.cancel' | translate }}</button> <button [routerLink]="getCollectionEditUrl(collection)" class="btn btn-outline-secondary">{{ 'collection.edit.template.cancel' | translate }}</button>
</ng-container> }
<ds-loading *ngIf="itemRD?.isLoading" [message]="'collection.edit.template.loading' | translate"></ds-loading> @if (itemRD?.isLoading) {
<ds-alert *ngIf="itemRD?.hasFailed" [type]="AlertTypeEnum.Error" [content]="'collection.edit.template.error' | translate"></ds-alert> <ds-loading [message]="'collection.edit.template.loading' | translate"></ds-loading>
}
@if (itemRD?.hasFailed) {
<ds-alert [type]="AlertTypeEnum.Error" [content]="'collection.edit.template.error' | translate"></ds-alert>
}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -39,10 +36,9 @@ import { getCollectionEditRoute } from '../collection-page-routing-paths';
RouterLink, RouterLink,
AsyncPipe, AsyncPipe,
VarDirective, VarDirective,
NgIf,
TranslateModule, TranslateModule,
ThemedLoadingComponent, ThemedLoadingComponent,
AlertComponent, AlertComponent
], ],
standalone: true, standalone: true,
}) })

View File

@@ -2,11 +2,7 @@ import {
CdkTreeModule, CdkTreeModule,
FlatTreeControl, FlatTreeControl,
} from '@angular/cdk/tree'; } from '@angular/cdk/tree';
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnDestroy, OnDestroy,
@@ -42,7 +38,7 @@ import { FlatNode } from '../flat-node.model';
templateUrl: './community-list.component.html', templateUrl: './community-list.component.html',
styleUrls: ['./community-list.component.scss'], styleUrls: ['./community-list.component.scss'],
standalone: true, standalone: true,
imports: [NgIf, ThemedLoadingComponent, CdkTreeModule, NgClass, RouterLink, TruncatableComponent, TruncatablePartComponent, AsyncPipe, TranslateModule], imports: [ThemedLoadingComponent, CdkTreeModule, NgClass, RouterLink, TruncatableComponent, TruncatablePartComponent, AsyncPipe, TranslateModule],
}) })
export class CommunityListComponent implements OnInit, OnDestroy { export class CommunityListComponent implements OnInit, OnDestroy {

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
@@ -56,7 +53,6 @@ import { ThemedCommunityPageSubCommunityListComponent } from './sections/sub-com
ThemedComcolPageContentComponent, ThemedComcolPageContentComponent,
ErrorComponent, ErrorComponent,
ThemedLoadingComponent, ThemedLoadingComponent,
NgIf,
TranslateModule, TranslateModule,
ThemedCommunityPageSubCommunityListComponent, ThemedCommunityPageSubCommunityListComponent,
ThemedCollectionPageSubCollectionListComponent, ThemedCollectionPageSubCollectionListComponent,
@@ -69,7 +65,7 @@ import { ThemedCommunityPageSubCommunityListComponent } from './sections/sub-com
ViewTrackerComponent, ViewTrackerComponent,
VarDirective, VarDirective,
RouterOutlet, RouterOutlet,
RouterModule, RouterModule
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,10 +1,14 @@
<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">
<ng-container *ngVar="(parentRD$ | async)?.payload as parent"> <ng-container *ngVar="(parentRD$ | async)?.payload as parent">
<h1 *ngIf="!parent" id="header" class="border-bottom p-2">{{ 'community.create.head' | translate }}</h1> @if (!parent) {
<h1 *ngIf="parent" id="sub-header" <h1 id="header" class="border-bottom p-2">{{ 'community.create.head' | translate }}</h1>
} @else {
<h1 id="sub-header"
class="border-bottom pb-2">{{ 'community.create.sub-head' | translate:{ parent: dsoNameService.getName(parent) } }}</h1> class="border-bottom pb-2">{{ 'community.create.sub-head' | translate:{ parent: dsoNameService.getName(parent) } }}</h1>
}
</ng-container> </ng-container>
</div> </div>
</div> </div>
@@ -12,7 +16,10 @@
[isCreation]="true" [isCreation]="true"
(back)="navigateToHome()"></ds-community-form> (back)="navigateToHome()"></ds-community-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>

View File

@@ -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 {
@@ -31,9 +28,8 @@ import { CommunityFormComponent } from '../community-form/community-form.compone
CommunityFormComponent, CommunityFormComponent,
TranslateModule, TranslateModule,
VarDirective, VarDirective,
NgIf,
AsyncPipe, AsyncPipe,
ThemedLoadingComponent, ThemedLoadingComponent
], ],
standalone: true, standalone: true,
}) })

View File

@@ -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,
@@ -31,8 +28,7 @@ import { VarDirective } from '../../shared/utils/var.directive';
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
VarDirective, VarDirective,
NgIf, BtnDisabledDirective
BtnDisabledDirective,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,6 +1,7 @@
@if (itemRD$ | async; as itemRD) {
<ds-access-control-form-container <ds-access-control-form-container
titleMessage="community-access-control-title" titleMessage="community-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>
}

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -21,8 +18,7 @@ import { AccessControlFormContainerComponent } from '../../../shared/access-cont
styleUrls: ['./community-access-control.component.scss'], styleUrls: ['./community-access-control.component.scss'],
imports: [ imports: [
AccessControlFormContainerComponent, AccessControlFormContainerComponent,
NgIf, AsyncPipe
AsyncPipe,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgForOf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -30,8 +27,7 @@ import { ComcolRoleComponent } from '../../../shared/comcol/comcol-forms/edit-co
templateUrl: './community-roles.component.html', templateUrl: './community-roles.component.html',
imports: [ imports: [
ComcolRoleComponent, ComcolRoleComponent,
AsyncPipe, AsyncPipe
NgForOf,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,9 +1,4 @@
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgForOf,
NgIf,
} from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { import {
ActivatedRoute, ActivatedRoute,
@@ -28,10 +23,8 @@ import { getCommunityPageRoute } from '../community-page-routing-paths';
RouterLink, RouterLink,
TranslateModule, TranslateModule,
NgClass, NgClass,
NgForOf,
RouterOutlet, RouterOutlet,
NgIf, AsyncPipe
AsyncPipe,
], ],
}) })
export class EditCommunityPageComponent extends EditComColPageComponent<Community> { export class EditCommunityPageComponent extends EditComColPageComponent<Community> {

View File

@@ -1,5 +1,6 @@
<ng-container *ngVar="(subCollectionsRDObs | async) as subCollectionsRD"> <ng-container *ngVar="(subCollectionsRDObs | async) as subCollectionsRD">
<div *ngIf="subCollectionsRD?.hasSucceeded && subCollectionsRD?.payload.totalElements > 0" @fadeIn> @if (subCollectionsRD?.hasSucceeded && subCollectionsRD?.payload.totalElements > 0) {
<div @fadeIn>
<h3>{{'community.sub-collection-list.head' | translate}}</h3> <h3>{{'community.sub-collection-list.head' | translate}}</h3>
<ds-viewable-collection <ds-viewable-collection
[config]="config" [config]="config"
@@ -8,6 +9,11 @@
[hideGear]="false"> [hideGear]="false">
</ds-viewable-collection> </ds-viewable-collection>
</div> </div>
<ds-error *ngIf="subCollectionsRD?.hasFailed" message="{{'error.sub-collections' | translate}}"></ds-error> }
<ds-loading *ngIf="subCollectionsRD?.isLoading" message="{{'loading.sub-collections' | translate}}"></ds-loading> @if (subCollectionsRD?.hasFailed) {
<ds-error message="{{'error.sub-collections' | translate}}"></ds-error>
}
@if (subCollectionsRD?.isLoading) {
<ds-loading message="{{'loading.sub-collections' | translate}}"></ds-loading>
}
</ng-container> </ng-container>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -44,10 +41,9 @@ import { VarDirective } from '../../../../shared/utils/var.directive';
ObjectCollectionComponent, ObjectCollectionComponent,
ErrorComponent, ErrorComponent,
ThemedLoadingComponent, ThemedLoadingComponent,
NgIf,
TranslateModule, TranslateModule,
AsyncPipe, AsyncPipe,
VarDirective, VarDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,8 +1,8 @@
<ng-container *ngIf="(community$ | async) as community"> @if ((community$ | async); as community) {
<ds-community-page-sub-community-list <ds-community-page-sub-community-list
[community]="community"> [community]="community">
</ds-community-page-sub-community-list> </ds-community-page-sub-community-list>
<ds-community-page-sub-collection-list <ds-community-page-sub-collection-list
[community]="community"> [community]="community">
</ds-community-page-sub-collection-list> </ds-community-page-sub-collection-list>
</ng-container> }

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
OnInit, OnInit,
@@ -25,8 +22,7 @@ import { ThemedCommunityPageSubCommunityListComponent } from './sub-community-li
imports: [ imports: [
ThemedCommunityPageSubCommunityListComponent, ThemedCommunityPageSubCommunityListComponent,
ThemedCollectionPageSubCollectionListComponent, ThemedCollectionPageSubCollectionListComponent,
AsyncPipe, AsyncPipe
NgIf,
], ],
standalone: true, standalone: true,
}) })

View File

@@ -1,5 +1,6 @@
<ng-container *ngVar="(subCommunitiesRDObs | async) as subCommunitiesRD"> <ng-container *ngVar="(subCommunitiesRDObs | async) as subCommunitiesRD">
<div *ngIf="subCommunitiesRD?.hasSucceeded && subCommunitiesRD?.payload.totalElements > 0" @fadeIn> @if (subCommunitiesRD?.hasSucceeded && subCommunitiesRD?.payload.totalElements > 0) {
<div @fadeIn>
<h3>{{'community.sub-community-list.head' | translate}}</h3> <h3>{{'community.sub-community-list.head' | translate}}</h3>
<ds-viewable-collection <ds-viewable-collection
[config]="config" [config]="config"
@@ -8,6 +9,11 @@
[hideGear]="false"> [hideGear]="false">
</ds-viewable-collection> </ds-viewable-collection>
</div> </div>
<ds-error *ngIf="subCommunitiesRD?.hasFailed" message="{{'error.sub-communities' | translate}}"></ds-error> }
<ds-loading *ngIf="subCommunitiesRD?.isLoading" message="{{'loading.sub-communities' | translate}}"></ds-loading> @if (subCommunitiesRD?.hasFailed) {
<ds-error message="{{'error.sub-communities' | translate}}"></ds-error>
}
@if (subCommunitiesRD?.isLoading) {
<ds-loading message="{{'loading.sub-communities' | translate}}"></ds-loading>
}
</ng-container> </ng-container>

View File

@@ -1,7 +1,4 @@
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgIf,
} from '@angular/common';
import { import {
Component, Component,
Input, Input,
@@ -43,14 +40,13 @@ import { VarDirective } from '../../../../shared/utils/var.directive';
ErrorComponent, ErrorComponent,
ThemedLoadingComponent, ThemedLoadingComponent,
VarDirective, VarDirective,
NgIf,
ObjectCollectionComponent, ObjectCollectionComponent,
AsyncPipe, AsyncPipe,
TranslateModule, TranslateModule,
ObjectCollectionComponent, ObjectCollectionComponent,
ErrorComponent, ErrorComponent,
ThemedLoadingComponent, ThemedLoadingComponent,
VarDirective, VarDirective
], ],
standalone: true, standalone: true,
}) })

View File

@@ -88,6 +88,15 @@ export interface SourceQualityAssuranceEventMessageObject {
*/ */
pidHref: string; pidHref: string;
/**
* Possible link to a page
*/
href?: string;
/**
* The service Id
*/
serviceId?: string;
} }
/** /**

View File

@@ -44,7 +44,7 @@ import { RegistryService } from './registry.service';
@Component({ @Component({
template: '', template: '',
standalone: true, standalone: true,
imports: [CommonModule], imports: [],
}) })
class DummyComponent { class DummyComponent {
} }

View File

@@ -40,7 +40,7 @@ import anything = jasmine.anything;
@Component({ @Component({
template: '', template: '',
standalone: true, standalone: true,
imports: [CommonModule], imports: [],
}) })
class DummyComponent { class DummyComponent {
} }

View File

@@ -1,7 +1,4 @@
import {
NgFor,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
@@ -53,7 +50,7 @@ export const CURATION_CFG = 'plugin.named.org.dspace.curate.CurationTask';
selector: 'ds-curation-form', selector: 'ds-curation-form',
templateUrl: './curation-form.component.html', templateUrl: './curation-form.component.html',
standalone: true, standalone: true,
imports: [FormsModule, ReactiveFormsModule, NgFor, NgIf, TranslateModule], imports: [FormsModule, ReactiveFormsModule, TranslateModule],
}) })
export class CurationFormComponent implements OnDestroy, OnInit { export class CurationFormComponent implements OnDestroy, OnInit {

View File

@@ -1,6 +1,7 @@
<div class="flex-grow-1 ds-drop-list h-100" [class.disabled]="(draggingMdField$ | async) && (draggingMdField$ | async) !== mdField" cdkDropList (cdkDropListDropped)="drop($event)" role="table"> <div class="flex-grow-1 ds-drop-list h-100" [class.disabled]="(draggingMdField$ | async) && (draggingMdField$ | async) !== mdField" cdkDropList (cdkDropListDropped)="drop($event)" role="table">
<ds-dso-edit-metadata-value-headers role="presentation" [dsoType]="dsoType"></ds-dso-edit-metadata-value-headers> <ds-dso-edit-metadata-value-headers role="presentation" [dsoType]="dsoType"></ds-dso-edit-metadata-value-headers>
<ds-dso-edit-metadata-value *ngFor="let mdValue of form.fields[mdField]; let idx = index" role="presentation" @for (mdValue of form.fields[mdField]; track mdValue; let idx = $index) {
<ds-dso-edit-metadata-value role="presentation"
[dso]="dso" [dso]="dso"
[mdValue]="mdValue" [mdValue]="mdValue"
[mdField]="mdField" [mdField]="mdField"
@@ -13,4 +14,5 @@
(undo)="mdValue.change === DsoEditMetadataChangeTypeEnum.ADD ? form.remove(mdField, idx) : mdValue.discard(); valueSaved.emit()" (undo)="mdValue.change === DsoEditMetadataChangeTypeEnum.ADD ? form.remove(mdField, idx) : mdValue.discard(); valueSaved.emit()"
(dragging)="$event ? draggingMdField$.next(mdField) : draggingMdField$.next(null)"> (dragging)="$event ? draggingMdField$.next(mdField) : draggingMdField$.next(null)">
</ds-dso-edit-metadata-value> </ds-dso-edit-metadata-value>
}
</div> </div>

View File

@@ -3,10 +3,7 @@ import {
CdkDropList, CdkDropList,
moveItemInArray, moveItemInArray,
} from '@angular/cdk/drag-drop'; } from '@angular/cdk/drag-drop';
import { import { AsyncPipe } from '@angular/common';
AsyncPipe,
NgFor,
} from '@angular/common';
import { import {
Component, Component,
EventEmitter, EventEmitter,
@@ -32,7 +29,7 @@ import { DsoEditMetadataValueHeadersComponent } from '../dso-edit-metadata-value
styleUrls: ['./dso-edit-metadata-field-values.component.scss'], styleUrls: ['./dso-edit-metadata-field-values.component.scss'],
templateUrl: './dso-edit-metadata-field-values.component.html', templateUrl: './dso-edit-metadata-field-values.component.html',
standalone: true, standalone: true,
imports: [CdkDropList, DsoEditMetadataValueHeadersComponent, NgFor, DsoEditMetadataValueComponent, AsyncPipe], imports: [CdkDropList, DsoEditMetadataValueHeadersComponent, DsoEditMetadataValueComponent, AsyncPipe],
}) })
/** /**
* Component displaying table rows for each value for a certain metadata field within a form * Component displaying table rows for each value for a certain metadata field within a form

View File

@@ -2,11 +2,7 @@ import {
CdkDrag, CdkDrag,
CdkDragHandle, CdkDragHandle,
} from '@angular/cdk/drag-drop'; } from '@angular/cdk/drag-drop';
import { import { AsyncPipe, NgClass } from '@angular/common';
AsyncPipe,
NgClass,
NgIf,
} from '@angular/common';
import { import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
@@ -95,7 +91,7 @@ import {
styleUrls: ['./dso-edit-metadata-value.component.scss', '../dso-edit-metadata-shared/dso-edit-metadata-cells.scss'], styleUrls: ['./dso-edit-metadata-value.component.scss', '../dso-edit-metadata-shared/dso-edit-metadata-cells.scss'],
templateUrl: './dso-edit-metadata-value.component.html', templateUrl: './dso-edit-metadata-value.component.html',
standalone: true, standalone: true,
imports: [VarDirective, CdkDrag, NgClass, NgIf, FormsModule, DebounceDirective, RouterLink, ThemedTypeBadgeComponent, NgbTooltipModule, CdkDragHandle, AsyncPipe, TranslateModule, DsDynamicScrollableDropdownComponent, DsDynamicOneboxComponent, AuthorityConfidenceStateDirective, BtnDisabledDirective], imports: [VarDirective, CdkDrag, NgClass, FormsModule, DebounceDirective, RouterLink, ThemedTypeBadgeComponent, NgbTooltipModule, CdkDragHandle, AsyncPipe, TranslateModule, DsDynamicScrollableDropdownComponent, DsDynamicOneboxComponent, AuthorityConfidenceStateDirective, BtnDisabledDirective],
}) })
/** /**
* Component displaying a single editable row for a metadata value * Component displaying a single editable row for a metadata value

Some files were not shown because too many files have changed in this diff Show More