@@ -3,6 +3,7 @@ import { buildValidations, validator } from 'ember-cp-validations';
33
44import DraftRegistrationModel from 'ember-osf-web/models/draft-registration' ;
55import ReviewActionModel , { ReviewActionTrigger } from 'ember-osf-web/models/review-action' ;
6+ import SchemaResponseModel , { RevisionReviewStates } from 'ember-osf-web/models/schema-response' ;
67import { RegistrationResponse } from 'ember-osf-web/packages/registration-schema' ;
78
89import CommentModel from './comment' ;
@@ -11,6 +12,7 @@ import InstitutionModel from './institution';
1112import NodeModel from './node' ;
1213import RegistrationProviderModel from './registration-provider' ;
1314import RegistrationSchemaModel , { RegistrationMetadata } from './registration-schema' ;
15+ import { SchemaResponseActionTrigger } from './schema-response-action' ;
1416import UserModel from './user' ;
1517
1618export enum RegistrationReviewStates {
@@ -25,11 +27,29 @@ export enum RegistrationReviewStates {
2527 PendingWithdraw = 'pending_withdraw' ,
2628}
2729
28- type NonActionableStates = RegistrationReviewStates . Initial
30+ export type NonActionableRegistrationStates = RegistrationReviewStates . Initial
2931 | RegistrationReviewStates . Withdrawn | RegistrationReviewStates . Rejected ;
3032
31- export type ReviewsStateToDecisionMap = Exclude < RegistrationReviewStates , NonActionableStates > ;
32- export const reviewsStateToDecisionMap : { [ index in ReviewsStateToDecisionMap ] : ReviewActionTrigger [ ] } = {
33+ export type ActionableRevisionStates = RevisionReviewStates . RevisionPendingModeration ;
34+
35+ export type ReviewsStateToDecisionMap =
36+ Exclude < RegistrationReviewStates , NonActionableRegistrationStates > | RevisionReviewStates . RevisionPendingModeration ;
37+ export const reviewsStateToDecisionMap : {
38+ [ index in ReviewsStateToDecisionMap ] : Array <
39+ Exclude <
40+ ReviewActionTrigger ,
41+ ReviewActionTrigger . Submit
42+ | ReviewActionTrigger . RequestWithdrawal
43+ | ReviewActionTrigger . RequestEmbargoTermination >
44+ |
45+ Exclude <
46+ SchemaResponseActionTrigger ,
47+ SchemaResponseActionTrigger . SubmitRevision
48+ | SchemaResponseActionTrigger . AdminApproveRevision
49+ | SchemaResponseActionTrigger . AdminRejectRevision
50+ >
51+ >
52+ } = {
3353 [ RegistrationReviewStates . Accepted ] : [ ReviewActionTrigger . ForceWithdraw ] ,
3454 [ RegistrationReviewStates . Embargo ] : [ ReviewActionTrigger . ForceWithdraw ] ,
3555 [ RegistrationReviewStates . Pending ] :
@@ -38,6 +58,8 @@ export const reviewsStateToDecisionMap: { [index in ReviewsStateToDecisionMap]:
3858 [ ReviewActionTrigger . AcceptWithdrawal , ReviewActionTrigger . RejectWithdrawal ] ,
3959 [ RegistrationReviewStates . PendingWithdrawRequest ] : [ ReviewActionTrigger . ForceWithdraw ] ,
4060 [ RegistrationReviewStates . PendingEmbargoTermination ] : [ ReviewActionTrigger . ForceWithdraw ] ,
61+ [ RevisionReviewStates . RevisionPendingModeration ] :
62+ [ SchemaResponseActionTrigger . AcceptRevision , SchemaResponseActionTrigger . RejectRevision ] ,
4163} ;
4264
4365const Validations = buildValidations ( {
@@ -79,9 +101,10 @@ export default class RegistrationModel extends NodeModel.extend(Validations) {
79101 @attr ( 'fixstring' ) articleDoi ! : string | null ;
80102 @attr ( 'object' ) registeredMeta ! : RegistrationMetadata ;
81103 @attr ( 'registration-responses' ) registrationResponses ! : RegistrationResponse ;
82- @attr ( 'fixstring' ) reviewsState ? : RegistrationReviewStates ;
104+ @attr ( 'fixstring' ) reviewsState ! : RegistrationReviewStates ;
83105 @attr ( 'fixstring' ) iaUrl ?: string ;
84106 @attr ( 'array' ) providerSpecificMetadata ! : ProviderMetadata [ ] ;
107+ @attr ( 'fixstring' ) revisionState ! : RevisionReviewStates ;
85108 @attr ( 'boolean' ) wikiEnabled ! : boolean ;
86109
87110 // Write-only attributes
@@ -121,6 +144,15 @@ export default class RegistrationModel extends NodeModel.extend(Validations) {
121144 @hasMany ( 'review-action' , { inverse : 'target' } )
122145 reviewActions ! : AsyncHasMany < ReviewActionModel > | ReviewActionModel [ ] ;
123146
147+ @hasMany ( 'schema-response' , { inverse : 'registration' } )
148+ schemaResponses ! : AsyncHasMany < SchemaResponseModel > | SchemaResponseModel [ ] ;
149+
150+ @belongsTo ( 'schema-response' , { inverse : null } )
151+ originalResponse ! : AsyncBelongsTo < SchemaResponseModel > | SchemaResponseModel ;
152+
153+ @belongsTo ( 'schema-response' , { inverse : null } )
154+ latestResponse ! : AsyncBelongsTo < SchemaResponseModel > | SchemaResponseModel ; // Latest accepted response
155+
124156 // Write-only relationships
125157 @belongsTo ( 'draft-registration' , { inverse : null } )
126158 draftRegistration ! : DraftRegistrationModel ;
0 commit comments