diff --git a/src/app/core/interceptors/view-only.interceptor.ts b/src/app/core/interceptors/view-only.interceptor.ts index 908913796..a0a4d91e1 100644 --- a/src/app/core/interceptors/view-only.interceptor.ts +++ b/src/app/core/interceptors/view-only.interceptor.ts @@ -15,6 +15,10 @@ export const viewOnlyInterceptor: HttpInterceptorFn = ( const viewOnlyParam = getViewOnlyParam(router); if (!req.url.includes('/api.crossref.org/funders') && viewOnlyParam) { + if (req.url.includes('view_only=')) { + return next(req); + } + const separator = req.url.includes('?') ? '&' : '?'; const updatedUrl = `${req.url}${separator}view_only=${encodeURIComponent(viewOnlyParam)}`; diff --git a/src/app/features/files/components/file-keywords/file-keywords.component.html b/src/app/features/files/components/file-keywords/file-keywords.component.html index 495d7d9e5..123708174 100644 --- a/src/app/features/files/components/file-keywords/file-keywords.component.html +++ b/src/app/features/files/components/file-keywords/file-keywords.component.html @@ -1,21 +1,28 @@

{{ 'files.detail.keywords.title' | translate }}

-
- + @if (!hasViewOnly()) { +
+ - - -
+ + +
+ } @if (!isTagsLoading()) {
@for (tag of tags(); track $index) { - + }
} @else { diff --git a/src/app/features/files/components/file-keywords/file-keywords.component.ts b/src/app/features/files/components/file-keywords/file-keywords.component.ts index 7991a5740..80e08b78d 100644 --- a/src/app/features/files/components/file-keywords/file-keywords.component.ts +++ b/src/app/features/files/components/file-keywords/file-keywords.component.ts @@ -7,11 +7,12 @@ import { Chip } from 'primeng/chip'; import { InputText } from 'primeng/inputtext'; import { Skeleton } from 'primeng/skeleton'; -import { ChangeDetectionStrategy, Component, DestroyRef, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; -import { CustomValidators } from '@osf/shared/helpers'; +import { CustomValidators, hasViewOnlyParam } from '@osf/shared/helpers'; import { InputLimits } from '@shared/constants'; import { FilesSelectors, UpdateTags } from '../../store'; @@ -26,10 +27,12 @@ import { FilesSelectors, UpdateTags } from '../../store'; export class FileKeywordsComponent { private readonly actions = createDispatchMap({ updateTags: UpdateTags }); private readonly destroyRef = inject(DestroyRef); + private readonly router = inject(Router); readonly tags = select(FilesSelectors.getFileTags); readonly isTagsLoading = select(FilesSelectors.isFileTagsLoading); readonly file = select(FilesSelectors.getOpenedFile); + readonly hasViewOnly = computed(() => hasViewOnlyParam(this.router)); keywordControl = new FormControl('', { nonNullable: true, diff --git a/src/app/features/files/components/file-metadata/file-metadata.component.html b/src/app/features/files/components/file-metadata/file-metadata.component.html index 868f4fbd1..1f24fde19 100644 --- a/src/app/features/files/components/file-metadata/file-metadata.component.html +++ b/src/app/features/files/components/file-metadata/file-metadata.component.html @@ -2,15 +2,17 @@

{{ 'files.detail.fileMetadata.title' | translate }}

-
- + @if (!hasViewOnly()) { +
+ - -
+ +
+ }
@if (isLoading()) { diff --git a/src/app/features/files/components/file-metadata/file-metadata.component.ts b/src/app/features/files/components/file-metadata/file-metadata.component.ts index cd7ec7d92..5c24dfa75 100644 --- a/src/app/features/files/components/file-metadata/file-metadata.component.ts +++ b/src/app/features/files/components/file-metadata/file-metadata.component.ts @@ -8,11 +8,12 @@ import { Skeleton } from 'primeng/skeleton'; import { filter, map, of } from 'rxjs'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { languageCodes } from '@osf/shared/constants'; +import { hasViewOnlyParam } from '@osf/shared/helpers'; import { LanguageCodeModel } from '@osf/shared/models'; import { FileMetadataFields } from '../../constants'; @@ -33,11 +34,13 @@ import { environment } from 'src/environments/environment'; export class FileMetadataComponent { private readonly actions = createDispatchMap({ setFileMetadata: SetFileMetadata }); private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); private readonly dialogService = inject(DialogService); private readonly translateService = inject(TranslateService); fileMetadata = select(FilesSelectors.getFileCustomMetadata); isLoading = select(FilesSelectors.isFileMetadataLoading); + hasViewOnly = computed(() => hasViewOnlyParam(this.router)); readonly languageCodes = languageCodes; diff --git a/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.html b/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.html index 73a66aca3..06b9f50c5 100644 --- a/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.html +++ b/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.html @@ -98,7 +98,7 @@

{{ 'files.detail.resourceMetadata.fields.dateModified' | translate }}

@if (isResourceContributorsLoading()) { } @else { - @if (contributors()?.length) { + @if (contributors()?.length && !hasViewOnly()) {

{{ 'files.detail.resourceMetadata.fields.contributors' | translate }}

diff --git a/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.ts b/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.ts index 3e962d0c2..adcaaab74 100644 --- a/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.ts +++ b/src/app/features/files/components/file-resource-metadata/file-resource-metadata.component.ts @@ -5,8 +5,10 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Skeleton } from 'primeng/skeleton'; import { DatePipe } from '@angular/common'; -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; -import { RouterLink } from '@angular/router'; +import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'; +import { Router, RouterLink } from '@angular/router'; + +import { hasViewOnlyParam } from '@osf/shared/helpers'; import { FilesSelectors } from '../../store'; @@ -18,9 +20,12 @@ import { FilesSelectors } from '../../store'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class FileResourceMetadataComponent { + private readonly router = inject(Router); + resourceType = input('nodes'); resourceMetadata = select(FilesSelectors.getResourceMetadata); contributors = select(FilesSelectors.getContributors); isResourceMetadataLoading = select(FilesSelectors.isResourceMetadataLoading); isResourceContributorsLoading = select(FilesSelectors.isResourceContributorsLoading); + hasViewOnly = computed(() => hasViewOnlyParam(this.router)); } diff --git a/src/app/features/files/mappers/resource-metadata.mapper.ts b/src/app/features/files/mappers/resource-metadata.mapper.ts index b5a993af2..0f3890722 100644 --- a/src/app/features/files/mappers/resource-metadata.mapper.ts +++ b/src/app/features/files/mappers/resource-metadata.mapper.ts @@ -13,16 +13,19 @@ export function MapResourceMetadata( description: shortInfo.data.attributes.description, dateCreated: new Date(shortInfo.data.attributes.date_created), dateModified: new Date(shortInfo.data.attributes.date_modified), - funders: customMetadata.data.embeds.custom_metadata.data.attributes.funders.map((funder) => ({ - funderName: funder.funder_name, - funderIdentifier: funder.funder_identifier, - funderIdentifierType: funder.funder_identifier_type, - awardNumber: funder.award_number, - awardUri: funder.award_uri, - awardTitle: funder.award_title, - })), - identifiers: IdentifiersMapper.fromJsonApi(shortInfo.data.embeds.identifiers), - language: customMetadata.data.embeds.custom_metadata.data.attributes.language, - resourceTypeGeneral: customMetadata.data.embeds.custom_metadata.data.attributes.resource_type_general, + funders: + customMetadata.data.embeds?.custom_metadata?.data?.attributes?.funders?.map((funder) => ({ + funderName: funder.funder_name, + funderIdentifier: funder.funder_identifier, + funderIdentifierType: funder.funder_identifier_type, + awardNumber: funder.award_number, + awardUri: funder.award_uri, + awardTitle: funder.award_title, + })) || [], + identifiers: shortInfo.data.embeds?.identifiers?.data.length + ? IdentifiersMapper.fromJsonApi(shortInfo.data.embeds?.identifiers) + : [], + language: customMetadata.data.embeds?.custom_metadata?.data?.attributes?.language || '', + resourceTypeGeneral: customMetadata.data.embeds?.custom_metadata?.data?.attributes?.resource_type_general || '', }; } diff --git a/src/app/features/files/pages/file-detail/file-detail.component.html b/src/app/features/files/pages/file-detail/file-detail.component.html index 05c85e754..1e7d75fd7 100644 --- a/src/app/features/files/pages/file-detail/file-detail.component.html +++ b/src/app/features/files/pages/file-detail/file-detail.component.html @@ -1,6 +1,6 @@ - + {{ 'files.detail.tabs.details' | translate }} {{ 'files.detail.tabs.revisions' | translate }} @@ -12,13 +12,13 @@
- @if (!isAnonymous()) { + @if (!isAnonymous() && !hasViewOnly()) {
} - @if (file() && !isAnonymous()) { + @if (file() && !isAnonymous() && !hasViewOnly()) {