Skip to content

Commit bda3b8b

Browse files
committed
fix(ui): Fix PlayerHead component on account switch
1 parent d7cca68 commit bda3b8b

File tree

1 file changed

+18
-25
lines changed

1 file changed

+18
-25
lines changed

apps/frontend/src/ui/components/game/PlayerHead.tsx

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,37 @@
11
import type { JSX } from 'solid-js';
2-
import { createEffect, createSignal, on, Show, splitProps } from 'solid-js';
2+
import { createEffect, createSignal, splitProps } from 'solid-js';
33
import steveSrc from '../../../assets/images/steve.png';
44

55
type PlayerHeadProps = JSX.IntrinsicElements['img'] & {
66
uuid: string | null | undefined;
77
onError?: () => void;
88
};
99

10-
function headSrc(uuid: string) {
10+
function crafatar(uuid: string) {
1111
return `https://crafatar.com/avatars/${uuid}?size=48`;
1212
}
1313

1414
function PlayerHead(props: PlayerHeadProps) {
1515
const [split, rest] = splitProps(props, ['uuid', 'class']);
16-
const [isLoaded, setLoaded] = createSignal(false);
16+
const [src, setSrc] = createSignal(steveSrc);
1717

18-
createEffect(on(() => props.uuid, () => setLoaded(false)));
18+
createEffect(() => {
19+
if (split.uuid)
20+
setSrc(crafatar(split.uuid));
21+
});
22+
23+
const onError = () => {
24+
setSrc(steveSrc);
25+
props.onError && props.onError();
26+
};
1927

2028
return (
21-
<>
22-
<Show
23-
children={(
24-
<img
25-
class={`image-render-pixel ${isLoaded() ? '' : 'hidden'} ${split.class}`}
26-
onError={() => props.onError && props.onError()}
27-
onLoad={() => setLoaded(true)}
28-
src={headSrc(split.uuid!)}
29-
{...rest}
30-
/>
31-
)}
32-
fallback={(
33-
<img
34-
class={`image-render-pixel ${split.class}`}
35-
src={steveSrc}
36-
{...rest}
37-
/>
38-
)}
39-
when={props.uuid !== null && props.uuid !== undefined}
40-
/>
41-
</>
29+
<img
30+
class={`image-render-pixel ${split.class}`}
31+
onError={onError}
32+
src={src()}
33+
{...rest}
34+
/>
4235
);
4336
}
4437

0 commit comments

Comments
 (0)