- Rename all DB tables: properties → projects, properties_addresses → projects_addresses, properties_models → projects_models, property_likes → projects_likes - Add projects_likes as proper Drizzle schema table (was SQL-only before) - Rename ID prefixes: property_xxx → project_xxx - Rename auth_sessions column: active_property_id → active_project_id - Simplify project creation: address is now optional (no longer required to get started) - Update all actions, stores, types, components, and routes - Rename route: /editor/[propertyId] → /editor/[projectId] - Add SQL migration for table/column/index/policy/function renames - Update RPC functions: increment_project_views, get_project_like_count - Update storage bucket reference: project-thumbnails - All types/exports follow existing Drizzle patterns (pgTable, relations, zod schemas)
31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
'use client'
|
|
|
|
import Editor from '@/components/editor'
|
|
import { useParams } from 'next/navigation'
|
|
import { useEffect, useLayoutEffect } from 'react'
|
|
import { useProjectStore } from '@/features/community/lib/projects/store'
|
|
import { useAuth } from '@/features/community/lib/auth/hooks'
|
|
|
|
export default function EditorPage() {
|
|
const params = useParams()
|
|
const projectId = params.projectId as string
|
|
const { isAuthenticated } = useAuth()
|
|
const setActiveProject = useProjectStore((state) => state.setActiveProject)
|
|
|
|
// Use layoutEffect to set active project BEFORE the editor renders and hooks run
|
|
useLayoutEffect(() => {
|
|
// For authenticated users with cloud projects, set the active project from URL
|
|
if (isAuthenticated && projectId && !projectId.startsWith('local_')) {
|
|
setActiveProject(projectId)
|
|
}
|
|
}, [projectId, isAuthenticated, setActiveProject])
|
|
|
|
return (
|
|
<div className="flex h-screen w-full max-w-screen">
|
|
<div className="relative h-full w-full">
|
|
<Editor projectId={projectId} />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|