-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.js
More file actions
120 lines (110 loc) · 3.35 KB
/
Copy pathApp.js
File metadata and controls
120 lines (110 loc) · 3.35 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import React from 'react';
import { Text, View } from 'react-native';
import appStyles from './styles/appStyles'
import AppStatusBar from './components/AppStatusBar'
import ScreenDecks from './components/ScreenDecks'
import ScreenDecksAndQuizzes from './components/ScreenDecksAndQuizzes'
import DeckWriteModal from './components/DeckWriteModal'
import { isPossibleTwoPanels } from './util/ScreenHelper';
import Dimensions from 'Dimensions';
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import { receiveDecks, selectDeck } from './actions'
import reducer from './reducers'
import {
fetchDecks,
getNewDeck,
setDeck,
isReminderScheduled
} from './storage';
import { setReminderScheduledNotification, REMINDER_TYPES } from './util/NotificationsHelper'
const store = createStore(reducer)
export default class App extends React.Component {
constructor(props) {
super();
this.state = {
isTwoPanels: props.isTwoPanels,
isAddingDeck: false,
isEditingDeck: false,
};
}
componentDidMount() {
fetchDecks().then(decks => {
store.dispatch(receiveDecks(decks))
if (decks.length === 0) this.onClickAddDeck()
})
isReminderScheduled().then(setted => {
if (!setted) setReminderScheduledNotification(REMINDER_TYPES.ANSWER_A_QUIZ)
})
}
onLayoutChanged = event => {
this.setState({ isTwoPanels: isPossibleTwoPanels(Dimensions.get('window')) });
}
onClickAddDeck = () => {
this.setState({ isAddingDeck: true })
}
onClickEditDeck = () => {
this.setState({ isEditingDeck: true })
}
onClickCancelAddDeck = () => {
this.setState({
isAddingDeck: false,
isEditingDeck: false,
})
}
onSaveDeck = (title) => {
const { isAddingDeck, isEditingDeck } = this.state
const unSaveDeck = isEditingDeck
? { ...this.getSelectedDeck(), title }
: getNewDeck(title)
setDeck(unSaveDeck).then(decks => {
store.dispatch(receiveDecks(decks))
if (isAddingDeck) store.dispatch(selectDeck(unSaveDeck.key))
this.setState({
isAddingDeck: false,
isEditingDeck: false,
})
})
}
getSelectedDeck() {
const { decks, selectedDeckKey } = store.getState()
return decks.find(deck => deck.key === selectedDeckKey)
}
render() {
const { isAddingDeck, isEditingDeck } = this.state
return (
<Provider store={store}>
<View style={appStyles.container} onLayout={this.onLayoutChanged} >
<AppStatusBar />
{
(this.state.isTwoPanels) ?
<ScreenDecksAndQuizzes
onClickAddDeck={this.onClickAddDeck}
onClickEditDeck={this.onClickEditDeck}
/>
:
<ScreenDecks screenProps={{
onClickAddDeck: this.onClickAddDeck,
onClickEditDeck: this.onClickEditDeck
}} />
}
{isAddingDeck &&
<DeckWriteModal
title="New Deck"
onCancel={this.onClickCancelAddDeck}
onSave={this.onSaveDeck}
/>
}
{isEditingDeck &&
<DeckWriteModal
title="Edit Deck"
deck={this.getSelectedDeck()}
onCancel={this.onClickCancelAddDeck}
onSave={this.onSaveDeck}
/>
}
</View>
</Provider>
);
}
}