You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import ListFilterBar from '@/components/list-filter-bar';
  2. import { RenameDialog } from '@/components/rename-dialog';
  3. import { Button } from '@/components/ui/button';
  4. import { RAGFlowPagination } from '@/components/ui/ragflow-pagination';
  5. import { useFetchDialogList } from '@/hooks/use-chat-request';
  6. import { pick } from 'lodash';
  7. import { Plus } from 'lucide-react';
  8. import { useCallback } from 'react';
  9. import { useTranslation } from 'react-i18next';
  10. import { ChatCard } from './chat-card';
  11. import { useRenameChat } from './hooks/use-rename-chat';
  12. export default function ChatList() {
  13. const { data, setPagination, pagination, handleInputChange, searchString } =
  14. useFetchDialogList();
  15. const { t } = useTranslation();
  16. const {
  17. initialChatName,
  18. chatRenameVisible,
  19. showChatRenameModal,
  20. hideChatRenameModal,
  21. onChatRenameOk,
  22. chatRenameLoading,
  23. } = useRenameChat();
  24. const handlePageChange = useCallback(
  25. (page: number, pageSize?: number) => {
  26. setPagination({ page, pageSize });
  27. },
  28. [setPagination],
  29. );
  30. const handleShowCreateModal = useCallback(() => {
  31. showChatRenameModal();
  32. }, [showChatRenameModal]);
  33. return (
  34. <section className="flex flex-col w-full flex-1">
  35. <div className="px-8 pt-8">
  36. <ListFilterBar
  37. title="Chat apps"
  38. onSearchChange={handleInputChange}
  39. searchString={searchString}
  40. >
  41. <Button onClick={handleShowCreateModal}>
  42. <Plus className="size-2.5" />
  43. {t('chat.createChat')}
  44. </Button>
  45. </ListFilterBar>
  46. </div>
  47. <div className="flex-1 overflow-auto">
  48. <div className="flex flex-wrap gap-4 px-8">
  49. {data.dialogs.map((x) => {
  50. return (
  51. <ChatCard
  52. key={x.id}
  53. data={x}
  54. showChatRenameModal={showChatRenameModal}
  55. ></ChatCard>
  56. );
  57. })}
  58. </div>
  59. </div>
  60. <div className="mt-8 px-8 pb-8">
  61. <RAGFlowPagination
  62. {...pick(pagination, 'current', 'pageSize')}
  63. total={pagination.total}
  64. onChange={handlePageChange}
  65. ></RAGFlowPagination>
  66. </div>
  67. {chatRenameVisible && (
  68. <RenameDialog
  69. hideModal={hideChatRenameModal}
  70. onOk={onChatRenameOk}
  71. initialName={initialChatName}
  72. loading={chatRenameLoading}
  73. title={initialChatName || t('chat.createChat')}
  74. ></RenameDialog>
  75. )}
  76. </section>
  77. );
  78. }