mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
add router and try some fixes on the KepzettsegSelector.tsx
This commit is contained in:
+11
-3
@@ -1,12 +1,20 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import CreateCharacter from "./pages/CreateCharacter";
|
import CreateCharacter from "./pages/CreateCharacter";
|
||||||
|
import { createBrowserRouter, RouterProvider } from "react-router-dom";
|
||||||
|
|
||||||
|
const router = createBrowserRouter([
|
||||||
|
{
|
||||||
|
path: "/",
|
||||||
|
element: <CreateCharacter />,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
<div className="container">
|
<div className='container'>
|
||||||
<CreateCharacter />
|
<RouterProvider router={router} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,22 @@ function InternalKepzettsegekSelector(props: {title: string, numberOfKepzettseg:
|
|||||||
|
|
||||||
const klist = Array.from(new Array(numberOfKepzettseg).keys())
|
const klist = Array.from(new Array(numberOfKepzettseg).keys())
|
||||||
|
|
||||||
|
const preCalculated: {
|
||||||
|
kepzettsegek: Kepzettseg[],
|
||||||
|
registration: UseFormRegisterReturn,
|
||||||
|
selected: Kepzettseg,
|
||||||
|
}[] = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < numberOfKepzettseg; i++) {
|
||||||
|
preCalculated.push({
|
||||||
|
kepzettsegek: getKepzettsegListaN(i),
|
||||||
|
registration: register(i),
|
||||||
|
selected: getKepzettsegN(i)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(preCalculated)
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className='col-lg-2 col-md-12'>
|
<div className='col-lg-2 col-md-12'>
|
||||||
@@ -26,11 +42,10 @@ function InternalKepzettsegekSelector(props: {title: string, numberOfKepzettseg:
|
|||||||
<div className='col'>
|
<div className='col'>
|
||||||
{klist.map((idx) =>
|
{klist.map((idx) =>
|
||||||
<KepzettsegSelector
|
<KepzettsegSelector
|
||||||
key={idx}
|
key={title+idx}
|
||||||
kepzettsegek={getKepzettsegListaN(idx)}
|
kepzettsegek={preCalculated[idx].kepzettsegek}
|
||||||
fieldRegistration={register(idx)}
|
fieldRegistration={preCalculated[idx].registration}
|
||||||
defaultValue={availableKepzettsegList[idx]}
|
selected={preCalculated[idx].selected}
|
||||||
selected={getKepzettsegN(idx)}
|
|
||||||
/>)
|
/>)
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -61,15 +76,12 @@ function KarakterKepzettsegek (props: {
|
|||||||
}
|
}
|
||||||
console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg)
|
console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg)
|
||||||
|
|
||||||
const getKepzettsegN = (n: number) => Kepzettsegek[watch('kep_'+n, availableKepzettsegList[n].Id) as KepzettsegId]
|
const getKepzettsegN = (n: number) => Kepzettsegek[watch('kepzettseg.'+n, availableKepzettsegList[n].Id) as KepzettsegId]
|
||||||
|
|
||||||
const getKepzettsegListaN = (n: number) => {
|
const getKepzettsegListaN = (n: number) => {
|
||||||
let response = availableKepzettsegList;
|
let response = availableKepzettsegList;
|
||||||
for (let i = 0; i < numberOfKepzettseg; i++) {
|
for (let i = 0; i < numberOfKepzettseg; i++) {
|
||||||
if (i === n) {
|
response = response.filter(x => i === n || x.Id !== getKepzettsegN(i).Id)
|
||||||
continue;
|
|
||||||
}
|
|
||||||
response = response.filter(x => x.Id !== getKepzettsegN(i).Id)
|
|
||||||
}
|
}
|
||||||
if (osztaly === Osztaly.Tolvaj) {
|
if (osztaly === Osztaly.Tolvaj) {
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
@@ -90,10 +102,7 @@ function KarakterKepzettsegek (props: {
|
|||||||
}
|
}
|
||||||
// filter out selected tolvaj kepzettsegek
|
// filter out selected tolvaj kepzettsegek
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
if (i === n) {
|
response = response.filter(x => i === n || x.Id !== getTolvajKepzettsegN(i).Id)
|
||||||
continue;
|
|
||||||
}
|
|
||||||
response = response.filter(x => x.Id !== getTolvajKepzettsegN(i).Id)
|
|
||||||
}
|
}
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,28 +9,21 @@ function kepzettsegOptionText(k: Kepzettseg) {
|
|||||||
return k.Name + ' (' + k.Tulajdonsag.reduce((acc, k) => (acc === '' ? acc : acc + ' / ') + TulajdonsagLabel(k), '') + ')' + (osztalyok == null ? '' : (' - ' + osztalyok));
|
return k.Name + ' (' + k.Tulajdonsag.reduce((acc, k) => (acc === '' ? acc : acc + ' / ') + TulajdonsagLabel(k), '') + ')' + (osztalyok == null ? '' : (' - ' + osztalyok));
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is required for render optimization, which happens because selected is not a prop of this component so selecting an item doesn't trigger a rendering of this select field.
|
function KepzettsegSelector (props: {kepzettsegek: Kepzettseg[], fieldRegistration: UseFormRegisterReturn, selected : Kepzettseg}) {
|
||||||
function KepzettsegSelect(props: {kepzettsegek: Kepzettseg[], fieldRegistration: UseFormRegisterReturn, defaultValue: Kepzettseg}) {
|
|
||||||
const { kepzettsegek, fieldRegistration, defaultValue} = props
|
|
||||||
return <div className='row'>
|
|
||||||
<select className='form-control'
|
|
||||||
defaultValue={defaultValue.Id} {...fieldRegistration}>
|
|
||||||
{kepzettsegek.map(k =>(
|
|
||||||
<option key={k.Id} value={k.Id}>
|
|
||||||
{kepzettsegOptionText(k)}
|
|
||||||
</option>
|
|
||||||
))}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
}
|
const { kepzettsegek, fieldRegistration, selected } = props
|
||||||
|
|
||||||
function KepzettsegSelector (props: {kepzettsegek: Kepzettseg[], fieldRegistration: UseFormRegisterReturn, defaultValue: Kepzettseg, selected : Kepzettseg}) {
|
|
||||||
|
|
||||||
const { kepzettsegek, fieldRegistration, defaultValue, selected } = props
|
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<KepzettsegSelect kepzettsegek={kepzettsegek} fieldRegistration={fieldRegistration} defaultValue={defaultValue} />
|
<div className='row'>
|
||||||
|
<select className='form-control'
|
||||||
|
value={selected.Id} {...fieldRegistration}>
|
||||||
|
{kepzettsegek.map(k =>(
|
||||||
|
<option key={k.Id} value={k.Id}>
|
||||||
|
{kepzettsegOptionText(k)}
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div className='row pt-2'>
|
<div className='row pt-2'>
|
||||||
<p className='col'>{selected.Description}</p>
|
<p className='col'>{selected.Description}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import FajSelector from "../components/FajSelector";
|
|||||||
import Tulajdonsagok from "../components/Tulajdonsagok";
|
import Tulajdonsagok from "../components/Tulajdonsagok";
|
||||||
import OsztalySelector from "../components/OsztalySelector";
|
import OsztalySelector from "../components/OsztalySelector";
|
||||||
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
|
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
|
||||||
import {KarakterTulajdonsagok, Tulajdonsag} from "../domain-models/tulajdonsag";
|
import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag";
|
||||||
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
||||||
|
|
||||||
const FAJ_FIELD_NAME = 'faj'
|
const FAJ_FIELD_NAME = 'faj'
|
||||||
@@ -75,7 +75,7 @@ function CreateCharacterPage() {
|
|||||||
<KarakterKepzettsegek
|
<KarakterKepzettsegek
|
||||||
faj={currentFaj()}
|
faj={currentFaj()}
|
||||||
osztaly={currentOsztaly()}
|
osztaly={currentOsztaly()}
|
||||||
t_int={watch(Tulajdonsag.Intelligencia, 10)}
|
t_int={watch('tul', tulajdonsagDefaults).t_int}
|
||||||
register={(fieldName: string) => register(fieldName, {required: true})}
|
register={(fieldName: string) => register(fieldName, {required: true})}
|
||||||
watch={watch}
|
watch={watch}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user