clean up, fix tests, add missing translations

This commit is contained in:
FrancescoMolinaro
2024-01-08 18:04:49 +01:00
parent c57ad8eeb7
commit c20d798502
21 changed files with 159 additions and 117 deletions

View File

@@ -8,10 +8,10 @@ import {
} from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; } from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
import { import {
AdminNotifyIncomingComponent AdminNotifyIncomingComponent
} from "./admin-notify-logs/admin-notify-incoming/admin-notify-incoming.component"; } from './admin-notify-logs/admin-notify-incoming/admin-notify-incoming.component';
import { import {
AdminNotifyOutgoingComponent AdminNotifyOutgoingComponent
} from "./admin-notify-logs/admin-notify-outgoing/admin-notify-outgoing.component"; } from './admin-notify-logs/admin-notify-outgoing/admin-notify-outgoing.component';
@NgModule({ @NgModule({
imports: [ imports: [

View File

@@ -1,4 +1,4 @@
import { Component, InjectionToken, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { SearchService } from '../../core/shared/search/search.service'; import { SearchService } from '../../core/shared/search/search.service';
import { environment } from '../../../environments/environment'; import { environment } from '../../../environments/environment';
import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model';
@@ -12,7 +12,7 @@ import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { SEARCH_CONFIG_SERVICE } from '../../my-dspace-page/my-dspace-page.component'; import { SEARCH_CONFIG_SERVICE } from '../../my-dspace-page/my-dspace-page.component';
import { ViewMode } from '../../core/shared/view-mode.model'; import { ViewMode } from '../../core/shared/view-mode.model';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { SearchConfigurationService } from "../../core/shared/search/search-configuration.service"; import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
@Component({ @Component({

View File

@@ -14,8 +14,8 @@ import {
import { AdminNotifyDetailModalComponent } from './admin-notify-detail-modal/admin-notify-detail-modal.component'; import { AdminNotifyDetailModalComponent } from './admin-notify-detail-modal/admin-notify-detail-modal.component';
import { import {
AdminNotifySearchResultComponent AdminNotifySearchResultComponent
} from "./admin-notify-search-result/admin-notify-search-result.component"; } from './admin-notify-search-result/admin-notify-search-result.component';
import { AdminNotifyMessagesService } from "./services/admin-notify-messages.service"; import { AdminNotifyMessagesService } from './services/admin-notify-messages.service';
@NgModule({ @NgModule({

View File

@@ -8,7 +8,7 @@
<div *ngFor="let key of notifyMessageKeys"> <div *ngFor="let key of notifyMessageKeys">
<div class="row mb-4"> <div class="row mb-4">
<div class="font-weight-bold col-sm">{{ key + '.notify-detail-modal' | translate}}</div> <div class="font-weight-bold col-sm">{{ key + '.notify-detail-modal' | translate}}</div>
<div class="text-nowrap col-sm text-right">{{ notifyMessage[key] }}</div> <div class="text-nowrap col-sm text-right">{{ notifyMessage[key] | translate }}</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,8 @@
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifyDetailModalComponent } from './admin-notify-detail-modal.component'; import { AdminNotifyDetailModalComponent } from './admin-notify-detail-modal.component';
import { NgbActiveModal } from "@ng-bootstrap/ng-bootstrap"; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { TranslateModule } from '@ngx-translate/core';
describe('AdminNotifyDetailModalComponent', () => { describe('AdminNotifyDetailModalComponent', () => {
let component: AdminNotifyDetailModalComponent; let component: AdminNotifyDetailModalComponent;
@@ -9,6 +10,7 @@ describe('AdminNotifyDetailModalComponent', () => {
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [TranslateModule.forRoot()],
declarations: [ AdminNotifyDetailModalComponent ], declarations: [ AdminNotifyDetailModalComponent ],
providers: [NgbActiveModal] providers: [NgbActiveModal]
}) })

View File

@@ -2,18 +2,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifyIncomingComponent } from './admin-notify-incoming.component'; import { AdminNotifyIncomingComponent } from './admin-notify-incoming.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { ActivatedRoute } from "@angular/router"; import { ActivatedRoute } from '@angular/router';
import { MockActivatedRoute } from "../../../../shared/mocks/active-router.mock"; import { MockActivatedRoute } from '../../../../shared/mocks/active-router.mock';
import { provideMockStore } from "@ngrx/store/testing"; import { provideMockStore } from '@ngrx/store/testing';
import { HALEndpointService } from "../../../../core/shared/hal-endpoint.service"; import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { SEARCH_CONFIG_SERVICE } from "../../../../my-dspace-page/my-dspace-page.component"; import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component';
import { FILTER_CONFIG, SearchFilterService } from "../../../../core/shared/search/search-filter.service"; import { RouteService } from '../../../../core/services/route.service';
import { RouteService } from "../../../../core/services/route.service"; import { routeServiceStub } from '../../../../shared/testing/route-service.stub';
import { routeServiceStub } from "../../../../shared/testing/route-service.stub"; import { RequestService } from '../../../../core/data/request.service';
import { RequestService } from "../../../../core/data/request.service"; import { RemoteDataBuildService } from '../../../../core/cache/builders/remote-data-build.service';
import { RemoteDataBuildService } from "../../../../core/cache/builders/remote-data-build.service"; import { getMockRemoteDataBuildService } from '../../../../shared/mocks/remote-data-build.service.mock';
import { getMockRemoteDataBuildService } from "../../../../shared/mocks/remote-data-build.service.mock"; import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service';
import { SearchConfigurationService } from "../../../../core/shared/search/search-configuration.service";
describe('AdminNotifyIncomingComponent', () => { describe('AdminNotifyIncomingComponent', () => {
let component: AdminNotifyIncomingComponent; let component: AdminNotifyIncomingComponent;

View File

@@ -1,7 +1,7 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject } from '@angular/core';
import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component'; import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component';
import { Context } from '../../../../core/shared/context.model'; import { Context } from '../../../../core/shared/context.model';
import { SearchConfigurationService } from "../../../../core/shared/search/search-configuration.service"; import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service';
@Component({ @Component({

View File

@@ -2,18 +2,17 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifyOutgoingComponent } from './admin-notify-outgoing.component'; import { AdminNotifyOutgoingComponent } from './admin-notify-outgoing.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { ActivatedRoute } from "@angular/router"; import { ActivatedRoute } from '@angular/router';
import { MockActivatedRoute } from "../../../../shared/mocks/active-router.mock"; import { MockActivatedRoute } from '../../../../shared/mocks/active-router.mock';
import { provideMockStore } from "@ngrx/store/testing"; import { provideMockStore } from '@ngrx/store/testing';
import { HALEndpointService } from "../../../../core/shared/hal-endpoint.service"; import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { SEARCH_CONFIG_SERVICE } from "../../../../my-dspace-page/my-dspace-page.component"; import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component';
import { FILTER_CONFIG } from "../../../../core/shared/search/search-filter.service"; import { RouteService } from '../../../../core/services/route.service';
import { RouteService } from "../../../../core/services/route.service"; import { routeServiceStub } from '../../../../shared/testing/route-service.stub';
import { routeServiceStub } from "../../../../shared/testing/route-service.stub"; import { RequestService } from '../../../../core/data/request.service';
import { RequestService } from "../../../../core/data/request.service"; import { getMockRemoteDataBuildService } from '../../../../shared/mocks/remote-data-build.service.mock';
import { getMockRemoteDataBuildService } from "../../../../shared/mocks/remote-data-build.service.mock"; import { RemoteDataBuildService } from '../../../../core/cache/builders/remote-data-build.service';
import { RemoteDataBuildService } from "../../../../core/cache/builders/remote-data-build.service"; import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service';
import { SearchConfigurationService } from "../../../../core/shared/search/search-configuration.service";
describe('AdminNotifyOutgoingComponent', () => { describe('AdminNotifyOutgoingComponent', () => {
let component: AdminNotifyOutgoingComponent; let component: AdminNotifyOutgoingComponent;

View File

@@ -1,7 +1,7 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject } from '@angular/core';
import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component'; import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component';
import { Context } from '../../../../core/shared/context.model'; import { Context } from '../../../../core/shared/context.model';
import { SearchConfigurationService } from "../../../../core/shared/search/search-configuration.service"; import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service';
@Component({ @Component({

View File

@@ -13,21 +13,21 @@
<tbody> <tbody>
<tr *ngFor="let message of (messagesSubject$ | async)"> <tr *ngFor="let message of (messagesSubject$ | async)">
<td> <td>
<div>{{message.queueTimeout}}</div> <div>{{ message.queueTimeout }}</div>
</td> </td>
<td> <td>
<div *ngIf="isInbound">{{message.context}}</div> <div *ngIf="isInbound">{{ message.context }}</div>
<div *ngIf="!isInbound">{{message.object}}</div> <div *ngIf="!isInbound">{{ message.object }}</div>
</td> </td>
<td> <td>
<div *ngIf="isInbound">{{message.origin}}</div> <div *ngIf="isInbound">{{ message.origin }}</div>
<div *ngIf="!isInbound">{{message.target}}</div> <div *ngIf="!isInbound">{{ message.target }}</div>
</td> </td>
<td> <td>
<div>{{message.coarNotifyType}}</div> <div>{{ message.coarNotifyType }}</div>
</td> </td>
<td> <td>
<div>{{message.queueStatusLabel}}</div> <div>{{ message.queueStatusLabel | translate}}</div>
</td> </td>
<td> <td>
<div class="d-flex flex-column"> <div class="d-flex flex-column">

View File

@@ -1,13 +1,68 @@
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotifySearchResultComponent } from './admin-notify-search-result.component'; import { AdminNotifySearchResultComponent } from './admin-notify-search-result.component';
import { AdminNotifyMessagesService } from '../services/admin-notify-messages.service';
import { ObjectCacheService } from '../../../core/cache/object-cache.service';
import { RequestService } from '../../../core/data/request.service';
import { HALEndpointService } from '../../../core/shared/hal-endpoint.service';
import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service';
import { cold } from 'jasmine-marbles';
import { ConfigurationProperty } from '../../../core/shared/configuration-property.model';
import { RouteService } from '../../../core/services/route.service';
import { routeServiceStub } from '../../../shared/testing/route-service.stub';
import { ActivatedRoute } from '@angular/router';
import { RouterStub } from '../../../shared/testing/router.stub';
import { TranslateModule } from '@ngx-translate/core';
import { EMPTY } from 'rxjs';
describe('AdminNotifySearchResultComponent', () => { describe('AdminNotifySearchResultComponent', () => {
let component: AdminNotifySearchResultComponent; let component: AdminNotifySearchResultComponent;
let fixture: ComponentFixture<AdminNotifySearchResultComponent>; let fixture: ComponentFixture<AdminNotifySearchResultComponent>;
let objectCache: ObjectCacheService;
let requestService: RequestService;
let halService: HALEndpointService;
let rdbService: RemoteDataBuildService;
let adminNotifyMessageService: AdminNotifyMessagesService;
const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2';
const testObject = {
uuid: 'test-property',
name: 'test-property',
values: ['value-1', 'value-2']
} as ConfigurationProperty;
beforeEach(async () => { beforeEach(async () => {
halService = jasmine.createSpyObj('halService', {
getEndpoint: cold('a', { a: '' })
});
adminNotifyMessageService = jasmine.createSpyObj('adminNotifyMessageService', {
getDetailedMessages: EMPTY
});
requestService = jasmine.createSpyObj('requestService', {
generateRequestId: requestUUID,
send: true
});
rdbService = jasmine.createSpyObj('rdbService', {
buildSingle: cold('a', {
a: {
payload: testObject
}
})
});
objectCache = {} as ObjectCacheService;
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
declarations: [ AdminNotifySearchResultComponent ] imports: [TranslateModule.forRoot()],
declarations: [ AdminNotifySearchResultComponent ],
providers: [
{provide: AdminNotifyMessagesService, useValue: adminNotifyMessageService},
{ provide: RouteService, useValue: routeServiceStub },
{ provide: ActivatedRoute, useValue: new RouterStub() },
{ provide: HALEndpointService, useValue: halService },
{ provide: ObjectCacheService, useValue: objectCache },
{ provide: RequestService, useValue: requestService },
{ provide: RemoteDataBuildService, useValue: rdbService },
]
}) })
.compileComponents(); .compileComponents();

View File

@@ -1,4 +1,4 @@
import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { Component, Inject, OnDestroy, OnInit } from '@angular/core';
import { AdminNotifySearchResult } from '../models/admin-notify-message-search-result.model'; import { AdminNotifySearchResult } from '../models/admin-notify-message-search-result.model';
import { ViewMode } from '../../../core/shared/view-mode.model'; import { ViewMode } from '../../../core/shared/view-mode.model';
import { Context } from '../../../core/shared/context.model'; import { Context } from '../../../core/shared/context.model';
@@ -12,14 +12,10 @@ import {
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { AdminNotifyDetailModalComponent } from '../admin-notify-detail-modal/admin-notify-detail-modal.component'; import { AdminNotifyDetailModalComponent } from '../admin-notify-detail-modal/admin-notify-detail-modal.component';
import { LdnServicesService } from "../../admin-ldn-services/ldn-services-data/ldn-services-data.service"; import { BehaviorSubject, Subscription } from 'rxjs';
import { BehaviorSubject, from, Observable, of, scan, Subscription, switchMap } from "rxjs"; import { AdminNotifyMessagesService } from '../services/admin-notify-messages.service';
import { combineLatest, filter, map, mergeMap, tap } from "rxjs/operators"; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
import { getAllSucceededRemoteDataPayload } from "../../../core/shared/operators"; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component';
import { ItemDataService } from "../../../core/data/item-data.service";
import { AdminNotifyMessagesService } from "../services/admin-notify-messages.service";
import { SearchConfigurationService } from "../../../core/shared/search/search-configuration.service";
import { SEARCH_CONFIG_SERVICE } from "../../../my-dspace-page/my-dspace-page.component";
@tabulatableObjectsComponent(PaginatedList<AdminNotifySearchResult>, ViewMode.Table, Context.CoarNotify) @tabulatableObjectsComponent(PaginatedList<AdminNotifySearchResult>, ViewMode.Table, Context.CoarNotify)
@Component({ @Component({
@@ -55,7 +51,7 @@ export class AdminNotifySearchResultComponent extends TabulatableResultListEleme
* Map messages on init for readable representation * Map messages on init for readable representation
*/ */
ngOnInit() { ngOnInit() {
this.mapDetailsToMessages() this.mapDetailsToMessages();
this.subs.push(this.searchConfigService.getCurrentConfiguration('') this.subs.push(this.searchConfigService.getCurrentConfiguration('')
.subscribe(configuration => { .subscribe(configuration => {
this.isInbound = configuration === 'NOTIFY.incoming'; this.isInbound = configuration === 'NOTIFY.incoming';
@@ -102,10 +98,10 @@ export class AdminNotifySearchResultComponent extends TabulatableResultListEleme
this.subs.push( this.subs.push(
this.adminNotifyMessagesService.reprocessMessage(message, this.messagesSubject$) this.adminNotifyMessagesService.reprocessMessage(message, this.messagesSubject$)
.subscribe(response => { .subscribe(response => {
this.messagesSubject$.next(response) this.messagesSubject$.next(response);
} }
) )
) );
} }
@@ -116,7 +112,7 @@ export class AdminNotifySearchResultComponent extends TabulatableResultListEleme
private mapDetailsToMessages() { private mapDetailsToMessages() {
this.subs.push(this.adminNotifyMessagesService.getDetailedMessages(this.objects?.page.map(pageResult => pageResult.indexableObject)) this.subs.push(this.adminNotifyMessagesService.getDetailedMessages(this.objects?.page.map(pageResult => pageResult.indexableObject))
.subscribe(response => { .subscribe(response => {
this.messagesSubject$.next(response) this.messagesSubject$.next(response);
})) }));
} }
} }

View File

@@ -1,21 +1,21 @@
import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { autoserialize, deserialize, inheritSerialization } from 'cerialize';
import { typedObject } from '../../../core/cache/builders/build-decorators'; import { typedObject } from '../../../core/cache/builders/build-decorators';
import { ADMIN_NOTIFY_MESSAGE } from './admin-notify-message.resource-type'; import { ADMIN_NOTIFY_MESSAGE } from './admin-notify-message.resource-type';
import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; import { excludeFromEquals } from '../../../core/utilities/equals.decorators';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { GenericConstructor } from '../../../core/shared/generic-constructor'; import { GenericConstructor } from '../../../core/shared/generic-constructor';
import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model';
import { Observable } from "rxjs"; import { Observable } from 'rxjs';
export enum QueueStatusMap { export enum QueueStatusMap {
QUEUE_STATUS_PROCESSED = 'Processed', QUEUE_STATUS_PROCESSED = 'notify-queue-status.processed',
QUEUE_STATUS_FAILED = 'Failed', QUEUE_STATUS_FAILED = 'notify-queue-status.processed',
QUEUE_STATUS_UNMAPPED_ACTION = 'Unmapped action', QUEUE_STATUS_UNMAPPED_ACTION = 'notify-queue-status.unmapped_action',
QUEUE_STATUS_QUEUED_FOR_RETRY = 'Queued for retry', QUEUE_STATUS_QUEUED_FOR_RETRY = 'notify-queue-status.queue_retry',
QUEUE_STATUS_PROCESSING = 'Processing', QUEUE_STATUS_PROCESSING = 'notify-queue-status.processing',
QUEUE_STATUS_QUEUED = 'Queued', QUEUE_STATUS_QUEUED = 'notify-queue-status.queued',
QUEUE_STATUS_UNTRUSTED = 'Untrusted', QUEUE_STATUS_UNTRUSTED = 'notify-queue-status.untrusted',
}; }
/** /**
* A message that includes admin notify info * A message that includes admin notify info
*/ */

View File

@@ -1,33 +1,18 @@
import {Injectable} from '@angular/core'; import {Injectable} from '@angular/core';
import {dataService} from '../../../core/data/base/data-service.decorator'; import {dataService} from '../../../core/data/base/data-service.decorator';
import {IdentifiableDataService} from '../../../core/data/base/identifiable-data.service'; import {IdentifiableDataService} from '../../../core/data/base/identifiable-data.service';
import {FindAllData, FindAllDataImpl} from '../../../core/data/base/find-all-data';
import {DeleteData, DeleteDataImpl} from '../../../core/data/base/delete-data';
import {RequestService} from '../../../core/data/request.service'; import {RequestService} from '../../../core/data/request.service';
import {RemoteDataBuildService} from '../../../core/cache/builders/remote-data-build.service'; import {RemoteDataBuildService} from '../../../core/cache/builders/remote-data-build.service';
import {ObjectCacheService} from '../../../core/cache/object-cache.service'; import {ObjectCacheService} from '../../../core/cache/object-cache.service';
import {HALEndpointService} from '../../../core/shared/hal-endpoint.service'; import {HALEndpointService} from '../../../core/shared/hal-endpoint.service';
import {NotificationsService} from '../../../shared/notifications/notifications.service'; import {NotificationsService} from '../../../shared/notifications/notifications.service';
import {FindListOptions} from '../../../core/data/find-list-options.model';
import {FollowLinkConfig} from '../../../shared/utils/follow-link-config.model';
import { BehaviorSubject, from, Observable, of, scan } from 'rxjs'; import { BehaviorSubject, from, Observable, of, scan } from 'rxjs';
import {RemoteData} from '../../../core/data/remote-data'; import { ADMIN_NOTIFY_MESSAGE } from '../models/admin-notify-message.resource-type';
import {PaginatedList} from '../../../core/data/paginated-list.model'; import { AdminNotifyMessage, QueueStatusMap } from '../models/admin-notify-message.model';
import {NoContent} from '../../../core/shared/NoContent.model'; import { map, mergeMap } from 'rxjs/operators';
import {PatchData, PatchDataImpl} from '../../../core/data/base/patch-data'; import { getAllSucceededRemoteDataPayload } from '../../../core/shared/operators';
import {ChangeAnalyzer} from '../../../core/data/change-analyzer'; import { LdnServicesService } from '../../admin-ldn-services/ldn-services-data/ldn-services-data.service';
import {Operation} from 'fast-json-patch'; import { ItemDataService } from '../../../core/data/item-data.service';
import {RestRequestMethod} from '../../../core/data/rest-request-method';
import {CreateData, CreateDataImpl} from '../../../core/data/base/create-data';
import {SearchDataImpl} from '../../../core/data/base/search-data';
import { ADMIN_NOTIFY_MESSAGE } from "../models/admin-notify-message.resource-type";
import { AdminNotifyMessage, QueueStatusMap } from "../models/admin-notify-message.model";
import { SearchResult } from "../../../shared/search/models/search-result.model";
import { map, mergeMap } from "rxjs/operators";
import { getAllSucceededRemoteDataPayload } from "../../../core/shared/operators";
import { AdminNotifySearchResult } from "../models/admin-notify-message-search-result.model";
import { LdnServicesService } from "../../admin-ldn-services/ldn-services-data/ldn-services-data.service";
import { ItemDataService } from "../../../core/data/item-data.service";
/** /**
* Injectable service responsible for fetching/sending data from/to the REST API on the messages endpoint. * Injectable service responsible for fetching/sending data from/to the REST API on the messages endpoint.
@@ -55,7 +40,7 @@ export class AdminNotifyMessagesService extends IdentifiableDataService<AdminNot
* Map labels to readable info for user * Map labels to readable info for user
* @param message the message to which map the labels * @param message the message to which map the labels
*/ */
public formatMessageLabels(message: AdminNotifyMessage) : AdminNotifyMessage { public formatMessageLabels(message: AdminNotifyMessage): AdminNotifyMessage {
message.coarNotifyType = message.coarNotifyType?.split(':')[1]; message.coarNotifyType = message.coarNotifyType?.split(':')[1];
message.queueStatusLabel = QueueStatusMap[message.queueStatusLabel]; message.queueStatusLabel = QueueStatusMap[message.queueStatusLabel];
return message; return message;
@@ -65,7 +50,7 @@ export class AdminNotifyMessagesService extends IdentifiableDataService<AdminNot
* Add detailed information to each message * Add detailed information to each message
* @param messages the messages to which add detailded info * @param messages the messages to which add detailded info
*/ */
public getDetailedMessages(messages: AdminNotifyMessage[]) : Observable<AdminNotifyMessage[]> { public getDetailedMessages(messages: AdminNotifyMessage[]): Observable<AdminNotifyMessage[]> {
return from(messages.map(message => this.formatMessageLabels(message))).pipe( return from(messages.map(message => this.formatMessageLabels(message))).pipe(
mergeMap(message => mergeMap(message =>
message.target ? this.ldnServicesService.findById(message.target.toString()).pipe( message.target ? this.ldnServicesService.findById(message.target.toString()).pipe(
@@ -92,7 +77,7 @@ export class AdminNotifyMessagesService extends IdentifiableDataService<AdminNot
) : of(message), ) : of(message),
), ),
scan((acc: any, value: any) => [...acc, value], []), scan((acc: any, value: any) => [...acc, value], []),
) );
} }
/** /**
@@ -100,7 +85,7 @@ export class AdminNotifyMessagesService extends IdentifiableDataService<AdminNot
* @param message the message to reprocess * @param message the message to reprocess
* @param messageSubject the current visualised messages source * @param messageSubject the current visualised messages source
*/ */
public reprocessMessage(message: AdminNotifyMessage, messageSubject: BehaviorSubject<AdminNotifyMessage[]>) : Observable<AdminNotifyMessage[]> { public reprocessMessage(message: AdminNotifyMessage, messageSubject: BehaviorSubject<AdminNotifyMessage[]>): Observable<AdminNotifyMessage[]> {
return this.findById(message.id).pipe( return this.findById(message.id).pipe(
getAllSucceededRemoteDataPayload(), getAllSucceededRemoteDataPayload(),
map(reprocessedMessage => this.formatMessageLabels(reprocessedMessage)), map(reprocessedMessage => this.formatMessageLabels(reprocessedMessage)),
@@ -113,9 +98,9 @@ export class AdminNotifyMessagesService extends IdentifiableDataService<AdminNot
newMessage.origin = messageToUpdate.origin; newMessage.origin = messageToUpdate.origin;
newMessage.context = messageToUpdate.context; newMessage.context = messageToUpdate.context;
messages[indexOfMessageToUpdate] = newMessage; messages[indexOfMessageToUpdate] = newMessage;
return messages return messages;
}) })
)), )),
) );
} }
} }

View File

@@ -64,7 +64,6 @@ export class SearchNavbarComponent {
const queryParams = Object.assign({}, data); const queryParams = Object.assign({}, data);
const linkToNavigateTo = [this.searchService.getSearchLink().replace('/', '')]; const linkToNavigateTo = [this.searchService.getSearchLink().replace('/', '')];
this.searchForm.reset(); this.searchForm.reset();
this.router.navigate(linkToNavigateTo, { this.router.navigate(linkToNavigateTo, {
queryParams: queryParams, queryParams: queryParams,
queryParamsHandling: 'merge' queryParamsHandling: 'merge'

View File

@@ -18,7 +18,7 @@ const testType = 'TestType';
const testContext = Context.Search; const testContext = Context.Search;
const testViewMode = ViewMode.StandalonePage; const testViewMode = ViewMode.StandalonePage;
class TestType extends ListableObject { export class TestType extends ListableObject {
getRenderTypes(): (string | GenericConstructor<ListableObject>)[] { getRenderTypes(): (string | GenericConstructor<ListableObject>)[] {
return [testType]; return [testType];
} }

View File

@@ -1,31 +1,24 @@
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TabulatableObjectsLoaderComponent } from './tabulatable-objects-loader.component'; import { TabulatableObjectsLoaderComponent } from './tabulatable-objects-loader.component';
import { ThemeService } from "../../../theme-support/theme.service"; import { ThemeService } from '../../../theme-support/theme.service';
import { provideMockStore } from "@ngrx/store/testing"; import { provideMockStore } from '@ngrx/store/testing';
import { ListableObject } from "../listable-object.model"; import { ListableObject } from '../listable-object.model';
import { PaginatedList } from "../../../../core/data/paginated-list.model"; import { PaginatedList } from '../../../../core/data/paginated-list.model';
import { Context } from "../../../../core/shared/context.model"; import { Context } from '../../../../core/shared/context.model';
import { GenericConstructor } from "../../../../core/shared/generic-constructor"; import { TabulatableObjectsDirective } from './tabulatable-objects.directive';
import { TabulatableObjectsDirective } from "./tabulatable-objects.directive"; import { ChangeDetectionStrategy } from '@angular/core';
import { ListableObjectComponentLoaderComponent } from "../listable-object/listable-object-component-loader.component";
import { ChangeDetectionStrategy } from "@angular/core";
import {
ItemListElementComponent
} from "../../../object-list/item-list-element/item-types/item/item-list-element.component";
import { import {
TabulatableResultListElementsComponent TabulatableResultListElementsComponent
} from "../../../object-list/search-result-list-element/tabulatable-search-result/tabulatable-result-list-elements.component"; } from '../../../object-list/search-result-list-element/tabulatable-search-result/tabulatable-result-list-elements.component';
import { TestType } from '../listable-object/listable-object-component-loader.component.spec';
const testType = 'TestType'; const testType = 'TestType';
class TestType extends ListableObject {
getRenderTypes(): (string | GenericConstructor<ListableObject>)[] {
return [testType];
}
}
class TestTypes extends PaginatedList<ListableObject> { class TestTypes extends PaginatedList<ListableObject> {
page: TestType[] = [new TestType()] page: TestType[] = [new TestType()];
} }

View File

@@ -1,6 +1,6 @@
import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { FacetValue } from '../../../../models/facet-value.model'; import { FacetValue } from '../../../../models/facet-value.model';
import { SearchFilterConfig } from '../../../../models/search-filter-config.model'; import { SearchFilterConfig } from '../../../../models/search-filter-config.model';

View File

@@ -1,6 +1,6 @@
import { Observable, Subscription } from 'rxjs'; import { Observable, Subscription } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { FacetValue } from '../../../../models/facet-value.model'; import { FacetValue } from '../../../../models/facet-value.model';
import { SearchFilterConfig } from '../../../../models/search-filter-config.model'; import { SearchFilterConfig } from '../../../../models/search-filter-config.model';

View File

@@ -1,5 +1,5 @@
import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs';
import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { SearchFilterConfig } from '../../../../models/search-filter-config.model'; import { SearchFilterConfig } from '../../../../models/search-filter-config.model';
import { SearchService } from '../../../../../../core/shared/search/search.service'; import { SearchService } from '../../../../../../core/shared/search/search.service';

View File

@@ -3573,6 +3573,20 @@
"notify-message-result.reprocess": "Reprocess", "notify-message-result.reprocess": "Reprocess",
"notify-queue-status.processed": "Processed",
"notify-queue-status.failed": "Failed",
"notify-queue-status.queue_retry": "Queued for retry",
"notify-queue-status.unmapped_action": "Unmapped action",
"notify-queue-status.processing": "Processing",
"notify-queue-status.queued": "Queued",
"notify-queue-status.untrusted": "Untrusted",
"orgunit.listelement.badge": "Repository Item", "orgunit.listelement.badge": "Repository Item",
"orgunit.listelement.no-title": "Untitled", "orgunit.listelement.no-title": "Untitled",