diff --git a/app/models/registration.ts b/app/models/registration.ts index 9397f6acbb2..81d73574fdb 100644 --- a/app/models/registration.ts +++ b/app/models/registration.ts @@ -27,13 +27,28 @@ export enum RegistrationReviewStates { PendingWithdraw = 'pending_withdraw', } -type NonActionableStates = RegistrationReviewStates.Initial +export type NonActionableRegistrationStates = RegistrationReviewStates.Initial | RegistrationReviewStates.Withdrawn | RegistrationReviewStates.Rejected; +export type ActionableRevisionStates = RevisionReviewStates.RevisionPendingModeration; + export type ReviewsStateToDecisionMap = - Exclude | RevisionReviewStates.RevisionPendingModeration; + Exclude | RevisionReviewStates.RevisionPendingModeration; export const reviewsStateToDecisionMap: { - [index in ReviewsStateToDecisionMap]: Array + [index in ReviewsStateToDecisionMap]: Array< + Exclude< + ReviewActionTrigger, + ReviewActionTrigger.Submit + | ReviewActionTrigger.RequestWithdrawal + | ReviewActionTrigger.RequestEmbargoTermination> + | + Exclude< + SchemaResponseActionTrigger, + SchemaResponseActionTrigger.SubmitRevision + | SchemaResponseActionTrigger.AdminApproveRevision + | SchemaResponseActionTrigger.AdminRejectRevision + > + > } = { [RegistrationReviewStates.Accepted]: [ReviewActionTrigger.ForceWithdraw], [RegistrationReviewStates.Embargo]: [ReviewActionTrigger.ForceWithdraw], @@ -86,10 +101,10 @@ export default class RegistrationModel extends NodeModel.extend(Validations) { @attr('fixstring') articleDoi!: string | null; @attr('object') registeredMeta!: RegistrationMetadata; @attr('registration-responses') registrationResponses!: RegistrationResponse; - @attr('fixstring') reviewsState?: RegistrationReviewStates; + @attr('fixstring') reviewsState!: RegistrationReviewStates; @attr('fixstring') iaUrl?: string; @attr('array') providerSpecificMetadata!: ProviderMetadata[]; - @attr('fixstring') revisionState?: RevisionReviewStates; + @attr('fixstring') revisionState!: RevisionReviewStates; // Write-only attributes @attr('array') includedNodeIds?: string[]; diff --git a/app/models/schema-response.ts b/app/models/schema-response.ts index 7ba857d39bf..1fe4436697d 100644 --- a/app/models/schema-response.ts +++ b/app/models/schema-response.ts @@ -8,8 +8,8 @@ import { RegistrationResponse } from 'ember-osf-web/packages/registration-schema import OsfModel from './osf-model'; export enum RevisionReviewStates { + Unapproved = 'unapproved', RevisionInProgress = 'in_progress', - RevisionPendingAdminApproval = 'pending_admin_approval', RevisionPendingModeration = 'pending_moderation', Approved = 'approved', } diff --git a/lib/osf-components/addon/components/registries/registration-list/manager/component.ts b/lib/osf-components/addon/components/registries/registration-list/manager/component.ts index d5739376b18..8db5372635d 100644 --- a/lib/osf-components/addon/components/registries/registration-list/manager/component.ts +++ b/lib/osf-components/addon/components/registries/registration-list/manager/component.ts @@ -14,14 +14,14 @@ export default class RegistrationListManager extends Component { @computed('state', 'sort') get filterParams() { - const filter: Record = { review_state: this.state, revision_state: undefined }; + const filter: Record = { reviews_state: this.state, revision_state: undefined }; if (this.state === RegistrationReviewStates.Embargo) { - filter.review_state = + filter.reviews_state = [RegistrationReviewStates.Embargo, RegistrationReviewStates.PendingEmbargoTermination].toString(); } if (this.state === RevisionReviewStates.RevisionPendingModeration) { filter.revision_state = [RevisionReviewStates.RevisionPendingModeration].toString(); - filter.review_state = undefined; + filter.reviews_state = undefined; } const query: Record> = { filter, diff --git a/lib/registries/addon/components/make-decision-dropdown/component.ts b/lib/registries/addon/components/make-decision-dropdown/component.ts index fac71c55db8..7b7a52cf5ea 100644 --- a/lib/registries/addon/components/make-decision-dropdown/component.ts +++ b/lib/registries/addon/components/make-decision-dropdown/component.ts @@ -13,8 +13,9 @@ import RouterService from '@ember/routing/router-service'; import RegistrationModel, { RegistrationReviewStates, - ReviewsStateToDecisionMap, reviewsStateToDecisionMap, + NonActionableRegistrationStates, + ActionableRevisionStates, } from 'ember-osf-web/models/registration'; import { ReviewActionTrigger } from 'ember-osf-web/models/review-action'; import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception'; @@ -68,7 +69,9 @@ export default class MakeDecisionDropdown extends Component { } get revisionIsPending() { - return this.args.registration.revisionState === RevisionReviewStates.RevisionPendingModeration; + return (this.args.registration.reviewsState === RegistrationReviewStates.Accepted + || this.args.registration.reviewsState === RegistrationReviewStates.Embargo) + && this.args.registration.revisionState === RevisionReviewStates.RevisionPendingModeration; } get commentTextArea() { @@ -105,9 +108,10 @@ export default class MakeDecisionDropdown extends Component { } get moderatorActions() { - const { reviewsState } = this.args.registration; - const { revisionState } = this.args.registration; - let actions: ReviewsStateToDecisionMap[] = reviewsState ? reviewsStateToDecisionMap[reviewsState] : []; + const reviewsState = + this.args.registration.reviewsState as Exclude; + const revisionState = this.args.registration.revisionState as ActionableRevisionStates; + let actions = reviewsState ? reviewsStateToDecisionMap[reviewsState] : []; if (this.revisionIsPending) { actions = reviewsStateToDecisionMap[revisionState]; } diff --git a/lib/registries/addon/edit-revision/revision-manager.ts b/lib/registries/addon/edit-revision/revision-manager.ts index 63b363d522a..a8176afa2de 100644 --- a/lib/registries/addon/edit-revision/revision-manager.ts +++ b/lib/registries/addon/edit-revision/revision-manager.ts @@ -91,7 +91,7 @@ export default class RevisionManager { @computed('revision.reviewsState') get isPendingAdminApproval() { - return this.revision.reviewsState === RevisionReviewStates.RevisionPendingAdminApproval; + return this.revision.reviewsState === RevisionReviewStates.Unapproved; } @computed('revision.reviewsState') diff --git a/mirage/factories/schema-response-action.ts b/mirage/factories/schema-response-action.ts index e208925ea7b..30d48dcc89f 100644 --- a/mirage/factories/schema-response-action.ts +++ b/mirage/factories/schema-response-action.ts @@ -5,7 +5,7 @@ import SchemaResponseActionModel, { SchemaResponseActionTrigger } from 'ember-os export default Factory.extend({ fromState: RevisionReviewStates.RevisionInProgress, - toState: RevisionReviewStates.RevisionPendingAdminApproval, + toState: RevisionReviewStates.Unapproved, actionTrigger: faker.random.objectElement(Object.values(SchemaResponseActionTrigger)), comment() { diff --git a/mirage/scenarios/registrations.ts b/mirage/scenarios/registrations.ts index a095c45116b..78ad903596d 100644 --- a/mirage/scenarios/registrations.ts +++ b/mirage/scenarios/registrations.ts @@ -260,7 +260,7 @@ export function registrationScenario( server.create('schema-response', { id: 'copyEditRPA', - reviewsState: RevisionReviewStates.RevisionPendingAdminApproval, + reviewsState: RevisionReviewStates.Unapproved, revisionJustification: 'Copy Edit', revisionResponses: { q1: 'Good Morning', diff --git a/mirage/views/registration.ts b/mirage/views/registration.ts index c877e828a58..95b582ec5b6 100644 --- a/mirage/views/registration.ts +++ b/mirage/views/registration.ts @@ -92,8 +92,8 @@ export function createRegistration(this: HandlerContext, schema: Schema) { export function getProviderRegistrations(this: HandlerContext, schema: Schema, request: Request) { const { parentID: providerId } = request.params; - const field = request.queryParams['filter[review_state]'] ? 'reviewsState' : 'revisionState'; - const filterParams = request.queryParams['filter[review_state]'] || request.queryParams['filter[revision_state]']; + const field = request.queryParams['filter[reviews_state]'] ? 'reviewsState' : 'revisionState'; + const filterParams = request.queryParams['filter[reviews_state]'] || request.queryParams['filter[revision_state]']; const params = filterParams.split(','); const { pageSize } = request.queryParams; const provider = schema.registrationProviders.find(providerId); diff --git a/mirage/views/schema-response-action.ts b/mirage/views/schema-response-action.ts index aab8f49992b..852896cbc5a 100644 --- a/mirage/views/schema-response-action.ts +++ b/mirage/views/schema-response-action.ts @@ -22,7 +22,7 @@ export function createSchemaResponseAction(this: HandlerContext, schema: Schema, }); switch (trigger) { case SchemaResponseActionTrigger.SubmitRevision: - revision.reviewsState = RevisionReviewStates.RevisionPendingAdminApproval; + revision.reviewsState = RevisionReviewStates.Unapproved; revision.isPendingCurrentUserApproval = true; break; case SchemaResponseActionTrigger.AdminRejectRevision: diff --git a/tests/engines/registries/acceptance/edit-revision/revision-test.ts b/tests/engines/registries/acceptance/edit-revision/revision-test.ts index 936fa5445cf..54e1038e851 100644 --- a/tests/engines/registries/acceptance/edit-revision/revision-test.ts +++ b/tests/engines/registries/acceptance/edit-revision/revision-test.ts @@ -463,7 +463,7 @@ module('Registries | Acceptance | registries revision', hooks => { const revision = server.create( 'schema-response', { - reviewsState: RevisionReviewStates.RevisionPendingAdminApproval, + reviewsState: RevisionReviewStates.Unapproved, initiatedBy, revisionResponses: { 'page-one_short-text': 'the lorax',