@@ -3,14 +3,19 @@ import classNames from "classnames";
3
3
import { Component, linkEvent } from "inferno";
4
4
import { Language } from "lemmy-js-client";
5
5
import { i18n } from "../../i18next";
6
- import { randomStr } from "../../utils";
6
+ import { UserService } from "../../services/UserService";
7
+ import { randomStr, selectableLanguages } from "../../utils";
7
8
import { Icon } from "./icon";
8
9
9
10
interface LanguageSelectProps {
10
11
allLanguages: Language[];
12
+ siteLanguages: number[];
11
13
selectedLanguageIds: Option<number[]>;
12
14
multiple: boolean;
13
15
onChange(val: number[]): any;
16
+ showAll?: boolean;
17
+ showSite?: boolean;
18
+ iconVersion?: boolean;
14
19
}
15
20
16
21
export class LanguageSelect extends Component<LanguageSelectProps, any> {
@@ -42,9 +47,9 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
42
47
}
43
48
44
49
render() {
45
- let selectedLangs = this.props.selectedLanguageIds;
46
-
47
- return (
50
+ return this.props.iconVersion ? (
51
+ this.selectBtn
52
+ ) : (
48
53
<div className="form-group row">
49
54
<label
50
55
className={classNames("col-form-label", {
@@ -61,23 +66,7 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
61
66
"col-sm-10": !this.props.multiple,
62
67
})}
63
68
>
64
- <select
65
- className="form-control custom-select"
66
- id={this.id}
67
- onChange={linkEvent(this, this.handleLanguageChange)}
68
- aria-label="action"
69
- multiple={this.props.multiple}
70
- >
71
- {this.props.allLanguages.map(l => (
72
- <option
73
- key={l.id}
74
- value={l.id}
75
- selected={selectedLangs.unwrapOr([]).includes(l.id)}
76
- >
77
- {l.name}
78
- </option>
79
- ))}
80
- </select>
69
+ {this.selectBtn}
81
70
{this.props.multiple && (
82
71
<div className="input-group-append">
83
72
<button
@@ -93,6 +82,40 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
93
82
);
94
83
}
95
84
85
+ get selectBtn() {
86
+ let selectedLangs = this.props.selectedLanguageIds;
87
+ let filteredLangs = selectableLanguages(
88
+ this.props.allLanguages,
89
+ this.props.siteLanguages,
90
+ this.props.showAll,
91
+ this.props.showSite,
92
+ UserService.Instance.myUserInfo
93
+ );
94
+
95
+ return (
96
+ <select
97
+ className={classNames("lang-select-action", {
98
+ "form-control custom-select": !this.props.iconVersion,
99
+ "btn btn-sm text-muted": this.props.iconVersion,
100
+ })}
101
+ id={this.id}
102
+ onChange={linkEvent(this, this.handleLanguageChange)}
103
+ aria-label="action"
104
+ multiple={this.props.multiple}
105
+ >
106
+ {filteredLangs.map(l => (
107
+ <option
108
+ key={l.id}
109
+ value={l.id}
110
+ selected={selectedLangs.unwrapOr([]).includes(l.id)}
111
+ >
112
+ {l.name}
113
+ </option>
114
+ ))}
115
+ </select>
116
+ );
117
+ }
118
+
96
119
handleLanguageChange(i: LanguageSelect, event: any) {
97
120
let options: HTMLOptionElement[] = Array.from(event.target.options);
98
121
let selected: number[] = options
0 commit comments