Skip to content

Commit d6114bc

Browse files
uds5501abhinavk96
authored andcommitted
feat: add resend confirmation workflow (#3251)
1 parent c4b391e commit d6114bc

File tree

5 files changed

+36
-12
lines changed

5 files changed

+36
-12
lines changed

app/controllers/events/view/tickets/orders/list.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,26 @@ export default Controller.extend({
7474
.finally(() => {
7575
this.set('isLoading', false);
7676
});
77+
},
78+
async resendConfirmation(order) {
79+
try {
80+
const payload = {
81+
'data': {
82+
'order' : order.identifier,
83+
'user' : this.authManager.currentUser.email
84+
}
85+
};
86+
await this.loader.post('orders/resend-email', payload);
87+
this.notify.success(this.l10n.t('Email confirmation has been sent to attendees successfully'));
88+
} catch (error) {
89+
if (error.status && error.status === 429) {
90+
this.notify.error(this.l10n.t('Only 5 resend actions are allowed in a minute'));
91+
} else if (error.status && error.status === 422) {
92+
this.notify.error(this.l10n.tVar(error.response.errors[0].detail));
93+
} else {
94+
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
95+
}
96+
}
7797
}
7898
}
7999
});

app/services/loader.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { buildUrl } from 'open-event-frontend/utils/url';
66
import httpStatus from 'http-status';
77
import objectToFormData from 'object-to-formdata';
88
import fetch from 'fetch';
9-
import { clone, assign, merge } from 'lodash-es';
9+
import { clone, assign, merge, pick, isString } from 'lodash-es';
1010
const bodyAllowedIn = ['PATCH', 'POST', 'PUT'];
1111

1212
export default Service.extend({
@@ -94,17 +94,17 @@ export default Service.extend({
9494

9595
if (!response.ok) {
9696
const defaultMessage = httpStatus[response.status];
97-
if (parsedResponse) {
98-
throw parsedResponse;
99-
}
100-
throw new Error(
101-
getErrorMessage(
97+
const errorResponse = pick(response, ['status', 'ok', 'statusText', 'headers', 'url']);
98+
errorResponse.statusText = defaultMessage;
99+
errorResponse.response = parsedResponse;
100+
errorResponse.errorMessage = isString(parsedResponse) ? parsedResponse
101+
: getErrorMessage(
102102
response.statusText,
103103
defaultMessage
104104
? `${response.status} - ${defaultMessage}`
105105
: `Could not make ${fetchOptions.type} request to ${fetchOptions.url}`
106-
)
107-
);
106+
);
107+
throw errorResponse;
108108
}
109109
return parsedResponse;
110110
},

app/templates/components/ui-table/cell/events/view/tickets/orders/cell-order.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<i class="trash icon"></i>
4040
{{/ui-popup}}
4141
{{/if}}
42-
{{#ui-popup content=(t 'Resend order confirmation') class="{{if device.isMobile 'medium' 'huge'}} ui icon button" position='top center'}}
42+
{{#ui-popup content=(t 'Resend order confirmation') click=(action resendConfirmation record) class="{{if device.isMobile 'medium' 'huge'}} ui icon button" position='top center'}}
4343
<i class="mail outline icon"></i>
4444
{{/ui-popup}}
4545
</div>

app/templates/events/view/tickets/orders/list.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
completeOrder=(action 'completeOrder')
1313
deleteOrder=(action 'deleteOrder')
1414
cancelOrder=(action 'cancelOrder')
15+
resendConfirmation=(action 'resendConfirmation')
1516
}}
1617
</div>

tests/integration/components/ui-table/cell/events/view/tickets/orders/cell-order-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@ module('Integration | Component | ui table/cell/events/view/tickets/orders/cell
88
setupIntegrationTest(hooks);
99

1010
test('it renders', async function(assert) {
11-
this.set('deleteOrder', () => {});
12-
this.set('cancelOrder', () => {});
11+
this.setProperties({
12+
'deleteOrder' : () => {},
13+
'cancelOrder' : () => {},
14+
'resendConfirmation' : () => {}
15+
});
1316
let record = EmberObject.create({
1417
amount : 20,
1518
status : 'cancelled',
1619
identifier : 'identifier_order'
1720
});
1821
this.set('record', record);
19-
await render(hbs`{{ui-table/cell/events/view/tickets/orders/cell-order deleteOrder=(action deleteOrder) cancelOrder=(action cancelOrder) record=record }}`);
22+
await render(hbs`{{ui-table/cell/events/view/tickets/orders/cell-order deleteOrder=(action deleteOrder) cancelOrder=(action cancelOrder) resendConfirmation=(action resendConfirmation) record=record }}`);
2023
assert.ok(this.element.textContent.trim().includes(''));
2124
});
2225
});

0 commit comments

Comments
 (0)