- Updated the `IntegrationService` to perform connection tests using only the API key, removing reliance on username and app password. - Simplified health check logic and improved error messaging for better clarity. - Added functionality to revoke API keys in the `WordPressIntegrationForm` component. - Enhanced site settings page with a site selector and improved integration status display. - Cleaned up unused code and improved overall structure for better maintainability.
6.1 KiB
6.1 KiB
Integration Settings Refactor & New Indicator
Changes Summary
1. Removed Integration Settings Card ✅
File: frontend/src/components/sites/WordPressIntegrationForm.tsx
Removed:
- Entire "Integration Settings" card with checkboxes for "Enable Integration" and "Enable Two-Way Sync"
- "Integration Status" card showing sync status and last sync time
- "Test Connection" button
- "Save Settings" button
- Related functions:
handleSaveSettings(),handleTestConnection() - Related state:
isActive,syncEnabled,loading
2. Added Toggle Switch in Header ✅
File: frontend/src/components/sites/WordPressIntegrationForm.tsx
Added:
- Simple toggle switch in the WordPress Integration header (top right corner)
- Toggle only appears if API key exists
- Shows "Enabled" or "Disabled" label next to toggle
- Clicking toggle calls
handleToggleIntegration()which:- Updates integration's
is_activestatus - Creates integration if it doesn't exist and user enables it
- Shows toast notifications for success/error
- Automatically reloads integration state
- Updates integration's
UI:
<div className="flex items-center gap-3">
<span className="text-sm font-medium">
{integrationEnabled ? 'Enabled' : 'Disabled'}
</span>
<button /* toggle switch styles */ />
</div>
3. Completely New Simple Indicator ✅
File: frontend/src/pages/Sites/Settings.tsx
Removed old complex indicator:
integrationTestStatusstate ('connected' | 'pending' | 'error' | 'not_configured')integrationLastCheckedstateintegrationCheckReffor periodic checks (every 5 min)integrationErrorCooldownReffor cooldown logicrunIntegrationTest()function with API calls- Multiple useEffect hooks for testing and periodic checks
- "Refresh Status" button
Added new simple indicator:
integrationStatusstate ('configured' | 'not_configured')- Simple check: Green if
wordPressIntegration.is_activeANDsite.wp_api_keyexists - No API calls
- No periodic checks
- No error states
- No pending states
Logic:
useEffect(() => {
if (wordPressIntegration && wordPressIntegration.is_active && site?.wp_api_key) {
setIntegrationStatus('configured');
} else {
setIntegrationStatus('not_configured');
}
}, [wordPressIntegration, site]);
UI:
<span className={`inline-block w-6 h-6 rounded-full ${
integrationStatus === 'configured' ? 'bg-green-500' : 'bg-gray-300'
}`} />
<span>{integrationStatus === 'configured' ? 'Configured' : 'Not configured'}</span>
4. Simplified Sync Handler ✅
File: frontend/src/pages/Sites/Settings.tsx
Removed:
- Complex fallback logic for sites without integration
- Collection-level test connection attempts
- Multiple error handling paths with cooldowns
- Integration status updates in sync handler
New simplified logic:
const handleManualSync = async () => {
if (wordPressIntegration && wordPressIntegration.id) {
const res = await integrationApi.syncIntegration(wordPressIntegration.id, 'incremental');
if (res && res.success) {
toast.success('Sync started');
setTimeout(() => loadContentTypes(), 1500);
} else {
toast.error(res?.message || 'Sync failed to start');
}
} else {
toast.error('No integration configured. Please configure WordPress integration first.');
}
}
Benefits
Performance
- ✅ No unnecessary API calls - Indicator no longer polls every 5 minutes
- ✅ Instant status - No waiting for "pending" state
- ✅ No cooldown complexity - Removed 60-minute error cooldown logic
User Experience
- ✅ Cleaner UI - Removed cluttered cards and buttons
- ✅ Simple toggle - One-click enable/disable instead of checkboxes + save button
- ✅ Clear status - Green = configured & enabled, Gray = not configured
- ✅ Less confusion - No "connected" vs "error" vs "pending" states
Code Quality
- ✅ Reduced complexity - Removed ~150 lines of complex test logic
- ✅ Single source of truth - Status based on actual database state, not API tests
- ✅ Predictable - No async operations affecting indicator state
What the Indicator Now Shows
| Scenario | Indicator | Reason |
|---|---|---|
| API key exists + Integration enabled | 🟢 Configured | Both requirements met |
| API key exists + Integration disabled | ⚪ Not configured | Integration not enabled |
| No API key | ⚪ Not configured | No API key |
| No integration record | ⚪ Not configured | Not set up |
What Controls Communication
Communication with WordPress plugin is now controlled by:
- Integration toggle - Must be enabled (checked in
WordPressIntegrationForm) - API key presence - Must exist in
site.wp_api_key - Backend validation - Backend still validates credentials when actual sync/test happens
Testing Instructions
-
Toggle behavior:
- Go to Integrations tab
- Generate API key if needed
- Toggle should appear in header
- Click to enable/disable
- Indicator should update immediately
-
Indicator behavior:
- With toggle ON + API key → Green "Configured"
- With toggle OFF → Gray "Not configured"
- Without API key → Gray "Not configured"
-
Sync behavior:
- Can only sync if integration is enabled and API key exists
- Clicking "Sync Now" without proper setup shows error toast
Files Modified
-
frontend/src/components/sites/WordPressIntegrationForm.tsx- Removed Integration Settings card (~100 lines)
- Added toggle switch in header
- Added
handleToggleIntegration()function
-
frontend/src/pages/Sites/Settings.tsx- Removed complex indicator logic (~80 lines)
- Added simple
integrationStatusstate - Simplified
handleManualSync() - Updated indicator UI
Migration Notes
Breaking changes:
- None - Toggle uses same backend field (
is_active) - Existing integrations will maintain their state
Behavioral changes:
- Indicator no longer attempts to test actual connection
- Status is now instant (no API calls)
- No more "error" or "pending" states