defined helper for evaluating ui collapse state, working to implement alternate styles

This commit is contained in:
2022-09-11 13:21:09 -05:00
parent 6ac83ef008
commit 71fec57a94
6 changed files with 36 additions and 29 deletions

View File

@@ -46,17 +46,7 @@ export default function Gameboard({ state, setState }: StateProps) {
}) })
}, [state]); }, [state]);
const liftCollapsed = useCallback((collapsed: boolean, tier?: number) => { const liftCollapsed = useCallback((collapsed: boolean, tier = 5) => {
/**
* if tier is not provided, default should refer to the nobles row
* update ui collapse state within gameboard
* pass this section of state as a dependency to new useEffect
* if any of the four rows are open, collapse player ui
*
* todo: incorporate "collapse all rows" to player ui
* also incorporate "collapse player ui"?
**/
setUICollapse((prev: UIState) => { setUICollapse((prev: UIState) => {
switch (tier) { switch (tier) {
case 1: case 1:
@@ -81,11 +71,7 @@ export default function Gameboard({ state, setState }: StateProps) {
} }
} }
}); });
}, [UICollapse, setUICollapse])
}, [UICollapse])
useEffect(() => console.log(UICollapse), [UICollapse]);
// util functions, setup on mount // util functions, setup on mount
useEffect(() => initializeBoard(state, setState), []) useEffect(() => initializeBoard(state, setState), [])
@@ -142,7 +128,7 @@ export default function Gameboard({ state, setState }: StateProps) {
</div> </div>
) )
} }
}, [state]); }, [state, UICollapse]);
return view return view
} }

View File

@@ -7,6 +7,10 @@ import { useEffect, useState } from "react";
export default function Nobles({ state, liftCollapsed }: NobleProps) { export default function Nobles({ state, liftCollapsed }: NobleProps) {
const [collapsed, setCollapsed] = useState(true); const [collapsed, setCollapsed] = useState(true);
useEffect(() => {
liftCollapsed(collapsed);
}, [collapsed]);
if (!state.gameboard.nobles.length) { if (!state.gameboard.nobles.length) {
return ( return (
<div className="nobles-panel"> <div className="nobles-panel">
@@ -15,11 +19,7 @@ export default function Nobles({ state, liftCollapsed }: NobleProps) {
</div> </div>
) )
} }
// useEffect(() => {
// liftCollapsed(collapsed, 5);
// }, [collapsed]);
return ( return (
<div className={`nobles-panel ${collapsed && 'collapsed'}`}> <div className={`nobles-panel ${collapsed && 'collapsed'}`}>
<div className="nobles-topbar"> <div className="nobles-topbar">

View File

@@ -10,10 +10,6 @@
background-color: rgb(188, 176, 146); background-color: rgb(188, 176, 146);
color: black; color: black;
&.collapsed {
background-color: red;
}
.player-ui { .player-ui {
.subheader { .subheader {
font-weight: bold; font-weight: bold;
@@ -76,4 +72,10 @@
} }
} }
} }
}
.mini-player-ui {
background-color: red;
width: 10vw;
align-items: flex-end;
} }

View File

@@ -6,9 +6,11 @@ import { AllPlayersProps } from "../../util/propTypes";
import AvailableChips from "../Resources/AvailableChips"; import AvailableChips from "../Resources/AvailableChips";
import SelectionView from "../Resources/SelectionView"; import SelectionView from "../Resources/SelectionView";
import "./AllPlayers.scss" import "./AllPlayers.scss"
import { shouldRightSideCollapse } from "../../util/mechanics/shouldRightSideCollapse";
export default function AllPlayers({ state, setState, liftSelection, UICollapse }: AllPlayersProps) { export default function AllPlayers({ state, setState, liftSelection, UICollapse }: AllPlayersProps) {
const [playerView, setPlayerView] = useState<JSX.Element>(); const [playerView, setPlayerView] = useState<JSX.Element>();
const [collapseClass, setCollapseClass] = useState("all-players");
useEffect(() => { useEffect(() => {
const currentPlayer = useCurrentPlayer(state); const currentPlayer = useCurrentPlayer(state);
@@ -16,8 +18,12 @@ export default function AllPlayers({ state, setState, liftSelection, UICollapse
setPlayerView(<Player key={v4()} player={currentPlayer} state={state} setState={setState} />); setPlayerView(<Player key={v4()} player={currentPlayer} state={state} setState={setState} />);
}, [state]); }, [state]);
useEffect(() => {
setCollapseClass( shouldRightSideCollapse(UICollapse) ? "mini-player-ui" : "all-players" );
}, [UICollapse]);
return ( return (
<div className={UICollapse.playerUICollapsed ? "all-players collapsed" : "all-players"}> <div className={collapseClass}>
<SelectionView state={state} setState={setState} /> <SelectionView state={state} setState={setState} />
<AvailableChips state={state} setState={setState} liftSelection={liftSelection} /> <AvailableChips state={state} setState={setState} liftSelection={liftSelection} />
{ playerView } { playerView }

View File

@@ -0,0 +1,12 @@
import { UIState } from "../types";
export const shouldRightSideCollapse = (UICollapse: UIState) => {
for (let slice of Object.keys(UICollapse)) {
if (slice === "playerUICollapsed") continue;
if (!UICollapse[slice as keyof UIState]) {
return true;
}
}
return false;
}

View File

@@ -1,3 +1,4 @@
import { Dispatch, SetStateAction } from "react";
import { AppState, CardData, PlayerData, ResourceCost, setStateType, UIState } from "./types"; import { AppState, CardData, PlayerData, ResourceCost, setStateType, UIState } from "./types";
export interface StateProps { export interface StateProps {
@@ -13,11 +14,11 @@ export interface CardProps extends StateProps {
export interface CardRowProps extends StateProps { export interface CardRowProps extends StateProps {
tier: number tier: number
liftCollapsed: (collapsed: boolean, tier?: number) => void liftCollapsed: (collapsed: boolean, tier: number) => void
} }
export interface NobleProps extends StateProps { export interface NobleProps extends StateProps {
liftCollapsed: (collapsed: boolean, tier?: number) => void liftCollapsed: (collapsed: boolean) => void
} }
export interface PlayerProps extends StateProps { export interface PlayerProps extends StateProps {