Lemmy-ui currently preselects the first language in the user
settings when creating a new post or comment. This is a bad
idea because this language might not actually be allowed in
the community. It is better to pass the language as None if
the user didnt specify it explicitly, because then the backend
can smartly choose a language based on the overlap of user
languages and community languages.
This fixes the problem described in
[this thread](https://lemmy.ml/post/
1066608), where a user
tries to post in a community that has only English allowed,
with all languages enabled in user settings. In this case
lemmy-ui preselects "undetermined language" as default, which
is not allowed and results in an error. This PR fixes the issue
because it lets the backend automatically select the correct
language (English).
-Subproject commit 007e53683768aeba63e9e4c179c1d240217bcee2
+Subproject commit a1fff8b481f4b02327e4ee04088606af627628f2
import {
capitalizeFirstLetter,
myAuth,
- myFirstDiscussionLanguageId,
wsClient,
wsSubscribe,
} from "../../utils";
: undefined
: undefined;
- let selectedLang =
- typeof this.props.node !== "number"
- ? this.props.node.comment_view.comment.language_id
- : myFirstDiscussionLanguageId(
- this.props.allLanguages,
- this.props.siteLanguages,
- UserService.Instance.myUserInfo
- );
-
return (
<div className="mb-3">
{UserService.Instance.myUserInfo ? (
<MarkdownTextArea
initialContent={initialContent}
- initialLanguageId={selectedLang}
showLanguage
buttonTitle={this.state.buttonTitle}
finished={this.state.finished}
multiple={this.props.multiple}
disabled={this.props.disabled}
>
+ {!this.props.multiple && (
+ <option selected disabled hidden>
+ {i18n.t("language_select_placeholder")}
+ </option>
+ )}
{filteredLangs.map(l => (
<option
key={l.id}
ghostArchiveUrl,
isImage,
myAuth,
- myFirstDiscussionLanguageId,
pictrsDeleteToast,
relTags,
setupTippy,
}
render() {
- let firstLang =
- this.state.form.language_id ??
- myFirstDiscussionLanguageId(
- this.props.allLanguages,
- this.props.siteLanguages,
- UserService.Instance.myUserInfo
- );
+ let firstLang = this.state.form.language_id;
let selectedLangs = firstLang ? Array.of(firstLang) : undefined;
let url = this.state.form.url;
}
}
-export function myFirstDiscussionLanguageId(
- allLanguages: Language[],
- siteLanguages: number[],
- myUserInfo = UserService.Instance.myUserInfo
-): number | undefined {
- return selectableLanguages(
- allLanguages,
- siteLanguages,
- false,
- false,
- myUserInfo
- ).at(0)?.id;
-}
-
export function canCreateCommunity(
siteRes: GetSiteResponse,
myUserInfo = UserService.Instance.myUserInfo