From db692237b2aa758ef1333be871366f02f38a55a7 Mon Sep 17 00:00:00 2001 From: ONLY-yours <1349021570@qq.com> Date: Wed, 14 Aug 2024 17:46:42 +0800 Subject: [PATCH 1/6] :sparkles: feat: proSender init --- package.json | 1 + .../components/EnterTypeButton.tsx.tsx | 28 ++++++ src/ProSender/demos/base.tsx | 5 + src/ProSender/index.md | 11 +++ src/ProSender/index.tsx | 95 +++++++++++++++++++ src/ProSender/style.ts | 56 +++++++++++ src/index.ts | 7 +- 7 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 src/ProSender/components/EnterTypeButton.tsx.tsx create mode 100644 src/ProSender/demos/base.tsx create mode 100644 src/ProSender/index.md create mode 100644 src/ProSender/index.tsx create mode 100644 src/ProSender/style.ts diff --git a/package.json b/package.json index 9be6e4b7..d98199ab 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "dependencies": { "@ant-design/icons": "^5.3.7", "@ant-design/pro-editor": "latest", + "@ant-design/x": "^0.0.0-experimental-2024-08-13", "@babel/runtime": "^7.24.7", "@emotion/react": "^11.11.4", "@testing-library/jest-dom": "^6.4.6", diff --git a/src/ProSender/components/EnterTypeButton.tsx.tsx b/src/ProSender/components/EnterTypeButton.tsx.tsx new file mode 100644 index 00000000..0f0cc445 --- /dev/null +++ b/src/ProSender/components/EnterTypeButton.tsx.tsx @@ -0,0 +1,28 @@ +import { Space } from 'antd'; +import { cx } from 'antd-style'; +import { CommandIcon, CornerDownLeft } from 'lucide-react'; +import { useStyles } from '../style'; + +const EnterTypeButton: React.FC< + React.HTMLAttributes & { + enterType?: 'enter' | 'shiftEnter'; + } +> = ({ children, enterType = 'enter', ...props }) => { + const { styles } = useStyles(); + + return ( + + + + + {enterType === 'enter' ? 'Send' : 'New Line'} + / + + {enterType === 'enter' ? 'New Line' : 'Send'} + + {children} + + ); +}; + +export default EnterTypeButton; diff --git a/src/ProSender/demos/base.tsx b/src/ProSender/demos/base.tsx new file mode 100644 index 00000000..498e566a --- /dev/null +++ b/src/ProSender/demos/base.tsx @@ -0,0 +1,5 @@ +import { ProSender } from '@ant-design/pro-chat'; + +export default () => { + return ; +}; diff --git a/src/ProSender/index.md b/src/ProSender/index.md new file mode 100644 index 00000000..ee31bd94 --- /dev/null +++ b/src/ProSender/index.md @@ -0,0 +1,11 @@ +--- +nav: 组件 +group: Chat +title: ProSender +order: 1 +description: a ProSender +--- + +## Default + + diff --git a/src/ProSender/index.tsx b/src/ProSender/index.tsx new file mode 100644 index 00000000..a5495379 --- /dev/null +++ b/src/ProSender/index.tsx @@ -0,0 +1,95 @@ +import { UploadOutlined } from '@ant-design/icons'; +import { Sender } from '@ant-design/x'; +import { SenderProps } from '@ant-design/x/es/sender/interface'; +import { Button, ConfigProvider, Divider, Space, Upload, UploadFile, UploadProps } from 'antd'; +import { useContext, useEffect, useState } from 'react'; +import EnterTypeButton from './components/EnterTypeButton.tsx'; +import { useStyles } from './style'; + +const ProSender = ( + props: SenderProps & { + className?: string; + upload?: UploadProps; + sender?: SenderProps; + }, +) => { + const { className, upload, sender } = props || {}; + + const { cx, styles } = useStyles(); + const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); + const prefixClass = getPrefixCls('pro-chat'); + + const [fileList, setFileList] = useState>(); + + useEffect(() => { + setFileList(upload?.fileList || upload?.defaultFileList || []); + }, []); + + const ProSenderActions = () => { + return ( + + { + setFileList(info.fileList); + }} + > +