updated utils from js to ts
This commit is contained in:
@@ -1,12 +1,21 @@
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { StatusCodes as STATUS } from "http-status-codes";
|
import { StatusCodes as STATUS } from "http-status-codes";
|
||||||
import { AUTHCODE_REGEX, SHARECODE_REGEX } from "/src/constants";
|
import { AUTHCODE_REGEX, SHARECODE_REGEX } from "@/constants";
|
||||||
|
import type { Store } from "vuex";
|
||||||
|
import type { Match, MatchChat, MatchWeapons, Player, PlayerMeta } from "@/api";
|
||||||
|
import type { RootState } from "@/stores/matchDetails";
|
||||||
|
|
||||||
const API_URL = import.meta.env.VITE_API_URL;
|
const API_URL = import.meta.env.VITE_API_URL;
|
||||||
|
|
||||||
// /player/<id> GET returns player <id> details (last 10 matches)
|
// /player/<id> GET returns player <id> details (last 10 matches)
|
||||||
export const GetUser = async (store, id) => {
|
export const GetUser = async (
|
||||||
let response = null;
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
store: Store<"playerDetails", RootState, {}, {}>,
|
||||||
|
id: string
|
||||||
|
): Promise<Player | null> => {
|
||||||
|
let response: Player | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/player/${id}`)
|
.get(`${API_URL}/player/${id}`)
|
||||||
@@ -43,8 +52,12 @@ export const GetUser = async (store, id) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /player/<id>/meta/<limit> GET returns player <id> meta-stats with <limit>
|
// /player/<id>/meta/<limit> GET returns player <id> meta-stats with <limit>
|
||||||
export const GetPlayerMeta = async (store, player_id, limit = 4) => {
|
export const GetPlayerMeta = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
player_id: string,
|
||||||
|
limit = 4
|
||||||
|
): Promise<PlayerMeta | null> => {
|
||||||
|
let response: PlayerMeta | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/player/${player_id}/meta/${limit}`)
|
.get(`${API_URL}/player/${player_id}/meta/${limit}`)
|
||||||
@@ -81,8 +94,12 @@ export const GetPlayerMeta = async (store, player_id, limit = 4) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /player/<id>/next/<unix> GET returns 20 matches after <unix> for player <id>
|
// /player/<id>/next/<unix> GET returns 20 matches after <unix> for player <id>
|
||||||
export const LoadMoreMatches = async (store, player_id, date) => {
|
export const LoadMoreMatches = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
player_id: string,
|
||||||
|
date: number
|
||||||
|
): Promise<Player | null> => {
|
||||||
|
let response: Player | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/player/${player_id}/next/${date}`)
|
.get(`${API_URL}/player/${player_id}/next/${date}`)
|
||||||
@@ -119,8 +136,13 @@ export const LoadMoreMatches = async (store, player_id, date) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /player/<id>/track POST Track player <id> FORM_DATA: authcode, [sharecode]
|
// /player/<id>/track POST Track player <id> FORM_DATA: authcode, [sharecode]
|
||||||
export const TrackMe = async (store, id64, authcode, sharecode = "") => {
|
export const TrackMe = async (
|
||||||
let status = null;
|
store: Store<never>,
|
||||||
|
id64: string,
|
||||||
|
authcode: string,
|
||||||
|
sharecode = ""
|
||||||
|
): Promise<number | null> => {
|
||||||
|
let status: number | null = null;
|
||||||
let message = "";
|
let message = "";
|
||||||
|
|
||||||
if (sharecode !== "" && !SHARECODE_REGEX.test(sharecode)) {
|
if (sharecode !== "" && !SHARECODE_REGEX.test(sharecode)) {
|
||||||
@@ -184,8 +206,11 @@ export const TrackMe = async (store, id64, authcode, sharecode = "") => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /match/<id> GET returns details for match <id>
|
// /match/<id> GET returns details for match <id>
|
||||||
export const GetMatchDetails = async (store, match_id) => {
|
export const GetMatchDetails = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
match_id: string
|
||||||
|
): Promise<Match | null> => {
|
||||||
|
let response: Match | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/match/${match_id}`)
|
.get(`${API_URL}/match/${match_id}`)
|
||||||
@@ -221,9 +246,19 @@ export const GetMatchDetails = async (store, match_id) => {
|
|||||||
return response;
|
return response;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type MatchRounds = {
|
||||||
|
rounds: {
|
||||||
|
[round: string]: {
|
||||||
|
[player: string]: Array<{ equip: number; spent: number; bank: number }>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
// /match/<id>/rounds GET returns round-stats for match <id>
|
// /match/<id>/rounds GET returns round-stats for match <id>
|
||||||
export const GetPlayerValue = async (store, match_id) => {
|
export const GetPlayerValue = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
match_id: string
|
||||||
|
): Promise<MatchRounds | null> => {
|
||||||
|
let response: MatchRounds | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/match/${match_id}/rounds`)
|
.get(`${API_URL}/match/${match_id}/rounds`)
|
||||||
@@ -260,8 +295,11 @@ export const GetPlayerValue = async (store, match_id) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /match/<id>/weapons GET returns weapon-stats for match <id>
|
// /match/<id>/weapons GET returns weapon-stats for match <id>
|
||||||
export const GetWeaponDmg = async (store, match_id) => {
|
export const GetWeaponDmg = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
match_id: string
|
||||||
|
): Promise<MatchWeapons | null> => {
|
||||||
|
let response: MatchWeapons | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/match/${match_id}/weapons`)
|
.get(`${API_URL}/match/${match_id}/weapons`)
|
||||||
@@ -298,8 +336,11 @@ export const GetWeaponDmg = async (store, match_id) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /match/<id>/chat GET returns chat history for match <id>
|
// /match/<id>/chat GET returns chat history for match <id>
|
||||||
export const GetChatHistory = async (store, match_id) => {
|
export const GetChatHistory = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
match_id: string
|
||||||
|
): Promise<MatchChat | null> => {
|
||||||
|
let response: MatchChat | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/match/${match_id}/chat`)
|
.get(`${API_URL}/match/${match_id}/chat`)
|
||||||
@@ -336,8 +377,11 @@ export const GetChatHistory = async (store, match_id) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /matches/<id>/chat/<langCode> GET returns chat history for match <id> with translated sections
|
// /matches/<id>/chat/<langCode> GET returns chat history for match <id> with translated sections
|
||||||
export const GetChatHistoryTranslated = async (store, match_id) => {
|
export const GetChatHistoryTranslated = async (
|
||||||
let response = null;
|
store: Store<never>,
|
||||||
|
match_id: string
|
||||||
|
): Promise<MatchChat | null> => {
|
||||||
|
let response: MatchChat | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/match/${match_id}/chat?translate=1`)
|
.get(`${API_URL}/match/${match_id}/chat?translate=1`)
|
||||||
@@ -374,8 +418,13 @@ export const GetChatHistoryTranslated = async (store, match_id) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /matches GET returns last 20 matches in DB
|
// /matches GET returns last 20 matches in DB
|
||||||
export const GetMatches = async (store) => {
|
export const GetMatches = async (
|
||||||
let response = null;
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
store: Store<"matchDetails", RootState, {}, {}>
|
||||||
|
): Promise<Match[] | null> => {
|
||||||
|
let response: Match[] | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/matches`)
|
.get(`${API_URL}/matches`)
|
||||||
@@ -409,8 +458,14 @@ export const GetMatches = async (store) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// /matches/next/<unix> GET returns 20 matches after time <unix>
|
// /matches/next/<unix> GET returns 20 matches after time <unix>
|
||||||
export const LoadMoreMatchesExplore = async (store, date) => {
|
export const LoadMoreMatchesExplore = async (
|
||||||
let response = null;
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
store: Store<"matchDetails", RootState, {}, {}>,
|
||||||
|
date: number
|
||||||
|
): Promise<Match[] | null> => {
|
||||||
|
let response: Match[] | null = null;
|
||||||
|
|
||||||
await axios
|
await axios
|
||||||
.get(`${API_URL}/matches/next/${date}`)
|
.get(`${API_URL}/matches/next/${date}`)
|
@@ -1,6 +1,9 @@
|
|||||||
import { DateTime, Duration } from "luxon/build/es6/luxon";
|
import { DateTime, Duration } from "luxon";
|
||||||
|
|
||||||
export const ConvertTickToTime = (tick, rate = 64) => {
|
export const ConvertTickToTime = (
|
||||||
|
tick: number,
|
||||||
|
rate = 64
|
||||||
|
): string | undefined => {
|
||||||
const time = Duration.fromObject({
|
const time = Duration.fromObject({
|
||||||
hours: 0,
|
hours: 0,
|
||||||
minutes: 0,
|
minutes: 0,
|
||||||
@@ -11,16 +14,22 @@ export const ConvertTickToTime = (tick, rate = 64) => {
|
|||||||
else if (time.hours < 1) return time.toFormat("mm:ss");
|
else if (time.hours < 1) return time.toFormat("mm:ss");
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormatDuration = (d) => {
|
export const FormatDuration = (d: number): string | undefined => {
|
||||||
const duration = Duration.fromObject({ hours: 0, minutes: 0, seconds: d })
|
const duration = Duration.fromObject({
|
||||||
.normalize()
|
hours: 0,
|
||||||
.toObject();
|
minutes: 0,
|
||||||
|
seconds: d,
|
||||||
|
}).normalize();
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
if (duration.hours > 1) return `${duration.hours} h ${duration.minutes} min`;
|
if (duration.hours > 1) return `${duration.hours} h ${duration.minutes} min`;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
else if (duration.hours < 1) return `${duration.minutes} min`;
|
else if (duration.hours < 1) return `${duration.minutes} min`;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormatFullDuration = (d) => {
|
export const FormatFullDuration = (d: number): string | undefined => {
|
||||||
const duration = Duration.fromObject({
|
const duration = Duration.fromObject({
|
||||||
hours: 0,
|
hours: 0,
|
||||||
minutes: 0,
|
minutes: 0,
|
||||||
@@ -31,7 +40,7 @@ export const FormatFullDuration = (d) => {
|
|||||||
else if (duration.hours < 1) return duration.toFormat("mm:ss");
|
else if (duration.hours < 1) return duration.toFormat("mm:ss");
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormatDate = (date) => {
|
export const FormatDate = (date: number): string => {
|
||||||
const matchDate = DateTime.fromSeconds(date || 0);
|
const matchDate = DateTime.fromSeconds(date || 0);
|
||||||
const diff = DateTime.now().diff(matchDate);
|
const diff = DateTime.now().diff(matchDate);
|
||||||
|
|
||||||
@@ -42,10 +51,10 @@ export const FormatDate = (date) => {
|
|||||||
month: "2-digit",
|
month: "2-digit",
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
});
|
});
|
||||||
else return matchDate.toRelative();
|
else return matchDate.toRelative() || "";
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormatFullDate = (date) => {
|
export const FormatFullDate = (date: number): string => {
|
||||||
const matchDate = DateTime.fromSeconds(date || 0);
|
const matchDate = DateTime.fromSeconds(date || 0);
|
||||||
|
|
||||||
return matchDate.toLocaleString({
|
return matchDate.toLocaleString({
|
||||||
@@ -59,18 +68,18 @@ export const FormatFullDate = (date) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FormatVacDate = (date, match) => {
|
export const FormatVacDate = (date: number, match: number): string => {
|
||||||
const vacDate = DateTime.fromSeconds(date || 0);
|
const vacDate = DateTime.fromSeconds(date || 0);
|
||||||
const matchDate = DateTime.fromSeconds(match || 0);
|
const matchDate = DateTime.fromSeconds(match || 0);
|
||||||
|
|
||||||
if (vacDate.diff(matchDate).as("days") >= -30) {
|
if (vacDate.diff(matchDate).as("days") >= -30) {
|
||||||
return vacDate.toRelative();
|
return vacDate.toRelative() || "";
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MatchNotParsedTime = (match) => {
|
export const MatchNotParsedTime = (match: number): boolean => {
|
||||||
const matchDate = DateTime.fromSeconds(match || 0);
|
const matchDate = DateTime.fromSeconds(match || 0);
|
||||||
|
|
||||||
return matchDate.diffNow().as("hours") >= -2;
|
return matchDate.diffNow().as("hours") >= -2;
|
@@ -1,4 +1,4 @@
|
|||||||
export const DisplayRank = (rankNr = 0) => {
|
export const DisplayRank = (rankNr = 0): Array<string | undefined> => {
|
||||||
const rankMap = new Map([
|
const rankMap = new Map([
|
||||||
[0, "Unranked"],
|
[0, "Unranked"],
|
||||||
[1, "Silver I"],
|
[1, "Silver I"],
|
||||||
@@ -23,7 +23,7 @@ export const DisplayRank = (rankNr = 0) => {
|
|||||||
return [`/images/rank_icons/skillgroup${rankNr}.svg`, rankMap.get(rankNr)];
|
return [`/images/rank_icons/skillgroup${rankNr}.svg`, rankMap.get(rankNr)];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DisplayWeapon = (weaponId) => {
|
export const DisplayWeapon = (weaponId: number): string => {
|
||||||
const wepaonMap = new Map([
|
const wepaonMap = new Map([
|
||||||
[1, "p2000"],
|
[1, "p2000"],
|
||||||
[2, "glock"],
|
[2, "glock"],
|
||||||
@@ -63,16 +63,12 @@ export const DisplayWeapon = (weaponId) => {
|
|||||||
[310, "scar20"],
|
[310, "scar20"],
|
||||||
[311, "g3sg1"],
|
[311, "g3sg1"],
|
||||||
]);
|
]);
|
||||||
if (wepaonMap.get(weaponId)) {
|
return `/images/weapons/${wepaonMap.get(weaponId) || ""}.svg`;
|
||||||
return `/images/weapons/${wepaonMap.get(weaponId)}.svg`;
|
|
||||||
} else {
|
|
||||||
weaponId;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LoadImage = (mapName) => {
|
export const LoadImage = (mapName: string): void => {
|
||||||
let img = new Image();
|
const img = new Image();
|
||||||
let background = document.querySelector(".bg-img");
|
const background = document.querySelector(".bg-img") as HTMLImageElement;
|
||||||
|
|
||||||
img.onload = function () {
|
img.onload = function () {
|
||||||
if (background) {
|
if (background) {
|
@@ -1,17 +1,17 @@
|
|||||||
import router from "../router";
|
import router from "../router";
|
||||||
|
|
||||||
export const GoToMatch = (id) => {
|
export const GoToMatch = (id: string): void => {
|
||||||
router.push({ name: "Match", params: { match_id: id } });
|
router.push({ name: "Match", params: { match_id: id } });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const GoToPlayer = (id) => {
|
export const GoToPlayer = (id: string): void => {
|
||||||
router.push({ name: "Player", params: { id: id } });
|
router.push({ name: "Player", params: { id: id } });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const GoToError = (code) => {
|
export const GoToError = (code: string): void => {
|
||||||
router.push({ name: code });
|
router.push({ name: code });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const GoToLink = (link) => {
|
export const GoToLink = (link: string): void => {
|
||||||
router.replace(link);
|
router.replace(link);
|
||||||
};
|
};
|
@@ -1,12 +1,12 @@
|
|||||||
export const GetHLTV_1 = (
|
export const GetHLTV_1 = (
|
||||||
kills = 0,
|
kills = 0,
|
||||||
rounds,
|
rounds: number,
|
||||||
deaths = 0,
|
deaths = 0,
|
||||||
k2 = 0,
|
k2 = 0,
|
||||||
k3 = 0,
|
k3 = 0,
|
||||||
k4 = 0,
|
k4 = 0,
|
||||||
k5 = 0
|
k5 = 0
|
||||||
) => {
|
): string => {
|
||||||
const k1 = kills - k2 - k3 - k4 - k5;
|
const k1 = kills - k2 - k3 - k4 - k5;
|
||||||
const Weight_KPR = 0.679; // weight kills per round
|
const Weight_KPR = 0.679; // weight kills per round
|
||||||
const Weight_SPR = 0.317; // weight survived rounds per round
|
const Weight_SPR = 0.317; // weight survived rounds per round
|
@@ -1,31 +0,0 @@
|
|||||||
export const SaveLastVisitedToLocalStorage = (data) => {
|
|
||||||
let a = JSON.parse(localStorage.getItem("recent-visited")) || [];
|
|
||||||
|
|
||||||
if (a.length === 0) {
|
|
||||||
a.unshift(data);
|
|
||||||
} else if (a.length === 9) {
|
|
||||||
if (a.find((p) => p.steamid64 === data.steamid64)) {
|
|
||||||
a.shift();
|
|
||||||
a.splice(
|
|
||||||
a.findIndex((i) => i.steamid64 === data.steamid64),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
a.unshift(data);
|
|
||||||
} else if (!a.find((p) => p.steamid64 === data.steamid64)) {
|
|
||||||
a.shift();
|
|
||||||
a.unshift(data);
|
|
||||||
}
|
|
||||||
} else if (a.length > 0 && a.length < 9) {
|
|
||||||
if (a.find((p) => p.steamid64 === data.steamid64)) {
|
|
||||||
a.splice(
|
|
||||||
a.findIndex((i) => i.steamid64 === data.steamid64),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
a.unshift(data);
|
|
||||||
} else if (!a.find((p) => p.steamid64 === data.steamid64)) {
|
|
||||||
a.unshift(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
localStorage.setItem("recent-visited", JSON.stringify(a));
|
|
||||||
};
|
|
33
src/utils/LocalStorage.ts
Normal file
33
src/utils/LocalStorage.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import type { Player } from "@/api";
|
||||||
|
|
||||||
|
export const SaveLastVisitedToLocalStorage = (data: Player): void => {
|
||||||
|
const a = JSON.parse(localStorage.getItem("recent-visited") || "") || [];
|
||||||
|
|
||||||
|
if (a.length === 0) {
|
||||||
|
a.unshift(data);
|
||||||
|
} else if (a.length === 9) {
|
||||||
|
if (a.find((p: Player) => p.steamid64 === data.steamid64)) {
|
||||||
|
a.shift();
|
||||||
|
a.splice(
|
||||||
|
a.findIndex((p: Player) => p.steamid64 === data.steamid64),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
a.unshift(data);
|
||||||
|
} else if (!a.find((p: Player) => p.steamid64 === data.steamid64)) {
|
||||||
|
a.shift();
|
||||||
|
a.unshift(data);
|
||||||
|
}
|
||||||
|
} else if (a.length > 0 && a.length < 9) {
|
||||||
|
if (a.find((p: Player) => p.steamid64 === data.steamid64)) {
|
||||||
|
a.splice(
|
||||||
|
a.findIndex((p: Player) => p.steamid64 === data.steamid64),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
a.unshift(data);
|
||||||
|
} else if (!a.find((p: Player) => p.steamid64 === data.steamid64)) {
|
||||||
|
a.unshift(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem("recent-visited", JSON.stringify(a));
|
||||||
|
};
|
@@ -1,125 +0,0 @@
|
|||||||
import { GoToError } from "/src/utils/GoTo";
|
|
||||||
|
|
||||||
export const errorHandling = (code) => {
|
|
||||||
if (code === 404) {
|
|
||||||
GoToError("404");
|
|
||||||
} else if (code === 500) {
|
|
||||||
GoToError("500");
|
|
||||||
} else if (code === 502) {
|
|
||||||
GoToError("502");
|
|
||||||
} else {
|
|
||||||
GoToError("404");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const setTitle = (title) => {
|
|
||||||
document.title = `${title} | csgoWTF`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const closeNav = (navSelector) => {
|
|
||||||
const nav = document.getElementById(navSelector);
|
|
||||||
if (nav) if (nav.classList.contains("show")) nav.classList.remove("show");
|
|
||||||
};
|
|
||||||
|
|
||||||
export const GetWinLoss = (matchResult, teamId) => {
|
|
||||||
if (matchResult === teamId) {
|
|
||||||
return "win";
|
|
||||||
} else if (matchResult === 0) {
|
|
||||||
return "draw";
|
|
||||||
} else {
|
|
||||||
return "loss";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const truncate = (str, len, ending) => {
|
|
||||||
if (len == null) len = 100;
|
|
||||||
|
|
||||||
if (ending == null) ending = "..";
|
|
||||||
|
|
||||||
if (str.length > len) return str.substring(0, len - ending.length) + ending;
|
|
||||||
else return str;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const checkStatEmpty = (stat) => {
|
|
||||||
if (stat) return stat;
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const FixMapName = (map) => {
|
|
||||||
return map.split("_")[1].replace(/^\w/, (c) => c.toUpperCase());
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getPlayerArr = (stats, team, color) => {
|
|
||||||
let arr = [];
|
|
||||||
for (let i = (team - 1) * 5; i < team * 5; i++) {
|
|
||||||
arr.push({
|
|
||||||
value: truncate(stats[i].player.name, 12),
|
|
||||||
textStyle: {
|
|
||||||
color: color
|
|
||||||
? getComputedStyle(document.documentElement).getPropertyValue(
|
|
||||||
`--csgo-${stats[i].color}`
|
|
||||||
)
|
|
||||||
: "white",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
arr.reverse();
|
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const constructAvatarUrl = (hash, size) => {
|
|
||||||
const base =
|
|
||||||
"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars";
|
|
||||||
const imgSize = size ? `_${size}` : "";
|
|
||||||
|
|
||||||
if (hash) {
|
|
||||||
const hashDir = hash.substring(0, 2);
|
|
||||||
|
|
||||||
return `${base}/${hashDir}/${hash}${imgSize}.jpg`;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const sortObjectValue = (obj, direction = "asc") => {
|
|
||||||
const sortable = [];
|
|
||||||
for (let key in obj) {
|
|
||||||
sortable.push([key, obj[key]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (direction === "asc") {
|
|
||||||
sortable.sort((a, b) => {
|
|
||||||
return a[1] - b[1];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (direction === "desc") {
|
|
||||||
sortable.sort((a, b) => {
|
|
||||||
return b[1] - a[1];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return sortable;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const CreatePlayersArray = (stats) => {
|
|
||||||
let arr = [];
|
|
||||||
for (let i in stats) {
|
|
||||||
arr.push({ team_id: stats[i].team_id, player: stats[i].player });
|
|
||||||
}
|
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const scrollToPos = (pos = 0) => {
|
|
||||||
window.scrollTo({
|
|
||||||
top: pos,
|
|
||||||
left: 0,
|
|
||||||
behavior: "smooth",
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const StripControlCodes = (str = "") => {
|
|
||||||
const regexpControl = /\p{C}/gu;
|
|
||||||
return str.replace(regexpControl, "");
|
|
||||||
};
|
|
||||||
|
|
||||||
export const ProcessName = (str = "") => {
|
|
||||||
return StripControlCodes(str).trim();
|
|
||||||
};
|
|
160
src/utils/Utils.ts
Normal file
160
src/utils/Utils.ts
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
import { GoToError } from "@/utils/GoTo";
|
||||||
|
import type { Player, Stats } from "@/api";
|
||||||
|
|
||||||
|
enum ErrorPage {
|
||||||
|
INTERNAL_SERVER_ERROR = 500,
|
||||||
|
BAD_GATEWAY = 502,
|
||||||
|
}
|
||||||
|
export const errorHandling = (code: number): void => {
|
||||||
|
if (code === ErrorPage.INTERNAL_SERVER_ERROR) {
|
||||||
|
GoToError("500");
|
||||||
|
} else if (code === ErrorPage.BAD_GATEWAY) {
|
||||||
|
GoToError("502");
|
||||||
|
} else {
|
||||||
|
GoToError("404");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setTitle = (title: string): void => {
|
||||||
|
document.title = `${title} | csgoWTF`;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const closeNav = (navSelector: string): void => {
|
||||||
|
const nav = document.getElementById(navSelector);
|
||||||
|
if (nav) if (nav.classList.contains("show")) nav.classList.remove("show");
|
||||||
|
};
|
||||||
|
|
||||||
|
export const closeNavEventListener = (navSelector: string): void => {
|
||||||
|
document.addEventListener("click", (e: MouseEvent) => {
|
||||||
|
const divElem = e.target as HTMLDivElement;
|
||||||
|
const mainNav = divElem.querySelector(
|
||||||
|
`#${navSelector}`
|
||||||
|
) as HTMLDivElement | null;
|
||||||
|
if (mainNav === null) {
|
||||||
|
closeNav(navSelector);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
enum WLD {
|
||||||
|
WIN = "win",
|
||||||
|
LOSS = "loss",
|
||||||
|
DRAW = "draw",
|
||||||
|
}
|
||||||
|
export const GetWinLoss = (matchResult: number, teamId: number): WLD => {
|
||||||
|
if (matchResult === teamId) {
|
||||||
|
return WLD.WIN;
|
||||||
|
} else if (matchResult === 0) {
|
||||||
|
return WLD.DRAW;
|
||||||
|
} else {
|
||||||
|
return WLD.LOSS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const truncate = (str: string, len: number, ending = ".."): string => {
|
||||||
|
if (len == null) len = 100;
|
||||||
|
|
||||||
|
if (str.length > len) return str.substring(0, len - ending.length) + ending;
|
||||||
|
else return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const checkStatEmpty = (stat: never): never | number => {
|
||||||
|
if (stat) return stat;
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const FixMapName = (map: string): string => {
|
||||||
|
return map.split("_")[1].replace(/^\w/, (c) => c.toUpperCase());
|
||||||
|
};
|
||||||
|
|
||||||
|
type PlayerArrayType = {
|
||||||
|
value: string;
|
||||||
|
textStyle: PlayerArrayTextStyle;
|
||||||
|
};
|
||||||
|
type PlayerArrayTextStyle = {
|
||||||
|
color: string;
|
||||||
|
};
|
||||||
|
export const getPlayerArr = (
|
||||||
|
stats: Stats[],
|
||||||
|
team: number,
|
||||||
|
color = false
|
||||||
|
): PlayerArrayType[] => {
|
||||||
|
const arr: PlayerArrayType[] = [];
|
||||||
|
for (let i = (team - 1) * 5; i < team * 5; i++) {
|
||||||
|
arr.push({
|
||||||
|
value: truncate(stats[i].player?.name || "", 12),
|
||||||
|
textStyle: {
|
||||||
|
color: color
|
||||||
|
? getComputedStyle(document.documentElement).getPropertyValue(
|
||||||
|
`--csgo-${stats[i].color}`
|
||||||
|
)
|
||||||
|
: "white",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
arr.reverse();
|
||||||
|
return arr;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const constructAvatarUrl = (hash: string, size: number): string => {
|
||||||
|
let output = "";
|
||||||
|
const base =
|
||||||
|
"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars";
|
||||||
|
const imgSize = size ? `_${size}` : "";
|
||||||
|
|
||||||
|
if (hash) {
|
||||||
|
const hashDir = hash.substring(0, 2);
|
||||||
|
output = `${base}/${hashDir}/${hash}${imgSize}.jpg`;
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const sortObjectValue = (
|
||||||
|
obj: Record<string, number>,
|
||||||
|
direction = "asc"
|
||||||
|
): Array<[string, number]> => {
|
||||||
|
const sortable: Array<[string, number]> = [];
|
||||||
|
for (const key in obj) {
|
||||||
|
sortable.push([key, obj[key]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (direction === "asc") {
|
||||||
|
sortable.sort((a, b) => {
|
||||||
|
return a[1] - b[1];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (direction === "desc") {
|
||||||
|
sortable.sort((a, b) => {
|
||||||
|
return b[1] - a[1];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return sortable;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const CreatePlayersArray = (
|
||||||
|
stats: Stats[]
|
||||||
|
): Array<Record<string, number | Player | undefined>> => {
|
||||||
|
const arr: Array<Record<string, number | Player | undefined>> = [];
|
||||||
|
for (let i = 0; i < stats.length; i++) {
|
||||||
|
arr.push({ team_id: stats[i].teamId, player: stats[i].player });
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const scrollToPos = (pos = 0): void => {
|
||||||
|
window.scrollTo({
|
||||||
|
top: pos,
|
||||||
|
left: 0,
|
||||||
|
behavior: "smooth",
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const StripControlCodes = (str = ""): string => {
|
||||||
|
const regexpControl = /\p{C}/gu;
|
||||||
|
return str.replace(regexpControl, "");
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ProcessName = (str = ""): string => {
|
||||||
|
return StripControlCodes(str).trim();
|
||||||
|
};
|
@@ -1,85 +0,0 @@
|
|||||||
import {
|
|
||||||
ConvertTickToTime,
|
|
||||||
FormatDate,
|
|
||||||
FormatDuration,
|
|
||||||
FormatFullDate,
|
|
||||||
FormatFullDuration,
|
|
||||||
FormatVacDate,
|
|
||||||
MatchNotParsedTime,
|
|
||||||
} from "./DateTime";
|
|
||||||
import { GoToLink, GoToMatch, GoToPlayer } from "./GoTo";
|
|
||||||
import { SaveLastVisitedToLocalStorage } from "./LocalStorage";
|
|
||||||
import { GetHLTV_1 } from "./HLTV";
|
|
||||||
import { DisplayRank, DisplayWeapon, LoadImage } from "./Display";
|
|
||||||
import {
|
|
||||||
GetChatHistory,
|
|
||||||
GetChatHistoryTranslated,
|
|
||||||
GetMatchDetails,
|
|
||||||
GetMatches,
|
|
||||||
GetPlayerMeta,
|
|
||||||
GetPlayerValue,
|
|
||||||
GetUser,
|
|
||||||
GetWeaponDmg,
|
|
||||||
LoadMoreMatches,
|
|
||||||
LoadMoreMatchesExplore,
|
|
||||||
TrackMe,
|
|
||||||
} from "./ApiRequests";
|
|
||||||
import {
|
|
||||||
checkStatEmpty,
|
|
||||||
closeNav,
|
|
||||||
constructAvatarUrl,
|
|
||||||
CreatePlayersArray,
|
|
||||||
errorHandling,
|
|
||||||
FixMapName,
|
|
||||||
getPlayerArr,
|
|
||||||
GetWinLoss,
|
|
||||||
ProcessName,
|
|
||||||
scrollToPos,
|
|
||||||
setTitle,
|
|
||||||
sortObjectValue,
|
|
||||||
StripControlCodes,
|
|
||||||
truncate,
|
|
||||||
} from "./Utils";
|
|
||||||
|
|
||||||
export {
|
|
||||||
MatchNotParsedTime,
|
|
||||||
GetChatHistoryTranslated,
|
|
||||||
GetChatHistory,
|
|
||||||
ConvertTickToTime,
|
|
||||||
FormatDate,
|
|
||||||
FormatFullDuration,
|
|
||||||
FormatFullDate,
|
|
||||||
FormatDuration,
|
|
||||||
FormatVacDate,
|
|
||||||
GoToMatch,
|
|
||||||
GoToPlayer,
|
|
||||||
GoToLink,
|
|
||||||
SaveLastVisitedToLocalStorage,
|
|
||||||
GetHLTV_1,
|
|
||||||
DisplayRank,
|
|
||||||
LoadImage,
|
|
||||||
GetUser,
|
|
||||||
TrackMe,
|
|
||||||
GetPlayerValue,
|
|
||||||
DisplayWeapon,
|
|
||||||
LoadMoreMatches,
|
|
||||||
GetPlayerMeta,
|
|
||||||
GetMatchDetails,
|
|
||||||
setTitle,
|
|
||||||
GetWinLoss,
|
|
||||||
truncate,
|
|
||||||
checkStatEmpty,
|
|
||||||
getPlayerArr,
|
|
||||||
constructAvatarUrl,
|
|
||||||
FixMapName,
|
|
||||||
closeNav,
|
|
||||||
sortObjectValue,
|
|
||||||
GetWeaponDmg,
|
|
||||||
CreatePlayersArray,
|
|
||||||
GetMatches,
|
|
||||||
LoadMoreMatchesExplore,
|
|
||||||
scrollToPos,
|
|
||||||
StripControlCodes,
|
|
||||||
ProcessName,
|
|
||||||
errorHandling,
|
|
||||||
};
|
|
7
src/utils/index.ts
Normal file
7
src/utils/index.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export * from "./ApiRequests";
|
||||||
|
export * from "./DateTime";
|
||||||
|
export * from "./Display";
|
||||||
|
export * from "./GoTo";
|
||||||
|
export * from "./HLTV";
|
||||||
|
export * from "./LocalStorage";
|
||||||
|
export * from "./Utils";
|
Reference in New Issue
Block a user