Skip to content

Commit 883ceea

Browse files
committed
[DURACOM-247] Refactored by using a map of promises
1 parent 115445a commit 883ceea

6 files changed

Lines changed: 90 additions & 22 deletions

File tree

src/app/core/cache/builders/link.service.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
take,
66
} from 'rxjs/operators';
77

8-
import { APP_DATA_SERVICES_MAP } from '../../../../config/app-config.interface';
8+
import { APP_DATA_SERVICES_MAP, LazyDataServicesMap } from '../../../../config/app-config.interface';
99
import { TestDataService } from '../../../shared/testing/test-data-service.mock';
1010
import { followLink } from '../../../shared/utils/follow-link-config.model';
1111
import { HALLink } from '../../shared/hal-link.model';
@@ -37,9 +37,9 @@ class TestModel implements HALResource {
3737
successor?: TestModel;
3838
}
3939

40-
const mockDataServiceMap: any = {
41-
[TEST_MODEL.value]: () => import('../../../shared/testing/test-data-service.mock').then(m => m.TestDataService),
42-
};
40+
const mockDataServiceMap: any = new Map([
41+
[TEST_MODEL.value, () => import('../../../shared/testing/test-data-service.mock').then(m => m.TestDataService)],
42+
]);
4343

4444
let testDataService: TestDataService;
4545

src/app/core/data-services-map.ts

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,75 @@ import { CLAIMED_TASK } from './tasks/models/claimed-task-object.resource-type';
6969
import { POOL_TASK } from './tasks/models/pool-task-object.resource-type';
7070
import { WORKFLOW_ACTION } from './tasks/models/workflow-action-object.resource-type';
7171

