From 2189238bf831f3ad39dffc8162add92837b336f7 Mon Sep 17 00:00:00 2001 From: nsemets Date: Tue, 9 Sep 2025 19:52:02 +0300 Subject: [PATCH 1/3] fix(add): updated add project and component dialog --- src/app/core/constants/index.ts | 1 - .../constants/storage-locations.constant.ts | 8 -- .../add-component-dialog.component.html | 94 +++++--------- .../add-component-dialog.component.ts | 115 +++++++++--------- .../add-project-form.component.scss | 10 -- .../add-project-form.component.ts | 10 +- .../shared/stores/regions/regions.state.ts | 2 +- 7 files changed, 92 insertions(+), 148 deletions(-) delete mode 100644 src/app/core/constants/storage-locations.constant.ts diff --git a/src/app/core/constants/index.ts b/src/app/core/constants/index.ts index b97b14391..54e8fcb58 100644 --- a/src/app/core/constants/index.ts +++ b/src/app/core/constants/index.ts @@ -2,4 +2,3 @@ export * from './error-messages'; export * from './nav-items.constant'; export * from './ngxs-states.constant'; export * from './social-icons.constant'; -export * from './storage-locations.constant'; diff --git a/src/app/core/constants/storage-locations.constant.ts b/src/app/core/constants/storage-locations.constant.ts deleted file mode 100644 index 0a38c5df1..000000000 --- a/src/app/core/constants/storage-locations.constant.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CustomOption } from '@osf/shared/models'; - -export const STORAGE_LOCATIONS: CustomOption[] = [ - { label: 'United States', value: 'us' }, - { label: 'Canada - Montréal', value: 'ca-1' }, - { label: 'Germany - Frankfurt', value: 'de-1' }, - { label: 'Australia - Sydney', value: 'de-1' }, -]; diff --git a/src/app/features/project/overview/components/add-component-dialog/add-component-dialog.component.html b/src/app/features/project/overview/components/add-component-dialog/add-component-dialog.component.html index 5dc3ca672..9f40bc758 100644 --- a/src/app/features/project/overview/components/add-component-dialog/add-component-dialog.component.html +++ b/src/app/features/project/overview/components/add-component-dialog/add-component-dialog.component.html @@ -7,45 +7,16 @@ @if (currentProject()?.affiliatedInstitutions?.length) { -
-
-

- {{ 'project.overview.dialog.addComponent.affiliation.title' | translate }} -

-
- - - - -
-
+
+

+ {{ 'myProjects.createProject.affiliation.title' | translate }} +

-
- @for (affiliation of currentProject()?.affiliatedInstitutions; track affiliation.id) { -
- - Institution Logo -
- } -
+
} @@ -55,42 +26,35 @@

- @@ -69,11 +67,11 @@

{{ 'files.emptyState' | translate }} - + diff --git a/src/app/features/files/components/move-file-dialog/move-file-dialog.component.scss b/src/app/features/files/components/move-file-dialog/move-file-dialog.component.scss index c63d56e96..cc3971c72 100644 --- a/src/app/features/files/components/move-file-dialog/move-file-dialog.component.scss +++ b/src/app/features/files/components/move-file-dialog/move-file-dialog.component.scss @@ -1,4 +1,3 @@ -@use "styles/variables" as var; @use "styles/mixins" as mix; :host { @@ -7,12 +6,12 @@ } .files-table { - border: 1px solid var.$grey-2; + border: 1px solid var(--grey-2); border-radius: mix.rem(8px); &-row { - border-bottom: 1px solid var.$grey-2; - color: var.$dark-blue-1; + border-bottom: 1px solid var(--grey-2); + color: var(--dark-blue-1); } &-row:last-child { @@ -26,7 +25,7 @@ cursor: pointer; &.disabled { - color: var.$grey-1; + color: var(--grey-1); cursor: not-allowed; } @@ -35,6 +34,12 @@ } } +.link-btn-no-padding { + --p-button-label-font-weight: 400; + --p-button-link-hover-color: var(--dark-blue-1); + --p-button-link-color: var(--dark-blue-1); +} + .disabled-icon { - color: var.$grey-1; + color: var(--grey-1); } From 02cff8eea5bfdb6626c47fa21cd2a78c7930ed52 Mon Sep 17 00:00:00 2001 From: nsemets Date: Wed, 10 Sep 2025 11:37:26 +0300 Subject: [PATCH 3/3] fix(overview): updated project overview --- .../overview-collections.component.html | 3 +- .../overview-collections.component.ts | 24 ++++++--- .../overview/project-overview.component.html | 5 +- .../overview/project-overview.component.scss | 2 + .../overview/project-overview.component.ts | 31 +++++------- .../resource-metadata.component.html | 49 ++++++++----------- .../resource-metadata.component.ts | 10 ++-- src/app/shared/constants/index.ts | 1 - .../constants/osf-resource-types.const.ts | 4 -- 9 files changed, 62 insertions(+), 67 deletions(-) delete mode 100644 src/app/shared/constants/osf-resource-types.const.ts diff --git a/src/app/features/project/overview/components/overview-collections/overview-collections.component.html b/src/app/features/project/overview/components/overview-collections/overview-collections.component.html index df41395ef..fd87c2aee 100644 --- a/src/app/features/project/overview/components/overview-collections/overview-collections.component.html +++ b/src/app/features/project/overview/components/overview-collections/overview-collections.component.html @@ -17,8 +17,9 @@

