Skip to content

Commit bdd14f4

Browse files
committed
add CircularProgress on sheet titles fetching
1 parent 2d0993a commit bdd14f4

1 file changed

Lines changed: 31 additions & 15 deletions

File tree

hwproj.front/src/components/Solutions/ExportToGoogle.tsx

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import {
33
Alert,
44
Button,
5+
CircularProgress,
56
DialogActions,
67
DialogContent,
78
DialogContentText,
@@ -31,28 +32,38 @@ interface ExportToGoogleState {
3132
url: string
3233
googleSheetTitles: StringArrayResult | undefined
3334
selectedSheet: number
34-
loadingStatus: LoadingStatus
35+
loadingSheets: boolean
36+
exportStatus: LoadingStatus
3537
error: string | null
3638
}
3739

3840
const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) => {
3941
const [state, setState] = useState<ExportToGoogleState>({
4042
url: "",
41-
selectedSheet: 0,
4243
googleSheetTitles: undefined,
43-
loadingStatus: LoadingStatus.None,
44+
selectedSheet: 0,
45+
loadingSheets: false,
46+
exportStatus: LoadingStatus.None,
4447
error: null
4548
})
4649

47-
const {url, googleSheetTitles, selectedSheet, loadingStatus, error } = state
50+
const {url, googleSheetTitles, selectedSheet, loadingSheets, exportStatus, error } = state
4851

4952
const handleGoogleDocUrlChange = (value: string) => {
50-
setState(prevState => ({ ...prevState, url: value }))
53+
setState(prevState => ({ ...prevState, url: value, loadingSheets: true }))
5154
if (value)
5255
apiSingleton.statisticsApi.statisticsGetSheetTitles(value)
53-
.then(response => setState(prevState => ({ ...prevState, googleSheetTitles: response })))
56+
.then(response => setState(prevState => ({
57+
...prevState,
58+
googleSheetTitles: response,
59+
loadingSheets: false,
60+
})))
5461
else
55-
setState(prevState => ({ ...prevState, googleSheetTitles: undefined }))
62+
setState(prevState => ({
63+
...prevState,
64+
googleSheetTitles: undefined,
65+
loadingSheets: false,
66+
}))
5667
}
5768

5869
const getGoogleSheetName = () => {
@@ -62,10 +73,10 @@ const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) =>
6273
}
6374

6475
const buttonSx = {
65-
...(loadingStatus === LoadingStatus.Success && {
76+
...(exportStatus === LoadingStatus.Success && {
6677
color: green[600],
6778
}),
68-
...(loadingStatus === LoadingStatus.Error && {
79+
...(exportStatus === LoadingStatus.Error && {
6980
color: red[600],
7081
}),
7182
};
@@ -78,7 +89,7 @@ const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) =>
7889
<Alert severity="error">
7990
{googleSheetTitles!.errors![0]}
8091
</Alert>
81-
) || (loadingStatus === LoadingStatus.Error &&
92+
) || (exportStatus === LoadingStatus.Error &&
8293
<Alert severity="error">
8394
{error}
8495
</Alert>
@@ -91,7 +102,7 @@ const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) =>
91102
</Grid>
92103
</DialogContentText>
93104
<DialogActions style={{ padding: 0, marginTop: 12 }}>
94-
<Grid item container spacing={1} style={{ marginRight: "auto" }}>
105+
<Grid item container spacing={1} alignItems="center" marginRight="auto">
95106
<Grid item>
96107
<TextField
97108
fullWidth
@@ -104,7 +115,12 @@ const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) =>
104115
}}
105116
/>
106117
</Grid>
107-
{googleSheetTitles && googleSheetTitles.value && googleSheetTitles.value.length > 0 &&
118+
{loadingSheets &&
119+
<Grid item>
120+
<CircularProgress size={28}/>
121+
</Grid>
122+
}
123+
{!loadingSheets && googleSheetTitles && googleSheetTitles.value && googleSheetTitles.value.length > 0 &&
108124
<Grid item>
109125
<TextField
110126
select
@@ -126,16 +142,16 @@ const ExportToGoogle: FC<ExportToGoogleProps> = (props: ExportToGoogleProps) =>
126142
color="primary"
127143
type="button"
128144
sx={buttonSx}
129-
loading={loadingStatus === LoadingStatus.Loading}
145+
loading={exportStatus === LoadingStatus.Loading}
130146
onClick={async () => {
131-
setState((prevState) => ({...prevState, loadingStatus: LoadingStatus.Loading}))
147+
setState((prevState) => ({...prevState, exportStatus: LoadingStatus.Loading}))
132148
const result = await apiSingleton.statisticsApi.statisticsExportToGoogleSheets(
133149
props.courseId,
134150
url,
135151
getGoogleSheetName())
136152
setState((prevState) =>
137153
({...prevState,
138-
loadingStatus: result.succeeded ? LoadingStatus.Success : LoadingStatus.Error,
154+
exportStatus: result.succeeded ? LoadingStatus.Success : LoadingStatus.Error,
139155
error: result.errors === undefined
140156
|| result.errors === null
141157
|| result.errors.length === 0

0 commit comments

Comments
 (0)