Unverified Commit a834ba87 authored by Joel's avatar Joel Committed by GitHub

feat: support rename conversation (#1056)

parent c67f345d
...@@ -24,6 +24,7 @@ import type { DataSet } from '@/models/datasets' ...@@ -24,6 +24,7 @@ import type { DataSet } from '@/models/datasets'
export type IChatProps = { export type IChatProps = {
configElem?: React.ReactNode configElem?: React.ReactNode
chatList: IChatItem[] chatList: IChatItem[]
controlChatUpdateAllConversation?: number
/** /**
* Whether to display the editing area and rating status * Whether to display the editing area and rating status
*/ */
...@@ -55,6 +56,7 @@ export type IChatProps = { ...@@ -55,6 +56,7 @@ export type IChatProps = {
const Chat: FC<IChatProps> = ({ const Chat: FC<IChatProps> = ({
configElem, configElem,
chatList, chatList,
controlChatUpdateAllConversation,
feedbackDisabled = false, feedbackDisabled = false,
isHideFeedbackEdit = false, isHideFeedbackEdit = false,
isHideSendInput = false, isHideSendInput = false,
......
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.3767 15.6163L2.71985 21.2732M11.6944 6.64181L10.1335 8.2027C10.0062 8.33003 9.94252 8.39369 9.86999 8.44427C9.80561 8.48917 9.73616 8.52634 9.66309 8.555C9.58077 8.58729 9.49249 8.60495 9.31592 8.64026L5.65145 9.37315C4.69915 9.56361 4.223 9.65884 4.00024 9.9099C3.80617 10.1286 3.71755 10.4213 3.75771 10.7109C3.8038 11.0434 4.14715 11.3867 4.83387 12.0735L11.9196 19.1592C12.6063 19.8459 12.9497 20.1893 13.2821 20.2354C13.5718 20.2755 13.8645 20.1869 14.0832 19.9928C14.3342 19.7701 14.4294 19.2939 14.6199 18.3416L15.3528 14.6771C15.3881 14.5006 15.4058 14.4123 15.4381 14.33C15.4667 14.2569 15.5039 14.1875 15.5488 14.1231C15.5994 14.0505 15.663 13.9869 15.7904 13.8596L17.3512 12.2987C17.4326 12.2173 17.4734 12.1766 17.5181 12.141C17.5578 12.1095 17.5999 12.081 17.644 12.0558C17.6936 12.0274 17.7465 12.0048 17.8523 11.9594L20.3467 10.8904C21.0744 10.5785 21.4383 10.4226 21.6035 10.1706C21.7481 9.95025 21.7998 9.68175 21.7474 9.42348C21.6875 9.12813 21.4076 8.84822 20.8478 8.28839L15.7047 3.14526C15.1448 2.58543 14.8649 2.30552 14.5696 2.24565C14.3113 2.19329 14.0428 2.245 13.8225 2.38953C13.5705 2.55481 13.4145 2.91866 13.1027 3.64636L12.0337 6.14071C11.9883 6.24653 11.9656 6.29944 11.9373 6.34905C11.9121 6.39313 11.8836 6.43522 11.852 6.47496C11.8165 6.51971 11.7758 6.56041 11.6944 6.64181Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
...@@ -64,6 +64,8 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -64,6 +64,8 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = '<%= svgName %>'
export default Icon export default Icon
`.trim()) `.trim())
......
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Dify'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Github'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'MessageChatSquare'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Csv'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Md'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Anthropic'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AnthropicText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AzureOpenaiService'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AzureOpenaiServiceText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Azureai'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AzureaiText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Chatglm'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ChatglmText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Gpt3'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Gpt4'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Huggingface'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'HuggingfaceText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'HuggingfaceTextHub'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'IflytekSpark'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'IflytekSparkText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'IflytekSparkTextCn'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Microsoft'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiBlack'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiBlue'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiGreen'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiTransparent'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenaiViolet'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Openllm'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'OpenllmText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Replicate'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ReplicateText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'XorbitsInference'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'XorbitsInferenceText'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Checked'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Google'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'WebReader'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Wikipedia'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'DataSet'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Loading'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Search'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ThoughtList'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'WebReader'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AlertCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ArrowNarrowLeft'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ArrowUpRight'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ChevronDown'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ChevronDownDouble'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'ChevronRight'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'RefreshCw05'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Container'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Database01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Database03'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'PuzzlePiece01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'FilePlus02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AtSign'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Check'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'DotsHorizontal'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Edit03'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Hash02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'HelpCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'InfoCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'LinkExternal01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'LinkExternal02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Loading02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'LogOut01'
export default Icon export default Icon
{
"icon": {
"type": "element",
"isRootNode": true,
"name": "svg",
"attributes": {
"width": "24",
"height": "24",
"viewBox": "0 0 24 24",
"fill": "none",
"xmlns": "http://www.w3.org/2000/svg"
},
"children": [
{
"type": "element",
"name": "path",
"attributes": {
"d": "M8.3767 15.6163L2.71985 21.2732M11.6944 6.64181L10.1335 8.2027C10.0062 8.33003 9.94252 8.39369 9.86999 8.44427C9.80561 8.48917 9.73616 8.52634 9.66309 8.555C9.58077 8.58729 9.49249 8.60495 9.31592 8.64026L5.65145 9.37315C4.69915 9.56361 4.223 9.65884 4.00024 9.9099C3.80617 10.1286 3.71755 10.4213 3.75771 10.7109C3.8038 11.0434 4.14715 11.3867 4.83387 12.0735L11.9196 19.1592C12.6063 19.8459 12.9497 20.1893 13.2821 20.2354C13.5718 20.2755 13.8645 20.1869 14.0832 19.9928C14.3342 19.7701 14.4294 19.2939 14.6199 18.3416L15.3528 14.6771C15.3881 14.5006 15.4058 14.4123 15.4381 14.33C15.4667 14.2569 15.5039 14.1875 15.5488 14.1231C15.5994 14.0505 15.663 13.9869 15.7904 13.8596L17.3512 12.2987C17.4326 12.2173 17.4734 12.1766 17.5181 12.141C17.5578 12.1095 17.5999 12.081 17.644 12.0558C17.6936 12.0274 17.7465 12.0048 17.8523 11.9594L20.3467 10.8904C21.0744 10.5785 21.4383 10.4226 21.6035 10.1706C21.7481 9.95025 21.7998 9.68175 21.7474 9.42348C21.6875 9.12813 21.4076 8.84822 20.8478 8.28839L15.7047 3.14526C15.1448 2.58543 14.8649 2.30552 14.5696 2.24565C14.3113 2.19329 14.0428 2.245 13.8225 2.38953C13.5705 2.55481 13.4145 2.91866 13.1027 3.64636L12.0337 6.14071C11.9883 6.24653 11.9656 6.29944 11.9373 6.34905C11.9121 6.39313 11.8836 6.43522 11.852 6.47496C11.8165 6.51971 11.7758 6.56041 11.6944 6.64181Z",
"stroke": "currentColor",
"stroke-width": "2",
"stroke-linecap": "round",
"stroke-linejoin": "round"
},
"children": []
}
]
},
"name": "Pin02"
}
\ No newline at end of file
// GENERATE BY script
// DON NOT EDIT IT MANUALLY
import * as React from 'react'
import data from './Pin02.json'
import IconBase from '@/app/components/base/icons/IconBase'
import type { IconBaseProps, IconData } from '@/app/components/base/icons/IconBase'
const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseProps, 'data'>>((
props,
ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Pin02'
export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Plus'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'SearchLg'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Trash03'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'X'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'XClose'
export default Icon export default Icon
...@@ -9,6 +9,7 @@ export { default as LinkExternal01 } from './LinkExternal01' ...@@ -9,6 +9,7 @@ export { default as LinkExternal01 } from './LinkExternal01'
export { default as LinkExternal02 } from './LinkExternal02' export { default as LinkExternal02 } from './LinkExternal02'
export { default as Loading02 } from './Loading02' export { default as Loading02 } from './Loading02'
export { default as LogOut01 } from './LogOut01' export { default as LogOut01 } from './LogOut01'
export { default as Pin02 } from './Pin02'
export { default as Plus } from './Plus' export { default as Plus } from './Plus'
export { default as SearchLg } from './SearchLg' export { default as SearchLg } from './SearchLg'
export { default as Trash03 } from './Trash03' export { default as Trash03 } from './Trash03'
......
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Grid01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Globe01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Microphone01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'CubeOutline'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'User01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Users01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Scales02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AlertCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'AlertTriangle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Container'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Database02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Database03'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'PuzzlePiece01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'TerminalSquare'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Brush01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Beaker02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'CheckCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Download02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Target04'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'XCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Grid01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Microphone01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Sliders02'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'StopCircle'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Lock01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'User01'
export default Icon export default Icon
...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP ...@@ -11,4 +11,6 @@ const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseP
ref, ref,
) => <IconBase {...props} ref={ref} data={data as IconData} />) ) => <IconBase {...props} ref={ref} data={data as IconData} />)
Icon.displayName = 'Users01'
export default Icon export default Icon
...@@ -3,20 +3,16 @@ import type { FC } from 'react' ...@@ -3,20 +3,16 @@ import type { FC } from 'react'
import React from 'react' import React from 'react'
import cn from 'classnames' import cn from 'classnames'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { TrashIcon } from '@heroicons/react/24/outline' import { Edit03, Pin02, Trash03 } from '../../base/icons/src/vender/line/general'
import s from './style.module.css' import s from './style.module.css'
import Popover from '@/app/components/base/popover' import Popover from '@/app/components/base/popover'
const PinIcon = (
<svg className="shrink-0" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.00012 9.99967L8.00012 14.6663M5.33346 4.87176V6.29217C5.33346 6.43085 5.33346 6.50019 5.31985 6.56652C5.30777 6.62536 5.2878 6.6823 5.26047 6.73579C5.22966 6.79608 5.18635 6.85023 5.09972 6.95852L4.0532 8.26667C3.60937 8.82145 3.38746 9.09884 3.38721 9.33229C3.38699 9.53532 3.4793 9.72738 3.63797 9.85404C3.82042 9.99967 4.17566 9.99967 4.88612 9.99967H11.1141C11.8246 9.99967 12.1798 9.99967 12.3623 9.85404C12.5209 9.72738 12.6133 9.53532 12.613 9.33229C12.6128 9.09884 12.3909 8.82145 11.947 8.26667L10.9005 6.95852C10.8139 6.85023 10.7706 6.79608 10.7398 6.73579C10.7125 6.6823 10.6925 6.62536 10.6804 6.56652C10.6668 6.50019 10.6668 6.43085 10.6668 6.29217V4.87176C10.6668 4.79501 10.6668 4.75664 10.6711 4.71879C10.675 4.68517 10.6814 4.6519 10.6903 4.61925C10.7003 4.5825 10.7146 4.54687 10.7431 4.47561L11.415 2.79582C11.611 2.30577 11.709 2.06074 11.6682 1.86404C11.6324 1.69203 11.5302 1.54108 11.3838 1.44401C11.2163 1.33301 10.9524 1.33301 10.4246 1.33301H5.57563C5.04782 1.33301 4.78391 1.33301 4.61646 1.44401C4.47003 1.54108 4.36783 1.69203 4.33209 1.86404C4.29122 2.06074 4.38923 2.30577 4.58525 2.79583L5.25717 4.47561C5.28567 4.54687 5.29992 4.5825 5.30995 4.61925C5.31886 4.6519 5.32526 4.68517 5.32912 4.71879C5.33346 4.75664 5.33346 4.79501 5.33346 4.87176Z" stroke="#667085" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
</svg>
)
export type IItemOperationProps = { export type IItemOperationProps = {
className?: string className?: string
isPinned: boolean isPinned: boolean
isShowRenameConversation?: boolean
onRenameConversation?: () => void
isShowDelete: boolean isShowDelete: boolean
togglePin: () => void togglePin: () => void
onDelete: () => void onDelete: () => void
...@@ -25,8 +21,10 @@ export type IItemOperationProps = { ...@@ -25,8 +21,10 @@ export type IItemOperationProps = {
const ItemOperation: FC<IItemOperationProps> = ({ const ItemOperation: FC<IItemOperationProps> = ({
className, className,
isPinned, isPinned,
isShowDelete,
togglePin, togglePin,
isShowRenameConversation,
onRenameConversation,
isShowDelete,
onDelete, onDelete,
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
...@@ -38,12 +36,18 @@ const ItemOperation: FC<IItemOperationProps> = ({ ...@@ -38,12 +36,18 @@ const ItemOperation: FC<IItemOperationProps> = ({
e.stopPropagation() e.stopPropagation()
}}> }}>
<div className={cn(s.actionItem, 'hover:bg-gray-50 group')} onClick={togglePin}> <div className={cn(s.actionItem, 'hover:bg-gray-50 group')} onClick={togglePin}>
{PinIcon} <Pin02 className='shrink-0 w-4 h-4 text-gray-500'/>
<span className={s.actionName}>{isPinned ? t('explore.sidebar.action.unpin') : t('explore.sidebar.action.pin')}</span> <span className={s.actionName}>{isPinned ? t('explore.sidebar.action.unpin') : t('explore.sidebar.action.pin')}</span>
</div> </div>
{isShowRenameConversation && (
<div className={cn(s.actionItem, 'hover:bg-gray-50 group')} onClick={onRenameConversation}>
<Edit03 className='shrink-0 w-4 h-4 text-gray-500'/>
<span className={s.actionName}>{t('explore.sidebar.action.rename')}</span>
</div>
)}
{isShowDelete && ( {isShowDelete && (
<div className={cn(s.actionItem, s.deleteActionItem, 'hover:bg-gray-50 group')} onClick={onDelete} > <div className={cn(s.actionItem, s.deleteActionItem, 'hover:bg-gray-50 group')} onClick={onDelete} >
<TrashIcon className={cn(s.deleteActionItemChild, 'shrink-0 w-4 h-4 stroke-current text-gray-500 stroke-2')} /> <Trash03 className={cn(s.deleteActionItemChild, 'shrink-0 w-4 h-4 stroke-current text-gray-500 stroke-2')} />
<span className={cn(s.actionName, s.deleteActionItemChild)}>{t('explore.sidebar.action.delete')}</span> <span className={cn(s.actionName, s.deleteActionItemChild)}>{t('explore.sidebar.action.delete')}</span>
</div> </div>
)} )}
...@@ -53,8 +57,8 @@ const ItemOperation: FC<IItemOperationProps> = ({ ...@@ -53,8 +57,8 @@ const ItemOperation: FC<IItemOperationProps> = ({
trigger='click' trigger='click'
position='br' position='br'
btnElement={<div />} btnElement={<div />}
btnClassName={open => cn(className, s.btn, 'h-6 w-6 rounded-md border-none p-1', open && '!bg-gray-100 !shadow-none')} btnClassName={open => cn(className, s.btn, 'h-6 w-6 rounded-md border-none py-1', open && '!bg-gray-100 !shadow-none')}
className={'!w-[120px] h-fit !z-20'} className={'!w-[120px] !px-0 h-fit !z-20'}
/> />
) )
} }
......
...@@ -65,6 +65,7 @@ function useConversation() { ...@@ -65,6 +65,7 @@ function useConversation() {
setCurrInputs, setCurrInputs,
currConversationInfo, currConversationInfo,
setNewConversationInfo, setNewConversationInfo,
existConversationInfo,
setExistConversationInfo, setExistConversationInfo,
} }
} }
......
...@@ -130,6 +130,7 @@ const Main: FC<IMainProps> = () => { ...@@ -130,6 +130,7 @@ const Main: FC<IMainProps> = () => {
resetNewConversationInputs, resetNewConversationInputs,
setCurrInputs, setCurrInputs,
setNewConversationInfo, setNewConversationInfo,
existConversationInfo,
setExistConversationInfo, setExistConversationInfo,
} = useConversation() } = useConversation()
const [hasMore, setHasMore] = useState<boolean>(true) const [hasMore, setHasMore] = useState<boolean>(true)
...@@ -618,14 +619,38 @@ const Main: FC<IMainProps> = () => { ...@@ -618,14 +619,38 @@ const Main: FC<IMainProps> = () => {
notify({ type: 'success', message: t('common.api.success') }) notify({ type: 'success', message: t('common.api.success') })
} }
const [controlChatUpdateAllConversation, setControlChatUpdateAllConversation] = useState(0)
useEffect(() => {
(async () => {
if (controlChatUpdateAllConversation && !isNewConversation) {
const { data: allConversations } = await fetchAllConversations() as { data: ConversationItem[]; has_more: boolean }
const item = allConversations.find(item => item.id === currConversationId)
setAllConversationList(allConversations)
if (item) {
setExistConversationInfo({
...existConversationInfo,
name: item?.name || '',
} as any)
}
}
})()
}, [controlChatUpdateAllConversation])
const renderSidebar = () => { const renderSidebar = () => {
if (!APP_ID || !promptConfig) if (!APP_ID || !promptConfig)
return null return null
return ( return (
<Sidebar <Sidebar
list={conversationList} list={conversationList}
onListChanged={(list) => {
setConversationList(list)
setControlChatUpdateAllConversation(Date.now())
}}
isClearConversationList={isClearConversationList} isClearConversationList={isClearConversationList}
pinnedList={pinnedConversationList} pinnedList={pinnedConversationList}
onPinnedListChanged={(list) => {
setPinnedConversationList(list)
setControlChatUpdateAllConversation(Date.now())
}}
isClearPinnedConversationList={isClearPinnedConversationList} isClearPinnedConversationList={isClearPinnedConversationList}
onMoreLoaded={onMoreLoaded} onMoreLoaded={onMoreLoaded}
onPinnedMoreLoaded={onPinnedMoreLoaded} onPinnedMoreLoaded={onPinnedMoreLoaded}
......
...@@ -65,6 +65,7 @@ function useConversation() { ...@@ -65,6 +65,7 @@ function useConversation() {
setCurrInputs, setCurrInputs,
currConversationInfo, currConversationInfo,
setNewConversationInfo, setNewConversationInfo,
existConversationInfo,
setExistConversationInfo, setExistConversationInfo,
} }
} }
......
...@@ -101,6 +101,7 @@ const Main: FC<IMainProps> = ({ ...@@ -101,6 +101,7 @@ const Main: FC<IMainProps> = ({
resetNewConversationInputs, resetNewConversationInputs,
setCurrInputs, setCurrInputs,
setNewConversationInfo, setNewConversationInfo,
existConversationInfo,
setExistConversationInfo, setExistConversationInfo,
} = useConversation() } = useConversation()
const [hasMore, setHasMore] = useState<boolean>(true) const [hasMore, setHasMore] = useState<boolean>(true)
...@@ -186,6 +187,23 @@ const Main: FC<IMainProps> = ({ ...@@ -186,6 +187,23 @@ const Main: FC<IMainProps> = ({
const conversationName = currConversationInfo?.name || t('share.chat.newChatDefaultName') as string const conversationName = currConversationInfo?.name || t('share.chat.newChatDefaultName') as string
const conversationIntroduction = currConversationInfo?.introduction || '' const conversationIntroduction = currConversationInfo?.introduction || ''
const [controlChatUpdateAllConversation, setControlChatUpdateAllConversation] = useState(0)
useEffect(() => {
(async () => {
if (controlChatUpdateAllConversation && !isNewConversation) {
const { data: allConversations } = await fetchAllConversations() as { data: ConversationItem[]; has_more: boolean }
const item = allConversations.find(item => item.id === currConversationId)
setAllConversationList(allConversations)
if (item) {
setExistConversationInfo({
...existConversationInfo,
name: item?.name || '',
} as any)
}
}
})()
}, [controlChatUpdateAllConversation])
const handleConversationSwitch = () => { const handleConversationSwitch = () => {
if (!inited) if (!inited)
...@@ -546,8 +564,16 @@ const Main: FC<IMainProps> = ({ ...@@ -546,8 +564,16 @@ const Main: FC<IMainProps> = ({
return ( return (
<Sidebar <Sidebar
list={conversationList} list={conversationList}
onListChanged={(list) => {
setConversationList(list)
setControlChatUpdateAllConversation(Date.now())
}}
isClearConversationList={isClearConversationList} isClearConversationList={isClearConversationList}
pinnedList={pinnedConversationList} pinnedList={pinnedConversationList}
onPinnedListChanged={(list) => {
setPinnedConversationList(list)
setControlChatUpdateAllConversation(Date.now())
}}
isClearPinnedConversationList={isClearPinnedConversationList} isClearPinnedConversationList={isClearPinnedConversationList}
onMoreLoaded={onMoreLoaded} onMoreLoaded={onMoreLoaded}
onPinnedMoreLoaded={onPinnedMoreLoaded} onPinnedMoreLoaded={onPinnedMoreLoaded}
......
...@@ -18,8 +18,10 @@ export type ISidebarProps = { ...@@ -18,8 +18,10 @@ export type ISidebarProps = {
currentId: string currentId: string
onCurrentIdChange: (id: string) => void onCurrentIdChange: (id: string) => void
list: ConversationItem[] list: ConversationItem[]
onListChanged: (newList: ConversationItem[]) => void
isClearConversationList: boolean isClearConversationList: boolean
pinnedList: ConversationItem[] pinnedList: ConversationItem[]
onPinnedListChanged: (newList: ConversationItem[]) => void
isClearPinnedConversationList: boolean isClearPinnedConversationList: boolean
isInstalledApp: boolean isInstalledApp: boolean
installedAppId?: string installedAppId?: string
...@@ -40,8 +42,10 @@ const Sidebar: FC<ISidebarProps> = ({ ...@@ -40,8 +42,10 @@ const Sidebar: FC<ISidebarProps> = ({
currentId, currentId,
onCurrentIdChange, onCurrentIdChange,
list, list,
onListChanged,
isClearConversationList, isClearConversationList,
pinnedList, pinnedList,
onPinnedListChanged,
isClearPinnedConversationList, isClearPinnedConversationList,
isInstalledApp, isInstalledApp,
installedAppId, installedAppId,
...@@ -115,6 +119,7 @@ const Sidebar: FC<ISidebarProps> = ({ ...@@ -115,6 +119,7 @@ const Sidebar: FC<ISidebarProps> = ({
currentId={currentId} currentId={currentId}
onCurrentIdChange={onCurrentIdChange} onCurrentIdChange={onCurrentIdChange}
list={pinnedList} list={pinnedList}
onListChanged={onPinnedListChanged}
isClearConversationList={isClearPinnedConversationList} isClearConversationList={isClearPinnedConversationList}
isInstalledApp={isInstalledApp} isInstalledApp={isInstalledApp}
installedAppId={installedAppId} installedAppId={installedAppId}
...@@ -138,6 +143,7 @@ const Sidebar: FC<ISidebarProps> = ({ ...@@ -138,6 +143,7 @@ const Sidebar: FC<ISidebarProps> = ({
currentId={currentId} currentId={currentId}
onCurrentIdChange={onCurrentIdChange} onCurrentIdChange={onCurrentIdChange}
list={list} list={list}
onListChanged={onListChanged}
isClearConversationList={isClearConversationList} isClearConversationList={isClearConversationList}
isInstalledApp={isInstalledApp} isInstalledApp={isInstalledApp}
installedAppId={installedAppId} installedAppId={installedAppId}
......
'use client' 'use client'
import type { FC } from 'react' import type { FC } from 'react'
import React, { useRef } from 'react' import React, { useRef, useState } from 'react'
import { import {
ChatBubbleOvalLeftEllipsisIcon, ChatBubbleOvalLeftEllipsisIcon,
} from '@heroicons/react/24/outline' } from '@heroicons/react/24/outline'
import { useInfiniteScroll } from 'ahooks' import { useBoolean, useInfiniteScroll } from 'ahooks'
import { ChatBubbleOvalLeftEllipsisIcon as ChatBubbleOvalLeftEllipsisSolidIcon } from '@heroicons/react/24/solid' import { ChatBubbleOvalLeftEllipsisIcon as ChatBubbleOvalLeftEllipsisSolidIcon } from '@heroicons/react/24/solid'
import cn from 'classnames' import cn from 'classnames'
import { useTranslation } from 'react-i18next'
import RenameModal from '../rename-modal'
import s from './style.module.css' import s from './style.module.css'
import type { ConversationItem } from '@/models/share' import type { ConversationItem } from '@/models/share'
import { fetchConversations } from '@/service/share' import { fetchConversations, renameConversation } from '@/service/share'
import { fetchConversations as fetchUniversalConversations } from '@/service/universal-chat' import { fetchConversations as fetchUniversalConversations, renameConversation as renameUniversalConversation } from '@/service/universal-chat'
import ItemOperation from '@/app/components/explore/item-operation' import ItemOperation from '@/app/components/explore/item-operation'
import Toast from '@/app/components/base/toast'
export type IListProps = { export type IListProps = {
className: string className: string
currentId: string currentId: string
onCurrentIdChange: (id: string) => void onCurrentIdChange: (id: string) => void
list: ConversationItem[] list: ConversationItem[]
onListChanged?: (newList: ConversationItem[]) => void
isClearConversationList: boolean isClearConversationList: boolean
isInstalledApp: boolean isInstalledApp: boolean
isUniversalChat?: boolean isUniversalChat?: boolean
...@@ -35,6 +39,7 @@ const List: FC<IListProps> = ({ ...@@ -35,6 +39,7 @@ const List: FC<IListProps> = ({
currentId, currentId,
onCurrentIdChange, onCurrentIdChange,
list, list,
onListChanged,
isClearConversationList, isClearConversationList,
isInstalledApp, isInstalledApp,
isUniversalChat, isUniversalChat,
...@@ -46,6 +51,8 @@ const List: FC<IListProps> = ({ ...@@ -46,6 +51,8 @@ const List: FC<IListProps> = ({
controlUpdate, controlUpdate,
onDelete, onDelete,
}) => { }) => {
const { t } = useTranslation()
const listRef = useRef<HTMLDivElement>(null) const listRef = useRef<HTMLDivElement>(null)
useInfiniteScroll( useInfiniteScroll(
...@@ -72,6 +79,50 @@ const List: FC<IListProps> = ({ ...@@ -72,6 +79,50 @@ const List: FC<IListProps> = ({
reloadDeps: [isNoMore, controlUpdate], reloadDeps: [isNoMore, controlUpdate],
}, },
) )
const [isShowRename, { setTrue: setShowRename, setFalse: setHideRename }] = useBoolean(false)
const [isSaving, { setTrue: setIsSaving, setFalse: setNotSaving }] = useBoolean(false)
const [currentConversation, setCurrentConversation] = useState<ConversationItem | null>(null)
const showRename = (item: ConversationItem) => {
setCurrentConversation(item)
setShowRename()
}
const handleRename = async (newName: string) => {
if (!newName.trim() || !currentConversation) {
Toast.notify({
type: 'error',
message: t('common.chat.conversationNameCanNotEmpty'),
})
return
}
setIsSaving()
const currId = currentConversation.id
try {
if (isUniversalChat)
await renameUniversalConversation(currId, newName)
else
await renameConversation(isInstalledApp, installedAppId, currId, newName)
Toast.notify({
type: 'success',
message: t('common.actionMsg.modifiedSuccessfully'),
})
onListChanged?.(list.map((item) => {
if (item.id === currId) {
return {
...item,
name: newName,
}
}
return item
}))
setHideRename()
}
finally {
setNotSaving()
}
}
return ( return (
<nav <nav
ref={listRef} ref={listRef}
...@@ -110,6 +161,8 @@ const List: FC<IListProps> = ({ ...@@ -110,6 +161,8 @@ const List: FC<IListProps> = ({
<ItemOperation <ItemOperation
isPinned={isPinned} isPinned={isPinned}
togglePin={() => onPinChanged(item.id)} togglePin={() => onPinChanged(item.id)}
isShowRenameConversation
onRenameConversation={() => showRename(item)}
isShowDelete isShowDelete
onDelete={() => onDelete(item.id)} onDelete={() => onDelete(item.id)}
/> />
...@@ -118,6 +171,15 @@ const List: FC<IListProps> = ({ ...@@ -118,6 +171,15 @@ const List: FC<IListProps> = ({
</div> </div>
) )
})} })}
{isShowRename && (
<RenameModal
isShow={isShowRename}
onClose={setHideRename}
saveLoading={isSaving}
name={currentConversation?.name || ''}
onSave={handleRename}
/>
)}
</nav> </nav>
) )
} }
......
'use client'
import type { FC } from 'react'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import Modal from '@/app/components/base/modal'
import Button from '@/app/components/base/button'
export type IRenameModalProps = {
isShow: boolean
saveLoading: boolean
name: string
onClose: () => void
onSave: (name: string) => void
}
const RenameModal: FC<IRenameModalProps> = ({
isShow,
saveLoading,
name,
onClose,
onSave,
}) => {
const { t } = useTranslation()
const [tempName, setTempName] = useState(name)
return (
<Modal
title={t('common.chat.renameConversation')}
isShow={isShow}
onClose={onClose}
wrapperClassName='!z-50'
>
<div className={'mt-6 font-medium text-sm leading-[21px] text-gray-900'}>{t('common.chat.conversationName')}</div>
<input className={'mt-2 w-full rounded-lg h-10 box-border px-3 text-sm leading-10 bg-gray-100'}
value={tempName}
onChange={e => setTempName(e.target.value)}
placeholder={t('common.chat.conversationNamePlaceholder') || ''}
/>
<div className='mt-10 flex justify-end'>
<Button className='mr-2 flex-shrink-0' onClick={onClose}>{t('common.operation.cancel')}</Button>
<Button type='primary' className='flex-shrink-0' onClick={() => onSave(tempName)} loading={saveLoading}>{t('common.operation.save')}</Button>
</div>
</Modal>
)
}
export default React.memo(RenameModal)
...@@ -334,6 +334,12 @@ const translation = { ...@@ -334,6 +334,12 @@ const translation = {
'claude-instant-1': 'Claude-Instant', 'claude-instant-1': 'Claude-Instant',
'claude-2': 'Claude-2', 'claude-2': 'Claude-2',
}, },
chat: {
renameConversation: 'Rename Conversation',
conversationName: 'Conversation name',
conversationNamePlaceholder: 'Please input conversation name',
conversationNameCanNotEmpty: 'Conversation name required',
},
} }
export default translation export default translation
...@@ -334,6 +334,12 @@ const translation = { ...@@ -334,6 +334,12 @@ const translation = {
'claude-instant-1': 'Claude-Instant', 'claude-instant-1': 'Claude-Instant',
'claude-2': 'Claude-2', 'claude-2': 'Claude-2',
}, },
chat: {
renameConversation: '重命名会话',
conversationName: '会话名称',
conversationNamePlaceholder: '请输入会话名称',
conversationNameCanNotEmpty: '会话名称必填',
},
} }
export default translation export default translation
...@@ -7,6 +7,7 @@ const translation = { ...@@ -7,6 +7,7 @@ const translation = {
action: { action: {
pin: 'Pin', pin: 'Pin',
unpin: 'Unpin', unpin: 'Unpin',
rename: 'Rename',
delete: 'Delete', delete: 'Delete',
}, },
delete: { delete: {
......
...@@ -7,6 +7,7 @@ const translation = { ...@@ -7,6 +7,7 @@ const translation = {
action: { action: {
pin: '置顶', pin: '置顶',
unpin: '取消置顶', unpin: '取消置顶',
rename: '重命名',
delete: '删除', delete: '删除',
}, },
delete: { delete: {
......
...@@ -73,6 +73,10 @@ export const delConversation = async (isInstalledApp: boolean, installedAppId = ...@@ -73,6 +73,10 @@ export const delConversation = async (isInstalledApp: boolean, installedAppId =
return getAction('del', isInstalledApp)(getUrl(`conversations/${id}`, isInstalledApp, installedAppId)) return getAction('del', isInstalledApp)(getUrl(`conversations/${id}`, isInstalledApp, installedAppId))
} }
export const renameConversation = async (isInstalledApp: boolean, installedAppId = '', id: string, name: string) => {
return getAction('post', isInstalledApp)(getUrl(`conversations/${id}/name`, isInstalledApp, installedAppId), { body: { name } })
}
export const fetchChatList = async (conversationId: string, isInstalledApp: boolean, installedAppId = '') => { export const fetchChatList = async (conversationId: string, isInstalledApp: boolean, installedAppId = '') => {
return getAction('get', isInstalledApp)(getUrl('messages', isInstalledApp, installedAppId), { params: { conversation_id: conversationId, limit: 20, last_id: '' } }) return getAction('get', isInstalledApp)(getUrl('messages', isInstalledApp, installedAppId), { params: { conversation_id: conversationId, limit: 20, last_id: '' } })
} }
......
...@@ -45,6 +45,10 @@ export const delConversation = async (id: string) => { ...@@ -45,6 +45,10 @@ export const delConversation = async (id: string) => {
return del(getUrl(`conversations/${id}`)) return del(getUrl(`conversations/${id}`))
} }
export const renameConversation = async (id: string, name: string) => {
return post(getUrl(`conversations/${id}/name`), { body: { name } })
}
export const fetchChatList = async (conversationId: string) => { export const fetchChatList = async (conversationId: string) => {
return get(getUrl('messages'), { params: { conversation_id: conversationId, limit: 20, last_id: '' } }) return get(getUrl('messages'), { params: { conversation_id: conversationId, limit: 20, last_id: '' } })
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment