Skip to content

Commit 6ad1024

Browse files
committed
fix(files-component): updated files component and fixed some requests
1 parent af970b3 commit 6ad1024

17 files changed

Lines changed: 86 additions & 92 deletions

File tree

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
1-
import { MockComponents, MockProvider } from 'ng-mocks';
1+
import { MockProvider } from 'ng-mocks';
22

33
import { DynamicDialogConfig } from 'primeng/dynamicdialog';
44

55
import { ComponentFixture, TestBed } from '@angular/core/testing';
66

7-
import { FileSelectDestinationComponent } from '@osf/shared/components/file-select-destination/file-select-destination.component';
8-
import { IconComponent } from '@osf/shared/components/icon/icon.component';
9-
import { LoadingSpinnerComponent } from '@osf/shared/components/loading-spinner/loading-spinner.component';
107
import { CustomConfirmationService } from '@osf/shared/services/custom-confirmation.service';
118
import { FilesService } from '@osf/shared/services/files.service';
129
import { ToastService } from '@osf/shared/services/toast.service';
1310

1411
import { provideOSFCore } from '@testing/osf.testing.provider';
1512
import { CustomConfirmationServiceMock } from '@testing/providers/custom-confirmation-provider.mock';
1613
import { provideDynamicDialogRefMock } from '@testing/providers/dynamic-dialog-ref.mock';
17-
import { provideMockStore } from '@testing/providers/store-provider.mock';
1814
import { ToastServiceMock } from '@testing/providers/toast-provider.mock';
1915

20-
import { FilesSelectors } from '../../store';
21-
2216
import { ConfirmMoveFileDialogComponent } from './confirm-move-file-dialog.component';
2317