{{ 'project.overview.metadata.collection' | translate }}

diff --git a/src/app/features/project/overview/components/overview-collections/overview-collections.component.ts b/src/app/features/project/overview/components/overview-collections/overview-collections.component.ts index 220def59a..b85f48c30 100644 --- a/src/app/features/project/overview/components/overview-collections/overview-collections.component.ts +++ b/src/app/features/project/overview/components/overview-collections/overview-collections.component.ts @@ -12,30 +12,41 @@ import { Router } from '@angular/router'; import { collectionFilterNames } from '@osf/features/collections/constants'; import { SubmissionReviewStatus } from '@osf/features/moderation/enums'; +import { StopPropagationDirective } from '@osf/shared/directives'; import { CollectionSubmission, ResourceOverview } from '@osf/shared/models'; import { CollectionsSelectors, GetProjectSubmissions } from '@osf/shared/stores'; @Component({ selector: 'osf-overview-collections', - imports: [Accordion, AccordionPanel, AccordionHeader, AccordionContent, TranslatePipe, Skeleton, Tag, Button], + imports: [ + Accordion, + AccordionPanel, + AccordionHeader, + AccordionContent, + TranslatePipe, + Skeleton, + Tag, + Button, + StopPropagationDirective, + ], templateUrl: './overview-collections.component.html', styleUrl: './overview-collections.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) export class OverviewCollectionsComponent { private readonly router = inject(Router); - protected readonly SubmissionReviewStatus = SubmissionReviewStatus; + readonly SubmissionReviewStatus = SubmissionReviewStatus; currentProject = input.required(); projectSubmissions = select(CollectionsSelectors.getCurrentProjectSubmissions); isProjectSubmissionsLoading = select(CollectionsSelectors.getCurrentProjectSubmissionsLoading); - protected projectId = computed(() => { + projectId = computed(() => { const resource = this.currentProject(); return resource ? resource.id : null; }); - protected actions = createDispatchMap({ getProjectSubmissions: GetProjectSubmissions }); + actions = createDispatchMap({ getProjectSubmissions: GetProjectSubmissions }); constructor() { effect(() => { @@ -47,7 +58,7 @@ export class OverviewCollectionsComponent { }); } - protected get submissionAttributes() { + get submissionAttributes() { return (submission: CollectionSubmission) => { if (!submission) return []; @@ -60,8 +71,7 @@ export class OverviewCollectionsComponent { }; } - navigateToCollection($event: Event, submission: CollectionSubmission) { - $event.stopPropagation(); + navigateToCollection(submission: CollectionSubmission) { this.router.navigate([`collections/${submission.collectionId}/`]); } } diff --git a/src/app/features/project/overview/project-overview.component.html b/src/app/features/project/overview/project-overview.component.html index 9bd5c4508..39dae20c9 100644 --- a/src/app/features/project/overview/project-overview.component.html +++ b/src/app/features/project/overview/project-overview.component.html @@ -28,9 +28,8 @@ link [label]="'moderation.makeDecision.goBackLink' | translate" class="link-btn-no-padding font-bold" - (click)="goBack()" - > - + (onClick)="goBack()" + /> @if (status && isCollectionsRoute() && collectionProvider()) { @switch (status) { diff --git a/src/app/features/project/overview/project-overview.component.scss b/src/app/features/project/overview/project-overview.component.scss index fbe6efa4b..c5b7870c4 100644 --- a/src/app/features/project/overview/project-overview.component.scss +++ b/src/app/features/project/overview/project-overview.component.scss @@ -4,6 +4,7 @@ width: 23rem; border: 1px solid var(--grey-2); border-radius: 12px; + @media (max-width: var.$breakpoint-lg) { width: 100%; } @@ -11,6 +12,7 @@ .left-section { width: calc(100% - 23rem - 1.5rem); + @media (max-width: var.$breakpoint-lg) { width: 100%; } diff --git a/src/app/features/project/overview/project-overview.component.ts b/src/app/features/project/overview/project-overview.component.ts index 804aa7f4d..31b5b3ae6 100644 --- a/src/app/features/project/overview/project-overview.component.ts +++ b/src/app/features/project/overview/project-overview.component.ts @@ -143,9 +143,11 @@ export class ProjectOverviewComponent extends DataciteTrackerComponent implement getConfiguredStorageAddons: GetConfiguredStorageAddons, }); - readonly isCollectionsRoute = computed(() => { - return this.router.url.includes('/collections'); - }); + currentProject = select(ProjectOverviewSelectors.getProject); + isAnonymous = select(ProjectOverviewSelectors.isProjectAnonymous); + private currentProject$ = toObservable(this.currentProject); + + readonly isCollectionsRoute = computed(() => this.router.url.includes('/collections')); readonly isModerationMode = computed(() => { const mode = this.route.snapshot.queryParams['mode']; @@ -153,9 +155,7 @@ export class ProjectOverviewComponent extends DataciteTrackerComponent implement return mode === Mode.Moderation; }); - submissionReviewStatus = computed(() => { - return this.currentReviewAction()?.toState; - }); + submissionReviewStatus = computed(() => this.currentReviewAction()?.toState); showDecisionButton = computed(() => { return ( @@ -165,17 +165,8 @@ export class ProjectOverviewComponent extends DataciteTrackerComponent implement ); }); - currentProject = select(ProjectOverviewSelectors.getProject); - private currentProject$ = toObservable(this.currentProject); - isAnonymous = select(ProjectOverviewSelectors.isProjectAnonymous); - - userPermissions = computed(() => { - return this.currentProject()?.currentUserPermissions || []; - }); - - hasViewOnly = computed(() => { - return hasViewOnlyParam(this.router); - }); + userPermissions = computed(() => this.currentProject()?.currentUserPermissions || []); + hasViewOnly = computed(() => hasViewOnlyParam(this.router)); get isAdmin(): boolean { return this.userPermissions().includes(UserPermissions.Admin); @@ -193,9 +184,9 @@ export class ProjectOverviewComponent extends DataciteTrackerComponent implement return null; }); - isLoading = computed(() => { - return this.isProjectLoading() || this.isCollectionProviderLoading() || this.isReviewActionsLoading(); - }); + isLoading = computed( + () => this.isProjectLoading() || this.isCollectionProviderLoading() || this.isReviewActionsLoading() + ); currentResource = computed(() => { const project = this.currentProject(); diff --git a/src/app/shared/components/resource-metadata/resource-metadata.component.html b/src/app/shared/components/resource-metadata/resource-metadata.component.html index 68131c9cd..7a13b18f4 100644 --- a/src/app/shared/components/resource-metadata/resource-metadata.component.html +++ b/src/app/shared/components/resource-metadata/resource-metadata.component.html @@ -21,7 +21,7 @@

{{ 'project.overview.metadata.contributors' | translate }}

@if (!resource.isAnonymous) { @for (contributor of resource.contributors; track contributor.id) { } @@ -40,7 +40,7 @@

{{ 'project.overview.metadata.description' | translate }}

/> - @if (resource.type === resourceTypes.Projects) { + @if (isProject()) {

{{ 'project.overview.metadata.supplements' | translate }}

@@ -48,9 +48,9 @@

{{ 'project.overview.metadata.supplements' | translate }}

@for (supplement of resource.supplements; track supplement.id) {

{{ 'project.overview.metadata.supplementsText1' | translate }} - {{ - supplement.title + ', ' + (supplement.dateCreated | date: 'MMMM d, y') - }} + + {{ supplement.title + ', ' + (supplement.dateCreated | date: 'MMMM d, y') }} + {{ 'project.overview.metadata.supplementsText2' | translate }}

} @@ -60,7 +60,7 @@

{{ 'project.overview.metadata.supplements' | translate }}

} - @if (resource.type === resourceTypes.Registrations) { + @if (isRegistration()) {

{{ 'registry.overview.metadata.type' | translate }}

{{ resource.registrationType }}

@@ -70,9 +70,9 @@

{{ 'registry.overview.metadata.type' | translate }}

{{ 'registry.overview.metadata.associatedProject' | translate }}

- {{ - 'osf.io/' + resource.associatedProjectId - }} + + {{ 'osf.io/' + resource.associatedProjectId }} +
} } @@ -80,18 +80,18 @@

{{ 'registry.overview.metadata.associatedProject' | translate }}

{{ 'project.overview.metadata.dateCreated' | translate }}

-

{{ resource.dateCreated | date: 'MMM d, y, h:mm a' }}

+

{{ resource.dateCreated | date: dateFormat }}

- @if (resource.type !== resourceTypes.Registrations) { + @if (isProject()) {

{{ 'project.overview.metadata.dateUpdated' | translate }}

-

{{ resource.dateModified | date: 'MMM d, y, h:mm a' }}

+

{{ resource.dateModified | date: dateFormat }}

} @else {

{{ 'registry.overview.metadata.registeredDate' | translate }}

-

{{ resource.dateRegistered | date: 'MMM d, y, h:mm a' }}

+

{{ resource.dateRegistered | date: dateFormat }}

}
@@ -104,24 +104,16 @@

{{ 'project.overview.metadata.license' | translate }}

@if (!resource.isAnonymous) {
- @if (resource.type !== resourceTypes.Registrations) { -

{{ 'project.overview.metadata.publication' | translate }}

- } @else { -

{{ 'registry.overview.metadata.doi' | translate }}

- } +

+ {{ (isProject() ? 'project.overview.metadata.publication' : 'registry.overview.metadata.doi') | translate }} +

@if (resource.identifiers?.length) { @for (identifier of resource.identifiers; track identifier.id) { @if (identifier.category === 'doi') { - @if (resource.type !== resourceTypes.Registrations) { - - {{ identifier.value }} - - } @else { - - {{ 'https://doi.org/' + identifier.value }} - - } + + {{ identifier.value }} + } } } @else { @@ -134,7 +126,7 @@

{{ 'registry.overview.metadata.doi' | translate }}

} - @if (resource.type === resourceTypes.Projects) { + @if (isProject()) { } @@ -165,6 +157,7 @@

{{ 'project.overview.metadata.tags' | translate }}

{{ 'project.overview.metadata.noTags' | translate }}

}
+ @if (!resource.isAnonymous) { (false); canWrite = input.required(); - protected readonly resourceTypes = OsfResourceTypes; + readonly resourceTypes = CurrentResourceType; + readonly dateFormat = 'MMM d, y, h:mm a'; + + isProject = computed(() => this.currentResource()?.type === CurrentResourceType.Projects); + isRegistration = computed(() => this.currentResource()?.type === CurrentResourceType.Registrations); onCustomCitationUpdated(citation: string): void { this.customCitationUpdated.emit(citation); diff --git a/src/app/shared/constants/index.ts b/src/app/shared/constants/index.ts index 5d262e421..23069ad60 100644 --- a/src/app/shared/constants/index.ts +++ b/src/app/shared/constants/index.ts @@ -9,7 +9,6 @@ export * from './input-validation-messages.const'; export * from './language.const'; export * from './meetings-table.constants'; export * from './my-projects-table.constants'; -export * from './osf-resource-types.const'; export * from './pie-chart-palette'; export * from './pie-chart-palette'; export * from './registry-services-icons.const'; diff --git a/src/app/shared/constants/osf-resource-types.const.ts b/src/app/shared/constants/osf-resource-types.const.ts deleted file mode 100644 index 14707ddae..000000000 --- a/src/app/shared/constants/osf-resource-types.const.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const OsfResourceTypes = { - Projects: 'nodes', - Registrations: 'registrations', -};