diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 8c22ccf78..93a3d729b 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -141,6 +141,11 @@ export const routes: Routes = [ loadComponent: () => import('@osf/features/project/analytics/analytics.component').then((mod) => mod.AnalyticsComponent), }, + { + path: 'settings', + loadComponent: () => + import('./features/project/settings/settings.component').then((mod) => mod.SettingsComponent), + }, ], }, { diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index e69c6e7d5..0263a12b5 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -102,6 +102,10 @@ export const PROJECT_MENU_ITEMS: MenuItem[] = [ }, { label: 'navigation.project.contributors', routerLink: 'contributors' }, { label: 'navigation.project.analytics', routerLink: 'analytics' }, + { + label: 'navigation.project.settings', + routerLink: 'settings', + }, ], }, ]; diff --git a/src/app/features/meetings/pages/meeting-details/meeting-details.component.html b/src/app/features/meetings/pages/meeting-details/meeting-details.component.html index cfa0e861f..234762b69 100644 --- a/src/app/features/meetings/pages/meeting-details/meeting-details.component.html +++ b/src/app/features/meetings/pages/meeting-details/meeting-details.component.html @@ -1,70 +1,74 @@ - +
- + - - - - - {{ 'meetings.details.table.columns.title' | translate }} - - - - {{ 'meetings.details.table.columns.author' | translate }} - - - - {{ 'meetings.details.table.columns.category' | translate }} - - - - {{ 'meetings.details.table.columns.dateCreated' | translate }} - - - - {{ 'meetings.details.table.columns.downloads' | translate }} - - - - - - - {{ item.title }} - {{ item.authorName }} - {{ item.meetingCategory }} - {{ item.dateCreated | date: 'MMM d, y, h:mm a' }} - - - {{ item.downloadCount }} - - - - + + + + + {{ 'meetings.details.table.columns.title' | translate }} + + + + {{ 'meetings.details.table.columns.author' | translate }} + + + + {{ 'meetings.details.table.columns.category' | translate }} + + + + {{ 'meetings.details.table.columns.dateCreated' | translate }} + + + + {{ 'meetings.details.table.columns.downloads' | translate }} + + + + + + + {{ item.title }} + {{ item.authorName }} + {{ item.meetingCategory }} + {{ item.dateCreated | date: 'MMM d, y, h:mm a' }} + + + {{ item.downloadCount }} + + + +
diff --git a/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html b/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html index bbd1b04da..ea3d603df 100644 --- a/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html +++ b/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html @@ -1,52 +1,57 @@ - + -
+

{{ 'meetings.landing.submissionsNote' | translate }}

- + - + {{ 'meetings.landing.table.columns.title' | translate }} - + {{ 'meetings.landing.table.columns.submissions' | translate }} - + {{ 'meetings.landing.table.columns.location' | translate }} - + {{ 'meetings.landing.table.columns.date' | translate }} - + @@ -63,9 +68,7 @@
- Discover + Discover

{{ 'meetings.landing.features.discover.title' | translate }}

{{ 'meetings.landing.features.discover.description' | translate }}

@@ -73,9 +76,7 @@

{{ 'meetings.landing.features.discover.title' | translate }}

- Share + Share

{{ 'meetings.landing.features.share.title' | translate }}

{{ 'meetings.landing.features.share.description' | translate }}

@@ -83,9 +84,7 @@

{{ 'meetings.landing.features.share.title' | translate }}

- Enhance + Enhance

{{ 'meetings.landing.features.enhance.title' | translate }}

{{ 'meetings.landing.features.enhance.description' | translate }}

@@ -96,18 +95,10 @@

{{ 'meetings.landing.features.enhance.title' | translate }}

{{ 'meetings.landing.users.title' | translate }}

