11import {
22 DeleteProjectSucceedPayload ,
33 SetIsOpenDeleteConfirmPayload ,
4+ UpdateProjectStatisticPayload ,
45} from "reduxes/project/type" ;
56import { objectIndexOf } from "utils/general" ;
67import {
@@ -14,11 +15,11 @@ import {
1415 SET_CURRENT_ANNOTATION_PROJECT ,
1516 SET_IS_OPEN_DELETE_ANNOTATION_PROJECT_CONFIRM ,
1617 SHOW_DIALOG_CLONE_PROJECT_TO_ANNOTATION ,
18+ UPDATE_STATISTIC_PROJECT ,
1719} from "./constants" ;
1820import {
1921 AnnotationFilesApi ,
2022 AnnotationProjectReducer ,
21- FetchAnnotationFilesProps ,
2223 SetAnnotationFilesProps ,
2324 SetCurrentAnnotationProjectProps ,
2425 SetDialogCloneProjectToAnnotationProps ,
@@ -209,6 +210,88 @@ const annotationProjectReducer = (
209210 deleteConfirmDialogInfo : null ,
210211 } ;
211212 }
213+ case UPDATE_STATISTIC_PROJECT : {
214+ const { projectId, updateInfo } =
215+ payload as UpdateProjectStatisticPayload ;
216+ if (
217+ state . currentProjectInfo &&
218+ state . currentProjectInfo . project_id === projectId
219+ ) {
220+ const { groups } = state . currentProjectInfo ;
221+ const { fileInfo, typeMethod } = updateInfo ;
222+ const { isExist, isDelete, size, sizeOld } = fileInfo ;
223+ let newSize = 0 ;
224+ let newCount = 0 ;
225+ if ( groups ) {
226+ newSize = groups [ typeMethod ] ?. size || 0 ;
227+ newCount = groups [ typeMethod ] ?. count || 0 ;
228+ if ( isDelete ) {
229+ newSize -= size ;
230+ newCount -= 1 ;
231+ } else if ( isExist ) {
232+ newSize += fileInfo . size - ( sizeOld || 0 ) ;
233+ } else {
234+ newSize += size ;
235+ newCount += 1 ;
236+ }
237+
238+ return {
239+ ...state ,
240+ currentProjectInfo : {
241+ ...state . currentProjectInfo ,
242+ groups : {
243+ ...groups ,
244+ [ typeMethod ] : {
245+ ...groups [ typeMethod ] ,
246+ size : newSize ,
247+ count : newCount ,
248+ } ,
249+ } ,
250+ } ,
251+ } ;
252+ }
253+
254+ newSize = 0 ;
255+ newCount = 0 ;
256+ if ( isExist ) {
257+ newSize += fileInfo . size - ( sizeOld || 0 ) ;
258+ } else {
259+ newSize += size ;
260+ newCount += 1 ;
261+ }
262+
263+ const matchProjectIndex = objectIndexOf (
264+ state . listProjects ,
265+ projectId ,
266+ "project_id"
267+ ) ;
268+
269+ const newListProjects = [ ...state . listProjects ] ;
270+ if ( matchProjectIndex > - 1 ) {
271+ let targetGroups = newListProjects [ matchProjectIndex ] . groups ;
272+ if ( ! targetGroups ) {
273+ targetGroups = { } ;
274+ }
275+ targetGroups [ typeMethod ] = {
276+ size : newSize ,
277+ count : newCount ,
278+ data_number : [ 0 , 0 , 0 ] ,
279+ } ;
280+ }
281+ const currentProjectInfo = {
282+ ...state . currentProjectInfo ,
283+ } ;
284+ currentProjectInfo . groups [ typeMethod ] = {
285+ size : newSize ,
286+ count : newCount ,
287+ } ;
288+ return {
289+ ...state ,
290+ currentProjectInfo,
291+ } ;
292+ }
293+ return state ;
294+ }
212295 }
213296 return state ;
214297} ;
0 commit comments