Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
Claude
592fbea774
fix(aliases): default to All Aliases instead of Premium filter
Premium aliases (short vanity names) don't exist on the Lethean testnet.
Defaulting to Premium showed an empty table which looked broken.

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 14:32:18 +01:00
Claude
ab41908e41
fix(assets): graceful fallback when whitelist URL is unreachable
Assets page crashed with 500 when api.lethean.io DNS failed.
Now returns empty assets list instead of crashing.

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 13:31:09 +01:00
Claude
597910e933
chore: add .dockerignore to prevent .env baking in Docker builds
Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 12:55:57 +01:00
Claude
a67c2751c0
fix(display): use comma thousands separator for western number formatting
Changes 10 012 337.37 → 10,012,337.37 throughout the explorer.

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 12:03:40 +01:00
4 changed files with 38 additions and 20 deletions

7
.dockerignore Normal file
View file

@ -0,0 +1,7 @@
node_modules
.next
.env
.env.local
.env.development
.env.production
.git

View file

@ -31,7 +31,7 @@ function Aliases(props: AliasesPageProps) {
aliasesAmount: props.aliasesAmount,
premiumAliasesAmount: props.premiumAliasesAmount
});
const [selectedTitleIdx, setSelectedTitleIdx] = useState(0);
const [selectedTitleIdx, setSelectedTitleIdx] = useState(1);
const isPremiumOnly = selectedTitleIdx === 0;

View file

@ -239,26 +239,37 @@ export interface AssetsPageProps {
}
export async function getAssets() {
const result = await Fetch.getAssetsCount();
const assetsAmount = result?.assetsAmount;
const whitelistedAssetsAmount = result?.whitelistedAssetsAmount;
try {
const result = await Fetch.getAssetsCount();
const assetsAmount = result?.assetsAmount || 0;
const whitelistedAssetsAmount = result?.whitelistedAssetsAmount || 0;
const assets = await Fetch.getWhitelistedAssets(0, parseInt(DEFAULT_ASSETS_ON_PAGE, 10), "")
const assets = await Fetch.getWhitelistedAssets(0, parseInt(DEFAULT_ASSETS_ON_PAGE, 10), "")
const letheanPrice = await Utils.getLtheanPrice();
const letheanPrice = await Utils.getLtheanPrice();
assets.forEach((element: any) => {
if (element.asset_id === LTHN_ID) {
element.price = letheanPrice || null;
if (Array.isArray(assets)) {
assets.forEach((element: any) => {
if (element.asset_id === LTHN_ID) {
element.price = letheanPrice || null;
}
});
}
});
return {
props: {
assetsAmount,
whitelistedAssetsAmount,
assets: assets || []
},
};
return {
props: {
assetsAmount,
whitelistedAssetsAmount,
assets: assets || []
},
};
} catch {
return {
props: {
assetsAmount: 0,
whitelistedAssetsAmount: 0,
assets: []
},
};
}
}

View file

@ -25,7 +25,7 @@ class Utils {
const parsedNumber = typeof number === "number" ? number : parseFloat(number) || 0;
const roundedNumber = parsedNumber.toFixed(decimalPlaces);
const [integerPart, decimalPart] = roundedNumber.split(".");
const formattedIntegerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, " ");
const formattedIntegerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
const formattedNumber = formattedIntegerPart + (decimalPlaces > 0 ? "." + decimalPart : "");
return formattedNumber;
}
@ -59,7 +59,7 @@ class Utils {
const integerPart = input.slice(0, delimitedCharIndex) || '0';
const decimalPart = decimalPlaces ? input.slice(delimitedCharIndex, length) + "0".repeat(decimalPlaces) : "";
return integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, " ") + (decimalPart ? "." + decimalPart.slice(0, decimalPlaces) : "");
return integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (decimalPart ? "." + decimalPart.slice(0, decimalPlaces) : "");
}
static convertENotationToString(num: number | string): string {