Skip to content

Commit ed547ac

Browse files
committed
- Stops trying to pretend that the params and the repo list are the same. - Properly highlights the selected repos in the select control.
1 parent 205eb7d commit ed547ac

File tree

2 files changed

+183
-172
lines changed

2 files changed

+183
-172
lines changed

ui/assets/js/hound.js

Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,10 @@ var ParamsFromQueryString = function(qs, params) {
5959
if (pair.length != 2) {
6060
return;
6161
}
62-
if (pair[1].indexOf(',') >= 0) {
63-
params[decodeURIComponent(pair[0])] = pair[1].split(',');
64-
} else {
65-
params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
66-
}
62+
63+
params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
6764
});
6865

69-
if (params["repos"] === '') {
70-
params["repos"] = '*';
71-
}
7266

7367
return params;
7468
};
@@ -107,6 +101,21 @@ var Model = {
107101

108102
didLoadRepos : new Signal(),
109103

104+
ValidRepos: function(repos) {
105+
var all = this.repos,
106+
seen = {};
107+
return repos.filter(function(repo) {
108+
repo = repo.toLowerCase();
109+
var valid = all[repo] && !seen[repo];
110+
seen[repo] = true;
111+
return valid;
112+
});
113+
},
114+
115+
RepoCount: function() {
116+
return Object.keys(this.repos).length;
117+
},
118+
110119
Load: function() {
111120
var _this = this;
112121
var next = function() {
@@ -291,7 +300,7 @@ var Model = {
291300
var RepoOption = React.createClass({
292301
render: function() {
293302
return (
294-
<option value={this.props.value}>{this.props.value}</option>
303+
<option value={this.props.value} selected={this.props.selected}>{this.props.value}</option>
295304
)
296305
}
297306
});
@@ -321,7 +330,8 @@ var SearchBar = React.createClass({
321330
getInitialState: function() {
322331
return {
323332
state: null,
324-
allRepos: []
333+
allRepos: [],
334+
repos: []
325335
};
326336
},
327337
queryGotKeydown: function(event) {
@@ -369,10 +379,17 @@ var SearchBar = React.createClass({
369379
this.refs.icase.getDOMNode().checked ? 'ig' : 'g');
370380
},
371381
getParams: function() {
382+
// selecting all repos is the same as not selecting any, so normalize the url
383+
// to have none.
384+
var repos = Model.ValidRepos(this.refs.repos.state.value);
385+
if (repos.length == Model.RepoCount()) {
386+
repos = [];
387+
}
388+
372389
return {
373390
q : this.refs.q.getDOMNode().value.trim(),
374391
files : this.refs.files.getDOMNode().value.trim(),
375-
repos : this.refs.repos.state.value.join(','),
392+
repos : repos.join(','),
376393
i: this.refs.icase.getDOMNode().checked ? 'fosho' : 'nope'
377394
};
378395
},
@@ -419,9 +436,15 @@ var SearchBar = React.createClass({
419436
},
420437
render: function() {
421438
var repoCount = this.state.allRepos.length,
422-
repoOptions = [];
423-
this.state.allRepos.forEach(function(repoName){
424-
repoOptions.push(<RepoOption value={repoName} />);
439+
repoOptions = [],
440+
selected = {};
441+
442+
this.state.repos.forEach(function(repo) {
443+
selected[repo] = true;
444+
});
445+
446+
this.state.allRepos.forEach(function(repoName) {
447+
repoOptions.push(<RepoOption value={repoName} selected={selected[repoName]}/>);
425448
});
426449

427450
var stats = this.state.stats;
@@ -730,18 +753,28 @@ var ResultView = React.createClass({
730753

731754
var App = React.createClass({
732755
componentWillMount: function() {
733-
var params = ParamsFromUrl();
756+
var params = ParamsFromUrl(),
757+
repos = (params.repos == '') ? [] : params.repos.split(',');
758+
734759
this.setState({
735760
q: params.q,
736761
i: params.i,
737762
files: params.files,
738-
repos: params.repos
763+
repos: repos
739764
});
740765

741766
var _this = this;
767+
Model.didLoadRepos.tap(function(model, repos) {
768+
// If all repos are selected, don't show any selected.
769+
if (model.ValidRepos(_this.state.repos).length == model.RepoCount()) {
770+
_this.setState({repos: []});
771+
}
772+
});
773+
742774
Model.didSearch.tap(function(model, results, stats) {
743775
_this.refs.searchBar.setState({
744-
stats: stats
776+
stats: stats,
777+
repos: repos,
745778
});
746779

747780
_this.refs.resultView.setState({

0 commit comments

Comments
 (0)