Skip to content

Commit b39bec5

Browse files
committed
trying to import viem from cdn
1 parent 5b85266 commit b39bec5

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

docs/snippets/CurrentPricesTable.jsx

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useEffect, useState } from 'react';
2-
import { createPublicClient, http, formatUnits } from 'viem';
32

43
// Naga Prod PriceFeed contract address
54
const NAGA_PROD_PRICE_FEED_ADDRESS = '0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C';
@@ -215,8 +214,12 @@ async function getLitKeyPrice() {
215214
/**
216215
* Convert wei to LITKEY tokens (18 decimals)
217216
*/
218-
function weiToTokens(wei) {
219-
return Number(formatUnits(wei, 18));
217+
function weiToTokens(wei, viem) {
218+
if (!viem || !viem.formatUnits) {
219+
// Fallback if viem isn't loaded yet
220+
return Number(wei) / 1e18;
221+
}
222+
return Number(viem.formatUnits(wei, 18));
220223
}
221224

222225
/**
@@ -238,13 +241,40 @@ export const CurrentPricesTable = () => {
238241
const [litActionConfigs, setLitActionConfigs] = useState([]);
239242
const [litKeyPriceUSD, setLitKeyPriceUSD] = useState(null);
240243
const [usagePercent, setUsagePercent] = useState(null);
244+
const [viemLoaded, setViemLoaded] = useState(false);
245+
246+
// Load viem from CDN
247+
useEffect(() => {
248+
// Check if viem is already loaded
249+
if (window.viem) {
250+
setViemLoaded(true);
251+
return;
252+
}
253+
254+
// Load viem from esm.sh CDN (supports ES modules)
255+
import('https://esm.sh/[email protected]').then((viemModule) => {
256+
window.viem = viemModule;
257+
setViemLoaded(true);
258+
}).catch((err) => {
259+
console.error('Error loading viem:', err);
260+
setError('Failed to load viem library from CDN');
261+
setLoading(false);
262+
});
263+
}, []);
241264

242265
useEffect(() => {
266+
if (!viemLoaded || !window.viem) {
267+
return;
268+
}
269+
243270
async function fetchPrices() {
244271
try {
245272
setLoading(true);
246273
setError(null);
247274

275+
const viem = window.viem;
276+
const { createPublicClient, http } = viem;
277+
248278
// Create public client
249279
const publicClient = createPublicClient({
250280
chain: LIT_CHAIN,
@@ -302,7 +332,7 @@ export const CurrentPricesTable = () => {
302332
}
303333

304334
fetchPrices();
305-
}, []);
335+
}, [viemLoaded]);
306336

307337
if (loading) {
308338
return (
@@ -386,9 +416,9 @@ export const CurrentPricesTable = () => {
386416
</thead>
387417
<tbody>
388418
{PRODUCT_IDS.map((productId, index) => {
389-
const basePriceInTokens = weiToTokens(basePrices[index]);
390-
const maxPriceInTokens = weiToTokens(maxPrices[index]);
391-
const currentPriceInTokens = weiToTokens(currentPrices[index]);
419+
const basePriceInTokens = weiToTokens(basePrices[index], window.viem);
420+
const maxPriceInTokens = weiToTokens(maxPrices[index], window.viem);
421+
const currentPriceInTokens = weiToTokens(currentPrices[index], window.viem);
392422
const basePriceInUSD = litKeyPriceUSD
393423
? basePriceInTokens * litKeyPriceUSD
394424
: null;
@@ -489,7 +519,7 @@ export const CurrentPricesTable = () => {
489519
`Component ${priceComponentNum}`;
490520
const measurementName =
491521
MEASUREMENT_NAMES[priceMeasurementNum] || '';
492-
const priceInTokens = weiToTokens(config.price);
522+
const priceInTokens = weiToTokens(config.price, window.viem);
493523
const priceInUSD = litKeyPriceUSD
494524
? priceInTokens * litKeyPriceUSD
495525
: null;

0 commit comments

Comments
 (0)