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

126 lines
5.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>
)
}