fixed another small bug in

ProfileUsers, improved avatar fetch error messages display, and found a new way and prolly better way to reactively load fetch things when a variable changes, await rather than onMount + a unpdate function
This commit is contained in:
Me
2023-01-17 19:17:45 +01:00
parent 88188d397f
commit 11f54bde83
3 changed files with 42 additions and 67 deletions

View File

@@ -15,7 +15,6 @@
let blockedUsers = []; let blockedUsers = [];
let usernameBeingViewed; let usernameBeingViewed;
let friendshipStatusFull; // date, reveiverUsername, status let friendshipStatusFull; // date, reveiverUsername, status
// let errors = {avatar: ''};
/**** Layout variables ****/ /**** Layout variables ****/
let tabItems: string[] = [ let tabItems: string[] = [
@@ -321,12 +320,8 @@
<!-- svelte-ignore a11y-click-events-have-key-events --> <!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- <div class="background-pages"> -->
<div class="top-grid"> <div class="top-grid">
<!-- let tabItems: string[] = ['All Users', 'My Friends', 'Friend Requests']
let activeTabItem: string = 'All Users'; -->
<div class="sidebar-list background-pages"> <div class="sidebar-list background-pages">
<Tabs items={tabItems} activeItem={activeTabItem} size="default" on:tabChange={switchTab}/> <Tabs items={tabItems} activeItem={activeTabItem} size="default" on:tabChange={switchTab}/>
{#if activeTabItem === 'All Users' && allUsers} {#if activeTabItem === 'All Users' && allUsers}
@@ -338,7 +333,7 @@
{#await fetchAvatar(aUser.username) then avatar} {#await fetchAvatar(aUser.username) then avatar}
<img class="avatar sidebar-item" src="{avatar}" alt="user avatar"> <img class="avatar sidebar-item" src="{avatar}" alt="user avatar">
{:catch error} {:catch error}
<p>Avatar was unable to load</p> <p class="error">Avatar was unable to load</p>
{/await} {/await}
<div class="sidebar-item">{aUser.username}</div> <div class="sidebar-item">{aUser.username}</div>
<div class="status sidebar-item">{aUser.status}</div> <div class="status sidebar-item">{aUser.status}</div>
@@ -350,23 +345,25 @@
<div class="tip">You don't have any Friends... Yet!</div> <div class="tip">You don't have any Friends... Yet!</div>
{/if} {/if}
{#each myFriendships as aFriendship} {#each myFriendships as aFriendship}
<div class="user" on:click={() => viewAUser(aFriendship.receiverUsername)}>
{#if aFriendship.senderUsername !== user.username} {#if aFriendship.senderUsername !== user.username}
{#await fetchAvatar(aFriendship.senderUsername) then avatar} <div class="user" on:click={() => viewAUser(aFriendship.senderUsername)}>
<img class="avatar sidebar-item" src="{avatar}" alt="user avatar"> {#await fetchAvatar(aFriendship.senderUsername) then avatar}
{:catch error} <img class="avatar sidebar-item" src="{avatar}" alt="user avatar">
<p>Avatar was unable to load</p> {:catch error}
{/await} <p class="error">Avatar was unable to load</p>
<div class="sidebar-item" on:click={() => viewAUser(aFriendship.senderUsername)}>{aFriendship.senderUsername}</div> {/await}
<div class="sidebar-item">{aFriendship.senderUsername}</div>
</div>
{:else if aFriendship.receiverUsername !== user.username} {:else if aFriendship.receiverUsername !== user.username}
{#await fetchAvatar(aFriendship.receiverUsername) then avatar} <div class="user" on:click={() => viewAUser(aFriendship.receiverUsername)}>
<img class="avatar sidebar-item" src="{avatar}" alt="user avatar"> {#await fetchAvatar(aFriendship.receiverUsername) then avatar}
{:catch error} <img class="avatar sidebar-item" src="{avatar}" alt="user avatar">
<p>Avatar was unable to load</p> {:catch error}
{/await} <p class="error">Avatar was unable to load</p>
<div class="sidebar-item">{aFriendship.receiverUsername}</div> {/await}
<div class="sidebar-item">{aFriendship.receiverUsername}</div>
</div>
{/if} {/if}
</div>
<br> <br>
{/each} {/each}
{:else if activeTabItem === 'Friend Requests' && requestsRecieved} {:else if activeTabItem === 'Friend Requests' && requestsRecieved}
@@ -378,7 +375,7 @@
{#await fetchAvatar(aUser.senderUsername) then avatar} {#await fetchAvatar(aUser.senderUsername) then avatar}
<img class="avatar sidebar-item" src="{avatar}" alt="user avatar"> <img class="avatar sidebar-item" src="{avatar}" alt="user avatar">
{:catch error} {:catch error}
<p>Avatar was unable to load</p> <p class="error">Avatar was unable to load</p>
{/await} {/await}
<div class="sidebar-item">{aUser.senderUsername}</div> <div class="sidebar-item">{aUser.senderUsername}</div>
<div class="status sidebar-item">{aUser.status}</div> <div class="status sidebar-item">{aUser.status}</div>
@@ -394,11 +391,11 @@
{#await fetchAvatar(aUser.receiverUsername) then avatar} {#await fetchAvatar(aUser.receiverUsername) then avatar}
<img class="avatar sidebar-item" src="{avatar}" alt="user avatar"> <img class="avatar sidebar-item" src="{avatar}" alt="user avatar">
{:catch error} {:catch error}
<p>Avatar was unable to load</p> <p class="error">Avatar was unable to load</p>
{/await} {/await}
<div class="sidebar-item">{aUser.receiverUsername}</div> <div class="sidebar-item">{aUser.receiverUsername}</div>
<div class="status sidebar-item">{aUser.status}</div> <div class="status sidebar-item">{aUser.status}</div>
</div> </div>
<br> <br>
{/each} {/each}
{/if} {/if}
@@ -452,21 +449,7 @@
<style> <style>
/* ok so i want a 12 column grid with a sidebar */
div.top-grid{
/* display: grid; */
/* grid-template-columns: repeat(8, 1fr); */
/* max-height: calc(100vh - 30vh); */
height: 85vh;
/* display: block; */
position: relative;
/* margin: 0; */
}
div.sidebar-list{ div.sidebar-list{
/* grid-column: 1 / span 2; */
/* grid-column: 3 / span 4; */
background: #FB8B24; background: #FB8B24;
padding: 1vw; padding: 1vw;
font-size: smaller; font-size: smaller;
@@ -482,16 +465,15 @@
} }
div.sidebar-item{ div.sidebar-item{
/* yea i mean that seems fine... */
display: inline-block; display: inline-block;
text-align: center; text-align: center;
/* somehting about the buttons too, smaller ? */
} }
div.status{ div.status{
font-size: 0.6em; font-size: 0.6em;
font-weight: bold; font-weight: bold;
} }
/* selector attributes to get only divs with .a-user */ /* selector attributes to get only divs with .a-user */
/* you gotta be careful with Svelte cuz it tacks classes on to the end of basically all elems! */ /* you gotta be careful with Svelte cuz it tacks classes on to the end of basically all elems! */
div[class^="sidebar-item"]:hover{ div[class^="sidebar-item"]:hover{
@@ -530,8 +512,6 @@
padding: 8px; padding: 8px;
border: 2px solid white; border: 2px solid white;
border-radius: 7px; border-radius: 7px;
/* background-color: #ff3e00; */
/* color: #fff; */
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
} }
@@ -551,15 +531,17 @@
} }
div.user { div.user {
/* left: 50%; cursor: pointer;
display: inline-block;
-ms-transform: translateX(-50%);
transform: translateY(-50%); */
} }
div.tile { div.tile {
margin: 5px; margin: 5px;
} }
.error{
font-size: 0.5em;
font-weight: bold;
color: rgb(152, 20, 20);
}
</style> </style>

View File

@@ -1,28 +1,10 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte';
import { fetchAvatar } from "./utils.js"; import { fetchAvatar } from "./utils.js";
export let user; export let user;
let rank = ''; let rank = '';
let avatar; let avatar;
// console.log('Generate User Display user:')
// console.log({...user})
// console.log(user)
let errors = {avatar: ''};
onMount( async() => {
avatar = await fetchAvatar(user.username);
})
const updateAvatar = async() => {
avatar = await fetchAvatar(user.username);
};
$: user, updateAvatar();
if (user.stats.loseGame > user.stats.winGame) { if (user.stats.loseGame > user.stats.winGame) {
rank = "Come on, you can do better" rank = "Come on, you can do better"
} else if (user.stats.loseGame === user.stats.winGame) { } else if (user.stats.loseGame === user.stats.winGame) {
@@ -31,7 +13,6 @@
rank = 'You da Boss!' rank = 'You da Boss!'
} }
// Glittery Stars and such for Rank // Glittery Stars and such for Rank
let index = 0, interval = 1000; let index = 0, interval = 1000;
@@ -66,8 +47,13 @@
<div class="outer"> <div class="outer">
{#if user} {#if user}
<main> <main>
<img class="avatar" src="{avatar}" alt="user avatar"> <!-- <img class="avatar" src="{avatar}" alt="user avatar"> -->
<div class="error">{errors.avatar}</div> {#await fetchAvatar(user.username) then avatar}
<img class="avatar" src="{avatar}" alt="user avatar">
{:catch error}
<p class="errorA">Avatar was unable to load</p>
{/await}
<!-- <div class="error">{errors.avatar}</div> -->
<div class="username">{user.username}</div> <div class="username">{user.username}</div>
<div class="rank">Rank: <div class="rank">Rank:
<span class="glitter"> <span class="glitter">
@@ -159,6 +145,12 @@
color: red; color: red;
} }
.errorA{
font-size: 0.5em;
font-weight: bold;
color: rgb(152, 20, 20);
}
.highlight { .highlight {
font-weight: bold; font-weight: bold;
} }

View File

@@ -6,6 +6,7 @@ export async function fetchAvatar(username?: string)
url += `?username=${username}`; url += `?username=${username}`;
} }
// throw new Error("HTTP ")
return fetch(url) return fetch(url)
.then((response) => { .then((response) => {
if (!response.ok) { if (!response.ok) {