diff --git a/ghost/admin/app/controllers/settings/members-access.js b/ghost/admin/app/controllers/settings/members-access.js new file mode 100644 index 0000000000..9023c89c79 --- /dev/null +++ b/ghost/admin/app/controllers/settings/members-access.js @@ -0,0 +1,37 @@ +import Controller from '@ember/controller'; +import {action} from '@ember/object'; +import {inject as service} from '@ember/service'; +import {task} from 'ember-concurrency-decorators'; +import {tracked} from '@glimmer/tracking'; + +export default class MembersAccessController extends Controller { + @service settings; + + @tracked showLeaveSettingsModal = false; + + 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; + } + + @task({drop: true}) + *saveSettingsTask() { + return yield this.settings.save(); + } +} diff --git a/ghost/admin/app/router.js b/ghost/admin/app/router.js index 0b21e94497..b099228274 100644 --- a/ghost/admin/app/router.js +++ b/ghost/admin/app/router.js @@ -48,6 +48,7 @@ Router.map(function () { this.route('settings'); this.route('settings.general', {path: '/settings/general'}); + this.route('settings.members-access', {path: '/settings/members-access'}); this.route('settings.members-email', {path: '/settings/members-email'}); this.route('settings.members-payments', {path: '/settings/members-payments'}); this.route('settings.code-injection', {path: '/settings/code-injection'}); diff --git a/ghost/admin/app/routes/settings/members-access.js b/ghost/admin/app/routes/settings/members-access.js new file mode 100644 index 0000000000..5060a24261 --- /dev/null +++ b/ghost/admin/app/routes/settings/members-access.js @@ -0,0 +1,22 @@ +import AuthenticatedRoute from 'ghost-admin/routes/authenticated'; +import {inject as service} from '@ember/service'; + +export default class MembersAccessRoute extends AuthenticatedRoute { + @service settings; + + model() { + this.settings.reload(); + } + + actions = { + willTransition(transition) { + return this.controller.leaveRoute(transition); + } + } + + buildRouteInfoMetadata() { + return { + titleToken: 'Settings - Members' + }; + } +} diff --git a/ghost/admin/app/templates/settings.hbs b/ghost/admin/app/templates/settings.hbs index 9e078d87da..e8f89512da 100644 --- a/ghost/admin/app/templates/settings.hbs +++ b/ghost/admin/app/templates/settings.hbs @@ -40,6 +40,15 @@
Configure members usage and default access levels
+