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 @@
-
+
{{ 'meetings.landing.features.discover.title' | translate }}
{{ 'meetings.landing.features.discover.description' | translate }}
@@ -73,9 +76,7 @@ {{ 'meetings.landing.features.discover.title' | translate }}
-
+
{{ 'meetings.landing.features.share.title' | translate }}
{{ 'meetings.landing.features.share.description' | translate }}
@@ -83,9 +84,7 @@ {{ 'meetings.landing.features.share.title' | translate }}
-
+
{{ '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 }}
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 }}
+
+
+
+
+ {{ 'myProjects.settings.accessRequestsText' | 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.wikiText' | 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.title' | translate }}
-
-
-
-
-
-
-
- {{ 'myProjects.createProject.description.label' | 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 }}
-
-
+
+
{{ 'myProjects.settings.redirectLinkText' | 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 }}
-
+
+ {{ 'myProjects.settings.institutionalLogos' | translate }}
+ {{ 'myProjects.settings.publicProjectsToBeDiscoverable' | translate }}
+ {{ 'myProjects.settings.singleSignInToTHeOSF' | translate }}
+
{{ 'myProjects.settings.faq' | translate }}
-
+
+
+
+ @for (affiliation of affiliations; track $index) {
+
+
+
+
+
{{ 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;
+ }
}
}