stuff icon

This commit is contained in:
tresabhi committed 2026-05-18 17:08:12 -05:00
1 parent 61d6d42742
commit 402d054b30
6 files changed
+59 -11

No files matched your search

+1
View File
@@ -46,6 +46,7 @@ export abstract class AbstractAPI {
abstract backgrounds(): Promise<Backgrounds>;
abstract currencyIcon(id: string): Promise<string>;
abstract stuffIcon(id: string): Promise<string>;
private assertLocale(locale: string) {
const supported = locales.supported.find(
+5
View File
@@ -116,6 +116,11 @@ export class ClientAPI extends AbstractAPI {
currencyIcon() {
return rejected();
}
@UnimplementedOnClient
stuffIcon() {
return rejected();
}
}
function UnimplementedOnClient(
+8 -1
View File
@@ -388,9 +388,16 @@ export class ServerAPI extends AbstractAPI {
@Cache()
async currencyIcon(id: string) {
const item = this.metadata.item(`CurrencyEntity.${id}`);
const item = this.metadata.item(id);
const stuffUI = item.StuffUI("UIComponent");
return this.mediaPrefix(stuffUI.icon!.value);
}
@Cache()
async stuffIcon(id: string) {
const item = this.metadata.item(id);
console.log(id);
const stuffUI = item.StuffUI("UIComponent");
return this.mediaPrefix(stuffUI.icon!.value);
}
}
@@ -26,23 +26,44 @@ interface PriceEntryProps {
}
function PriceEntry({ entry }: PriceEntryProps) {
const locale = useLocale();
if (entry.premium_time_price !== undefined) {
console.log(entry);
if (
entry.premium_time_price !== undefined ||
entry.stuff_price !== undefined ||
entry.currency_price === undefined
) {
throw new Error("Unsupported price type");
}
const [, iconName] = entry.currency_price.currency_catalog_id.split(".");
return (
<>
{entry.currency_price && (
<PriceInternal
icon={`/api/currencies/${entry.currency_price.currency_catalog_id}.webp`}
value={entry.currency_price.amount}
/>
)}
{entry.stuff_price && (
<PriceInternal
icon={`/api/stuff/${entry.stuff_price.stuff_catalog_id}.webp`}
value={entry.stuff_price.amount}
/>
)}
</>
);
}
interface PriceInternalProps {
icon: string;
value: number;
}
function PriceInternal({ icon, value }: PriceInternalProps) {
const locale = useLocale();
return (
<Text weight="light" size="minor" lowContrast className={styles.entry}>
<div className={styles.wrapper}>
<img className={styles.icon} src={`/api/currencies/${iconName}.webp`} />
{formatCompact(locale, entry.currency_price.amount)}
<img className={styles.icon} src={icon} />
{formatCompact(locale, value)}
</div>
</Text>
);
@@ -5,7 +5,7 @@ import { getStaticPaths as _getStaticPaths } from "../_index";
export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
const group = api.metadata.group("CurrencyEntity");
return group.map(({ name }) => ({ params: { id: name } }));
return group.map(({ id }) => ({ params: { id } }));
});
export async function GET({ params }: { params: { id: string } }) {
@@ -0,0 +1,14 @@
import { api } from "../../../api/dynamic";
import { imageProxy } from "../../../api/imageProxy";
import { mixStaticPaths } from "../../../astro/mixStaticPaths";
import { getStaticPaths as _getStaticPaths } from "../_index";
export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
const group = api.metadata.group("ProxyEntity");
return group.map(({ id }) => ({ params: { id } }));
});
export async function GET({ params }: { params: { id: string } }) {
const icon = await api.stuffIcon(params.id);
return await imageProxy(icon);
}