@@ -6,23 +6,33 @@ import { catchError, forkJoin, map, of, switchMap, tap } from 'rxjs';
66import { inject , Injectable } from '@angular/core' ;
77
88import { CollectionsService } from '@osf/shared/services/collections.service' ;
9+ import { DEFAULT_TABLE_PARAMS } from '@shared/constants/default-table-params.constants' ;
10+ import { ResourceType } from '@shared/enums/resource-type.enum' ;
911import { handleSectionError } from '@shared/helpers/state-error.handler' ;
12+ import { ContributorsService } from '@shared/services/contributors.service' ;
1013
1114import {
1215 ClearCollectionModeration ,
1316 CreateCollectionSubmissionAction ,
17+ GetCollectionSubmissionContributors ,
1418 GetCollectionSubmissions ,
1519 GetSubmissionsReviewActions ,
20+ LoadMoreCollectionSubmissionContributors ,
1621} from './collections-moderation.actions' ;
1722import { COLLECTIONS_MODERATION_STATE_DEFAULTS , CollectionsModerationStateModel } from './collections-moderation.model' ;
1823
24+ // import { CollectionSubmissionWithGuid } from '@shared/services/collections.services/models';
25+ // 'models/collections/collections.models';
26+ // import { CollectionSubmissionWithGuid } from '@shared/services/collections.services/models';
27+
1928@State < CollectionsModerationStateModel > ( {
2029 name : 'collectionsModeration' ,
2130 defaults : COLLECTIONS_MODERATION_STATE_DEFAULTS ,
2231} )
2332@Injectable ( )
2433export class CollectionsModerationState {
2534 collectionsService = inject ( CollectionsService ) ;
35+ contributorsService = inject ( ContributorsService ) ;
2636
2737 @Action ( GetCollectionSubmissions )
2838 getCollectionSubmissions ( ctx : StateContext < CollectionsModerationStateModel > , action : GetCollectionSubmissions ) {
@@ -117,4 +127,87 @@ export class CollectionsModerationState {
117127 clearCollectionModeration ( ctx : StateContext < CollectionsModerationStateModel > ) {
118128 ctx . setState ( COLLECTIONS_MODERATION_STATE_DEFAULTS ) ;
119129 }
130+
131+ @Action ( GetCollectionSubmissionContributors )
132+ getCollectionSubmissionContributors (
133+ ctx : StateContext < CollectionsModerationStateModel > ,
134+ action : GetCollectionSubmissionContributors
135+ ) {
136+ const state = ctx . getState ( ) ;
137+ const submission = state . collectionSubmissions . data . find ( ( s ) => s . id === action . collectionId ) ;
138+
139+ if ( submission ?. contributors && submission . contributors . length > 0 && action . page === 1 ) {
140+ return ;
141+ }
142+
143+ ctx . setState (
144+ patch ( {
145+ collectionSubmissions : {
146+ ...state . collectionSubmissions ,
147+ isSubmitting : true ,
148+ } ,
149+ } )
150+ ) ;
151+
152+ return this . contributorsService
153+ . getBibliographicContributors (
154+ ResourceType . Collection ,
155+ action . collectionId ,
156+ action . page ,
157+ DEFAULT_TABLE_PARAMS . rows
158+ )
159+ . pipe (
160+ tap ( ( res ) => {
161+ const currentSubmission = state . collectionSubmissions . data . find ( ( s ) => s . id === action . collectionId ) ;
162+ const existingContributors = currentSubmission ?. contributors || [ ] ;
163+ const newContributors = action . page === 1 ? res . data : [ ...existingContributors , ...res . data ] ;
164+
165+ ctx . patchState ( {
166+ collectionSubmissions : {
167+ ...state . collectionSubmissions ,
168+ data : state . collectionSubmissions . data . map ( ( submission ) =>
169+ submission . id === action . collectionId
170+ ? {
171+ ...submission ,
172+ contributors : newContributors ,
173+ totalContributors : res . totalCount ,
174+ contributorsLoading : false ,
175+ contributorsPage : action . page ,
176+ }
177+ : submission
178+ ) ,
179+ } ,
180+ } ) ;
181+ } ) ,
182+ catchError ( ( error ) => {
183+ ctx . patchState ( {
184+ collectionSubmissions : {
185+ ...state . collectionSubmissions ,
186+ data : state . collectionSubmissions . data . map ( ( submission ) =>
187+ submission . id === action . collectionId
188+ ? {
189+ ...submission ,
190+ contributorsLoading : false ,
191+ }
192+ : submission
193+ ) ,
194+ } ,
195+ } ) ;
196+ return handleSectionError ( ctx , 'collectionSubmissions' , error ) ;
197+ } )
198+ ) ;
199+ }
200+
201+ @Action ( LoadMoreCollectionSubmissionContributors )
202+ loadMoreCollectionSubmissionContributors (
203+ ctx : StateContext < CollectionsModerationStateModel > ,
204+ action : LoadMoreCollectionSubmissionContributors
205+ ) {
206+ const state = ctx . getState ( ) ;
207+ const submission = state . collectionSubmissions . data . find ( ( s ) => s . id === action . collectionId ) ;
208+ const currentPage = submission ?. contributorsPage || 1 ;
209+ const nextPage = currentPage + 1 ;
210+
211+ return ctx . dispatch ( new GetCollectionSubmissionContributors ( action . collectionId , nextPage ) ) ;
212+ }
120213}
0 commit comments