summaryrefslogtreecommitdiff
path: root/front/src/Pages/Weapons.tsx
diff options
context:
space:
mode:
authorphyscik <mynameisgennadiy@vk.com>2026-04-23 14:15:52 +0500
committerphyscik <mynameisgennadiy@vk.com>2026-04-23 14:15:52 +0500
commitc99fc297e8b66273d6210bed0812efab399ba13b (patch)
tree7275cc75244cc43a1e1ef28f2eb13878bd2225ad /front/src/Pages/Weapons.tsx
parent68f3941b17ce80f486d9dbaedbe3b4aa8746dff8 (diff)
Weapons index
Diffstat (limited to 'front/src/Pages/Weapons.tsx')
-rw-r--r--front/src/Pages/Weapons.tsx91
1 files changed, 87 insertions, 4 deletions
diff --git a/front/src/Pages/Weapons.tsx b/front/src/Pages/Weapons.tsx
index d16762c..f918232 100644
--- a/front/src/Pages/Weapons.tsx
+++ b/front/src/Pages/Weapons.tsx
@@ -1,18 +1,101 @@
-import { useContext } from "react";
+import axios from "axios";
+import { useContext, useState } from "react";
+import { BackendURL } from "../Config";
import { LanguageContext } from "../Locales/Context";
import { GetLocalizedString } from "../Locales/Locales";
+import { RangedWeapon } from "../Models/RangedWeapon";
+
+const RangedWeaponsURL = `${BackendURL}/weapons/ranged`;
function WeaponsIndex() {
- var lang = useContext(LanguageContext);
+ const lang = useContext(LanguageContext);
+ const [rangedWeapons, setRangedWeapons] = useState<RangedWeapon[] | null>(null);
+
+ useState(() => {
+ getRangedWeapons().then(data => setRangedWeapons(data));
+ });
return (
- <div>
+ <div className="WeaponsDiv">
+ <span>
<h1> {GetLocalizedString("Weapons index", lang)} </h1>
+ </span>
+ <h2> {GetLocalizedString("Ranged weapons", lang)} </h2>
+ {generatedRangedWeaponsList(rangedWeapons)}
</div>
);
}
-function WeaponsType() {
+function generatedRangedWeaponsList(rangedWeapons: RangedWeapon[] | null): any {
+ if (!rangedWeapons) {
+ return (
+ <div> </div>
+ );
+ }
+
+ const categorized = new Map<string, RangedWeapon[]>();
+
+ rangedWeapons.forEach(el => {
+ if (!categorized.has(el.WeaponType)) {
+ categorized.set(el.WeaponType, new Array<RangedWeapon>());
+ }
+ categorized.get(el.WeaponType)?.push(el);
+ });
+
+ const keys = Array.from(categorized.keys());
+ const list = keys.map(x => {
+ const elements = categorized.get(x)?.map(w => {
+ return (
+ <tr key={w.Id}>
+ <td> {w.Name} </td>
+ <td> {w.WeaponType} </td>
+ <td> {w.Accuracy} </td>
+ <td> {w.Concealability} </td>
+ <td> {w.Avaliability} </td>
+ <td> {w.Damage}({w.Ammunition}) </td>
+ <td> {w.NumberOfShots} </td>
+ <td> {w.RateOfFire} </td>
+ <td> {w.Reliability} </td>
+ </tr>
+ )
+ });
+
+ return (
+ <tbody key={x}>
+ <tr>
+ <td className="CategoryName"> {`${x}s`} </td>
+ </tr>
+ {elements}
+ </tbody>
+ );
+ });
+
+ return (
+ <table className="WeaponTable">
+ {list}
+ </table>
+ );
+}
+
+async function getRangedWeapons(): Promise<RangedWeapon[]> {
+ try {
+ const {data, status} = await axios.get<RangedWeapon[]>(
+ RangedWeaponsURL,
+ {
+ headers: { Accept: "application/json" }
+ }
+ );
+
+ if (status != 200) {
+ return new Array<RangedWeapon>();
+ }
+
+ return data;
+
+ } catch (err) {
+ console.log(`Failed to get ranged weapons: ${err}`);
+ return new Array<RangedWeapon>();
+ }
}
export default WeaponsIndex;