1
1
import React from "react" ;
2
2
import { List } from "immutable" ;
3
- import { connect , PromiseState } from "react-refetch" ;
4
3
import { Redirect } from "react-router-dom" ;
5
4
import { Alert , Spinner } from "reactstrap" ;
6
- import { useVirtualContest } from "../../../api/InternalAPIClient" ;
5
+ import {
6
+ useVirtualContest ,
7
+ useContestUpdate ,
8
+ } from "../../../api/InternalAPIClient" ;
7
9
import * as DateUtil from "../../../utils/DateUtil" ;
8
10
import { VirtualContestItem } from "../types" ;
9
11
import {
@@ -27,24 +29,30 @@ interface OuterProps {
27
29
contestId : string ;
28
30
}
29
31
30
- interface InnerProps extends OuterProps {
31
- updateResponse : PromiseState < unknown | null > ;
32
- updateContest : ( request : Request , problems : VirtualContestItem [ ] ) => void ;
33
- }
34
-
35
- const InnerContestUpdatePage = ( props : InnerProps ) => {
36
- const { contestId, updateResponse } = props ;
32
+ export const ContestUpdatePage = ( props : OuterProps ) => {
33
+ const { contestId } = props ;
34
+ const updateResponse = useContestUpdate ( ) ;
37
35
const contestResponse = useVirtualContest ( contestId ) ;
38
36
if ( ! contestResponse . data && ! contestResponse . error ) {
39
37
return < Spinner style = { { width : "3rem" , height : "3rem" } } /> ;
40
38
} else if ( contestResponse . error || ! contestResponse . data ) {
41
39
return < Alert color = "danger" > Failed to fetch contest info.</ Alert > ;
42
40
}
43
41
42
+ const updateContest = ( request : Request , problems : VirtualContestItem [ ] ) => ( {
43
+ updateResponse : {
44
+ comparison : null ,
45
+ value : ( ) =>
46
+ updateVirtualContestInfo ( request ) . then ( ( ) =>
47
+ updateVirtualContestItems ( props . contestId , problems )
48
+ ) ,
49
+ } ,
50
+ } ) ;
51
+
44
52
const contestInfo = contestResponse . data . info ;
45
53
const contestProblems = contestResponse . data . problems ;
46
54
47
- if ( updateResponse . fulfilled && updateResponse . value !== null ) {
55
+ if ( ! updateResponse . data && updateResponse . error ) {
48
56
return < Redirect to = { `/contest/show/${ contestId } ` } /> ;
49
57
}
50
58
@@ -86,7 +94,7 @@ const InnerContestUpdatePage = (props: InnerProps) => {
86
94
publicState,
87
95
penaltySecond,
88
96
} ) : void => {
89
- props . updateContest (
97
+ updateContest (
90
98
{
91
99
id : contestId ,
92
100
title,
@@ -103,18 +111,3 @@ const InnerContestUpdatePage = (props: InnerProps) => {
103
111
/>
104
112
) ;
105
113
} ;
106
-
107
- export const ContestUpdatePage = connect < OuterProps , InnerProps > ( ( props ) => ( {
108
- updateContest : ( request : Request , problems : VirtualContestItem [ ] ) => ( {
109
- updateResponse : {
110
- comparison : null ,
111
- value : ( ) =>
112
- updateVirtualContestInfo ( request ) . then ( ( ) =>
113
- updateVirtualContestItems ( props . contestId , problems )
114
- ) ,
115
- } ,
116
- } ) ,
117
- updateResponse : {
118
- value : null ,
119
- } ,
120
- } ) ) ( InnerContestUpdatePage ) ;
0 commit comments