Skip to content

Commit 57104ee

Browse files
committed
fix: stuck on edit profile media drop down
1 parent f9f2f00 commit 57104ee

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

src/screens/profile/EditProfileScreen.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ const EditProfileScreen = () => {
5959
const [bannerUrl, setBannerUrl] = useState<string | null>(user?.bannerUrl || null);
6060
const [isEditingBanner, setIsEditingBanner] = useState<boolean>(false);
6161
const [menuVisible, setMenuVisible] = useState<boolean>(false);
62+
const [warningMenuVisible, setWarningMenuVisible] = useState<boolean>(false);
6263

6364
const [formDataChanged, setFormDataChanged] = useState<boolean>(false);
65+
const [canNavigateAway, setCanNavigateAway] = useState<boolean>(false);
6466

6567
const [formData, setFormData] = useState({
6668
displayName: user?.displayName || '',
@@ -268,6 +270,7 @@ const EditProfileScreen = () => {
268270
variant="ghost-default"
269271
size="md"
270272
onPress={() => {
273+
setCanNavigateAway(true);
271274
handleFormSubmit();
272275
}}
273276
disabled={isSaveDisabled}
@@ -277,16 +280,17 @@ const EditProfileScreen = () => {
277280
});
278281
}, [navigation, handleFormSubmit, formData, isSaveDisabled]);
279282

283+
// warn user when navigating away with unsaved changes
280284
useEffect(() => {
281285
const unsubscribe = navigation.addListener('beforeRemove', (e) => {
282-
if (!formDataChanged) return;
286+
if (canNavigateAway || !formDataChanged) return;
283287

284288
e.preventDefault();
285289
// Show warning modal
286-
setMenuVisible(true);
290+
setWarningMenuVisible(true);
287291
});
288292
return unsubscribe;
289-
}, [navigation, formDataChanged]);
293+
}, [navigation, formDataChanged, canNavigateAway]);
290294

291295
if (isLoading) {
292296
return (
@@ -436,11 +440,11 @@ const EditProfileScreen = () => {
436440
{/* show warning modal when navigating away with unsaved changes */}
437441
<Modal
438442
transparent
439-
visible={menuVisible}
443+
visible={warningMenuVisible}
440444
animationType="fade"
441-
onRequestClose={() => setMenuVisible(false)}
445+
onRequestClose={() => setWarningMenuVisible(false)}
442446
>
443-
<Pressable onPress={() => setMenuVisible(false)} style={styles.overlay}>
447+
<Pressable onPress={() => setWarningMenuVisible(false)} style={styles.overlay}>
444448
<View style={[styles.dropdown, styles.dropDownWarning]}>
445449
<Text
446450
className="text-bold text-lg my-2"
@@ -453,7 +457,7 @@ const EditProfileScreen = () => {
453457
<Pressable
454458
style={styles.dropdownItem}
455459
onPress={() => {
456-
setMenuVisible(false);
460+
setWarningMenuVisible(false);
457461
}}
458462
>
459463
<Text style={[styles.dropdownText, styles.dropdownWarningText]}>Cancel</Text>
@@ -462,7 +466,11 @@ const EditProfileScreen = () => {
462466
<Pressable
463467
style={styles.dropdownItem}
464468
onPress={() => {
465-
navigation.goBack();
469+
setWarningMenuVisible(false);
470+
setCanNavigateAway(true);
471+
setTimeout(() => {
472+
navigation.goBack();
473+
}, 100);
466474
}}
467475
>
468476
<Text style={[styles.dropdownText, styles.dropdownWarningText]}>Discard</Text>

0 commit comments

Comments
 (0)