import { useIntegrations, useConnections, useMembrane } from '@membranehq/react'
import { useMemo } from 'react'
function IntegrationsPage() {
const membrane = useMembrane()
const { items: integrations, loading: integrationsLoading } = useIntegrations()
const { items: connections, loading: connectionsLoading } = useConnections()
// Split integrations into connected vs available
const connectedIntegrationIds = useMemo(() => new Set(connections?.map((c) => c.integrationId)), [connections])
const availableIntegrations = useMemo(
() => integrations?.filter((i) => !connectedIntegrationIds.has(i.id)),
[integrations, connectedIntegrationIds],
)
if (integrationsLoading || connectionsLoading) return <div>Loading...</div>
return (
<div>
{/* Section 1: Connected accounts */}
<h2>Your Connections</h2>
{connections?.length === 0 && <p>No connections yet.</p>}
{connections?.map((connection) => (
<div key={connection.id}>
<span>{connection.name}</span>
{connection.disconnected ? (
<button onClick={() => membrane.ui.connect({ connectionId: connection.id })}>Reconnect</button>
) : (
<button onClick={() => membrane.connection(connection.id).archive()}>Disconnect</button>
)}
</div>
))}
{/* Section 2: Available apps to connect */}
<h2>Available Integrations</h2>
{availableIntegrations?.map((integration) => (
<div key={integration.key}>
<img src={integration.logoUri} alt='' width={24} />
<span>{integration.name}</span>
<button onClick={() => membrane.ui.connect({ integrationKey: integration.key })}>Connect</button>
</div>
))}
</div>
)
}