2023-07-05 15:00:20 +08:00
|
|
|
|
2023-07-17 20:31:01 +08:00
|
|
|
import { Center, Text, Accordion, Box, Stack, Container, Divider } from "@mantine/core";
|
2023-06-05 19:27:25 +08:00
|
|
|
import React from "react";
|
2023-08-03 16:41:35 +08:00
|
|
|
import CodeBlock from "@/views/components/CodeBlock";
|
2023-08-03 16:51:39 +08:00
|
|
|
import MessageHeader from "@/views/components/MessageHeader";
|
2023-08-18 00:24:10 +08:00
|
|
|
import { observer } from "mobx-react-lite";
|
|
|
|
import { useMst } from "@/views/stores/RootStore";
|
2023-06-05 19:27:25 +08:00
|
|
|
|
2023-06-08 19:28:15 +08:00
|
|
|
|
|
|
|
const MessageContext = (props: any) => {
|
|
|
|
const { contexts } = props;
|
|
|
|
return (contexts &&
|
|
|
|
<Accordion variant="contained" chevronPosition="left"
|
|
|
|
sx={{
|
|
|
|
marginTop: 5,
|
|
|
|
borderRadius: 5,
|
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
|
|
|
}}
|
|
|
|
styles={{
|
|
|
|
item: {
|
|
|
|
borderColor: 'var(--vscode-menu-border)',
|
2023-06-05 19:27:25 +08:00
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
2023-06-08 19:28:15 +08:00
|
|
|
'&[data-active]': {
|
2023-06-05 19:27:25 +08:00
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
2023-06-08 19:28:15 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
control: {
|
|
|
|
height: 30,
|
|
|
|
borderRadius: 3,
|
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
|
|
|
'&[aria-expanded="true"]': {
|
|
|
|
borderBottomLeftRadius: 0,
|
|
|
|
borderBottomRightRadius: 0,
|
2023-06-05 19:27:25 +08:00
|
|
|
},
|
2023-06-08 19:28:15 +08:00
|
|
|
'&:hover': {
|
2023-06-05 19:27:25 +08:00
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
|
|
|
}
|
2023-06-08 19:28:15 +08:00
|
|
|
},
|
|
|
|
chevron: {
|
|
|
|
color: 'var(--vscode-menu-foreground)',
|
|
|
|
},
|
|
|
|
icon: {
|
|
|
|
color: 'var(--vscode-menu-foreground)',
|
|
|
|
},
|
|
|
|
label: {
|
|
|
|
color: 'var(--vscode-menu-foreground)',
|
|
|
|
},
|
|
|
|
panel: {
|
|
|
|
color: 'var(--vscode-menu-foreground)',
|
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
|
|
|
},
|
|
|
|
content: {
|
|
|
|
borderRadius: 3,
|
|
|
|
backgroundColor: 'var(--vscode-menu-background)',
|
2023-06-05 19:27:25 +08:00
|
|
|
}
|
2023-06-08 19:28:15 +08:00
|
|
|
}}
|
|
|
|
>
|
|
|
|
{
|
|
|
|
contexts?.map((item: any, index: number) => {
|
|
|
|
const { context } = item;
|
|
|
|
return (
|
2023-06-09 11:16:20 +08:00
|
|
|
<Accordion.Item key={`item-${index}`} value={`item-value-${index}`} mah='200'>
|
2023-06-08 19:28:15 +08:00
|
|
|
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
|
|
|
<Accordion.Control >
|
2023-06-08 23:18:59 +08:00
|
|
|
<Text truncate='end'>{'command' in context ? context.command : context.path}</Text>
|
2023-06-08 19:28:15 +08:00
|
|
|
</Accordion.Control>
|
|
|
|
</Box>
|
|
|
|
<Accordion.Panel>
|
|
|
|
{
|
|
|
|
context.content
|
|
|
|
? <pre style={{ overflowWrap: 'normal' }}>{context.content}</pre>
|
|
|
|
: <Center>
|
|
|
|
<Text c='gray.3'>No content</Text>
|
|
|
|
</Center>
|
|
|
|
}
|
|
|
|
|
|
|
|
</Accordion.Panel>
|
|
|
|
</Accordion.Item>
|
|
|
|
);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
</Accordion>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2023-08-18 00:24:10 +08:00
|
|
|
const MessageContainer = observer((props: any) => {
|
2023-06-08 20:40:05 +08:00
|
|
|
const { width } = props;
|
2023-08-18 00:24:10 +08:00
|
|
|
const { chat } = useMst();
|
2023-06-08 19:28:15 +08:00
|
|
|
|
2023-08-18 00:24:10 +08:00
|
|
|
return (<>
|
|
|
|
{chat.messages.map((item: any, index: number) => {
|
|
|
|
const { message: messageText, type: messageType, contexts } = item;
|
|
|
|
// setMessage(messageText);
|
|
|
|
return <Stack
|
|
|
|
spacing={0}
|
|
|
|
key={`message-${index}`}
|
2023-06-05 19:27:25 +08:00
|
|
|
sx={{
|
2023-06-14 12:28:03 +08:00
|
|
|
width: width,
|
2023-08-18 00:24:10 +08:00
|
|
|
padding: 0,
|
|
|
|
margin: 0,
|
2023-06-05 19:27:25 +08:00
|
|
|
}}>
|
2023-08-18 00:24:10 +08:00
|
|
|
<MessageHeader
|
|
|
|
key={`message-header-${index}`}
|
|
|
|
showDelete={index === chat.messages.length - 2}
|
|
|
|
item={item} />
|
|
|
|
<Container
|
|
|
|
key={`message-container-${index}`}
|
|
|
|
sx={{
|
|
|
|
margin: 0,
|
|
|
|
padding: 0,
|
|
|
|
width: width,
|
|
|
|
pre: {
|
|
|
|
whiteSpace: 'break-spaces'
|
|
|
|
},
|
|
|
|
}}>
|
|
|
|
<MessageContext key={`message-context-${index}`} contexts={contexts} />
|
|
|
|
<CodeBlock key={`message-codeblock-${index}`} messageType={messageType} messageText={messageText} />
|
|
|
|
</Container >
|
|
|
|
{index !== chat.messages.length - 1 && <Divider my={3} key={`message-divider-${index}`} />}
|
|
|
|
</Stack >;
|
|
|
|
})}
|
|
|
|
</>);
|
|
|
|
});
|
2023-06-05 19:27:25 +08:00
|
|
|
|
|
|
|
export default MessageContainer;
|