import React, { JSX, useEffect, useState } from 'react'; import './App.css'; import { addEntry, APIEndPoint, ensureToday, getAPI, getToday, removeEntry } from './api'; import { ItemType, Store, StoreEntry } from './types'; import dayjs from 'dayjs'; const defaultStore: Store = { index: [], version: 0, entries: {}, }; //const key="c3dpZ2dpdHlzd29vdHkK" 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(ensureToday(st)); }; f(); }, [API]); const [showAPIField, setShowAPIField] = useState(false); const [input, setInput] = useState(""); return (

SHULNEFF

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

{showAPIField? { localStorage.setItem("apikey", e.target.value); }}/> :null}
setInput(e.target.value)} value={input} />

{store ?
:null}
Raw Store
        {JSON.stringify(store, null, 4)}
        
); }; const DATEFORMAT = "YYYY MM 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); await API.write(JSON.stringify(store)) const fromserver = await API.read(); setStore({...fromserver} ); } }} key={index} className="reacts">{datestring} {isSelected ? X : Reaction! } ; } return <>; } return {listEntries.map(itemToRow)}
TimeEvent
}; export default App;