Files
pulse/app/sites/[id]/settings/page.tsx
Usman Baig cc3047edba refactor: replace legacy settings pages with redirect handlers + delete unused files
- /sites/:id/settings → redirect handler for GSC OAuth callback + deep links
- /org-settings → redirect handler for tab deep links
- Deleted: OrganizationSettings.tsx, SettingsModalWrapper.tsx, settings-modal-context.tsx
2026-03-26 10:50:36 +01:00

78 lines
2.5 KiB
TypeScript

'use client'
import { useEffect } from 'react'
import { useParams, useRouter, useSearchParams } from 'next/navigation'
import { toast } from '@ciphera-net/ui'
import { useUnifiedSettings } from '@/lib/unified-settings-context'
import { useGSCStatus } from '@/lib/swr/dashboard'
import { Spinner } from '@ciphera-net/ui'
/**
* Legacy settings page — now a redirect handler.
*
* The unified settings modal has replaced the full-page settings.
* This page only exists to handle:
* 1. GSC OAuth callbacks (?gsc=connected|denied|error|no_property)
* 2. Deep links with ?tab= params
* 3. Direct navigation — redirects to site dashboard and opens modal
*/
export default function SettingsRedirect() {
const params = useParams()
const router = useRouter()
const searchParams = useSearchParams()
const siteId = params.id as string
const { openUnifiedSettings } = useUnifiedSettings()
const { mutate: mutateGSCStatus } = useGSCStatus(siteId)
useEffect(() => {
const gsc = searchParams.get('gsc')
const tab = searchParams.get('tab')
// Handle GSC OAuth callback
if (gsc) {
switch (gsc) {
case 'connected':
toast.success('Google Search Console connected successfully')
mutateGSCStatus()
break
case 'denied':
toast.error('Google authorization was denied')
break
case 'no_property':
toast.error('No matching Search Console property found for this site')
break
case 'token_error':
case 'error':
toast.error('Failed to connect Google Search Console')
break
}
// Redirect to site page and open integrations tab
router.replace(`/sites/${siteId}`)
setTimeout(() => openUnifiedSettings({ context: 'site', tab: 'integrations' }), 100)
return
}
// Handle deep links with ?tab= param
const tabMap: Record<string, string> = {
general: 'general',
visibility: 'visibility',
data: 'privacy',
privacy: 'privacy',
bot: 'bot-spam',
goals: 'goals',
notifications: 'reports',
integrations: 'integrations',
}
const mappedTab = tab ? tabMap[tab] || 'general' : 'general'
router.replace(`/sites/${siteId}`)
setTimeout(() => openUnifiedSettings({ context: 'site', tab: mappedTab }), 100)
}, [siteId, searchParams, router, openUnifiedSettings, mutateGSCStatus])
return (
<div className="flex items-center justify-center py-24">
<Spinner className="w-6 h-6 text-neutral-500" />
</div>
)
}