From cc0b4be50c89b8c6643b342209352360b62c099e Mon Sep 17 00:00:00 2001 From: Ben Phelps <ben@phelps.io> Date: Mon, 12 Sep 2022 12:38:50 +0300 Subject: [PATCH] cleanup coinmarketcap widget --- .../widgets/service/coinmarketcap.jsx | 41 +++++++++++-------- src/utils/api-helpers.js | 2 +- src/utils/service-helpers.js | 11 ++++- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/components/services/widgets/service/coinmarketcap.jsx b/src/components/services/widgets/service/coinmarketcap.jsx index a05edcf1..c5e66ebc 100644 --- a/src/components/services/widgets/service/coinmarketcap.jsx +++ b/src/components/services/widgets/service/coinmarketcap.jsx @@ -11,8 +11,8 @@ export default function CoinMarketCap({ service }) { const { t } = useTranslation(); const config = service.widget; - const symbols = [...service.symbols]; - const currencyCode = service.currency ?? "USD"; + const currencyCode = config.currency ?? "USD"; + const { symbols } = config; const { data: statsData, error: statsError } = useSWR( formatApiUrl(config, `v1/cryptocurrency/quotes/latest?symbol=${symbols.join(",")}&convert=${currencyCode}`) @@ -41,24 +41,31 @@ export default function CoinMarketCap({ service }) { const { data } = statsData; const currencySymbol = getSymbolFromCurrency(currencyCode); - return symbols.map((key) => ( - <Widget key={data[key].symbol}> - <div className="bg-theme-200/50 dark:bg-theme-900/20 rounded m-1 flex-1 flex flex-row items-center justify-between p-1"> - <div className="font-thin text-sm">{data[key].name}</div> - <div className="flex flex-col text-right"> - <div className="font-bold text-xs"> - {currencySymbol} - {data[key].quote[currencyCode].price.toFixed(2)} - </div> + return ( + <Widget> + <div className="flex flex-col w-full"> + {symbols.map((key) => ( <div - className={`font-bold text-xs ${ - data[key].quote[currencyCode].percent_change_1h > 0 ? "text-emerald-300" : "text-rose-300" - }`} + key={data[key].symbol} + className="bg-theme-200/50 dark:bg-theme-900/20 rounded m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs" > - {data[key].quote[currencyCode].percent_change_1h.toFixed(2)}% + <div className="font-thin pl-2">{data[key].name}</div> + <div className="flex flex-row text-right"> + <div className="font-bold mr-2"> + {currencySymbol} + {data[key].quote[currencyCode].price.toFixed(2)} + </div> + <div + className={`font-bold w-10 mr-2 ${ + data[key].quote[currencyCode].percent_change_1h > 0 ? "text-emerald-300" : "text-rose-300" + }`} + > + {data[key].quote[currencyCode].percent_change_1h.toFixed(2)}% + </div> + </div> </div> - </div> + ))} </div> </Widget> - )); + ); } diff --git a/src/utils/api-helpers.js b/src/utils/api-helpers.js index 56aea079..340ffaaa 100644 --- a/src/utils/api-helpers.js +++ b/src/utils/api-helpers.js @@ -15,7 +15,7 @@ const formats = { npm: `{url}/api/{endpoint}`, readarr: `{url}/api/v1/{endpoint}?apikey={key}`, sabnzbd: `{url}/api/?apikey={key}&output=json&mode={endpoint}`, - coinmarketcap: `{url}/{endpoint}`, + coinmarketcap: `https://pro-api.coinmarketcap.com/{endpoint}`, gotify: `{url}/{endpoint}`, }; diff --git a/src/utils/service-helpers.js b/src/utils/service-helpers.js index b9ceabcf..595d5e36 100644 --- a/src/utils/service-helpers.js +++ b/src/utils/service-helpers.js @@ -110,10 +110,19 @@ export function cleanServiceGroups(groups) { const cleanedService = { ...service }; if (cleanedService.widget) { - const { type, server, container } = cleanedService.widget; + // whitelisted set of keys to pass to the frontend + const { + type, // all widgets + server, // docker widget + container, + currency, // coinmarketcap widget + symbols, + } = cleanedService.widget; cleanedService.widget = { type, + currency, + symbols, service_name: service.name, service_group: serviceGroup.name, };