import React, { useState } from 'react'; import { Card } from '../../ui/card'; import { Button } from '../../ui/button'; import { CheckCircle, ExternalLink, RefreshCw, AlertCircle, } from 'lucide-react'; import { useToast } from '../../../components/feedback/ToastProvider'; interface Integration { id: string; name: string; description: string; icon: string; // URL or placeholder connected: boolean; status: 'active' | 'error' | 'syncing' | 'disconnected'; lastSync?: string; } const MOCK_INTEGRATIONS: Integration[] = [ { id: '1', name: 'Spotify', description: 'Display your top tracks and sync playlists.', icon: 'https://upload.wikimedia.org/wikipedia/commons/1/19/Spotify_logo_without_text.svg', connected: true, status: 'active', lastSync: '10 mins ago', }, { id: '2', name: 'SoundCloud', description: 'Import tracks directly from your SC account.', icon: 'https://a-v2.sndcdn.com/assets/images/sc-icons/ios-a62dfc8f.png', connected: false, status: 'disconnected', }, { id: '3', name: 'Discord', description: 'Show your production status in rich presence.', icon: 'https://assets-global.website-files.com/6257adef93867e56f84d3092/636e0a6a49cf127bf92de1e2_icon_clyde_blurple_RGB.png', connected: true, status: 'active', lastSync: 'Live', }, { id: '4', name: 'Stripe', description: 'Process payments for your marketplace sales.', icon: 'https://upload.wikimedia.org/wikipedia/commons/b/ba/Stripe_Logo%2C_revised_2016.svg', connected: true, status: 'error', lastSync: 'Failed 2h ago', }, { id: '5', name: 'Dropbox', description: 'Auto-backup your projects to the cloud.', icon: 'https://aem.dropbox.com/cms/content/dam/dropbox/www/en-us/branding/app-icons/dropbox-app-icon-blue.svg', connected: false, status: 'disconnected', }, ]; export const IntegrationsView: React.FC = () => { const { addToast } = useToast(); const [integrations, setIntegrations] = useState(MOCK_INTEGRATIONS); const toggleConnection = (id: string) => { setIntegrations((prev) => prev.map((int) => { if (int.id === id) { const newState = !int.connected; addToast( newState ? `Connected to ${int.name}` : `Disconnected from ${int.name}`, newState ? 'success' : 'info', ); return { ...int, connected: newState, status: newState ? 'active' : 'disconnected', }; } return int; }), ); }; return (

CONNECTED APPS

Supercharge your workflow with external tools.

{integrations.map((integration) => (
{integration.name}

{integration.name}

{integration.status === 'active' && ( Active )} {integration.status === 'error' && ( Error )} {integration.status === 'disconnected' && ( Not Connected )} {integration.lastSync && ( • {integration.lastSync} )}
{integration.connected && ( )}

{integration.description}

{integration.connected ? ( <> ) : ( )}
))}
); };