// Entries — 3 tabs: 課題 / フェーズ / 用語 const { useState, useMemo, useRef, useEffect } = React; function Entries() { const [domain, setDomain] = useState("corporate"); const [tab, setTab] = useState("issues"); const [query, setQuery] = useState(""); const data = window.BRANDRI_DATA; // 最上段: コーポレート / 事業 の2区分。各項目の domain(corporate/business/both)で絞り込む。 const domains = [ { id: "corporate", ja: "コーポレートブランディング", en: "Corporate Branding", desc: "企業ブランド — 採用・社内浸透・全社の一貫性・上場準備" }, { id: "business", ja: "事業ブランディング", en: "Business Branding", desc: "事業・製品ブランド — 差別化・新規事業・市場での立ち位置" }, ]; const tabs = [ { id: "issues", num: "A", ja: "課題から探す", en: "By Issue" }, { id: "phases", num: "B", ja: "フェーズから探す", en: "By Phase" }, { id: "terms", num: "C", ja: "用語から探す", en: "By Term" }, ]; const inDomain = (i) => i.domain === domain || i.domain === "both"; const current = data[tab].filter(inDomain); const filtered = useMemo(() => { if (!query.trim()) return current; const q = query.toLowerCase(); return current.filter(i => i.title.toLowerCase().includes(q) || i.desc.toLowerCase().includes(q) ); }, [query, current]); const placeholder = { issues: "例: 採用 / 値引き / 新規事業", phases: "例: PMF後 / 上場 / 海外展開", terms: "例: MVV / ポジショニング / トーン", }[tab]; return (
{domains.map(dm => ( ))}
{tabs.map(t => ( ))}
setQuery(e.target.value)} /> {String(filtered.length).padStart(2,"0")} / {String(current.length).padStart(2,"0")}
{filtered.map((item, i) => ( {tab === "terms" ? `— ${item.num} —` : `№ ${item.num}`}
{item.title}
{item.desc}
Read →
))} {filtered.length === 0 && (
— No matches — 別のキーワードでお試しください
)}
); } ReactDOM.createRoot(document.getElementById("entries-app")).render();