Skip to content

Commit 2da6be6

Browse files
authored
Merge pull request #15 from x-team/fix/XTG-312
[XTG-312] Improvements on Add enemy Modal
2 parents 2e939a5 + cabe7cd commit 2da6be6

File tree

9 files changed

+114
-35
lines changed

9 files changed

+114
-35
lines changed

Diff for: package-lock.json

+34
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"react-router-dom": "6.3.0",
1919
"react-scripts": "5.0.1",
2020
"react-spinners": "0.12.0",
21+
"react-toastify": "^9.0.5",
2122
"recharts": "2.1.10",
2223
"sweetalert2": "11.4.17",
2324
"typescript": "4.7.3",

Diff for: src/App.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import LeaderboardRanksPage from "./pages/LeaderboardRanksPage";
2424
// import { UnauthorizedPage } from "./pages/UnauthorizedPage";
2525
import { ProtectedRoute } from "./ProtectedRoute";
2626
import { AppMenu } from "./AppMenu";
27+
import { ToastContainer } from 'react-toastify';
28+
import 'react-toastify/dist/ReactToastify.css';
2729

2830
export const App = () => {
2931
// if (isDoingInitialLoading) {
@@ -36,6 +38,7 @@ export const App = () => {
3638

3739
return (
3840
<Router>
41+
<ToastContainer />
3942
<Routes>
4043
<Route
4144
path="/"

Diff for: src/helpers/emojiHelper.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export const emojiToImageTag = (
7474
src={emojiToImageSrc(emoji, allEmoji)}
7575
alt={emoji + " emoji"}
7676
/>
77-
{qty && <span className="text-sm">x{qty}</span>}
77+
{qty && <div className="rounded-full border-2 border-xteamaccent bg-xteamaccent p-0 w-7 scale-[0.6] translate-x-6 -translate-y-3"><span className="text-md text-white">{qty}</span></div>}
7878
</div>
7979
);
8080
};

Diff for: src/pages/FloorsEditorPage.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ const FloorsEditor = ({ enemies, towerGame, allEmoji, setShouldReload }: IFloorE
136136
const handleCloseEditFloorModalAction = (reload: boolean) => {
137137
setShowAddEnemyModal(false);
138138
setShouldReload(reload);
139+
setEditingFloor(null);
139140
}
140141

141142
return (

Diff for: src/pages/GameEditorPage.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useParams, useNavigate } from "react-router-dom";
44
import { SyncLoader } from "react-spinners";
55
import * as Yup from "yup";
66
import { AiOutlineCheck, AiOutlineClose, AiOutlineCopy } from "react-icons/ai";
7+
import { toast } from "react-toastify";
78

89
import { getAchievements } from "../api/achievements";
910
import { getGameType, upsertGameType } from "../api/gamedev";
@@ -66,7 +67,13 @@ const GameEditorPage = function GameEditorPage({ editMode }: IProps) {
6667
try {
6768
await upsertGameType(upserGameTypeParams);
6869
navigate("/games");
70+
toast('Game successfully saved.',{
71+
type: 'success',
72+
});
6973
} catch (error: any) {
74+
toast(`Error saving game : ${error?.message}`, {
75+
type: "error",
76+
});
7077
console.log({ error });
7178
setIsLoading(false);
7279
setErrorMessage(error.message);
@@ -118,6 +125,9 @@ const GameEditorPage = function GameEditorPage({ editMode }: IProps) {
118125
return gameType;
119126
} catch (error: any) {
120127
console.log({ error });
128+
toast(`Error : ${error?.message}`, {
129+
type: "error",
130+
});
121131
setIsLoading(false);
122132
setErrorMessage(error.message);
123133
}

Diff for: src/ui/AddEnemyToFloorModal/AddEnemyToFloorModal.tsx

+24-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { groupBy } from "lodash";
22
import { useEffect, useState } from "react";
33
import { AiOutlineDelete } from "react-icons/ai";
4+
import { toast } from "react-toastify";
45
import { updateFloor } from "../../api/admin";
56
import { emojiToImageTag } from "../../helpers/emojiHelper";
67
import Button from "../Button";
@@ -24,17 +25,26 @@ const AddEnemyToFloorModal = ({
2425
const [floorEnemies, setFloorEnemies] = useState<IEnemy[]>([]);
2526

2627
const handleOnSaveButtonClick = async () => {
27-
const floorId = floor?.id;
28-
const enemyIds = floorEnemies.map((enemy) => enemy.id) as number[];
29-
30-
if (!floorId || !enemyIds) {
31-
return;
28+
try{
29+
const floorId = floor?.id;
30+
const enemyIds = floorEnemies.map((enemy) => enemy.id) as number[];
31+
32+
if (!floorId || !enemyIds) {
33+
return;
34+
}
35+
await updateFloor(floorId, {
36+
enemyIds,
37+
});
38+
onClose(true);
39+
setFloorEnemies([]);
40+
toast('Floor edited successfuly.', {
41+
type: 'success',
42+
});
43+
} catch(err: any) {
44+
toast(`Error adding enemies to floor. ${err?.message} `, {
45+
type: 'error',
46+
})
3247
}
33-
await updateFloor(floorId, {
34-
enemyIds,
35-
});
36-
onClose(true);
37-
setFloorEnemies([]);
3848
};
3949

4050
const handleOnAddEnemyClick =
@@ -62,7 +72,6 @@ const AddEnemyToFloorModal = ({
6272
(floorEnemy) => floorEnemy._enemy
6373
);
6474
setFloorEnemies(floorEnemies);
65-
6675
}
6776
}, [floor?._floorEnemies]);
6877

@@ -75,8 +84,8 @@ const AddEnemyToFloorModal = ({
7584
Edit Enemies on Floor {floor?.number}
7685
</h2>
7786

78-
<div className="flex space-between w-full mt-4">
79-
<div className="w-full h-96 bg-xteamaccent">
87+
<div className="flex space-between w-full mt-4 gap-2">
88+
<div className="w-full h-96 bg-xteamaccent rounded-md">
8089
<p className="text-xl text-white text-center mb-4 uppercase">
8190
All enemies
8291
</p>
@@ -98,7 +107,7 @@ const AddEnemyToFloorModal = ({
98107
})}
99108
</div>
100109
</div>
101-
<div className="w-full bg-green-500 relative">
110+
<div className="w-full bg-green-500 relative rounded-md">
102111
<p className="text-xl text-white text-center mb-4 uppercase">
103112
Floor Enemies
104113
</p>
@@ -118,7 +127,7 @@ const AddEnemyToFloorModal = ({
118127
</span>
119128
))}
120129
</div>
121-
<span className="absolute cursor-pointer bottom-2 left-1/2 hover:text-xteamaccent" onClick={() => setFloorEnemies([])}><AiOutlineDelete /></span>
130+
{floorEnemies && floorEnemies.length > 0 && <span className="absolute cursor-pointer text-white bottom-2 left-1/2 hover:text-xteamaccent" onClick={() => setFloorEnemies([])}><AiOutlineDelete /></span>}
122131
</div>
123132
</div>
124133

Diff for: src/ui/AddOrEditAchievementModal/AddOrEditAchievementModal.tsx

+20-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useFormik } from "formik";
22
import { useEffect } from "react";
33
import * as Yup from "yup";
44
import { useParams } from "react-router-dom";
5+
import { toast } from "react-toastify";
56

67
import { upsertAchievement } from "../../api/achievements";
78
import Button from "../Button";
@@ -30,16 +31,25 @@ const AddOrEditAchievementModal = ({
3031
const { gameTypeId } = useParams<{ gameTypeId: string }>();
3132

3233
const onSubmit = async (values: IAchievementForm) => {
33-
await upsertAchievement({
34-
...(selectedAchievement?.id && { id: selectedAchievement?.id }),
35-
_gameTypeId: selectedAchievement?._gameTypeId || parseInt(gameTypeId || ""),
36-
...(selectedAchievement?.createdAt && { createdAt: selectedAchievement?.createdAt }),
37-
description: values.description,
38-
targetValue: values.targetValue,
39-
isEnabled: values.isEnabled,
40-
updatedAt: new Date().toString(),
41-
});
42-
onClose();
34+
try{
35+
await upsertAchievement({
36+
...(selectedAchievement?.id && { id: selectedAchievement?.id }),
37+
_gameTypeId: selectedAchievement?._gameTypeId || parseInt(gameTypeId || ""),
38+
...(selectedAchievement?.createdAt && { createdAt: selectedAchievement?.createdAt }),
39+
description: values.description,
40+
targetValue: values.targetValue,
41+
isEnabled: values.isEnabled,
42+
updatedAt: new Date().toString(),
43+
});
44+
onClose();
45+
toast('Achievement successfully saved.',{
46+
type: 'success',
47+
});
48+
} catch (err: any) {
49+
toast(`Error : ${err.message}`, {
50+
type: "error",
51+
});
52+
}
4353
}
4454

4555
const validationSchema = Yup.object({

Diff for: src/ui/AddOrEditLeaderboardModal/AddOrEditLeaderboardModal.tsx

+20-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
resetStrategies,
1313
scoreStrategies,
1414
} from "../../utils/leaderboardStrategies";
15+
import { toast } from "react-toastify";
1516

1617
interface IProps {
1718
show: boolean;
@@ -34,15 +35,25 @@ const AddOrEditLeaderboardModal = ({
3435
const { gameTypeId } = useParams<{ gameTypeId: string }>();
3536

3637
const onSubmit = async (values: ILeaderboardForm) => {
37-
await upsertLeaderboard({
38-
...(selectedLeaderboard?.id && { id: selectedLeaderboard?.id }),
39-
_gameTypeId:
40-
selectedLeaderboard?._gameTypeId || parseInt(gameTypeId || ""),
41-
name: values.name,
42-
scoreStrategy: values.scoreStrategy.toLowerCase(),
43-
resetStrategy: values.resetStrategy.toLowerCase(),
44-
});
45-
onClose();
38+
try{
39+
await upsertLeaderboard({
40+
...(selectedLeaderboard?.id && { id: selectedLeaderboard?.id }),
41+
_gameTypeId:
42+
selectedLeaderboard?._gameTypeId || parseInt(gameTypeId || ""),
43+
name: values.name,
44+
scoreStrategy: values.scoreStrategy.toLowerCase(),
45+
resetStrategy: values.resetStrategy.toLowerCase(),
46+
});
47+
onClose();
48+
toast('Leaderboard successfully saved.',{
49+
type: 'success',
50+
});
51+
52+
} catch (err: any) {
53+
toast(`Error : ${err?.message}`, {
54+
type: "error",
55+
});
56+
}
4657
};
4758

4859
const validationSchema = Yup.object({

0 commit comments

Comments
 (0)