mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-24 22:15:18 +00:00
Major additions: - Complete Next.js studio application with 1600+ components - Docker support (Dockerfile.combined, docker-compose.yml) - GCP deployment documentation and benchmarks - SQL benchmark scripts for performance testing - Sentry integration for monitoring - Comprehensive test suite and mocks Studio features: - Dashboard and admin interfaces - Data visualization components - Authentication and user management - API integration with RuVector backend - Static data and public assets 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
import { ExternalLink } from 'lucide-react'
|
|
|
|
import { useVercelRedirectQuery } from 'data/integrations/vercel-redirect-query'
|
|
import { useAwsRedirectQuery } from 'data/integrations/aws-redirect-query'
|
|
import { Alert_Shadcn_, AlertTitle_Shadcn_, Button } from 'ui'
|
|
import PartnerIcon from './PartnerIcon'
|
|
import { MANAGED_BY, ManagedBy } from 'lib/constants/infrastructure'
|
|
|
|
interface PartnerManagedResourceProps {
|
|
managedBy: ManagedBy
|
|
resource: string
|
|
cta?: {
|
|
installationId?: string
|
|
organizationSlug?: string
|
|
overrideUrl?: string
|
|
path?: string
|
|
message?: string
|
|
}
|
|
}
|
|
|
|
export const PARTNER_TO_NAME = {
|
|
[MANAGED_BY.VERCEL_MARKETPLACE]: 'Vercel Marketplace',
|
|
[MANAGED_BY.AWS_MARKETPLACE]: 'AWS Marketplace',
|
|
[MANAGED_BY.SUPABASE]: 'Supabase',
|
|
} as const
|
|
|
|
function PartnerManagedResource({ managedBy, resource, cta }: PartnerManagedResourceProps) {
|
|
const ctaEnabled = cta !== undefined
|
|
|
|
// Use appropriate redirect query based on partner
|
|
const vercelQuery = useVercelRedirectQuery(
|
|
{
|
|
installationId: cta?.installationId,
|
|
},
|
|
{
|
|
enabled: ctaEnabled && managedBy === MANAGED_BY.VERCEL_MARKETPLACE,
|
|
}
|
|
)
|
|
|
|
const awsQuery = useAwsRedirectQuery(
|
|
{
|
|
organizationSlug: cta?.organizationSlug,
|
|
},
|
|
{
|
|
enabled: ctaEnabled && managedBy === MANAGED_BY.AWS_MARKETPLACE,
|
|
}
|
|
)
|
|
|
|
if (managedBy === MANAGED_BY.SUPABASE) return null
|
|
|
|
const { data, isLoading, isError } =
|
|
managedBy === MANAGED_BY.VERCEL_MARKETPLACE ? vercelQuery : awsQuery
|
|
|
|
const ctaUrl = (data?.url ?? '') + (cta?.path ?? '')
|
|
|
|
return (
|
|
<Alert_Shadcn_ className="flex flex-col items-center gap-y-2 border-0 rounded-none">
|
|
<PartnerIcon organization={{ managed_by: managedBy }} showTooltip={false} size="large" />
|
|
|
|
<AlertTitle_Shadcn_ className="text-sm">
|
|
{resource} are managed by {PARTNER_TO_NAME[managedBy]}.
|
|
</AlertTitle_Shadcn_>
|
|
|
|
{ctaEnabled && (
|
|
<Button asChild type="default" iconRight={<ExternalLink />} disabled={isLoading || isError}>
|
|
<a href={cta.overrideUrl ?? ctaUrl} target="_blank" rel="noopener noreferrer">
|
|
{cta.message || `View ${resource} on ${PARTNER_TO_NAME[managedBy]}`}
|
|
</a>
|
|
</Button>
|
|
)}
|
|
</Alert_Shadcn_>
|
|
)
|
|
}
|
|
|
|
export default PartnerManagedResource
|