diff --git a/packages/api/src/controllers/cloud.js b/packages/api/src/controllers/cloud.js index 4eb72caee..407eafcad 100644 --- a/packages/api/src/controllers/cloud.js +++ b/packages/api/src/controllers/cloud.js @@ -286,7 +286,7 @@ module.exports = { premiumPromoWidget_meta: true, async premiumPromoWidget() { - const data = getPromoWidgetData(); + const data = await getPromoWidgetData(); if (data?.state != 'data') { return null; } diff --git a/packages/api/src/utility/cloudIntf.js b/packages/api/src/utility/cloudIntf.js index 9b3286768..b27880689 100644 --- a/packages/api/src/utility/cloudIntf.js +++ b/packages/api/src/utility/cloudIntf.js @@ -18,6 +18,7 @@ const logger = getLogger('cloudIntf'); let cloudFiles = null; let promoWidgetData = null; +let promoWidgetDataLoaded = false; const DBGATE_IDENTITY_URL = process.env.LOCAL_DBGATE_IDENTITY ? 'http://localhost:3103' @@ -260,13 +261,21 @@ async function getPublicFileData(path) { return resp.data; } -async function updatePremiumPromoWidget() { +async function ensurePromoWidgetDataLoaded() { + if (promoWidgetDataLoaded) { + return; + } try { const fileContent = await fs.readFile(path.join(datadir(), 'promo-widget.json'), 'utf-8'); promoWidgetData = JSON.parse(fileContent); } catch (err) { promoWidgetData = null; } + promoWidgetDataLoaded = true; +} + +async function updatePremiumPromoWidget() { + await ensurePromoWidgetDataLoaded(); const tags = (await collectCloudFilesSearchTags()).join(','); @@ -466,7 +475,8 @@ async function getPublicIpInfo() { } } -function getPromoWidgetData() { +async function getPromoWidgetData() { + await ensurePromoWidgetDataLoaded(); return promoWidgetData; } diff --git a/packages/web/public/icon-colors.css b/packages/web/public/icon-colors.css index 8f2f6b0ff..42bdd3d5e 100644 --- a/packages/web/public/icon-colors.css +++ b/packages/web/public/icon-colors.css @@ -34,3 +34,11 @@ .color-icon-premium { background: linear-gradient(135deg, #1686c8, #8a25b1); } + +.web-color-primary { + background: #1686c8; +} + +.web-color-secondary { + background: #8a25b1; +} diff --git a/packages/web/src/buttons/FormStyledButton.svelte b/packages/web/src/buttons/FormStyledButton.svelte index 484987e1b..c117f46c7 100644 --- a/packages/web/src/buttons/FormStyledButton.svelte +++ b/packages/web/src/buttons/FormStyledButton.svelte @@ -9,6 +9,7 @@ export let title = null; export let skipWidth = false; export let outline = false; + export let colorClass = ''; function handleClick() { if (!disabled) dispatch('click'); @@ -31,6 +32,8 @@ bind:this={domButton} class:skipWidth class:outline + class={colorClass} + class:setBackgroundColor={!colorClass} />