|
import LineChart from '@/components/line-chart'; |
|
import { useSetModalState, useTranslate } from '@/hooks/commonHooks'; |
|
import { IModalProps } from '@/interfaces/common'; |
|
import { IDialog, IStats } from '@/interfaces/database/chat'; |
|
import { Button, Card, DatePicker, Flex, Modal, Space, Typography } from 'antd'; |
|
import { RangePickerProps } from 'antd/es/date-picker'; |
|
import dayjs from 'dayjs'; |
|
import camelCase from 'lodash/camelCase'; |
|
import ChatApiKeyModal from '../chat-api-key-modal'; |
|
import { useFetchStatsOnMount, useSelectChartStatsList } from '../hooks'; |
|
import styles from './index.less'; |
|
|
|
const { Paragraph } = Typography; |
|
const { RangePicker } = DatePicker; |
|
|
|
const ChatOverviewModal = ({ |
|
visible, |
|
hideModal, |
|
dialog, |
|
}: IModalProps<any> & { dialog: IDialog }) => { |
|
const { t } = useTranslate('chat'); |
|
const chartList = useSelectChartStatsList(); |
|
|
|
const { |
|
visible: apiKeyVisible, |
|
hideModal: hideApiKeyModal, |
|
showModal: showApiKeyModal, |
|
} = useSetModalState(); |
|
|
|
const { pickerValue, setPickerValue } = useFetchStatsOnMount(visible); |
|
|
|
const disabledDate: RangePickerProps['disabledDate'] = (current) => { |
|
return current && current > dayjs().endOf('day'); |
|
}; |
|
|
|
return ( |
|
<> |
|
<Modal |
|
title={t('overview')} |
|
open={visible} |
|
onCancel={hideModal} |
|
width={'100vw'} |
|
> |
|
<Flex vertical gap={'middle'}> |
|
<Card title={dialog.name}> |
|
<Flex gap={8} vertical> |
|
{t('publicUrl')} |
|
<Paragraph copyable className={styles.linkText}> |
|
This is a copyable text. |
|
</Paragraph> |
|
</Flex> |
|
<Space size={'middle'}> |
|
<Button>{t('preview')}</Button> |
|
<Button>{t('embedded')}</Button> |
|
</Space> |
|
</Card> |
|
<Card title={t('backendServiceApi')}> |
|
<Flex gap={8} vertical> |
|
{t('serviceApiEndpoint')} |
|
<Paragraph copyable className={styles.linkText}> |
|
This is a copyable text. |
|
</Paragraph> |
|
</Flex> |
|
<Space size={'middle'}> |
|
<Button onClick={showApiKeyModal}>{t('apiKey')}</Button> |
|
<Button>{t('apiReference')}</Button> |
|
</Space> |
|
</Card> |
|
<Space> |
|
<b>{t('dateRange')}</b> |
|
<RangePicker |
|
disabledDate={disabledDate} |
|
value={pickerValue} |
|
onChange={setPickerValue} |
|
allowClear={false} |
|
/> |
|
</Space> |
|
<div className={styles.chartWrapper}> |
|
{Object.keys(chartList).map((x) => ( |
|
<div key={x} className={styles.chartItem}> |
|
<b className={styles.chartLabel}>{t(camelCase(x))}</b> |
|
<LineChart data={chartList[x as keyof IStats]}></LineChart> |
|
</div> |
|
))} |
|
</div> |
|
</Flex> |
|
<ChatApiKeyModal |
|
visible={apiKeyVisible} |
|
hideModal={hideApiKeyModal} |
|
dialogId={dialog.id} |
|
></ChatApiKeyModal> |
|
</Modal> |
|
</> |
|
); |
|
}; |
|
|
|
export default ChatOverviewModal; |
|
|