[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K2HJKMA7FGW2VWZA5SAFS4":3,"skill-same:01M6K2HJKMA7FGW2VWZA5SAFS4":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6K2HJKMA7FGW2VWZA5SAFS4","minipower-frontend-crud-react-route-pages",null,"Mẫu CRUD theo route của kit @platform\u002Fcore — {Feature}ListPage · {Feature}FormPage (mode create\u002Fedit, tự nạp bản ghi khi sửa) · {Feature}DetailPage, điều hướng giữa màn bằng navigate{Feature}(get{Feature}*Path(id)), host bọc wrapper useParams. Dùng khi thực thể nhiều trường, cần URL riêng cho tạo\u002Fsửa\u002Fchi tiết.","hoangnh2412\u002Fminipower","hoangnh2412","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9604921?v=4","01M6K2685NFX1C55B4TR54NT7S","Hoàng Nguyễn","01M6K268AEV8J57BMZJEKCJNZE",7,"MIT","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ffrontend\u002Fskills\u002Fminipower-frontend-crud-react\u002Fpatterns\u002Froute-pages\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"pages","minipower frontend crud react route pages","minipower frontend crud react","frontend","route","crud","react","edit","get","platform","feature","create","host","id","chi","URL","kit","khi","mode","core","2026-11-10 10:12:30",false,"---\nname: minipower-frontend-crud-react-route-pages\ndescription: Mẫu CRUD theo route của kit @platform\u002Fcore — {Feature}ListPage · {Feature}FormPage (mode create\u002Fedit, tự nạp bản ghi khi sửa) · {Feature}DetailPage, điều hướng giữa màn bằng navigate{Feature}(get{Feature}*Path(id)), host bọc wrapper useParams. Dùng khi thực thể nhiều trường, cần URL riêng cho tạo\u002Fsửa\u002Fchi tiết.\n---\n\n# Mẫu theo route — List · Form · Detail\n\n## Copy\n\n| Template | Đích |\n|---|---|\n| [..\u002F..\u002Ftemplates\u002Fshared\u002Fcomponents\u002F](..\u002F..\u002Ftemplates\u002Fshared\u002Fcomponents\u002F) | `src\u002Ffeatures\u002F{feature}\u002Fcomponents\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}List\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}List\u002F) | `pages\u002F{Feature}List\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Form\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Form\u002F) | `pages\u002F{Feature}Form\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Detail\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Detail\u002F) | `pages\u002F{Feature}Detail\u002F` |\n\nBarrel export cả ba page — [architecture templates\u002Findex.ts](..\u002F..\u002F..\u002Fminipower-frontend-architecture-react\u002Ftemplates\u002Findex.ts) đã kèm sẵn.\n\n## Ba page nối nhau thế nào\n\n```text\n{Feature}ListPage ──Thêm mới──▶ navigate{Feature}(get{Feature}CreatePath())        ─▶ {Feature}FormPage mode=\"create\"\n      │          ──Xem────────▶ navigate{Feature}(get{Feature}DetailPath(id))      ─▶ {Feature}DetailPage {feature}Id\n      │          ──Sửa────────▶ navigate{Feature}(get{Feature}EditPath(id))        ─▶ {Feature}FormPage mode=\"edit\" {feature}Id\n      └── xoá \u002F đổi trạng thái: tại chỗ (ConfirmDialog · handleAction) rồi reload\n{Feature}FormPage ──lưu xong \u002F Hủy──▶ navigate{Feature}(get{Feature}ListPath())\n```\n\nMọi điều hướng mặc định tắt được bằng `useRoutes={false}` (host tự truyền `onCreate` \u002F `onView` \u002F `onEdit` \u002F `onCancel`).\n\n## Host gắn route\n\n`id` đọc ở host bằng wrapper `useParams` — page không import router:\n\n```tsx\nfunction {Feature}EditRoute() {\n  const { id = '' } = useParams()\n  return \u003C{Feature}FormPage mode=\"edit\" {feature}Id={id} \u002F>\n}\n```\n\nMẫu đủ bốn route + wrapper: [navigation templates\u002Fapp\u002Froutes\u002F{feature}.tsx](..\u002F..\u002F..\u002Fminipower-frontend-navigation-react\u002Ftemplates\u002Fapp\u002Froutes\u002F{feature}.tsx). Route `create` tĩnh đứng cạnh `:id` vẫn khớp đúng — React Router xếp đoạn tĩnh trước đoạn động.\n\n## Chỉnh theo DOC-19\n\n| Muốn | Sửa |\n|---|---|\n| Thêm cột | `{Feature}Table`: thêm `THeadCell` + `Cell`, tăng `COLUMN_COUNT` |\n| Thêm bộ lọc (phòng ban, khoảng ngày) | `{Feature}ListPage`: state lọc → `buildQuery` → control trong `toolbar` → về trang 1 khi đổi |\n| Form nhiều khối | `{Feature}Form`: chia `Card` \u002F `Tabs` bên trong component, page giữ nguyên |\n| Chi tiết có resource con | `{Feature}DetailPage`: thêm `Card` + nút sang route con (`get{Feature}…Path(id)`), resource con là page riêng |\n\n## Validate\n\nChạy `npm run dev`: `\u002F{features}` tải danh sách → **Thêm mới** sang `\u002F{features}\u002Fcreate` → lưu về danh sách có bản ghi mới → menu dòng **Chỉnh sửa** mở form có dữ liệu cũ → **Xem chi tiết** → **Xoá** qua hộp xác nhận.\n","# Mẫu theo route — List · Form · Detail\n\n## Copy\n\n| Template | Đích |\n|---|---|\n| [..\u002F..\u002Ftemplates\u002Fshared\u002Fcomponents\u002F](..\u002F..\u002Ftemplates\u002Fshared\u002Fcomponents\u002F) | `src\u002Ffeatures\u002F{feature}\u002Fcomponents\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}List\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}List\u002F) | `pages\u002F{Feature}List\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Form\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Form\u002F) | `pages\u002F{Feature}Form\u002F` |\n| [..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Detail\u002F](..\u002F..\u002Ftemplates\u002Froute-pages\u002Fpages\u002F{Feature}Detail\u002F) | `pages\u002F{Feature}Detail\u002F` |\n\nBarrel export cả ba page — [architecture templates\u002Findex.ts](..\u002F..\u002F..\u002Fminipower-frontend-architecture-react\u002Ftemplates\u002Findex.ts) đã kèm sẵn.\n\n## Ba page nối nhau thế nào\n\n```text\n{Feature}ListPage ──Thêm mới──▶ navigate{Feature}(get{Feature}CreatePath())        ─▶ {Feature}FormPage mode=\"create\"\n      │          ──Xem────────▶ navigate{Feature}(get{Feature}DetailPath(id))      ─▶ {Feature}DetailPage {feature}Id\n      │          ──Sửa────────▶ navigate{Feature}(get{Feature}EditPath(id))        ─▶ {Feature}FormPage mode=\"edit\" {feature}Id\n      └── xoá \u002F đổi trạng thái: tại chỗ (ConfirmDialog · handleAction) rồi reload\n{Feature}FormPage ──lưu xong \u002F Hủy──▶ navigate{Feature}(get{Feature}ListPath())\n```\n\nMọi điều hướng mặc định tắt được bằng `useRoutes={false}` (host tự truyền `onCreate` \u002F `onView` \u002F `onEdit` \u002F `onCancel`).\n\n## Host gắn route\n\n`id` đọc ở host bằng wrapper `useParams` — page không import router:\n\n```tsx\nfunction {Feature}EditRoute() {\n  const { id = '' } = useParams()\n  return \u003C{Feature}FormPage mode=\"edit\" {feature}Id={id} \u002F>\n}\n```\n\nMẫu đủ bốn route + wrapper: [navigation templates\u002Fapp\u002Froutes\u002F{feature}.tsx](..\u002F..\u002F..\u002Fminipower-frontend-navigation-react\u002Ftemplates\u002Fapp\u002Froutes\u002F{feature}.tsx). Route `create` tĩnh đứng cạnh `:id` vẫn khớp đúng — React Router xếp đoạn tĩnh trước đoạn động.\n\n## Chỉnh theo DOC-19\n\n| Muốn | Sửa |\n|---|---|\n| Thêm cột | `{Feature}Table`: thêm `THeadCell` + `Cell`, tăng `COLUMN_COUNT` |\n| Thêm bộ lọc (phòng ban, khoảng ngày) | `{Feature}ListPage`: state lọc → `buildQuery` → control trong `toolbar` → về trang 1 khi đổi |\n| Form nhiều khối | `{Feature}Form`: chia `Card` \u002F `Tabs` bên trong component, page giữ nguyên |\n| Chi tiết có resource con | `{Feature}DetailPage`: thêm `Card` + nút sang route con (`get{Feature}…Path(id)`), resource con là page riêng |\n\n## Validate\n\nChạy `npm run dev`: `\u002F{features}` tải danh sách → **Thêm mới** sang `\u002F{features}\u002Fcreate` → lưu về danh sách có bản ghi mới → menu dòng **Chỉnh sửa** mở form có dữ liệu cũ → **Xem chi tiết** → **Xoá** qua hộp xác nhận.\n",{"name":5,"description":7},"main","6a33a408b13c0b55ce2c7c5558e6f239e9c091b2","src\u002Ffrontend\u002Fskills\u002Fminipower-frontend-crud-react\u002Fpatterns\u002Froute-pages",0,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower","https:\u002F\u002Fgithub.com\u002Fhoangnh2412","http:\u002F\u002Fhoangnh.com","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fhoangnh91\u002F","2026-11-09 04:22:29",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add hoangnh2412\u002Fminipower --skill minipower-frontend-crud-react-route-pages",{"tool":64,"command":65},"bunx","bunx skills add hoangnh2412\u002Fminipower --skill minipower-frontend-crud-react-route-pages",{"tool":67,"command":68},"pnpm","pnpm dlx skills add hoangnh2412\u002Fminipower --skill minipower-frontend-crud-react-route-pages","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ffrontend\u002Fskills\u002Fminipower-frontend-crud-react\u002Fpatterns\u002Froute-pages\u002FSKILL.md",true,[],[73,97,115,128,141,149],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":44},"01M6K2MXJSPKZ79031YX0HB546","minipower-vcs-gitlab","Tra GitLab (search, issue, pipeline, MR), soạn MR\u002Fcomment, tạo MR và commit\u002Fpush sau L2. Dùng khi merge request, GitLab MCP, code_provider gitlab — không scaffold .NET, không force-push.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fvcs\u002Fskills\u002Fminipower-vcs-gitlab\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[83,84,85,86,87,88,89,90,91,92,93,94,95,96,41],"gitlab","minipower vcs gitlab","MCP","github","commit","merge","scaffold","code","push","search","pipeline","issue","provider","l2",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":44},"01M6K2MQXWTZWXG7PKARYT0RNY","minipower-toolbox-skill-author","Viết và soát skill lá-rời Minipower (minipower-{module}-{capability}) — chọn module bằng 3 câu hỏi ADR-022, dựng cây SKILL.md\u002FREADME.md\u002Fworkflows\u002Fproviders, đặt description kích hoạt được, cập nhật hub và test canh. Hỏi người xác nhận trước mọi quyết định, không tự chốt. Dùng khi tạo skill mới, thêm provider\u002Fpattern\u002Fworkflow, mở module mới, hoặc soát skill có sẵn lệch chuẩn.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ftoolbox\u002Fskills\u002Fminipower-toolbox-skill-author\u002FSKILL.md",[103],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},[105,106,95,107,108,109,110,41,111,112,86,113,114],"minipower toolbox skill author","Providers","pattern","hub","README","module","adr","workflows","workflow","test",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":44},"01M6K2MJD0DJNJA538148044K6","minipower-tasks-lark","Đọc, lọc, tìm, soạn nháp và ghi task Lark (tasklist \u002F task) theo L1–L3. Dùng khi việc trên Lark, sprint, tasklist, \"tìm task\", \"tạo task\", tasks_provider lark — không dùng cho tin nhắn nhóm hay wiki.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ftasks\u002Fskills\u002Fminipower-tasks-lark\u002FSKILL.md",[],[122,123,124,41,86,125,95,126,127],"tasks","lark","minipower tasks lark","wiki","task","sprint",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":44},"01M6K2ME2K0QBN64PQKSB2W3VX","minipower-support-registry","Rà registry DOC theo project_mode, nhắc owner thiếu ID hoặc chỗ lưu sai. Dùng khi doc-registry, thiếu DOC, rà soát tiêu chuẩn — không tự sửa FR, không init.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fsupport\u002Fskills\u002Fminipower-support-registry\u002FSKILL.md",[],[135,136,137,37,86,138,139,140,41,42],"minipower support registry","registry","support","init","doc","project",{"skillNo":142,"name":143,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":44},"01M6K2MB1B4C4AP9VCSRBAT83D","minipower-support-publish","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fsupport\u002Fskills\u002Fminipower-support-publish\u002FSKILL.md",[],[147,148,137],"publish","minipower support publish",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":44},"01M6K2M4Q4N1QHA0VGD58WFJNF","minipower-router","Phân loại intent Minipower rồi gợi ý đúng một pack nghề hoặc kênh. Dùng khi làm gì tiếp, chọn skill, dispatcher, không biết mở pack nào — không tự gọi MCP L3, không spawn agent.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Frouter\u002Fskills\u002Fminipower-router\u002FSKILL.md",[155],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},[157,158,86,159,160,161,162,41,163,85],"minipower router","router","dispatcher","spawn","intent","spawn agent","pack"]