forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}