-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathnew-text.component.tsx
More file actions
63 lines (56 loc) · 1.94 KB
/
new-text.component.tsx
File metadata and controls
63 lines (56 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React from 'react';
import { cx } from '@emotion/css';
import ArrowForwardRoundedIcon from '@mui/icons-material/ArrowForwardRounded';
import Button from '@mui/material/Button';
import * as innerClasses from './new-text.styles';
import { SelectComponent } from './select.component';
import { MarkdownEditor } from 'common/markdown-editor/markdown-editor.component';
interface Props {
handleAppendTrainerText: (trainerText: string) => void;
className?: string;
}
export const NewTextComponent: React.FC<Props> = (props) => {
const [language, setLanguage] = React.useState('');
const [trainerText, setTrainerText] = React.useState<string>('');
const applyLanguageSelected = (language: string): string =>
language === '' ? '' : `\`\`\`${language}\n\n\`\`\``;
const { handleAppendTrainerText, className } = props;
const handleAppendTrainerTextInternal = (): void => {
if (trainerText) {
handleAppendTrainerText(trainerText);
setTrainerText(applyLanguageSelected(language));
setLanguage(language);
}
};
React.useEffect(() => {
if (language) {
setTrainerText(applyLanguageSelected(language));
}
}, [language]);
return (
<form className={cx(innerClasses.root, className)}>
<label className={innerClasses.label} htmlFor="new-text">
New text
</label>
<SelectComponent value={language} onChange={setLanguage} />
<MarkdownEditor
value={trainerText}
onChange={setTrainerText}
onAppendTrainerTextInternal={handleAppendTrainerTextInternal}
/>
<Button
variant="contained"
color="primary"
className={innerClasses.button}
onClick={handleAppendTrainerTextInternal}
disabled={!trainerText}
aria-disabled={!trainerText}
disableRipple={!trainerText}
disableElevation
>
Send
<ArrowForwardRoundedIcon className={innerClasses.buttonIcon} />
</Button>
</form>
);
};