mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-28 22:43:30 +03:00
9684e5e347
no issue - the webhook form needs to be re-usable for the "edit webhook" modal - renamed modal - added logic to adjust the confirm button's text depending on the state of the passed in webhook model
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
import ModalComponent from 'ghost-admin/components/modal-base';
|
|
import Webhook from 'ghost-admin/models/webhook';
|
|
import {alias} from '@ember/object/computed';
|
|
import {camelize} from '@ember/string';
|
|
import {isInvalidError} from 'ember-ajax/errors';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency';
|
|
|
|
export default ModalComponent.extend({
|
|
router: service(),
|
|
|
|
availableEvents: null,
|
|
buttonText: 'Save',
|
|
successText: 'Saved',
|
|
|
|
confirm() {},
|
|
|
|
webhook: alias('model'),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.availableEvents = [
|
|
{event: 'site.changed', name: 'Site Changed (rebuild)'},
|
|
{event: 'subscriber.added', name: 'Subscriber Added'},
|
|
{event: 'subscriber.deleted', name: 'Subscriber Deleted'}
|
|
];
|
|
},
|
|
|
|
didReceiveAttrs() {
|
|
if (this.webhook.isNew) {
|
|
this.set('buttonText', 'Create');
|
|
this.set('successText', 'Created');
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
selectEvent(value) {
|
|
this.webhook.set('event', value);
|
|
this.webhook.validate({property: 'event'});
|
|
},
|
|
|
|
confirm() {
|
|
this.saveWebhook.perform();
|
|
}
|
|
},
|
|
|
|
saveWebhook: task(function* () {
|
|
try {
|
|
let webhook = yield this.confirm();
|
|
let integration = yield webhook.get('integration');
|
|
this.router.transitionTo('settings.integration', integration);
|
|
} catch (error) {
|
|
// TODO: server-side validation errors should be serialized
|
|
// properly so that errors are added to model.errors automatically
|
|
if (error && isInvalidError(error)) {
|
|
let attrs = Array.from(Webhook.attributes.keys());
|
|
|
|
error.payload.errors.forEach((error) => {
|
|
let {message, property} = error;
|
|
property = camelize(property);
|
|
|
|
if (property && attrs.includes(property)) {
|
|
this.webhook.errors.add(property, message);
|
|
this.webhook.hasValidated.pushObject(property);
|
|
}
|
|
});
|
|
|
|
return;
|
|
}
|
|
|
|
// bubble up to the global error handler
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
})
|
|
});
|