Precache basic profile from posts for instant future navigations (#2795)
* skeleton for caching
* modify some existing logic
* refactor uri resolution query
* add precache feed posts
* adjustments
* remove prefetch on hover (maybe revert, just example)
* fix
* change arg name to match what we want
* optional infinite stale time
* use `ProfileViewDetailed`
* Revert "remove prefetch on hover (maybe revert, just example)"
This reverts commit 08609deb0d.
* add warning comment back for stale time
* remove comment
* store profile with both the handle and did for query key
* remove extra block from revert
* clarify argument name
* remove QT cache
* structure queries the same (put `enabled` at bottom)
* use both `ProfileViewDetailed` and `ProfileView` for the query return type
* placeholder profile header
* remove logs
* remove a few other things we don't need
* add placeholder
* refactor
* refactor
* we don't need this height adjustment now
* use gray banner while loading
* set background color of image to the loading placeholder color
* reorg imports
* add border to header on loading
* Fix style
* Rm radius
* oops
* Undo edit
* Back out type changes
* Tighten some types and moderate shadow
* Move precaching fns to profile where the cache is
* Rename functions to match what they do now
* Remove anys
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
This commit is contained in:
@@ -3,7 +3,10 @@ import {StyleSheet, View} from 'react-native'
|
||||
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
|
||||
import {ModerationUI} from '@atproto/api'
|
||||
import {Image} from 'expo-image'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {msg} from '@lingui/macro'
|
||||
import {colors} from 'lib/styles'
|
||||
import {useTheme} from 'lib/ThemeContext'
|
||||
import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
|
||||
import {
|
||||
usePhotoLibraryPermission,
|
||||
@@ -13,8 +16,6 @@ import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {isWeb, isAndroid} from 'platform/detection'
|
||||
import {Image as RNImage} from 'react-native-image-crop-picker'
|
||||
import {NativeDropdown, DropdownItem} from './forms/NativeDropdown'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {msg} from '@lingui/macro'
|
||||
|
||||
export function UserBanner({
|
||||
banner,
|
||||
@@ -26,6 +27,7 @@ export function UserBanner({
|
||||
onSelectNewBanner?: (img: RNImage | null) => void
|
||||
}) {
|
||||
const pal = usePalette('default')
|
||||
const theme = useTheme()
|
||||
const {_} = useLingui()
|
||||
const {requestCameraAccessIfNeeded} = useCameraPermission()
|
||||
const {requestPhotoAccessIfNeeded} = usePhotoLibraryPermission()
|
||||
@@ -142,7 +144,10 @@ export function UserBanner({
|
||||
!((moderation?.blur && isAndroid) /* android crashes with blur */) ? (
|
||||
<Image
|
||||
testID="userBannerImage"
|
||||
style={styles.bannerImage}
|
||||
style={[
|
||||
styles.bannerImage,
|
||||
{backgroundColor: theme.palette.default.backgroundLight},
|
||||
]}
|
||||
resizeMode="cover"
|
||||
source={{uri: banner}}
|
||||
blurRadius={moderation?.blur ? 100 : 0}
|
||||
|
||||
Reference in New Issue
Block a user