diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 000000000..b280270ff --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,11 @@ +# Changelog + +We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO. + +26.1.0 (2026-01-01) +=================== + +* Angular FE support for Notification Refactor Project + +# vi: ft=markdown + diff --git a/angular.json b/angular.json index a00a79554..a2e8775f0 100644 --- a/angular.json +++ b/angular.json @@ -53,6 +53,7 @@ "styles": [ "src/styles/styles.scss", "node_modules/primeflex/primeflex.css", + "node_modules/@fortawesome/fontawesome-free/css/all.min.css", "node_modules/ngx-markdown-editor/assets/highlight.js/agate.min.css" ], "stylePreprocessorOptions": { diff --git a/package.json b/package.json index 1c9a244b6..64c19a4eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "osf", - "version": "25.4.0", + "version": "26.1.0", "scripts": { "ng": "ng", "analyze-bundle": "ng build --configuration=analyze-bundle && source-map-explorer dist/**/*.js --no-border-checks", diff --git a/src/app/features/profile/components/profile-information/profile-information.component.html b/src/app/features/profile/components/profile-information/profile-information.component.html index fb23fca21..2b1689c71 100644 --- a/src/app/features/profile/components/profile-information/profile-information.component.html +++ b/src/app/features/profile/components/profile-information/profile-information.component.html @@ -14,11 +14,11 @@

{{ currentUser()?.fullName }}

- @if (currentUser()?.social?.orcid) { + @if (orcidId()) { } diff --git a/src/app/features/profile/components/profile-information/profile-information.component.ts b/src/app/features/profile/components/profile-information/profile-information.component.ts index 25d7f1a4d..3304a8ce2 100644 --- a/src/app/features/profile/components/profile-information/profile-information.component.ts +++ b/src/app/features/profile/components/profile-information/profile-information.component.ts @@ -43,6 +43,11 @@ export class ProfileInformationComponent { userSocials = computed(() => mapUserSocials(this.currentUser()?.social, SOCIAL_LINKS)); + orcidId = computed(() => { + const orcid = this.currentUser()?.external_identity?.ORCID; + return orcid?.status?.toUpperCase() === 'VERIFIED' ? orcid.id : undefined; + }); + toProfileSettings() { this.editProfile.emit(); } diff --git a/src/app/shared/enums/subscriptions/subscription-frequency.enum.ts b/src/app/shared/enums/subscriptions/subscription-frequency.enum.ts index 2c9f96421..660924152 100644 --- a/src/app/shared/enums/subscriptions/subscription-frequency.enum.ts +++ b/src/app/shared/enums/subscriptions/subscription-frequency.enum.ts @@ -1,5 +1,5 @@ export enum SubscriptionFrequency { Never = 'none', Daily = 'daily', - Instant = 'instant', + Instant = 'instantly', } diff --git a/src/app/shared/mappers/user/user.mapper.ts b/src/app/shared/mappers/user/user.mapper.ts index e55a1faac..2a735dd38 100644 --- a/src/app/shared/mappers/user/user.mapper.ts +++ b/src/app/shared/mappers/user/user.mapper.ts @@ -32,6 +32,7 @@ export class UserMapper { employment: user.attributes.employment, iri: user.links.iri, social: user.attributes.social, + external_identity: user.attributes.external_identity, defaultRegionId: user.relationships?.default_region?.data?.id, canViewReviews: user.attributes.can_view_reviews === true, // [NS] Do not simplify it timezone: user.attributes.timezone, diff --git a/src/app/shared/models/user/external-identity.model.ts b/src/app/shared/models/user/external-identity.model.ts new file mode 100644 index 000000000..9703400e0 --- /dev/null +++ b/src/app/shared/models/user/external-identity.model.ts @@ -0,0 +1,8 @@ +export interface OrcidInfo { + id: string; + status: string; +} + +export interface ExternalIdentityModel { + ORCID?: OrcidInfo | null; +} diff --git a/src/app/shared/models/user/user-json-api.model.ts b/src/app/shared/models/user/user-json-api.model.ts index 07ce651e0..0d3848e77 100644 --- a/src/app/shared/models/user/user-json-api.model.ts +++ b/src/app/shared/models/user/user-json-api.model.ts @@ -2,6 +2,7 @@ import { ResponseDataJsonApi } from '../common/json-api.model'; import { Education } from './education.model'; import { Employment } from './employment.model'; +import { ExternalIdentityModel } from './external-identity.model'; import { SocialModel } from './social.model'; export type UserResponseJsonApi = ResponseDataJsonApi; @@ -47,6 +48,7 @@ export interface UserAttributesJsonApi { suffix: string; locale: string; social: SocialModel; + external_identity: ExternalIdentityModel; timezone: string; } diff --git a/src/app/shared/models/user/user.models.ts b/src/app/shared/models/user/user.models.ts index 22ee27f4e..8371e46e7 100644 --- a/src/app/shared/models/user/user.models.ts +++ b/src/app/shared/models/user/user.models.ts @@ -1,5 +1,6 @@ import { Education } from './education.model'; import { Employment } from './employment.model'; +import { ExternalIdentityModel } from './external-identity.model'; import { SocialModel } from './social.model'; export interface UserData { @@ -24,6 +25,7 @@ export interface UserModel { timezone: string; locale: string; social: SocialModel; + external_identity: ExternalIdentityModel; defaultRegionId: string; link?: string; iri?: string; diff --git a/src/styles/styles.scss b/src/styles/styles.scss index a51b536b8..f192f1d5d 100644 --- a/src/styles/styles.scss +++ b/src/styles/styles.scss @@ -7,11 +7,6 @@ @use "base"; @use "icons"; -@use "@fortawesome/fontawesome-free/scss/fontawesome.scss"; -@use "@fortawesome/fontawesome-free/scss/solid.scss"; -@use "@fortawesome/fontawesome-free/scss/brands.scss"; -@use "@fortawesome/fontawesome-free/scss/regular.scss"; - @use "./components/md-editor"; @use "./components/preprints"; @use "./components/collections";