-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathApp.js
78 lines (69 loc) · 1.82 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import React, { useState, useMemo } from 'react';
import {
SafeAreaView,
ScrollView,
StyleSheet,
View,
} from 'react-native';
import { Calendar } from 'react-native-calendars';
function CustomCalendar(props) {
const initDate = '2022-12-01';
const [range, setRange] = useState({});
// Using useMemo to perform calculations only if range is modified
const marked = useMemo(() => {
if(!range.startDate) return {};
let start = new Date(range.startDate).getTime();
let end = new Date(range.endDate || range.startDate).getTime();
let marked = {};
for(let cur = start; cur <= end; cur += 60 * 60 * 24000) {
let curStr = new Date(cur).toISOString().substr(0, 10);
marked[curStr] = {
selected: true,
color: '#aabbee',
textColor: 'black',
startingDay: cur == start,
endingDay: cur == end,
};
}
return marked;
}, [range]);
function handleDayPress(day) {
if(range.startDate && !range.endDate) {
// startDate is selected. Complete the range selection
let newRange = {...range, ...{endDate: day.dateString}};
props.onRangeSelected &&
props.onRangeSelected(newRange);
setRange(newRange);
}
else {
// startDate isn't selected. Start the range selection
setRange({
startDate: day.dateString
});
}
}
return (
<Calendar
initialDate={initDate}
markedDates={marked}
markingType="period"
onDayPress={handleDayPress}
{...props}
/>
);
}
function App() {
return (
<SafeAreaView style={styles.container}>
<CustomCalendar
onRangeSelected={(range) => console.log('Range selected: ', range)}/>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
});
export default App;