// v2 Home — Claude-Design–style project picker (real backend)
const V2HomeStage = ({ projects, user, onOpenProject, onNewProject }) => {
const [recentTab, setRecentTab] = React.useState('Recent');
const [search, setSearch] = React.useState('');
const [name, setName] = React.useState('');
const [creating, setCreating] = React.useState(false);
const list = (projects || []).map(p => ({
id: p.id,
name: p.name,
sub: `${p.client || ''} ${p.created_at ? '· ' + new Date(p.created_at).toLocaleDateString() : ''}`.trim(),
when: p.created_at ? new Date(p.created_at).toLocaleDateString() : 'Recent',
scope: p._scope || 'mine',
isOwner: !!p._is_owner,
fileCount: (p.folders || []).reduce((n,f) => n + (f.files||[]).length, 0),
raw: p,
}));
const filtered = list.filter(p => {
if (recentTab === 'Your Projects' && p.scope !== 'mine') return false;
if (recentTab === 'Team' && p.scope !== 'team') return false;
return !search || p.name.toLowerCase().includes(search.toLowerCase());
});
const showTutorial = recentTab === 'Recent' && !search;
const create = async () => {
if (!name.trim() || creating) return;
setCreating(true);
try { await onNewProject({client:'', name: name.trim(), brief:''}); setName(''); }
finally { setCreating(false); }
};
return (
{/* LEFT RAIL */}
{/* RIGHT MAIN */}
{['Recent','Your Projects','Team'].map(t => (
))}
{showTutorial &&
}
{filtered.map(p => (
))}
{filtered.length===0 && !showTutorial && (
{recentTab === 'Team'
? '팀원이 공유한 프로젝트가 없습니다.'
: (projects.length === 0 ? '아직 프로젝트가 없어요. 왼쪽에서 새 프로젝트를 만들어보세요.' : '검색 결과 없음')}
)}
);
};
const V2TutorialCard = () => (
Learn about
Palette Mosaic
Quick tutorial →
);
const V2DocStack = () => (
);
const V2LivePreview = () => (
{[0,1,2,3,4,5].map(i=>(
))}
);
window.V2HomeStage = V2HomeStage;