@@ -7,6 +7,7 @@ import { TaskT } from './Task';
7
7
import client from '../../../client' ;
8
8
import { addDays , format , isValid , parse , startOfDay } from "date-fns" ;
9
9
import Downloads from "./Downloads" ;
10
+ import Loading from "../../../components/loading/Loading" ;
10
11
11
12
type Roles = {
12
13
rolle : string
@@ -34,12 +35,14 @@ function CalendarForm() {
34
35
35
36
const { t } = useTranslation ( )
36
37
38
+ const [ isLoadingTasks , setIsLoadingTasks ] = useState < boolean > ( true )
39
+ const [ isUpdatingTasks , setIsUpdatingTasks ] = useState < boolean > ( true )
37
40
const [ startDate , setStartDate ] = useState < string > ( initialStartDate )
38
41
const [ parsedStartDate , setParsedStartDate ] = useState < Date > ( new Date ( ) )
39
42
const [ responsible , setResponsible ] = useState < string > ( initialResponsible )
40
43
const [ puffer , setPuffer ] = useState < number > ( 0 )
41
44
const [ calendarTitlePrefix , setCalendarTitlePrefix ] = useState < string > ( '' )
42
- const [ taskList , setTaskList ] = useState < Task [ ] > ( [ ] )
45
+ const [ taskList , setTaskList ] = useState < Task [ ] | undefined > ( undefined )
43
46
const [ tasks , setTasks ] = useState < TaskT [ ] > ( [ ] )
44
47
45
48
const onStartDateChanged = ( e : ChangeEvent < HTMLInputElement > ) => {
@@ -97,10 +100,13 @@ function CalendarForm() {
97
100
98
101
useEffect ( ( ) => {
99
102
const isValidDate = isValid ( parsedStartDate )
100
- if ( ! isValidDate ) {
103
+ if ( ! isValidDate || ! taskList ) {
101
104
return
102
105
}
103
106
107
+ // Introduce pseudo loading time so that the user sees that something is updating
108
+ setIsUpdatingTasks ( true ) ;
109
+
104
110
const filteredTasks = taskList . filter ( ( task : Task ) => {
105
111
const rollen = task . responsible . map ( ( resp ) => resp . rolle )
106
112
return responsible === 'all'
@@ -128,13 +134,18 @@ function CalendarForm() {
128
134
} )
129
135
. sort ( ( a : TaskT , b : TaskT ) => a . deadline . getTime ( ) - b . deadline . getTime ( ) )
130
136
131
- setTasks ( tasks )
137
+ // Update tasks after the pseudo loading time
138
+ setTimeout ( ( ) => {
139
+ setTasks ( tasks )
140
+ setIsUpdatingTasks ( false )
141
+ } , 500 )
132
142
} , [ parsedStartDate , responsible , puffer , taskList ] ) ;
133
143
134
144
useEffect ( ( ) => {
135
145
const getTasks = async ( ) => {
136
146
const response = await client . get ( '/tasks?_locale=' + i18n . language )
137
147
setTaskList ( response . data )
148
+ setIsLoadingTasks ( false )
138
149
}
139
150
140
151
const loadCachedValues = ( ) => {
@@ -214,7 +225,9 @@ function CalendarForm() {
214
225
< Downloads startDate = { parsedStartDate } tasks = { tasks } calendarTitlePrefix = { calendarTitlePrefix } />
215
226
</ div >
216
227
217
- < CalendarTable tasks = { tasks } prefix = { calendarTitlePrefix } />
228
+ < Loading isLoading = { isLoadingTasks || ! taskList } />
229
+ { ! isLoadingTasks && ! ! taskList
230
+ && < CalendarTable tasks = { tasks } prefix = { calendarTitlePrefix } isUpdating = { isUpdatingTasks } /> }
218
231
</ div >
219
232
) ;
220
233
}
0 commit comments