mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
refs #5798, closes #5018 - adds new `gh-fullscreen-modal` component - modals are now specified in-context so that they can have deeper interaction with their surrounding components/controller/route, i.e. a modal component can be a thin confirm/deny wrapper over the underlying controller action keeping all context-sensitive logic in one place - adds spin-buttons to all modals with async behaviour - adds/improves behaviour of inline-validation in modals - improves re-authenticate modal to properly handle validation and authentication errors
64 lines
2.2 KiB
JavaScript
64 lines
2.2 KiB
JavaScript
import Ember from 'ember';
|
|
import ModalComponent from 'ghost/components/modals/base';
|
|
import ValidationEngine from 'ghost/mixins/validation-engine';
|
|
|
|
const {$, computed, inject} = Ember;
|
|
|
|
export default ModalComponent.extend(ValidationEngine, {
|
|
validationType: 'signin',
|
|
|
|
submitting: false,
|
|
authenticationError: null,
|
|
|
|
notifications: inject.service(),
|
|
session: inject.service(),
|
|
|
|
identification: computed('session.user.email', function () {
|
|
return this.get('session.user.email');
|
|
}),
|
|
|
|
_authenticate() {
|
|
let session = this.get('session');
|
|
let authStrategy = 'authenticator:oauth2';
|
|
let identification = this.get('identification');
|
|
let password = this.get('password');
|
|
|
|
session.set('skipAuthSuccessHandler', true);
|
|
|
|
this.toggleProperty('submitting');
|
|
|
|
return session.authenticate(authStrategy, identification, password).finally(() => {
|
|
this.toggleProperty('submitting');
|
|
session.set('skipAuthSuccessHandler', undefined);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
confirm() {
|
|
// Manually trigger events for input fields, ensuring legacy compatibility with
|
|
// browsers and password managers that don't send proper events on autofill
|
|
$('#login').find('input').trigger('change');
|
|
|
|
this.set('authenticationError', null);
|
|
|
|
this.validate({property: 'signin'}).then(() => {
|
|
this._authenticate().then(() => {
|
|
this.get('notifications').closeAlerts('post.save');
|
|
this.send('closeModal');
|
|
}).catch((error) => {
|
|
if (error && error.errors) {
|
|
error.errors.forEach((err) => {
|
|
err.message = Ember.String.htmlSafe(err.message);
|
|
});
|
|
|
|
this.get('errors').add('password', 'Incorrect password');
|
|
this.get('hasValidated').pushObject('password');
|
|
this.set('authenticationError', error.errors[0].message);
|
|
}
|
|
});
|
|
}, () => {
|
|
this.get('hasValidated').pushObject('password');
|
|
});
|
|
}
|
|
}
|
|
});
|