added all time lb positions to profiles

This commit is contained in:
Miodec 2022-09-29 13:08:10 +02:00
parent dca5450855
commit ebeafd9880
7 changed files with 145 additions and 14 deletions

View file

@ -12,6 +12,7 @@ import { deleteAllPresets } from "../../dal/preset";
import { deleteAll as deleteAllResults } from "../../dal/result";
import { deleteConfig } from "../../dal/config";
import { verify } from "../../utils/captcha";
import * as LeaderboardsDAL from "../../dal/leaderboards";
async function verifyCaptcha(captcha: string): Promise<void> {
if (!(await verify(captcha))) {
@ -503,10 +504,43 @@ export async function getProfile(
return new MonkeyResponse("Profile retrived: banned user", baseProfile);
}
const allTime15English = await LeaderboardsDAL.getRank(
"time",
"15",
"english",
user.uid
);
const allTime60English = await LeaderboardsDAL.getRank(
"time",
"60",
"english",
user.uid
);
const allTime15EnglishRank = allTime15English
? allTime15English.rank
: undefined;
const allTime60EnglishRank = allTime60English
? allTime60English.rank
: undefined;
const alltimelbs = {
time: {
"15": {
english: allTime15EnglishRank,
},
"60": {
english: allTime60EnglishRank,
},
},
};
const profileData = {
...baseProfile,
inventory,
details: profileDetails,
allTimeLbs: alltimelbs,
};
return new MonkeyResponse("Profile retrieved", profileData);

View file

@ -62,6 +62,7 @@
grid-template-rows: auto 1fr;
grid-template-areas:
"info info"
"leaderboards leaderboards"
"pbsTime pbsWords";
.pbsWords {
@ -78,7 +79,8 @@
.pbsWords,
.pbsTime,
.details {
.details,
.leaderboardsPositions {
// user-select: none;
background: var(--sub-alt-color);
padding: 1rem;
@ -119,6 +121,43 @@
.editProfileButton {
font-size: 0.9rem;
}
}
.leaderboardsPositions {
grid-area: leaderboards;
display: grid;
gap: 1rem;
align-items: center;
grid-template-areas: "title t15 t60";
grid-template-columns: unset;
justify-items: center;
.title {
color: var(--sub-color);
text-align: center;
grid-area: title;
}
.group {
display: grid;
gap: 1rem;
grid-template-columns: auto 1fr;
align-items: center;
.testType {
color: var(--sub-color);
}
.pos {
font-size: 2rem;
}
&.t15 {
grid-area: t15;
}
&.t60 {
grid-area: t60;
}
}
}
.pbsWords,
.pbsTime {
.group {
justify-self: center;
display: grid;

View file

@ -197,6 +197,7 @@
grid-template-rows: auto auto auto;
grid-template-areas:
"info"
"leaderboards"
"pbsTime"
"pbsWords";
.details.soc {
@ -247,6 +248,9 @@
// }
}
}
.leaderboardsPositions {
grid-template-areas: "title title" "t15 t60";
}
}
#leaderboards {
.mainTitle {
@ -498,6 +502,7 @@
grid-template-rows: auto auto auto;
grid-template-areas:
"info"
"leaderboards"
"pbsTime"
"pbsWords";
.details.none {
@ -723,6 +728,9 @@
grid-template-columns: 1fr;
}
}
.leaderboardsPositions {
grid-template-areas: "title" "t15" "t60";
}
}
#testModesNotice {
font-size: 0.75rem;

View file

@ -9,11 +9,16 @@ import * as ActivePage from "../states/active-page";
type ProfileViewPaths = "profile" | "account";
interface ProfileData extends MonkeyTypes.Snapshot {
allTimeLbs: MonkeyTypes.LeaderboardMemory;
}
export async function update(
where: ProfileViewPaths,
profile: Partial<MonkeyTypes.Snapshot>
profile: Partial<ProfileData>
): Promise<void> {
const elementClass = where.charAt(0).toUpperCase() + where.slice(1);
const profileElement = $(`.page${elementClass} .profile`);
const details = $(`.page${elementClass} .profile .details`);
// ============================================================================
@ -181,6 +186,32 @@ export async function update(
`${Misc.abbreviateNumber(xpForLevel - xpToDisplay)} xp until next level`
);
//lbs
if (banned) {
profileElement.find(".leaderboardsPositions").addClass("hidden");
} else {
profileElement.find(".leaderboardsPositions").removeClass("hidden");
const lbPos = where === "profile" ? profile.allTimeLbs : profile.lbMemory;
const t15 = lbPos?.time?.[15]?.["english"];
const t60 = lbPos?.time?.[60]?.["english"];
if (!t15 && !t60) {
profileElement.find(".leaderboardsPositions").addClass("hidden");
} else {
const t15string = t15 ? Misc.getPositionString(t15) : "-";
profileElement
.find(".leaderboardsPositions .group.t15 .pos")
.text(t15string);
const t60string = t60 ? Misc.getPositionString(t60) : "-";
profileElement
.find(".leaderboardsPositions .group.t60 .pos")
.text(t60string);
}
}
//structure
const bioAndKey = bio || keyboard;

View file

@ -65,6 +65,17 @@ function reset(): void {
<div class="value">-</div>
</div>
</div>
<div class="leaderboardsPositions">
<div class="title">All-Time English Leaderboards</div>
<div class="group t15">
<div class="testType">15 seconds</div>
<div class="pos">-</div>
</div>
<div class="group t60">
<div class="testType">60 seconds</div>
<div class="pos">-</div>
</div>
</div>
<div class="pbsWords">
<div class="group">
<div class="quick">

View file

@ -93,20 +93,17 @@
</div>
</div>
</div>
<!-- <div class="typingStats triplegroup">
<div class="group globalTestsStarted">
<div class="title">tests started</div>
<div class="val">-</div>
<div class="leaderboardsPositions">
<div class="title">All-Time English Leaderboards</div>
<div class="group t15">
<div class="testType">15 seconds</div>
<div class="pos">-</div>
</div>
<div class="group globalTestsCompleted">
<div class="title">tests completed</div>
<div class="val">-</div>
<div class="group t60">
<div class="testType">60 seconds</div>
<div class="pos">-</div>
</div>
<div class="group globalTimeTyping">
<div class="title">time typing</div>
<div class="val">-</div>
</div>
</div> -->
</div>
<div class="pbsWords">
<div class="group">
<div class="quick">

View file

@ -75,6 +75,17 @@
<div class="value">-</div>
</div>
</div>
<div class="leaderboardsPositions">
<div class="title">All-Time English Leaderboards</div>
<div class="group t15">
<div class="testType">15 seconds</div>
<div class="pos">-</div>
</div>
<div class="group t60">
<div class="testType">60 seconds</div>
<div class="pos">-</div>
</div>
</div>
<div class="pbsWords">
<div class="group">
<div class="quick">