72-
export const LAZY_DATA_SERVICES: LazyDataServicesMap = {
72+
export const LAZY_DATA_SERVICES: LazyDataServicesMap = new Map([
73+
[AUTHORIZATION.value, () => import('./data/feature-authorization/authorization-data.service').then(m => m.AuthorizationDataService)],
74+
[BROWSE_DEFINITION.value, () => import('./browse/browse-definition-data.service').then(m => m.BrowseDefinitionDataService)],
75+
[BULK_ACCESS_CONDITION_OPTIONS.value, () => import('./config/bulk-access-config-data.service').then(m => m.BulkAccessConfigDataService)],
76+
[METADATA_SCHEMA.value, () => import('./data/metadata-schema-data.service').then(m => m.MetadataSchemaDataService)],
77+
[SUBMISSION_UPLOADS_TYPE.value, () => import('./config/submission-uploads-config-data.service').then(m => m.SubmissionUploadsConfigDataService)],
78+
[BITSTREAM.value, () => import('./data/bitstream-data.service').then(m => m.BitstreamDataService)],
79+
[SUBMISSION_ACCESSES_TYPE.value, () => import('./config/submission-accesses-config-data.service').then(m => m.SubmissionAccessesConfigDataService)],
80+
[SYSTEMWIDEALERT.value, () => import('./data/system-wide-alert-data.service').then(m => m.SystemWideAlertDataService)],
81+
[USAGE_REPORT.value, () => import('./statistics/usage-report-data.service').then(m => m.UsageReportDataService)],
82+
[ACCESS_STATUS.value, () => import('./data/access-status-data.service').then(m => m.AccessStatusDataService)],
83+
[COLLECTION.value, () => import('./data/collection-data.service').then(m => m.CollectionDataService)],
84+
[CLAIMED_TASK.value, () => import('./tasks/claimed-task-data.service').then(m => m.ClaimedTaskDataService)],
85+
[VOCABULARY_ENTRY.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)],
86+
[ITEM_TYPE.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)],
87+
[LICENSE.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)],
88+
[SUBSCRIPTION.value, () => import('../shared/subscriptions/subscriptions-data.service').then(m => m.SubscriptionsDataService)],
89+
[COMMUNITY.value, () => import('./data/community-data.service').then(m => m.CommunityDataService)],
90+
[VOCABULARY.value, () => import('./submission/vocabularies/vocabulary.data.service').then(m => m.VocabularyDataService)],
91+
[BUNDLE.value, () => import('./data/bundle-data.service').then(m => m.BundleDataService)],
92+
[CONFIG_PROPERTY.value, () => import('./data/configuration-data.service').then(m => m.ConfigurationDataService)],
93+
[POOL_TASK.value, () => import('./tasks/pool-task-data.service').then(m => m.PoolTaskDataService)],
94+
[CLAIMED_TASK.value, () => import('./tasks/claimed-task-data.service').then(m => m.ClaimedTaskDataService)],
95+
[SUPERVISION_ORDER.value, () => import('./supervision-order/supervision-order-data.service').then(m => m.SupervisionOrderDataService)],
96+
[WORKSPACEITEM.value, () => import('./submission/workspaceitem-data.service').then(m => m.WorkspaceitemDataService)],
97+
[WORKFLOWITEM.value, () => import('./submission/workflowitem-data.service').then(m => m.WorkflowItemDataService)],
98+
[VOCABULARY.value, () => import('./submission/vocabularies/vocabulary.data.service').then(m => m.VocabularyDataService)],
99+
[VOCABULARY_ENTRY_DETAIL.value, () => import('./submission/vocabularies/vocabulary-entry-details.data.service').then(m => m.VocabularyEntryDetailsDataService)],
100+
[SUBMISSION_CC_LICENSE_URL.value, () => import('./submission/submission-cc-license-url-data.service').then(m => m.SubmissionCcLicenseUrlDataService)],
101+
[SUBMISSION_CC_LICENSE.value, () => import('./submission/submission-cc-license-data.service').then(m => m.SubmissionCcLicenseDataService)],
102+
[USAGE_REPORT.value, () => import('./statistics/usage-report-data.service').then(m => m.UsageReportDataService)],
103+
[RESOURCE_POLICY.value, () => import('./resource-policy/resource-policy-data.service').then(m => m.ResourcePolicyDataService)],
104+
[RESEARCHER_PROFILE.value, () => import('./profile/researcher-profile-data.service').then(m => m.ResearcherProfileDataService)],
105+
[ORCID_QUEUE.value, () => import('./orcid/orcid-queue-data.service').then(m => m.OrcidQueueDataService)],
106+
[ORCID_HISTORY.value, () => import('./orcid/orcid-history-data.service').then(m => m.OrcidHistoryDataService)],
107+
[FEEDBACK.value, () => import('./feedback/feedback-data.service').then(m => m.FeedbackDataService)],
108+
[GROUP.value, () => import('./eperson/group-data.service').then(m => m.GroupDataService)],
109+
[EPERSON.value, () => import('./eperson/eperson-data.service').then(m => m.EPersonDataService)],
110+
[WORKFLOW_ACTION.value, () => import('./data/workflow-action-data.service').then(m => m.WorkflowActionDataService)],
111+
[VERSION_HISTORY.value, () => import('./data/version-history-data.service').then(m => m.VersionHistoryDataService)],
112+
[SITE.value, () => import('./data/site-data.service').then(m => m.SiteDataService)],
113+
[ROOT.value, () => import('./data/root-data.service').then(m => m.RootDataService)],
114+
[RELATIONSHIP_TYPE.value, () => import('./data/relationship-type-data.service').then(m => m.RelationshipTypeDataService)],
115+
[RELATIONSHIP.value, () => import('./data/relationship-data.service').then(m => m.RelationshipDataService)],
116+
[SCRIPT.value, () => import('./data/processes/script-data.service').then(m => m.ScriptDataService)],
117+
[PROCESS.value, () => import('./data/processes/process-data.service').then(m => m.ProcessDataService)],
118+
[METADATA_FIELD.value, () => import('./data/metadata-field-data.service').then(m => m.MetadataFieldDataService)],
119+
[ITEM.value, () => import('./data/item-data.service').then(m => m.ItemDataService)],
120+
[VERSION.value, () => import('./data/version-data.service').then(m => m.VersionDataService)],
121+
[IDENTIFIERS.value, () => import('./data/identifier-data.service').then(m => m.IdentifierDataService)],
122+
[FEATURE.value, () => import('./data/feature-authorization/authorization-data.service').then(m => m.AuthorizationDataService)],
123+
[DSPACE_OBJECT.value, () => import('./data/dspace-object-data.service').then(m => m.DSpaceObjectDataService)],
124+
[BITSTREAM_FORMAT.value, () => import('./data/bitstream-format-data.service').then(m => m.BitstreamFormatDataService)],
125+
[SUBMISSION_COAR_NOTIFY_CONFIG.value, () => import('../submission/sections/section-coar-notify/coar-notify-config-data.service').then(m => m.CoarNotifyConfigDataService)],
126+
[LDN_SERVICE_CONSTRAINT_FILTERS.value, () => import('../admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service').then(m => m.LdnItemfiltersService)],
127+
[LDN_SERVICE.value, () => import('../admin/admin-ldn-services/ldn-services-data/ldn-services-data.service').then(m => m.LdnServicesService)],
128+
[ADMIN_NOTIFY_MESSAGE.value, () => import('../admin/admin-notify-dashboard/services/admin-notify-messages.service').then(m => m.AdminNotifyMessagesService)],
129+
[SUBMISSION_FORMS_TYPE.value, () => import('./config/submission-forms-config-data.service').then(m => m.SubmissionFormsConfigDataService)],
130+
[NOTIFYREQUEST.value, () => import('./data/notify-services-status-data.service').then(m => m.NotifyRequestsStatusDataService)],
131+
[QUALITY_ASSURANCE_EVENT_OBJECT.value, () => import('./notifications/qa/events/quality-assurance-event-data.service').then(m => m.QualityAssuranceEventDataService)],
132+
[QUALITY_ASSURANCE_SOURCE_OBJECT.value, () => import('./notifications/qa/source/quality-assurance-source-data.service').then(m => m.QualityAssuranceSourceDataService)],
133+
[QUALITY_ASSURANCE_TOPIC_OBJECT.value, () => import('./notifications/qa/topics/quality-assurance-topic-data.service').then(m => m.QualityAssuranceTopicDataService)],
134+
[SUGGESTION.value, () => import('./notifications/suggestions-data.service').then(m => m.SuggestionsDataService)],
135+
[SUGGESTION_SOURCE.value, () => import('./notifications/source/suggestion-source-data.service').then(m => m.SuggestionSourceDataService)],
136+
[SUGGESTION_TARGET.value, () => import('./notifications/target/suggestion-target-data.service').then(m => m.SuggestionTargetDataService)],
137+
[DUPLICATE.value, () => import('./submission/submission-duplicate-data.service').then(m => m.SubmissionDuplicateDataService)],
138+
[CorrectionType.type.value, () => import('./submission/correctiontype-data.service').then(m => m.CorrectionTypeDataService)],
139+
]);
140+
/*export const LAZY_DATA_SERVICES: LazyDataServicesMap = {
73141
[AUTHORIZATION.value]: () => import('./data/feature-authorization/authorization-data.service').then(m => m.AuthorizationDataService),
74142
[BROWSE_DEFINITION.value]: () => import('./browse/browse-definition-data.service').then(m => m.BrowseDefinitionDataService),
75143
[BULK_ACCESS_CONDITION_OPTIONS.value]: () => import('./config/bulk-access-config-data.service').then(m => m.BulkAccessConfigDataService),
@@ -136,6 +204,6 @@ export const LAZY_DATA_SERVICES: LazyDataServicesMap = {
136204
[SUGGESTION_TARGET.value]: () => import('./notifications/target/suggestion-target-data.service').then(m => m.SuggestionTargetDataService),
137205
[DUPLICATE.value]: () => import('./submission/submission-duplicate-data.service').then(m => m.SubmissionDuplicateDataService),
138206
[CorrectionType.type.value]: () => import('./submission/correctiontype-data.service').then(m => m.CorrectionTypeDataService),
139-
};
207+
};*/
140208

