diff --git a/packages/api/src/controllers/cloud.js b/packages/api/src/controllers/cloud.js
index 407eafcad..ad348b1f7 100644
--- a/packages/api/src/controllers/cloud.js
+++ b/packages/api/src/controllers/cloud.js
@@ -9,6 +9,8 @@ const {
putCloudContent,
removeCloudCachedConnection,
getPromoWidgetData,
+ getPromoWidgetList,
+ getPromoWidgetPreview,
} = require('../utility/cloudIntf');
const connections = require('./connections');
const socket = require('../utility/socket');
@@ -296,6 +298,16 @@ module.exports = {
return data;
},
+ promoWidgetList_meta: true,
+ async promoWidgetList() {
+ return getPromoWidgetList();
+ },
+
+ promoWidgetPreview_meta: true,
+ async promoWidgetPreview({ campaign, variant }) {
+ return getPromoWidgetPreview(campaign, variant);
+ },
+
// chatStream_meta: {
// raw: true,
// method: 'post',
diff --git a/packages/api/src/utility/cloudIntf.js b/packages/api/src/utility/cloudIntf.js
index b27880689..b0ea4217a 100644
--- a/packages/api/src/utility/cloudIntf.js
+++ b/packages/api/src/utility/cloudIntf.js
@@ -480,6 +480,16 @@ async function getPromoWidgetData() {
return promoWidgetData;
}
+async function getPromoWidgetPreview(campaign, variant) {
+ const resp = await axios.default.get(`${DBGATE_CLOUD_URL}/premium-promo-widget-preview/${campaign}/${variant}`);
+ return resp.data;
+}
+
+async function getPromoWidgetList() {
+ const resp = await axios.default.get(`${DBGATE_CLOUD_URL}/promo-widget-list`);
+ return resp.data;
+}
+
module.exports = {
createDbGateIdentitySession,
startCloudTokenChecking,
@@ -498,4 +508,6 @@ module.exports = {
readCloudTestTokenHolder,
getPublicIpInfo,
getPromoWidgetData,
+ getPromoWidgetPreview,
+ getPromoWidgetList,
};
diff --git a/packages/web/public/icon-colors.css b/packages/web/public/icon-colors.css
index 0e904452d..25cad9a76 100644
--- a/packages/web/public/icon-colors.css
+++ b/packages/web/public/icon-colors.css
@@ -35,6 +35,11 @@
background: linear-gradient(135deg, #1686c8, #8a25b1);
}
+.premium-gradient {
+ background: linear-gradient(135deg, #1686c8, #8a25b1);
+ color: white;
+}
+
.web-color-primary {
background: #1686c8;
}
diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts
index cbf82fc72..f2f3872d6 100644
--- a/packages/web/src/commands/stdCommands.ts
+++ b/packages/web/src/commands/stdCommands.ts
@@ -8,6 +8,7 @@ import {
getCloudSigninTokenHolder,
getExtensions,
getVisibleToolbar,
+ promoWidgetPreview,
visibleToolbar,
visibleWidgetSideBar,
} from '../stores';
@@ -50,6 +51,7 @@ import { isProApp } from '../utility/proTools';
import { openWebLink } from '../utility/simpleTools';
import { _t } from '../translations';
import ExportImportConnectionsModal from '../modals/ExportImportConnectionsModal.svelte';
+import { getBoolSettingsValue } from '../settings/settingsTools';
// function themeCommand(theme: ThemeDefinition) {
// return {
@@ -1164,6 +1166,41 @@ registerCommand({
onClick: () => currentDatabase.set(null),
});
+let loadedCampaignList = [];
+
+registerCommand({
+ id: 'internal.loadCampaigns',
+ category: 'Internal',
+ name: 'Load campaign list',
+ testEnabled: () => getBoolSettingsValue('internal.showCampaigns', false),
+ onClick: async () => {
+ const resp = await apiCall('cloud/promo-widget-list', {});
+ loadedCampaignList = resp;
+ },
+});
+
+registerCommand({
+ id: 'internal.showCampaigns',
+ category: 'Internal',
+ name: 'Show campaigns',
+ testEnabled: () => getBoolSettingsValue('internal.showCampaigns', false) && loadedCampaignList?.length > 0,
+ getSubCommands: () => {
+ return loadedCampaignList.map(campaign => ({
+ text: `${campaign.campaignName} (${campaign.countries || 'Global'}) - #${campaign.quantileRank ?? '*'}/${
+ campaign.quantileGroupCount ?? '*'
+ } - ${campaign.variantIdentifier}`,
+ onClick: async () => {
+ promoWidgetPreview.set(
+ await apiCall('cloud/promo-widget-preview', {
+ campaign: campaign.campaignIdentifier,
+ variant: campaign.variantIdentifier,
+ })
+ );
+ },
+ }));
+ },
+});
+
const electron = getElectron();
if (electron) {
electron.addEventListener('run-command', (e, commandId) => runCommand(commandId));
diff --git a/packages/web/src/jsonui/JsonUiContentRenderer.svelte b/packages/web/src/jsonui/JsonUiContentRenderer.svelte
index b1562d16d..07fdcb667 100644
--- a/packages/web/src/jsonui/JsonUiContentRenderer.svelte
+++ b/packages/web/src/jsonui/JsonUiContentRenderer.svelte
@@ -1,22 +1,29 @@
{#each blocks as block, i}
{#if block.type in componentMap}
-