Skip to content

Commit c05586a

Browse files
Merge branch 'DSpace:dspace-8_x' into dspace-8_x
2 parents 72a3872 + 33b3f1a commit c05586a

28 files changed

Lines changed: 333 additions & 88 deletions

package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
"@angular/platform-server": "^17.3.11",
6868
"@angular/router": "^17.3.11",
6969
"@angular/ssr": "^17.3.17",
70-
"@babel/runtime": "7.27.1",
70+
"@babel/runtime": "7.27.6",
7171
"@kolkov/ngx-gallery": "^2.0.1",
7272
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
7373
"@ng-dynamic-forms/core": "^16.0.0",
@@ -78,7 +78,7 @@
7878
"@ngx-translate/core": "^14.0.0",
7979
"@nicky-lenaers/ngx-scroll-to": "^14.0.0",
8080
"angulartics2": "^12.2.0",
81-
"axios": "^1.9.0",
81+
"axios": "^1.10.0",
8282
"bootstrap": "^4.6.1",
8383
"cerialize": "0.1.18",
8484
"cli-progress": "^3.12.0",
@@ -121,7 +121,7 @@
121121
"reflect-metadata": "^0.2.2",
122122
"rxjs": "^7.8.2",
123123
"uuid": "^8.3.2",
124-
"zone.js": "~0.15.0"
124+
"zone.js": "~0.14.0"
125125
},
126126
"devDependencies": {
127127
"@angular-builders/custom-webpack": "~17.0.2",
@@ -147,7 +147,7 @@
147147
"@types/grecaptcha": "^3.0.9",
148148
"@types/jasmine": "~3.6.0",
149149
"@types/js-cookie": "2.2.6",
150-
"@types/lodash": "^4.17.16",
150+
"@types/lodash": "^4.17.17",
151151
"@types/node": "^14.14.9",
152152
"@typescript-eslint/eslint-plugin": "^7.2.0",
153153
"@typescript-eslint/parser": "^7.2.0",
@@ -183,7 +183,7 @@
183183
"karma-jasmine": "~4.0.0",
184184
"karma-jasmine-html-reporter": "^1.5.0",
185185
"karma-mocha-reporter": "2.2.5",
186-
"ng-mocks": "^14.13.4",
186+
"ng-mocks": "^14.13.5",
187187
"ngx-mask": "14.2.4",
188188
"nodemon": "^2.0.22",
189189
"postcss": "^8.5",
@@ -195,12 +195,12 @@
195195
"react-copy-to-clipboard": "^5.1.0",
196196
"react-dom": "^16.14.0",
197197
"rimraf": "^3.0.2",
198-
"sass": "~1.89.0",
198+
"sass": "~1.89.2",
199199
"sass-loader": "^12.6.0",
200200
"sass-resources-loader": "^2.2.5",
201201
"ts-node": "^8.10.2",
202202
"typescript": "~5.4.5",
203-
"webpack": "5.99.8",
203+
"webpack": "5.99.9",
204204
"webpack-cli": "^5.1.4",
205205
"webpack-dev-server": "^4.15.1"
206206
}

src/app/admin/admin-routes.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
REGISTRIES_MODULE_PATH,
1212
REPORTS_MODULE_PATH,
1313
} from './admin-routing-paths';
14-
import { AdminSearchPageComponent } from './admin-search-page/admin-search-page.component';
15-
import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component';
14+
import { ThemedAdminSearchPageComponent } from './admin-search-page/themed-admin-search-page.component';
15+
import { ThemedAdminWorkflowPageComponent } from './admin-workflow-page/themed-admin-workflow-page.component';
1616

