-
Notifications
You must be signed in to change notification settings - Fork 0
/
PrayerContext.js
75 lines (62 loc) · 2.27 KB
/
PrayerContext.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
import React, { createContext, useState, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { getKeysToPrayed, generatePrayed } from './utils';
export const PrayerContext = createContext();
export const PrayerProvider = ( { children } ) => {
const [checkedPrayer, setCheckedPrayer] = useState({});
const [loading, setLoading] = useState(true);
useEffect(() => {
const loadPrayerData = async () => {
const prayed = await AsyncStorage.getItem('prayed');
if (prayed) {
setCheckedPrayer(JSON.parse(prayed));
} else {
checkPrayed();
}
setLoading(false);
};
const checkPrayed = async () => {
const now = new Date();
const years = getKeysToPrayed(now);
let newData = {...checkedPrayer};
let update = false;
years.forEach((year) => {
if(!newData[year]) {
newData[year] = generatePrayed(year);
update = true;
}
});
if (update) {
setCheckedPrayer(newData);
await AsyncStorage.setItem('prayed', JSON.stringify(newData));
}
};
loadPrayerData();
}, []);
const togglePrayer = async (year, dayOfYear, index) => {
const newData = {...checkedPrayer};
newData[year][dayOfYear][index] = !newData[year][dayOfYear][index];
setCheckedPrayer(newData);
await AsyncStorage.setItem('prayed', JSON.stringify(newData));
};
const checkPrayedForDate = async (date) => {
const years = getKeysToPrayed(date);
let update = false;
let prayed = {...checkedPrayer};
years.forEach((year) => {
if (!prayed[year]) {
prayed[year] = generatePrayed(year);
update = true;
}
});
if (update) {
setCheckedPrayer(prayed);
await AsyncStorage.setItem('prayed', JSON.stringify(prayed));
}
};
return (
<PrayerContext.Provider value={{ checkedPrayer, loading, togglePrayer, checkPrayedForDate }}>
{children}
</PrayerContext.Provider>
);
};