import { useState, useEffect } from "react"; import userbase from "userbase-js"; function Todo({ name, done, toggleComplete, deleteTodo }) { return (
  • {name}
  • ); } function TodoForm() { const [newTodo, setNewTodo] = useState(""); const [todos, setTodos] = useState([]); const [disabled, setDisabled] = useState(); useEffect(() => { async function openDatabase() { try { console.log("opening db..."); await userbase.openDatabase({ databaseName: "next-userbase-todos", changeHandler: function (items) { setTodos(items); }, }); } catch (e) { console.error(e.message); } } openDatabase(); }, []); async function addTodo(e) { e.preventDefault(); setDisabled(true); try { await userbase.insertItem({ databaseName: "next-userbase-todos", item: { name: newTodo, done: false }, }); setNewTodo(""); setDisabled(false); } catch (e) { console.error(e.message); setDisabled(false); } } async function toggleComplete(itemId, currentValue) { try { await userbase.updateItem({ databaseName: "next-userbase-todos", item: { ...currentValue, done: !currentValue.done }, itemId, }); } catch (e) { console.error(e.message); } } function handleNewTodo(e) { e.preventDefault(); setNewTodo(e.target.value); } async function deleteTodo(itemId) { setDisabled(true); try { await userbase.deleteItem({ databaseName: "next-userbase-todos", itemId, }); setNewTodo(""); setDisabled(false); } catch (e) { console.error(e.message); setDisabled(false); } } return (
    ); } export default TodoForm;