import React from "react";
import {
ScrollView,
StyleSheet,
Text,
View,
TextInput,
TouchableOpacity
} from "react-native";
import Constants from "expo-constants";
import * as SQLite from 'expo-sqlite';
const db = SQLite.openDatabase("db.db");
class Items extends React.Component {
state = {
items: null
};
componentDidMount() {
this.update();
}
render() {
const { done: doneHeading } = this.props;
const { items } = this.state;
const heading = doneHeading ? "Completed" : "Todo";
if (items === null || items.length === 0) {
return null;
}
return (
{heading}
{items.map(({ id, done, value }) => (
this.props.onPressItem && this.props.onPressItem(id)}
style={{
backgroundColor: done ? "#1c9963" : "#fff",
borderColor: "#000",
borderWidth: 1,
padding: 8
}}
>
{value}
))}
);
}
update() {
db.transaction(tx => {
tx.executeSql(
`select * from items where done = ?;`,
[this.props.done ? 1 : 0],
(_, { rows: { _array } }) => this.setState({ items: _array })
);
});
}
}
export default class App extends React.Component {
state = {
text: null
};
componentDidMount() {
db.transaction(tx => {
tx.executeSql(
"create table if not exists items (id integer primary key not null, done int, value text);"
);
});
}
render() {
return (
SQLite Example
this.setState({ text })}
onSubmitEditing={() => {
this.add(this.state.text);
this.setState({ text: null });
}}
placeholder="what do you need to do?"
style={styles.input}
value={this.state.text}
/>
(this.todo = todo)}
onPressItem={id =>
db.transaction(
tx => {
tx.executeSql(`update items set done = 1 where id = ?;`, [
id
]);
},
null,
this.update
)
}
/>
(this.done = done)}
onPressItem={id =>
db.transaction(
tx => {
tx.executeSql(`delete from items where id = ?;`, [id]);
},
null,
this.update
)
}
/>
);
}
add(text) {
// is text empty?
if (text === null || text === "") {
return false;
}
db.transaction(
tx => {
tx.executeSql("insert into items (done, value) values (0, ?)", [text]);
tx.executeSql("select * from items", [], (_, { rows }) =>
console.log(JSON.stringify(rows))
);
},
null,
this.update
);
}
update = () => {
this.todo && this.todo.update();
this.done && this.done.update();
};
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
flex: 1,
paddingTop: Constants.statusBarHeight
},
heading: {
fontSize: 20,
fontWeight: "bold",
textAlign: "center"
},
flexRow: {
flexDirection: "row"
},
input: {
borderColor: "#4630eb",
borderRadius: 4,
borderWidth: 1,
flex: 1,
height: 48,
margin: 16,
padding: 8
},
listArea: {
backgroundColor: "#f0f0f0",
flex: 1,
paddingTop: 16
},
sectionContainer: {
marginBottom: 16,
marginHorizontal: 16
},
sectionHeading: {
fontSize: 18,
marginBottom: 8
}
});