1
0

Setting houserules toggles switch

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-27 10:51:49 -07:00
parent 87141c2de2
commit c39e3dca3c

View File

@ -55,6 +55,7 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
const [houseRules, setHouseRules] = useState(undefined); const [houseRules, setHouseRules] = useState(undefined);
const [state, setState] = useState(undefined); const [state, setState] = useState(undefined);
const [rules, setRules] = useState([]); const [rules, setRules] = useState([]);
const [ruleElements, setRuleElements] = useState([]);
const fields = useMemo(() => [ const fields = useMemo(() => [
'state', 'rules' 'state', 'rules'
], []); ], []);
@ -120,13 +121,14 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
}, [ws, houseRules]); }, [ws, houseRules]);
useEffect(() => { useEffect(() => {
setRules([ { const _rules = [ {
title: `More victory points`, title: `More victory points`,
key: `victory-points`, key: `victory-points`,
description: `Customize how many Victory Points are required to win. ` + description: `Customize how many Victory Points are required to win. ` +
`The minimum number of Victory Points is 10.`, `The minimum number of Victory Points is 10.`,
element: <VictoryPoints {...{ ws, houseRules, element: <VictoryPoints {...{ ws, houseRules,
field: `victory-points` }}/>, field: `victory-points` }}/>,
implemented: true
}, { }, {
title: `Tiles start facing down`, title: `Tiles start facing down`,
key: `tiles-start-facing-down`, key: `tiles-start-facing-down`,
@ -187,7 +189,8 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
title: `Robin Hood robber`, title: `Robin Hood robber`,
key: `robin-hood-robber`, key: `robin-hood-robber`,
description: `Robbers can't steal from players with two or less victory points.`, description: `Robbers can't steal from players with two or less victory points.`,
element: <></> element: <></>,
implemented: true
}, { }, {
title: `Crime and Punishment`, title: `Crime and Punishment`,
key: `crime-and-punishment`, key: `crime-and-punishment`,
@ -205,8 +208,24 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
field: `credit` field: `credit`
}} />, }} />,
} ] } ]
.sort((A, B) => {
if (A.implemented && B.implemented) {
return A.title.localeCompare();
}
if (A.implemented) {
return -1;
}
if (B.implemented) {
return +1;
}
return A.title.localeCompare();
});
setRules(_rules);
setRuleElements(_rules
.map(item => { .map(item => {
const disabled = (state !== 'lobby'), const disabled = (state !== 'lobby' || !item.implemented),
defaultChecked = houseRules defaultChecked = houseRules
&& (item.key in houseRules) && (item.key in houseRules)
? houseRules[item.key].enabled ? houseRules[item.key].enabled
@ -218,12 +237,16 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
houseRules houseRules
&& item.key in houseRules && item.key in houseRules
&& houseRules[item.key].enabled} && houseRules[item.key].enabled}
data-disabled={disabled} key={item.key}> data-disabled={disabled}
key={item.key}
data-key={item.key}>
<div className="HouseSelector"> <div className="HouseSelector">
<div><b>{item.title}</b>: {item.description}</div> <div><b>{item.title}</b>: {item.description}</div>
<Switch <Switch
inputProps={{ 'aria-label': 'controlled' }} size={'small'}
value={defaultChecked} className="RuleSwitch"
checked={defaultChecked}
id={item.key}
onChange={(e) => setRule(e, item.key)} onChange={(e) => setRule(e, item.key)}
{...{ disabled }} /> {...{ disabled }} />
</div> </div>
@ -241,7 +264,7 @@ const HouseRules = ({ houseRulesActive, setHouseRulesActive }) => {
<Paper> <Paper>
<div className="Title">House Rules</div> <div className="Title">House Rules</div>
<div style={{display: 'flex', flexDirection: 'column'}}> <div style={{display: 'flex', flexDirection: 'column'}}>
{ rules } { ruleElements }
</div> </div>
<Button onClick={dismissClicked}>Close</Button> <Button onClick={dismissClicked}>Close</Button>
</Paper> </Paper>