Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ <h2 class="flex align-items-center gap-2">
<span class="font-bold">{{ 'common.labels.contributors' | translate }}:</span>
@for (contributor of duplicate.contributors; track contributor.id) {
<div>
<a [routerLink]="['/user', contributor.id]" class="font-bold"> {{ contributor.fullName }}</a>
<a class="font-bold" [routerLink]="['/user', contributor.userId]"> {{ contributor.fullName }}</a>
<span>{{ $last ? '' : ',' }}</span>
</div>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,27 +111,31 @@ <h1>{{ 'home.loggedIn.hosting.title' | translate }}</h1>
data-test-products-collections
>
<img
class="max-w-full"
src="assets/images/dashboard/products/osf-collections.png"
[alt]="'home.loggedIn.dashboard.images.osfCollectionsImageAltText' | translate"
/>
</a>

<a routerLink="/institutions">
<img
class="max-w-full"
src="assets/images/dashboard/products/osf-institutions.png"
[alt]="'home.loggedIn.dashboard.images.osfInstitutionsImageAltText' | translate"
/>
</a>

<a routerLink="/registries">
<img
class="max-w-full"
src="assets/images/dashboard/products/osf-registries.png"
[alt]="'home.loggedIn.dashboard.images.osfRegistriesImageAltTest' | translate"
/>
</a>

<a routerLink="/preprints">
<img
class="max-w-full"
src="assets/images/dashboard/products/osf-preprints.png"
[alt]="'home.loggedIn.dashboard.images.osfPreprintsImageAltTest' | translate"
/>
Expand Down
9 changes: 2 additions & 7 deletions src/app/features/my-projects/mappers/my-resources.mapper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { ContributorsMapper } from '@osf/shared/mappers';
import { MyResourcesItem, MyResourcesItemGetResponseJsonApi } from '@osf/shared/models';

export class MyResourcesMapper {
Expand All @@ -9,13 +10,7 @@ export class MyResourcesMapper {
dateCreated: response.attributes.date_created,
dateModified: response.attributes.date_modified,
isPublic: response.attributes.public,
contributors:
response.embeds?.bibliographic_contributors?.data?.map((contributor) => ({
familyName: contributor.embeds.users.data?.attributes.family_name,
fullName: contributor.embeds.users.data?.attributes.full_name,
givenName: contributor.embeds.users.data?.attributes.given_name,
middleName: contributor.embeds.users.data?.attributes.middle_name,
})) ?? [],
contributors: ContributorsMapper.getContributorShortInfo(response.embeds?.bibliographic_contributors?.data),
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@
<p-accordion-content>
<div class="flex flex-column pt-4 gap-2">
<h3 class="font-normal">{{ 'registry.overview.statuses.' + registry()?.status + '.short' | translate }}</h3>
<div class="flex">
<p>
<p>
<span>
{{
'registry.overview.statuses.' + registry()?.status + '.long'
| translate: { embargoEndDate: embargoEndDate }
}}
</p>
</span>

@if (isAccepted()) {
<a class="font-bold ml-1" [routerLink]="['/', registry()?.associatedProjectId]">
<a class="font-bold" [routerLink]="['/', registry()?.associatedProjectId]">
{{ 'registry.overview.statuses.accepted.project' | translate }}</a
>.
}
</div>
</p>

@if (canEdit()) {
@if (canWithdraw()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,9 @@ describe('MyProjectsTableComponent', () => {
dateModified: '2024-01-01T10:00:00Z',
contributors: [
{
familyName: 'John Doe',
id: '1',
userId: 'user1',
fullName: 'Jane Smith',
middleName: 'Jane Smith',
givenName: 'Jane Smith',
},
],
type: '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ <h2 class="align-self-center word-break-word">
<strong>{{ 'project.overview.metadata.contributors' | translate }}:</strong>
<span class="contributors">
@for (contributor of registrationData().contributors; track contributor) {
<a class="font-bold" [routerLink]="['/user', contributor.id]">{{ contributor.fullName }}</a>
<a class="font-bold" [routerLink]="['/user', contributor.userId]">{{ contributor.fullName }}</a>
@if (!$last) {
<span>, </span>
}
Expand Down
8 changes: 7 additions & 1 deletion src/app/shared/components/toast/toast.component.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<p-toast class="toast-container" position="top-right" [preventOpenDuplicates]="true" key="osf">
<p-toast
class="toast-container"
position="top-right"
[preventOpenDuplicates]="true"
key="osf"
[breakpoints]="{ '576px': { width: '80%' } }"
>
<ng-template let-message pTemplate="message">
<div class="font-medium w-full">{{ message.summary | translate: message.data?.translationParams }}</div>
</ng-template>
Expand Down
12 changes: 9 additions & 3 deletions src/app/shared/mappers/contributors/contributors.mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@ import {
} from '@osf/shared/models';

export class ContributorsMapper {
static fromResponse(response: ContributorDataJsonApi[]): ContributorModel[] {
return response.map((contributor) => this.fromContributorResponse(contributor));
static fromResponse(response: ContributorDataJsonApi[] | undefined): ContributorModel[] {
if (!response) {
return [];
}

return response
.filter((contributor) => !contributor?.embeds?.users?.errors)
.map((contributor) => this.fromContributorResponse(contributor));
}

static fromContributorResponse(response: ContributorDataJsonApi): ContributorModel {
Expand All @@ -33,7 +39,7 @@ export class ContributorsMapper {
};
}

static getContributorShortInfo(response: ContributorDataJsonApi[]): ContributorShortInfoModel[] {
static getContributorShortInfo(response: ContributorDataJsonApi[] | undefined): ContributorShortInfoModel[] {
const contributors = this.fromResponse(response);

return contributors.map((contributor) => ({
Expand Down
13 changes: 4 additions & 9 deletions src/app/shared/mappers/duplicates.mapper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { ResponseJsonApi } from '@shared/models';

import { DuplicateJsonApi, DuplicatesWithTotal } from 'src/app/shared/models/duplicates';
import { DuplicateJsonApi, DuplicatesWithTotal } from '../models/duplicates';

import { ContributorsMapper } from './contributors';

export class DuplicatesMapper {
static fromDuplicatesJsonApiResponse(response: ResponseJsonApi<DuplicateJsonApi[]>): DuplicatesWithTotal {
Expand All @@ -14,14 +16,7 @@ export class DuplicatesMapper {
dateModified: duplicate.attributes.date_modified,
public: duplicate.attributes.public,
currentUserPermissions: duplicate.attributes.current_user_permissions,
contributors: duplicate.embeds.bibliographic_contributors.data.map((contributor) => ({
familyName: contributor.embeds.users.data.attributes.family_name,
fullName: contributor.embeds.users.data.attributes.full_name,
givenName: contributor.embeds.users.data.attributes.given_name,
middleName: contributor.embeds.users.data.attributes.middle_name,
id: contributor.embeds.users.data.id,
type: contributor.embeds.users.data.type,
})),
contributors: ContributorsMapper.getContributorShortInfo(duplicate.embeds.bibliographic_contributors.data),
})),
totalCount: response.meta.total,
};
Expand Down
14 changes: 4 additions & 10 deletions src/app/shared/mappers/registration/registration.mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {
SchemaResponseDataJsonApi,
} from '@osf/shared/models';

import { ContributorsMapper } from '../contributors';

import { MapRegistryStatus } from './map-registry-status.mapper';

export class RegistrationMapper {
Expand Down Expand Up @@ -66,11 +68,7 @@ export class RegistrationMapper {
registrationTemplate: registration.embeds?.registration_schema?.data?.attributes?.name || '',
registry: registration.embeds?.provider?.data?.attributes?.name || '',
public: registration.attributes.public,
contributors:
registration.embeds?.bibliographic_contributors?.data.map((contributor) => ({
id: contributor.id,
fullName: contributor.embeds?.users?.data.attributes.full_name,
})) || [],
contributors: ContributorsMapper.getContributorShortInfo(registration.embeds?.bibliographic_contributors?.data),
currentUserPermissions: registration.attributes.current_user_permissions,
};
}
Expand All @@ -93,11 +91,7 @@ export class RegistrationMapper {
hasMaterials: registration.attributes.has_materials,
hasPapers: registration.attributes.has_papers,
hasSupplements: registration.attributes.has_supplements,
contributors:
registration.embeds?.bibliographic_contributors?.data.map((contributor) => ({
id: contributor.embeds.users.data.id,
fullName: contributor.embeds.users.data.attributes.full_name,
})) || [],
contributors: ContributorsMapper.getContributorShortInfo(registration.embeds?.bibliographic_contributors?.data),
rootParentId: registration.relationships.root?.data?.id,
currentUserPermissions: registration.attributes.current_user_permissions,
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ContributorPermission } from '@osf/shared/enums';
import { ResponseJsonApi, UserDataJsonApi } from '@osf/shared/models';
import { ResponseJsonApi, UserDataJsonApi, UserErrorResponseJsonApi } from '@osf/shared/models';

export type ContributorResponseJsonApi = ResponseJsonApi<ContributorDataJsonApi>;
export type ContributorsResponseJsonApi = ResponseJsonApi<ContributorDataJsonApi[]>;
Expand Down Expand Up @@ -50,8 +50,9 @@ interface RelationshipUsersDataJsonApi {
type?: 'users';
}

interface EmbeddedUsersJsonApi {
export interface EmbeddedUsersJsonApi {
data: UserDataJsonApi;
errors?: UserErrorResponseJsonApi[];
}

interface RelationshipJsonApi<T> {
Expand Down
19 changes: 3 additions & 16 deletions src/app/shared/models/duplicates/duplicate-json-api.model.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { ContributorDataJsonApi } from '../contributors';

export interface DuplicateJsonApi {
id: string;
type: string;
Expand All @@ -11,22 +13,7 @@ export interface DuplicateJsonApi {
};
embeds: {
bibliographic_contributors: {
data: {
embeds: {
users: {
data: {
id: string;
type: string;
attributes: {
family_name: string;
full_name: string;
given_name: string;
middle_name: string;
};
};
};
};
}[];
data: ContributorDataJsonApi[];
};
};
}
11 changes: 3 additions & 8 deletions src/app/shared/models/duplicates/duplicate.model.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { ContributorShortInfoModel } from '../contributors';

export interface Duplicate {
id: string;
type: string;
Expand All @@ -7,14 +9,7 @@ export interface Duplicate {
dateModified: string;
public: boolean;
currentUserPermissions: string[];
contributors: {
familyName: string;
fullName: string;
givenName: string;
middleName: string;
id: string;
type: string;
}[];
contributors: ContributorShortInfoModel[];
}

export interface DuplicatesWithTotal {
Expand Down
19 changes: 3 additions & 16 deletions src/app/shared/models/my-resources/my-resources.models.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ResponseJsonApi } from '@shared/models';
import { ContributorDataJsonApi, ContributorShortInfoModel, ResponseJsonApi } from '@shared/models';

export type MyResourcesItemResponseJsonApi = ResponseJsonApi<MyResourcesItem[]>;

Expand All @@ -15,20 +15,7 @@ export interface MyResourcesItemGetResponseJsonApi {
};
embeds: {
bibliographic_contributors: {
data: {
embeds: {
users: {
data: {
attributes: {
family_name: string;
full_name: string;
given_name: string;
middle_name: string;
};
};
};
};
}[];
data: ContributorDataJsonApi[];
};
};
}
Expand All @@ -47,5 +34,5 @@ export interface MyResourcesItem {
dateCreated: string;
dateModified: string;
isPublic: boolean;
contributors: MyResourcesContributor[];
contributors: ContributorShortInfoModel[];
}
16 changes: 2 additions & 14 deletions src/app/shared/models/registration/registration-json-api.model.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { RegistrationReviewStates, RevisionReviewStates, UserPermissions } from '@osf/shared/enums';

import { ApiData, MetaJsonApi, PaginationLinksJsonApi } from '../common';
import { ContributorDataJsonApi } from '../contributors';
import { LicenseRecordJsonApi } from '../licenses-json-api.model';

export interface DraftRegistrationResponseJsonApi {
Expand Down Expand Up @@ -130,20 +131,7 @@ export interface RegistrationEmbedsJsonApi {
};
};
bibliographic_contributors?: {
data: {
id: string;
type: 'users';
embeds: {
users: {
data: {
attributes: {
full_name: string;
};
id: string;
};
};
};
}[];
data: ContributorDataJsonApi[];
};
provider?: {
data: {
Expand Down
15 changes: 15 additions & 0 deletions src/app/shared/models/user/user-json-api.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,21 @@ export interface UserAttributesJsonApi {
timezone: string;
}

export interface UserErrorResponseJsonApi {
source: Record<string, unknown>;
detail: string;
meta: UserErrorMetaJsonApi;
status: string;
}

export interface UserErrorMetaJsonApi {
full_name: string;
family_name: string;
given_name: string;
middle_names: string;
profile_image: string;
}

interface UserLinksJsonApi {
html: string;
iri: string;
Expand Down
2 changes: 1 addition & 1 deletion src/app/shared/pipes/citation-format.pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class CitationFormatPipe implements PipeTransform {
return (names || '')
.trim()
.split(/\s+/)
.map((n) => (/^[a-z]/i.test(n) ? `${n[0].toUpperCase()}.` : ''))
.map((n) => (/^\p{L}/u.test(n) ? `${n[0].toUpperCase()}.` : ''))
.filter(Boolean)
.join(' ');
}
Expand Down
Loading