diff options
author | dan <dan.abramov@gmail.com> | 2024-02-09 05:00:50 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-08 21:00:50 -0800 |
commit | d36b91fe67225a9d3c79c8eeb3c80f6a72e9f73f (patch) | |
tree | 965fb97bd9508afffdf66a4d2e951f57bd566f1e /src/state | |
parent | 0d00c7d8516d2e4b736f5a2eaa679dbcce2cb71c (diff) | |
download | voidsky-d36b91fe67225a9d3c79c8eeb3c80f6a72e9f73f.tar.zst |
Fix flashes and jumps when opening profile (#2815)
* Don't reset the tree when profile loads fully * Give avatars a background color like placeholders * Prevent jumps due to rich text resolving * Rm log * Rm unused
Diffstat (limited to 'src/state')
-rw-r--r-- | src/state/cache/profile-shadow.ts | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/state/cache/profile-shadow.ts b/src/state/cache/profile-shadow.ts index 79a1f228e..34fe5995d 100644 --- a/src/state/cache/profile-shadow.ts +++ b/src/state/cache/profile-shadow.ts @@ -22,15 +22,15 @@ export interface ProfileShadow { blockingUri: string | undefined } -type ProfileView = - | AppBskyActorDefs.ProfileView - | AppBskyActorDefs.ProfileViewBasic - | AppBskyActorDefs.ProfileViewDetailed - -const shadows: WeakMap<ProfileView, Partial<ProfileShadow>> = new WeakMap() +const shadows: WeakMap< + AppBskyActorDefs.ProfileView, + Partial<ProfileShadow> +> = new WeakMap() const emitter = new EventEmitter() -export function useProfileShadow(profile: ProfileView): Shadow<ProfileView> { +export function useProfileShadow< + TProfileView extends AppBskyActorDefs.ProfileView, +>(profile: TProfileView): Shadow<TProfileView> { const [shadow, setShadow] = useState(() => shadows.get(profile)) const [prevPost, setPrevPost] = useState(profile) if (profile !== prevPost) { @@ -70,10 +70,10 @@ export function updateProfileShadow( }) } -function mergeShadow( - profile: ProfileView, +function mergeShadow<TProfileView extends AppBskyActorDefs.ProfileView>( + profile: TProfileView, shadow: Partial<ProfileShadow>, -): Shadow<ProfileView> { +): Shadow<TProfileView> { return castAsShadow({ ...profile, viewer: { @@ -89,7 +89,9 @@ function mergeShadow( }) } -function* findProfilesInCache(did: string): Generator<ProfileView, void> { +function* findProfilesInCache( + did: string, +): Generator<AppBskyActorDefs.ProfileView, void> { yield* findAllProfilesInListMembersQueryData(queryClient, did) yield* findAllProfilesInMyBlockedAccountsQueryData(queryClient, did) yield* findAllProfilesInMyMutedAccountsQueryData(queryClient, did) |