feat: Display the level cap
This commit is contained in:
parent
466e5a3107
commit
8ab29bece8
@ -22,7 +22,7 @@ import HomeIcon from "@material-ui/icons/Home";
|
|||||||
import BookIcon from "@material-ui/icons/Book";
|
import BookIcon from "@material-ui/icons/Book";
|
||||||
import ViewWeekIcon from "@material-ui/icons/ViewWeek";
|
import ViewWeekIcon from "@material-ui/icons/ViewWeek";
|
||||||
|
|
||||||
import { IUser } from "../models/user";
|
import { IUser, userScoreToLevel } from "../models/user";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
logout: () => void;
|
logout: () => void;
|
||||||
@ -43,6 +43,8 @@ export default class Drawer extends React.Component<IProps> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
const level = userScoreToLevel(this.props.user.score);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<AppBar position="static">
|
<AppBar position="static">
|
||||||
@ -62,7 +64,7 @@ export default class Drawer extends React.Component<IProps> {
|
|||||||
{
|
{
|
||||||
this.props.authenticated ? (
|
this.props.authenticated ? (
|
||||||
<Button color="inherit">
|
<Button color="inherit">
|
||||||
{`${this.props.user.score} / 200`}
|
{`${this.props.user.score} / ${level.levelCap}`}
|
||||||
</Button>
|
</Button>
|
||||||
) : undefined
|
) : undefined
|
||||||
}
|
}
|
||||||
|
11
frontend/src/models/__tests__/userLevels.ts
Normal file
11
frontend/src/models/__tests__/userLevels.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { userScoreToLevel } from "../user";
|
||||||
|
|
||||||
|
it("Should return level 1 for 34", () => {
|
||||||
|
const level = userScoreToLevel(34);
|
||||||
|
expect(level.level).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Should return level 2 for 35", () => {
|
||||||
|
const level = userScoreToLevel(35);
|
||||||
|
expect(level.level).toBe(2);
|
||||||
|
});
|
@ -6,3 +6,46 @@ export interface IUser {
|
|||||||
|
|
||||||
sessionToken: string;
|
sessionToken: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface IUserLevel {
|
||||||
|
// The numerical representation
|
||||||
|
level: number;
|
||||||
|
// The string representation
|
||||||
|
name: string;
|
||||||
|
// The user has this level until: score => levelCap
|
||||||
|
levelCap: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
function levelFactory(): (name: string, levelCap: number) => IUserLevel {
|
||||||
|
let level = 1;
|
||||||
|
return (name: string, levelCap: number) => {
|
||||||
|
return {
|
||||||
|
level: level++,
|
||||||
|
name,
|
||||||
|
levelCap,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const l = levelFactory();
|
||||||
|
|
||||||
|
export const UserLevels: IUserLevel[] = [
|
||||||
|
l("Sklave", 35),
|
||||||
|
l("Farmer", 75),
|
||||||
|
l("Soldat", 120),
|
||||||
|
l("Gladiator", 170),
|
||||||
|
l("Zenturio", 220),
|
||||||
|
l("Prätor", 270),
|
||||||
|
l("Reiter", 320),
|
||||||
|
l("General", 370),
|
||||||
|
l("Konsul", 420),
|
||||||
|
l("Caesar", 470),
|
||||||
|
];
|
||||||
|
|
||||||
|
export function userScoreToLevel(userScore: number): IUserLevel {
|
||||||
|
// NOTE: The failure level should never be returned
|
||||||
|
return UserLevels.find((el) => userScore < el.levelCap) || {
|
||||||
|
level: 0,
|
||||||
|
name: "Failure",
|
||||||
|
levelCap: 10000000,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@ -60,7 +60,9 @@ const initialState: IState = {
|
|||||||
// TODO: Set this to false
|
// TODO: Set this to false
|
||||||
authenticated: true,
|
authenticated: true,
|
||||||
|
|
||||||
user: {},
|
user: {
|
||||||
|
score: 0,
|
||||||
|
},
|
||||||
|
|
||||||
login: {
|
login: {
|
||||||
loading: false,
|
loading: false,
|
||||||
|
Reference in New Issue
Block a user