diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-01-26 18:15:43 -0600 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-01-26 18:15:43 -0600 |
commit | 20ccb03427f5be5b640fb72eb0b0e5bdc1f4103e (patch) | |
tree | bdbe51529f3ba2b9f4fd9e595ce15b59374eeccc /src | |
parent | d04a6d7539c53ec3510175459c1ca8c8e7e994da (diff) | |
download | voidsky-20ccb03427f5be5b640fb72eb0b0e5bdc1f4103e.tar.zst |
Fix to blurviews
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/util/BlurView.web.tsx | 39 | ||||
-rw-r--r-- | src/view/com/util/ViewHeader.tsx | 5 | ||||
-rw-r--r-- | src/view/com/util/ViewSelector.tsx | 3 | ||||
-rw-r--r-- | src/view/com/util/Views.web.tsx | 12 | ||||
-rw-r--r-- | src/view/lib/addStyle.ts | 11 | ||||
-rw-r--r-- | src/view/screens/Profile.tsx | 3 |
6 files changed, 55 insertions, 18 deletions
diff --git a/src/view/com/util/BlurView.web.tsx b/src/view/com/util/BlurView.web.tsx index a6097bf85..5adf0d1c0 100644 --- a/src/view/com/util/BlurView.web.tsx +++ b/src/view/com/util/BlurView.web.tsx @@ -1,4 +1,37 @@ -import {View} from 'react-native' +import React from 'react' +import {StyleSheet, View, ViewProps} from 'react-native' +import {addStyle} from '../../lib/addStyle' -// TODO can actually support this, see https://github.com/Kureev/react-native-blur/issues/417 -export const BlurBiew = View +type BlurViewProps = ViewProps & { + blurType?: 'dark' | 'light' + blurAmount?: number +} + +export const BlurView = ({ + style, + blurType, + blurAmount, + ...props +}: React.PropsWithChildren<BlurViewProps>) => { + // @ts-ignore using an RNW-specific attribute here -prf + style = addStyle(style, {backdropFilter: `blur(${blurAmount || 10}px`}) + if (blurType === 'dark') { + style = addStyle(style, styles.dark) + } else { + style = addStyle(style, styles.light) + } + return <View style={style} {...props} /> +} + +const styles = StyleSheet.create({ + blur: { + // @ts-ignore using an RNW-specific attribute here -prf + backdropFilter: 'blur(5px)', + }, + dark: { + backgroundColor: '#0008', + }, + light: { + backgroundColor: '#fff8', + }, +}) diff --git a/src/view/com/util/ViewHeader.tsx b/src/view/com/util/ViewHeader.tsx index 472db7ee0..82eff2a81 100644 --- a/src/view/com/util/ViewHeader.tsx +++ b/src/view/com/util/ViewHeader.tsx @@ -10,6 +10,7 @@ import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' +import {CenteredView} from './Views' import {UserAvatar} from './UserAvatar' import {Text} from './text/Text' import {MagnifyingGlassIcon} from '../../lib/icons' @@ -49,7 +50,7 @@ export const ViewHeader = observer(function ViewHeader({ canGoBack = store.nav.tab.canGoBack } return ( - <View style={[styles.header, pal.view]}> + <CenteredView style={[styles.header, pal.view]}> <TouchableOpacity testID="viewHeaderBackOrMenuBtn" onPress={canGoBack ? onPressBack : onPressMenu} @@ -112,7 +113,7 @@ export const ViewHeader = observer(function ViewHeader({ )} </TouchableOpacity> ) : undefined} - </View> + </CenteredView> ) }) diff --git a/src/view/com/util/ViewSelector.tsx b/src/view/com/util/ViewSelector.tsx index 0dd93ec64..ff5115c51 100644 --- a/src/view/com/util/ViewSelector.tsx +++ b/src/view/com/util/ViewSelector.tsx @@ -1,7 +1,8 @@ import React, {useEffect, useState} from 'react' -import {FlatList, View} from 'react-native' +import {View} from 'react-native' import {Selector} from './Selector' import {HorzSwipe} from './gestures/HorzSwipe' +import {FlatList} from './Views' import {useAnimatedValue} from '../../lib/hooks/useAnimatedValue' import {OnScrollCb} from '../../lib/hooks/useOnMainScroll' import {clamp} from '../../../lib/numbers' diff --git a/src/view/com/util/Views.web.tsx b/src/view/com/util/Views.web.tsx index fdb0fd1bf..313dda9cd 100644 --- a/src/view/com/util/Views.web.tsx +++ b/src/view/com/util/Views.web.tsx @@ -19,10 +19,10 @@ import { ScrollView as RNScrollView, ScrollViewProps, StyleSheet, - StyleProp, View, ViewProps, } from 'react-native' +import {addStyle} from '../../lib/addStyle' export function CenteredView({ style, @@ -50,16 +50,6 @@ export function ScrollView({ ) } -function addStyle<T>( - base: StyleProp<T>, - addedStyle: StyleProp<T>, -): StyleProp<T> { - if (Array.isArray(base)) { - return base.concat([addedStyle]) - } - return [base, addedStyle] -} - const styles = StyleSheet.create({ container: { width: '100%', diff --git a/src/view/lib/addStyle.ts b/src/view/lib/addStyle.ts new file mode 100644 index 000000000..93a5390a1 --- /dev/null +++ b/src/view/lib/addStyle.ts @@ -0,0 +1,11 @@ +import {StyleProp} from 'react-native' + +export function addStyle<T>( + base: StyleProp<T>, + addedStyle: StyleProp<T>, +): StyleProp<T> { + if (Array.isArray(base)) { + return base.concat([addedStyle]) + } + return [base, addedStyle] +} diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index 7fd813809..5c6616985 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -2,6 +2,7 @@ import React, {useEffect, useState} from 'react' import {ActivityIndicator, StyleSheet, View} from 'react-native' import {observer} from 'mobx-react-lite' import {ViewSelector} from '../com/util/ViewSelector' +import {CenteredView} from '../com/util/Views' import {ScreenParams} from '../routes' import {ProfileUiModel, Sections} from '../../state/models/profile-ui' import {useStores} from '../../state' @@ -181,7 +182,7 @@ export const Profile = observer(({navIdx, visible, params}: ScreenParams) => { onEndReached={onEndReached} /> ) : ( - renderHeader() + <CenteredView>{renderHeader()}</CenteredView> )} <FAB icon="pen-nib" onPress={onPressCompose} /> </View> |