Skip to content

Commit 9b346b3

Browse files
feat: Allow admin to search users by lastName and email (#5246)
1 parent 16e5145 commit 9b346b3

File tree

5 files changed

+32
-19
lines changed

5 files changed

+32
-19
lines changed

app/controllers/admin/users/list.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@ import EmberTableControllerMixin from 'open-event-frontend/mixins/ember-table-co
55

66

77
export default class extends Controller.extend(EmberTableControllerMixin) {
8+
sort_by = 'created-at';
9+
10+
sort_dir = 'ASC';
11+
812
@or('authManager.currentUser.isSuperAdmin', 'authManager.currentUser.isAdmin') hasRestorePrivileges;
913

1014
get columns() {
1115
return [
1216
{
1317
name : 'Name',
1418
valuePath : 'firstName',
15-
extraValuePaths : ['deletedAt', 'id', 'isSuperAdmin'],
19+
extraValuePaths : ['fullName', 'deletedAt', 'id', 'isSuperAdmin'],
1620
cellComponent : 'ui-table/cell/admin/users/cell-first-name',
1721
width : 155,
1822
isSortable : true,

app/mixins/ember-table-route.js

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,30 @@ export default Mixin.create({
2020
}
2121
},
2222

23-
applySearchFilters(options, params, searchField) {
24-
searchField = kebabCase(searchField);
25-
if (params.search) {
26-
options.pushObject({
27-
name : searchField,
28-
op : 'ilike',
29-
val : `%${params.search}%`
30-
});
31-
} else {
32-
options.removeObject({
33-
name : searchField,
34-
op : 'ilike',
35-
val : `%${params.search}%`
36-
});
23+
applySearchFilters(options, params, searchFields) {
24+
if (!Array.isArray(searchFields)) {
25+
searchFields = [searchFields];
26+
}
27+
let filters = options;
28+
if (searchFields.length > 1) {
29+
filters = [];
30+
options.pushObject({ or: filters });
31+
}
32+
for (let searchField of searchFields) {
33+
searchField = kebabCase(searchField);
34+
if (params.search) {
35+
filters.pushObject({
36+
name : searchField,
37+
op : 'ilike',
38+
val : `%${params.search}%`
39+
});
40+
} else {
41+
filters.removeObject({
42+
name : searchField,
43+
op : 'ilike',
44+
val : `%${params.search}%`
45+
});
46+
}
3747
}
3848
return options;
3949
},

app/routes/admin/users/list.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export default class extends Route.extend(EmberTableRouteMixin) {
2727
async model(params) {
2828
this.set('params', params);
2929
let filterOptions = [];
30-
const searchField = 'firstName';
3130
if (params.users_status === 'active') {
3231
filterOptions = [
3332
{
@@ -80,7 +79,7 @@ export default class extends Route.extend(EmberTableRouteMixin) {
8079
}
8180
];
8281
}
83-
filterOptions = this.applySearchFilters(filterOptions, params, searchField);
82+
filterOptions = this.applySearchFilters(filterOptions, params, ['firstName', 'lastName', 'email']);
8483

8584
let queryString = {
8685
include : 'events',
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<span>
1+
<span data-tooltip={{this.record}}>
22
{{moment-from-now this.record}}
33
</span>

app/templates/components/ui-table/cell/admin/users/cell-first-name.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<span>{{this.record}}</span>
1+
<span>{{this.extraRecords.fullName}}</span>
22
<div class="ui hidden divider"></div>
33
<div class="ui horizontal compact basic buttons">
44
<UiPopup @tagName="a" @click={{action this.props.actions.moveToUserDetails this.extraRecords.id}} @content={{t "View"}} @class="ui icon button">

0 commit comments

Comments
 (0)