Skip to content

Commit 7d007f5

Browse files
committed
Do custom search for each filter in repo-search
1 parent 1ccaddc commit 7d007f5

File tree

2 files changed

+73
-20
lines changed

2 files changed

+73
-20
lines changed

public/js/index.js

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,12 +1671,43 @@ 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+
}
16751697
}
16761698
},
16771699

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;
1706+
},
1707+
},
1708+
16781709
mounted: function() {
1679-
this.searchRepos();
1710+
this.searchRepos(this.reposFilter);
16801711

16811712
var self = this;
16821713
Vue.nextTick(function() {
@@ -1691,6 +1722,7 @@ function initVueComponents(){
16911722

16921723
changeReposFilter: function(filter) {
16931724
this.reposFilter = filter;
1725+
this.searchRepos(filter);
16941726
},
16951727

16961728
showRepo: function(repo, filter) {
@@ -1708,28 +1740,31 @@ function initVueComponents(){
17081740
}
17091741
},
17101742

1711-
searchRepos: function() {
1743+
searchRepos: function(reposFilter) {
17121744
var self = this;
1745+
17131746
this.isLoading = true;
1747+
1748+
var searchedMode = this.repoTypes[reposFilter].searchMode;
1749+
var searchedURL = this.searchURL;
17141750
var searchedQuery = this.searchQuery;
1715-
$.getJSON(this.searchURL(), function(result, textStatus, request) {
1716-
if (searchedQuery == self.searchQuery) {
1751+
1752+
$.getJSON(searchedURL, function(result, textStatus, request) {
1753+
if (searchedURL == self.searchURL) {
17171754
self.repos = result.data;
1718-
if (searchedQuery == "") {
1719-
self.reposTotalCount = request.getResponseHeader('X-Total-Count');
1755+
var count = request.getResponseHeader('X-Total-Count');
1756+
if (searchedQuery === '' && searchedMode === '') {
1757+
self.reposTotalCount = count;
17201758
}
1759+
self.repoTypes[reposFilter].count = count;
17211760
}
17221761
}).always(function() {
1723-
if (searchedQuery == self.searchQuery) {
1762+
if (searchedURL == self.searchURL) {
17241763
self.isLoading = false;
17251764
}
17261765
});
17271766
},
17281767

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

templates/user/dashboard/dashboard.tmpl

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,33 @@
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">${isLoading ? 0 : repoTypes['all'].count}</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">${isLoading ? 0 : repoTypes['sources'].count}</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">${isLoading ? 0 : repoTypes['forks'].count}</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">${isLoading ? 0 : repoTypes['mirrors'].count}</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">${isLoading ? 0 : repoTypes['collaborative'].count}</div>
69+
</a>
5570
</div>
5671
</div>
57-
<div class="ui attached table segment">
72+
<div v-if="!isLoading" class="ui attached table segment">
5873
<ul class="repo-owner-name-list">
5974
<li v-for="repo in repos" :class="{'private': repo.private}" v-show="showRepo(repo, reposFilter)">
6075
<a :href="suburl + '/' + repo.full_name">
@@ -65,11 +80,14 @@
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>
7287
</div>
88+
<div v-else class="ui attached segment">
89+
<div class="ui active centered inline small loader"></div>
90+
</div>
7391
</div>
7492
<div v-if="!isOrganization" v-show="tab === 'organizations'" class="ui tab active list">
7593
<h4 class="ui top attached header">

0 commit comments

Comments
 (0)