Bluesky app fork with some witchin' additions 💫

Cache profile view before opening AfterReportDialog (#9962)

authored by samuel.fm and committed by

GitHub 37a82761 612a7783

+33 -6
+2 -2
src/components/dms/AfterReportDialog.tsx
··· 69 const control = Dialog.useDialogContext() 70 const { 71 data: profile, 72 - isLoading, 73 isError, 74 } = useProfileQuery({ 75 did: params.message.sender.did, 76 }) 77 78 - return isLoading ? ( 79 <View style={[a.w_full, a.py_5xl, a.align_center]}> 80 <Loader size="lg" /> 81 </View>
··· 69 const control = Dialog.useDialogContext() 70 const { 71 data: profile, 72 + isPending, 73 isError, 74 } = useProfileQuery({ 75 did: params.message.sender.did, 76 }) 77 78 + return isPending ? ( 79 <View style={[a.w_full, a.py_5xl, a.align_center]}> 80 <Loader size="lg" /> 81 </View>
+12 -1
src/components/dms/ConvoMenu.tsx
··· 5 import {useLingui} from '@lingui/react' 6 import {Trans} from '@lingui/react/macro' 7 import {useNavigation} from '@react-navigation/native' 8 9 import {type NavigationProp} from '#/lib/routes/types' 10 import {type Shadow} from '#/state/cache/types' ··· 13 useMarkAsReadMutation, 14 } from '#/state/queries/messages/conversation' 15 import {useMuteConvo} from '#/state/queries/messages/mute-conversation' 16 - import {useProfileBlockMutationQueue} from '#/state/queries/profile' 17 import * as Toast from '#/view/com/util/Toast' 18 import {type ViewStyleProp} from '#/alf' 19 import {atoms as a} from '#/alf' ··· 63 style?: ViewStyleProp['style'] 64 }): React.ReactNode => { 65 const {_} = useLingui() 66 67 const leaveConvoControl = Prompt.usePromptControl() 68 const reportControl = Prompt.usePromptControl() ··· 125 }} 126 control={reportControl} 127 onAfterSubmit={() => { 128 blockOrDeleteControl.open() 129 }} 130 />
··· 5 import {useLingui} from '@lingui/react' 6 import {Trans} from '@lingui/react/macro' 7 import {useNavigation} from '@react-navigation/native' 8 + import {useQueryClient} from '@tanstack/react-query' 9 10 import {type NavigationProp} from '#/lib/routes/types' 11 import {type Shadow} from '#/state/cache/types' ··· 14 useMarkAsReadMutation, 15 } from '#/state/queries/messages/conversation' 16 import {useMuteConvo} from '#/state/queries/messages/mute-conversation' 17 + import { 18 + unstableCacheProfileView, 19 + useProfileBlockMutationQueue, 20 + } from '#/state/queries/profile' 21 import * as Toast from '#/view/com/util/Toast' 22 import {type ViewStyleProp} from '#/alf' 23 import {atoms as a} from '#/alf' ··· 67 style?: ViewStyleProp['style'] 68 }): React.ReactNode => { 69 const {_} = useLingui() 70 + const queryClient = useQueryClient() 71 72 const leaveConvoControl = Prompt.usePromptControl() 73 const reportControl = Prompt.usePromptControl() ··· 130 }} 131 control={reportControl} 132 onAfterSubmit={() => { 133 + const sender = convo.members.find( 134 + member => member.did === latestReportableMessage.sender.did, 135 + ) 136 + if (sender) { 137 + unstableCacheProfileView(queryClient, sender) 138 + } 139 blockOrDeleteControl.open() 140 }} 141 />
+6 -1
src/components/dms/MessageContextMenu.tsx
··· 4 import {type ChatBskyConvoDefs, RichText} from '@atproto/api' 5 import {msg} from '@lingui/core/macro' 6 import {useLingui} from '@lingui/react' 7 8 import {useTranslate} from '#/lib/hooks/useTranslate' 9 import {richTextToString} from '#/lib/strings/rich-text-helpers' 10 import {useConvoActive} from '#/state/messages/convo' 11 import {useLanguagePrefs} from '#/state/preferences' 12 import {useSession} from '#/state/session' 13 import * as Toast from '#/view/com/util/Toast' 14 import * as ContextMenu from '#/components/ContextMenu' ··· 36 const {_} = useLingui() 37 const ax = useAnalytics() 38 const {currentAccount} = useSession() 39 const convo = useConvoActive() 40 const deleteControl = usePromptControl() 41 const reportControl = usePromptControl() ··· 170 </ContextMenu.Root> 171 172 <ReportDialog 173 - // currentScreen="conversation" 174 control={reportControl} 175 subject={{ 176 view: 'message', ··· 178 message, 179 }} 180 onAfterSubmit={() => { 181 blockOrDeleteControl.open() 182 }} 183 />
··· 4 import {type ChatBskyConvoDefs, RichText} from '@atproto/api' 5 import {msg} from '@lingui/core/macro' 6 import {useLingui} from '@lingui/react' 7 + import {useQueryClient} from '@tanstack/react-query' 8 9 import {useTranslate} from '#/lib/hooks/useTranslate' 10 import {richTextToString} from '#/lib/strings/rich-text-helpers' 11 import {useConvoActive} from '#/state/messages/convo' 12 import {useLanguagePrefs} from '#/state/preferences' 13 + import {unstableCacheProfileView} from '#/state/queries/unstable-profile-cache' 14 import {useSession} from '#/state/session' 15 import * as Toast from '#/view/com/util/Toast' 16 import * as ContextMenu from '#/components/ContextMenu' ··· 38 const {_} = useLingui() 39 const ax = useAnalytics() 40 const {currentAccount} = useSession() 41 + const queryClient = useQueryClient() 42 const convo = useConvoActive() 43 const deleteControl = usePromptControl() 44 const reportControl = usePromptControl() ··· 173 </ContextMenu.Root> 174 175 <ReportDialog 176 control={reportControl} 177 subject={{ 178 view: 'message', ··· 180 message, 181 }} 182 onAfterSubmit={() => { 183 + if (sender) { 184 + unstableCacheProfileView(queryClient, sender) 185 + } 186 blockOrDeleteControl.open() 187 }} 188 />
+1 -1
src/components/moderation/ReportDialog/action.ts
··· 102 } 103 104 if (__DEV__) { 105 - logger.info('Submitting report', { 106 labeler: { 107 handle: labeler.creator.handle, 108 },
··· 102 } 103 104 if (__DEV__) { 105 + logger.info('Submitting report (dry run)', { 106 labeler: { 107 handle: labeler.creator.handle, 108 },
+12 -1
src/screens/Messages/components/RequestButtons.tsx
··· 12 import {useAcceptConversation} from '#/state/queries/messages/accept-conversation' 13 import {precacheConvoQuery} from '#/state/queries/messages/conversation' 14 import {useLeaveConvo} from '#/state/queries/messages/leave-conversation' 15 - import {useProfileBlockMutationQueue} from '#/state/queries/profile' 16 import * as Toast from '#/view/com/util/Toast' 17 import {atoms as a} from '#/alf' 18 import { ··· 53 const {_} = useLingui() 54 const shadowedProfile = useProfileShadow(profile) 55 const navigation = useNavigation<NavigationProp>() 56 const {mutate: leaveConvo} = useLeaveConvo(convo.id, { 57 onMutate: () => { 58 if (currentScreen === 'conversation') { ··· 174 }} 175 control={reportControl} 176 onAfterSubmit={() => { 177 blockOrDeleteControl.open() 178 }} 179 />
··· 12 import {useAcceptConversation} from '#/state/queries/messages/accept-conversation' 13 import {precacheConvoQuery} from '#/state/queries/messages/conversation' 14 import {useLeaveConvo} from '#/state/queries/messages/leave-conversation' 15 + import { 16 + unstableCacheProfileView, 17 + useProfileBlockMutationQueue, 18 + } from '#/state/queries/profile' 19 import * as Toast from '#/view/com/util/Toast' 20 import {atoms as a} from '#/alf' 21 import { ··· 56 const {_} = useLingui() 57 const shadowedProfile = useProfileShadow(profile) 58 const navigation = useNavigation<NavigationProp>() 59 + const queryClient = useQueryClient() 60 + 61 const {mutate: leaveConvo} = useLeaveConvo(convo.id, { 62 onMutate: () => { 63 if (currentScreen === 'conversation') { ··· 179 }} 180 control={reportControl} 181 onAfterSubmit={() => { 182 + const sender = convo.members.find( 183 + member => member.did === lastMessage.sender.did, 184 + ) 185 + if (sender) { 186 + unstableCacheProfileView(queryClient, sender) 187 + } 188 blockOrDeleteControl.open() 189 }} 190 />