Commit fb253d7f authored by Phuengton Chummuel's avatar Phuengton Chummuel

little change

parent c60f4dea
......@@ -10,7 +10,6 @@ import { appointmentNotification, cancleNotification } from './../Utils'
export const appointmentCreate = ({ id, doctorName, date, place, time }) => {
return (dispatch) => {
let appointment = { id, doctorName, date, place, time }
realm.write(() => {
realm.create('Appointments', {
id: id,
......
......@@ -7,9 +7,15 @@ import {
import realm from './../Database/'
import moment from 'moment'
import { scheduleLocalNotification, cancleNotification } from './../Utils'
import { ToastAndroid } from 'react-native'
export const reminderCreate = ({ id, medName, reminderTime, meal, period, dose }) => {
return (dispatch) => {
let isPast = moment().diff(reminderTime)
if (isPast > 0) {
reminderTime = new Date(moment(reminderTime).add(1, 'day'))
}
ToastAndroid.show(isPast.toString(), ToastAndroid.SHORT)
realm.write(() => {
realm.create('Reminder', {
id: id,
......@@ -21,7 +27,7 @@ export const reminderCreate = ({ id, medName, reminderTime, meal, period, dose }
timeStamp: moment().toDate()
})
})
var time = moment(date).format('HH:mm').split(':')
var time = moment(reminderTime).format('HH:mm').split(':')
var msg = "แจ้งเตือนกินยา\n" + "เวลา: " + time[0] + ":" + time[1] + "\nยา: " + medName + '\n' + meal;
scheduleLocalNotification(msg, reminderTime, id)
let reminders = realm.objects("Reminder")
......
import React, { Component } from 'react';
import { TouchableOpacity } from 'react-native';
import { View, Text } from 'native-base';
import { View, Text, SwipeRow, Button, Icon } from 'native-base';
import { appointmentDelete } from './../actions'
import { connect } from 'react-redux';
import moment from 'moment';
......@@ -16,17 +16,34 @@ class AppointmentListItem extends Component {
}
render() {
const { listItem } = styles
return (
<TouchableOpacity onPress={() => this.deleteAppointment(this.props.data.id)}>
<View>
<Text>{this.props.data.doctorName}</Text>
<Text>{this.props.data.date}</Text>
<Text>{this.props.data.time}</Text>
<Text>{this.props.data.place}</Text>
</View>
</TouchableOpacity>
<SwipeRow
rightOpenValue={-75}
body={
<View style={listItem}>
<Text>{"แพทย์: " + this.props.data.doctorName}</Text>
<Text>{"วันที่: " + moment(new Date(this.props.data.date)).format('DD MMM YYYY')}</Text>
<Text>{"เวลา: " + moment(new Date(this.props.data.date)).format('HH:mm')}</Text>
<Text>{"สถานที่: " + this.props.data.place}</Text>
</View>
}
right={
<Button danger onPress={() => this.deleteAppointment(this.props.data.id)}>
<Icon active name="trash" />
</Button>
}
/>
)
}
}
const styles = {
listItem: {
paddingLeft: 15
}
}
export default connect(null, { appointmentDelete })(AppointmentListItem);
\ No newline at end of file
......@@ -19,15 +19,17 @@ class ReminderBoxList extends React.Component {
<View>
<Text>{this.props.periodText}</Text>
<View style={containerStyle}>
<List dataArray={this.props.items}
renderRow={(item) =>
<ListItem>
<Text>{item.medName}</Text>
</ListItem>
}>
</List>
<View style={{ height: 190 }}>
<List dataArray={this.props.items}
renderRow={(item) =>
<ListItem>
<Text>{item.medName}</Text>
</ListItem>
}>
</List>
</View>
</View>
</View>
</View >
)
}
......
import React, { Component } from 'react';
import { TouchableOpacity } from 'react-native';
import { View, Text } from 'native-base';
import { View, Text, SwipeRow, Button, Icon } from 'native-base';
import { reminderDelete } from './../actions'
import { connect } from 'react-redux';
import moment from 'moment';
......@@ -11,23 +11,39 @@ class ReminderListItem extends Component {
super(props)
}
deleteAppointment(id) {
deleteReminder(id) {
this.props.reminderDelete(id)
}
render() {
const { listItem } = styles
return (
<TouchableOpacity onPress={() => this.deleteAppointment(this.props.data.id)}>
<View>
<Text>{this.props.data.medName}</Text>
<Text>{this.props.data.reminderTime}</Text>
<Text>{this.props.data.meal}</Text>
<Text>{this.props.data.period}</Text>
<Text>{this.props.data.dose}</Text>
</View>
</TouchableOpacity>
<SwipeRow
rightOpenValue={-75}
body={
<View style={listItem}>
<Text>{"ชื่อยา: " + this.props.data.medName}</Text>
<Text>{"เวลา: " + moment(new Date(this.props.data.reminderTime)).format('HH:mm')}</Text>
<Text>{"ก่อน/หลังอาหาร: " + this.props.data.meal}</Text>
<Text>{"จำนวน: " + this.props.data.dose}</Text>
</View>
}
right={
<Button danger onPress={() => this.deleteReminder(this.props.data.id)}>
<Icon active name="trash" />
</Button>
}
/>
)
}
}
const styles = {
listItem: {
paddingLeft: 15
}
}
export default connect(null, { reminderDelete })(ReminderListItem);
\ No newline at end of file
......@@ -10,9 +10,9 @@ import { IMAGE_TO_TEXT } from './../ServiceUrl';
import { Container, Header, Content, Icon, Button } from 'native-base';
import { MaterialDialog } from 'react-native-material-dialog';
import { RNCamera } from 'react-native-camera';
import { scheduleLocalNotification, appointmentNotification, futch } from './../Utils';
import { scheduleLocalNotification, appointmentNotification, futch, generateID } from './../Utils';
import { connect } from 'react-redux'
import { reminderCreate } from './../actions'
import { reminderCreate, appointmentCreate } from './../actions'
import ReminderDialogForm from './../components/ReminderDialogForm';
import moment from 'moment';
import realm from './../Database/';
......@@ -26,11 +26,14 @@ class AppCamera extends Component {
afternoonTime: "",
eveningTime: "",
nightTime: "",
addItemVisible: true,
addItemVisible: false,
visible: false,
imageToText: "",
uploadProgress: "0",
addReminder: false
addReminder: false,
dataType: '',
qrData: {},
uuid: ''
}
}
......@@ -54,6 +57,7 @@ class AppCamera extends Component {
style={styles.preview}
type={RNCamera.Constants.Type.back}
fixOrientation={true}
onBarCodeRead={(data, type) => this._onBarCodeRead(data, type)}
permissionDialogTitle={'Permission to use camera'}
permissionDialogMessage={'We need your permission to use your camera phone'}
/>
......@@ -74,7 +78,13 @@ class AppCamera extends Component {
uploadProgress={this.state.uploadProgress}
imageToText={this.state.imageToText}
/>
</MaterialDialog>
<MaterialDialog
title="QRcode"
visible={this.state.addItemVisible}
onOk={() => this.addQr(this.state.uuid, this.state.dataType, this.state.qrData)}
onCancel={() => this.setState({ addItemVisible: false, dataType: '', qrData: {} })}>
<Text>{JSON.stringify(this.state.qrData)}</Text>
</MaterialDialog>
</Container >
);
......@@ -108,28 +118,54 @@ class AppCamera extends Component {
}
}
// _onBarCodeRead(data, type) {
// if (data.type == 'QR_CODE') {
// var tmpData = JSON.parse(decodeURI(data.data))
// switch (tmpData.type) {
// case "medicine":
// if (this.state.addItemVisible) {
// this._addMedicine(tmpData)
// this.setState({ addItemVisible: false })
// }
// break;
// case "appointment":
// if (this.state.addItemVisible) {
// this._addAppointment(tmpData)
// this.setState({ addItemVisible: false })
// }
// break;
// }
// }
// }
_onBarCodeRead(data, type) {
if (data.type == 'QR_CODE') {
var tmpData = JSON.parse(decodeURI(data.data))
let id = generateID()
switch (tmpData.type) {
case "reminder":
if (!this.state.addItemVisible) {
this.setState({ addItemVisible: true, dataType: tmpData.type, qrData: tmpData, uuid: id })
}
break;
case "appointment":
if (!this.state.addItemVisible) {
this.setState({ addItemVisible: true, dataType: tmpData.type, qrData: tmpData, uuid: id })
}
break;
}
}
}
addQr(id, dataType, qrData) {
switch (dataType) {
case "reminder":
this.props.reminderCreate({
id, medName: qrData.medName, reminderTime: new Date(moment(qrData.reminderTime)),
meal: qrData.meal, period: parseInt(qrData.period), dose: qrData.dose
})
this.setState({ addItemVisible: false, dataType: '', qrData: {} })
break;
case "appointment":
this.props.appointmentCreate({
id, doctorName: qrData.doctorName, date: new Date(moment(qrData.date)),
place: qrData.place, time: moment().date(),
})
this.setState({ addItemVisible: false, dataType: '', qrData: {} })
break;
}
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
......@@ -152,4 +188,4 @@ const styles = StyleSheet.create({
}
});
export default connect(null, { reminderCreate })(AppCamera);
\ No newline at end of file
export default connect(null, { reminderCreate, appointmentCreate })(AppCamera);
\ No newline at end of file
import React, { Component } from 'react';
import { ToastAndroid, AsyncStorage, TouchableOpacity } from 'react-native';
import {
Container,
Content,
Footer,
FooterTab,
Left,
Button,
Icon,
Fab,
View,
Text
Container,
Content,
Footer,
FooterTab,
Left,
Button,
Icon,
Fab,
View,
Text
} from 'native-base';
import {
Col,
Row,
Grid
Col,
Row,
Grid
} from 'react-native-easy-grid'
import AppHeader from './../components/Header';
import ReminderBoxList from './../components/ReminderBoxList';
......@@ -23,205 +23,205 @@ import { formatDate } from './../Utils';
import realm from './../Database';
class HomeScreen extends Component {
constructor(props) {
super(props);
this.state = {
firstLaunch: null,
active: false,
today: formatDate(new Date(Date.now())),
initDB: false,
morningReminder: [],
afternoonReminder: [],
eveningReminder: [],
nightReminder: [],
};
}
componentWillMount() {
this._isFirstLaunched()
this._initDB()
this._queryReminder()
}
render() {
var { containerStyle, timePeriodLeftStyle, timePeriodRightStyle, dateTitle } = styles;
return (
<Container style={{ backgroundColor: 'white' }}>
<AppHeader
headerText={'Pill Minder'}
headerLeft={
<Button onPress={this.onMenuPressed.bind(this)}>
<Icon name='menu' />
</Button>
}
headerRight={
<Button onPress={this.onAddMedicinePressed.bind(this)}>
<Icon name='add' />
</Button>
}
/>
<Content style={{ flex: 1 }}>
<Text style={dateTitle}>{this.state.today}</Text>
<Grid>
<Col>
<Row>
<TouchableOpacity style={timePeriodLeftStyle} onPress={() => this._timePeriodPress(this.state.morningReminder, 1)}>
<ReminderBoxList
periodText={"Morning"}
items={this.state.morningReminder}
/>
</TouchableOpacity>
</Row>
<Row>
<TouchableOpacity style={timePeriodLeftStyle} onPress={() => this._timePeriodPress(this.state.afternoonReminder, 2)}>
<ReminderBoxList
periodText={"Afternoon"}
items={this.state.afternoonReminder}
/>
</TouchableOpacity>
</Row>
</Col>
<Col>
<Row>
<TouchableOpacity style={timePeriodRightStyle} onPress={() => this._timePeriodPress(this.state.eveningReminder, 3)}>
<ReminderBoxList
periodText={"Evening"}
items={this.state.eveningReminder}
/>
</TouchableOpacity>
</Row>
<Row>
<TouchableOpacity style={timePeriodRightStyle} onPress={() => this._timePeriodPress(this.state.nightReminder, 4)}>
<ReminderBoxList
periodText={"Night"}
items={this.state.nightReminder}
/>
</TouchableOpacity>
</Row>
</Col>
</Grid>
</Content>
</Container >
)
}
onHomePressed() {
this.props.navigation.navigate('Home');
}
onCameraPressed() {
this.props.navigation.navigate('Camera');
}
onAddMedicinePressed() {
this.props.navigation.navigate('AddMedication')
}
onMenuPressed() {
this.props.navigation.navigate('DrawerToggle');
}
_timePeriodPress(data, period) {
// ToastAndroid.show(JSON.stringify(data), ToastAndroid.SHORT)
this.props.navigation.navigate('Detail', { items: data, period: period })
}
_queryReminder() {
let myReminder = realm.objects('Reminder')
let morningReminder = myReminder.filtered('period == 1')
let afternoonReminder = myReminder.filtered('period == 2')
let eveningReminder = myReminder.filtered('period == 3')
let nightReminder = myReminder.filtered('period == 4')
var tmpMorning = []
morningReminder.forEach(i => {
tmpMorning.push(i)
});
var tmpAfternoon = []
afternoonReminder.forEach(i => {
tmpAfternoon.push(i)
})
var tmpEvening = []
eveningReminder.forEach(i => {
tmpEvening.push(i)
})
var tmpNight = []
nightReminder.forEach(i => {
tmpNight.push(i)
})
this.setState({ morningReminder: tmpMorning, afternoonReminder: tmpAfternoon, eveningReminder: tmpEvening, nightReminder: tmpNight })
// ToastAndroid.show(JSON.stringify(myReminder), ToastAndroid.LONG)
// ToastAndroid.show(JSON.stringify(this.state.morningReminder), ToastAndroid.LONG)
}
_isFirstLaunched() {
AsyncStorage.getItem("alreadyLaunched").then(value => {
if (value == null) {
AsyncStorage.setItem('alreadyLaunched', 'true')
.catch(error => {
ToastAndroid.show(error.toString(), ToastAndroid.SHORT)
}) // No need to wait for `setItem` to finish, although you might want to handle errors
this.setState({ firstLaunch: true });
// ToastAndroid.show("Frist Launch:" + this.state.firstLaunch, ToastAndroid.LONG)
} else {
this.setState({ firstLaunch: false });
// ToastAndroid.show("Frist Launch:" + this.state.firstLaunch, ToastAndroid.LONG)
}
}) // Add some error handling, also you can simply do this.setState({fistLaunch: value == null})
}
_initDB() {
AsyncStorage.getItem("alreadyInitDB").then(value => {
if (value == null) {
ToastAndroid.show("Init DB", ToastAndroid.LONG)
AsyncStorage.setItem('alreadyInitDB', 'true')
realm.write(() => {
realm.create('TimePeriod', {
morning: '08:00',
afternoon: '12:00',
evening: '16:00',
night: '20:00'
})
constructor(props) {
super(props);
this.state = {
firstLaunch: null,
active: false,
today: formatDate(new Date(Date.now())),
initDB: false,
morningReminder: [],
afternoonReminder: [],
eveningReminder: [],
nightReminder: [],
};
}
componentWillMount() {
this._isFirstLaunched()
this._initDB()
this._queryReminder()
}
render() {
var { containerStyle, timePeriodLeftStyle, timePeriodRightStyle, dateTitle } = styles;
return (
<Container style={{ backgroundColor: 'white' }}>
<AppHeader
headerText={'Pill Minder'}
headerLeft={
<Button onPress={this.onMenuPressed.bind(this)}>
<Icon name='menu' />
</Button>
}
headerRight={
<Button onPress={this.onAddMedicinePressed.bind(this)}>
<Icon name='add' />
</Button>
}
/>
<Content style={{ flex: 1 }}>
<Text style={dateTitle}>{this.state.today}</Text>
<Grid>
<Col>
<Row>
<View style={timePeriodLeftStyle} >
<ReminderBoxList
periodText={"Morning"}
items={this.state.morningReminder}
/>
</View>
</Row>
<Row>
<View style={timePeriodLeftStyle} >
<ReminderBoxList
periodText={"Afternoon"}
items={this.state.afternoonReminder}
/>
</View>
</Row>
</Col>
<Col>
<Row>
<View style={timePeriodRightStyle} >
<ReminderBoxList
periodText={"Evening"}
items={this.state.eveningReminder}
/>
</View>
</Row>
<Row>
<View style={timePeriodRightStyle} >
<ReminderBoxList
periodText={"Night"}
items={this.state.nightReminder}
/>
</View>
</Row>
</Col>
</Grid>
</Content>
</Container >
)
}
onHomePressed() {
this.props.navigation.navigate('Home');
}
onCameraPressed() {
this.props.navigation.navigate('Camera');
}
onAddMedicinePressed() {
this.props.navigation.navigate('AddMedication')
}
onMenuPressed() {
this.props.navigation.navigate('DrawerToggle');
}
_timePeriodPress(data, period) {
// ToastAndroid.show(JSON.stringify(data), ToastAndroid.SHORT)
this.props.navigation.navigate('Detail', { items: data, period: period })
}
_queryReminder() {
let myReminder = realm.objects('Reminder')
let morningReminder = myReminder.filtered('period == 1')
let afternoonReminder = myReminder.filtered('period == 2')
let eveningReminder = myReminder.filtered('period == 3')
let nightReminder = myReminder.filtered('period == 4')
var tmpMorning = []
morningReminder.forEach(i => {
tmpMorning.push(i)
});
var tmpAfternoon = []
afternoonReminder.forEach(i => {
tmpAfternoon.push(i)
})
}
})
}
var tmpEvening = []
eveningReminder.forEach(i => {
tmpEvening.push(i)
})
var tmpNight = []
nightReminder.forEach(i => {
tmpNight.push(i)
})
this.setState({ morningReminder: tmpMorning, afternoonReminder: tmpAfternoon, eveningReminder: tmpEvening, nightReminder: tmpNight })
// ToastAndroid.show(JSON.stringify(myReminder), ToastAndroid.LONG)
// ToastAndroid.show(JSON.stringify(this.state.morningReminder), ToastAndroid.LONG)
}
_isFirstLaunched() {
AsyncStorage.getItem("alreadyLaunched").then(value => {
if (value == null) {
AsyncStorage.setItem('alreadyLaunched', 'true')
.catch(error => {
ToastAndroid.show(error.toString(), ToastAndroid.SHORT)
}) // No need to wait for `setItem` to finish, although you might want to handle errors
this.setState({ firstLaunch: true });
// ToastAndroid.show("Frist Launch:" + this.state.firstLaunch, ToastAndroid.LONG)
} else {
this.setState({ firstLaunch: false });
// ToastAndroid.show("Frist Launch:" + this.state.firstLaunch, ToastAndroid.LONG)
}
}) // Add some error handling, also you can simply do this.setState({fistLaunch: value == null})
}
_initDB() {
AsyncStorage.getItem("alreadyInitDB").then(value => {
if (value == null) {
ToastAndroid.show("Init DB", ToastAndroid.LONG)
AsyncStorage.setItem('alreadyInitDB', 'true')
realm.write(() => {
realm.create('TimePeriod', {
morning: '08:00',
afternoon: '12:00',
evening: '16:00',
night: '20:00'
})
})
}
})
}
}
const styles = {
timePeriodLeftStyle: {
flex: 1,
marginLeft: 20,
marginRight: 10,
marginTop: 20,
marginBottom: 20
},
timePeriodRightStyle: {
flex: 1,
marginLeft: 10,
marginRight: 20,
marginTop: 20,
marginBottom: 20
},
dateTitle: {
fontSize: 20,
textAlign: 'center',
marginTop: 20,
marginLeft: 20,
marginLeft: 20,
marginBottom: 10,
}
timePeriodLeftStyle: {
flex: 1,
marginLeft: 20,
marginRight: 10,
marginTop: 20,
marginBottom: 20
},
timePeriodRightStyle: {
flex: 1,
marginLeft: 10,
marginRight: 20,
marginTop: 20,
marginBottom: 20
},
dateTitle: {
fontSize: 20,
textAlign: 'center',
marginTop: 20,
marginLeft: 20,
marginLeft: 20,
marginBottom: 10,
}
}
export default HomeScreen;
\ No newline at end of file
......@@ -30,7 +30,7 @@ class MedicationListScreen extends Component {
return (
<Container>
<AppHeader
headerText={"Medications"}
headerText={"Reminders"}
headerLeft={
<Button onPress={() => goBack(null)}>
<Icon name='arrow-back' />
......
......@@ -157,7 +157,7 @@ class MedicationsScreen extends Component {
return (
<Container>
<AppHeader
headerText={'Add Medication'}
headerText={'Add Reminder'}
headerLeft={
<Button onPress={() => goBack(null)}>
<Icon name='arrow-back' />
......@@ -166,7 +166,7 @@ class MedicationsScreen extends Component {
/>
<Content>
<MedForm titleText={"Medicine Name"}>
<MedForm titleText={"Medication Name"}>
<Form>
<Item floatingLabel>
<Label>medicine or brand name</Label>
......@@ -235,10 +235,6 @@ class MedicationsScreen extends Component {
</Content>
</MedForm>
<MedForm titleText={"Schedule"}>
<Text style={timeStyle}>Start date : {formatDate(new Date(Date.now()))}</Text>
</MedForm>
<MedForm titleText={"Dose"}>
<View style={{ padding: 15 }}>
<Button style={{ backgroundColor: 'white' }} onPress={() => this.setState({ singlePickerVisible: true })}>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment