Pages
This commit is contained in:
parent
ac8b5a911e
commit
88fab84501
|
@ -0,0 +1,5 @@
|
|||
<script lang="ts">
|
||||
import Graphs from "../components/Graphs.svelte";
|
||||
</script>
|
||||
|
||||
<Graphs />
|
|
@ -0,0 +1,71 @@
|
|||
<script lang="ts">
|
||||
import { login } from "../components/stores";
|
||||
import { getProfiles, getUsername } from "../lib/api";
|
||||
|
||||
let profilesPromise: ReturnType<typeof getProfiles> = new Promise(() => {});
|
||||
$: if ($login !== undefined) {
|
||||
profilesPromise = getProfiles($login?.token);
|
||||
}
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Skyblock Data Tracker</title>
|
||||
</svelte:head>
|
||||
|
||||
<div id="list">
|
||||
{#await profilesPromise}
|
||||
<div class="item">
|
||||
<h2>Fetching profiles...</h2>
|
||||
</div>
|
||||
{:then profiles}
|
||||
{#each profiles as profile}
|
||||
<button type="button" class="item">
|
||||
{#each profile.data.members as member, idx}
|
||||
{#await getUsername(member)}
|
||||
<a href="/profile/{profile.profile}/member/{member}"
|
||||
>...</a
|
||||
>
|
||||
{:then username}
|
||||
<a href="/profile/{profile.profile}/member/{member}">
|
||||
{username}
|
||||
{#if idx === 0 && profile.data.name}
|
||||
@ {profile.data.name}
|
||||
{/if}
|
||||
</a>
|
||||
{:catch error}
|
||||
<p style="color: red">{error.message}</p>
|
||||
{/await}
|
||||
{/each}
|
||||
</button>
|
||||
{/each}
|
||||
<!-- svelte-ignore a11y-missing-content -->
|
||||
<a class="item add" href="/profile/new" />
|
||||
{:catch error}
|
||||
<div class="item">
|
||||
<h2 style="color: red">{error.message}</h2>
|
||||
</div>
|
||||
{/await}
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
@use "../styles/GridList";
|
||||
.item {
|
||||
border: none;
|
||||
font-size: 1.17em;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
margin: 1em 0;
|
||||
color: hsl(30, 20%, 90%);
|
||||
text-decoration: none;
|
||||
font-family: "Minecraft";
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
a:nth-child(1) {
|
||||
color: hsl(60, 100%, 50%);
|
||||
font-size: 2em;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,60 @@
|
|||
<script lang="ts">
|
||||
import { goto } from "@sapper/app";
|
||||
import { login } from "../components/stores";
|
||||
import { postLogin } from "../lib/api";
|
||||
|
||||
$: if ($login) {
|
||||
goto("/");
|
||||
}
|
||||
let username = "";
|
||||
let password = "";
|
||||
let status = "";
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Login - Skyblock Data Tracker</title>
|
||||
</svelte:head>
|
||||
|
||||
<div id="content">
|
||||
<form
|
||||
on:submit={async event => {
|
||||
event.preventDefault();
|
||||
try {
|
||||
login.set(await postLogin({ username, password }));
|
||||
} catch (e) {
|
||||
username = "";
|
||||
password = "";
|
||||
try {
|
||||
status = (await e.response.json()).message;
|
||||
} catch (e2) {
|
||||
status = "Unknown error";
|
||||
}
|
||||
}
|
||||
}}
|
||||
>
|
||||
<h2>Login</h2>
|
||||
<p id="status">{status}</p>
|
||||
<input
|
||||
type="text"
|
||||
id="username"
|
||||
placeholder="Username"
|
||||
bind:value={username}
|
||||
/><br />
|
||||
<input
|
||||
type="password"
|
||||
id="password"
|
||||
placeholder="Password"
|
||||
bind:value={password}
|
||||
/><br />
|
||||
<input type="submit" id="submit" value="Login" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
@use "../styles/Form";
|
||||
div#content {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,15 @@
|
|||
<script context="module" lang="ts">
|
||||
import type common from "@sapper/common";
|
||||
|
||||
export async function preload(page: common.Page) {
|
||||
return {
|
||||
profile: page.params.profile,
|
||||
member: page.params.member
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
export let profile: string;
|
||||
export let member: string;
|
||||
</script>
|
|
@ -0,0 +1,122 @@
|
|||
<script lang="ts">
|
||||
import { goto } from "@sapper/app";
|
||||
import { login } from "../../components/stores";
|
||||
import {
|
||||
getPlayerProfiles,
|
||||
getUUID,
|
||||
getUsername,
|
||||
putProfiles
|
||||
} from "../../lib/api";
|
||||
|
||||
let username = "";
|
||||
let uuid = "";
|
||||
let status = "";
|
||||
let profilesPromise: ReturnType<typeof getPlayerProfiles> = new Promise(
|
||||
resolve => resolve([])
|
||||
);
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Add Profile - Skyblock Data Tracker</title>
|
||||
</svelte:head>
|
||||
|
||||
<div id="list">
|
||||
<form
|
||||
class="item"
|
||||
on:submit={async event => {
|
||||
event.preventDefault();
|
||||
try {
|
||||
profilesPromise = getPlayerProfiles(
|
||||
(uuid = await getUUID(username))
|
||||
);
|
||||
} catch (error) {
|
||||
status = "Not found";
|
||||
}
|
||||
}}
|
||||
>
|
||||
<h2>Add profile</h2>
|
||||
<p id="status">{status}</p>
|
||||
<input
|
||||
type="text"
|
||||
id="username"
|
||||
bind:value={username}
|
||||
placeholder="Minecraft Username"
|
||||
/>
|
||||
<input type="submit" value="Search" />
|
||||
</form>
|
||||
{#if uuid !== ""}
|
||||
{#await profilesPromise}
|
||||
<div class="item">
|
||||
<h2>Fetching profiles...</h2>
|
||||
</div>
|
||||
{:then profiles}
|
||||
{#each profiles as profile}
|
||||
<button
|
||||
type="button"
|
||||
class="item profile"
|
||||
on:click={async () => {
|
||||
try {
|
||||
await putProfiles(
|
||||
$login?.token,
|
||||
profile.profile_id,
|
||||
uuid
|
||||
);
|
||||
} catch (e) {
|
||||
if (
|
||||
e.response?.status === 401 ||
|
||||
e.response?.status === 403
|
||||
) {
|
||||
alert("Unauthorised");
|
||||
} else {
|
||||
alert(
|
||||
"An error occured while adding the profile"
|
||||
);
|
||||
}
|
||||
}
|
||||
goto("/#");
|
||||
}}
|
||||
>
|
||||
{#await getUsername(uuid)}
|
||||
<p>...</p>
|
||||
{:then properUsername}
|
||||
<p>{properUsername} @ {profile.cute_name}</p>
|
||||
{/await}
|
||||
{#each Object.keys(profile.members).filter(m => m !== uuid) as member}
|
||||
{#await getUsername(member)}
|
||||
<p>...</p>
|
||||
{:then memberUsername}
|
||||
<p>{memberUsername}</p>
|
||||
{:catch error}
|
||||
<p style="color: red">{error.message}</p>
|
||||
{/await}
|
||||
{/each}
|
||||
</button>
|
||||
{/each}
|
||||
{:catch error}
|
||||
<div class="item">
|
||||
<h2 style="color: red">{error.message}</h2>
|
||||
</div>
|
||||
{/await}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
@use "../../styles/GridList";
|
||||
@use "../../styles/Form";
|
||||
|
||||
.item {
|
||||
color: hsl(30, 20%, 90%);
|
||||
}
|
||||
button.profile {
|
||||
border: none;
|
||||
font-size: 1.17em;
|
||||
font-family: "Minecraft";
|
||||
p:nth-child(1) {
|
||||
color: hsl(60, 100%, 50%);
|
||||
font-size: 2em;
|
||||
}
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue