Files
react-test/docs/data/joy/getting-started/templates/messages/components/MessageInput.tsx
how2ice 005cf56baf
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
init project
2025-12-12 14:26:25 +09:00

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>
);
}