CST-5249_suggestion refactor deleting 'reciter', docs

This commit is contained in:
frabacche
2024-01-24 18:32:21 +01:00
parent 2bb421c7cf
commit afa6559b19
63 changed files with 409 additions and 376 deletions

View File

@@ -4,7 +4,7 @@ import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/r
/**
* Interface for the route parameters.
*/
export interface AdminNotificationsSuggestionTargetsPageParams {
export interface AdminNotificationsPublicationClaimPageParams {
pageId?: string;
pageSize?: number;
currentPage?: number;
@@ -14,7 +14,7 @@ export interface AdminNotificationsSuggestionTargetsPageParams {
* This class represents a resolver that retrieve the route data before the route is activated.
*/
@Injectable()
export class AdminNotificationsSuggestionTargetsPageResolver implements Resolve<AdminNotificationsSuggestionTargetsPageParams> {
export class AdminNotificationsPublicationClaimPageResolver implements Resolve<AdminNotificationsPublicationClaimPageParams> {
/**
* Method for resolving the parameters in the current route.
@@ -22,7 +22,7 @@ export class AdminNotificationsSuggestionTargetsPageResolver implements Resolve<
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
* @returns AdminNotificationsSuggestionTargetsPageParams Emits the route parameters
*/
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): AdminNotificationsSuggestionTargetsPageParams {
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): AdminNotificationsPublicationClaimPageParams {
return {
pageId: route.queryParams.pageId,
pageSize: parseInt(route.queryParams.pageSize, 10),

View File

@@ -1,6 +1,6 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page.component';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-publication-claim-page.component';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';

View File

@@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'ds-admin-notifications-publication-claim-page',
templateUrl: './admin-notifications-publication-claim-page.component.html',
styleUrls: ['./admin-notifications-publication-claim-page.component.scss']
})
export class AdminNotificationsSuggestionTargetsPageComponent {
}

View File

@@ -2,7 +2,7 @@ import { URLCombiner } from '../../core/url-combiner/url-combiner';
import { getNotificationsModuleRoute } from '../admin-routing-paths';
export const QUALITY_ASSURANCE_EDIT_PATH = 'quality-assurance';
export const PUBLICATION_CLAIMS_PATH = 'publication-claims';
export const PUBLICATION_CLAIMS_PATH = 'publication-claim';
export function getQualityAssuranceRoute(id: string) {
return new URLCombiner(getNotificationsModuleRoute(), QUALITY_ASSURANCE_EDIT_PATH, id).toString();

View File

@@ -5,8 +5,8 @@ import { AuthenticatedGuard } from '../../core/auth/authenticated.guard';
import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver';
import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service';
import { PUBLICATION_CLAIMS_PATH } from './admin-notifications-routing-paths';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component';
import { AdminNotificationsSuggestionTargetsPageResolver } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component';
import { AdminNotificationsPublicationClaimPageResolver } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page-resolver.service';
import { QUALITY_ASSURANCE_EDIT_PATH } from './admin-notifications-routing-paths';
import { AdminQualityAssuranceTopicsPageComponent } from './admin-quality-assurance-topics-page/admin-quality-assurance-topics-page.component';
import { AdminQualityAssuranceEventsPageComponent } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.component';
@@ -30,11 +30,11 @@ import {
pathMatch: 'full',
resolve: {
breadcrumb: I18nBreadcrumbResolver,
reciterSuggestionTargetParams: AdminNotificationsSuggestionTargetsPageResolver
suggestionTargetParams: AdminNotificationsPublicationClaimPageResolver
},
data: {
title: 'admin.notifications.recitersuggestion.page.title',
breadcrumbKey: 'admin.notifications.recitersuggestion',
title: 'admin.notifications.publicationclaim.page.title',
breadcrumbKey: 'admin.notifications.publicationclaim',
showBreadcrumbsFluid: false
}
},
@@ -89,7 +89,7 @@ import {
providers: [
I18nBreadcrumbResolver,
I18nBreadcrumbsService,
AdminNotificationsSuggestionTargetsPageResolver,
AdminNotificationsPublicationClaimPageResolver,
SourceDataResolver,
AdminQualityAssuranceSourcePageResolver,
AdminQualityAssuranceTopicsPageResolver,

View File

@@ -1,10 +0,0 @@
import { Component } from '@angular/core';
@Component({
selector: 'ds-admin-notifications-reciter-page',
templateUrl: './admin-notifications-suggestion-targets-page.component.html',
styleUrls: ['./admin-notifications-suggestion-targets-page.component.scss']
})
export class AdminNotificationsSuggestionTargetsPageComponent {
}

View File

@@ -3,7 +3,7 @@ import { NgModule } from '@angular/core';
import { CoreModule } from '../../core/core.module';
import { SharedModule } from '../../shared/shared.module';
import { AdminNotificationsRoutingModule } from './admin-notifications-routing.module';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component';
import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component';
import { AdminQualityAssuranceTopicsPageComponent } from './admin-quality-assurance-topics-page/admin-quality-assurance-topics-page.component';
import { AdminQualityAssuranceEventsPageComponent } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.component';
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';

View File

@@ -185,8 +185,8 @@ import { FlatBrowseDefinition } from './shared/flat-browse-definition.model';
import { ValueListBrowseDefinition } from './shared/value-list-browse-definition.model';
import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition';
import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model';
import { SuggestionTarget } from './suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionSource } from './suggestion-notifications/reciter-suggestions/models/suggestion-source.model';
import { SuggestionTarget } from './suggestion-notifications/models/suggestion-target.model';
import { SuggestionSource } from './suggestion-notifications/models/suggestion-source.model';
/**
* When not in production, endpoint responses can be mocked for testing purposes

View File

@@ -1,4 +1,4 @@
import { ResourceType } from '../../../shared/resource-type';
import { ResourceType } from '../../shared/resource-type';
/**
* The resource type for the Suggestion object

View File

@@ -1,4 +1,4 @@
import { ResourceType } from '../../../shared/resource-type';
import { ResourceType } from '../../shared/resource-type';
/**
* The resource type for the Suggestion Source object

View File

@@ -1,11 +1,11 @@
import { autoserialize, deserialize } from 'cerialize';
import { SUGGESTION_SOURCE } from './suggestion-source-object.resource-type';
import { excludeFromEquals } from '../../../utilities/equals.decorators';
import { ResourceType } from '../../../shared/resource-type';
import { HALLink } from '../../../shared/hal-link.model';
import { typedObject } from '../../../cache/builders/build-decorators';
import {CacheableObject} from '../../../cache/cacheable-object.model';
import { excludeFromEquals } from '../../utilities/equals.decorators';
import { ResourceType } from '../../shared/resource-type';
import { HALLink } from '../../shared/hal-link.model';
import { typedObject } from '../../cache/builders/build-decorators';
import {CacheableObject} from '../../cache/cacheable-object.model';
/**
* The interface representing the Suggestion Source model

View File

@@ -1,4 +1,4 @@
import { ResourceType } from '../../../shared/resource-type';
import { ResourceType } from '../../shared/resource-type';
/**
* The resource type for the Suggestion Target object

View File

@@ -1,12 +1,12 @@
import { autoserialize, deserialize } from 'cerialize';
import { CacheableObject } from '../../../cache/cacheable-object.model';
import { CacheableObject } from '../../cache/cacheable-object.model';
import { SUGGESTION_TARGET } from './suggestion-target-object.resource-type';
import { excludeFromEquals } from '../../../utilities/equals.decorators';
import { ResourceType } from '../../../shared/resource-type';
import { HALLink } from '../../../shared/hal-link.model';
import { typedObject } from '../../../cache/builders/build-decorators';
import { excludeFromEquals } from '../../utilities/equals.decorators';
import { ResourceType } from '../../shared/resource-type';
import { HALLink } from '../../shared/hal-link.model';
import { typedObject } from '../../cache/builders/build-decorators';
/**
* The interface representing the Suggestion Target model

View File

@@ -1,13 +1,16 @@
import { autoserialize, autoserializeAs, deserialize } from 'cerialize';
import { SUGGESTION } from './suggestion-objects.resource-type';
import { excludeFromEquals } from '../../../utilities/equals.decorators';
import { ResourceType } from '../../../shared/resource-type';
import { HALLink } from '../../../shared/hal-link.model';
import { typedObject } from '../../../cache/builders/build-decorators';
import { MetadataMap, MetadataMapSerializer } from '../../../shared/metadata.models';
import {CacheableObject} from '../../../cache/cacheable-object.model';
import { excludeFromEquals } from '../../utilities/equals.decorators';
import { ResourceType } from '../../shared/resource-type';
import { HALLink } from '../../shared/hal-link.model';
import { typedObject } from '../../cache/builders/build-decorators';
import { MetadataMap, MetadataMapSerializer } from '../../shared/metadata.models';
import {CacheableObject} from '../../cache/cacheable-object.model';
/**
* The interface representing Suggestion Evidences such as scores (authorScore, datescore)
*/
export interface SuggestionEvidences {
[sectionId: string]: {
score: string;

View File

@@ -1,24 +1,27 @@
import { Injectable } from '@angular/core';
import { dataService } from '../../../data/base/data-service.decorator';
import { dataService } from '../../data/base/data-service.decorator';
import { SUGGESTION_SOURCE } from '../models/suggestion-source-object.resource-type';
import { IdentifiableDataService } from '../../../data/base/identifiable-data.service';
import { IdentifiableDataService } from '../../data/base/identifiable-data.service';
import { SuggestionSource } from '../models/suggestion-source.model';
import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data';
import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data';
import { Store } from '@ngrx/store';
import { RequestService } from '../../../data/request.service';
import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service';
import { CoreState } from '../../../core-state.model';
import { ObjectCacheService } from '../../../cache/object-cache.service';
import { HALEndpointService } from '../../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { RequestService } from '../../data/request.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { CoreState } from '../../core-state.model';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { HttpClient } from '@angular/common/http';
import { FindListOptions } from '../../../data/find-list-options.model';
import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../../../data/paginated-list.model';
import { RemoteData } from '../../../data/remote-data';
import { FindListOptions } from '../../data/find-list-options.model';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../../data/paginated-list.model';
import { RemoteData } from '../../data/remote-data';
import { Observable } from 'rxjs/internal/Observable';
import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
/**
* Service that retrieves Suggestion Source data
*/
@Injectable()
@dataService(SUGGESTION_SOURCE)
export class SuggestionSourceDataService extends IdentifiableDataService<SuggestionSource> {

View File

@@ -1,25 +1,25 @@
import { TestScheduler } from 'rxjs/testing';
import { RequestService } from '../../../data/request.service';
import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../cache/object-cache.service';
import { HALEndpointService } from '../../../shared/hal-endpoint.service';
import { RequestEntry } from '../../../data/request-entry.model';
import { RequestService } from '../../data/request.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { RequestEntry } from '../../data/request-entry.model';
import { cold, getTestScheduler } from 'jasmine-marbles';
import { RestResponse } from '../../../cache/response.models';
import { RestResponse } from '../../cache/response.models';
import { of as observableOf } from 'rxjs';
import { Store } from '@ngrx/store';
import { CoreState } from '../../../core-state.model';
import { CoreState } from '../../core-state.model';
import { HttpClient } from '@angular/common/http';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service';
import { testFindAllDataImplementation } from '../../../data/base/find-all-data.spec';
import { FindAllData } from '../../../data/base/find-all-data';
import { GetRequest } from '../../../data/request.models';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
import { testFindAllDataImplementation } from '../../data/base/find-all-data.spec';
import { FindAllData } from '../../data/base/find-all-data';
import { GetRequest } from '../../data/request.models';
import {
createSuccessfulRemoteDataObject$
} from '../../../../shared/remote-data.utils';
import { RemoteData } from '../../../data/remote-data';
import { RequestEntryState } from '../../../data/request-entry-state.model';
} from '../../../shared/remote-data.utils';
import { RemoteData } from '../../data/remote-data';
import { RequestEntryState } from '../../data/request-entry-state.model';
import { SuggestionSourceDataService } from './suggestion-source-data.service';
import { SuggestionSource } from '../models/suggestion-source.model';

View File

@@ -1,25 +1,25 @@
import { TestScheduler } from 'rxjs/testing';
import { SuggestionDataServiceImpl, SuggestionsDataService } from './suggestions-data.service';
import { RequestService } from '../../data/request.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { RequestService } from '../data/request.service';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { HALEndpointService } from '../shared/hal-endpoint.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { HttpClient } from '@angular/common/http';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service';
import { Suggestion } from './models/suggestion.model';
import { cold, getTestScheduler } from 'jasmine-marbles';
import { RequestEntry } from '../../data/request-entry.model';
import { RestResponse } from '../../cache/response.models';
import { RequestEntry } from '../data/request-entry.model';
import { RestResponse } from '../cache/response.models';
import { of as observableOf } from 'rxjs';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { RemoteData } from '../../data/remote-data';
import { RequestEntryState } from '../../data/request-entry-state.model';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { RemoteData } from '../data/remote-data';
import { RequestEntryState } from '../data/request-entry-state.model';
import { SuggestionSource } from './models/suggestion-source.model';
import { SuggestionTarget } from './models/suggestion-target.model';
import { SuggestionSourceDataService } from './source/suggestion-source-data.service';
import { SuggestionTargetDataService } from './target/suggestion-target-data.service';
import { RequestParam } from '../../cache/models/request-param.model';
import { RequestParam } from '../cache/models/request-param.model';
describe('SuggestionDataService test', () => {
let scheduler: TestScheduler;

View File

@@ -5,26 +5,26 @@ import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { dataService } from '../../cache/builders/build-decorators';
import { RequestService } from '../../data/request.service';
import { DataService } from '../../data/data.service';
import { ChangeAnalyzer } from '../../data/change-analyzer';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
import { RemoteData } from '../../data/remote-data';
import { HALEndpointService } from '../shared/hal-endpoint.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { dataService } from '../cache/builders/build-decorators';
import { RequestService } from '../data/request.service';
import { DataService } from '../data/data.service';
import { ChangeAnalyzer } from '../data/change-analyzer';
import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service';
import { RemoteData } from '../data/remote-data';
import { SUGGESTION } from './models/suggestion-objects.resource-type';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../../data/paginated-list.model';
import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../data/paginated-list.model';
import { SuggestionSource } from './models/suggestion-source.model';
import { SuggestionTarget } from './models/suggestion-target.model';
import { Suggestion } from './models/suggestion.model';
import { RequestParam } from '../../cache/models/request-param.model';
import { NoContent } from '../../shared/NoContent.model';
import {CoreState} from '../../core-state.model';
import {FindListOptions} from '../../data/find-list-options.model';
import { RequestParam } from '../cache/models/request-param.model';
import { NoContent } from '../shared/NoContent.model';
import {CoreState} from '../core-state.model';
import {FindListOptions} from '../data/find-list-options.model';
import { SuggestionSourceDataService } from './source/suggestion-source-data.service';
import { SuggestionTargetDataService } from './target/suggestion-target-data.service';

View File

@@ -1,25 +1,25 @@
import { Injectable } from '@angular/core';
import { dataService } from '../../../data/base/data-service.decorator';
import { dataService } from '../../data/base/data-service.decorator';
import { IdentifiableDataService } from '../../../data/base/identifiable-data.service';
import { IdentifiableDataService } from '../../data/base/identifiable-data.service';
import { SuggestionTarget } from '../models/suggestion-target.model';
import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data';
import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data';
import { Store } from '@ngrx/store';
import { RequestService } from '../../../data/request.service';
import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service';
import { CoreState } from '../../../core-state.model';
import { ObjectCacheService } from '../../../cache/object-cache.service';
import { HALEndpointService } from '../../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { RequestService } from '../../data/request.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { CoreState } from '../../core-state.model';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { HttpClient } from '@angular/common/http';
import { FindListOptions } from '../../../data/find-list-options.model';
import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../../../data/paginated-list.model';
import { RemoteData } from '../../../data/remote-data';
import { FindListOptions } from '../../data/find-list-options.model';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { PaginatedList } from '../../data/paginated-list.model';
import { RemoteData } from '../../data/remote-data';
import { Observable } from 'rxjs/internal/Observable';
import { RequestParam } from '../../../cache/models/request-param.model';
import { SearchData, SearchDataImpl } from '../../../data/base/search-data';
import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service';
import { RequestParam } from '../../cache/models/request-param.model';
import { SearchData, SearchDataImpl } from '../../data/base/search-data';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
import { SUGGESTION_TARGET } from '../models/suggestion-target-object.resource-type';
@Injectable()

View File

@@ -1,30 +1,30 @@
import { TestScheduler } from 'rxjs/testing';
import { RequestService } from '../../../data/request.service';
import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../cache/object-cache.service';
import { HALEndpointService } from '../../../shared/hal-endpoint.service';
import { RequestEntry } from '../../../data/request-entry.model';
import { RequestService } from '../../data/request.service';
import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../cache/object-cache.service';
import { HALEndpointService } from '../../shared/hal-endpoint.service';
import { RequestEntry } from '../../data/request-entry.model';
import { cold, getTestScheduler } from 'jasmine-marbles';
import { RestResponse } from '../../../cache/response.models';
import { RestResponse } from '../../cache/response.models';
import { of as observableOf } from 'rxjs';
import { Store } from '@ngrx/store';
import { CoreState } from '../../../core-state.model';
import { CoreState } from '../../core-state.model';
import { HttpClient } from '@angular/common/http';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { SearchData } from '../../../data/base/search-data';
import { testSearchDataImplementation } from '../../../data/base/search-data.spec';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { SearchData } from '../../data/base/search-data';
import { testSearchDataImplementation } from '../../data/base/search-data.spec';
import { SuggestionTargetDataService } from './suggestion-target-data.service';
import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service';
import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service';
import { SuggestionTarget } from '../models/suggestion-target.model';
import { testFindAllDataImplementation } from '../../../data/base/find-all-data.spec';
import { FindAllData } from '../../../data/base/find-all-data';
import { GetRequest } from '../../../data/request.models';
import { testFindAllDataImplementation } from '../../data/base/find-all-data.spec';
import { FindAllData } from '../../data/base/find-all-data';
import { GetRequest } from '../../data/request.models';
import {
createSuccessfulRemoteDataObject$
} from '../../../../shared/remote-data.utils';
import { RequestParam } from '../../../cache/models/request-param.model';
import { RemoteData } from '../../../data/remote-data';
import { RequestEntryState } from '../../../data/request-entry-state.model';
} from '../../../shared/remote-data.utils';
import { RequestParam } from '../../cache/models/request-param.model';
import { RemoteData } from '../../data/remote-data';
import { RequestEntryState } from '../../data/request-entry-state.model';
describe('SuggestionTargetDataService test', () => {
let scheduler: TestScheduler;

View File

@@ -561,13 +561,13 @@ export class MenuResolver implements Resolve<boolean> {
} as LinkMenuItemModel,
},
{
id: 'notifications_reciter',
id: 'notifications_publication-claim',
parentID: 'notifications',
active: false,
visible: authorized,
model: {
type: MenuItemType.LINK,
text: 'menu.section.notifications_reciter',
text: 'menu.section.notifications_publication-claim',
link: '/admin/notifications/' + PUBLICATION_CLAIMS_PATH
} as LinkMenuItemModel,
},

View File

@@ -1,6 +1,6 @@
import { QualityAssuranceSourceEffects } from './qa/source/quality-assurance-source.effects';
import { QualityAssuranceTopicsEffects } from './qa/topics/quality-assurance-topics.effects';
import { SuggestionTargetsEffects } from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.effects';
import { SuggestionTargetsEffects } from '../suggestion-notifications/suggestion-targets/suggestion-targets.effects';
export const notificationsEffects = [
QualityAssuranceTopicsEffects,

View File

@@ -26,29 +26,29 @@ import { QualityAssuranceSourceService } from './qa/source/quality-assurance-sou
import {
QualityAssuranceSourceDataService
} from '../core/notifications/qa/source/quality-assurance-source-data.service';
import { SuggestionTargetsComponent } from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.component';
import { SuggestionActionsComponent } from '../suggestion-notifications/reciter-suggestions/suggestion-actions/suggestion-actions.component';
import { SuggestionTargetsComponent } from '../suggestion-notifications/suggestion-targets/suggestion-targets.component';
import { SuggestionActionsComponent } from '../suggestion-notifications/suggestion-actions/suggestion-actions.component';
import {
SuggestionListElementComponent
} from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component';
} from '../suggestion-notifications/suggestion-list-element/suggestion-list-element.component';
import {
SuggestionEvidencesComponent
} from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component';
import { SuggestionsPopupComponent } from '../suggestion-notifications/reciter-suggestions/suggestions-popup/suggestions-popup.component';
} from '../suggestion-notifications/suggestion-list-element/suggestion-evidences/suggestion-evidences.component';
import { SuggestionsPopupComponent } from '../suggestion-notifications/suggestions-popup/suggestions-popup.component';
import {
SuggestionsNotificationComponent
} from '../suggestion-notifications/reciter-suggestions/suggestions-notification/suggestions-notification.component';
import { SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service';
import { SuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/suggestions-data.service';
} from '../suggestion-notifications/suggestions-notification/suggestions-notification.component';
import { SuggestionsService } from '../suggestion-notifications/suggestions.service';
import { SuggestionsDataService } from '../core/suggestion-notifications/suggestions-data.service';
import {
SuggestionSourceDataService
} from '../core/suggestion-notifications/reciter-suggestions/source/suggestion-source-data.service';
} from '../core/suggestion-notifications/source/suggestion-source-data.service';
import {
SuggestionTargetDataService
} from '../core/suggestion-notifications/reciter-suggestions/target/suggestion-target-data.service';
} from '../core/suggestion-notifications/target/suggestion-target-data.service';
import {
SuggestionTargetsStateService
} from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service';
} from '../suggestion-notifications/suggestion-targets/suggestion-targets.state.service';
const MODULES = [

View File

@@ -1,7 +1,7 @@
import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';
import { qualityAssuranceSourceReducer, QualityAssuranceSourceState } from './qa/source/quality-assurance-source.reducer';
import { qualityAssuranceTopicsReducer, QualityAssuranceTopicState, } from './qa/topics/quality-assurance-topics.reducer';
import { SuggestionTargetsReducer, SuggestionTargetState } from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.reducer';
import { SuggestionTargetsReducer, SuggestionTargetState } from '../suggestion-notifications/suggestion-targets/suggestion-targets.reducer';
/**
* The OpenAIRE State

View File

@@ -1,5 +1,5 @@
import { ResourceType } from '../../core/shared/resource-type';
import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
// REST Mock ---------------------------------------------------------------------
// -------------------------------------------------------------------------------

View File

@@ -2,8 +2,8 @@
// REST Mock ---------------------------------------------------------------------
// -------------------------------------------------------------------------------
import { Suggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { SUGGESTION } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-objects.resource-type';
import { Suggestion } from '../../core/suggestion-notifications/models/suggestion.model';
import { SUGGESTION } from '../../core/suggestion-notifications/models/suggestion-objects.resource-type';
export const mockSuggestionPublicationOne: Suggestion = {
id: '24694773',

View File

@@ -1349,8 +1349,8 @@ export function getMockSuggestionsService(): any {
deleteReviewedSuggestion: jasmine.createSpy('deleteReviewedSuggestion'),
retrieveCurrentUserSuggestions: jasmine.createSpy('retrieveCurrentUserSuggestions'),
getTargetUuid: jasmine.createSpy('getTargetUuid'),
notMine: observableOf(null),
notMineMultiple: observableOf({success: 1, fails: 0}),
ignoreSuggestion: observableOf(null),
ignoreSuggestionMultiple: observableOf({success: 1, fails: 0}),
approveAndImportMultiple: observableOf({success: 1, fails: 0}),
approveAndImport: observableOf({id: '1234'}),
isCollectionFixed: false,

View File

@@ -1,44 +1,44 @@
import {createFeatureSelector, createSelector, MemoizedSelector} from '@ngrx/store';
import { suggestionNotificationsSelector, SuggestionNotificationsState } from '../../notifications/notifications.reducer';
import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { suggestionNotificationsSelector, SuggestionNotificationsState } from '../notifications/notifications.reducer';
import { SuggestionTarget } from '../core/suggestion-notifications/models/suggestion-target.model';
import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.reducer';
import {subStateSelector} from '../../submission/selectors';
import {subStateSelector} from '../submission/selectors';
/**
* Returns the Reciter Suggestion Target state.
* @function _getReciterSuggestionTargetState
* @function _getSuggestionTargetState
* @param {AppState} state Top level state.
* @return {SuggestionNotificationsState}
*/
const _getReciterSuggestionTargetState = createFeatureSelector<SuggestionNotificationsState>('suggestionNotifications');
const _getSuggestionTargetState = createFeatureSelector<SuggestionNotificationsState>('suggestionNotifications');
// Reciter Suggestion Targets
// ----------------------------------------------------------------------------
/**
* Returns the Reciter Suggestion Targets State.
* @function reciterSuggestionTargetStateSelector
* Returns the Suggestion Targets State.
* @function suggestionTargetStateSelector
* @return {SuggestionNotificationsState}
*/
export function reciterSuggestionTargetStateSelector(): MemoizedSelector<SuggestionNotificationsState, SuggestionTargetState> {
export function suggestionTargetStateSelector(): MemoizedSelector<SuggestionNotificationsState, SuggestionTargetState> {
return subStateSelector<SuggestionNotificationsState, SuggestionTargetState>(suggestionNotificationsSelector, 'suggestionTarget');
}
/**
* Returns the Reciter Suggestion Targets list.
* @function reciterSuggestionTargetObjectSelector
* Returns the Suggestion Targets list.
* @function suggestionTargetObjectSelector
* @return {SuggestionTarget[]}
*/
export function reciterSuggestionTargetObjectSelector(): MemoizedSelector<SuggestionNotificationsState, SuggestionTarget[]> {
return subStateSelector<SuggestionNotificationsState, SuggestionTarget[]>(reciterSuggestionTargetStateSelector(), 'targets');
export function suggestionTargetObjectSelector(): MemoizedSelector<SuggestionNotificationsState, SuggestionTarget[]> {
return subStateSelector<SuggestionNotificationsState, SuggestionTarget[]>(suggestionTargetStateSelector(), 'targets');
}
/**
* Returns true if the Reciter Suggestion Targets are loaded.
* @function isReciterSuggestionTargetLoadedSelector
* Returns true if the Suggestion Targets are loaded.
* @function isSuggestionTargetLoadedSelector
* @return {boolean}
*/
export const isReciterSuggestionTargetLoadedSelector = createSelector(_getReciterSuggestionTargetState,
export const isSuggestionTargetLoadedSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.loaded
);
@@ -47,51 +47,51 @@ export const isReciterSuggestionTargetLoadedSelector = createSelector(_getRecite
* @function isDeduplicationSetsProcessingSelector
* @return {boolean}
*/
export const isReciterSuggestionTargetProcessingSelector = createSelector(_getReciterSuggestionTargetState,
export const isReciterSuggestionTargetProcessingSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.processing
);
/**
* Returns the total available pages of Reciter Suggestion Targets.
* @function getreciterSuggestionTargetTotalPagesSelector
* @function getSuggestionTargetTotalPagesSelector
* @return {number}
*/
export const getReciterSuggestionTargetTotalPagesSelector = createSelector(_getReciterSuggestionTargetState,
export const getSuggestionTargetTotalPagesSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.totalPages
);
/**
* Returns the current page of Reciter Suggestion Targets.
* @function getreciterSuggestionTargetCurrentPageSelector
* Returns the current page of Suggestion Targets.
* @function getSuggestionTargetCurrentPageSelector
* @return {number}
*/
export const getReciterSuggestionTargetCurrentPageSelector = createSelector(_getReciterSuggestionTargetState,
export const getSuggestionTargetCurrentPageSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.currentPage
);
/**
* Returns the total number of Reciter Suggestion Targets.
* @function getreciterSuggestionTargetTotalsSelector
* Returns the total number of Suggestion Targets.
* @function getSuggestionTargetTotalsSelector
* @return {number}
*/
export const getReciterSuggestionTargetTotalsSelector = createSelector(_getReciterSuggestionTargetState,
export const getSuggestionTargetTotalsSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.totalElements
);
/**
* Returns Suggestion Targets for the current user.
* @function getCurrentUserReciterSuggestionTargetSelector
* @function getCurrentUserSuggestionTargetSelector
* @return {SuggestionTarget[]}
*/
export const getCurrentUserSuggestionTargetsSelector = createSelector(_getReciterSuggestionTargetState,
export const getCurrentUserSuggestionTargetsSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.currentUserTargets
);
/**
* Returns whether or not the user has consulted their suggestions
* @function getCurrentUserReciterSuggestionTargetSelector
* @function getCurrentUserSuggestionTargetSelector
* @return {boolean}
*/
export const getCurrentUserSuggestionTargetsVisitedSelector = createSelector(_getReciterSuggestionTargetState,
export const getCurrentUserSuggestionTargetsVisitedSelector = createSelector(_getSuggestionTargetState,
(state: SuggestionNotificationsState) => state.suggestionTarget.currentUserTargetsVisited
);

View File

@@ -19,8 +19,8 @@
</ng-template>
</div>
<button (click)="notMine()" class="btn btn-danger ml-2"><i class="fa fa-ban"></i>
{{ notMineLabel() | translate}}</button>
<button (click)="ignoreSuggestion()" class="btn btn-danger ml-2"><i class="fa fa-ban"></i>
{{ ignoreSuggestionLabel() | translate}}</button>
<button *ngIf="!isBulk" (click)="toggleSeeEvidences()" [disabled]="!hasEvidence" class="btn btn-info ml-2">
<i class="fa fa-eye"></i>
<ng-container *ngIf="!seeEvidence"> {{ 'reciter.suggestion.seeEvidence' | translate}}</ng-container>

View File

@@ -1,12 +1,15 @@
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { ItemType } from '../../../core/shared/item-relationships/item-type.model';
import { ItemType } from '../../core/shared/item-relationships/item-type.model';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { Suggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { Suggestion } from '../../core/suggestion-notifications/models/suggestion.model';
import { SuggestionApproveAndImport } from '../suggestion-list-element/suggestion-list-element.component';
import { Collection } from '../../../core/shared/collection.model';
import { Collection } from '../../core/shared/collection.model';
import { take } from 'rxjs/operators';
import { CreateItemParentSelectorComponent } from '../../../shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component';
import { CreateItemParentSelectorComponent } from '../../shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component';
/**
* Show and trigger the actions to submit for a suggestion
*/
@Component({
selector: 'ds-suggestion-actions',
styleUrls: [ './suggestion-actions.component.scss' ],
@@ -27,7 +30,7 @@ export class SuggestionActionsComponent {
/**
* The component is used to Delete suggestion
*/
@Output() notMineClicked = new EventEmitter<string>();
@Output() ignoreSuggestionClicked = new EventEmitter<string>();
/**
* The component is used to approve & import
@@ -71,8 +74,8 @@ export class SuggestionActionsComponent {
/**
* Delete the suggestion
*/
notMine() {
this.notMineClicked.emit(this.isBulk ? undefined : this.object.id);
ignoreSuggestion() {
this.ignoreSuggestionClicked.emit(this.isBulk ? undefined : this.object.id);
}
/**
@@ -82,8 +85,8 @@ export class SuggestionActionsComponent {
this.seeEvidences.emit(!this.seeEvidence);
}
notMineLabel(): string {
return this.isBulk ? 'reciter.suggestion.notMine.bulk' : 'reciter.suggestion.notMine' ;
ignoreSuggestionLabel(): string {
return this.isBulk ? 'reciter.suggestion.ignoreSuggestion.bulk' : 'reciter.suggestion.ignoreSuggestion' ;
}
approveAndImportLabel(): string {

View File

@@ -1,7 +1,10 @@
import { Component, Input } from '@angular/core';
import { fadeIn } from '../../../../shared/animations/fade';
import { SuggestionEvidences } from '../../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { fadeIn } from '../../../shared/animations/fade';
import { SuggestionEvidences } from '../../../core/suggestion-notifications/models/suggestion.model';
/**
* Show suggestion evidences such as score (authorScore, dateScore)
*/
@Component({
selector: 'ds-suggestion-evidences',
styleUrls: [ './suggestion-evidences.component.scss' ],

View File

@@ -31,7 +31,7 @@
[isCollectionFixed]="isCollectionFixed"
(approveAndImport)="onApproveAndImport($event)"
(seeEvidences)="onSeeEvidences($event)"
(notMineClicked)="onNotMine($event)"
(ignoreSuggestionClicked)="onIgnoreSuggestion($event)"
></ds-suggestion-actions>
</div>
</div>

View File

@@ -5,8 +5,8 @@ import { NO_ERRORS_SCHEMA } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { TestScheduler } from 'rxjs/testing';
import { getTestScheduler } from 'jasmine-marbles';
import { mockSuggestionPublicationOne } from '../../../shared/mocks/reciter-suggestion.mock';
import { Item } from '../../../core/shared/item.model';
import { mockSuggestionPublicationOne } from '../../shared/mocks/publication-claim.mock';
import { Item } from '../../core/shared/item.model';
describe('SuggestionListElementComponent', () => {
@@ -66,9 +66,9 @@ describe('SuggestionListElementComponent', () => {
});
it('should emit for deletion', () => {
spyOn(component.notMineClicked, 'emit');
component.onNotMine('1234');
expect(component.notMineClicked.emit).toHaveBeenCalledWith('1234');
spyOn(component.ignoreSuggestionClicked, 'emit');
component.onIgnoreSuggestion('1234');
expect(component.ignoreSuggestionClicked.emit).toHaveBeenCalledWith('1234');
});
it('should emit for approve and import', () => {

View File

@@ -2,16 +2,22 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { fadeIn } from '../../../shared/animations/fade';
import { Suggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { Item } from '../../../core/shared/item.model';
import { isNotEmpty } from '../../../shared/empty.util';
import { fadeIn } from '../../shared/animations/fade';
import { Suggestion } from '../../core/suggestion-notifications/models/suggestion.model';
import { Item } from '../../core/shared/item.model';
import { isNotEmpty } from '../../shared/empty.util';
/**
* A simple interface to unite a specific suggestion and the id of the chosen collection
*/
export interface SuggestionApproveAndImport {
suggestion: Suggestion;
collectionId: string;
}
/**
* Show all the suggestions by researcher
*/
@Component({
selector: 'ds-suggestion-list-item',
styleUrls: ['./suggestion-list-element.component.scss'],
@@ -33,7 +39,7 @@ export class SuggestionListElementComponent implements OnInit {
/**
* The component is used to Delete suggestion
*/
@Output() notMineClicked = new EventEmitter();
@Output() ignoreSuggestionClicked = new EventEmitter();
/**
* The component is used to approve & import
@@ -69,8 +75,8 @@ export class SuggestionListElementComponent implements OnInit {
/**
* Delete the suggestion
*/
onNotMine(suggestionId: string) {
this.notMineClicked.emit(suggestionId);
onIgnoreSuggestion(suggestionId: string) {
this.ignoreSuggestionClicked.emit(suggestionId);
}
/**

View File

@@ -1,7 +1,7 @@
/* eslint-disable max-classes-per-file */
import { Action } from '@ngrx/store';
import { type } from '../../../shared/ngrx/type';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { type } from '../../shared/ngrx/type';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
/**
* For each action type in an action group, make a simple

View File

@@ -33,8 +33,9 @@
<div class="btn-group edit-field">
<button (click)="redirectToSuggestions(targetElement.id, targetElement.display)"
class="btn btn-outline-primary btn-sm"
title="{{'reciter.suggestion.button.review' | translate }}">
<span >{{'reciter.suggestion.button.review' | translate: { total: targetElement.total.toString() } }} </span>
title="{{('reciter.suggestion.button.review.title' | translate: { total: targetElement.total.toString() }) +
targetElement.display}}">
<span>{{'reciter.suggestion.button.review' | translate: { total: targetElement.total.toString() } }} </span>
<i class="fas fa-lightbulb"></i>
</button>
</div>

View File

@@ -4,13 +4,13 @@ import { Router } from '@angular/router';
import { Observable, Subscription } from 'rxjs';
import { distinctUntilChanged, take } from 'rxjs/operators';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { hasValue } from '../../../shared/empty.util';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
import { hasValue } from '../../shared/empty.util';
import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
import { SuggestionTargetsStateService } from './suggestion-targets.state.service';
import { getSuggestionPageRoute } from '../../../suggestions-page/suggestions-page-routing-paths';
import { getSuggestionPageRoute } from '../../suggestions-page/suggestions-page-routing-paths';
import { SuggestionsService } from '../suggestions.service';
import { PaginationService } from '../../../core/pagination/pagination.service';
import { PaginationService } from '../../core/pagination/pagination.service';
/**
* Component to display the Suggestion Target list.
@@ -69,8 +69,8 @@ export class SuggestionTargetsComponent implements OnInit {
* Component initialization.
*/
ngOnInit(): void {
this.targets$ = this.suggestionTargetsStateService.getReciterSuggestionTargets();
this.totalElements$ = this.suggestionTargetsStateService.getReciterSuggestionTargetsTotals();
this.targets$ = this.suggestionTargetsStateService.getSuggestionTargets();
this.totalElements$ = this.suggestionTargetsStateService.getSuggestionTargetsTotals();
}
/**
@@ -78,7 +78,7 @@ export class SuggestionTargetsComponent implements OnInit {
*/
ngAfterViewInit(): void {
this.subs.push(
this.suggestionTargetsStateService.isReciterSuggestionTargetsLoaded().pipe(
this.suggestionTargetsStateService.isSuggestionTargetsLoaded().pipe(
take(1)
).subscribe(() => {
this.getSuggestionTargets();
@@ -93,7 +93,7 @@ export class SuggestionTargetsComponent implements OnInit {
* 'true' if the targets are loading, 'false' otherwise.
*/
public isTargetsLoading(): Observable<boolean> {
return this.suggestionTargetsStateService.isReciterSuggestionTargetsLoading();
return this.suggestionTargetsStateService.isSuggestionTargetsLoading();
}
/**
@@ -103,7 +103,7 @@ export class SuggestionTargetsComponent implements OnInit {
* 'true' if there are operations running on the targets (ex.: a REST call), 'false' otherwise.
*/
public isTargetsProcessing(): Observable<boolean> {
return this.suggestionTargetsStateService.isReciterSuggestionTargetsProcessing();
return this.suggestionTargetsStateService.isSuggestionTargetsProcessing();
}
/**
@@ -136,7 +136,7 @@ export class SuggestionTargetsComponent implements OnInit {
distinctUntilChanged(),
take(1)
).subscribe((options: PaginationComponentOptions) => {
this.suggestionTargetsStateService.dispatchRetrieveReciterSuggestionTargets(
this.suggestionTargetsStateService.dispatchRetrieveSuggestionTargets(
this.source,
options.pageSize,
options.currentPage

View File

@@ -14,10 +14,10 @@ import {
RetrieveTargetsBySourceAction,
SuggestionTargetActionTypes,
} from './suggestion-targets.actions';
import { PaginatedList } from '../../../core/data/paginated-list.model';
import { PaginatedList } from '../../core/data/paginated-list.model';
import { SuggestionsService } from '../suggestions.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
/**
* Provides effect methods for the Suggestion Targets actions.

View File

@@ -1,5 +1,5 @@
import { SuggestionTargetActionTypes, SuggestionTargetsActions } from './suggestion-targets.actions';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
/**
* The interface representing the OpenAIRE suggestion targets state.

View File

@@ -7,20 +7,20 @@ import { map } from 'rxjs/operators';
import {
getCurrentUserSuggestionTargetsSelector,
getCurrentUserSuggestionTargetsVisitedSelector,
getReciterSuggestionTargetCurrentPageSelector,
getReciterSuggestionTargetTotalsSelector,
isReciterSuggestionTargetLoadedSelector,
getSuggestionTargetCurrentPageSelector,
getSuggestionTargetTotalsSelector,
isSuggestionTargetLoadedSelector,
isReciterSuggestionTargetProcessingSelector,
reciterSuggestionTargetObjectSelector
suggestionTargetObjectSelector
} from '../selectors';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
import {
ClearSuggestionTargetsAction,
MarkUserSuggestionsAsVisitedAction,
RefreshUserSuggestionsAction,
RetrieveTargetsBySourceAction
} from './suggestion-targets.actions';
import { SuggestionNotificationsState } from '../../../notifications/notifications.reducer';
import { SuggestionNotificationsState } from '../../notifications/notifications.reducer';
/**
* The service handling the Suggestion targets State.
@@ -35,80 +35,80 @@ export class SuggestionTargetsStateService {
constructor(private store: Store<SuggestionNotificationsState>) { }
/**
* Returns the list of Reciter Suggestion Targets from the state.
* Returns the list of Suggestion Targets from the state.
*
* @return Observable<OpenaireReciterSuggestionTarget>
* The list of Reciter Suggestion Targets.
* @return Observable<SuggestionTarget>
* The list of Suggestion Targets.
*/
public getReciterSuggestionTargets(): Observable<SuggestionTarget[]> {
return this.store.pipe(select(reciterSuggestionTargetObjectSelector()));
public getSuggestionTargets(): Observable<SuggestionTarget[]> {
return this.store.pipe(select(suggestionTargetObjectSelector()));
}
/**
* Returns the information about the loading status of the Reciter Suggestion Targets (if it's running or not).
* Returns the information about the loading status of the Suggestion Targets (if it's running or not).
*
* @return Observable<boolean>
* 'true' if the targets are loading, 'false' otherwise.
*/
public isReciterSuggestionTargetsLoading(): Observable<boolean> {
public isSuggestionTargetsLoading(): Observable<boolean> {
return this.store.pipe(
select(isReciterSuggestionTargetLoadedSelector),
select(isSuggestionTargetLoadedSelector),
map((loaded: boolean) => !loaded)
);
}
/**
* Returns the information about the loading status of the Reciter Suggestion Targets (whether or not they were loaded).
* Returns the information about the loading status of the Suggestion Targets (whether or not they were loaded).
*
* @return Observable<boolean>
* 'true' if the targets are loaded, 'false' otherwise.
*/
public isReciterSuggestionTargetsLoaded(): Observable<boolean> {
return this.store.pipe(select(isReciterSuggestionTargetLoadedSelector));
public isSuggestionTargetsLoaded(): Observable<boolean> {
return this.store.pipe(select(isSuggestionTargetLoadedSelector));
}
/**
* Returns the information about the processing status of the Reciter Suggestion Targets (if it's running or not).
* Returns the information about the processing status of the Suggestion Targets (if it's running or not).
*
* @return Observable<boolean>
* 'true' if there are operations running on the targets (ex.: a REST call), 'false' otherwise.
*/
public isReciterSuggestionTargetsProcessing(): Observable<boolean> {
public isSuggestionTargetsProcessing(): Observable<boolean> {
return this.store.pipe(select(isReciterSuggestionTargetProcessingSelector));
}
/**
* Returns, from the state, the total available pages of the Reciter Suggestion Targets.
* Returns, from the state, the total available pages of the Suggestion Targets.
*
* @return Observable<number>
* The number of the Reciter Suggestion Targets pages.
* The number of the Suggestion Targets pages.
*/
public getReciterSuggestionTargetsTotalPages(): Observable<number> {
return this.store.pipe(select(getReciterSuggestionTargetTotalsSelector));
public getSuggestionTargetsTotalPages(): Observable<number> {
return this.store.pipe(select(getSuggestionTargetTotalsSelector));
}
/**
* Returns the current page of the Reciter Suggestion Targets, from the state.
* Returns the current page of the Suggestion Targets, from the state.
*
* @return Observable<number>
* The number of the current Reciter Suggestion Targets page.
* The number of the current Suggestion Targets page.
*/
public getReciterSuggestionTargetsCurrentPage(): Observable<number> {
return this.store.pipe(select(getReciterSuggestionTargetCurrentPageSelector));
public getSuggestionTargetsCurrentPage(): Observable<number> {
return this.store.pipe(select(getSuggestionTargetCurrentPageSelector));
}
/**
* Returns the total number of the Reciter Suggestion Targets.
* Returns the total number of the Suggestion Targets.
*
* @return Observable<number>
* The number of the Reciter Suggestion Targets.
* The number of the Suggestion Targets.
*/
public getReciterSuggestionTargetsTotals(): Observable<number> {
return this.store.pipe(select(getReciterSuggestionTargetTotalsSelector));
public getSuggestionTargetsTotals(): Observable<number> {
return this.store.pipe(select(getSuggestionTargetTotalsSelector));
}
/**
* Dispatch a request to change the Reciter Suggestion Targets state, retrieving the targets from the server.
* Dispatch a request to change the Suggestion Targets state, retrieving the targets from the server.
*
* @param source
* the source for which to retrieve suggestion targets
@@ -117,15 +117,15 @@ export class SuggestionTargetsStateService {
* @param currentPage
* The number of the current page.
*/
public dispatchRetrieveReciterSuggestionTargets(source: string, elementsPerPage: number, currentPage: number): void {
public dispatchRetrieveSuggestionTargets(source: string, elementsPerPage: number, currentPage: number): void {
this.store.dispatch(new RetrieveTargetsBySourceAction(source, elementsPerPage, currentPage));
}
/**
* Returns, from the state, the reciter suggestion targets for the current user.
* Returns, from the state, the suggestion targets for the current user.
*
* @return Observable<OpenaireReciterSuggestionTarget>
* The Reciter Suggestion Targets object.
* The Suggestion Targets object.
*/
public getCurrentUserSuggestionTargets(): Observable<SuggestionTarget[]> {
return this.store.pipe(select(getCurrentUserSuggestionTargetsSelector));

View File

@@ -1,30 +1,30 @@
import { SuggestionsService } from './suggestions.service';
import { AuthService } from '../../core/auth/auth.service';
import { ResearcherProfileDataService } from '../../core/profile/researcher-profile-data.service';
import { AuthService } from '../core/auth/auth.service';
import { ResearcherProfileDataService } from '../core/profile/researcher-profile-data.service';
import {
SuggestionsDataService
} from '../../core/suggestion-notifications/reciter-suggestions/suggestions-data.service';
} from '../core/suggestion-notifications/suggestions-data.service';
import {
SuggestionSourceDataService
} from '../../core/suggestion-notifications/reciter-suggestions/source/suggestion-source-data.service';
} from '../core/suggestion-notifications/source/suggestion-source-data.service';
import {
SuggestionTargetDataService
} from '../../core/suggestion-notifications/reciter-suggestions/target/suggestion-target-data.service';
} from '../core/suggestion-notifications/target/suggestion-target-data.service';
import { TestScheduler } from 'rxjs/testing';
import { getTestScheduler } from 'jasmine-marbles';
import { of as observableOf } from 'rxjs';
import { FindListOptions } from '../../core/data/find-list-options.model';
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
import { ResearcherProfile } from '../../core/profile/model/researcher-profile.model';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
import { mockSuggestionPublicationOne } from '../../shared/mocks/reciter-suggestion.mock';
import { ResourceType } from '../../core/shared/resource-type';
import { FindListOptions } from '../core/data/find-list-options.model';
import { SortDirection, SortOptions } from '../core/cache/models/sort-options.model';
import { ResearcherProfile } from '../core/profile/model/researcher-profile.model';
import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils';
import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
import { mockSuggestionPublicationOne } from '../shared/mocks/publication-claim.mock';
import { ResourceType } from '../core/shared/resource-type';
import {
SuggestionTarget
} from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
} from '../core/suggestion-notifications/models/suggestion-target.model';
describe('SuggestionsService test', () => {
let scheduler: TestScheduler;
@@ -151,14 +151,14 @@ describe('SuggestionsService test', () => {
it('should delete suggestion', () => {
spyOn(service, 'deleteReviewedSuggestion').and.returnValue(createSuccessfulRemoteDataObject$({}));
service.notMine('1234');
service.ignoreSuggestion('1234');
expect(service.deleteReviewedSuggestion).toHaveBeenCalledWith('1234');
});
it('should delete suggestions', () => {
spyOn(service, 'notMine');
service.notMineMultiple([mockSuggestionPublicationOne]);
expect(service.notMine).toHaveBeenCalledWith(mockSuggestionPublicationOne.id);
service.ignoreSuggestionMultiple([mockSuggestionPublicationOne]);
expect(service.ignoreSuggestion).toHaveBeenCalledWith(mockSuggestionPublicationOne.id);
});
it('should get target Uuid', () => {

View File

@@ -1,11 +1,14 @@
import { Component, OnInit } from '@angular/core';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
import { TranslateService } from '@ngx-translate/core';
import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { SuggestionsService } from '../suggestions.service';
import { Observable } from 'rxjs';
/**
* Show suggestions notification, used on myDSpace and Profile pages
*/
@Component({
selector: 'ds-suggestions-notification',
templateUrl: './suggestions-notification.component.html',
@@ -22,13 +25,13 @@ export class SuggestionsNotificationComponent implements OnInit {
constructor(
private translateService: TranslateService,
private reciterSuggestionStateService: SuggestionTargetsStateService,
private suggestionTargetsStateService: SuggestionTargetsStateService,
private notificationsService: NotificationsService,
private suggestionsService: SuggestionsService
) { }
ngOnInit() {
this.suggestionsRD$ = this.reciterSuggestionStateService.getCurrentUserSuggestionTargets();
this.suggestionsRD$ = this.suggestionTargetsStateService.getCurrentUserSuggestionTargets();
}
/**

View File

@@ -3,11 +3,11 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SuggestionsPopupComponent } from './suggestions-popup.component';
import { TranslateModule } from '@ngx-translate/core';
import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { of as observableOf } from 'rxjs';
import { mockSuggestionTargetsObjectOne } from '../../../shared/mocks/reciter-suggestion-targets.mock';
import { mockSuggestionTargetsObjectOne } from '../../shared/mocks/publication-claim-targets.mock';
import { SuggestionsService } from '../suggestions.service';
describe('SuggestionsPopupComponent', () => {

View File

@@ -1,13 +1,16 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { SuggestionsService } from '../suggestions.service';
import { takeUntil } from 'rxjs/operators';
import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { isNotEmpty } from '../../../shared/empty.util';
import { SuggestionTarget } from '../../core/suggestion-notifications/models/suggestion-target.model';
import { isNotEmpty } from '../../shared/empty.util';
import { combineLatest, Subject } from 'rxjs';
/**
* Show suggestions on a popover window, used on the homepage
*/
@Component({
selector: 'ds-suggestions-popup',
templateUrl: './suggestions-popup.component.html',
@@ -21,7 +24,7 @@ export class SuggestionsPopupComponent implements OnInit, OnDestroy {
constructor(
private translateService: TranslateService,
private reciterSuggestionStateService: SuggestionTargetsStateService,
private suggestionTargetsStateService: SuggestionTargetsStateService,
private notificationsService: NotificationsService,
private suggestionsService: SuggestionsService
) { }
@@ -33,14 +36,14 @@ export class SuggestionsPopupComponent implements OnInit, OnDestroy {
public initializePopup() {
const notifier = new Subject();
this.subscription = combineLatest([
this.reciterSuggestionStateService.getCurrentUserSuggestionTargets(),
this.reciterSuggestionStateService.hasUserVisitedSuggestions()
this.suggestionTargetsStateService.getCurrentUserSuggestionTargets(),
this.suggestionTargetsStateService.hasUserVisitedSuggestions()
]).pipe(takeUntil(notifier)).subscribe(([suggestions, visited]) => {
this.reciterSuggestionStateService.dispatchRefreshUserSuggestionsAction();
this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction();
if (isNotEmpty(suggestions)) {
if (!visited) {
suggestions.forEach((suggestionTarget: SuggestionTarget) => this.showNotificationForNewSuggestions(suggestionTarget));
this.reciterSuggestionStateService.dispatchMarkUserSuggestionsAsVisitedAction();
this.suggestionTargetsStateService.dispatchMarkUserSuggestionsAsVisitedAction();
notifier.next(null);
notifier.complete();
}

View File

@@ -3,38 +3,41 @@ import { Injectable } from '@angular/core';
import { of, forkJoin, Observable } from 'rxjs';
import { catchError, map, mergeMap, take } from 'rxjs/operators';
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
import { RemoteData } from '../../core/data/remote-data';
import { PaginatedList } from '../../core/data/paginated-list.model';
import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { AuthService } from '../../core/auth/auth.service';
import { hasValue, isNotEmpty } from '../../shared/empty.util';
import { ResearcherProfile } from '../../core/profile/model/researcher-profile.model';
import { SortDirection, SortOptions } from '../core/cache/models/sort-options.model';
import { RemoteData } from '../core/data/remote-data';
import { PaginatedList } from '../core/data/paginated-list.model';
import { SuggestionTarget } from '../core/suggestion-notifications/models/suggestion-target.model';
import { AuthService } from '../core/auth/auth.service';
import { hasValue, isNotEmpty } from '../shared/empty.util';
import { ResearcherProfile } from '../core/profile/model/researcher-profile.model';
import {
getAllSucceededRemoteDataPayload,
getFinishedRemoteData,
getFirstSucceededRemoteDataPayload,
getFirstSucceededRemoteListPayload
} from '../../core/shared/operators';
import { Suggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
} from '../core/shared/operators';
import { Suggestion } from '../core/suggestion-notifications/models/suggestion.model';
import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
import { TranslateService } from '@ngx-translate/core';
import { NoContent } from '../../core/shared/NoContent.model';
import { environment } from '../../../environments/environment';
import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
import {FindListOptions} from '../../core/data/find-list-options.model';
import {SuggestionConfig} from '../../../config/layout-config.interfaces';
import { ResearcherProfileDataService } from '../../core/profile/researcher-profile-data.service';
import { NoContent } from '../core/shared/NoContent.model';
import { environment } from '../../environments/environment';
import { WorkspaceItem } from '../core/submission/models/workspaceitem.model';
import {FindListOptions} from '../core/data/find-list-options.model';
import {SuggestionConfig} from '../../config/layout-config.interfaces';
import { ResearcherProfileDataService } from '../core/profile/researcher-profile-data.service';
import {
SuggestionSourceDataService
} from '../../core/suggestion-notifications/reciter-suggestions/source/suggestion-source-data.service';
} from '../core/suggestion-notifications/source/suggestion-source-data.service';
import {
SuggestionTargetDataService
} from '../../core/suggestion-notifications/reciter-suggestions/target/suggestion-target-data.service';
} from '../core/suggestion-notifications/target/suggestion-target-data.service';
import {
SuggestionsDataService
} from '../../core/suggestion-notifications/reciter-suggestions/suggestions-data.service';
} from '../core/suggestion-notifications/suggestions-data.service';
/**
* useful for multiple approvals and ignores operation
* */
export interface SuggestionBulkResult {
success: number;
fails: number;
@@ -199,7 +202,7 @@ export class SuggestionsService {
* Perform the delete operation over a single suggestion.
* @param suggestionId
*/
public notMine(suggestionId): Observable<RemoteData<NoContent>> {
public ignoreSuggestion(suggestionId): Observable<RemoteData<NoContent>> {
return this.deleteReviewedSuggestion(suggestionId).pipe(
catchError((error) => of(null))
);
@@ -229,8 +232,8 @@ export class SuggestionsService {
* Perform a bulk notMine operation.
* @param suggestions the array containing the suggestions
*/
public notMineMultiple(suggestions: Suggestion[]): Observable<SuggestionBulkResult> {
return forkJoin(suggestions.map((suggestion: Suggestion) => this.notMine(suggestion.id)))
public ignoreSuggestionMultiple(suggestions: Suggestion[]): Observable<SuggestionBulkResult> {
return forkJoin(suggestions.map((suggestion: Suggestion) => this.ignoreSuggestion(suggestion.id)))
.pipe(map((results: RemoteData<NoContent>[]) => {
return {
success: results.filter((result) => result != null).length,

View File

@@ -4,7 +4,7 @@ import { RouterModule } from '@angular/router';
import { SuggestionsPageResolver } from './suggestions-page.resolver';
import { SuggestionsPageComponent } from './suggestions-page.component';
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
import { ItemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.resolver';
@NgModule({
imports: [
@@ -13,11 +13,11 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
path: ':targetId',
resolve: {
suggestionTargets: SuggestionsPageResolver,
breadcrumb: I18nBreadcrumbResolver
breadcrumb: ItemBreadcrumbResolver//I18nBreadcrumbResolver
},
data: {
title: 'admin.notifications.recitersuggestion.page.title',
breadcrumbKey: 'admin.notifications.recitersuggestion',
title: 'admin.notifications.publicationclaim.page.title',
breadcrumbKey: 'admin.notifications.publicationclaim',
showBreadcrumbsFluid: false
},
canActivate: [AuthenticatedGuard],
@@ -27,7 +27,8 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
])
],
providers: [
SuggestionsPageResolver
SuggestionsPageResolver,
ItemBreadcrumbResolver
]
})
export class SuggestionsPageRoutingModule {

View File

@@ -19,7 +19,7 @@
[isBulk]="true"
[isCollectionFixed]="isCollectionFixed(suggestionsRD.page)"
(approveAndImport)="approveAndImportAllSelected($event)"
(notMineClicked)="notMineAllSelected()"></ds-suggestion-actions>
(ignoreSuggestionClicked)="ignoreSuggestionAllSelected()"></ds-suggestion-actions>
<i class='fas fa-circle-notch fa-spin' *ngIf="isBulkOperationPending"></i>
</div>
<ds-loading *ngIf="(processing$ | async)"></ds-loading>
@@ -35,7 +35,7 @@
[object]="object"
[isSelected]="selectedSuggestions[object.id]"
[isCollectionFixed]="isCollectionFixed([object])"
(notMineClicked)="notMine($event)"
(ignoreSuggestionClicked)="ignoreSuggestion($event)"
(selected)="onSelected(object, $event)"
(approveAndImport)="approveAndImport($event)"></ds-suggestion-list-item>
</li>

View File

@@ -10,23 +10,23 @@ import { SuggestionsPageComponent } from './suggestions-page.component';
import {
SuggestionApproveAndImport,
SuggestionListElementComponent
} from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component';
import { SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service';
} from '../suggestion-notifications/suggestion-list-element/suggestion-list-element.component';
import { SuggestionsService } from '../suggestion-notifications/suggestions.service';
import { getMockSuggestionNotificationsStateService, getMockSuggestionsService } from '../shared/mocks/suggestion.mock';
import { buildPaginatedList, PaginatedList } from '../core/data/paginated-list.model';
import { Suggestion } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { mockSuggestionPublicationOne, mockSuggestionPublicationTwo } from '../shared/mocks/reciter-suggestion.mock';
import { SuggestionEvidencesComponent } from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component';
import { Suggestion } from '../core/suggestion-notifications/models/suggestion.model';
import { mockSuggestionPublicationOne, mockSuggestionPublicationTwo } from '../shared/mocks/publication-claim.mock';
import { SuggestionEvidencesComponent } from '../suggestion-notifications/suggestion-list-element/suggestion-evidences/suggestion-evidences.component';
import { ObjectKeysPipe } from '../shared/utils/object-keys-pipe';
import { VarDirective } from '../shared/utils/var.directive';
import { ActivatedRoute, Router } from '@angular/router';
import { RouterStub } from '../shared/testing/router.stub';
import { mockSuggestionTargetsObjectOne } from '../shared/mocks/reciter-suggestion-targets.mock';
import { mockSuggestionTargetsObjectOne } from '../shared/mocks/publication-claim-targets.mock';
import { AuthService } from '../core/auth/auth.service';
import { NotificationsService } from '../shared/notifications/notifications.service';
import { NotificationsServiceStub } from '../shared/testing/notifications-service.stub';
import { getMockTranslateService } from '../shared/mocks/translate.service.mock';
import { SuggestionTargetsStateService } from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service';
import { SuggestionTargetsStateService } from '../suggestion-notifications/suggestion-targets/suggestion-targets.state.service';
import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
import { createSuccessfulRemoteDataObject } from '../shared/remote-data.utils';
import { PageInfo } from '../core/shared/page-info.model';
@@ -138,7 +138,7 @@ describe('SuggestionPageComponent', () => {
scheduler.schedule(() => fixture.detectChanges());
scheduler.flush();
component.notMine('1');
component.ignoreSuggestion('1');
expect(mockSuggestionsService.notMine).toHaveBeenCalledWith('1');
expect(mockSuggestionsTargetStateService.dispatchRefreshUserSuggestionsAction).toHaveBeenCalled();
expect(component.updatePage).toHaveBeenCalled();
@@ -149,7 +149,7 @@ describe('SuggestionPageComponent', () => {
scheduler.schedule(() => fixture.detectChanges());
scheduler.flush();
component.notMineAllSelected();
component.ignoreSuggestionAllSelected();
expect(mockSuggestionsService.notMineMultiple).toHaveBeenCalled();
expect(mockSuggestionsTargetStateService.dispatchRefreshUserSuggestionsAction).toHaveBeenCalled();
expect(component.updatePage).toHaveBeenCalled();

View File

@@ -9,14 +9,14 @@ import { SortDirection, SortOptions, } from '../core/cache/models/sort-options.m
import { PaginatedList } from '../core/data/paginated-list.model';
import { RemoteData } from '../core/data/remote-data';
import { getFirstSucceededRemoteDataPayload } from '../core/shared/operators';
import { SuggestionBulkResult, SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service';
import { SuggestionBulkResult, SuggestionsService } from '../suggestion-notifications/suggestions.service';
import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model';
import { Suggestion } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion.model';
import { SuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { Suggestion } from '../core/suggestion-notifications/models/suggestion.model';
import { SuggestionTarget } from '../core/suggestion-notifications/models/suggestion-target.model';
import { AuthService } from '../core/auth/auth.service';
import { SuggestionApproveAndImport } from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component';
import { SuggestionApproveAndImport } from '../suggestion-notifications/suggestion-list-element/suggestion-list-element.component';
import { NotificationsService } from '../shared/notifications/notifications.service';
import { SuggestionTargetsStateService } from '../suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service';
import { SuggestionTargetsStateService } from '../suggestion-notifications/suggestion-targets/suggestion-targets.state.service';
import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
import { PaginationService } from '../core/pagination/pagination.service';
import { WorkspaceItem } from '../core/submission/models/workspaceitem.model';
@@ -155,8 +155,8 @@ export class SuggestionsPageComponent implements OnInit {
* Used to delete a suggestion.
* @suggestionId
*/
notMine(suggestionId) {
this.suggestionService.notMine(suggestionId).subscribe((res) => {
ignoreSuggestion(suggestionId) {
this.suggestionService.ignoreSuggestion(suggestionId).subscribe((res) => {
this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction();
this.updatePage();
});
@@ -165,10 +165,10 @@ export class SuggestionsPageComponent implements OnInit {
/**
* Used to delete all selected suggestions.
*/
notMineAllSelected() {
ignoreSuggestionAllSelected() {
this.isBulkOperationPending = true;
this.suggestionService
.notMineMultiple(Object.values(this.selectedSuggestions))
.ignoreSuggestionMultiple(Object.values(this.selectedSuggestions))
.subscribe((results: SuggestionBulkResult) => {
this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction();
this.updatePage();

View File

@@ -4,8 +4,8 @@ import { CommonModule } from '@angular/common';
import { SuggestionsPageComponent } from './suggestions-page.component';
import { SharedModule } from '../shared/shared.module';
import { SuggestionsPageRoutingModule } from './suggestions-page-routing.module';
import { SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service';
import { SuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/suggestions-data.service';
import { SuggestionsService } from '../suggestion-notifications/suggestions.service';
import { SuggestionsDataService } from '../core/suggestion-notifications/suggestions-data.service';
import { NotificationsModule } from '../notifications/notifications.module';
@NgModule({

View File

@@ -6,10 +6,10 @@ import { find } from 'rxjs/operators';
import { RemoteData } from '../core/data/remote-data';
import { hasValue } from '../shared/empty.util';
import { SuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model';
import { SuggestionTarget } from '../core/suggestion-notifications/models/suggestion-target.model';
import {
SuggestionTargetDataService
} from '../core/suggestion-notifications/reciter-suggestions/target/suggestion-target-data.service';
} from '../core/suggestion-notifications/target/suggestion-target-data.service';
/**
* This class represents a resolver that requests a specific collection before the route is activated

View File

@@ -24,9 +24,9 @@
"404.page-not-found": "page not found",
"admin.notifications.recitersuggestion.breadcrumbs": "Suggestions",
"admin.notifications.publicationclaim.breadcrumbs": "Suggestions",
"admin.notifications.recitersuggestion.page.title": "Suggestions",
"admin.notifications.publicationclaim.page.title": "Suggestions",
"error-page.description.401": "unauthorized",
@@ -2950,7 +2950,7 @@
"menu.section.quality-assurance": "Quality Assurance",
"menu.section.notifications_reciter": "Publication Claim",
"menu.section.notifications_publication-claim": "Publication Claim",
"menu.section.pin": "Pin sidebar",
@@ -3562,63 +3562,67 @@
"media-viewer.playlist": "Playlist",
"reciter.suggestion.loading": "Loading ...",
"suggestion.loading": "Loading ...",
"reciter.suggestion.title": "Suggestions",
"suggestion.title": "Publication Claims",
"reciter.suggestion.targets.description": "Below you can see all the suggestions ",
"suggestion.title.breadcrumbs": "Publication Claims",
"reciter.suggestion.targets": "Current Suggestions",
"suggestion.targets.description": "Below you can see all the suggestions ",
"reciter.suggestion.table.name": "Researcher Name",
"suggestion.targets": "Current Suggestions",
"reciter.suggestion.table.actions": "Actions",
"suggestion.table.name": "Researcher Name",
"reciter.suggestion.button.review": "Review {{ total }} suggestion(s)",
"suggestion.table.actions": "Actions",
"reciter.suggestion.noTargets": "No target found.",
"suggestion.button.review": "Review {{ total }} suggestion(s)",
"reciter.suggestion.target.error.service.retrieve": "An error occurred while loading the Suggestion targets",
"suggestion.button.review.title": "Review {{ total }} suggestion(s) for ",
"reciter.suggestion.evidence.type": "Type",
"suggestion.noTargets": "No target found.",
"reciter.suggestion.evidence.score": "Score",
"suggestion.target.error.service.retrieve": "An error occurred while loading the Suggestion targets",
"reciter.suggestion.evidence.notes": "Notes",
"suggestion.evidence.type": "Type",
"reciter.suggestion.approveAndImport": "Approve & import",
"suggestion.evidence.score": "Score",
"reciter.suggestion.approveAndImport.success": "The suggestion has been imported successfully. <a href='/workspaceitems/{{workspaceItemId}}/edit'>View.</a>",
"suggestion.evidence.notes": "Notes",
"reciter.suggestion.approveAndImport.bulk": "Approve & import Selected",
"suggestion.approveAndImport": "Approve & import",
"reciter.suggestion.approveAndImport.bulk.success": "{{ count }} suggestions have been imported successfully ",
"suggestion.approveAndImport.success": "The suggestion has been imported successfully. <a href='/workspaceitems/{{workspaceItemId}}/edit'>View.</a>",
"reciter.suggestion.approveAndImport.bulk.error": "{{ count }} suggestions haven't been imported due to unexpected server errors",
"suggestion.approveAndImport.bulk": "Approve & import Selected",
"reciter.suggestion.notMine": "Not mine",
".suggestion.approveAndImport.bulk.success": "{{ count }} suggestions have been imported successfully ",
"reciter.suggestion.notMine.success": "The suggestion has been discarded",
"suggestion.approveAndImport.bulk.error": "{{ count }} suggestions haven't been imported due to unexpected server errors",
"reciter.suggestion.notMine.bulk": "Not mine Selected",
"suggestion.ignoreSuggestion": "Ignore Suggestion",
"reciter.suggestion.notMine.bulk.success": "{{ count }} suggestions have been discarded ",
"suggestion.ignoreSuggestion.success": "The suggestion has been discarded",
"reciter.suggestion.notMine.bulk.error": "{{ count }} suggestions haven't been discarded due to unexpected server errors",
"suggestion.ignoreSuggestion.bulk": "Ignore Suggestion Selected",
"reciter.suggestion.seeEvidence": "See evidence",
"suggestion.ignoreSuggestion.bulk.success": "{{ count }} suggestions have been discarded ",
"reciter.suggestion.hideEvidence": "Hide evidence",
"suggestion.ignoreSuggestion.bulk.error": "{{ count }} suggestions haven't been discarded due to unexpected server errors",
"reciter.suggestion.suggestionFor": "Suggestion for",
"suggestion.seeEvidence": "See evidence",
"reciter.suggestion.source.openaire": "OpenAIRE Graph",
"suggestion.hideEvidence": "Hide evidence",
"reciter.suggestion.from.source": "from the ",
"suggestion.suggestionFor": "Suggestion for",
"reciter.suggestion.totalScore": "Total Score",
"suggestion.source.openaire": "OpenAIRE Graph",
"reciter.suggestion.type.openaire": "OpenAIRE",
"suggestion.from.source": "from the ",
"suggestion.totalScore": "Total Score",
"suggestion.type.openaire": "OpenAIRE",
"register-email.title": "New user registration",