TryGhost/Ghost

View on GitHub
ghost/admin/app/utils/route.js

Summary

Maintainability
A
25 mins
Test Coverage
import Route from '@ember/routing/route';
import {inject} from 'ghost-admin/decorators/inject';
import {inject as service} from '@ember/service';

Route.reopen({
    billing: service(),
    router: service(),
    config: inject(),

    actions: {
        willTransition(transition) {
            if (this.get('upgradeStatus.isRequired')) {
                transition.abort();
                this.upgradeStatus.requireUpgrade();
                return false;
            } else if (this.config.hostSettings?.forceUpgrade) {
                // Do not prevent transitions to the BMA or to signout
                if (transition.to?.name === 'pro.index' || transition.to?.name === 'signout') {
                    return true;
                }

                transition.abort();
                // Catch and redirect every route in a force upgrade state
                this.billing.openBillingWindow(this.router.currentURL, '/pro');
                return false;
            } else {
                return true;
            }
        }
    }
});