# TASK-004: Edit Backend Dialog
**Task ID:** TASK-004
**Phase:** 5 - Multi-Target Deployment (BYOB)
**Priority:** 🟡 Medium
**Difficulty:** 🟢 Easy
**Estimated Time:** 1-2 days
**Prerequisites:** TASK-001 (Backend Services Panel)
**Branch:** `feature/byob-edit-backend`
## Objective
Add the ability to edit existing backend configurations. Currently users can only add new backends or delete them - there's no way to update URL, credentials, or settings.
## Background
TASK-001 implemented Add Backend and Delete Backend functionality. Users frequently need to:
- Update API tokens when they rotate
- Change URLs between environments
- Modify authentication settings
- Rename backends for clarity
## User Story
> As a Noodl user, I want to edit my backend configurations, so I can update credentials or settings without recreating the entire configuration.
## Current State
- Add Backend Dialog exists (TASK-001 ✅)
- Delete backend works
- No edit capability - must delete and recreate
- `updateBackend()` method exists in model but no UI
## Desired State
- "Edit" button on BackendCard
- Opens pre-filled dialog with current values
- Save updates existing config
- Preserve schema cache and connection history
## UI Design
The Edit dialog reuses AddBackendDialog with modifications:
```
┌─────────────────────────────────────────────────────────────────────┐
│ Edit Backend [×] │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ NAME │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Production Directus │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ TYPE │
│ [Directus ▾] ← Disabled (can't change type) │
│ │
│ URL │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ https://api.myapp.com │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ AUTHENTICATION │
│ Method: [Bearer Token ▾] │
│ Token: [••••••••••••••••••••••••••• ] [👁] [Update] │
│ │
│ ⚠️ Changing URL or credentials will require re-syncing schema │
│ │
│ [Cancel] [Test] [Save Changes] │
└─────────────────────────────────────────────────────────────────────┘
```
## Implementation
### Option A: Modify AddBackendDialog (Recommended)
Add an `editMode` prop to the existing dialog:
```typescript
interface AddBackendDialogProps {
isOpen: boolean;
onClose: () => void;
onSave: (backend: BackendConfig) => void;
editBackend?: BackendConfig; // If provided, dialog is in edit mode
}
```
### Option B: Create Separate EditBackendDialog
Create a new component specifically for editing. More code duplication but cleaner separation.
### Recommendation
**Option A** - Reusing AddBackendDialog is simpler since 90% of the UI is identical.
### Key Differences in Edit Mode
| Aspect | Add Mode | Edit Mode |
| -------------- | ----------------- | ---------------------------- |
| Title | "Add Backend" | "Edit Backend" |
| Type selector | Enabled | Disabled (can't change type) |
| Submit button | "Add Backend" | "Save Changes" |
| Initial values | Empty/defaults | Populated from editBackend |
| On submit | `createBackend()` | `updateBackend()` |
### Changes Required
1. **AddBackendDialog.tsx**
- Accept optional `editBackend` prop
- Initialize form with existing values
- Disable type selector in edit mode
- Change button text/behavior
2. **BackendCard.tsx**
- Add "Edit" button to actions
- Open dialog with `editBackend` prop
3. **BackendServicesPanel.tsx**
- Handle edit dialog state
- Pass selected backend to dialog
## Code Changes
### BackendCard Actions
```tsx
// Current
// After
```
### Dialog Mode Detection
```tsx
function AddBackendDialog({ editBackend, onSave, ... }) {
const isEditMode = !!editBackend;
const [name, setName] = useState(editBackend?.name || '');
const [url, setUrl] = useState(editBackend?.url || '');
// ... etc
const handleSubmit = async () => {
if (isEditMode) {
await BackendServices.instance.updateBackend({
id: editBackend.id,
name,
url,
auth
});
} else {
await BackendServices.instance.createBackend({ ... });
}
onSave();
};
return (
);
}
```
## Success Criteria
- [ ] Edit button appears on BackendCard
- [ ] Clicking Edit opens dialog with pre-filled values
- [ ] Backend type selector is disabled in edit mode
- [ ] URL can be changed
- [ ] Credentials can be updated
- [ ] Save calls `updateBackend()` method
- [ ] Schema cache is preserved after edit
- [ ] Connection status updates after credential change