Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #624 from streamplace/natb/move-actions-outside-portal

fix: move deletion action outside portal

authored by

Eli Mallon and committed by
GitHub
8321b13a ac9e527b

+25 -5
+25 -5
js/components/src/components/chat/mod-view.tsx
··· 49 49 const setReportModalOpen = usePlayerStore((x) => x.setReportModalOpen); 50 50 const setReportSubject = usePlayerStore((x) => x.setReportSubject); 51 51 const setModMessage = usePlayerStore((x) => x.setModMessage); 52 + const deleteChatMessage = useDeleteChatMessage(); 52 53 53 54 // get the channel did 54 55 const channelId = usePlayerStore((state) => state.src); ··· 174 175 <Text color="primary">View user on {BSKY_FRONTEND_DOMAIN}</Text> 175 176 </DropdownMenuItem> 176 177 {message.author.did === agent?.did && ( 177 - <DeleteButton message={message} /> 178 + <DeleteButton 179 + message={message} 180 + deleteChatMessage={deleteChatMessage} 181 + /> 178 182 )} 179 183 {message.author.did !== agent?.did && ( 180 184 <ReportButton ··· 191 195 ); 192 196 }); 193 197 198 + enum DeleteState { 199 + None, 200 + Confirmed, 201 + Deleting, 202 + } 203 + 194 204 export function DeleteButton({ 195 205 message, 206 + deleteChatMessage, 196 207 }: { 197 208 message: ChatMessageViewHydrated; 209 + deleteChatMessage: (uri: string) => Promise<any>; 198 210 }) { 199 - const deleteChatMessage = useDeleteChatMessage(); 200 - const [confirming, setConfirming] = useState(false); 211 + const [confirming, setConfirming] = useState<DeleteState>(DeleteState.None); 201 212 const { onOpenChange } = useRootContext(); 202 213 return ( 203 214 <DropdownMenuItem 204 215 onPress={() => { 205 216 if (!message) return; 206 217 if (!confirming) { 207 - setConfirming(true); 218 + setConfirming(DeleteState.Confirmed); 208 219 return; 209 220 } 221 + if (confirming === DeleteState.Confirmed) { 222 + setConfirming(DeleteState.Deleting); 223 + } 210 224 deleteChatMessage(message.uri).then(() => { 225 + // wait ~a second before resetting state to allow deletion to take effect 226 + setTimeout(() => setConfirming(DeleteState.None), 1000); 211 227 onOpenChange?.(false); 212 228 }); 213 229 }} 214 230 > 215 231 <Text color="destructive"> 216 - {confirming ? "Are you sure?" : "Delete message"} 232 + {confirming === DeleteState.Confirmed 233 + ? "Are you sure? Click again to confirm." 234 + : confirming === DeleteState.Deleting 235 + ? "Deleting..." 236 + : "Delete message"} 217 237 </Text> 218 238 </DropdownMenuItem> 219 239 );