diff --git a/app/preprints/-components/preprint-institutions/institution-manager/component-test.ts b/app/preprints/-components/preprint-institutions/institution-manager/component-test.ts index 2a0d0e49db0..2517b01f833 100644 --- a/app/preprints/-components/preprint-institutions/institution-manager/component-test.ts +++ b/app/preprints/-components/preprint-institutions/institution-manager/component-test.ts @@ -52,11 +52,13 @@ module('Integration | Preprint | Component | Institution Manager', hooks => { singular: 'Test Preprint Word', }, }, - isEditFlow: true, preprint, resetAffiliatedInstitutions: (): void => { this.set('affiliatedInstitutions', []); }, + isElementDisabled(): boolean { + return !(this.preprint.currentUserPermissions).includes(Permission.Admin); + }, updateAffiliatedInstitution: (affiliatedIinstitution: InstitutionModel): void => { const affiliatedInstitutions = this.get('affiliatedInstitutions'); if (managerMock.isInstitutionAffiliated(affiliatedIinstitution.id)) { @@ -128,7 +130,6 @@ module('Integration | Preprint | Component | Institution Manager', hooks => { async function(assert) { // When the component is rendered const managerMock = this.get('managerMock'); - managerMock.isEditFlow = true; const affiliatedInstitutions = [] as any[]; managerMock.preprint.affiliatedInstitutions.map((institution: InstitutionModel) => { @@ -231,7 +232,6 @@ module('Integration | Preprint | Component | Institution Manager', hooks => { async function(assert) { const managerMock = this.get('managerMock'); managerMock.preprint.currentUserPermissions = [Permission.Write, Permission.Read]; - managerMock.isEditFlow = false; this.set('managerMock', managerMock); // When the component is rendered diff --git a/app/preprints/-components/preprint-institutions/institution-manager/component.ts b/app/preprints/-components/preprint-institutions/institution-manager/component.ts index 49c8a7c8ae6..985dd0f1355 100644 --- a/app/preprints/-components/preprint-institutions/institution-manager/component.ts +++ b/app/preprints/-components/preprint-institutions/institution-manager/component.ts @@ -13,7 +13,6 @@ import Store from '@ember-data/store'; import CurrentUser from 'ember-osf-web/services/current-user'; import InstitutionModel from 'ember-osf-web/models/institution'; import PreprintStateMachine from 'ember-osf-web/preprints/-components/submit/preprint-state-machine/component'; -import { Permission } from 'ember-osf-web/models/osf-model'; interface PreprintInstitutionModel extends InstitutionModel { @@ -95,7 +94,7 @@ export default class InstitutionsManagerComponent extends Component diff --git a/app/preprints/-components/submit/author-assertions/component.ts b/app/preprints/-components/submit/author-assertions/component.ts index 95898a9739c..e22655246bb 100644 --- a/app/preprints/-components/submit/author-assertions/component.ts +++ b/app/preprints/-components/submit/author-assertions/component.ts @@ -132,7 +132,6 @@ const AuthorAssertionsFormValidation: ValidationObject = { export default class PublicData extends Component{ @service intl!: Intl; @tracked isConflictOfInterestStatementDisabled = true; - @tracked isPublicDataStatementDisabled = true; authorAssertionFormChangeset = buildChangeset( this.args.manager.preprint, AuthorAssertionsFormValidation, @@ -169,7 +168,7 @@ export default class PublicData extends Component{ this.intl.t('preprints.submit.step-assertions.conflict-of-interest-none')); this.isConflictOfInterestStatementDisabled = true; } else { - this.isConflictOfInterestStatementDisabled = false; + this.isConflictOfInterestStatementDisabled = false || !this.args.manager.isAdmin(); } } @@ -177,7 +176,7 @@ export default class PublicData extends Component{ public updateCoi(): void { if (this.authorAssertionFormChangeset.get('hasCoi')) { this.authorAssertionFormChangeset.set('conflictOfInterestStatement', null); - this.isConflictOfInterestStatementDisabled = false; + this.isConflictOfInterestStatementDisabled = false || !this.args.manager.isAdmin(); } else { this.authorAssertionFormChangeset.set('conflictOfInterestStatement', this.intl.t('preprints.submit.step-assertions.conflict-of-interest-none')); @@ -198,4 +197,8 @@ export default class PublicData extends Component{ this.authorAssertionFormChangeset.execute(); this.args.manager.validateAuthorAssertions(true); } + + public get isElementDisabled(): boolean { + return this.args.manager.isElementDisabled(); + } } diff --git a/app/preprints/-components/submit/author-assertions/link-widget/component.ts b/app/preprints/-components/submit/author-assertions/link-widget/component.ts index 72b751e762c..1a6c3e78e73 100644 --- a/app/preprints/-components/submit/author-assertions/link-widget/component.ts +++ b/app/preprints/-components/submit/author-assertions/link-widget/component.ts @@ -10,6 +10,7 @@ import { tracked } from '@glimmer/tracking'; */ interface LinkWidgetArgs { update: (_: string[]) => {}; + disabled: boolean; links: string[]; } diff --git a/app/preprints/-components/submit/author-assertions/link-widget/link/component.ts b/app/preprints/-components/submit/author-assertions/link-widget/link/component.ts index 962bd531dad..c317cd45b59 100644 --- a/app/preprints/-components/submit/author-assertions/link-widget/link/component.ts +++ b/app/preprints/-components/submit/author-assertions/link-widget/link/component.ts @@ -15,6 +15,7 @@ import { tracked } from '@glimmer/tracking'; interface LinkArgs { remove: (__:number) => {}; update: (_: string, __:number) => {}; + disabled: boolean; value: string; placeholder: string; index: number; diff --git a/app/preprints/-components/submit/author-assertions/link-widget/link/template.hbs b/app/preprints/-components/submit/author-assertions/link-widget/link/template.hbs index 41d1869d720..4dae1423b0c 100644 --- a/app/preprints/-components/submit/author-assertions/link-widget/link/template.hbs +++ b/app/preprints/-components/submit/author-assertions/link-widget/link/template.hbs @@ -12,6 +12,7 @@
- + {{#unless @disabled}} + + {{/unless}}
{{/if}} diff --git a/app/preprints/-components/submit/author-assertions/link-widget/template.hbs b/app/preprints/-components/submit/author-assertions/link-widget/template.hbs index 619042b9dba..b2bbe9fc33d 100644 --- a/app/preprints/-components/submit/author-assertions/link-widget/template.hbs +++ b/app/preprints/-components/submit/author-assertions/link-widget/template.hbs @@ -7,18 +7,21 @@ @value={{link}} @index={{index}} @placeholder={{@placeholder}} + @disabled={{@disabled}} /> {{/each}} - - \ No newline at end of file + {{#unless @disabled}} + + {{/unless}} + diff --git a/app/preprints/-components/submit/author-assertions/public-data/component.ts b/app/preprints/-components/submit/author-assertions/public-data/component.ts index 93b797b8cba..2326082b922 100644 --- a/app/preprints/-components/submit/author-assertions/public-data/component.ts +++ b/app/preprints/-components/submit/author-assertions/public-data/component.ts @@ -16,6 +16,7 @@ interface PublicDataArgs { manager: PreprintStateMachine; changeSet: BufferedChangeset; preprintWord: string; + disabled: boolean; validate: () => {}; } @@ -64,11 +65,11 @@ export default class PublicData extends Component{ public updatePublicDataOptions(): void { if (this.args.changeSet.get('hasDataLinks') === PreprintDataLinksEnum.AVAILABLE) { this.args.changeSet.set('whyNoData', null); - this.isPublicDataWhyNoStatementDisabled = false; + this.isPublicDataWhyNoStatementDisabled = false || !this.args.manager.isAdmin(); } else if (this.args.changeSet.get('hasDataLinks') === PreprintDataLinksEnum.NO) { this.args.changeSet.set('dataLinks', []); this.args.changeSet.set('whyNoData', null); - this.isPublicDataWhyNoStatementDisabled = false; + this.isPublicDataWhyNoStatementDisabled = false || !this.args.manager.isAdmin(); this.placeholder = this.intl.t('preprints.submit.step-assertions.public-data-no-placeholder'); } else { this.args.changeSet.set('dataLinks', []); diff --git a/app/preprints/-components/submit/author-assertions/public-data/template.hbs b/app/preprints/-components/submit/author-assertions/public-data/template.hbs index 5ed8f34ecf2..b46f61e6f9b 100644 --- a/app/preprints/-components/submit/author-assertions/public-data/template.hbs +++ b/app/preprints/-components/submit/author-assertions/public-data/template.hbs @@ -20,6 +20,7 @@ @valuePath={{'hasDataLinks'}} @class='radio-group {{if (is-mobile) 'mobile'}}' @isRequired={{true}} + @disabled={{@disabled}} @options={{this.publicDataOptions}} @onchange={{this.updatePublicDataOptions}} as |radioGroup| @@ -33,6 +34,7 @@ diff --git a/app/preprints/-components/submit/author-assertions/public-preregistration/component.ts b/app/preprints/-components/submit/author-assertions/public-preregistration/component.ts index f887121c0f6..0176ab93ede 100644 --- a/app/preprints/-components/submit/author-assertions/public-preregistration/component.ts +++ b/app/preprints/-components/submit/author-assertions/public-preregistration/component.ts @@ -16,6 +16,7 @@ interface PublicPreregistrationArgs { manager: PreprintStateMachine; changeSet: BufferedChangeset; preprintWord: string; + disabled: boolean; validate: () => {}; } @@ -96,11 +97,11 @@ export default class PublicPreregistration extends Component {{#each this.publicPreregLinkInfoOptions as |infoOption|}} @@ -54,6 +56,7 @@
diff --git a/app/preprints/-components/submit/author-assertions/template.hbs b/app/preprints/-components/submit/author-assertions/template.hbs index 9a7799624b0..49200a5b681 100644 --- a/app/preprints/-components/submit/author-assertions/template.hbs +++ b/app/preprints/-components/submit/author-assertions/template.hbs @@ -29,6 +29,7 @@ @class='radio-group {{if (is-mobile) 'mobile'}}' @isRequired={{true}} @options={{this.coiOptions}} + @disabled={{this.isElementDisabled}} @onchange={{this.updateCoi}} as |radioGroup| > @@ -52,6 +53,7 @@ @changeSet={{this.authorAssertionFormChangeset}} @preprintWord={{@manager.provider.documentType.singular}} @validate={{this.validate}} + @disabled={{this.isElementDisabled}} @manager={{@manager}} />
@@ -61,6 +63,7 @@ @changeSet={{this.authorAssertionFormChangeset}} @preprintWord={{@manager.provider.documentType.singular}} @validate={{this.validate}} + @disabled={{this.isElementDisabled}} @manager={{@manager}} /> diff --git a/app/preprints/-components/submit/metadata/component.ts b/app/preprints/-components/submit/metadata/component.ts index 0a779eebff5..4fef7a60217 100644 --- a/app/preprints/-components/submit/metadata/component.ts +++ b/app/preprints/-components/submit/metadata/component.ts @@ -167,4 +167,8 @@ export default class Metadata extends Component{ this.metadataFormChangeset.execute(); this.args.manager.validateMetadata(true); } + + public get widgetMode(): string { + return this.args.manager.isAdmin() ? 'editable' : 'readonly'; + } } diff --git a/app/preprints/-components/submit/metadata/template.hbs b/app/preprints/-components/submit/metadata/template.hbs index e82d7369f8d..ab07104f80d 100644 --- a/app/preprints/-components/submit/metadata/template.hbs +++ b/app/preprints/-components/submit/metadata/template.hbs @@ -16,7 +16,7 @@ @preprint={{@manager.preprint}} @shouldShowAdd={{this.showAddContributorWidget}} @toggleAddContributorWidget={{this.toggleAddContributorWidget}} - @widgetMode={{'editable'}} + @widgetMode={{this.widgetMode}} @displayPermissionWarning={{this.displayPermissionWarning}} /> diff --git a/app/preprints/-components/submit/preprint-state-machine/component.ts b/app/preprints/-components/submit/preprint-state-machine/component.ts index df09b412e8c..4427d767678 100644 --- a/app/preprints/-components/submit/preprint-state-machine/component.ts +++ b/app/preprints/-components/submit/preprint-state-machine/component.ts @@ -100,7 +100,7 @@ export default class PreprintStateMachine extends Component{ } } - this.isWithdrawalButtonDisplayed = this.preprint.currentUserPermissions.includes(Permission.Admin) && + this.isWithdrawalButtonDisplayed = this.isAdmin() && (this.preprint.reviewsState === ReviewsState.ACCEPTED || this.preprint.reviewsState === ReviewsState.PENDING) && !isWithdrawalRejected; @@ -253,17 +253,20 @@ export default class PreprintStateMachine extends Component{ ) { await this.saveOnStep(); - try { - await this.preprint.updateM2MRelationship( - 'affiliatedInstitutions', - this.affiliatedInstitutions, - ); - await this.preprint.reload(); - } catch (e) { - const errorMessage = this.intl.t('preprints.submit.step-metadata.institutions.save-institutions-error'); - captureException(e, { errorMessage }); - this.toast.error(getApiErrorMessage(e), errorMessage); - throw e; + if (this.isAdmin()) { + try { + await this.preprint.updateM2MRelationship( + 'affiliatedInstitutions', + this.affiliatedInstitutions, + ); + await this.preprint.reload(); + } catch (e) { + // eslint-disable-next-line max-len + const errorMessage = this.intl.t('preprints.submit.step-metadata.institutions.save-institutions-error'); + captureException(e, { errorMessage }); + this.toast.error(getApiErrorMessage(e), errorMessage); + throw e; + } } if (this.displayAuthorAssertions) { @@ -657,4 +660,12 @@ export default class PreprintStateMachine extends Component{ public resetAffiliatedInstitutions(): void { this.affiliatedInstitutions.length = 0; } + + public isAdmin(): boolean { + return this.preprint.currentUserPermissions.includes(Permission.Admin); + } + + public isElementDisabled(): boolean { + return !this.isAdmin(); + } } diff --git a/app/preprints/-components/submit/preprint-state-machine/template.hbs b/app/preprints/-components/submit/preprint-state-machine/template.hbs index 0ec0dac3551..a52aef16584 100644 --- a/app/preprints/-components/submit/preprint-state-machine/template.hbs +++ b/app/preprints/-components/submit/preprint-state-machine/template.hbs @@ -41,4 +41,7 @@ updateAffiliatedInstitution=this.updateAffiliatedInstitution resetAffiliatedInstitutions=this.resetAffiliatedInstitutions + + isElementDisabled=this.isElementDisabled + isAdmin=this.isAdmin )}} \ No newline at end of file