From 613a8cae1f28454cef1145e6a7ff3af5166525cf Mon Sep 17 00:00:00 2001 From: Dominic Zimmer Date: Tue, 11 Oct 2022 17:59:57 +0200 Subject: [PATCH] Support ModifySelfRequest, Fix warnings --- src/PartyContext.tsx | 15 ++++++++++----- src/partyApi.ts | 13 ++++++++++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/PartyContext.tsx b/src/PartyContext.tsx index f3e3506..d0b5431 100644 --- a/src/PartyContext.tsx +++ b/src/PartyContext.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useEffect, useMemo, useState } from 'react'; +import React, { createContext, useCallback, useEffect, useMemo, useState } from 'react'; import { getPartyStatusRequest, getSelfStatusRequest, parseURI } from './partyApi'; import './PartyPage.css'; @@ -20,11 +20,16 @@ export type PartyStatus = { export type SelfStatus = { token: string, name: string, - coming: "yes" | "no" | "maybe", + coming: "yes" | "no" | "maybe" | null, "grammatical_gender": "m" | "f" | "d", extra?: SelfStatusExtraData, } +export type UpdatableSelfStatus = { + coming?: "yes" | "no" | "maybe" | null, + extra?: SelfStatusExtraData, +} + export type APIEndPoint = { partyName: string, token: string }; // Adapt this type to your desires @@ -43,17 +48,17 @@ export const PartyContextProvider: React.FC<{ children: React.ReactNode }> = (pr return p; }, []); - const loadData = async () => { + const loadData = useCallback(async () => { if (partyContext !== undefined) return; const selfStatus = await getSelfStatusRequest(apiEndpoint); const partyStatus = await getPartyStatusRequest(apiEndpoint); const ctx = { party: partyStatus, self: selfStatus }; setPartyContext(ctx); - }; + }, [apiEndpoint, partyContext]); useEffect(() => { loadData(); - }, [apiEndpoint]); + }, [apiEndpoint, loadData]); return partyContext ? diff --git a/src/partyApi.ts b/src/partyApi.ts index e7d87f7..77b87f6 100644 --- a/src/partyApi.ts +++ b/src/partyApi.ts @@ -1,4 +1,4 @@ -import { APIEndPoint, PartyStatus, SelfStatus } from "./PartyContext"; +import { APIEndPoint, PartyStatus, SelfStatus, UpdatableSelfStatus } from "./PartyContext"; export const parseURI = (uri: string): APIEndPoint | undefined => { const x = uri.match(/https?:\/\/(?.+)\.party\.leafbla\.de\/(?.+)/); @@ -22,7 +22,14 @@ export const getSelfStatusRequest = async (apiEndpoint: APIEndPoint): Promise => { const result = await fetch(`${apiUrl(apiEndpoint)}/status`); - if (!result.ok) throw new Error("Error sending getSelfRequest"); + if (!result.ok) throw new Error("Error sending getPartyRequest"); const data = await result.json(); return data as PartyStatus; -}; \ No newline at end of file +}; + +export const modifySelfRequest = async (apiEndpoint: APIEndPoint, payload: UpdatableSelfStatus): Promise => { + const result = await fetch(`${apiUrl(apiEndpoint)}/me`, { method: "PATCH", body: JSON.stringify(payload), headers: { "Content-Type": "application/json" } }); + if (!result.ok) throw new Error("Error sending modifySelfRequest"); + const data = await result.json(); + return data as SelfStatus; +};