diff --git a/README.md b/README.md
index 8e7dc53..c29c563 100644
--- a/README.md
+++ b/README.md
@@ -14,13 +14,14 @@ See deployment repo at: [https://github.com/morbalint/kemkas-deployment](https:/
## Coding readmes
-For frontend only see: [Frontend README](./Kemkas.Web/frontend/README.md)
+For frontend only see: [Frontend README](./frontend/README.md)
-To start development, spin up the docker-compose.yaml file and use the launchSettings.json to start the backend and frontend dev servers.
+To start development, spin up the docker-compose.yaml file and use yarn to start frontend dev server.
For the first time setup:
-1. start the DB from the docker compose (required for the backend)
-2. launch the project with the launchSettings file (will generate SSL certs)
-3. spin up the proxy from docker compose (needs the SSL certs)
+```shell
+dotnet dev-certs https --clean && \
+dotnet dev-certs https --format PEM --no-password -ep ~/.aspnet/https/kemkas.pem --trust
+```
-Later start the docker compose first and the project launch settings after the DB is up and running.
+Later start the docker compose first and the project launch settings after the DB is up and running.
diff --git a/frontend/src/second-edition/components/LevelUps.tsx b/frontend/src/second-edition/components/LevelUps.tsx
index 4370c75..18330c5 100644
--- a/frontend/src/second-edition/components/LevelUps.tsx
+++ b/frontend/src/second-edition/components/LevelUps.tsx
@@ -44,7 +44,7 @@ function LevelUp(props: {
return
-
{szint}. Szint
+ {szint}. Szint
{osztaly !== Osztaly2E.Druida &&
-
Másodlagos értékek
+ Másodlagos értékek (első szinten)
diff --git a/frontend/src/second-edition/components/Tulajdonsagok2E.tsx b/frontend/src/second-edition/components/Tulajdonsagok2E.tsx
index 72e39d8..2bbec01 100644
--- a/frontend/src/second-edition/components/Tulajdonsagok2E.tsx
+++ b/frontend/src/second-edition/components/Tulajdonsagok2E.tsx
@@ -29,7 +29,7 @@ function Tulajdonsagok(props: {
const tulajdonsagok = props.tulajdonsagok ?? karakter.tulajdonsagok
return <>
-
Tulajdonságok
+
Tulajdonságok
dispatch(rollAbilities())}>Dobás
diff --git a/frontend/src/second-edition/components/Varazskonyv.tsx b/frontend/src/second-edition/components/Varazskonyv.tsx
new file mode 100644
index 0000000..949fed5
--- /dev/null
+++ b/frontend/src/second-edition/components/Varazskonyv.tsx
@@ -0,0 +1,25 @@
+import {Osztaly2E} from "../domain-models/osztaly2E";
+import {ClassSpells, KarakterVarazslat} from "../domain-models/varazslat";
+import VarazskonyvSzint from "./VarazskonyvSzint";
+import React from "react";
+
+function Varazskonyv(props: { osztaly: Osztaly2E, varazslatok: KarakterVarazslat[] }) {
+ const {osztaly, varazslatok} = props;
+
+ const classSpells = ClassSpells(osztaly)
+ const spells = varazslatok.map(v => classSpells.find(x => x.id === v.id)).filter(x => !!x)
+
+ return <>
+
+
{osztaly === Osztaly2E.Varazslo ? "Varázslói" : "Illúzionista"} Varázskönyv
+
+
+ {spells.some(v => v.szint === 0) && }
+ {spells.some(v => v.szint === 1) && }
+ {spells.some(v => v.szint === 2) && }
+ {spells.some(v => v.szint === 3) && }
+ {spells.some(v => v.szint === 4) && }
+ >;
+}
+
+export default Varazskonyv
\ No newline at end of file
diff --git a/frontend/src/second-edition/components/VarazskonyvSzint.tsx b/frontend/src/second-edition/components/VarazskonyvSzint.tsx
new file mode 100644
index 0000000..4c7ec2e
--- /dev/null
+++ b/frontend/src/second-edition/components/VarazskonyvSzint.tsx
@@ -0,0 +1,55 @@
+import {Osztaly2E} from "../domain-models/osztaly2E";
+import {ClassSpells, KarakterVarazslat} from "../domain-models/varazslat";
+import {useDispatch} from "react-redux";
+import {AppDispatch} from "../../store";
+import VarazslatSelector from "../display-components/VarazslatSelector";
+import {addVarazslat, removeVarazslat, setVarazslat} from "../domain-models/characterSlice";
+import React from "react";
+
+function VarazskonyvSzint(props: { osztaly: Osztaly2E, level: number, varazslatok: KarakterVarazslat[] }) {
+ const {level, osztaly, varazslatok} = props;
+ const dispatch = useDispatch.withTypes()()
+
+ const classSpells = ClassSpells(osztaly)
+ const leveledSpells = classSpells.filter(v => v.szint === level)
+ const selectedSpells = varazslatok.map(v => {
+ return leveledSpells.find(x => x.id === v.id)
+ }).filter(x => !!x)
+ const availableSpells = leveledSpells.filter(v => varazslatok.every(x => x.id !== v.id))
+
+ return <>
+
+
{level}. Szintű varázslatok
+
+ {selectedSpells.map((v, i) => (
+
+
+
dispatch(setVarazslat({prev: v.id, next: nextId}))}
+ />
+
+ dispatch(removeVarazslat(v.id))}>Elvesz
+
+
+
+
+ {v?.leiras}
+ {v?.megfordithato && Megfordítható{' '} }
+ {v?.komponens && Kötelező komponens: {v.komponens}{' '} }
+ {v?.opcionalis_komponens && Opcionális komponens: {v.opcionalis_komponens}{' '} }
+
+ ))}
+ {availableSpells.length > 0 && dispatch(addVarazslat(availableSpells[0].id))}>
+ Új varázslat hozzáadása
+ }
+ >;
+}
+
+export default VarazskonyvSzint
\ No newline at end of file
diff --git a/frontend/src/second-edition/components/Varazslatok.tsx b/frontend/src/second-edition/components/Varazslatok.tsx
index e79b934..fe3dcef 100644
--- a/frontend/src/second-edition/components/Varazslatok.tsx
+++ b/frontend/src/second-edition/components/Varazslatok.tsx
@@ -1,65 +1,18 @@
import React from "react";
-import {ClassSpells, KarakterVarazslat} from "../domain-models/varazslat";
import {getClassLevels} from "../domain-models/szintlepes";
-import {useDispatch, useSelector} from "react-redux";
-import {AppDispatch, RootState} from "../../store";
-import {addVarazslat, characterSelector, setVarazslat} from "../domain-models/characterSlice";
+import {useSelector} from "react-redux";
+import {RootState} from "../../store";
+import {characterSelector} from "../domain-models/characterSlice";
import {Osztaly2E} from "../domain-models/osztaly2E";
-import VarazslatSelector from "../display-components/VarazslatSelector";
-
-function VarazskonyvSzint(props: {osztaly: Osztaly2E, level: number, varazslatok: KarakterVarazslat[]}) {
- const {level, osztaly, varazslatok} = props;
- const dispatch = useDispatch.withTypes()()
-
- const classSpells = ClassSpells(osztaly)
- const leveledSpells = classSpells.filter(v => v.szint === level)
- const selectedSpells = varazslatok.map(v => {
- return leveledSpells.find(x => x.id === v.id)
- }).filter(x => !!x)
- const availableSpells = leveledSpells.filter(v => varazslatok.every(x => x.id !== v.id))
-
- return <>
- {level}. Szintű varázslatok
- {selectedSpells.map((v, i) => (
- dispatch(setVarazslat({prev: v.id, next: nextId}))}
- />))}
- {availableSpells.length > 0 && dispatch(addVarazslat(availableSpells[0].id))}>
- Új varázslat hozzáadása
- }
- >;
-
-}
-
-function Varazskonyv(props: {osztaly: Osztaly2E, varazslatok: KarakterVarazslat[] }) {
- const {osztaly, varazslatok } = props;
-
- const classSpells = ClassSpells(osztaly)
- const spells = varazslatok.map(v => classSpells.find(x => x.id === v.id)).filter(x => !!x)
-
- return <>
- Varázslói Varázskönyv
-
- {spells.some(v => v.szint === 0) && }
- {spells.some(v => v.szint === 1) && }
- {spells.some(v => v.szint === 2) && }
- {spells.some(v => v.szint === 3) && }
- {spells.some(v => v.szint === 4) && }
- >;
-}
+import Varazskonyv from "./Varazskonyv";
function Varazslatok() {
const karakter = useSelector.withTypes()(characterSelector)
const classLevels = getClassLevels(karakter.szintlepesek)
-
return <>
{classLevels[Osztaly2E.Varazslo] > 0 && }
+ {classLevels[Osztaly2E.Illuzionista] > 0 && }
>
}
diff --git a/frontend/src/second-edition/domain-models/characterSlice.ts b/frontend/src/second-edition/domain-models/characterSlice.ts
index f0cd3dc..a5d3886 100644
--- a/frontend/src/second-edition/domain-models/characterSlice.ts
+++ b/frontend/src/second-edition/domain-models/characterSlice.ts
@@ -96,14 +96,17 @@ export const characterSlice = createSlice({
setFelszereles: (state, action: {payload: KarakterFelszereles}) => {
state.felszereles = action.payload;
},
+ addVarazslat: (state, action: {payload: string}) => {
+ state.varazslatok = [...state.varazslatok, {id: action.payload, bekeszitve: false}];
+ },
setVarazslat: (state, action: {payload: {prev: string, next: string}}) => {
let spell = state.varazslatok.find(x => x.id === action.payload.prev)
if (spell !== undefined) {
spell.id = action.payload.next
}
},
- addVarazslat: (state, action: {payload: string}) => {
- state.varazslatok = [...state.varazslatok, {id: action.payload, bekeszitve: false}];
+ removeVarazslat: (state, action: {payload: string}) => {
+ state.varazslatok = [...state.varazslatok.filter(x => x.id !== action.payload)];
},
}
})
@@ -159,8 +162,9 @@ export const {
setKepzettsegek,
setTolvajKepzettsegek,
setFelszereles,
- setVarazslat,
addVarazslat,
+ setVarazslat,
+ removeVarazslat,
} = characterSlice.actions
export const characterSelector = characterSlice.selectSlice
diff --git a/frontend/src/second-edition/pages/CreateCharacter2E.tsx b/frontend/src/second-edition/pages/CreateCharacter2E.tsx
index 242ee27..cd86149 100644
--- a/frontend/src/second-edition/pages/CreateCharacter2E.tsx
+++ b/frontend/src/second-edition/pages/CreateCharacter2E.tsx
@@ -99,14 +99,14 @@ function CreateCharacter2E(props: {