Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.tsx 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { BulkOperateBar } from '@/components/bulk-operate-bar';
  2. import { Button } from '@/components/ui/button';
  3. import { SearchInput } from '@/components/ui/input';
  4. import { RAGFlowPagination } from '@/components/ui/ragflow-pagination';
  5. import { useListMcpServer } from '@/hooks/use-mcp-request';
  6. import { pick } from 'lodash';
  7. import { Import, Plus } from 'lucide-react';
  8. import { useCallback } from 'react';
  9. import { useTranslation } from 'react-i18next';
  10. import { EditMcpDialog } from './edit-mcp-dialog';
  11. import { ImportMcpDialog } from './import-mcp-dialog';
  12. import { McpCard } from './mcp-card';
  13. import { useBulkOperateMCP } from './use-bulk-operate-mcp';
  14. import { useEditMcp } from './use-edit-mcp';
  15. import { useImportMcp } from './use-import-mcp';
  16. export default function McpServer() {
  17. const { data, setPagination, searchString, handleInputChange, pagination } =
  18. useListMcpServer();
  19. const { editVisible, showEditModal, hideEditModal, handleOk, id, loading } =
  20. useEditMcp();
  21. const { list, selectedList, handleSelectChange } = useBulkOperateMCP();
  22. const { t } = useTranslation();
  23. const { importVisible, showImportModal, hideImportModal, onImportOk } =
  24. useImportMcp();
  25. const handlePageChange = useCallback(
  26. (page: number, pageSize?: number) => {
  27. setPagination({ page, pageSize });
  28. },
  29. [setPagination],
  30. );
  31. return (
  32. <section className="p-4 w-full">
  33. <div className="text-text-primary text-2xl">MCP Servers</div>
  34. <section className="flex items-center justify-between pb-5">
  35. <div className="text-text-secondary">
  36. Customize the list of MCP servers
  37. </div>
  38. <div className="flex gap-5">
  39. <SearchInput
  40. className="w-40"
  41. value={searchString}
  42. onChange={handleInputChange}
  43. ></SearchInput>
  44. <Button variant={'secondary'} onClick={showImportModal}>
  45. <Import /> {t('mcp.import')}
  46. </Button>
  47. <Button onClick={showEditModal('')}>
  48. <Plus /> {t('mcp.addMCP')}
  49. </Button>
  50. </div>
  51. </section>
  52. {selectedList.length > 0 && (
  53. <BulkOperateBar
  54. list={list}
  55. count={selectedList.length}
  56. className="mb-2.5"
  57. ></BulkOperateBar>
  58. )}
  59. <section className="flex gap-5 flex-wrap">
  60. {data.mcp_servers.map((item) => (
  61. <McpCard
  62. key={item.id}
  63. data={item}
  64. selectedList={selectedList}
  65. handleSelectChange={handleSelectChange}
  66. showEditModal={showEditModal}
  67. ></McpCard>
  68. ))}
  69. </section>
  70. <div className="mt-8 px-8">
  71. <RAGFlowPagination
  72. {...pick(pagination, 'current', 'pageSize')}
  73. total={pagination.total || 0}
  74. onChange={handlePageChange}
  75. ></RAGFlowPagination>
  76. </div>
  77. {editVisible && (
  78. <EditMcpDialog
  79. hideModal={hideEditModal}
  80. onOk={handleOk}
  81. id={id}
  82. loading={loading}
  83. ></EditMcpDialog>
  84. )}
  85. {importVisible && (
  86. <ImportMcpDialog
  87. hideModal={hideImportModal}
  88. onOk={onImportOk}
  89. ></ImportMcpDialog>
  90. )}
  91. </section>
  92. );
  93. }