Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
95 lines
3.0 KiB
TypeScript
95 lines
3.0 KiB
TypeScript
import * as React from 'react';
|
|
import Box from '@mui/joy/Box';
|
|
import Button from '@mui/joy/Button';
|
|
import FormControl from '@mui/joy/FormControl';
|
|
import Textarea from '@mui/joy/Textarea';
|
|
import { IconButton, Stack } from '@mui/joy';
|
|
|
|
import FormatBoldRoundedIcon from '@mui/icons-material/FormatBoldRounded';
|
|
import FormatItalicRoundedIcon from '@mui/icons-material/FormatItalicRounded';
|
|
import StrikethroughSRoundedIcon from '@mui/icons-material/StrikethroughSRounded';
|
|
import FormatListBulletedRoundedIcon from '@mui/icons-material/FormatListBulletedRounded';
|
|
import SendRoundedIcon from '@mui/icons-material/SendRounded';
|
|
|
|
export type MessageInputProps = {
|
|
textAreaValue: string;
|
|
setTextAreaValue: (value: string) => void;
|
|
onSubmit: () => void;
|
|
};
|
|
|
|
export default function MessageInput(props: MessageInputProps) {
|
|
const { textAreaValue, setTextAreaValue, onSubmit } = props;
|
|
const textAreaRef = React.useRef<HTMLDivElement>(null);
|
|
const handleClick = () => {
|
|
if (textAreaValue.trim() !== '') {
|
|
onSubmit();
|
|
setTextAreaValue('');
|
|
}
|
|
};
|
|
return (
|
|
<Box sx={{ px: 2, pb: 3 }}>
|
|
<FormControl>
|
|
<Textarea
|
|
placeholder="Type something here…"
|
|
aria-label="Message"
|
|
ref={textAreaRef}
|
|
onChange={(event) => {
|
|
setTextAreaValue(event.target.value);
|
|
}}
|
|
value={textAreaValue}
|
|
minRows={3}
|
|
maxRows={10}
|
|
endDecorator={
|
|
<Stack
|
|
direction="row"
|
|
sx={{
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
flexGrow: 1,
|
|
py: 1,
|
|
pr: 1,
|
|
borderTop: '1px solid',
|
|
borderColor: 'divider',
|
|
}}
|
|
>
|
|
<div>
|
|
<IconButton size="sm" variant="plain" color="neutral">
|
|
<FormatBoldRoundedIcon />
|
|
</IconButton>
|
|
<IconButton size="sm" variant="plain" color="neutral">
|
|
<FormatItalicRoundedIcon />
|
|
</IconButton>
|
|
<IconButton size="sm" variant="plain" color="neutral">
|
|
<StrikethroughSRoundedIcon />
|
|
</IconButton>
|
|
<IconButton size="sm" variant="plain" color="neutral">
|
|
<FormatListBulletedRoundedIcon />
|
|
</IconButton>
|
|
</div>
|
|
<Button
|
|
size="sm"
|
|
color="primary"
|
|
sx={{ alignSelf: 'center', borderRadius: 'sm' }}
|
|
endDecorator={<SendRoundedIcon />}
|
|
onClick={handleClick}
|
|
>
|
|
Send
|
|
</Button>
|
|
</Stack>
|
|
}
|
|
onKeyDown={(event) => {
|
|
if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
|
|
handleClick();
|
|
}
|
|
}}
|
|
sx={{
|
|
'& textarea:first-of-type': {
|
|
minHeight: 72,
|
|
},
|
|
}}
|
|
/>
|
|
</FormControl>
|
|
</Box>
|
|
);
|
|
}
|