Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
2.1 kB · 82 lines
TSX
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283import { SessionManager } from "@atproto/api/dist/session-manager";import { useEffect, useRef } from "react";import { ProfileCacheProvider } from "../context/profile-cache";import { useDocumentTitle } from "../hooks";import { useBrandingAutoFetch, useFetchBroadcasterDID, useFetchEnvConfig, useGetChatProfile,} from "../streamplace-store";import { makeStreamplaceStore } from "../streamplace-store/streamplace-store";import { StreamplaceContext } from "./context";import Poller from "./poller";
export function StreamplaceProvider({ children, url, oauthSession, onNeedsLogin,}: { children: React.ReactNode; url: string; oauthSession?: SessionManager | null; onNeedsLogin?: () => void;}) { // todo: handle url changes? const store = useRef(makeStreamplaceStore({ url })).current;
useEffect(() => { store.setState({ url }); }, [url]);
useEffect(() => { store.setState({ oauthSession }); }, [oauthSession]);
useEffect(() => { store.setState({ onNeedsLogin: onNeedsLogin ?? null }); }, [onNeedsLogin]);
return ( <StreamplaceContext.Provider value={{ store: store }}> <ProfileCacheProvider> <BrandingFetcher> <ChatProfileCreator oauthSession={oauthSession}> <Poller>{children}</Poller> </ChatProfileCreator> </BrandingFetcher> </ProfileCacheProvider> </StreamplaceContext.Provider> );}
export function BrandingFetcher({ children }: { children: React.ReactNode }) { const fetchBroadcasterDID = useFetchBroadcasterDID(); const fetchEnvConfig = useFetchEnvConfig(); useBrandingAutoFetch(); useDocumentTitle();
useEffect(() => { fetchBroadcasterDID(); fetchEnvConfig(); }, [fetchBroadcasterDID, fetchEnvConfig]);
return <>{children}</>;}
export function ChatProfileCreator({ oauthSession, children,}: { oauthSession?: SessionManager | null; children: React.ReactNode;}) { const getChatProfile = useGetChatProfile(); useEffect(() => { if (oauthSession) { getChatProfile(); } }, [oauthSession]); return <>{children}</>;}