141209

src/app/core/lazy-data-service.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@ import {
88
} from 'rxjs';
99

1010
import { LazyDataServicesMap } from '../../config/app-config.interface';
11-
import { isNotEmpty } from '../shared/empty.util';
1211
import { HALDataService } from './data/base/hal-data-service.interface';
1312

1413
/**
1514
* Loads a service lazily. The service is loaded when the observable is subscribed to.
1615
*
17-
* @param map A map of promises returning the data services to load
16+
* @param dataServicesMap A map of promises returning the data services to load
1817
* @param key The key of the service
1918
* @param injector The injector to use to load the service. If not provided, the current injector is used.
2019
* @returns An observable of the service.
@@ -27,13 +26,13 @@ import { HALDataService } from './data/base/hal-data-service.interface';
2726
* ```
2827
*/
2928
export function lazyDataService<T>(
30-
map: LazyDataServicesMap,
29+
dataServicesMap: LazyDataServicesMap,
3130
key: string,
3231
injector: Injector,
3332
): Observable<T> {
3433
return defer(() => {
35-
if (isNotEmpty(map[key]) && typeof map[key] === 'function') {
36-
const loader: () => Promise<Type<HALDataService<any>> | { default: HALDataService<any> }> = map[key];
34+
if (dataServicesMap.has(key) && typeof dataServicesMap.get(key) === 'function') {
35+
const loader: () => Promise<Type<HALDataService<any>> | { default: HALDataService<any> }> = dataServicesMap.get(key);
3736
return loader()
3837
.then((serviceOrDefault) => {
3938
if ('default' in serviceOrDefault) {

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ const REINSTATE_BTN = 'reinstate';
3838
const SAVE_BTN = 'save';
3939
const DISCARD_BTN = 'discard';
4040

41-
const mockDataServiceMap: any = {
42-
[ITEM.value]: () => import('../../shared/testing/test-data-service.mock').then(m => m.TestDataService),
43-
};
41+
const mockDataServiceMap: any = new Map([
42+
[ITEM.value, () => import('../../shared/testing/test-data-service.mock').then(m => m.TestDataService)],
43+
]);
4444

4545
describe('DsoEditMetadataComponent', () => {
4646
let component: DsoEditMetadataComponent;

src/app/shared/eperson-group-list/eperson-group-list.component.spec.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import { cold } from 'jasmine-marbles';
1717
import uniqueId from 'lodash/uniqueId';
1818
import { of as observableOf } from 'rxjs';
1919

20-
import { APP_DATA_SERVICES_MAP } from '../../../config/app-config.interface';
20+
import {
21+
APP_DATA_SERVICES_MAP,
22+
LazyDataServicesMap,
23+
} from '../../../config/app-config.interface';
2124
import { DSONameService } from '../../core/breadcrumbs/dso-name.service';
2225
import { buildPaginatedList } from '../../core/data/paginated-list.model';
2326
import { RequestService } from '../../core/data/request.service';
@@ -41,10 +44,10 @@ import { SearchEvent } from './eperson-group-list-event-type';
4144
import { EpersonSearchBoxComponent } from './eperson-search-box/eperson-search-box.component';
4245
import { GroupSearchBoxComponent } from './group-search-box/group-search-box.component';
4346

44-
const mockDataServiceMap: any = {
45-
[EPERSON.value]: () => import('../../core/eperson/eperson-data.service').then(m => m.EPersonDataService),
46-
[GROUP.value]: () => import('../../core/eperson/group-data.service').then(m => m.GroupDataService),
47-
};
47+
const mockDataServiceMap: LazyDataServicesMap = new Map([
48+
[EPERSON.value, () => import('../../core/eperson/eperson-data.service').then(m => m.EPersonDataService)],
49+
[GROUP.value, () => import('../../core/eperson/group-data.service').then(m => m.GroupDataService)],
50+
]);
4851

4952
describe('EpersonGroupListComponent test suite', () => {
5053
let comp: EpersonGroupListComponent;

src/config/app-config.interface.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@ const APP_CONFIG = new InjectionToken<AppConfig>('APP_CONFIG');
7373

7474
const APP_CONFIG_STATE = makeStateKey<AppConfig>('APP_CONFIG_STATE');
7575

76-
export interface LazyDataServicesMap {
77-
[type: string]: () => Promise<Type<HALDataService<any>> | { default: HALDataService<any> }>
78-
}
76+
export type LazyDataServicesMap = Map<string, () => Promise<Type<HALDataService<any>> | { default: HALDataService<any> }>>;
7977

8078
export const APP_DATA_SERVICES_MAP: InjectionToken<LazyDataServicesMap> = new InjectionToken<LazyDataServicesMap>('APP_DATA_SERVICES_MAP');
8179

0 commit comments

Comments
 (0)