Bluesky app fork with some witchin' additions 馃挮
at readme-update 50 lines 1.1 kB view raw
1import React, {useContext} from 'react' 2import {type SharedValue} from 'react-native-reanimated' 3 4import {IS_NATIVE} from '#/env' 5 6export const PagerHeaderContext = React.createContext<{ 7 scrollY: SharedValue<number> 8 headerHeight: number 9} | null>(null) 10PagerHeaderContext.displayName = 'PagerHeaderContext' 11 12/** 13 * Passes information about the scroll position and header height down via 14 * context for the pager header to consume. 15 * 16 * @platform ios, android 17 */ 18export function PagerHeaderProvider({ 19 scrollY, 20 headerHeight, 21 children, 22}: { 23 scrollY: SharedValue<number> 24 headerHeight: number 25 children: React.ReactNode 26}) { 27 const value = React.useMemo( 28 () => ({scrollY, headerHeight}), 29 [scrollY, headerHeight], 30 ) 31 return ( 32 <PagerHeaderContext.Provider value={value}> 33 {children} 34 </PagerHeaderContext.Provider> 35 ) 36} 37 38export function usePagerHeaderContext() { 39 const ctx = useContext(PagerHeaderContext) 40 if (IS_NATIVE) { 41 if (!ctx) { 42 throw new Error( 43 'usePagerHeaderContext must be used within a HeaderProvider', 44 ) 45 } 46 return ctx 47 } else { 48 return null 49 } 50}