hololake-system-architecture/product-source/hololake-platform/src/TeamFoundationApp.tsx

126 lines
5.7 KiB
TypeScript
Raw Normal View History

import { useState } from 'react'
import architecture from '../src-tauri/resources/public-architecture/gls-system-architecture.json'
import './App.css'
interface TeamFoundationAppProps {
onOpenKnowledgeSpace: () => void
}
const ZERO_SENSE_DOMAIN_ID = 'GH-ZEROSENSE-001'
const KNOWLEDGE_MODULE_ID = 'MOD-KNOWLEDGE-001'
export default function TeamFoundationApp({ onOpenKnowledgeSpace }: TeamFoundationAppProps) {
const [activeDomainId, setActiveDomainId] = useState(architecture.domains[0].id)
const activeDomain = architecture.domains.find((domain) => domain.id === activeDomainId)
?? architecture.domains[0]
const isZeroSenseDomain = activeDomain.id === ZERO_SENSE_DOMAIN_ID
const openKnowledgeSpace = () => {
setActiveDomainId(ZERO_SENSE_DOMAIN_ID)
onOpenKnowledgeSpace()
}
return (
<main
className="team-foundation team-foundation--lightweight"
aria-label="光湖灯塔 AI 应用操作系统"
data-architecture-compatibility={architecture.compatibility_ids[0]}
data-source-repository={architecture.development_repository.url}
>
<aside className="team-foundation__sidebar">
<div className="team-foundation__brand">
<span className="team-foundation__brand-mark" aria-hidden="true"></span>
<div><strong></strong><span>HOLOLAKE LIGHTHOUSE</span></div>
</div>
<nav className="team-foundation__nav" aria-label="光湖四域">
<p></p>
{architecture.domains.map((domain) => (
<button
className={domain.id === activeDomain.id ? 'is-active' : ''}
data-tone={domain.color}
key={domain.id}
onClick={() => setActiveDomainId(domain.id)}
type="button"
>
<span className="team-foundation__domain-dot" aria-hidden="true" />
<span><strong>{domain.name_zh}</strong><small>{domain.eyebrow_zh}</small></span>
</button>
))}
</nav>
<section className="team-foundation__gate" aria-label="第五域入口">
<span className="team-foundation__gate-icon" aria-hidden="true"></span>
<div><strong>{architecture.fifth_domain_entry.name_zh}</strong><small></small></div>
<span className="team-foundation__lock"></span>
</section>
<footer className="team-foundation__sidebar-footer">
<span className="team-foundation__status-dot" />
<code>{architecture.id}</code>
</footer>
</aside>
<section className="team-foundation__workspace">
<header className="team-foundation__topbar">
<div><span>AI </span><strong>{architecture.product.version_label}</strong></div>
<span> · </span>
</header>
<div className="team-foundation__content">
<section className="team-foundation__hero">
<div className="team-foundation__hero-copy">
<p>GUANGHU · MODULAR AI OPERATING SYSTEM</p>
<h1>{architecture.product.name_zh}</h1>
<h2>{activeDomain.name_zh}</h2>
<p>{activeDomain.description_zh}</p>
<div className="team-foundation__hero-actions">
{isZeroSenseDomain ? (
<button type="button" aria-label="从光湖零感域进入 AI 知识空间" onClick={openKnowledgeSpace}> AI <span aria-hidden="true"></span></button>
) : (
<span></span>
)}
</div>
</div>
</section>
<section className="team-foundation__modules" aria-label="热插拔模块">
<div className="team-foundation__section-heading">
<div><p>MODULES</p><h2>AI </h2></div>
<span>使</span>
</div>
<div className="team-foundation__module-grid">
{architecture.modules.map((module, index) => {
const isKnowledgeModule = module.id === KNOWLEDGE_MODULE_ID
return (
<article className="team-foundation__module" key={module.id}>
<div className="team-foundation__module-icon" aria-hidden="true">{index === 0 ? '模' : index === 1 ? '知' : '创'}</div>
<h3>{module.name_zh}</h3>
<p>{module.description_zh}</p>
{isKnowledgeModule ? (
<button type="button" onClick={openKnowledgeSpace}> AI </button>
) : (
<button type="button" disabled aria-label={`${module.name_zh} 尚未接入`}></button>
)}
</article>
)
})}
</div>
</section>
<section className="team-foundation__access-row">
<article className="team-foundation__fifth-domain">
<div><span>CONTROLLED ACCESS</span><h2>{architecture.fifth_domain_entry.name_zh}</h2></div>
<p>{architecture.fifth_domain_entry.description_zh}</p>
<button disabled type="button">{architecture.fifth_domain_entry.status_zh}</button>
</article>
<article className="team-foundation__boundaries">
<span>PUBLIC BUILD BOUNDARY</span><h2></h2>
<ul>{architecture.public_boundaries.map((boundary) => <li key={boundary}>{boundary}</li>)}</ul>
</article>
</section>
</div>
</section>
</main>
)
}