Live video on the AT Protocol
at next 79 lines 3.0 kB view raw
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);