Skip to content

Commit 4e458ea

Browse files
committed
feat: Refactor DevRank Controls: Split Search & Reorder Fields (#9057)
1 parent 8a9bd26 commit 4e458ea

2 files changed

Lines changed: 58 additions & 19 deletions

File tree

apps/devrank/store/Contributors.mjs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,47 @@
1-
import Contributor from '../model/Contributor.mjs';
2-
import Store from '../../../src/data/Store.mjs';
1+
import ContributorModel from '../model/Contributor.mjs';
2+
import Store from '../../../src/data/Store.mjs';
33

4+
/**
5+
* @class DevRank.store.Contributors
6+
* @extends Neo.data.Store
7+
*/
48
class Contributors extends Store {
59
static config = {
10+
/**
11+
* @member {String} className='DevRank.store.Contributors'
12+
* @protected
13+
*/
614
className: 'DevRank.store.Contributors',
7-
model : Contributor,
15+
/**
16+
* @member {Neo.data.Model} model=ContributorModel
17+
*/
18+
model: ContributorModel,
19+
/**
20+
* @member {String} keyProperty='login'
21+
*/
822
keyProperty: 'login',
9-
autoLoad : true,
10-
url : '../../apps/devrank/resources/users.json',
11-
sorters : [
23+
/**
24+
* @member {Boolean} autoLoad=true
25+
*/
26+
autoLoad: true,
27+
/**
28+
* @member {Object[]} filters
29+
*/
30+
filters: [
31+
{property: 'location', operator: 'like', value: null},
32+
{property: 'login', operator: 'like', value: null},
33+
{property: 'name', operator: 'like', value: null}
34+
],
35+
/**
36+
* @member {Object[]} sorters
37+
*/
38+
sorters: [
1239
{property: 'total_contributions', direction: 'DESC'}
13-
]
40+
],
41+
/**
42+
* @member {String} url='../../apps/devrank/resources/users.json'
43+
*/
44+
url: '../../apps/devrank/resources/users.json'
1445
}
1546
}
1647

apps/devrank/view/ControlsContainer.mjs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,33 @@ class ControlsContainer extends Container {
4040
layout: 'vbox',
4141

4242
items: [{
43+
module : Country,
44+
clearable : true,
45+
labelPosition: 'inline',
46+
labelText : 'Country',
47+
listeners : {change: 'up.onFilterChange'},
48+
name : 'location',
49+
showFlags : true,
50+
style : {marginTop: '.3em'},
51+
width : 200
52+
}, {
4353
ntype : 'textfield',
4454
clearable : true,
4555
editable : true,
4656
labelPosition: 'inline',
47-
labelText : 'Search User',
48-
listeners : {change: 'up.onSearchFieldChange'},
49-
name : 'search',
57+
labelText : 'Username',
58+
listeners : {change: 'up.onFilterChange'},
59+
name : 'login',
5060
style : {marginTop: '.3em'},
5161
width : 200
5262
}, {
53-
module : Country,
63+
ntype : 'textfield',
5464
clearable : true,
65+
editable : true,
5566
labelPosition: 'inline',
56-
labelText : 'Country',
57-
showFlags : true,
67+
labelText : 'Fullname',
68+
listeners : {change: 'up.onFilterChange'},
69+
name : 'name',
5870
style : {marginTop: '.3em'},
5971
width : 200
6072
}, {
@@ -142,12 +154,8 @@ class ControlsContainer extends Container {
142154
/**
143155
* @param {Object} data
144156
*/
145-
async onSearchFieldChange(data) {
146-
let me = this;
147-
148-
// Simple single-field filter for now
149-
// We can expand this to search multiple fields if needed
150-
me.grid.store.getFilter('login').value = data.value;
157+
onFilterChange(data) {
158+
this.grid.store.getFilter(data.component.name).value = data.value
151159
}
152160

153161
/**

0 commit comments

Comments
 (0)