Files
bsky-social-app/src/view/com/pager/PagerHeaderContext.tsx
T
Samuel Newman f7a2368100 Header blurred banner on overscroll (take 2) (#5474)
* grow banner when overscrolling

* add blurview

* make backdrop blur as it scrolls

* add activity indicator

* use rotated spinner instead of arrow

* persist position of back button

* make back button prettier

* make blur less jarring

* Unify effects

* Tweak impl

* determine if should animate based on scroll amount

* sign comment

---------

Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
2024-09-25 15:01:25 +01:00

42 lines
954 B
TypeScript

import React, {useContext} from 'react'
import {SharedValue} from 'react-native-reanimated'
import {isIOS} from '#/platform/detection'
export const PagerHeaderContext =
React.createContext<SharedValue<number> | null>(null)
/**
* Passes the scrollY value to the pager header's banner, so it can grow on
* overscroll on iOS. Not necessary to use this context provider on other platforms.
*
* @platform ios
*/
export function PagerHeaderProvider({
scrollY,
children,
}: {
scrollY: SharedValue<number>
children: React.ReactNode
}) {
return (
<PagerHeaderContext.Provider value={scrollY}>
{children}
</PagerHeaderContext.Provider>
)
}
export function usePagerHeaderContext() {
const scrollY = useContext(PagerHeaderContext)
if (isIOS) {
if (!scrollY) {
throw new Error(
'usePagerHeaderContext must be used within a HeaderProvider',
)
}
return {scrollY}
} else {
return null
}
}