mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-01 22:02:11 +03:00
430ba2329d
no refs Reworks the set pricing page on the launch wizard to work similar to membership settings, where instead of being disabled when prices exist, it shows existing monthly/yearly prices as well as handles creation of new prices and updating portal settings.
164 lines
3.8 KiB
JavaScript
164 lines
3.8 KiB
JavaScript
import Controller from '@ember/controller';
|
|
import envConfig from 'ghost-admin/config/environment';
|
|
import {action} from '@ember/object';
|
|
import {inject as service} from '@ember/service';
|
|
import {tracked} from '@glimmer/tracking';
|
|
|
|
const DEFAULT_STEPS = {
|
|
'customise-design': {
|
|
title: 'Customise your site',
|
|
position: 'Step 1',
|
|
next: 'connect-stripe'
|
|
},
|
|
'connect-stripe': {
|
|
title: 'Connect to Stripe',
|
|
position: 'Step 2',
|
|
next: 'set-pricing',
|
|
back: 'customise-design',
|
|
skip: 'finalise'
|
|
},
|
|
'set-pricing': {
|
|
title: 'Set up subscriptions',
|
|
position: 'Step 3',
|
|
next: 'finalise',
|
|
back: 'connect-stripe'
|
|
},
|
|
finalise: {
|
|
title: 'Launch your site',
|
|
position: 'Final step',
|
|
back: 'set-pricing'
|
|
}
|
|
};
|
|
export default class LaunchController extends Controller {
|
|
@service config;
|
|
@service router;
|
|
@service settings;
|
|
|
|
queryParams = ['step'];
|
|
|
|
@tracked previewGuid = (new Date()).valueOf();
|
|
@tracked previewSrc = '';
|
|
@tracked step = 'customise-design';
|
|
@tracked data = null;
|
|
|
|
steps = DEFAULT_STEPS;
|
|
|
|
skippedSteps = [];
|
|
|
|
constructor(...args) {
|
|
super(...args);
|
|
const siteUrl = this.config.get('blogUrl');
|
|
|
|
if (envConfig.environment !== 'development' && !/^https:/.test(siteUrl)) {
|
|
this.steps = {
|
|
'customise-design': {
|
|
title: 'Customise your site',
|
|
position: 'Step 1',
|
|
next: 'set-pricing'
|
|
},
|
|
'set-pricing': {
|
|
title: 'Set up subscriptions',
|
|
position: 'Step 2',
|
|
next: 'finalise',
|
|
back: 'customise-design'
|
|
},
|
|
finalise: {
|
|
title: 'Launch your site',
|
|
position: 'Final step',
|
|
back: 'set-pricing'
|
|
}
|
|
};
|
|
} else {
|
|
this.steps = DEFAULT_STEPS;
|
|
}
|
|
}
|
|
|
|
get currentStep() {
|
|
return this.steps[this.step];
|
|
}
|
|
|
|
@action
|
|
storeData(data) {
|
|
this.data = data;
|
|
}
|
|
|
|
@action
|
|
getData() {
|
|
return this.data;
|
|
}
|
|
|
|
@action
|
|
goToStep(step) {
|
|
if (step) {
|
|
this.step = step;
|
|
}
|
|
}
|
|
|
|
@action
|
|
goNextStep() {
|
|
this.step = this.currentStep.next;
|
|
}
|
|
|
|
@action
|
|
goBackStep() {
|
|
let step = this.currentStep.back;
|
|
|
|
while (this.skippedSteps.includes(step)) {
|
|
this.skippedSteps = this.skippedSteps.filter(s => s !== step);
|
|
step = this.steps[step].back;
|
|
}
|
|
|
|
this.step = step;
|
|
}
|
|
|
|
// TODO: remember when a step is skipped so "back" works as expected
|
|
@action
|
|
skipStep() {
|
|
let step = this.currentStep.next;
|
|
let skipToStep = this.currentStep.skip;
|
|
|
|
while (step !== skipToStep) {
|
|
this.skippedSteps.push(step);
|
|
step = this.steps[step].next;
|
|
}
|
|
|
|
this.step = step;
|
|
}
|
|
|
|
@action
|
|
registerPreviewIframe(element) {
|
|
this.previewIframe = element;
|
|
}
|
|
|
|
@action
|
|
refreshPreview() {
|
|
this.previewGuid = (new Date()).valueOf();
|
|
}
|
|
|
|
@action
|
|
updatePreview(url) {
|
|
this.previewSrc = url;
|
|
}
|
|
|
|
@action
|
|
replacePreviewContents(html) {
|
|
if (this.previewIframe) {
|
|
this.previewIframe.contentWindow.document.open();
|
|
this.previewIframe.contentWindow.document.write(html);
|
|
this.previewIframe.contentWindow.document.close();
|
|
}
|
|
}
|
|
|
|
@action
|
|
close() {
|
|
this.router.transitionTo('dashboard');
|
|
}
|
|
|
|
@action
|
|
reset() {
|
|
this.data = null;
|
|
this.step = 'customise-design';
|
|
this.skippedSteps = [];
|
|
}
|
|
}
|