Skip to content

Commit cca08f3

Browse files
kushthedudeabhinavk96
authored andcommitted
feat: Introducing Ember Tables in Event Dashboard (#3363)
1 parent de0f59f commit cca08f3

File tree

8 files changed

+118
-88
lines changed

8 files changed

+118
-88
lines changed

app/controllers/events/view/index.js

Lines changed: 63 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,66 @@
11
import Controller from '@ember/controller';
2+
import { computed, action } from '@ember/object';
3+
import EmberTableControllerMixin from 'open-event-frontend/mixins/ember-table-controller';
24

3-
export default Controller.extend({
4-
sponsorsColumns: [
5-
{
6-
propertyName : 'logo-url',
7-
template : 'components/ui-table/cell/cell-image',
8-
title : 'Logo',
9-
disableSorting : true
10-
},
11-
{
12-
propertyName : 'name',
13-
title : 'Name'
14-
},
15-
{
16-
propertyName : 'type',
17-
template : 'components/ui-table/cell/cell-sponsor-sanitize',
18-
title : 'Type',
19-
disableSorting : true
20-
},
21-
{
22-
propertyName : 'level',
23-
template : 'components/ui-table/cell/cell-sponsor-sanitize',
24-
title : 'Level'
25-
},
26-
{
27-
title : 'Options',
28-
template : 'components/ui-table/cell/cell-sponsor-options',
29-
disableSorting : true
30-
}
31-
],
32-
actions: {
33-
deleteSponsor(sponsor) {
34-
this.set('isLoading', true);
35-
sponsor.destroyRecord()
36-
.then(() => {
37-
this.notify.success(this.l10n.t('Sponsor has been deleted successfully.'));
38-
this.get('model.sponsors').removeObject(sponsor);
39-
})
40-
.catch(() => {
41-
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
42-
})
43-
.finally(() => {
44-
this.set('isLoading', false);
45-
});
46-
},
47-
editSponsor() {
48-
this.transitionToRoute('events.view.edit.sponsors');
49-
}
5+
export default class extends Controller.extend(EmberTableControllerMixin) {
6+
7+
@computed()
8+
get columns() {
9+
return [
10+
{
11+
name : 'Logo',
12+
valuePath : 'logoUrl',
13+
cellComponent : 'ui-table/cell/cell-sponsor-image'
14+
},
15+
{
16+
name : 'Name',
17+
valuePath : 'name',
18+
headerComponent : 'tables/headers/sort',
19+
isSortable : true
20+
21+
},
22+
{
23+
name : 'Type',
24+
valuePath : 'type',
25+
cellComponent : 'ui-table/cell/cell-sponsor-sanitize'
26+
},
27+
{
28+
name : 'Level',
29+
valuePath : 'level',
30+
cellComponent : 'ui-table/cell/cell-sponsor-sanitize'
31+
},
32+
{
33+
name : 'Options',
34+
valuePath : 'id',
35+
cellComponent : 'ui-table/cell/cell-sponsor-options',
36+
actions : {
37+
editSponsor : this.editSponsor.bind(this),
38+
deleteSponsor : this.deleteSponsor.bind(this)
39+
}
40+
}
41+
];
42+
}
43+
44+
@action
45+
deleteSponsor(sponsor_id) {
46+
this.set('isLoading', true);
47+
let sponsor = this.store.peekRecord('sponsor', sponsor_id, { backgroundReload: false });
48+
sponsor.destroyRecord()
49+
.then(() => {
50+
this.notify.success(this.l10n.t('Sponsor has been deleted successfully.'));
51+
this.refreshModel.bind(this)();
52+
})
53+
.catch(() => {
54+
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
55+
})
56+
.finally(() => {
57+
this.set('isLoading', false);
58+
});
5059
}
51-
});
60+
61+
@action
62+
editSponsor() {
63+
this.transitionToRoute('events.view.edit.sponsors');
64+
}
65+
}
66+

app/routes/events/view/index.js

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
import Route from '@ember/routing/route';
2+
import EmberTableRouteMixin from 'open-event-frontend/mixins/ember-table-route';
23

3-
export default Route.extend({
4-
async model() {
4+
export default class extends Route.extend(EmberTableRouteMixin) {
5+
6+
async model(params) {
57
let eventDetails = this.modelFor('events.view');
6-
let sponsorQueryObject = {
7-
'page[size]': 10
8+
const searchField = 'name';
9+
let filterOptions = [];
10+
filterOptions = this.applySearchFilters(filterOptions, params, searchField);
11+
let queryString = {
12+
filter : filterOptions,
13+
'page[size]' : params.per_page || 10,
14+
'page[number]' : params.per_page || 1
815
};
16+
queryString = this.applySortFilters(queryString, params);
17+
918

1019
return {
11-
event : await eventDetails,
12-
sponsors : await eventDetails.query('sponsors', sponsorQueryObject),
13-
query : sponsorQueryObject,
14-
sponsorObjectType : 'sponsors',
15-
roleInvites : await eventDetails.query('roleInvites', {}),
16-
sessionTypes : await eventDetails.query('sessionTypes', {}),
17-
socialLinks : await eventDetails.query('socialLinks', {}),
18-
statistics : await eventDetails.query('eventStatisticsGeneral', {}),
19-
orderStat : await eventDetails.query('orderStatistics', {}),
20-
tickets : await eventDetails.query('tickets', {}),
21-
roles : await this.store.findAll('role')
20+
event : await eventDetails,
21+
sponsors : await this.asArray(eventDetails.query('sponsors', {}, queryString)),
22+
roleInvites : await eventDetails.query('roleInvites', {}),
23+
sessionTypes : await eventDetails.query('sessionTypes', {}),
24+
socialLinks : await eventDetails.query('socialLinks', {}),
25+
statistics : await eventDetails.query('eventStatisticsGeneral', {}),
26+
orderStat : await eventDetails.query('orderStatistics', {}),
27+
tickets : await eventDetails.query('tickets', {}),
28+
roles : await this.store.findAll('role')
2229
};
2330
}
24-
});
31+
}

app/templates/components/events/view/overview/event-sponsors.hbs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,17 @@
66
<div class="header">{{t 'Event sponsors'}}</div>
77
</div>
88
<div class="content">
9-
{{events/events-table
10-
columns=columns
11-
data=data
12-
store=store
13-
query=query
14-
isNotStoreQuery = true
15-
modelName = modelName
16-
useNumericPagination=true
17-
showGlobalFilter=true
18-
showPageSize=true
19-
moveToDetails='moveToDetails'
20-
editEvent='editEvent'
21-
deleteSponsor=deleteSponsor
22-
editSponsor=editSponsor
23-
customGlobalFilter='name'
24-
}}
9+
{{tables/default columns=columns
10+
rows=data.data
11+
currentPage=page
12+
pageSize=per_page
13+
searchQuery=search
14+
sortBy=sort_by
15+
sortDir=sort_dir
16+
metaData=data.meta
17+
filterOptions=filterOptions
18+
widthConstraint="eq-container"
19+
resizeMode="fluid"
20+
fillMode="equal-column"
21+
}}
2522
</div>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<img class="ui tiny image" src="{{if record record '/images/placeholders/Other.jpg'}}" alt="Event logo">
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<div class="ui {{if device.isMobile 'horizontal' 'vertical'}} compact basic buttons">
2-
{{#ui-popup content=(t 'Edit') click=(action editSponsor) class='ui icon button' position='left center'}}
2+
{{#ui-popup content=(t 'Edit') click=(action props.actions.editSponsor) class='ui icon button' position='left center'}}
33
<i class="edit icon"></i>
44
{{/ui-popup}}
5-
{{#ui-popup content=(t 'Delete') click=(action (confirm (t 'Are you sure you would like to delete this Sponsor?') (action deleteSponsor record))) class='ui icon button' position='left center'}}
5+
{{#ui-popup content=(t 'Delete') click=(action (confirm (t 'Are you sure you would like to delete this Sponsor?') (action props.actions.deleteSponsor record))) class='ui icon button' position='left center'}}
66
<i class="trash outline icon"></i>
77
{{/ui-popup}}
88
</div>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
{{#if (get record column.propertyName)}}
2-
<span>{{get record column.propertyName}}</span>
1+
{{#if record}}
2+
{{sanitize record}}
33
{{/if}}

app/templates/events/view/index.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{{events/view/overview/manage-roles data=model}}
1010
</div>
1111
<div class="eight wide column">
12-
{{events/view/overview/event-sponsors data=model.sponsors query=model.query modelName=model.sponsorObjectType store=model.event columns=sponsorsColumns deleteSponsor=(action 'deleteSponsor') editSponsor=(action 'editSponsor')}}
12+
{{events/view/overview/event-sponsors data=model.sponsors columns=columns page=page per_page=per_page search=search sort_by=sort_by sort_dir=sort_dir filterOptions=filterOptions}}
1313
</div>
1414
<div class="eight wide column">
1515
{{events/view/overview/event-apps}}

tests/integration/components/ui-table/cell/cell-sponsor-options-test.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,20 @@ import { render } from '@ember/test-helpers';
66
module('Integration | Component | ui table/cell/cell sponsor options', function(hooks) {
77
setupIntegrationTest(hooks);
88

9+
const props = {
10+
actions: {
11+
editSponsor : () => {},
12+
deleteSponsor : () => {}
13+
}
14+
};
15+
916
test('it renders', async function(assert) {
10-
this.set('deleteSponsor', () => {});
11-
this.set('editSponsor', () => {});
12-
await render(hbs`{{ui-table/cell/cell-sponsor-options deleteSponsor=(action deleteSponsor) editSponsor=(action editSponsor)}}`);
17+
18+
this.setProperties({
19+
props
20+
});
21+
22+
await render(hbs`{{ui-table/cell/cell-sponsor-options props=props }}`);
1323
assert.ok(this.element.textContent.trim().includes(''));
1424
});
1525
});

0 commit comments

Comments
 (0)