Skip to content

Commit 1fa84ce

Browse files
committed
dropdown --> datalist
1 parent f2fce47 commit 1fa84ce

File tree

4 files changed

+27
-54
lines changed

4 files changed

+27
-54
lines changed

webapp/src/main/resources/public/js/actions/users/UserModalActions.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ class UserModalActions {
1818
"pushCurrentLocale",
1919
"removeLocaleFromList",
2020
"updateCanTranslateAllLocales",
21-
"updateLocaleFilter",
22-
"updateSelectedLocale",
21+
"updateLocaleInput",
2322
);
2423
}
2524
}

webapp/src/main/resources/public/js/components/header/LocaleSelectorModal.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ class LocaleSelectorModal extends React.Component {
1010
};
1111

1212
state = {
13-
"selectedLocale": Locales.getCurrentLocale()
13+
"localeInput": Locales.getCurrentLocale()
1414
};
1515

1616
/**
1717
* Changes the locale of the app by setting the locale cookie and reloading the page.
1818
*/
1919
onSaveClicked = () => {
20-
document.cookie = 'locale=' + this.state.selectedLocale;
20+
document.cookie = 'locale=' + this.state.localeInput;
2121
document.location.reload(true);
2222
};
2323

@@ -34,7 +34,7 @@ class LocaleSelectorModal extends React.Component {
3434
* @returns {boolean}
3535
*/
3636
isNewLocaleSelected = () => {
37-
return Locales.getCurrentLocale() !== this.state.selectedLocale;
37+
return Locales.getCurrentLocale() !== this.state.localeInput;
3838
};
3939

4040
/**
@@ -44,7 +44,7 @@ class LocaleSelectorModal extends React.Component {
4444
*/
4545
onLocaleClicked = (locale) => {
4646
this.setState({
47-
"selectedLocale": locale
47+
"localeInput": locale
4848
});
4949
};
5050

@@ -56,7 +56,7 @@ class LocaleSelectorModal extends React.Component {
5656
getLocaleListGroupItem = (locale) => {
5757

5858
let localeDisplayName = Locales.getNativeDispalyName(locale);
59-
let active = locale === this.state.selectedLocale;
59+
let active = locale === this.state.localeInput;
6060

6161
return (
6262
<ListGroupItem active={active}

webapp/src/main/resources/public/js/components/users/UserModal.js

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,13 @@ class UserModal extends React.Component{
3131

3232
renderLocales() {
3333
const options = [];
34+
let freeTagList = []
3435
for (let tag of this.props.locales.allLocales.map((x) => x.bcp47Tag).toSorted()) {
3536
if (this.props.modal.localeTags.includes(tag) || (this.props.modal.localeFilter && !tag.toLowerCase().includes(this.props.modal.localeFilter.toLowerCase()))) {
3637
continue;
3738
}
38-
options.push(
39-
<MenuItem key={tag} eventKey={tag} active={tag === this.props.modal.selectedLocale}>
40-
{tag}
41-
</MenuItem>
42-
);
39+
options.push(<option key={tag} value={tag} />);
40+
freeTagList.push(tag);
4341
}
4442

4543
let localeElements = [];
@@ -57,36 +55,20 @@ class UserModal extends React.Component{
5755
<div className="locales-list panel panel-default">
5856
{localeElements}
5957
</div>
60-
<Dropdown
61-
id="all-locales"
58+
<FormControl
59+
onChange={(e) => UserModalActions.updateLocaleInput(e.target.value)}
60+
type="text"
61+
value={this.props.modal.localeInput}
6262
style={{gridArea: 'new-select'}}
63-
>
64-
<Dropdown.Toggle
65-
id="all-locales-btn"
66-
style={{width: '100%'}}
67-
onClick={() => UserModalActions.updateLocaleFilter('')}
68-
>
69-
{this.props.modal.selectedLocale}
70-
</Dropdown.Toggle>
71-
<Dropdown.Menu
72-
style={{overflow: 'scroll', maxHeight: '256px', width: '100%', top: '35px'}}
73-
onSelect={(k) => k !== '__filter__' && UserModalActions.updateSelectedLocale(k)}
74-
>
75-
<MenuItem eventKey='__filter__'>
76-
{/* Extra div to cactch the click events into the input field */}
77-
<div onClick={(e) => {e.stopPropagation(); e.preventDefault();}}>
78-
<FormControl
79-
type="text"
80-
value={this.props.modal.localeFilter}
81-
onChange={(e) => UserModalActions.updateLocaleFilter(e.target.value)}
82-
/>
83-
</div>
84-
</MenuItem>
85-
{options}
86-
</Dropdown.Menu>
87-
</Dropdown>
63+
placeholder="de-DE"
64+
id="new-locale-input"
65+
list="new-locale-options"
66+
/>
67+
<datalist id="new-locale-options">
68+
{options}
69+
</datalist>
8870
<div style={{gridArea: "new-btn", justifySelf: "start"}}>
89-
<Button bsStyle="primary" onClick={UserModalActions.pushCurrentLocale}>
71+
<Button bsStyle="primary" onClick={UserModalActions.pushCurrentLocale} disabled={!freeTagList.includes(this.props.modal.localeInput)}>
9072
<span className="glyphicon glyphicon-plus foreWhite" aria-label="add locale for user"/>
9173
</Button>
9274
</div>

webapp/src/main/resources/public/js/stores/users/UserModalStore.js

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ class UserModalStore {
4646
this.localeTags = [];
4747

4848
/** @type {String} */
49-
this.selectedLocale = '';
50-
51-
/** @type {String} */
52-
this.localeFilter = '';
49+
this.localeInput = '';
5350

5451
this.bindActions(UserModalActions);
5552
this.registerAsync(UserDataSource);
@@ -71,8 +68,7 @@ class UserModalStore {
7168
this.currentUsernameChecked = false;
7269
this.canTranslateAllLocales = store.currentUser.canTranslateAllLocales;
7370
this.localeTags = store.currentUser.getLocaleTags();
74-
this.selectedLocale = this.getAnyLocale();
75-
this.localeFilter = '';
71+
this.localeInput = this.getAnyLocale();
7672
}
7773

7874
updateUsername(username) {
@@ -136,8 +132,8 @@ class UserModalStore {
136132
}
137133

138134
pushCurrentLocale() {
139-
this.localeTags = this.localeTags.concat([this.selectedLocale]);
140-
this.selectedLocale = this.getAnyLocale();
135+
this.localeTags = this.localeTags.concat([this.localeInput]);
136+
this.localeInput = this.getAnyLocale();
141137
}
142138

143139
removeLocaleFromList(tag) {
@@ -149,12 +145,8 @@ class UserModalStore {
149145
this.canTranslateAllLocales = state;
150146
}
151147

152-
updateLocaleFilter(localeFilter) {
153-
this.localeFilter = localeFilter;
154-
}
155-
156-
updateSelectedLocale(selectedLocale) {
157-
this.selectedLocale = selectedLocale;
148+
updateLocaleInput(localeInput) {
149+
this.localeInput = localeInput;
158150
}
159151
}
160152

0 commit comments

Comments
 (0)