Description
The mission create/edit dialog has several UX issues that cause confusion and potential data loss.
Issue 1: Incorrect Button Text After First Edit
Current Behavior:
After editing a mission once, all subsequent "New Mission" dialogs show "Edit Mission" button instead of "Create Mission" or "Add Mission".
Root Cause (src/pages/Missions.tsx:438):
// Line 59: State initialized correctly
const [addEditTitle, setAddEditTitle] = useState(t("Add Mission"));
// Line 158: When editing, changes to "Edit Mission"
setAddEditTitle(t("Edit Mission"));
// Line 438: Opens create dialog but NEVER resets title!
onClick={() => {
setShowAddMission(true);
setMissionProperties({...}); // Resets properties ✓
setSelectedGroups([]); // Resets groups ✓
// ❌ MISSING: setAddEditTitle(t("Add Mission"));
}}
// Line 436: Button uses stale variable
<Button onClick={() => {add_mission()}}>{addEditTitle}</Button>
Bug Flow:
- User clicks "New Mission" → Dialog opens → Button = "Add Mission" ✓
- User clicks "Edit" on existing mission → Button = "Edit Mission" ✓
- User clicks "New Mission" again → Button STILL "Edit Mission" ❌
Proposed Fix:
// Line 438: Add missing title reset
setShowAddMission(true);
setAddEditTitle(t("Add Mission")); // ← ADD THIS LINE
setMissionProperties({...});
setSelectedGroups([]);
Issue 2: No Unsaved Changes Warning
Current Behavior (src/pages/Missions.tsx:396):
Dialog closes immediately on outside click or ESC without warning, losing all unsaved changes.
<Modal opened={showAddMission}
onClose={() => {setShowAddMission(false);}} // ❌ No warning!
title={addEditTitle}>
Proposed Fix:
const [isDirty, setIsDirty] = useState(false);
function handleFieldChange(field, value) {
setIsDirty(true);
setMissionProperties({...missionProperties, [field]: value});
}
function handleClose() {
if (isDirty) {
// Show confirmation dialog
setShowUnsavedWarning(true);
} else {
setShowAddMission(false);
}
}
<Modal opened={showAddMission} onClose={handleClose} ...>
Issue 3: No Password Removal UI
Current Behavior (src/pages/Missions.tsx:434):
Only has text input - no "Clear Password" or "Remove Password" button.
<PasswordInput
defaultValue={missionProperties.password}
onChange={e => { missionProperties.password = e.target.value; }}
/>
Note: Backend API supports DELETE /Marti/api/missions/<name>/password, but UI doesn't expose it.
Proposed Fix:
<PasswordInput
value={password}
onChange={setPassword}
label="Password (optional)"
rightSection={
password && <IconX onClick={clearPassword} style={{cursor: 'pointer'}} />
}
/>
Or add explicit button:
<Button variant="subtle" onClick={removePassword}>Remove Password</Button>
Steps to Reproduce
Issue 1:
- Click "New Mission" → Note button says "Add Mission"
- Close dialog
- Click Edit on any mission → Note button says "Edit"
- Close dialog
- Click "New Mission" again → Bug: Button still says "Edit"
Issue 2:
- Click "New Mission"
- Enter mission name, description, etc.
- Click outside dialog or press ESC
- Observe: All changes lost without warning
Issue 3:
- Edit mission that has a password
- Try to remove password completely
- Observe: Can only change to different password, cannot remove
Files to Change
src/pages/Missions.tsx - All three issues in same component
Priority
- Issue 1: Low (cosmetic, but confusing)
- Issue 2: Medium (can cause data loss frustration)
- Issue 3: Low (conditional on keeping password feature)
Description
The mission create/edit dialog has several UX issues that cause confusion and potential data loss.
Issue 1: Incorrect Button Text After First Edit
Current Behavior:
After editing a mission once, all subsequent "New Mission" dialogs show "Edit Mission" button instead of "Create Mission" or "Add Mission".
Root Cause (
src/pages/Missions.tsx:438):Bug Flow:
Proposed Fix:
Issue 2: No Unsaved Changes Warning
Current Behavior (
src/pages/Missions.tsx:396):Dialog closes immediately on outside click or ESC without warning, losing all unsaved changes.
Proposed Fix:
Issue 3: No Password Removal UI
Current Behavior (
src/pages/Missions.tsx:434):Only has text input - no "Clear Password" or "Remove Password" button.
Note: Backend API supports
DELETE /Marti/api/missions/<name>/password, but UI doesn't expose it.Proposed Fix:
Or add explicit button:
Steps to Reproduce
Issue 1:
Issue 2:
Issue 3:
Files to Change
src/pages/Missions.tsx- All three issues in same componentPriority