Skip to content

Commit 25acd6c

Browse files
Morlinestlafriks
authored andcommitted
Use custom search for each filter type in dashboard (#2343)
* Do custom search for each filter in repo-search * Fix search url * Simplify code * Remove loader and reset counts when changing filter
1 parent 266ebf8 commit 25acd6c

File tree

2 files changed

+74
-19
lines changed

2 files changed

+74
-19
lines changed

public/js/index.js

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,12 +1671,46 @@ function initVueComponents(){
16711671
reposTotalCount: 0,
16721672
reposFilter: 'all',
16731673
searchQuery: '',
1674-
isLoading: false
1674+
isLoading: false,
1675+
repoTypes: {
1676+
'all': {
1677+
count: 0,
1678+
searchMode: '',
1679+
},
1680+
'forks': {
1681+
count: 0,
1682+
searchMode: 'fork',
1683+
},
1684+
'mirrors': {
1685+
count: 0,
1686+
searchMode: 'mirror',
1687+
},
1688+
'sources': {
1689+
count: 0,
1690+
searchMode: 'source',
1691+
},
1692+
'collaborative': {
1693+
count: 0,
1694+
searchMode: 'collaborative',
1695+
},
1696+
}
1697+
}
1698+
},
1699+
1700+
computed: {
1701+
showMoreReposLink: function() {
1702+
return this.repos.length > 0 && this.repos.length < this.repoTypes[this.reposFilter].count;
1703+
},
1704+
searchURL: function() {
1705+
return this.suburl + '/api/v1/repos/search?uid=' + this.uid + '&q=' + this.searchQuery + '&limit=' + this.searchLimit + '&mode=' + this.repoTypes[this.reposFilter].searchMode + (this.reposFilter !== 'all' ? '&exclusive=1' : '');
1706+
},
1707+
repoTypeCount: function() {
1708+
return this.repoTypes[this.reposFilter].count;
16751709
}
16761710
},
16771711

16781712
mounted: function() {
1679-
this.searchRepos();
1713+
this.searchRepos(this.reposFilter);
16801714

16811715
var self = this;
16821716
Vue.nextTick(function() {
@@ -1691,6 +1725,9 @@ function initVueComponents(){
16911725

16921726
changeReposFilter: function(filter) {
16931727
this.reposFilter = filter;
1728+
this.repos = [];
1729+
this.repoTypes[filter].count = 0;
1730+
this.searchRepos(filter);
16941731
},
16951732

16961733
showRepo: function(repo, filter) {
@@ -1708,28 +1745,31 @@ function initVueComponents(){
17081745
}
17091746
},
17101747

1711-
searchRepos: function() {
1748+
searchRepos: function(reposFilter) {
17121749
var self = this;
1750+
17131751
this.isLoading = true;
1752+
1753+
var searchedMode = this.repoTypes[reposFilter].searchMode;
1754+
var searchedURL = this.searchURL;
17141755
var searchedQuery = this.searchQuery;
1715-
$.getJSON(this.searchURL(), function(result, textStatus, request) {
1716-
if (searchedQuery == self.searchQuery) {
1756+
1757+
$.getJSON(searchedURL, function(result, textStatus, request) {
1758+
if (searchedURL == self.searchURL) {
17171759
self.repos = result.data;
1718-
if (searchedQuery == "") {
1719-
self.reposTotalCount = request.getResponseHeader('X-Total-Count');
1760+
var count = request.getResponseHeader('X-Total-Count');
1761+
if (searchedQuery === '' && searchedMode === '') {
1762+
self.reposTotalCount = count;
17201763
}
1764+
self.repoTypes[reposFilter].count = count;
17211765
}
17221766
}).always(function() {
1723-
if (searchedQuery == self.searchQuery) {
1767+
if (searchedURL == self.searchURL) {
17241768
self.isLoading = false;
17251769
}
17261770
});
17271771
},
17281772

1729-
searchURL: function() {
1730-
return this.suburl + '/api/v1/repos/search?uid=' + this.uid + '&q=' + this.searchQuery + '&limit=' + this.searchLimit;
1731-
},
1732-
17331773
repoClass: function(repo) {
17341774
if (repo.fork) {
17351775
return 'octicon octicon-repo-forked';

templates/user/dashboard/dashboard.tmpl

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,30 @@
4343
</h4>
4444
<div class="ui attached secondary segment repos-search">
4545
<div class="ui fluid icon input" :class="{loading: isLoading}">
46-
<input @input="searchRepos" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
46+
<input @input="searchRepos(reposFilter)" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
4747
<i class="search icon"></i>
4848
</div>
4949
<div class="ui secondary tiny pointing borderless menu center aligned grid repos-filter">
50-
<a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">{{.i18n.Tr "all"}}</a>
51-
<a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">{{.i18n.Tr "sources"}}</a>
52-
<a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">{{.i18n.Tr "forks"}}</a>
53-
<a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">{{.i18n.Tr "mirrors"}}</a>
54-
<a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">{{.i18n.Tr "collaborative"}}</a>
50+
<a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">
51+
{{.i18n.Tr "all"}}
52+
<div v-show="reposFilter === 'all'" class="ui circular mini grey label">${repoTypeCount}</div>
53+
</a>
54+
<a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">
55+
{{.i18n.Tr "sources"}}
56+
<div v-show="reposFilter === 'sources'" class="ui circular mini grey label">${repoTypeCount}</div>
57+
</a>
58+
<a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">
59+
{{.i18n.Tr "forks"}}
60+
<div v-show="reposFilter === 'forks'" class="ui circular mini grey label">${repoTypeCount}</div>
61+
</a>
62+
<a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">
63+
{{.i18n.Tr "mirrors"}}
64+
<div v-show="reposFilter === 'mirrors'" class="ui circular mini grey label">${repoTypeCount}</div>
65+
</a>
66+
<a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">
67+
{{.i18n.Tr "collaborative"}}
68+
<div v-show="reposFilter === 'collaborative'" class="ui circular mini grey label">${repoTypeCount}</div>
69+
</a>
5570
</div>
5671
</div>
5772
<div class="ui attached table segment">
@@ -65,7 +80,7 @@
6580
</span>
6681
</a>
6782
</li>
68-
<li v-if="repos.length < reposTotalCount">
83+
<li v-if="showMoreReposLink">
6984
<a :href="moreReposLink">{{.i18n.Tr "home.show_more_repos"}}</a>
7085
</li>
7186
</ul>

0 commit comments

Comments
 (0)