Browse Source

Improved flow type checking

Arnaud Vergnet 4 years ago
parent
commit
a6771f442a

+ 2
- 1
screens/Planning/PlanningScreen.js View File

@@ -5,6 +5,7 @@ import {BackHandler, View} from 'react-native';
5 5
 import i18n from "i18n-js";
6 6
 import {LocaleConfig} from 'react-native-calendars';
7 7
 import WebDataManager from "../../utils/WebDataManager";
8
+import type {eventObject} from "../../utils/PlanningEventManager";
8 9
 import PlanningEventManager from '../../utils/PlanningEventManager';
9 10
 import {Avatar, Divider, List} from 'react-native-paper';
10 11
 import CustomAgenda from "../../components/CustomAgenda";
@@ -150,7 +151,7 @@ export default class PlanningScreen extends React.Component<Props, State> {
150 151
         this.setState({calendarShowing: isCalendarOpened});
151 152
     }
152 153
 
153
-    getRenderItem(item: Object) {
154
+    getRenderItem(item: eventObject) {
154 155
         const onPress = this.props.navigation.navigate.bind(this, 'PlanningDisplayScreen', {data: item});
155 156
         if (item.logo !== null) {
156 157
             return (

+ 2
- 0
screens/Tetris/Tetromino.js View File

@@ -1,3 +1,5 @@
1
+// @flow
2
+
1 3
 export default class Tetromino {
2 4
 
3 5
     static types = {

+ 2
- 0
utils/DateManager.js View File

@@ -1,3 +1,5 @@
1
+// @flow
2
+
1 3
 import i18n from 'i18n-js';
2 4
 
3 5
 export default class DateManager {

+ 35
- 23
utils/PlanningEventManager.js View File

@@ -1,3 +1,17 @@
1
+// @flow
2
+
3
+export type eventObject = {
4
+    id: number,
5
+    title: string,
6
+    logo: string,
7
+    date_begin: string,
8
+    date_end: string,
9
+    description: string,
10
+    club: string,
11
+    category_id: number,
12
+    url: string,
13
+};
14
+
1 15
 export default class PlanningEventManager {
2 16
 
3 17
     // Regex used to check date string validity
@@ -20,10 +34,10 @@ export default class PlanningEventManager {
20 34
      * @param event2Date Event 2 date in format YYYY-MM-DD HH:MM:SS
21 35
      * @return {boolean}
22 36
      */
23
-    static isEventBefore(event1Date: ?string, event2Date: ?string) {
37
+    static isEventBefore(event1Date: string, event2Date: string) {
24 38
         let date1 = PlanningEventManager.stringToDate(event1Date);
25 39
         let date2 = PlanningEventManager.stringToDate(event2Date);
26
-        if (date1 !== undefined && date2 !== undefined)
40
+        if (date1 !== null && date2 !== null)
27 41
             return date1 < date2;
28 42
         else
29 43
             return false;
@@ -34,13 +48,13 @@ export default class PlanningEventManager {
34 48
      * YYYY-MM-DD HH:MM:SS
35 49
      *
36 50
      * @param dateString The string to get the date from
37
-     * @return {string|undefined} Date in format YYYY:MM:DD or undefined if given string is invalid
51
+     * @return {string|null} Date in format YYYY:MM:DD or null if given string is invalid
38 52
      */
39
-    static getDateOnlyString(dateString: ?string) {
53
+    static getDateOnlyString(dateString: string) {
40 54
         if (PlanningEventManager.isEventDateStringFormatValid(dateString))
41 55
             return dateString.split(" ")[0];
42 56
         else
43
-            return undefined;
57
+            return null;
44 58
     }
45 59
 
46 60
     /**
@@ -61,9 +75,9 @@ export default class PlanningEventManager {
61 75
      * Accepted format: YYYY-MM-DD HH:MM:SS
62 76
      *
63 77
      * @param dateString The string to convert
64
-     * @return {Date|undefined} The date object or undefined if the given string is invalid
78
+     * @return {Date|null} The date object or null if the given string is invalid
65 79
      */
66
-    static stringToDate(dateString: ?string): Date | undefined {
80
+    static stringToDate(dateString: string): Date | null {
67 81
         let date = new Date();
68 82
         if (PlanningEventManager.isEventDateStringFormatValid(dateString)) {
69 83
             let stringArray = dateString.split(' ');
@@ -81,7 +95,7 @@ export default class PlanningEventManager {
81 95
                 0,
82 96
             );
83 97
         } else
84
-            date = undefined;
98
+            date = null;
85 99
 
86 100
         return date;
87 101
     }
@@ -116,12 +130,12 @@ export default class PlanningEventManager {
116 130
      * @param end End time in YYYY-MM-DD HH:MM:SS format
117 131
      * @return {string} Formatted string or "/ - /" on error
118 132
      */
119
-    static getFormattedEventTime(start: ?string, end: ?string): string {
133
+    static getFormattedEventTime(start: string, end: string): string {
120 134
         let formattedStr = '/ - /';
121 135
         let startDate = PlanningEventManager.stringToDate(start);
122 136
         let endDate = PlanningEventManager.stringToDate(end);
123 137
 
124
-        if (startDate !== undefined && endDate !== undefined && startDate.getTime() !== endDate.getTime()) {
138
+        if (startDate !== null && endDate !== null && startDate.getTime() !== endDate.getTime()) {
125 139
             formattedStr = String(startDate.getHours()).padStart(2, '0') + ':'
126 140
                 + String(startDate.getMinutes()).padStart(2, '0') + ' - ';
127 141
             if (endDate.getFullYear() > startDate.getFullYear()
@@ -131,7 +145,7 @@ export default class PlanningEventManager {
131 145
             else
132 146
                 formattedStr += String(endDate.getHours()).padStart(2, '0') + ':'
133 147
                     + String(endDate.getMinutes()).padStart(2, '0');
134
-        } else if (startDate !== undefined)
148
+        } else if (startDate !== null)
135 149
             formattedStr =
136 150
                 String(startDate.getHours()).padStart(2, '0') + ':'
137 151
                 + String(startDate.getMinutes()).padStart(2, '0');
@@ -163,32 +177,30 @@ export default class PlanningEventManager {
163 177
         let end = new Date(new Date().setMonth(new Date().getMonth() + numberOfMonths + 1));
164 178
         let daysOfYear = {};
165 179
         for (let d = new Date(); d <= end; d.setDate(d.getDate() + 1)) {
166
-            daysOfYear[
167
-                PlanningEventManager.getDateOnlyString(
168
-                    PlanningEventManager.dateToString(new Date(d))
169
-                )] = []
180
+            const dateString = PlanningEventManager.getDateOnlyString(
181
+                PlanningEventManager.dateToString(new Date(d)));
182
+            if (dateString !== null)
183
+                daysOfYear[dateString] = []
170 184
         }
171 185
         return daysOfYear;
172 186
     }
173 187
 
174
-    static generateEventAgenda(eventList: Array<Object>, numberOfMonths: number) {
188
+    static generateEventAgenda(eventList: Array<eventObject>, numberOfMonths: number) {
175 189
         let agendaItems = PlanningEventManager.generateEmptyCalendar(numberOfMonths);
176 190
         for (let i = 0; i < eventList.length; i++) {
177
-            console.log(PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
178
-            console.log(eventList[i]["date_begin"]);
179
-            if (PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]) !== undefined) {
180
-                this.pushEventInOrder(agendaItems, eventList[i], PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
181
-            }
191
+            const dateString = PlanningEventManager.getDateOnlyString(eventList[i].date_begin);
192
+            if (dateString !== null)
193
+                this.pushEventInOrder(agendaItems, eventList[i], dateString);
182 194
         }
183 195
         return agendaItems;
184 196
     }
185 197
 
186
-    static pushEventInOrder(agendaItems: Object, event: Object, startDate: string) {
198
+    static pushEventInOrder(agendaItems: Object, event: eventObject, startDate: string) {
187 199
         if (agendaItems[startDate].length === 0)
188 200
             agendaItems[startDate].push(event);
189 201
         else {
190 202
             for (let i = 0; i < agendaItems[startDate].length; i++) {
191
-                if (PlanningEventManager.isEventBefore(event["date_begin"], agendaItems[startDate][i]["date_begin"])) {
203
+                if (PlanningEventManager.isEventBefore(event.date_begin, agendaItems[startDate][i].date_end)) {
192 204
                     agendaItems[startDate].splice(i, 0, event);
193 205
                     break;
194 206
                 } else if (i === agendaItems[startDate].length - 1) {

+ 2
- 1
utils/WebDataManager.js View File

@@ -1,3 +1,4 @@
1
+// @flow
1 2
 
2 3
 /**
3 4
  * Class used to get json data from the web
@@ -8,7 +9,7 @@ export default class WebDataManager {
8 9
     lastDataFetched: Object = {};
9 10
 
10 11
 
11
-    constructor(url) {
12
+    constructor(url: string) {
12 13
         this.FETCH_URL = url;
13 14
     }
14 15
 

+ 11
- 11
utils/__test__/PlanningEventManager.test.js View File

@@ -35,13 +35,13 @@ test('isEventDateStringFormatValid', () => {
35 35
 
36 36
 test('stringToDate', () => {
37 37
     let testDate = new Date();
38
-    expect(PlanningEventManager.stringToDate(undefined)).toBeUndefined();
39
-    expect(PlanningEventManager.stringToDate("")).toBeUndefined();
40
-    expect(PlanningEventManager.stringToDate("garbage")).toBeUndefined();
41
-    expect(PlanningEventManager.stringToDate("2020-03-21")).toBeUndefined();
42
-    expect(PlanningEventManager.stringToDate("09:00:00")).toBeUndefined();
43
-    expect(PlanningEventManager.stringToDate("2020-03-21 09:g0:00")).toBeUndefined();
44
-    expect(PlanningEventManager.stringToDate("2020-03-21 09:g0:")).toBeUndefined();
38
+    expect(PlanningEventManager.stringToDate(undefined)).toBeNull();
39
+    expect(PlanningEventManager.stringToDate("")).toBeNull();
40
+    expect(PlanningEventManager.stringToDate("garbage")).toBeNull();
41
+    expect(PlanningEventManager.stringToDate("2020-03-21")).toBeNull();
42
+    expect(PlanningEventManager.stringToDate("09:00:00")).toBeNull();
43
+    expect(PlanningEventManager.stringToDate("2020-03-21 09:g0:00")).toBeNull();
44
+    expect(PlanningEventManager.stringToDate("2020-03-21 09:g0:")).toBeNull();
45 45
     testDate.setFullYear(2020, 2, 21);
46 46
     testDate.setHours(9, 0, 0, 0);
47 47
     expect(PlanningEventManager.stringToDate("2020-03-21 09:00:00")).toEqual(testDate);
@@ -75,10 +75,10 @@ test('getFormattedEventTime', () => {
75 75
 test('getDateOnlyString', () => {
76 76
     expect(PlanningEventManager.getDateOnlyString("2020-03-21 09:00:00")).toBe("2020-03-21");
77 77
     expect(PlanningEventManager.getDateOnlyString("2021-12-15 09:00:00")).toBe("2021-12-15");
78
-    expect(PlanningEventManager.getDateOnlyString("2021-12-o5 09:00:00")).toBeUndefined();
79
-    expect(PlanningEventManager.getDateOnlyString("2021-12-15 09:")).toBeUndefined();
80
-    expect(PlanningEventManager.getDateOnlyString("2021-12-15")).toBeUndefined();
81
-    expect(PlanningEventManager.getDateOnlyString("garbage")).toBeUndefined();
78
+    expect(PlanningEventManager.getDateOnlyString("2021-12-o5 09:00:00")).toBeNull();
79
+    expect(PlanningEventManager.getDateOnlyString("2021-12-15 09:")).toBeNull();
80
+    expect(PlanningEventManager.getDateOnlyString("2021-12-15")).toBeNull();
81
+    expect(PlanningEventManager.getDateOnlyString("garbage")).toBeNull();
82 82
 });
83 83
 
84 84
 test('isEventBefore', () => {

Loading…
Cancel
Save