2418
describe('ConfirmConfirmMoveFileDialogComponent', () => {
@@ -31,23 +25,14 @@ describe('ConfirmConfirmMoveFileDialogComponent', () => {
3125
};
3226

3327
TestBed.configureTestingModule({
34-
imports: [
35-
ConfirmMoveFileDialogComponent,
36-
...MockComponents(IconComponent, LoadingSpinnerComponent, FileSelectDestinationComponent),
37-
],
28+
imports: [ConfirmMoveFileDialogComponent],
3829
providers: [
3930
provideOSFCore(),
4031
provideDynamicDialogRefMock(),
4132
MockProvider(DynamicDialogConfig, dialogConfigMock),
4233
MockProvider(FilesService),
4334
MockProvider(ToastService, ToastServiceMock.simple()),
4435
MockProvider(CustomConfirmationService, CustomConfirmationServiceMock.simple()),
45-
provideMockStore({
46-
signals: [
47-
{ selector: FilesSelectors.getMoveDialogFiles, value: [] },
48-
{ selector: FilesSelectors.getProvider, value: null },
49-
],
50-
}),
5136
],
5237
});
5338

@@ -63,10 +48,5 @@ describe('ConfirmConfirmMoveFileDialogComponent', () => {
6348
it('should initialize with correct properties', () => {
6449
expect(component.config).toBeDefined();
6550
expect(component.dialogRef).toBeDefined();
66-
expect(component.files).toBeDefined();
67-
});
68-
69-
it('should get files from store', () => {
70-
expect(component.files()).toEqual([]);
7151
});
7252
});

src/app/features/files/components/confirm-move-file-dialog/confirm-move-file-dialog.component.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { select } from '@ngxs/store';
2-
31
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
42

53
import { Button } from 'primeng/button';
@@ -11,7 +9,6 @@ import { catchError } from 'rxjs/operators';
119
import { ChangeDetectionStrategy, Component, DestroyRef, inject } from '@angular/core';
1210
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
1311

14-
import { FilesSelectors } from '@osf/features/files/store';
1512
import { CustomConfirmationService } from '@osf/shared/services/custom-confirmation.service';
1613
import { FilesService } from '@osf/shared/services/files.service';
1714
import { ToastService } from '@osf/shared/services/toast.service';
@@ -35,8 +32,6 @@ export class ConfirmMoveFileDialogComponent {
3532
private readonly toastService = inject(ToastService);
3633
private readonly customConfirmationService = inject(CustomConfirmationService);
3734

38-
readonly files = select(FilesSelectors.getMoveDialogFiles);
39-
4035
readonly provider = this.config.data.storageProvider;
4136

4237
private fileProjectId = this.config.data.resourceId;
@@ -112,9 +107,7 @@ export class ConfirmMoveFileDialogComponent {
112107
this.customConfirmationService.confirmDelete({
113108
headerKey: conflictFiles.length > 1 ? 'files.dialogs.replaceFile.multiple' : 'files.dialogs.replaceFile.single',
114109
messageKey: 'files.dialogs.replaceFile.message',
115-
messageParams: {
116-
name: conflictFiles.map((c) => c.file.name).join(', '),
117-
},
110+
messageParams: { name: conflictFiles.map((c) => c.file.name).join(', ') },
118111
acceptLabelKey: 'common.buttons.replace',
119112
onConfirm: () => {
120113
const replaceRequests$ = conflictFiles.map(({ link }) =>

src/app/features/files/components/file-browser-info/file-browser-info.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class FileBrowserInfoComponent {
2424

2525
readonly infoItems = FILE_BROWSER_INFO_ITEMS;
2626

27-
readonly filteredInfoItems = computed(() => {
28-
return this.infoItems.filter((item) => item.showForResourceTypes.includes(this.resourceType()));
29-
});
27+
readonly filteredInfoItems = computed(() =>
28+
this.infoItems.filter((item) => item.showForResourceTypes.includes(this.resourceType()))
29+
);
3030
}

src/app/features/files/components/file-keywords/file-keywords.component.spec.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { signal } from '@angular/core';
21
import { ComponentFixture, TestBed } from '@angular/core/testing';
32

43
import { provideOSFCore } from '@testing/osf.testing.provider';
@@ -26,10 +25,10 @@ describe('FileKeywordsComponent', () => {
2625
provideOSFCore(),
2726
provideMockStore({
2827
signals: [
29-
{ selector: FilesSelectors.getFileTags, value: signal(mockTags) },
30-
{ selector: FilesSelectors.isFileTagsLoading, value: signal(false) },
31-
{ selector: FilesSelectors.getOpenedFile, value: signal(mockFile) },
32-
{ selector: FilesSelectors.hasWriteAccess, value: signal(true) },
28+
{ selector: FilesSelectors.getFileTags, value: mockTags },
29+
{ selector: FilesSelectors.isFileTagsLoading, value: false },
30+
{ selector: FilesSelectors.getOpenedFile, value: mockFile },
31+
{ selector: FilesSelectors.hasWriteAccess, value: true },
3332
],
3433
}),
3534
],

src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ <h2>
99
<p-skeleton width="100%" height="4rem" />
1010
<p-skeleton width="100%" height="4rem" />
1111
} @else {
12-
@for (funder of resourceMetadata()?.funders; track $index) {
12+
@for (funder of resourceMetadata()?.funders; track funder.funderIdentifier) {
1313
<div class="flex flex-column gap-2">
1414
@if (funder.funderName) {
1515
<div class="flex flex-column gap-1">
@@ -23,10 +23,10 @@ <h4>{{ 'files.detail.resourceMetadata.fields.awardTitle' | translate }}</h4>
2323
<span>{{ funder.awardTitle }}</span>
2424
</div>
2525
}
26-
@if (funder.awardTitle) {
26+
@if (funder.awardNumber) {
2727
<div class="flex flex-column gap-1">
2828
<h4>{{ 'files.detail.resourceMetadata.fields.awardNumber' | translate }}</h4>
29-
<span>{{ funder.awardTitle }}</span>
29+
<span>{{ funder.awardNumber }}</span>
3030
</div>
3131
}
3232
@if (funder.awardUri) {
@@ -98,7 +98,7 @@ <h4>{{ 'files.detail.resourceMetadata.fields.dateModified' | translate }}</h4>
9898
@if (isResourceContributorsLoading()) {
9999
<p-skeleton width="100%" height="4rem" />
100100
} @else {
101-
@if (hasViewOnly() || contributors().length) {
101+
@if (contributors().length) {
102102
<div class="flex flex-column gap-2">
103103
<h4>{{ 'common.labels.contributors' | translate }}</h4>
104104

src/app/features/files/files.routes.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@ export const filesRoutes: Routes = [
2929
{
3030
path: ':fileGuid',
3131
data: { canonicalPathTemplate: 'files/:fileGuid' },
32-
loadComponent: () => {
33-
return import('@osf/features/files/pages/file-detail/file-detail.component').then(
34-
(c) => c.FileDetailComponent
35-
);
36-
},
32+
loadComponent: () =>
33+
import('@osf/features/files/pages/file-detail/file-detail.component').then((c) => c.FileDetailComponent),
3734
},
3835
],
3936
},

src/app/features/files/store/files.actions.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FileFolderModel } from '@osf/shared/models/files/file-folder.model';
2+
import { ResourceType } from '@shared/enums/resource-type.enum';
23

34
import { PatchFileMetadata } from '../models';
45

@@ -131,25 +132,31 @@ export class DeleteEntry {
131132
export class GetRootFolders {
132133
static readonly type = '[Files] Get Folders';
133134

134-
constructor(public folderLink: string) {}
135+
constructor(
136+
public resourceId: string,
137+
public resourceType: ResourceType
138+
) {}
135139
}
136140

137141
export class GetConfiguredStorageAddons {
138142
static readonly type = '[Files] Get ConfiguredStorageAddons';
139143

140-
constructor(public resourceUri: string) {}
144+
constructor(public resourceId: string) {}
141145
}
142146

143147
export class GetMoveDialogRootFolders {
144148
static readonly type = '[Files] Get Move Dialog Folders';
145149

146-
constructor(public folderLink: string) {}
150+
constructor(
151+
public resourceId: string,
152+
public resourceType: ResourceType
153+
) {}
147154
}
148155

149156
export class GetMoveDialogConfiguredStorageAddons {
150157
static readonly type = '[Files] Get Move Dialog ConfiguredStorageAddons';
151158

152-
constructor(public resourceUri: string) {}
159+
constructor(public resourceId: string) {}
153160
}
154161

155162
export class GetStorageSupportedFeatures {

src/app/features/files/store/files.state.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { inject, Injectable } from '@angular/core';
77
import { SupportedFeature } from '@osf/shared/enums/addon-supported-features.enum';
88
import { handleSectionError } from '@osf/shared/helpers/state-error.handler';
99
import { FilesService } from '@osf/shared/services/files.service';
10-
import { ToastService } from '@osf/shared/services/toast.service';
1110

1211
import { MapResourceMetadata } from '../mappers';
1312

@@ -45,7 +44,6 @@ import { FILES_STATE_DEFAULTS, FilesStateModel } from './files.model';
4544
})
4645
export class FilesState {
4746
filesService = inject(FilesService);
48-
toastService = inject(ToastService);
4947

5048
@Action(GetFiles)
5149
getFiles(ctx: StateContext<FilesStateModel>, action: GetFiles) {
@@ -262,7 +260,7 @@ export class FilesState {
262260
getRootFolders(ctx: StateContext<FilesStateModel>, action: GetRootFolders) {
263261
const state = ctx.getState();
264262
ctx.patchState({ rootFolders: { ...state.rootFolders, isLoading: true } });
265-
return this.filesService.getFolders(action.folderLink).pipe(
263+
return this.filesService.getRootFolders(action.resourceId, action.resourceType).pipe(
266264
tap((response) =>
267265
ctx.patchState({
268266
rootFolders: {
@@ -282,7 +280,7 @@ export class FilesState {
282280
const state = ctx.getState();
283281
ctx.patchState({ moveDialogRootFolders: { ...state.moveDialogRootFolders, isLoading: true } });
284282

285-
return this.filesService.getFolders(action.folderLink).pipe(
283+
return this.filesService.getRootFolders(action.resourceId, action.resourceType).pipe(
286284
tap((response) =>
287285
ctx.patchState({
288286
moveDialogRootFolders: {
@@ -302,7 +300,7 @@ export class FilesState {
302300
const state = ctx.getState();
303301
ctx.patchState({ configuredStorageAddons: { ...state.configuredStorageAddons, isLoading: true } });
304302

305-
return this.filesService.getConfiguredStorageAddons(action.resourceUri).pipe(
303+
return this.filesService.getConfiguredStorageAddons(action.resourceId).pipe(
306304
tap((addons) =>
307305
ctx.patchState({
308306
configuredStorageAddons: {
@@ -326,7 +324,7 @@ export class FilesState {
326324
moveDialogConfiguredStorageAddons: { ...state.moveDialogConfiguredStorageAddons, isLoading: true },
327325
});
328326

329-
return this.filesService.getConfiguredStorageAddons(action.resourceUri).pipe(
327+
return this.filesService.getConfiguredStorageAddons(action.resourceId).pipe(
330328
tap((addons) =>
331329
ctx.patchState({
332330
moveDialogConfiguredStorageAddons: {

src/app/features/preprints/components/stepper/file-step/file-step.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { ClearFileDirective } from '@osf/shared/directives/clear-file.directive'
4646
import { StringOrNull } from '@osf/shared/helpers/types.helper';
4747
import { FileModel } from '@osf/shared/models/files/file.model';
4848
import { FileFolderModel } from '@osf/shared/models/files/file-folder.model';
49+
import { FilePageLinkModel } from '@osf/shared/models/files/file-page-link.model';
4950
import { CustomConfirmationService } from '@osf/shared/services/custom-confirmation.service';
5051
import { ToastService } from '@osf/shared/services/toast.service';
5152

@@ -233,7 +234,7 @@ export class FileStepComponent implements OnInit {
233234
this.actions.getProjectFilesByLink(folder.links.filesLink, 1);
234235
}
235236

236-
onLoadFiles(event: { link: string; page: number }) {
237+
onLoadFiles(event: FilePageLinkModel) {
237238
this.actions.getProjectFilesByLink(event.link, event.page);
238239
}
239240
}

src/app/features/project/overview/components/files-widget/files-widget.component.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
} from '@angular/core';
2121
import { ActivatedRoute, Router } from '@angular/router';
2222

23-
import { ENVIRONMENT } from '@core/provider/environment.provider';
2423
import { FileProvider } from '@osf/features/files/constants';
2524
import {
2625
FilesSelectors,
@@ -32,11 +31,13 @@ import {
3231
} from '@osf/features/files/store';
3332
import { FilesTreeComponent } from '@osf/shared/components/files-tree/files-tree.component';
3433
import { SelectComponent } from '@osf/shared/components/select/select.component';
34+
import { ResourceType } from '@osf/shared/enums/resource-type.enum';
3535
import { Primitive } from '@osf/shared/helpers/types.helper';
3636
import { ConfiguredAddonModel } from '@osf/shared/models/addons/configured-addon.model';
3737
import { FileModel } from '@osf/shared/models/files/file.model';
3838
import { FileFolderModel } from '@osf/shared/models/files/file-folder.model';
3939
import { FileLabelModel } from '@osf/shared/models/files/file-label.model';
40+
import { FilePageLinkModel } from '@osf/shared/models/files/file-page-link.model';
4041
import { NodeShortInfoModel } from '@osf/shared/models/nodes/node-with-children.model';
4142
import { ProjectModel } from '@osf/shared/models/projects/projects.model';
4243
import { SelectOption } from '@osf/shared/models/select-option.model';
@@ -56,7 +57,6 @@ export class FilesWidgetComponent {
5657
router = inject(Router);
5758
activeRoute = inject(ActivatedRoute);
5859

59-
private readonly environment = inject(ENVIRONMENT);
6060
private readonly destroyRef = inject(DestroyRef);
6161
private readonly viewOnlyService = inject(ViewOnlyLinkHelperService);
6262
private readonly platformId = inject(PLATFORM_ID);
@@ -160,11 +160,8 @@ export class FilesWidgetComponent {
160160
}
161161

162162
private getStorageAddons(projectId: string) {
163-
const resourcePath = 'nodes';
164-
const folderLink = `${this.environment.apiDomainUrl}/v2/${resourcePath}/${projectId}/files/`;
165-
const iriLink = `${this.environment.webUrl}/${projectId}`;
166-
this.actions.getRootFolders(folderLink);
167-
this.actions.getConfiguredStorageAddons(iriLink);
163+
this.actions.getRootFolders(projectId, ResourceType.Project);
164+
this.actions.getConfiguredStorageAddons(projectId);
168165
}
169166

170167
private flatComponents(
@@ -234,7 +231,7 @@ export class FilesWidgetComponent {
234231
window.open(url, '_blank');
235232
}
236233

237-
onLoadFiles(event: { link: string; page: number }) {
234+
onLoadFiles(event: FilePageLinkModel) {
238235
this.actions.getFiles(event.link, event.page);
239236
}
240237

0 commit comments

Comments
 (0)