Skip to content

Commit 236b00e

Browse files
authored
fix(datacite-tracker): fix project datacite tracking (#479)
* fix(datacite-tracker): fixed merge artifacts, replaced file target with resource selector * chore(datacite-tracker): revived project overview test for datacite tracker * chore(datcite tracker): fixed naming for api domain url * fix(datacite-tracker): fixed wrong type annotation
1 parent 6507e77 commit 236b00e

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

src/app/features/files/pages/files/files.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export class FilesComponent {
144144
readonly currentFolder = select(FilesSelectors.getCurrentFolder);
145145
readonly provider = select(FilesSelectors.getProvider);
146146
readonly resourceDetails = select(CurrentResourceSelectors.getResourceDetails);
147+
readonly resourceMetadata = select(CurrentResourceSelectors.getCurrentResource);
147148
readonly rootFolders = select(FilesSelectors.getRootFolders);
148149
readonly isRootFoldersLoading = select(FilesSelectors.isRootFoldersLoading);
149150
readonly configuredStorageAddons = select(FilesSelectors.getConfiguredStorageAddons);
@@ -436,7 +437,7 @@ export class FilesComponent {
436437
const folderId = this.currentFolder()?.id ?? '';
437438
const isRootFolder = !this.currentFolder()?.relationships?.parentFolderLink;
438439
const storageLink = this.currentRootFolder()?.folder?.links?.download ?? '';
439-
const resourcePath = this.urlMap.get(this.resourceType()) ?? 'nodes';
440+
const resourcePath = this.resourceMetadata()?.type ?? 'nodes';
440441

441442
if (resourceId && folderId) {
442443
this.dataciteService.logFileDownload(resourceId, resourcePath).subscribe();

src/app/features/project/overview/project-overview.component.spec.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,22 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
1212
import { ActivatedRoute } from '@angular/router';
1313

1414
import { MetaTagsService, ToastService } from '@osf/shared/services';
15+
import { DataciteService } from '@shared/services/datacite/datacite.service';
1516
import { GetActivityLogs } from '@shared/stores/activity-logs';
1617

1718
import { ProjectOverviewComponent } from './project-overview.component';
1819

20+
import { DataciteMockFactory } from '@testing/mocks/datacite.service.mock';
21+
1922
describe('ProjectOverviewComponent', () => {
2023
let fixture: ComponentFixture<ProjectOverviewComponent>;
2124
let component: ProjectOverviewComponent;
2225
let store: Store;
26+
let dataciteService: jest.Mocked<DataciteService>;
2327

2428
beforeEach(async () => {
2529
TestBed.overrideComponent(ProjectOverviewComponent, { set: { template: '' } });
26-
30+
dataciteService = DataciteMockFactory();
2731
await TestBed.configureTestingModule({
2832
imports: [ProjectOverviewComponent],
2933
providers: [
@@ -33,6 +37,7 @@ describe('ProjectOverviewComponent', () => {
3337

3438
provideHttpClient(withInterceptorsFromDi()),
3539
provideHttpClientTesting(),
40+
{ provide: DataciteService, useValue: dataciteService },
3641

3742
{ provide: DialogService, useValue: { open: () => ({ onClose: of(null) }) } },
3843
{ provide: TranslateService, useValue: { instant: (k: string) => k } },
@@ -46,8 +51,8 @@ describe('ProjectOverviewComponent', () => {
4651
component = fixture.componentInstance;
4752
});
4853

49-
it('should create', () => {
50-
expect(component).toBeTruthy();
54+
it('should log to datacite', () => {
55+
expect(dataciteService.logIdentifiableView).toHaveBeenCalledWith(component.currentProject$);
5156
});
5257

5358
it('dispatches GetActivityLogs with numeric page and pageSize on init', () => {

src/app/features/project/overview/project-overview.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
inject,
2121
OnInit,
2222
} from '@angular/core';
23-
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
23+
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
2424
import { FormsModule } from '@angular/forms';
2525
import { ActivatedRoute, NavigationEnd, Router, RouterLink } from '@angular/router';
2626

@@ -200,6 +200,8 @@ export class ProjectOverviewComponent implements OnInit {
200200
this.areSubjectsLoading()
201201
);
202202

203+
currentProject$ = toObservable(this.currentProject);
204+
203205
currentResource = computed(() => {
204206
const project = this.currentProject();
205207
if (project) {
@@ -288,6 +290,8 @@ export class ProjectOverviewComponent implements OnInit {
288290
this.actions.getLinkedProjects(projectId);
289291
this.actions.getActivityLogs(projectId, this.activityDefaultPage, this.activityPageSize);
290292
}
293+
294+
this.dataciteService.logIdentifiableView(this.currentProject$).subscribe();
291295
}
292296

293297
handleOpenMakeDecisionDialog() {

src/app/shared/components/files-tree/files-tree.component.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { select } from '@ngxs/store';
2+
13
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
24

35
import { PrimeTemplate } from 'primeng/api';
@@ -38,6 +40,7 @@ import { FileLabelModel, FileMenuAction, FilesTreeActions, OsfFile } from '@osf/
3840
import { FileSizePipe } from '@osf/shared/pipes';
3941
import { CustomConfirmationService, FilesService, ToastService } from '@osf/shared/services';
4042
import { DataciteService } from '@osf/shared/services/datacite/datacite.service';
43+
import { CurrentResourceSelectors } from '@shared/stores';
4144

4245
import { CustomPaginatorComponent } from '../custom-paginator/custom-paginator.component';
4346
import { FileMenuComponent } from '../file-menu/file-menu.component';
@@ -88,6 +91,8 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
8891
isDragOver = signal(false);
8992
hasViewOnly = computed(() => hasViewOnlyParam(this.router) || this.viewOnly());
9093

94+
readonly resourceMetadata = select(CurrentResourceSelectors.getCurrentResource);
95+
9196
entryFileClicked = output<OsfFile>();
9297
folderIsOpening = output<boolean>();
9398
uploadFilesConfirmed = output<File[] | File>();
@@ -251,10 +256,8 @@ export class FilesTreeComponent implements OnDestroy, AfterViewInit {
251256
}
252257

253258
downloadFileOrFolder(file: OsfFile) {
254-
if (file.target.id && file.target.type) {
255-
this.dataciteService.logFileDownload(file.target.id, file.target.type).subscribe();
256-
}
257-
259+
const resourceType = this.resourceMetadata()?.type ?? 'nodes';
260+
this.dataciteService.logFileDownload(this.resourceId(), resourceType).subscribe();
258261
if (file.kind === 'file') {
259262
this.downloadFile(file.links.download);
260263
} else {

src/app/shared/services/datacite/datacite.service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export class DataciteService {
1414
private readonly http: HttpClient = inject(HttpClient);
1515
private readonly environment = inject(ENVIRONMENT);
1616

17-
get webUrl() {
18-
return this.environment.webUrl;
17+
get apiDomainUrl() {
18+
return this.environment.apiDomainUrl;
1919
}
2020

2121
get dataciteTrackerAddress() {
@@ -56,7 +56,7 @@ export class DataciteService {
5656
}
5757

5858
private logFile(targetId: string, targetType: string, event: DataciteEvent): Observable<void> {
59-
const url = `${this.webUrl}/${targetType}/${targetId}/identifiers`;
59+
const url = `${this.apiDomainUrl}/v2/${targetType}/${targetId}/identifiers`;
6060
return this.http.get<IdentifiersJsonApiResponse>(url).pipe(
6161
map((item) => ({
6262
identifiers: item.data.map<Identifier>((identifierData) => ({

0 commit comments

Comments
 (0)