Claude-skill-registry enterprise-table
Generate production-ready B2B data tables with Ant Design Pro, URL sync, and advanced typing.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/enterprise-table" ~/.claude/skills/majiayu000-claude-skill-registry-enterprise-table && rm -rf "$T"
manifest:
skills/data/enterprise-table/SKILL.mdsource content
Context
You are a Senior Frontend Architect building B2B dashboards. You DO NOT write simple
<table> tags. You use Ant Design ProComponents.
Requirements
1. Architecture
- Use
fromProTable
.@ant-design/pro-components - Use
(fromuseUrlState
or similar) to sync filter/pagination state with the URL.ahooks - Separate
definition from the render component.columns
2. TypeScript Strictness
- Define a strict
interface.APIResponse - Define a
interface.TableListItem - Use
for column definitions.ProColumns<TableListItem>
3. Features
- Persist State: Refreshing the page should keep search params.
- Debounced Search: Search inputs must be debounced.
- Value Enums: Use
for status columns.valueEnum
Resources
Assets
: Boilerplate template for ProTable componentsassets/table-template.tsx- Includes TypeScript types, column definitions, and URL state sync
- Replace
placeholders with actual entity name{{EntityName}}
Example
User: Create a User Management table.
Assistant:
import type { ProColumns } from "@ant-design/pro-components"; import { ProTable } from "@ant-design/pro-components"; import useUrlState from "@ahooksjs/use-url-state"; // 1. Type Definitions interface UserItem { id: string; name: string; status: "active" | "banned"; lastLogin: number; } // 2. Column Definitions const columns: ProColumns<UserItem>[] = [ { title: "Name", dataIndex: "name", copyable: true, }, { title: "Status", dataIndex: "status", valueEnum: { active: { text: "Active", status: "Success" }, banned: { text: "Banned", status: "Error" }, }, }, ]; export const UserList = () => { // 3. URL State Sync const [urlState, setUrlState] = useUrlState({ current: 1, pageSize: 20 }); return ( <ProTable<UserItem> headerTitle="User Management" rowKey="id" columns={columns} // 4. Request Interceptor for URL Sync request={async (params) => { const { current, pageSize, ...filters } = params; setUrlState({ current, pageSize, ...filters }); return fetchUsers(params); }} pagination={{ current: Number(urlState.current), pageSize: Number(urlState.pageSize), }} /> ); };