import React, { JSX, useEffect, useState } from 'react'; import './App.css'; import { addEntry, APIEndPoint, getAPI, removeEntry } from './api'; import { ItemType, Store, WithoutDate } from './types'; import dayjs from 'dayjs'; const defaultStore: Store = { version: 1, entries: {}, }; const key = localStorage.getItem("apikey") ?? ""; export const App : React.FC = () => { const [API, setAPI] = useState(() => getAPI(key)); const [store, setStore] = useState(defaultStore); useEffect(() => { const f = async () => { const st = await API.read(); setStore(st); }; f(); }, [API]); const [showAPIField, setShowAPIField] = useState(false); const formSubmit = async () => { const entry : WithoutDate = {variant: "eats", item: input}; const newStore = addEntry(store, entry); console.log("newstore is", newStore); API.write(JSON.stringify(store)).then(async () => { setTimeout(async () => { const fromserver = await API.read(); setStore({...fromserver} ); setInput(""); }, 150); }) }; const [input, setInput] = useState(""); return (

SHULNEFF

{e.preventDefault(); setShowAPIField(!showAPIField);}}>I ate ...

{showAPIField? { localStorage.setItem("apikey", e.target.value); }}/> :null}
{ setInput(e.target.value);} } onKeyDown={async (e) =>{ if (e.key === "Enter") { e.preventDefault(); await formSubmit(); } }} value={input} />

{store ?
:null}
Raw Store
         {JSON.stringify(store, null, 4)}
         
); }; const DATEFORMAT = "MMM DD, HH:mm"; export const RenderTable : React.FC<{API: APIEndPoint, store: Store, setStore: (store: Store) => void}> = ({store, API, setStore}) => { const [selectedItem, setSelected] = useState(null); const listEntries = Object .values(store.entries) .flatMap((entry) => entry.items) .sort((a,b) => b.date.localeCompare(a.date)); const itemToRow = (item: ItemType, index: number): JSX.Element => { const datestring = dayjs(new Date(item.date)).format(DATEFORMAT) const isSelected = (selectedItem !== null) && JSON.stringify(item) === JSON.stringify(selectedItem); if (item.variant === "eats") { return { e.preventDefault(); if (isSelected) setSelected(null); else setSelected(item); }} onClick={async (e) => { if (isSelected) { const newst = removeEntry(store, item ); console.log("newstore is", newst); await API.write(JSON.stringify(store)) const fromserver = await API.read(); setStore({...fromserver} ); } }} key={index} className="eats">{datestring}ate {isSelected ? X : {item.item} } ; } else if (item.variant === "allergy") { return { e.preventDefault(); if (isSelected) setSelected(null); else setSelected(item); }} onClick={async (e) => { if (isSelected) { const newst = removeEntry(store, item ); console.log("newstore is", newst); API.write(JSON.stringify(store)).then(async () => { setTimeout(async () => { const fromserver = await API.read(); setStore({...fromserver} ); }, 150); }); } }} key={index} className="reacts">{datestring} {isSelected ? X : Reaction! } ; } return <>; } return {listEntries.map(itemToRow)}
TimeEvent
}; export default App;