Live video on the AT Protocol
1import { useStore } from "./index";
2
3// Base selectors
4export const useHydrated = () => useStore((state) => state.hydrated);
5
6// Sidebar selectors
7export const useIsSidebarCollapsed = () =>
8 useStore((state) => state.isCollapsed);
9export const useSidebarTargetWidth = () =>
10 useStore((state) => state.targetWidth);
11export const useIsSidebarLoaded = () => useStore((state) => state.isLoaded);
12export const useIsSidebarHidden = () => useStore((state) => state.isHidden);
13
14// Bluesky selectors
15export const useOAuthSession = () => useStore((state) => state.oauthSession);
16export const usePDS = () => useStore((state) => state.pds);
17export const useLogin = () => useStore((state) => state.loginState);
18export const useProfiles = () => useStore((state) => state.profiles);
19export const useStoredKey = () => useStore((state) => state.storedKey);
20export const useKeyRecords = () =>
21 useStore((state) => state.streamKeysResponse);
22export const useServerSettings = () =>
23 useStore((state) => state.serverSettings);
24export const useUserProfile = () => {
25 const oauthSession = useOAuthSession();
26 const profiles = useProfiles();
27 const did = oauthSession?.did;
28 if (!did) return null;
29 return profiles[did];
30};
31export const useIsReady = () => {
32 const authStatus = useStore((state) => state.authStatus);
33 const oauthSession = useOAuthSession();
34 const profile = useUserProfile();
35
36 if (authStatus === "start") {
37 return false;
38 } else if (authStatus === "loggedOut") {
39 return true;
40 }
41 if (!oauthSession) {
42 return false;
43 }
44 if (!profile) {
45 return false;
46 }
47 return true;
48};
49export const useNewLivestream = () => useStore((state) => state.newLivestream);
50export const useChatProfile = () => useStore((state) => state.chatProfile);
51export const useCachedProfiles = () => useStore((state) => state.profileCache);
52
53// ContentMetadata selectors
54export const useContentMetadata = () =>
55 useStore((state) => ({
56 creating: state.creating,
57 updating: state.updating,
58 error: state.error,
59 lastCreatedRecord: state.lastCreatedRecord,
60 }));
61export const useIsCreating = () => useStore((state) => state.creating);
62export const useIsUpdating = () => useStore((state) => state.updating);
63export const useContentMetadataError = () => useStore((state) => state.error);
64export const useLastCreatedRecord = () =>
65 useStore((state) => state.lastCreatedRecord);
66
67// Streamplace selectors
68export const useStreamplaceUrl = () => useStore((state) => state.url);
69export const useStreamplaceInitialized = () =>
70 useStore((state) => state.initialized);
71export const useUserMuted = () => useStore((state) => state.userMuted);
72export const useChatWarned = () => useStore((state) => state.chatWarned);
73export const useMySegments = () => useStore((state) => state.mySegments);
74
75// Platform selectors
76export const useNotificationToken = () =>
77 useStore((state) => state.notificationToken);
78export const useNotificationDestination = () =>
79 useStore((state) => state.notificationDestination);