X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fcommon%2Fmarkdown-textarea.tsx;h=498c262579a569eb22cb79e841c1fe6b4c0072b7;hb=059dfbd3a50c7e9462e963e0101866e79bc0c57b;hp=b453acc3ce2383f6d635545b19a16d5d3e9d5927;hpb=42b296a1c2b4cfe53e72e86cad4c15c617e6513a;p=lemmy-ui.git diff --git a/src/shared/components/common/markdown-textarea.tsx b/src/shared/components/common/markdown-textarea.tsx index b453acc..498c262 100644 --- a/src/shared/components/common/markdown-textarea.tsx +++ b/src/shared/components/common/markdown-textarea.tsx @@ -2,7 +2,7 @@ import { None, Option, Some } from "@sniptt/monads"; import autosize from "autosize"; import { Component, linkEvent } from "inferno"; import { Prompt } from "inferno-router"; -import { toUndefined } from "lemmy-js-client"; +import { Language, toUndefined } from "lemmy-js-client"; import { pictrsUri } from "../../env"; import { i18n } from "../../i18next"; import { UserService } from "../../services"; @@ -18,9 +18,11 @@ import { toast, } from "../../utils"; import { Icon, Spinner } from "./icon"; +import { LanguageSelect } from "./language-select"; interface MarkdownTextAreaProps { initialContent: Option; + initialLanguageId: Option; placeholder: Option; buttonTitle: Option; maxLength: Option; @@ -28,14 +30,21 @@ interface MarkdownTextAreaProps { focus?: boolean; disabled?: boolean; finished?: boolean; + showLanguage?: boolean; hideNavigationWarnings?: boolean; onContentChange?(val: string): any; onReplyCancel?(): any; - onSubmit?(msg: { val: string; formId: string }): any; + onSubmit?(msg: { + val: Option; + formId: string; + languageId: Option; + }): any; + allLanguages: Language[]; } interface MarkdownTextAreaState { content: Option; + languageId: Option; previewMode: boolean; loading: boolean; imageLoading: boolean; @@ -50,6 +59,7 @@ export class MarkdownTextArea extends Component< private tribute: any; private emptyState: MarkdownTextAreaState = { content: this.props.initialContent, + languageId: this.props.initialLanguageId, previewMode: false, loading: false, imageLoading: false, @@ -58,6 +68,8 @@ export class MarkdownTextArea extends Component< constructor(props: any, context: any) { super(props, context); + this.handleLanguageChange = this.handleLanguageChange.bind(this); + if (isBrowser()) { this.tribute = setupTribute(); } @@ -70,8 +82,7 @@ export class MarkdownTextArea extends Component< autosize(textarea); this.tribute.attach(textarea); textarea.addEventListener("tribute-replaced", () => { - this.state.content = Some(textarea.value); - this.setState(this.state); + this.setState({ content: Some(textarea.value) }); autosize.update(textarea); }); @@ -96,10 +107,7 @@ export class MarkdownTextArea extends Component< componentWillReceiveProps(nextProps: MarkdownTextAreaProps) { if (nextProps.finished) { - this.state.previewMode = false; - this.state.loading = false; - this.state.content = None; - this.setState(this.state); + this.setState({ previewMode: false, loading: false, content: None }); if (this.props.replyType) { this.props.onReplyCancel(); } @@ -108,7 +116,6 @@ export class MarkdownTextArea extends Component< let form: any = document.getElementById(this.formId); form.reset(); setTimeout(() => autosize.update(textarea), 10); - this.setState(this.state); } } @@ -125,7 +132,7 @@ export class MarkdownTextArea extends Component< } message={i18n.t("block_leaving")} /> -
+