1717
export const ROUTES: Route[] = [
1818
{
@@ -28,13 +28,13 @@ export const ROUTES: Route[] = [
2828
{
2929
path: 'search',
3030
resolve: { breadcrumb: i18nBreadcrumbResolver },
31-
component: AdminSearchPageComponent,
31+
component: ThemedAdminSearchPageComponent,
3232
data: { title: 'admin.search.title', breadcrumbKey: 'admin.search' },
3333
},
3434
{
3535
path: 'workflow',
3636
resolve: { breadcrumb: i18nBreadcrumbResolver },
37-
component: AdminWorkflowPageComponent,
37+
component: ThemedAdminWorkflowPageComponent,
3838
data: { title: 'admin.workflow.title', breadcrumbKey: 'admin.workflow' },
3939
},
4040
{

src/app/admin/admin-search-page/admin-search-page.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model';
44
import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component';
55

66
@Component({
7-
selector: 'ds-admin-search-page',
7+
selector: 'ds-base-admin-search-page',
88
templateUrl: './admin-search-page.component.html',
99
styleUrls: ['./admin-search-page.component.scss'],
1010
standalone: true,
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { NgModule } from '@angular/core';
2+
3+
import { JournalEntitiesModule } from '../../entity-groups/journal-entities/journal-entities.module';
4+
import { ResearchEntitiesModule } from '../../entity-groups/research-entities/research-entities.module';
5+
import { SearchModule } from '../../shared/search/search.module';
6+
import { SharedModule } from '../../shared/shared.module';
7+
import { AdminSearchPageComponent } from './admin-search-page.component';
8+
import { CollectionAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component';
9+
import { CommunityAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component';
10+
import { ItemAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component';
11+
import { CollectionAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/collection-search-result/collection-admin-search-result-list-element.component';
12+
import { CommunityAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/community-search-result/community-admin-search-result-list-element.component';
13+
import { ItemAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component';
14+
import { ItemAdminSearchResultActionsComponent } from './admin-search-results/item-admin-search-result-actions.component';
15+
import { ThemedAdminSearchPageComponent } from './themed-admin-search-page.component';
16+
17+
const ENTRY_COMPONENTS = [
18+
// put only entry components that use custom decorator
19+
ItemAdminSearchResultListElementComponent,
20+
CommunityAdminSearchResultListElementComponent,
21+
CollectionAdminSearchResultListElementComponent,
22+
ItemAdminSearchResultGridElementComponent,
23+
CommunityAdminSearchResultGridElementComponent,
24+
CollectionAdminSearchResultGridElementComponent,
25+
ItemAdminSearchResultActionsComponent,
26+
];
27+
28+
@NgModule({
29+
imports: [
30+
SearchModule,
31+
SharedModule.withEntryComponents(),
32+
JournalEntitiesModule.withEntryComponents(),
33+
ResearchEntitiesModule.withEntryComponents(),
34+
],
35+
declarations: [
36+
ThemedAdminSearchPageComponent,
37+
AdminSearchPageComponent,
38+
...ENTRY_COMPONENTS,
39+
],
40+
})
41+
export class AdminSearchModule {
42+
/**
43+
* NOTE: this method allows to resolve issue with components that using a custom decorator
44+
* which are not loaded during SSR otherwise
45+
*/
46+
static withEntryComponents() {
47+
return {
48+
ngModule: SharedModule,
49+
providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })),
50+
};
51+
}
52+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Component } from '@angular/core';
2+
3+
import { ThemedComponent } from '../../shared/theme-support/themed.component';
4+
import { AdminSearchPageComponent } from './admin-search-page.component';
5+
6+
/**
7+
* Themed wrapper for {@link AdminSearchPageComponent}
8+
*/
9+
@Component({
10+
selector: 'ds-admin-search-page',
11+
templateUrl: '../../shared/theme-support/themed.component.html',
12+
standalone: true,
13+
imports: [AdminSearchPageComponent],
14+
})
15+
export class ThemedAdminSearchPageComponent extends ThemedComponent<AdminSearchPageComponent> {
16+
17+
protected getComponentName(): string {
18+
return 'AdminSearchPageComponent';
19+
}
20+
21+
protected importThemedComponent(themeName: string): Promise<any> {
22+
return import(`../../../themes/${themeName}/app/admin/admin-search-page/admin-search-page.component`);
23+
}
24+
25+
protected importUnthemedComponent(): Promise<any> {
26+
return import('./admin-search-page.component');
27+
}
28+
29+
}

src/app/admin/admin-workflow-page/admin-workflow-page.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model';
44
import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component';
55

66
@Component({
7-
selector: 'ds-admin-workflow-page',
7+
selector: 'ds-base-admin-workflow-page',
88
templateUrl: './admin-workflow-page.component.html',
99
styleUrls: ['./admin-workflow-page.component.scss'],
1010
standalone: true,
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { NgModule } from '@angular/core';
2+
3+
import { SearchModule } from '../../shared/search/search.module';
4+
import { SharedModule } from '../../shared/shared.module';
5+
import { AdminWorkflowPageComponent } from './admin-workflow-page.component';
6+
import { WorkflowItemSearchResultAdminWorkflowGridElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component';
7+
import { WorkflowItemSearchResultAdminWorkflowListElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component';
8+
import { WorkflowItemAdminWorkflowActionsComponent } from './admin-workflow-search-results/workflow-item-admin-workflow-actions.component';
9+
import { ThemedAdminWorkflowPageComponent } from './themed-admin-workflow-page.component';
10+
11+
const ENTRY_COMPONENTS = [
12+
// put only entry components that use custom decorator
13+
WorkflowItemSearchResultAdminWorkflowListElementComponent,
14+
WorkflowItemSearchResultAdminWorkflowGridElementComponent,
15+
];
16+
17+
@NgModule({
18+
imports: [
19+
SearchModule,
20+
SharedModule.withEntryComponents(),
21+
],
22+
declarations: [
23+
ThemedAdminWorkflowPageComponent,
24+
AdminWorkflowPageComponent,
25+
WorkflowItemAdminWorkflowActionsComponent,
26+
...ENTRY_COMPONENTS,
27+
],
28+
exports: [
29+
AdminWorkflowPageComponent,
30+
],
31+
})
32+
export class AdminWorkflowModuleModule {
33+
/**
34+
* NOTE: this method allows to resolve issue with components that using a custom decorator
35+
* which are not loaded during SSR otherwise
36+
*/
37+
static withEntryComponents() {
38+
return {
39+
ngModule: SharedModule,
40+
providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })),
41+
};
42+
}
43+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Component } from '@angular/core';
2+
3+
import { ThemedComponent } from '../../shared/theme-support/themed.component';
4+
import { AdminWorkflowPageComponent } from './admin-workflow-page.component';
5+
6+
/**
7+
* Themed wrapper for {@link AdminWorkflowPageComponent}
8+
*/
9+
@Component({
10+
selector: 'ds-admin-workflow-page',
11+
templateUrl: '../../shared/theme-support/themed.component.html',
12+
standalone: true,
13+
imports: [AdminWorkflowPageComponent],
14+
})
15+
export class ThemedAdminWorkflowPageComponent extends ThemedComponent<AdminWorkflowPageComponent> {
16+
17+
protected getComponentName(): string {
18+
return 'AdminWorkflowPageComponent';
19+
}
20+
21+
protected importThemedComponent(themeName: string): Promise<any> {
22+
return import(`../../../themes/${themeName}/app/admin/admin-workflow-page/admin-workflow-page.component`);
23+
}
24+
25+
protected importUnthemedComponent(): Promise<any> {
26+
return import('./admin-workflow-page.component');
27+
}
28+
29+
}

src/app/core/metadata/metadata.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class MetadataService {
2727
* Returns undefined otherwise.
2828
*/
2929
public virtualValue(metadataValue: MetadataValue | undefined): string {
30-
if (this.isVirtual) {
30+
if (this.isVirtual(metadataValue)) {
3131
return metadataValue.authority.substring(metadataValue.authority.indexOf(VIRTUAL_METADATA_PREFIX) + VIRTUAL_METADATA_PREFIX.length);
3232
} else {
3333
return undefined;

src/app/core/submission/submission-rest.service.spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { getTestScheduler } from 'jasmine-marbles';
2+
import { of } from 'rxjs';
23
import { TestScheduler } from 'rxjs/testing';
34

45
import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model';
@@ -13,6 +14,7 @@ import {
1314
SubmissionRequest,
1415
} from '../data/request.models';
1516
import { RequestService } from '../data/request.service';
17+
import { RequestEntry } from '../data/request-entry.model';
1618
import { SubmissionRestService } from './submission-rest.service';
1719

1820
describe('SubmissionRestService test suite', () => {
@@ -38,7 +40,9 @@ describe('SubmissionRestService test suite', () => {
3840
}
3941

4042
beforeEach(() => {
41-
requestService = getMockRequestService();
43+
requestService = getMockRequestService(of(Object.assign(new RequestEntry(), {
44+
request: new SubmissionRequest('mock-request-uuid', 'mock-request-href'),
45+
})));
4246
rdbService = getMockRemoteDataBuildService();
4347
scheduler = getTestScheduler();
4448
halService = new HALEndpointServiceStub(resourceEndpointURL);
@@ -62,7 +66,7 @@ describe('SubmissionRestService test suite', () => {
6266
scheduler.schedule(() => service.getDataById(resourceEndpoint, resourceScope).subscribe());
6367
scheduler.flush();
6468

65-
expect(requestService.send).toHaveBeenCalledWith(expected);
69+
expect(requestService.send).toHaveBeenCalledWith(expected, false);
6670
});
6771
});
6872

0 commit comments

Comments
 (0)