From 1e24bd0d6c612e13471856fd63ade140dedbe997 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com> Date: Tue, 20 Sep 2022 12:06:35 -0500 Subject: [PATCH] fixed bug in sass, may backtrack to modify player ui --- src/components/Card/Card.tsx | 2 + src/components/Card/CardRow.scss | 7 ++-- src/components/Gameboard/Gameboard.tsx | 28 +++---------- src/components/Player/AllPlayers.scss | 50 ++++++++++++++++++++++++ src/components/Player/AllPlayers.tsx | 54 +++++++++++++++++++++++--- src/components/Player/Player.tsx | 8 ++-- src/hooks/stateSetters.ts | 24 +++++++++++- src/sass/helper/_placeholders.scss | 52 ------------------------- src/util/propTypes.ts | 5 ++- 9 files changed, 140 insertions(+), 90 deletions(-) diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx index 8e753b7..80317d8 100644 --- a/src/components/Card/Card.tsx +++ b/src/components/Card/Card.tsx @@ -18,7 +18,9 @@ export default function Card({ data, state, setState, reserved = false, collapse return (
+ { /* { collapsed ?
: } + */ }

{data.gemValue.toUpperCase()}

diff --git a/src/components/Card/CardRow.scss b/src/components/Card/CardRow.scss index 009ae88..39f5909 100644 --- a/src/components/Card/CardRow.scss +++ b/src/components/Card/CardRow.scss @@ -23,8 +23,7 @@ width: 100%; .card { - width: 35%; - height: 40vh; + width: 18%; border: 2px solid black; img { @@ -35,8 +34,8 @@ } .foreground { - position: relative; - top: -100%; + // position: relative; + // top: -100%; display: flex; flex-direction: column; align-items: center; diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx index 3a3f99e..a9e9819 100644 --- a/src/components/Gameboard/Gameboard.tsx +++ b/src/components/Gameboard/Gameboard.tsx @@ -4,7 +4,6 @@ import { Link } from 'react-router-dom'; import initializeBoard, { setCardRows } from '../../util/setup/initializeBoard'; import { AppState, PlayerData, ResourceCost, UIState } from '../../util/types'; import { defaultUIState } from '../../util/setup/defaultUIState'; -import { getChipsActions } from '../Player/ActionMethods'; import { StateProps } from '../../util/propTypes'; import './Gameboard.scss'; @@ -15,7 +14,7 @@ import CardRow from '../Card/CardRow'; import { useCurrentPlayer } from '../../hooks/useCurrentPlayer'; import usePreviousPlayer from '../../hooks/usePreviousPlayer'; import { shouldRightSideCollapse } from '../../util/mechanics/shouldRightSideCollapse'; -const { validateChips } = getChipsActions; +import { setStateUpdateSelection } from '../../hooks/stateSetters'; export default function Gameboard({ state, setState }: StateProps) { const [view, setView] = useState(

Loading...

); @@ -25,26 +24,7 @@ export default function Gameboard({ state, setState }: StateProps) { // callbacks for lifting state const liftSelection = useCallback((value: keyof ResourceCost) => { if (!state.actions.getChips.active) return; - setState((prev: AppState) => { - let newSelection = prev.actions.getChips.selection; - newSelection?.push(value); - - let newState = { - ...prev, - actions: { - ...state.actions, - getChips: { - active: true, - selection: newSelection, - valid: false - } - } - } - - const result = validateChips(newState); - newState.actions.getChips.valid = result; - return newState; - }) + setState((prev: AppState) => setStateUpdateSelection(prev, value)); }, [state]); const liftCollapsed = useCallback((collapsed: boolean, tier = 5) => { @@ -123,7 +103,9 @@ export default function Gameboard({ state, setState }: StateProps) {
- +
diff --git a/src/components/Player/AllPlayers.scss b/src/components/Player/AllPlayers.scss index 161797a..135c723 100644 --- a/src/components/Player/AllPlayers.scss +++ b/src/components/Player/AllPlayers.scss @@ -2,6 +2,56 @@ @import '../../sass/helper/variables'; @import '../../sass/helper/placeholders'; +// local placeholder +%all-players-base { + display: flex; + flex-flow: column nowrap; + justify-content: space-around; + align-items: center; + background-color: rgb(188, 176, 146); + color: black; + + .player-ui { + .subheader { + font-weight: bold; + } + + background-color:rgb(172, 149, 94); + margin: 1rem 0; + padding: 0 2rem; + } + + .card { + width: 100%; + + img { + display: none; + } + + @each $gem in $gemlist { + @include map-gem-values('.foreground'); + .foreground-#{$gem} { + display: flex; + flex-direction: column; + align-items: center; + padding: 8px; + + p { + display: inline; + padding: 8px; + } + + .total-card-cost { + display: flex; + flex-flow: row wrap; + justify-content: center; + @include map-gem-values(".card-cost"); + } + } + } + } +} + .all-players { @extend %all-players-base; .selection-view { diff --git a/src/components/Player/AllPlayers.tsx b/src/components/Player/AllPlayers.tsx index 165e022..192e9fd 100644 --- a/src/components/Player/AllPlayers.tsx +++ b/src/components/Player/AllPlayers.tsx @@ -1,17 +1,60 @@ -import { useEffect, useState } from "react"; +// framework +import { useEffect, useMemo, useState } from "react"; import { v4 } from "uuid"; -import Player from "./Player"; -import { useCurrentPlayer } from "../../hooks/useCurrentPlayer"; + +// util +import { shouldRightSideCollapse } from "../../util/mechanics/shouldRightSideCollapse"; import { AllPlayersProps } from "../../util/propTypes"; +import { useCurrentPlayer } from "../../hooks/useCurrentPlayer"; +import { defaultUIState } from "../../util/setup/defaultUIState"; +import { UIState } from "../../util/types"; + +// components import AvailableChips from "../Resources/AvailableChips"; import SelectionView from "../Resources/SelectionView"; +import Player from "./Player"; 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, setUICollapse, liftCollapsed }: AllPlayersProps) { const [playerView, setPlayerView] = useState(); const [collapseClass, setCollapseClass] = useState("all-players"); + const collapseAll = () => { + liftCollapsed(true); + liftCollapsed(true, 3); + liftCollapsed(true, 2); + liftCollapsed(true, 1); + // let value = UICollapse[each as keyof UIState]; + // if (each === "playerUICollapsed") { + // continue; + // } else if (each === "noblesCollapsed") { + // console.log(each); + // liftCollapsed(value); + // } else { + // console.log(each, value); + // switch (each) { + // case "tierThreeCollapsed": + // liftCollapsed(value, 3); + // break; + // case "tierTwoCollapsed": + // liftCollapsed(value, 2); + // break; + // case "tierOneCollapsed": + // liftCollapsed(value, 1); + // break; + // default: break; + // } + // } + } + + const allowCollapseAll = useMemo(() => { + for (let each of Object.keys(UICollapse)) { + if (each === "playerUICollapsed") continue; + if (!UICollapse[each as keyof UIState]) return true; + } + return false; + }, [UICollapse]); + useEffect(() => { const currentPlayer = useCurrentPlayer(state); if (!currentPlayer) return; @@ -24,6 +67,7 @@ export default function AllPlayers({ state, setState, liftSelection, UICollapse return (
+ { allowCollapseAll && } { playerView } diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx index a3ae200..9e8bc67 100644 --- a/src/components/Player/Player.tsx +++ b/src/components/Player/Player.tsx @@ -1,10 +1,10 @@ -import { setStateAwaitAction, setStateBuyCard, setStateGetChips, setStateReserveCard } from "../../hooks/stateSetters"; import { useEffect, useState } from "react"; -import { PlayerProps } from "../../util/propTypes"; -import { CardData, PlayerData } from "../../util/types" +import { v4 } from "uuid"; +import { setStateAwaitAction, setStateBuyCard, setStateGetChips, setStateReserveCard } from "../../hooks/stateSetters"; import { hasMaxReserved } from "./ActionMethods/reserveCardActions"; import { hasMaxChips } from "./ActionMethods/getChipsActions"; -import { v4 } from "uuid"; +import { CardData, PlayerData } from "../../util/types" +import { PlayerProps } from "../../util/propTypes"; import Card from "../Card/Card"; export default function Player({ player, state, setState }: PlayerProps) { diff --git a/src/hooks/stateSetters.ts b/src/hooks/stateSetters.ts index d20fe10..4997be9 100644 --- a/src/hooks/stateSetters.ts +++ b/src/hooks/stateSetters.ts @@ -1,5 +1,6 @@ -import { AppState, CardData, NobleData, PlayerData, ResourceCost } from "../util/types"; +import { AppState, CardData, NobleData, PlayerData, ResourceCost, UIState } from "../util/types"; import CardDeck from '../data/cards.json'; +import { validateChips } from "../components/Player/ActionMethods/getChipsActions"; export const initialActions = { buyCard: { active: false }, @@ -51,6 +52,27 @@ export const setStateGetChips = (prev: AppState) => { } } +export const setStateUpdateSelection = (prev: AppState, value: keyof ResourceCost) => { + let newSelection = prev.actions.getChips.selection; + newSelection?.push(value); + + let newState = { + ...prev, + actions: { + ...prev.actions, + getChips: { + active: true, + selection: newSelection, + valid: false + } + } + } + + const result = validateChips(newState); + newState.actions.getChips.valid = result; + return newState; +} + export const setStateBuyCard = (prev: AppState) => { return { ...prev, diff --git a/src/sass/helper/_placeholders.scss b/src/sass/helper/_placeholders.scss index 4707ba0..505362d 100644 --- a/src/sass/helper/_placeholders.scss +++ b/src/sass/helper/_placeholders.scss @@ -1,6 +1,3 @@ -@import "./mixins"; -@import "./variables"; - // designed to extend a "p" element %chip-design { display: flex; @@ -11,53 +8,4 @@ width: 1rem; height: 1rem; border-radius: 50%; -} - -%all-players-base { - display: flex; - flex-flow: column nowrap; - justify-content: space-around; - align-items: center; - background-color: rgb(188, 176, 146); - color: black; - - .player-ui { - .subheader { - font-weight: bold; - } - - background-color:rgb(172, 149, 94); - margin: 1rem 0; - padding: 0 2rem; - } - - .card { - width: 100%; - - img { - display: none; - } - - @each $gem in $gemlist { - @include map-gem-values('.foreground'); - .foreground-#{$gem} { - display: flex; - flex-direction: column; - align-items: center; - padding: 8px; - - p { - display: inline; - padding: 8px; - } - - .total-card-cost { - display: flex; - flex-flow: row wrap; - justify-content: center; - @include map-gem-values(".card-cost"); - } - } - } - } } \ No newline at end of file diff --git a/src/util/propTypes.ts b/src/util/propTypes.ts index 568d4a1..37ac52a 100644 --- a/src/util/propTypes.ts +++ b/src/util/propTypes.ts @@ -1,3 +1,4 @@ +import { Dispatch, SetStateAction } from "react"; import { AppState, CardData, PlayerData, ResourceCost, setStateType, UIState } from "./types"; export interface StateProps { @@ -29,7 +30,9 @@ export interface ResourceProps extends StateProps { } export interface AllPlayersProps extends ResourceProps { - UICollapse: UIState + UICollapse: UIState, + setUICollapse: Dispatch> + liftCollapsed: (collapsed: boolean, tier?: number) => void } export interface SelectionProps extends StateProps {