🎃 Add a shared EmptyState component and use it for the "No … yet" screens
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 55/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- react, typescript
- Lĩnh vực
- frontend
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- TypeScript
- Star
- 856
- Fork
- 82
- Merge trung bình
- 5 giờ 18 phút
- Pull request đã merge (30 ngày)
- 162
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của HelpCode-ai/anythingmcp
-
Docs: document all SMTP_* and other undocumented env vars for self-hostingCó thể đã có người làm @notlakshitha đã nhận 3 ngày trước. Đang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
HelpCode-ai/anythingmcp#1049 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue hacktoberfest
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 70/100
HelpCode-ai/anythingmcp#996 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue hacktoberfest
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 72/100
HelpCode-ai/anythingmcp#995 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue hacktoberfest help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
HelpCode-ai/anythingmcp#982 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Upload the new social previewCó thể đã có người làm @helpcodeai đã nhận 3 ngày trước. Đang mở
HelpCode-ai/anythingmcp#1087 · 6 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của HelpCode-ai/anythingmcp
Issue tương tự
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
lingdojo/kana-dojo#32663 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Admin: Title Separator field can't be cleared (input falls back to "|")Có thể đã có người làm @emdashbot đã nhận hôm nay. Đang mởbot:bug bot:in-review
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
emdash-cms/emdash#4236 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
PHP workflow streaming requests buffer the full SSE responseCó thể đã có người làm @Winoren đã nhận hôm nay. Đang mởreview: medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
langgenius/dify#44270 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area:holodeck review-finding
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
hyperdrive-technology/holodeck#142 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
session-worker-compile.yml uses a floating oven-sh/setup-bun@v2 tag instead of the pinned SHAĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
code-yeongyu/senpi#3573 ·
Maintainer thường phản hồi trong vòng 1 ngày