diff --git a/packages/api/src/controllers/cloud.js b/packages/api/src/controllers/cloud.js index fe1dfd36b..4eb72caee 100644 --- a/packages/api/src/controllers/cloud.js +++ b/packages/api/src/controllers/cloud.js @@ -286,7 +286,14 @@ module.exports = { premiumPromoWidget_meta: true, async premiumPromoWidget() { - return getPromoWidgetData(); + const data = getPromoWidgetData(); + if (data?.state != 'data') { + return null; + } + if (data.validTo && new Date().getTime() > new Date(data.validTo).getTime()) { + return null; + } + return data; }, // chatStream_meta: { diff --git a/packages/api/src/utility/cloudIntf.js b/packages/api/src/utility/cloudIntf.js index 2decd76ff..9b3286768 100644 --- a/packages/api/src/utility/cloudIntf.js +++ b/packages/api/src/utility/cloudIntf.js @@ -271,7 +271,13 @@ async function updatePremiumPromoWidget() { const tags = (await collectCloudFilesSearchTags()).join(','); const resp = await axios.default.get( - `${DBGATE_CLOUD_URL}/premium-promo-widget?identifier=${promoWidgetData?.identifier ?? 'nope'}&tags=${tags}` + `${DBGATE_CLOUD_URL}/premium-promo-widget?identifier=${promoWidgetData?.identifier ?? 'empty'}&tags=${tags}`, + { + headers: { + ...(await getCloudInstanceHeaders()), + 'x-app-version': currentVersion.version, + }, + } ); if (!resp.data || resp.data?.state == 'unchanged') { diff --git a/packages/web/src/widgets/WidgetIconPanel.svelte b/packages/web/src/widgets/WidgetIconPanel.svelte index ad5c41975..17e0922fe 100644 --- a/packages/web/src/widgets/WidgetIconPanel.svelte +++ b/packages/web/src/widgets/WidgetIconPanel.svelte @@ -20,11 +20,14 @@ import { showModal } from '../modals/modalTools'; import NewObjectModal from '../modals/NewObjectModal.svelte'; import openNewTab from '../utility/openNewTab'; + import { usePromoWidget } from '../utility/metadataLoaders'; let domSettings; let domCloudAccount; let domMainMenu; + const promoWidget = usePromoWidget({}); + const widgets = [ getCurrentConfig().storageDatabase && { icon: 'icon admin', @@ -169,7 +172,7 @@ {/if} {#each widgets .filter(x => x && hasPermission(`widgets/${x.name}`)) - .filter(x => !x.isPremiumPromo || !isProApp()) + .filter(x => !x.isPremiumPromo || (!isProApp() && $promoWidget?.state == 'data')) // .filter(x => !x.isPremiumOnly || isProApp()) .filter(x => x.name != 'cloud-private' || $cloudSigninTokenHolder) as item}