-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.js
More file actions
102 lines (93 loc) · 2.58 KB
/
App.js
File metadata and controls
102 lines (93 loc) · 2.58 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import React, { useState } from "react";
import { SafeAreaView, Alert } from "react-native";
import RNWeekView from "./src/components/Calendar/WeekView";
import EventModal from "./src/components/EventModal";
import Moment from "moment";
import { extendMoment } from "moment-range";
const moment = extendMoment(Moment);
const Calendar = () => {
const [events, setEvents] = useState([]);
const [modalVisible, setModalVisible] = useState(false);
const [editMode, setEditMode] = useState(false);
const [selectedEvent, setSelectedEvent] = useState(null);
const showAddModal = () => {
if (modalVisible) setSelectedEvent(null);
setModalVisible(!modalVisible);
};
const handleAddEvent = (description, date) => {
if (editMode) {
setEvents(
events.map(event =>
event.id === selectedEvent.id
? {
...selectedEvent,
description,
startDate: date.from.toDate(),
endDate: date.to.toDate()
}
: event
)
);
} else {
const range = moment.range(date.from, date.to);
for (var i = 0; i < events.length; i++) {
if (
range.overlaps(moment.range(events[i].startDate, events[i].endDate))
) {
Alert.alert("Warning", "No two appointsments should overlap");
return;
}
}
setEvents(
events.concat({
id: events.length,
description,
startDate: date.from.toDate(),
endDate: date.to.toDate(),
color: "blue"
})
);
}
showAddModal();
setSelectedEvent(null);
};
const handleAddPress = () => {
setEditMode(false);
showAddModal();
};
const handleEventPress = evt => {
setEditMode(true);
setSelectedEvent(evt);
showAddModal();
};
const handleEventLongPress = evt => {
Alert.alert("Delete", `Delete this event?`, [
{ text: "Cancel" },
{
text: "Delete",
onPress: () => setEvents(events.filter(event => event.id !== evt.id))
}
]);
};
return (
<SafeAreaView style={{ flex: 1 }}>
<RNWeekView
events={events}
numberOfDays={7}
formatDateHeader="D"
onEventPress={handleEventPress}
onEventLongPress={handleEventLongPress}
onAddPress={handleAddPress}
/>
{modalVisible && (
<EventModal
event={selectedEvent}
visible={modalVisible}
onConfirm={handleAddEvent}
onCancel={showAddModal}
/>
)}
</SafeAreaView>
);
};
export default Calendar;