Skip to content

Commit f0c77ce

Browse files
committed
chore: pro upsell dialog remote config
1 parent d1d3c14 commit f0c77ce

File tree

4 files changed

+59
-10
lines changed

4 files changed

+59
-10
lines changed

src/nls/root/strings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,6 +1667,7 @@ define({
16671667
// promos
16681668
"PROMO_UPGRADE_TITLE": "You’ve been upgraded to {0}",
16691669
"PROMO_UPGRADE_MESSAGE": "Enjoy full access to all premium features for the next {0} days:",
1670+
"PROMO_ENDED_MESSAGE": "Subscribe now to continue using these advanced features:",
16701671
"PROMO_CARD_1": "Drag & Drop Elements",
16711672
"PROMO_CARD_1_MESSAGE": "Rearrange sections visually — Phoenix updates the HTML & CSS for you.",
16721673
"PROMO_CARD_2": "Image Replacement",

src/services/html/pro-upgrade.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ <h2>{{Strings.PROMO_CARD_4}}</h2>
5050
</div>
5151

5252
<div class="modal-footer">
53-
<button class="dialog-button btn" data-button-id="learn_more">{{Strings.PROMO_LEARN_MORE}}</button>
54-
<button class="dialog-button btn primary" data-button-id="ok">{{Strings.OK}}</button>
53+
<button class="dialog-button btn" data-button-id="secondaryButton">{{secondaryButton}}</button>
54+
<button class="dialog-button btn primary" data-button-id="ok">{{{primaryButton}}}</button>
5555
</div>
5656
</div>

src/services/pro-dialogs.js

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,33 +44,81 @@ define(function (require, exports, module) {
4444
function showProUpgradeDialog(trialDays) {
4545
const title = StringUtils.format(Strings.PROMO_UPGRADE_TITLE, proTitle);
4646
const message = StringUtils.format(Strings.PROMO_UPGRADE_MESSAGE, trialDays);
47-
const $template = $(Mustache.render(proUpgradeHTML, {title, message, Strings}));
47+
const $template = $(Mustache.render(proUpgradeHTML, {
48+
title, message, Strings,
49+
secondaryButton: Strings.PROMO_LEARN_MORE,
50+
primaryButton: Strings.OK
51+
}));
4852
Dialogs.showModalDialogUsingTemplate($template).done(function (id) {
4953
console.log("Dialog closed with id: " + id);
50-
if(id === 'learn_more') {
54+
if(id === 'secondaryButton') {
5155
// todo add metrics
5256
Phoenix.app.openURLInDefaultBrowser(brackets.config.purchase_url);
5357
}
5458
});
5559
}
5660

57-
function showProEndedDialog(currentVersion) {
58-
currentVersion = currentVersion || window.AppConfig.apiVersion;
61+
function _showLocalProEndedDialog() {
62+
const title = StringUtils.format(Strings.PROMO_PRO_ENDED_TITLE, proTitle);
63+
const buttonGetPro = StringUtils.format(Strings.PROMO_GET_APP_UPSELL_BUTTON, proTitlePlain);
64+
const $template = $(Mustache.render(proUpgradeHTML, {
65+
title, Strings,
66+
message: Strings.PROMO_ENDED_MESSAGE,
67+
secondaryButton: Strings.CANCEL,
68+
primaryButton: buttonGetPro
69+
}));
70+
Dialogs.showModalDialogUsingTemplate($template).done(function (id) {
71+
console.log("Dialog closed with id: " + id);
72+
if(id === 'ok') {
73+
// todo add metrics
74+
Phoenix.app.openURLInDefaultBrowser(brackets.config.purchase_url);
75+
}
76+
});
77+
}
78+
79+
function _showRemoteProEndedDialog(currentVersion, promoHtmlURL, upsellPurchaseURL) {
5980
const buttonGetPro = StringUtils.format(Strings.PROMO_GET_APP_UPSELL_BUTTON, proTitlePlain);
6081
const title = StringUtils.format(Strings.PROMO_PRO_ENDED_TITLE, proTitle);
6182
const currentTheme = ThemeManager.getCurrentTheme();
6283
const theme = currentTheme && currentTheme.dark ? "dark" : "light";
63-
const promoURL = `${brackets.config.promotions_url}app/upsell_after_trial.html?lang=${brackets.getLocale()}&theme=${theme}&version=${currentVersion}`;
84+
const promoURL = `${promoHtmlURL}?lang=${
85+
brackets.getLocale()}&theme=${theme}&version=${currentVersion}`;
6486
const $template = $(Mustache.render(proEndedHTML, {Strings, title, buttonGetPro, promoURL}));
6587
Dialogs.showModalDialogUsingTemplate($template).done(function (id) {
6688
console.log("Dialog closed with id: " + id);
6789
if(id === 'get_pro') {
68-
// todo add metrics
69-
Phoenix.app.openURLInDefaultBrowser(brackets.config.purchase_url);
90+
Phoenix.app.openURLInDefaultBrowser(upsellPurchaseURL || brackets.config.purchase_url);
7091
}
7192
});
7293
}
7394

95+
async function showProEndedDialog() {
96+
const currentVersion = window.AppConfig.apiVersion;
97+
98+
if (!navigator.onLine) {
99+
_showLocalProEndedDialog();
100+
return;
101+
}
102+
103+
try {
104+
const configURL = `${brackets.config.promotions_url}app/config.json`;
105+
const response = await fetch(configURL);
106+
if (!response.ok) {
107+
_showLocalProEndedDialog();
108+
return;
109+
}
110+
111+
const config = await response.json();
112+
if (config.upsell_after_trial_url) {
113+
_showRemoteProEndedDialog(currentVersion, config.upsell_after_trial_url, config.upsell_purchase_url);
114+
} else {
115+
_showLocalProEndedDialog();
116+
}
117+
} catch (error) {
118+
_showLocalProEndedDialog();
119+
}
120+
}
121+
74122
exports.showProUpgradeDialog = showProUpgradeDialog;
75123
exports.showProEndedDialog = showProEndedDialog;
76124
});

src/services/promotions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ define(function (require, exports, module) {
208208
// todo we should not show this to logged in pro subscribers, but at startup time,
209209
// we do not know if login is done yet.
210210
console.log("Existing trial expired, showing promo ended dialog");
211-
ProDialogs.showProEndedDialog(currentVersion);
211+
ProDialogs.showProEndedDialog();
212212
// Store that dialog was shown for this version
213213
await _setTrialData({
214214
...existingTrialData,

0 commit comments

Comments
 (0)