mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
Added unsaved changes modal to members-payments screen
no issue Unsaved changes handling hadn't been moved across fully to the payments screen when settings were re-jigged meaning changes on the payments screen would make settings dirty and show unsaved changes modal unexpectedly on other screens. - refactored `members-payments` route to use native classes - used same unsaved changes pattern as `members-access` route/controller
This commit is contained in:
parent
4febcdf7ae
commit
89b9f6cfc6
3 changed files with 49 additions and 9 deletions
|
@ -2,11 +2,14 @@
|
||||||
import Controller from '@ember/controller';
|
import Controller from '@ember/controller';
|
||||||
import {action} from '@ember/object';
|
import {action} from '@ember/object';
|
||||||
import {inject as service} from '@ember/service';
|
import {inject as service} from '@ember/service';
|
||||||
import {task} from 'ember-concurrency';
|
import {task} from 'ember-concurrency-decorators';
|
||||||
|
import {tracked} from '@glimmer/tracking';
|
||||||
|
|
||||||
export default class MembersPaymentsController extends Controller {
|
export default class MembersPaymentsController extends Controller {
|
||||||
@service settings;
|
@service settings;
|
||||||
|
|
||||||
|
@tracked showLeaveSettingsModal = false;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
setDefaultContentVisibility(value) {
|
setDefaultContentVisibility(value) {
|
||||||
this.settings.set('defaultContentVisibility', value);
|
this.settings.set('defaultContentVisibility', value);
|
||||||
|
@ -22,6 +25,27 @@ export default class MembersPaymentsController extends Controller {
|
||||||
return yield this.settings.save();
|
return yield this.settings.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
leaveRoute(transition) {
|
||||||
|
if (this.settings.get('hasDirtyAttributes')) {
|
||||||
|
transition.abort();
|
||||||
|
this.leaveSettingsTransition = transition;
|
||||||
|
this.showLeaveSettingsModal = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
async confirmLeave() {
|
||||||
|
this.settings.rollbackAttributes();
|
||||||
|
this.showLeaveSettingsModal = false;
|
||||||
|
this.leaveSettingsTransition.retry();
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
cancelLeave() {
|
||||||
|
this.showLeaveSettingsModal = false;
|
||||||
|
this.leaveSettingsTransition = null;
|
||||||
|
}
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
// stripeConnectIntegrationToken is not a persisted value so we don't want
|
// stripeConnectIntegrationToken is not a persisted value so we don't want
|
||||||
// to keep it around across transitions
|
// to keep it around across transitions
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import AuthenticatedRoute from 'ghost-admin/routes/authenticated';
|
import AuthenticatedRoute from 'ghost-admin/routes/authenticated';
|
||||||
import {inject as service} from '@ember/service';
|
import {inject as service} from '@ember/service';
|
||||||
|
|
||||||
export default AuthenticatedRoute.extend({
|
export default class MembersPaymentsRoute extends AuthenticatedRoute {
|
||||||
session: service(),
|
@service session;
|
||||||
settings: service(),
|
@service settings;
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
this._super(...arguments);
|
super.beforeModel(...arguments);
|
||||||
|
|
||||||
return this.session.get('user').then((user) => {
|
return this.session.get('user').then((user) => {
|
||||||
if (!user.isOwner && user.isAdmin) {
|
if (!user.isOwner && user.isAdmin) {
|
||||||
return this.transitionTo('settings');
|
return this.transitionTo('settings');
|
||||||
|
@ -14,21 +15,27 @@ export default AuthenticatedRoute.extend({
|
||||||
return this.transitionTo('home');
|
return this.transitionTo('home');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
|
|
||||||
model() {
|
model() {
|
||||||
return this.settings.reload();
|
return this.settings.reload();
|
||||||
},
|
}
|
||||||
|
|
||||||
|
actions = {
|
||||||
|
willTransition(transition) {
|
||||||
|
return this.controller.leaveRoute(transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resetController(controller, isExiting) {
|
resetController(controller, isExiting) {
|
||||||
if (isExiting) {
|
if (isExiting) {
|
||||||
controller.reset();
|
controller.reset();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
buildRouteInfoMetadata() {
|
buildRouteInfoMetadata() {
|
||||||
return {
|
return {
|
||||||
titleToken: 'Settings - Members'
|
titleToken: 'Settings - Members'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
|
@ -24,4 +24,13 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{{#if this.showLeaveSettingsModal}}
|
||||||
|
<GhFullscreenModal
|
||||||
|
@modal="leave-settings"
|
||||||
|
@confirm={{this.confirmLeave}}
|
||||||
|
@close={{this.cancelLeave}}
|
||||||
|
@modifier="action wide"
|
||||||
|
/>
|
||||||
|
{{/if}}
|
||||||
</section>
|
</section>
|
Loading…
Add table
Reference in a new issue