🎃 Add a shared EmptyState component and use it for the "No … yet" screens
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- react, typescript
- 領域
- frontend
調査の方向性
Start with the reference empty state in packages/frontend/src/app/connectors/page.tsx:390-420, then read components/ui/stat-card.tsx for tone tokens and components/ui/button.tsx for CTA patterns. Build the shared component at components/ui/empty-state.tsx and convert the listed pages, preserving role and deployment branches. Run lint and the specified Playwright tests; done means all listed states use the component and the mobile test and CTA spec pass.
索引モデルが issue の本文から書いたものです。
説明
Part of the October Challenge #846.
Why
Each page writes its own empty state. The Connectors page has a well-designed one (icon, title, explanation, three actions), while most other pages show a single grey line such as "No custom roles yet." with no next step. A new user on a fresh instance hits most of these screens, so they are effectively onboarding. One shared EmptyState (icon + title + description + action) makes them consistent and gives every one of them a next step. Linear, Vercel and GitHub all use one pattern for this.
Self-hosted vs Cloud
- Self-hosted: frontend-only, same in Community and Business.
- Cloud (
DEPLOYMENT_MODE=cloud): same. No data or API changes. Keep the Cloud/self-hosted branches that already exist (e.g. License page: "Start 7-Day Free Trial" on Cloud vs a key form on self-hosted). - Who can use it: everyone. Keep the existing role checks on actions. If a page already shows an admin-only action (
isAdminin Skills and Knowledge graph), keep it admin-only, and show the "ask an admin" text to everyone else. Never show a CTA that leads to a 403.
What to build
- Create
packages/frontend/src/components/ui/empty-state.tsx:
It must work in light and dark themes (use the CSS variables only), be responsive, and use semantic markup (a heading + paragraph is enough).<EmptyState icon={<ServerIcon />} // optional ReactNode; inline SVGs like the rest of the app tone="emerald" // optional, reuse the Tone tokens from ui/badge + stat-card.tsx title="No MCP servers yet" description="Group connectors into an endpoint your AI client can connect to." action={<Button onClick={…}>Create your first MCP server</Button>} // optional, 0..n actions variant="card" | "dashed" | "inline" // inline = compact, for use inside a card/table /> - Replace these inline empty states with it:
app/mcp-server/page.tsx:170-175: "No MCP servers configured yet." (already has icon + button: convert it).app/mcp-server/page.tsx:176-178: "No MCP servers match your search." → add a "Clear search" action.app/logs/page.tsx:290-313: the three states (end of log / filters / nothing yet). Link the "nothing yet" one to/mcp-server.app/settings/roles/page.tsx:295-297: "No custom roles yet." → CTA opens the existing create form.app/knowledge-graph/skills/page.tsx:235-250: "No skills yet" (keep the admin/non-admin text).app/knowledge-graph/page.tsx:322-326: "No graph yet" (keep the admin/non-admin text).app/settings/license/page.tsx:229-233: "No license registered yet." (keep the Cloud/self-hosted branch).app/connectors/store/page.tsx:462-463: "No adapters available yet."app/mcp-server/[id]/page.tsx:795-796: "No connectors available. Create a connector first." → link to/connectors/new.app/analytics/page.tsx:226and:281: "No data in range." (inline variant).app/page.tsx:290: dashboard "No health data yet" (inline variant).app/connectors/page.tsx:390-420: the existing rich one. Rebuild it with the component without changing how it looks.
- Do not convert
components/tool-editor/index.tsx:976("No parameters yet") or theemptyMessagestrings passed toMultiSelect. Those are form hints, not page empty states.
Where to look
packages/frontend/src/app/connectors/page.tsx:390-420: the reference design.packages/frontend/src/components/ui/stat-card.tsx:5-13: tone → color mapping to reuse.packages/frontend/src/components/ui/button.tsx:Button/buttonVariantsforLinkCTAs.packages/frontend/tests/e2e/mobile.spec.ts:295-299: asserts "No connectors yet" sits inside an ancestor with classborder-dashed. Keep that class on thedashedvariant, or update the test in the same PR.app/admin/roles/page.tsx:262-264is a duplicate of the settings roles page with no nav link. Leave it alone.
Acceptance criteria
-
EmptyStateexists withicon,title,description,action,variant, and is used in all the places listed above. - No CTA shown to a role that can't use it. Existing Cloud/self-hosted branches are preserved.
- Light/dark and phone width look right (attach before/after screenshots of 3+ pages).
- Playwright:
mobile.spec.tsstill passes. Add one spec that renders/mcp-serverwith a stubbed empty list (pattern:redesign.spec.ts) and clicks the CTA. Run withcd packages/frontend && npm run test:e2e.npm run lintis clean. - No docs change needed. Add a short JSDoc on the component.
Out of scope
- Illustrations or new icon libraries (
lucide-reactis installed but unused; stay with inline SVGs for consistency). - Rewriting copy beyond what the new layout needs.
- Loading skeletons and error states.
Size
M (1–2 days)
How to claim
Comment "I'd like to work on this" and we'll assign you. Rules in #846.
- 主要言語
- TypeScript
- スター
- 856
- フォーク
- 82
- 平均マージ
- 7時間 30分
- マージ済み PR(30日)
- 121
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
HelpCode-ai/anythingmcp のほかの issue
-
good first issue hacktoberfest
難易度 2/5 半日 初心者へのやさしさ 70/100
HelpCode-ai/anythingmcp#996 ·
メンテナーはふだん 1 日以内に返信
-
good first issue hacktoberfest
難易度 2/5 半日 初心者へのやさしさ 72/100
HelpCode-ai/anythingmcp#995 ·
メンテナーはふだん 1 日以内に返信
-
enhancement good first issue hacktoberfest help wanted
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
HelpCode-ai/anythingmcp#982 ·
メンテナーはふだん 1 日以内に返信
-
good first issue hacktoberfest
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
HelpCode-ai/anythingmcp#745 ·
メンテナーはふだん 1 日以内に返信
-
🐣 Good first issue: contribute a new MCP adapter再び着手できるかも @7k777 が 22 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンenhancement good first issue hacktoberfest help wanted
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
HelpCode-ai/anythingmcp#150 · コメント 18 件 ·
メンテナーはふだん 1 日以内に返信
HelpCode-ai/anythingmcp の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
apache/rocketmq-dashboard#6610 ·
メンテナーはふだん 3 日以内に返信
-
nextjs-tracking
難易度 2/5 1〜3時間 初心者へのやさしさ 69/100
cloudflare/vinext#3920 ·
メンテナーはふだん 1 日以内に返信
-
Team:Dashboards
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
elastic/kibana#297299 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
analytics beginner friendly community contributions-welcome good first issue hacktoberfest help wanted up-for-grabs
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
affected/v17 affected/v18 area/frontend type/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
umbraco/Umbraco-CMS#24186 ·
メンテナーはふだん 2 日以内に返信