- APS - BITSS - NRAO - SPSP + APS + BITSS + NRAO + SPSP
diff --git a/src/app/features/project/contributors/components/add-contributor-dialog/add-contributor-dialog.component.spec.ts b/src/app/features/project/contributors/components/add-contributor-dialog/add-contributor-dialog.component.spec.ts index 888146c98..3857c8678 100644 --- a/src/app/features/project/contributors/components/add-contributor-dialog/add-contributor-dialog.component.spec.ts +++ b/src/app/features/project/contributors/components/add-contributor-dialog/add-contributor-dialog.component.spec.ts @@ -8,9 +8,8 @@ describe('AddContributorDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [AddContributorDialogComponent] - }) - .compileComponents(); + imports: [AddContributorDialogComponent], + }).compileComponents(); fixture = TestBed.createComponent(AddContributorDialogComponent); component = fixture.componentInstance; diff --git a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.html b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.html index 1430fd514..fcfa1ac96 100644 --- a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.html +++ b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.html @@ -12,30 +12,39 @@ /> -
+
-

Anonymize contributor list for this link (e.g., for blind peer review). - Ensure the wiki pages, files, registration forms and add-ons do not contain identifying information. +

+ Anonymize contributor list for this link (e.g., for blind peer review). + Ensure the wiki pages, files, registration forms and add-ons do not contain identifying information.

-
+
-

Which components would you like to associate with this link? - Anyone with the private link can view—but not edit—the components associated with the link. +

+ Which components would you like to associate with this link? + Anyone with the private link can view—but not edit—the components associated with the link.

-

Component Name Example

+ +

Component Name Example

-

Component Name Example

+ +

Component Name Example

-

Component Name Example

+ +

Component Name Example

diff --git a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.spec.ts b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.spec.ts index e5954f5bc..c5b3defdf 100644 --- a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.spec.ts +++ b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.spec.ts @@ -8,9 +8,8 @@ describe('CreateViewLinkDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [CreateViewLinkDialogComponent] - }) - .compileComponents(); + imports: [CreateViewLinkDialogComponent], + }).compileComponents(); fixture = TestBed.createComponent(CreateViewLinkDialogComponent); component = fixture.componentInstance; diff --git a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.ts b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.ts index f44a988d6..0ca384c5e 100644 --- a/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.ts +++ b/src/app/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component.ts @@ -1,26 +1,21 @@ -import {ChangeDetectionStrategy, Component, inject, signal} from '@angular/core'; -import {Button} from "primeng/button"; -import {SearchInputComponent} from "@osf/shared"; -import {TranslatePipe} from "@ngx-translate/core"; -import {DynamicDialogRef} from 'primeng/dynamicdialog'; -import {InputText} from 'primeng/inputtext'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {Checkbox} from 'primeng/checkbox'; +import { TranslatePipe } from '@ngx-translate/core'; + +import { Button } from 'primeng/button'; +import { Checkbox } from 'primeng/checkbox'; +import { DynamicDialogRef } from 'primeng/dynamicdialog'; +import { InputText } from 'primeng/inputtext'; + +import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { SearchInputComponent } from '@osf/shared'; @Component({ selector: 'osf-create-view-link-dialog', - imports: [ - Button, - SearchInputComponent, - TranslatePipe, - InputText, - ReactiveFormsModule, - FormsModule, - Checkbox - ], + imports: [Button, SearchInputComponent, TranslatePipe, InputText, ReactiveFormsModule, FormsModule, Checkbox], templateUrl: './create-view-link-dialog.component.html', styleUrl: './create-view-link-dialog.component.scss', - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, }) export class CreateViewLinkDialogComponent { dialogRef = inject(DynamicDialogRef); diff --git a/src/app/features/project/contributors/contributors.component.html b/src/app/features/project/contributors/contributors.component.html index d00fc1371..070f7354e 100644 --- a/src/app/features/project/contributors/contributors.component.html +++ b/src/app/features/project/contributors/contributors.component.html @@ -47,7 +47,6 @@

Contributors

- Contributors > - {{'project.contributors.table.headers.name' | translate }} + {{ 'project.contributors.table.headers.name' | translate }}
- {{'project.contributors.table.headers.permissions' | translate }} + {{ 'project.contributors.table.headers.permissions' | translate }}
@@ -80,7 +79,7 @@

Permission Information

Read

    -
  • View project content and comment
  • +
  • View project content and comment
@@ -102,27 +101,29 @@

Permission Information

  • Public private settings
  • -
    - {{'project.contributors.table.headers.contributor' | translate }} + {{ 'project.contributors.table.headers.contributor' | translate }}

    Bibliographic Contributor Information

    - Only bibliographic contributors will be displayed in the Contributors list and in project citations. Non-bibliographic contributors can read and modify the project as normal. + Only bibliographic contributors will be displayed in the Contributors list and in project citations. + Non-bibliographic contributors can read and modify the project as normal.
    - {{'project.contributors.table.headers.curator' | translate }} + {{ 'project.contributors.table.headers.curator' | translate }}
    @@ -133,8 +134,8 @@

    Curator Information

    - {{'project.contributors.table.headers.employment' | translate }} - {{'project.contributors.table.headers.education' | translate }} + {{ 'project.contributors.table.headers.employment' | translate }} + {{ 'project.contributors.table.headers.education' | translate }}
    @@ -146,7 +147,7 @@

    Curator Information

    -
    +
    Curator Information (ngModelChange)="onItemPermissionChange($event)" > -

    {{ selectedOption.label | translate }}

    +

    {{ selectedOption.label | translate }}

    -

    {{ item.label | translate }}

    +

    {{ item.label | translate }}

    @@ -171,26 +172,23 @@

    Curator Information

    - +
    - @if(item.employmentHistory){ + @if (item.employmentHistory) { Show employment history - } - @else { + } @else { No employment history }
    - @if(item.educationHistory){ + @if (item.educationHistory) { Show education history - } - @else { + } @else { No education history } -
    @@ -199,12 +197,13 @@

    Curator Information

    -

    {{'project.contributors.viewOnly' | translate}}

    -

    {{'project.contributors.createLink' | translate}}

    - - +

    {{ 'project.contributors.viewOnly' | translate }}

    +

    {{ 'project.contributors.createLink' | translate }}

    + +
    - - -
    diff --git a/src/app/features/project/contributors/contributors.component.scss b/src/app/features/project/contributors/contributors.component.scss index 2d5979f7f..4bb38421d 100644 --- a/src/app/features/project/contributors/contributors.component.scss +++ b/src/app/features/project/contributors/contributors.component.scss @@ -22,7 +22,6 @@ display: flex; gap: 0.8rem; - .search { width: 60%; } @@ -31,7 +30,6 @@ gap: 0.8rem; width: 40%; } - } .red-icon { diff --git a/src/app/features/project/contributors/contributors.component.spec.ts b/src/app/features/project/contributors/contributors.component.spec.ts index 3852329cb..fb45f2cde 100644 --- a/src/app/features/project/contributors/contributors.component.spec.ts +++ b/src/app/features/project/contributors/contributors.component.spec.ts @@ -8,9 +8,8 @@ describe('ContributorsComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ContributorsComponent] - }) - .compileComponents(); + imports: [ContributorsComponent], + }).compileComponents(); fixture = TestBed.createComponent(ContributorsComponent); component = fixture.componentInstance; diff --git a/src/app/features/project/contributors/contributors.component.ts b/src/app/features/project/contributors/contributors.component.ts index 3d1d1700e..880872ad8 100644 --- a/src/app/features/project/contributors/contributors.component.ts +++ b/src/app/features/project/contributors/contributors.component.ts @@ -14,15 +14,13 @@ import { FormsModule } from '@angular/forms'; import { MY_PROJECTS_TABLE_PARAMS } from '@core/constants/my-projects-table.constants'; import { AddContributorDialogComponent } from '@osf/features/project/contributors/components/add-contributor-dialog/add-contributor-dialog.component'; +import { CreateViewLinkDialogComponent } from '@osf/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component'; import { LinkTableModel } from '@osf/features/project/settings'; import { ViewOnlyTableComponent } from '@osf/shared'; import { SearchInputComponent } from '@shared/components/search-input/search-input.component'; import { SelectOption } from '@shared/entities/select-option.interface'; import { TableParameters } from '@shared/entities/table-parameters.interface'; import { IS_WEB, IS_XSMALL } from '@shared/utils/breakpoints.tokens'; -import { - CreateViewLinkDialogComponent -} from "@osf/features/project/contributors/components/create-view-link-dialog/create-view-link-dialog.component"; @Component({ selector: 'osf-contributors', @@ -158,7 +156,9 @@ export class ContributorsComponent { this.pageChange.emit(event); } - protected onItemPermissionChange(event: TablePageEvent): void {} + protected onItemPermissionChange(event: TablePageEvent): void { + console.log(event); + } addContributor() { this.dialogRef = this.#dialogService.open(AddContributorDialogComponent, { diff --git a/src/app/features/project/settings/components/index.ts b/src/app/features/project/settings/components/index.ts index 74042b224..709e58efa 100644 --- a/src/app/features/project/settings/components/index.ts +++ b/src/app/features/project/settings/components/index.ts @@ -1 +1,7 @@ -export * from './accordion-table/accordion-table.component'; +export * from './project-detail-setting-accordion/project-detail-setting-accordion.component'; +export * from './settings-access-requests-card/settings-access-requests-card.component'; +export * from './settings-commenting-card/settings-commenting-card.component'; +export * from './settings-project-form-card/settings-project-form-card.component'; +export * from './settings-storage-location-card/settings-storage-location-card.component'; +export * from './settings-view-only-links-card/settings-view-only-links-card.component'; +export * from './settings-wiki-card/settings-wiki-card.component'; diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html new file mode 100644 index 000000000..fe6294db5 --- /dev/null +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html @@ -0,0 +1,56 @@ +
    +
    + + + + + {{ title() }} +
    + + @if (rightControls().length > 0) { +
    + @for (control of rightControls(); track control.value) { +
    + @if (control.label) { + + {{ control.label }} + + } + + @switch (control.type) { + @case ('dropdown') { + + } + @case ('text') { + + {{ control.value }} + + } + } +
    + } +
    + } +
    + +@if (expanded()) { +
    + +
    +} diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.spec.ts b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.spec.ts new file mode 100644 index 000000000..320e8c125 --- /dev/null +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProjectDetailSettingAccordionComponent } from './project-detail-setting-accordion.component'; + +describe('AccordionTableComponent', () => { + let component: ProjectDetailSettingAccordionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProjectDetailSettingAccordionComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ProjectDetailSettingAccordionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts new file mode 100644 index 000000000..78705a40c --- /dev/null +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts @@ -0,0 +1,26 @@ +import { Button } from 'primeng/button'; +import { DropdownModule } from 'primeng/dropdown'; + +import { LowerCasePipe, NgClass } from '@angular/common'; +import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +import { RightControl } from '@osf/features/project/settings/models/right-control.model'; + +@Component({ + selector: 'osf-project-detail-setting-accordion', + imports: [NgClass, DropdownModule, FormsModule, Button, LowerCasePipe], + templateUrl: './project-detail-setting-accordion.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProjectDetailSettingAccordionComponent { + title = input.required(); + + rightControls = input.required(); + + expanded = signal(false); + + toggle() { + this.expanded.set(!this.expanded()); + } +} diff --git a/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html new file mode 100644 index 000000000..7ac5e9139 --- /dev/null +++ b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html @@ -0,0 +1,16 @@ + +

    {{ 'myProjects.settings.accessRequests' | translate }}

    + +
    + + +
    +
    diff --git a/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.spec.ts b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.spec.ts new file mode 100644 index 000000000..af1f438ef --- /dev/null +++ b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsAccessRequestsCardComponent } from './settings-access-requests-card.component'; + +describe('SettingsAccessRequestsCardComponent', () => { + let component: SettingsAccessRequestsCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsAccessRequestsCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsAccessRequestsCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.ts b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.ts new file mode 100644 index 000000000..efc4d9a51 --- /dev/null +++ b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.ts @@ -0,0 +1,18 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Card } from 'primeng/card'; +import { Checkbox } from 'primeng/checkbox'; + +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; +import { FormControl } from '@angular/forms'; + +@Component({ + selector: 'osf-settings-access-requests-card', + imports: [Checkbox, TranslatePipe, Card], + templateUrl: './settings-access-requests-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsAccessRequestsCardComponent { + formControl = input.required(); +} diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html new file mode 100644 index 000000000..9e82b5098 --- /dev/null +++ b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html @@ -0,0 +1,27 @@ + +

    {{ 'myProjects.settings.commenting' | translate }}

    + +
    +
    + +

    {{ 'myProjects.settings.contributorsCanPost' | translate }}

    +
    + +
    + + + +

    {{ 'myProjects.settings.osfUserCanPost' | translate }}

    +
    +
    +
    diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts new file mode 100644 index 000000000..639c49a14 --- /dev/null +++ b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsCommentingCardComponent } from './settings-commenting-card.component'; + +describe('SettingsCommentingCardComponent', () => { + let component: SettingsCommentingCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsCommentingCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsCommentingCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts new file mode 100644 index 000000000..f219023a2 --- /dev/null +++ b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts @@ -0,0 +1,20 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Card } from 'primeng/card'; +import { RadioButton } from 'primeng/radiobutton'; + +import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +import { ShareIndexingEnum } from '@osf/features/settings/account-settings/components/share-indexing/enums/share-indexing.enum'; + +@Component({ + selector: 'osf-settings-commenting-card', + imports: [Card, RadioButton, TranslatePipe, FormsModule], + templateUrl: './settings-commenting-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsCommentingCardComponent { + commenting = model(); +} diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html new file mode 100644 index 000000000..4d49d0aa9 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html @@ -0,0 +1,49 @@ + +

    {{ 'myProjects.settings.project' | translate }}

    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.spec.ts b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.spec.ts new file mode 100644 index 000000000..710657fe2 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsProjectFormCardComponent } from './settings-project-form-card.component'; + +describe('SettingsProjectFormCardComponent', () => { + let component: SettingsProjectFormCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsProjectFormCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsProjectFormCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts new file mode 100644 index 000000000..48e3285a5 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts @@ -0,0 +1,26 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Button } from 'primeng/button'; +import { Card } from 'primeng/card'; +import { InputText } from 'primeng/inputtext'; +import { Textarea } from 'primeng/textarea'; + +import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { ProjectFormControls } from '@shared/entities/create-project-form-controls.enum'; + +@Component({ + selector: 'osf-settings-project-form-card', + imports: [Button, Card, FormsModule, InputText, Textarea, TranslatePipe, ReactiveFormsModule], + templateUrl: './settings-project-form-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsProjectFormCardComponent { + formGroup = input.required(); + submitForm = output(); + resetForm = output(); + + protected readonly ProjectFormControls = ProjectFormControls; +} diff --git a/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.html b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.html new file mode 100644 index 000000000..f9c2be259 --- /dev/null +++ b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.html @@ -0,0 +1,11 @@ + +

    {{ 'myProjects.createProject.storageLocation' | translate }}

    + +
    +

    {{ 'myProjects.createProject.storageLocation' | translate }}:

    + +

    {{ location() }}

    +
    + +

    {{ locationText() }}

    +
    diff --git a/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.spec.ts b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.spec.ts new file mode 100644 index 000000000..d48079cdc --- /dev/null +++ b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsStorageLocationCardComponent } from './settings-storage-location-card.component'; + +describe('SettingsStorageLocationCardComponent', () => { + let component: SettingsStorageLocationCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsStorageLocationCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsStorageLocationCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.ts b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.ts new file mode 100644 index 000000000..0874a84ec --- /dev/null +++ b/src/app/features/project/settings/components/settings-storage-location-card/settings-storage-location-card.component.ts @@ -0,0 +1,17 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Card } from 'primeng/card'; + +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; + +@Component({ + selector: 'osf-settings-storage-location-card', + imports: [Card, TranslatePipe], + templateUrl: './settings-storage-location-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsStorageLocationCardComponent { + location = input.required(); + locationText = input.required(); +} diff --git a/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.html b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.html new file mode 100644 index 000000000..8c572cfe3 --- /dev/null +++ b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.html @@ -0,0 +1,7 @@ + +

    {{ 'myProjects.settings.viewOnlyLinks' | translate }}

    + +

    {{ 'myProjects.settings.viewOnlySubtitle' | translate }}

    + + +
    diff --git a/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.spec.ts b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.spec.ts new file mode 100644 index 000000000..362aed8e5 --- /dev/null +++ b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsViewOnlyLinksCardComponent } from './settings-view-only-links-card.component'; + +describe('SettingsViewOnlyLinksCardComponent', () => { + let component: SettingsViewOnlyLinksCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsViewOnlyLinksCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsViewOnlyLinksCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.ts b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.ts new file mode 100644 index 000000000..720777bd4 --- /dev/null +++ b/src/app/features/project/settings/components/settings-view-only-links-card/settings-view-only-links-card.component.ts @@ -0,0 +1,19 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Card } from 'primeng/card'; + +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; + +import { LinkTableModel } from '@osf/features/project/settings/models'; +import { ViewOnlyTableComponent } from '@shared/components'; + +@Component({ + selector: 'osf-settings-view-only-links-card', + imports: [Card, TranslatePipe, ViewOnlyTableComponent], + templateUrl: './settings-view-only-links-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsViewOnlyLinksCardComponent { + tableData = input.required(); +} diff --git a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html new file mode 100644 index 000000000..e9717272a --- /dev/null +++ b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html @@ -0,0 +1,28 @@ + +

    {{ 'myProjects.settings.wiki' | translate }}

    + +
    + + + +
    + +

    {{ 'myProjects.settings.wikiConfigureTitle' | translate }}

    + +

    {{ 'myProjects.settings.wikiConfigureText' | translate }}

    + + +
    + + Sub text +
    +
    +
    diff --git a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.spec.ts b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.spec.ts new file mode 100644 index 000000000..f71d62166 --- /dev/null +++ b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsWikiCardComponent } from './settings-wiki-card.component'; + +describe('SettingsWikiCardComponent', () => { + let component: SettingsWikiCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsWikiCardComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsWikiCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts new file mode 100644 index 000000000..f9baae456 --- /dev/null +++ b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts @@ -0,0 +1,24 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Card } from 'primeng/card'; +import { Checkbox } from 'primeng/checkbox'; + +import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; +import { FormControl } from '@angular/forms'; + +import { ProjectDetailSettingAccordionComponent } from '@osf/features/project/settings/components'; +import { RightControl } from '@osf/features/project/settings/models/right-control.model'; + +@Component({ + selector: 'osf-settings-wiki-card', + imports: [Card, Checkbox, TranslatePipe, ProjectDetailSettingAccordionComponent], + templateUrl: './settings-wiki-card.component.html', + styleUrl: '../../settings.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsWikiCardComponent { + formControl = input.required(); + rightControls = input.required(); + accessOptions = input.required<{ label: string; value: string }[]>(); + accessChange = output(); +} diff --git a/src/app/features/project/settings/mock-data.ts b/src/app/features/project/settings/mock-data.ts new file mode 100644 index 000000000..8b3ce49d5 --- /dev/null +++ b/src/app/features/project/settings/mock-data.ts @@ -0,0 +1,90 @@ +export const mockSettingsData = { + tableData: [ + { + linkName: 'name', + sharedComponents: 'Project name', + createdDate: new Date(), + createdBy: 'Igor', + anonymous: false, + link: 'www.facebook.com', + }, + { + linkName: 'name', + sharedComponents: 'Project name', + createdDate: new Date(), + createdBy: 'Igor', + anonymous: false, + link: 'www.facebook.com', + }, + { + linkName: 'name', + sharedComponents: 'Project name', + createdDate: new Date(), + createdBy: 'Igor', + anonymous: false, + link: 'www.facebook.com', + }, + { + linkName: 'name', + sharedComponents: 'Project name', + createdDate: new Date(), + createdBy: 'Igor', + anonymous: false, + link: 'www.facebook.com', + }, + ], + access: 'write', + accessOptions: [ + { label: 'Contributors (with write access)', value: 'write' }, + { label: 'Anyone with link', value: 'public' }, + ], + commentSetting: 'instantly', + fileSetting: 'instantly', + dropdownOptions: [ + { label: 'Instantly', value: 'instantly' }, + { label: 'Daily', value: 'daily' }, + { label: 'Never', value: 'never' }, + ], + affiliations: [ + { + name: 'Center for Open Science', + canDelete: true, + }, + ], + rightControls: { + wiki: [ + { + type: 'dropdown', + label: 'Who can edit:', + value: 'write', + options: [ + { label: 'Contributors (with write access)', value: 'write' }, + { label: 'Anyone with link', value: 'public' }, + ], + onChange: (value: string) => console.log('Access changed to', value), + }, + ], + notifications: [ + { + type: 'dropdown', + label: 'Comments added:', + value: 'instantly', + options: [ + { label: 'Instantly', value: 'instantly' }, + { label: 'Daily', value: 'daily' }, + { label: 'Never', value: 'never' }, + ], + }, + { + type: 'dropdown', + label: 'Files updated:', + value: 'instantly', + options: [ + { label: 'Instantly', value: 'instantly' }, + { label: 'Daily', value: 'daily' }, + { label: 'Never', value: 'never' }, + ], + }, + ], + }, +}; diff --git a/src/app/features/project/settings/models/right-control.model.ts b/src/app/features/project/settings/models/right-control.model.ts new file mode 100644 index 000000000..ab03e6dba --- /dev/null +++ b/src/app/features/project/settings/models/right-control.model.ts @@ -0,0 +1,13 @@ +export type RightControl = + | { + type: 'dropdown'; + label?: string; + value: string; + options: { label: string; value: string }[]; + onChange?: (value: string) => void; + } + | { + type: 'text'; + label?: string; + value: string; + }; diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index dada4425b..b4da870a7 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -2,178 +2,61 @@
    - - -

    {{ 'myProjects.settings.project' | translate }}

    - -
    - -
    - - -
    - - -
    - - -
    - -
    - - -
    - -
    - -
    -
    -
    - - -

    {{ 'myProjects.createProject.storageLocation' | translate }}

    - -
    -

    {{ 'myProjects.createProject.storageLocation' | translate }}:

    - -

    United States

    -
    - -

    Storage location cannot be changed after project is created.

    -
    - - -

    {{ 'myProjects.settings.viewOnlyLinks' | translate }}

    - -

    {{ 'myProjects.settings.viewOnlySubtitle' | translate }}

    - -
    - -
    - -
    - - -

    {{ 'myProjects.settings.accessRequests' | translate }}

    + + -
    - -

    - {{ 'myProjects.settings.accessRequestsText' | translate }} -

    -
    -
    - - -

    {{ 'myProjects.settings.wiki' | translate }}

    - -
    - - -

    - {{ 'myProjects.settings.wikiText' | translate }} -

    -
    + -

    {{ 'myProjects.settings.wikiConfigureTitle' | translate }}

    - -

    {{ 'myProjects.settings.wikiConfigureText' | translate }}

    - - -
    - - Sub text -
    -
    -
    + - -

    {{ 'myProjects.settings.commenting' | translate }}

    + -
    -
    - -

    {{ 'myProjects.settings.contributorsCanPost' | translate }}

    -
    + -
    - -

    {{ 'myProjects.settings.osfUserCanPost' | translate }}

    -
    -
    -
    +

    {{ 'myProjects.settings.emailNotifications' | translate }}

    {{ 'myProjects.settings.emailNotificationsText' | translate }}

    -
    Sub text
    -
    +

    {{ 'myProjects.settings.redirectLink' | translate }}

    - -

    + +

    +
    @@ -182,14 +65,32 @@

    {{ 'myProjects.settings.projectAffiliation' | translate

    {{ 'myProjects.settings.projectsCanBeAffiliated' | translate }}

    -
      -
    • {{ 'myProjects.settings.institutionalLogos' | translate }}
    • -
    • {{ 'myProjects.settings.publicProjectsToBeDiscoverable' | translate }}
    • -
    • {{ 'myProjects.settings.singleSignInToTHeOSF' | translate }}
    • -
    • +
        +
      1. {{ 'myProjects.settings.institutionalLogos' | translate }}
      2. +
      3. {{ 'myProjects.settings.publicProjectsToBeDiscoverable' | translate }}
      4. +
      5. {{ 'myProjects.settings.singleSignInToTHeOSF' | translate }}
      6. +
      7. {{ 'myProjects.settings.faq' | translate }}
      8. -
    + + +
    + @for (affiliation of affiliations; track $index) { +
    +
    + cos-shield + +

    {{ affiliation.name }}

    +
    + + + + +
    + } +

    diff --git a/src/app/features/project/settings/settings.component.scss b/src/app/features/project/settings/settings.component.scss index 891d35c2c..065495b94 100644 --- a/src/app/features/project/settings/settings.component.scss +++ b/src/app/features/project/settings/settings.component.scss @@ -1,5 +1,5 @@ -@use "../../../../assets/styles/variables" as var; -@use "../../../../assets/styles/mixins" as mix; +@use "assets/styles/variables" as var; +@use "assets/styles/mixins" as mix; :host { @include mix.flex-column; @@ -8,4 +8,20 @@ .icon-space { padding: 0.7rem 1.1rem; + + @media (max-width: 575px) { + padding: 0.8rem 0.75rem; + } +} + +.input-label { + color: var.$dark-blue-1; + margin-bottom: 0; +} + +.delete-icon { + &:before { + color: var.$red-3; + cursor: pointer; + } } diff --git a/src/app/features/project/settings/settings.component.ts b/src/app/features/project/settings/settings.component.ts index d7071b9c7..7cb884087 100644 --- a/src/app/features/project/settings/settings.component.ts +++ b/src/app/features/project/settings/settings.component.ts @@ -3,20 +3,27 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { Card } from 'primeng/card'; import { Checkbox } from 'primeng/checkbox'; -import { InputText } from 'primeng/inputtext'; -import { RadioButton } from 'primeng/radiobutton'; import { TabPanels } from 'primeng/tabs'; -import { Textarea } from 'primeng/textarea'; +import { NgOptimizedImage } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { RouterLink } from '@angular/router'; -import { AccordionTableComponent } from '@osf/features/project/settings/components'; +import { + ProjectDetailSettingAccordionComponent, + SettingsAccessRequestsCardComponent, + SettingsCommentingCardComponent, + SettingsProjectFormCardComponent, + SettingsStorageLocationCardComponent, + SettingsViewOnlyLinksCardComponent, + SettingsWikiCardComponent, +} from '@osf/features/project/settings/components'; +import { mockSettingsData } from '@osf/features/project/settings/mock-data'; import { LinkTableModel } from '@osf/features/project/settings/models'; +import { RightControl } from '@osf/features/project/settings/models/right-control.model'; import { ShareIndexingEnum } from '@osf/features/settings/account-settings/components/share-indexing/enums/share-indexing.enum'; -import { ViewOnlyTableComponent } from '@osf/shared'; import { SubHeaderComponent } from '@shared/components/sub-header/sub-header.component'; import { ProjectForm } from '@shared/entities/create-project-form.interface'; import { ProjectFormControls } from '@shared/entities/create-project-form-controls.enum'; @@ -29,16 +36,19 @@ import { IS_WEB } from '@shared/utils/breakpoints.tokens'; SubHeaderComponent, TabPanels, FormsModule, - InputText, ReactiveFormsModule, - Textarea, Card, Button, - ViewOnlyTableComponent, Checkbox, - AccordionTableComponent, - RadioButton, + ProjectDetailSettingAccordionComponent, RouterLink, + NgOptimizedImage, + SettingsProjectFormCardComponent, + SettingsStorageLocationCardComponent, + SettingsViewOnlyLinksCardComponent, + SettingsAccessRequestsCardComponent, + SettingsWikiCardComponent, + SettingsCommentingCardComponent, ], templateUrl: './settings.component.html', styleUrl: './settings.component.scss', @@ -59,66 +69,50 @@ export class SettingsComponent { nonNullable: true, }), }); - accessRequest = new FormControl(false); - wiki = new FormControl(false); + accessRequest = new FormControl(false); + wiki = new FormControl(false); redirectLink = new FormControl(false); - tableData: LinkTableModel[] = [ - { - linkName: 'name', - sharedComponents: 'Project name', - createdDate: new Date(), - createdBy: 'Igor', - anonymous: false, - link: 'www.facebook.com', - }, - { - linkName: 'name', - sharedComponents: 'Project name', - createdDate: new Date(), - createdBy: 'Igor', - anonymous: false, - link: 'www.facebook.com', - }, - { - linkName: 'name', - sharedComponents: 'Project name', - createdDate: new Date(), - createdBy: 'Igor', - anonymous: false, - link: 'www.facebook.com', - }, - { - linkName: 'name', - sharedComponents: 'Project name', - createdDate: new Date(), - createdBy: 'Igor', - anonymous: false, - link: 'www.facebook.com', - }, - ]; - access = 'write'; - accessOptions = [ - { label: 'Contributors (with write access)', value: 'write' }, - { label: 'Anyone with link', value: 'public' }, - ]; - commentSetting = 'instantly'; - fileSetting = 'instantly'; + tableData: LinkTableModel[]; + access: string; + accessOptions: { label: string; value: string }[]; + commentSetting: string; + fileSetting: string; + dropdownOptions: { label: string; value: string }[]; + affiliations: { name: string; canDelete: boolean }[]; + rightControls: { wiki: RightControl[]; notifications: RightControl[] }; + + constructor() { + [ + this.tableData, + this.access, + this.accessOptions, + this.commentSetting, + this.fileSetting, + this.dropdownOptions, + this.affiliations, + this.rightControls, + ] = [ + mockSettingsData.tableData, + mockSettingsData.access, + mockSettingsData.accessOptions, + mockSettingsData.commentSetting, + mockSettingsData.fileSetting, + mockSettingsData.dropdownOptions, + mockSettingsData.affiliations, + mockSettingsData.rightControls as { wiki: RightControl[]; notifications: RightControl[] }, + ]; + } - dropdownOptions = [ - { label: 'Instantly', value: 'instantly' }, - { label: 'Daily', value: 'daily' }, - { label: 'Never', value: 'never' }, - ]; submitForm(): void { - // TODO: implement form submission + // [VY] TODO: Implement form submission } resetForm(): void { this.projectForm.reset(); } - onAccessChange(value: string): void { - console.log('Access changed to', value); + onAccessChange(event: string): void { + console.log(event); } } diff --git a/src/app/features/settings/addons/connect-addon/connect-addon.component.html b/src/app/features/settings/addons/connect-addon/connect-addon.component.html index 667b70693..100e075f2 100644 --- a/src/app/features/settings/addons/connect-addon/connect-addon.component.html +++ b/src/app/features/settings/addons/connect-addon/connect-addon.component.html @@ -25,10 +25,10 @@

    {{ term.function }} {{ term.status }} diff --git a/src/app/shared/components/index.ts b/src/app/shared/components/index.ts index fbcdf31e6..5a1785edf 100644 --- a/src/app/shared/components/index.ts +++ b/src/app/shared/components/index.ts @@ -1,4 +1,3 @@ -export * from './view-only-table/view-only-table.component'; export { AddProjectFormComponent } from './add-project-form/add-project-form.component'; export { BarChartComponent } from './bar-chart/bar-chart.component'; export { LineChartComponent } from './line-chart/line-chart.component'; @@ -8,3 +7,5 @@ export { PasswordInputHintComponent } from './password-input-hint/password-input export { PieChartComponent } from './pie-chart/pie-chart.component'; export { SearchInputComponent } from './search-input/search-input.component'; export { SubHeaderComponent } from './sub-header/sub-header.component'; +export * from './view-only-table/view-only-table.component'; +export * from './view-only-table/view-only-table.component'; diff --git a/src/app/shared/components/view-only-table/view-only-table.component.html b/src/app/shared/components/view-only-table/view-only-table.component.html index b1dfb6f44..158013e09 100644 --- a/src/app/shared/components/view-only-table/view-only-table.component.html +++ b/src/app/shared/components/view-only-table/view-only-table.component.html @@ -30,9 +30,21 @@ {{ item.linkName }}
    - + - +
    diff --git a/src/app/shared/components/view-only-table/view-only-table.component.scss b/src/app/shared/components/view-only-table/view-only-table.component.scss index eb73a2095..c0f57541a 100644 --- a/src/app/shared/components/view-only-table/view-only-table.component.scss +++ b/src/app/shared/components/view-only-table/view-only-table.component.scss @@ -2,7 +2,7 @@ .delete-icon { &:before { - color: var.$red-1; + color: var.$red-3; cursor: pointer; } } @@ -13,4 +13,4 @@ transform: translateY(-50%); width: 1.5rem; cursor: pointer; -} \ No newline at end of file +} diff --git a/src/app/shared/components/view-only-table/view-only-table.component.ts b/src/app/shared/components/view-only-table/view-only-table.component.ts index b2e8101ee..a29c6075a 100644 --- a/src/app/shared/components/view-only-table/view-only-table.component.ts +++ b/src/app/shared/components/view-only-table/view-only-table.component.ts @@ -9,7 +9,7 @@ import { DatePipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; -import { LinkTableModel } from '@osf/features/project/settings'; +import { LinkTableModel } from '@osf/features/project/settings/models'; @Component({ selector: 'osf-view-only-table', @@ -22,6 +22,7 @@ export class ViewOnlyTableComponent { tableData = input.required(); readonly #clipboard = inject(Clipboard); + copy(link: string): void { this.#clipboard.copy(link); } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index fb37ff4fe..3214a66c2 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -252,8 +252,7 @@ "institutionalLogos": "institutional logos to be displayed on public projects", "publicProjectsToBeDiscoverable": "public projects to be discoverable on specific institutional landing pages", "singleSignInToTHeOSF": "single sign-in to the OSF with institutional credentials", - "faq": "FAQ", - "": "" + "faq": "FAQ" } }, "project": { diff --git "a/src/assets/images/\321\201os-shield.svg" b/src/assets/images/cos-shield.svg similarity index 100% rename from "src/assets/images/\321\201os-shield.svg" rename to src/assets/images/cos-shield.svg diff --git a/src/assets/styles/overrides/button.scss b/src/assets/styles/overrides/button.scss index 30a27144f..1271cf45b 100644 --- a/src/assets/styles/overrides/button.scss +++ b/src/assets/styles/overrides/button.scss @@ -235,12 +235,16 @@ } } -.bg-primary-blue-second { +.bg-primary-blue-second.p-button { background-color: var.$pr-blue-2; } .button-shadow-none { .p-button { box-shadow: none; + + @media (max-width: 575px) { + padding: 0; + } } } diff --git a/src/assets/styles/overrides/dropdown.scss b/src/assets/styles/overrides/dropdown.scss index 28b14595c..dbbe388a4 100644 --- a/src/assets/styles/overrides/dropdown.scss +++ b/src/assets/styles/overrides/dropdown.scss @@ -23,9 +23,13 @@ &.accordion-dropdown { border: none; box-shadow: none; - min-width: 170px; + min-width: 120px; width: max-content; max-width: 300px; font-size: 1rem; + + @media (max-width: 575px) { + max-width: 240px; + } } }