您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import LineChart from '@/components/line-chart';
  2. import { useSetModalState, useTranslate } from '@/hooks/commonHooks';
  3. import { IModalProps } from '@/interfaces/common';
  4. import { IDialog, IStats } from '@/interfaces/database/chat';
  5. import { Button, Card, DatePicker, Flex, Modal, Space, Typography } from 'antd';
  6. import { RangePickerProps } from 'antd/es/date-picker';
  7. import dayjs from 'dayjs';
  8. import camelCase from 'lodash/camelCase';
  9. import ChatApiKeyModal from '../chat-api-key-modal';
  10. import { useFetchStatsOnMount, useSelectChartStatsList } from '../hooks';
  11. import styles from './index.less';
  12. const { Paragraph } = Typography;
  13. const { RangePicker } = DatePicker;
  14. const ChatOverviewModal = ({
  15. visible,
  16. hideModal,
  17. dialog,
  18. }: IModalProps<any> & { dialog: IDialog }) => {
  19. const { t } = useTranslate('chat');
  20. const chartList = useSelectChartStatsList();
  21. const {
  22. visible: apiKeyVisible,
  23. hideModal: hideApiKeyModal,
  24. showModal: showApiKeyModal,
  25. } = useSetModalState();
  26. const { pickerValue, setPickerValue } = useFetchStatsOnMount(visible);
  27. const disabledDate: RangePickerProps['disabledDate'] = (current) => {
  28. return current && current > dayjs().endOf('day');
  29. };
  30. return (
  31. <>
  32. <Modal
  33. title={t('overview')}
  34. open={visible}
  35. onCancel={hideModal}
  36. width={'100vw'}
  37. >
  38. <Flex vertical gap={'middle'}>
  39. <Card title={dialog.name}>
  40. <Flex gap={8} vertical>
  41. {t('publicUrl')}
  42. <Paragraph copyable className={styles.linkText}>
  43. This is a copyable text.
  44. </Paragraph>
  45. </Flex>
  46. <Space size={'middle'}>
  47. <Button>{t('preview')}</Button>
  48. <Button>{t('embedded')}</Button>
  49. </Space>
  50. </Card>
  51. <Card title={t('backendServiceApi')}>
  52. <Flex gap={8} vertical>
  53. {t('serviceApiEndpoint')}
  54. <Paragraph copyable className={styles.linkText}>
  55. This is a copyable text.
  56. </Paragraph>
  57. </Flex>
  58. <Space size={'middle'}>
  59. <Button onClick={showApiKeyModal}>{t('apiKey')}</Button>
  60. <Button>{t('apiReference')}</Button>
  61. </Space>
  62. </Card>
  63. <Space>
  64. <b>{t('dateRange')}</b>
  65. <RangePicker
  66. disabledDate={disabledDate}
  67. value={pickerValue}
  68. onChange={setPickerValue}
  69. allowClear={false}
  70. />
  71. </Space>
  72. <div className={styles.chartWrapper}>
  73. {Object.keys(chartList).map((x) => (
  74. <div key={x} className={styles.chartItem}>
  75. <b className={styles.chartLabel}>{t(camelCase(x))}</b>
  76. <LineChart data={chartList[x as keyof IStats]}></LineChart>
  77. </div>
  78. ))}
  79. </div>
  80. </Flex>
  81. <ChatApiKeyModal
  82. visible={apiKeyVisible}
  83. hideModal={hideApiKeyModal}
  84. dialogId={dialog.id}
  85. ></ChatApiKeyModal>
  86. </Modal>
  87. </>
  88. );
  89. };
  90. export default ChatOverviewModal;