forked from partypages/party-template
Compare commits
2 Commits
dfc2d315c4
...
6120b43b55
Author | SHA1 | Date | |
---|---|---|---|
6120b43b55 | |||
|
613a8cae1f |
@ -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 { getPartyStatusRequest, getSelfStatusRequest, parseURI } from './partyApi';
|
||||||
import './PartyPage.css';
|
import './PartyPage.css';
|
||||||
|
|
||||||
@ -20,11 +20,16 @@ export type PartyStatus = {
|
|||||||
export type SelfStatus = {
|
export type SelfStatus = {
|
||||||
token: string,
|
token: string,
|
||||||
name: string,
|
name: string,
|
||||||
coming: "yes" | "no" | "maybe",
|
coming: "yes" | "no" | "maybe" | null,
|
||||||
"grammatical_gender": "m" | "f" | "d",
|
"grammatical_gender": "m" | "f" | "d",
|
||||||
extra?: SelfStatusExtraData,
|
extra?: SelfStatusExtraData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type UpdatableSelfStatus = {
|
||||||
|
coming?: "yes" | "no" | "maybe" | null,
|
||||||
|
extra?: SelfStatusExtraData,
|
||||||
|
}
|
||||||
|
|
||||||
export type APIEndPoint = { partyName: string, token: string };
|
export type APIEndPoint = { partyName: string, token: string };
|
||||||
|
|
||||||
// Adapt this type to your desires
|
// Adapt this type to your desires
|
||||||
@ -43,18 +48,17 @@ export const PartyContextProvider: React.FC<{ children: React.ReactNode }> = (pr
|
|||||||
return p;
|
return p;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const loadData = async () => {
|
const loadData = useCallback(async () => {
|
||||||
if (partyContext !== undefined) return;
|
if (partyContext !== undefined) return;
|
||||||
const selfStatus = await getSelfStatusRequest(apiEndpoint);
|
const selfStatus = await getSelfStatusRequest(apiEndpoint);
|
||||||
const partyStatus = await getPartyStatusRequest(apiEndpoint);
|
const partyStatus = await getPartyStatusRequest(apiEndpoint);
|
||||||
const ctx = { party: partyStatus, self: selfStatus };
|
const ctx = { party: partyStatus, self: selfStatus };
|
||||||
setPartyContext(ctx);
|
setPartyContext(ctx);
|
||||||
};
|
}, [apiEndpoint, partyContext]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadData();
|
loadData();
|
||||||
// eslint-disable-next-line
|
}, [apiEndpoint, loadData]);
|
||||||
}, [apiEndpoint]);
|
|
||||||
|
|
||||||
return partyContext ?
|
return partyContext ?
|
||||||
<PartyContext.Provider value={partyContext}>
|
<PartyContext.Provider value={partyContext}>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { APIEndPoint, PartyStatus, SelfStatus } from "./PartyContext";
|
import { APIEndPoint, PartyStatus, SelfStatus, UpdatableSelfStatus } from "./PartyContext";
|
||||||
|
|
||||||
export const parseURI = (uri: string): APIEndPoint | undefined => {
|
export const parseURI = (uri: string): APIEndPoint | undefined => {
|
||||||
const x = uri.match(/https?:\/\/(?<partyName>\w+)\.(?<host>.+)\/(?<token>.+)/);
|
const x = uri.match(/https?:\/\/(?<partyName>\w+)\.(?<host>.+)\/(?<token>.+)/);
|
||||||
@ -22,7 +22,14 @@ export const getSelfStatusRequest = async (apiEndpoint: APIEndPoint): Promise<Se
|
|||||||
|
|
||||||
export const getPartyStatusRequest = async (apiEndpoint: APIEndPoint): Promise<PartyStatus> => {
|
export const getPartyStatusRequest = async (apiEndpoint: APIEndPoint): Promise<PartyStatus> => {
|
||||||
const result = await fetch(`${apiUrl(apiEndpoint)}/status`);
|
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();
|
const data = await result.json();
|
||||||
return data as PartyStatus;
|
return data as PartyStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const modifySelfRequest = async (apiEndpoint: APIEndPoint, payload: UpdatableSelfStatus): Promise<SelfStatus> => {
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user