+
+
{e.preventDefault(); setShowAPIField(!showAPIField);}}>I ate ...
+ {showAPIField?
+
{
+ localStorage.setItem("apikey", e.target.value);
+ }}/>
+ :null}
+
+
+
+ {
+ const newst = addEntry(store, {variant: "allergy", date: new Date().toString()} );
+ await API.write(JSON.stringify(store))
+ const fromserver = await API.read();
+ setStore({...fromserver} );
+ }}
+ >Allergy Alert!
+
Raw Store
@@ -72,21 +88,66 @@ export const App : React.FC = () => {
const DATEFORMAT = "YYYY MM DD HH:mm";
-export const RenderTable : React.FC<{store: Store}> = ({store}) => {
+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 {datestring} ate {item.item} ;
+ 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 {datestring} Reaction! ;
+ 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
+ return
Time Event
diff --git a/src/api.ts b/src/api.ts
index 34c8f79..4b67b0b 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -1,11 +1,11 @@
import { ItemType, Store, StoreEntry } from "./types"
-const defaultEndpoint = "http://localhost:4444/"
+const defaultEndpoint = "http://slateport:4444"
-type APIEndPoint = {
+export type APIEndPoint = {
write: (json: string) => Promise,
- read: () => Promise,
+ read: () => Promise,
};
const makeEndpoint = (key: string, method: string, endPointOverride?: string): string => {
@@ -65,6 +65,14 @@ type APIEndPoint = {
return store;
}
+ export const removeEntry = (store: Store, entry: ItemType): Store => {
+ const [storeIndex, dateString] = getToday(ensureToday(store))!;
+ const today = store.entries[storeIndex];
+ today.items = today.items.filter((item) => JSON.stringify(item) !== JSON.stringify(entry));
+ store.entries[storeIndex] = today;
+ return store;
+ }
+
export const getToday = (store: Store) => {
if (!store) return;
const today : Date = new Date();