diff --git a/src/components/Card/CardRow.scss b/src/components/Card/CardRow.scss index 66ba456..7ec7126 100644 --- a/src/components/Card/CardRow.scss +++ b/src/components/Card/CardRow.scss @@ -7,10 +7,6 @@ margin: 1rem 0; width: 45vw; - &.collapsed { - width: 15vw; - } - .card-row-top-bar { display: flex; align-items: center; diff --git a/src/components/Card/CardRow.tsx b/src/components/Card/CardRow.tsx index b106143..7296a11 100644 --- a/src/components/Card/CardRow.tsx +++ b/src/components/Card/CardRow.tsx @@ -1,6 +1,6 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { v4 } from 'uuid'; -import cardTierToKey from '../../util/cardTierToKey'; +import cardTierToKey from '../../util/mechanics/cardTierToKey'; import { CardRowProps } from '../../util/propTypes'; import { CardData } from "../../util/types" import Card from "../Card/Card" @@ -26,6 +26,14 @@ export default function CardRow({tier, state, setState}: CardRowProps) { break; } + useEffect(() => { + /** + * run callback function to pass state of collapsed to parent component + * repeat this process in Nobles.tsx + **/ + console.log(collapsed); + }, [collapsed]) + return (
diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx index 5418c96..7f3435b 100644 --- a/src/components/Gameboard/Gameboard.tsx +++ b/src/components/Gameboard/Gameboard.tsx @@ -1,18 +1,17 @@ // types, data, utils import { useCallback, useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; -import initializeBoard, { setCardRows } from '../../util/initializeBoard'; -import { AppState, PlayerData, ResourceCost } from '../../util/types'; +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'; // components import Nobles from '../Nobles/Nobles'; -import AvailableChips from '../Resources/AvailableChips'; import AllPlayers from '../Player/AllPlayers'; import CardRow from '../Card/CardRow'; -import SelectionView from '../Resources/SelectionView'; import { useCurrentPlayer } from '../../hooks/useCurrentPlayer'; import usePreviousPlayer from '../../hooks/usePreviousPlayer'; const { validateChips } = getChipsActions; @@ -20,7 +19,7 @@ const { validateChips } = getChipsActions; export default function Gameboard({ state, setState }: StateProps) { const [view, setView] = useState(

Loading...

); const [endgame, setEndgame] = useState(); - const [winner, setWinner] = useState(); + const [UICollapse, setUICollapse] = useState(defaultUIState); // callbacks for lifting state const liftSelection = useCallback((value: keyof ResourceCost) => { @@ -47,6 +46,29 @@ export default function Gameboard({ state, setState }: StateProps) { }) }, [state]); + const liftCollapsed = useCallback((collapsed: boolean, tier?: number) => { + /** + * 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"? + **/ + + switch (tier) { + case 1: + setUICollapse((prev) => { + return prev; + }) + break; + case 2: break; + case 3: break; + default: break; + } + }, []) + // util functions, setup on mount useEffect(() => initializeBoard(state, setState), []) @@ -90,10 +112,10 @@ export default function Gameboard({ state, setState }: StateProps) {

Round: {state.round}

- - - - + + + +
diff --git a/src/components/Gameboard/gameboard.test.ts b/src/components/Gameboard/gameboard.test.ts index 8dc2f53..89fcdce 100644 --- a/src/components/Gameboard/gameboard.test.ts +++ b/src/components/Gameboard/gameboard.test.ts @@ -1,5 +1,5 @@ import { expect, it, describe, vi } from 'vitest'; -import initializeBoard from '../../util/initializeBoard'; +import initializeBoard from '../../util/setup/initializeBoard'; import { initialState } from '../../hooks/stateSetters'; import { AppState, setStateType } from '../../util/types'; diff --git a/src/components/Nobles/Nobles.scss b/src/components/Nobles/Nobles.scss index fbb8980..074ae05 100644 --- a/src/components/Nobles/Nobles.scss +++ b/src/components/Nobles/Nobles.scss @@ -6,11 +6,7 @@ background-color: rgb(212, 196, 152); color: black; padding: 1rem 0; - width: 55vw; - - &.collapsed { - width: 15vw; - } + width: 45vw; .nobles-topbar { display: flex; diff --git a/src/components/Nobles/Nobles.tsx b/src/components/Nobles/Nobles.tsx index efd4d5d..7f9b8aa 100644 --- a/src/components/Nobles/Nobles.tsx +++ b/src/components/Nobles/Nobles.tsx @@ -1,10 +1,10 @@ import { v4 } from "uuid"; import { NobleData, ResourceCost } from "../../util/types"; -import { StateProps } from "../../util/propTypes"; +import { NobleProps } from "../../util/propTypes"; import "../Nobles/Nobles.scss" import { useState } from "react"; -export default function Nobles({ state }: StateProps) { +export default function Nobles({ state }: NobleProps) { const [collapsed, setCollapsed] = useState(true); if (!state.gameboard.nobles.length) { @@ -19,7 +19,7 @@ export default function Nobles({ state }: StateProps) { return (
- NOBLES + Nobles
diff --git a/src/components/Nobles/canPickUpNoble.ts b/src/components/Nobles/canPickUpNoble.ts index 0fe3d6e..2e8eae0 100644 --- a/src/components/Nobles/canPickUpNoble.ts +++ b/src/components/Nobles/canPickUpNoble.ts @@ -1,4 +1,4 @@ -import getTotalBuyingPower from "../../util/getTotalBuyingPower"; +import getTotalBuyingPower from "../../util/mechanics/getTotalBuyingPower"; import { NobleData, PlayerData, ResourceCost } from "../../util/types"; export const canPickUpNoble = (player: PlayerData, noble: NobleData) => { diff --git a/src/components/Player/ActionMethods/buyCardActions.ts b/src/components/Player/ActionMethods/buyCardActions.ts index b4836e8..bb2eeed 100644 --- a/src/components/Player/ActionMethods/buyCardActions.ts +++ b/src/components/Player/ActionMethods/buyCardActions.ts @@ -1,7 +1,7 @@ -import { turnOrderUtil } from "../../../util/turnOrderUtil"; -import getTotalBuyingPower from "../../../util/getTotalBuyingPower"; +import { turnOrderUtil } from "../../../util/mechanics/TurnOrderUtil"; +import getTotalBuyingPower from "../../../util/mechanics/getTotalBuyingPower"; import { AppState, CardData, PlayerCards, ResourceCost, setStateType } from "../../../util/types"; -import cardTierToKey from "../../../util/cardTierToKey"; +import cardTierToKey from "../../../util/mechanics/cardTierToKey"; import { canPickUpNoble } from "../../Nobles/canPickUpNoble"; import { initialActions, setStateGetNoble } from "../../../hooks/stateSetters"; import { useCurrentPlayer } from "../../../hooks/useCurrentPlayer"; diff --git a/src/components/Player/ActionMethods/getChipsActions.ts b/src/components/Player/ActionMethods/getChipsActions.ts index 35d096f..023d2ac 100644 --- a/src/components/Player/ActionMethods/getChipsActions.ts +++ b/src/components/Player/ActionMethods/getChipsActions.ts @@ -1,7 +1,7 @@ import { AppState, PlayerData, setStateType } from '../../../util/types'; import { useCurrentPlayer } from '../../../hooks/useCurrentPlayer'; // @ts-ignore -import { turnOrderUtil } from '../../../util/turnOrderUtil'; +import { turnOrderUtil } from '../../../util/mechanics/TurnOrderUtil'; import { initialActions } from "../../../hooks/stateSetters"; export const hasMaxChips = (player: PlayerData | null): boolean => { diff --git a/src/components/Player/ActionMethods/reserveCardActions.ts b/src/components/Player/ActionMethods/reserveCardActions.ts index 5968a0b..fdca812 100644 --- a/src/components/Player/ActionMethods/reserveCardActions.ts +++ b/src/components/Player/ActionMethods/reserveCardActions.ts @@ -1,6 +1,6 @@ -import cardTierToKey from "../../../util/cardTierToKey"; +import cardTierToKey from "../../../util/mechanics/cardTierToKey"; import { initialActions } from "../../../hooks/stateSetters"; -import { turnOrderUtil } from "../../../util/turnOrderUtil"; +import { turnOrderUtil } from "../../../util/mechanics/TurnOrderUtil"; import { AppState, CardData, FullDeck, PlayerData, setStateType } from "../../../util/types"; import { useCurrentPlayer } from "../../../hooks/useCurrentPlayer"; diff --git a/src/components/Player/AllPlayers.scss b/src/components/Player/AllPlayers.scss index a0cd50a..133c373 100644 --- a/src/components/Player/AllPlayers.scss +++ b/src/components/Player/AllPlayers.scss @@ -7,7 +7,7 @@ flex-flow: column nowrap; justify-content: space-around; align-items: center; - background-color: rgb(237, 213, 156); + background-color: rgb(188, 176, 146); color: black; .player-ui { diff --git a/src/components/Resources/AvailableChips.scss b/src/components/Resources/AvailableChips.scss index 756678d..0c3a9cd 100644 --- a/src/components/Resources/AvailableChips.scss +++ b/src/components/Resources/AvailableChips.scss @@ -1,16 +1,22 @@ @import "../../sass/helper/mixins"; +@import "../../sass/helper/variables"; .available-chips { display: flex; flex-flow: row wrap; - max-width: 50%; align-items: center; justify-content: center; color: black; + margin: 1rem; p { margin: 1rem; } @include map-gem-values(".chips"); + @each $gem in $gemlist { + .chips-#{$gem} { + border-radius: 50%; + } + } } \ No newline at end of file diff --git a/src/components/Resources/AvailableChips.tsx b/src/components/Resources/AvailableChips.tsx index bdd99de..60d4e6f 100644 --- a/src/components/Resources/AvailableChips.tsx +++ b/src/components/Resources/AvailableChips.tsx @@ -19,7 +19,7 @@ export default function AvailableChips({ state, liftSelection }: ResourceProps) disabled={state.gameboard.tradingResources[typedKey] <= 0} onClick={() => liftSelection(typedKey)} > - {key}: {state.gameboard.tradingResources[typedKey]} + {state.gameboard.tradingResources[typedKey]} ) }) diff --git a/src/components/Resources/SelectionView.scss b/src/components/Resources/SelectionView.scss index 2de8189..d3fcd1b 100644 --- a/src/components/Resources/SelectionView.scss +++ b/src/components/Resources/SelectionView.scss @@ -9,8 +9,8 @@ p { margin: 1rem; - padding: 0.5rem; - border-radius: 25%; + padding: 1rem; + border-radius: 50%; } } } \ No newline at end of file diff --git a/src/components/Resources/ViewHTML.tsx b/src/components/Resources/ViewHTML.tsx index 68a9ad8..6763952 100644 --- a/src/components/Resources/ViewHTML.tsx +++ b/src/components/Resources/ViewHTML.tsx @@ -28,7 +28,7 @@ export const GetChipsHTML = ({ state, setState }: StateProps) => {
{ state.actions.getChips.active && - state.actions.getChips.selection?.map((each: keyof ResourceCost) =>

{each}

) + state.actions.getChips.selection?.map((each: keyof ResourceCost) =>

{each[0].toUpperCase()}

) }
{ diff --git a/src/sass/App.scss b/src/sass/App.scss index 18c1519..95832a1 100644 --- a/src/sass/App.scss +++ b/src/sass/App.scss @@ -5,6 +5,11 @@ @extend %hidden; } + .collapsed { + width: 20vw; + align-items: flex-end; + } + display: flex; align-items: center; justify-content: center; diff --git a/src/util/TurnOrderUtil.ts b/src/util/mechanics/TurnOrderUtil.ts similarity index 92% rename from src/util/TurnOrderUtil.ts rename to src/util/mechanics/TurnOrderUtil.ts index f895ec8..68b14d1 100644 --- a/src/util/TurnOrderUtil.ts +++ b/src/util/mechanics/TurnOrderUtil.ts @@ -1,4 +1,4 @@ -import { AppState, PlayerData } from "./types"; +import { AppState, PlayerData } from "../types"; export const turnOrderUtil = (prev: AppState, dynamic: PlayerData) => { let roundIncrement = false; diff --git a/src/util/cardTierToKey.ts b/src/util/mechanics/cardTierToKey.ts similarity index 89% rename from src/util/cardTierToKey.ts rename to src/util/mechanics/cardTierToKey.ts index df3712a..1bfe675 100644 --- a/src/util/cardTierToKey.ts +++ b/src/util/mechanics/cardTierToKey.ts @@ -1,4 +1,4 @@ -import { FullDeck } from "./types" +import { FullDeck } from "../types" export default function cardTierToKey(tier: number): keyof FullDeck { switch (tier) { diff --git a/src/util/getTotalBuyingPower.ts b/src/util/mechanics/getTotalBuyingPower.ts similarity index 91% rename from src/util/getTotalBuyingPower.ts rename to src/util/mechanics/getTotalBuyingPower.ts index d2f93d3..18dccb2 100644 --- a/src/util/getTotalBuyingPower.ts +++ b/src/util/mechanics/getTotalBuyingPower.ts @@ -1,4 +1,4 @@ -import { PlayerData, ResourceCost } from "./types"; +import { PlayerData, ResourceCost } from "../types"; export default function getTotalBuyingPower(currentPlayer: PlayerData) { let totalBuyingPower = { diff --git a/src/util/propTypes.ts b/src/util/propTypes.ts index 81598db..7fcf4bd 100644 --- a/src/util/propTypes.ts +++ b/src/util/propTypes.ts @@ -13,6 +13,11 @@ export interface CardProps extends StateProps { export interface CardRowProps extends StateProps { tier: number + liftCollapsed: (collapsed: boolean, tier?: number) => void +} + +export interface NobleProps extends StateProps { + liftCollapsed: (collapsed: boolean, tier?: number) => void } export interface PlayerProps extends StateProps { diff --git a/src/util/setup/defaultUIState.ts b/src/util/setup/defaultUIState.ts new file mode 100644 index 0000000..f492575 --- /dev/null +++ b/src/util/setup/defaultUIState.ts @@ -0,0 +1,9 @@ +import { UIState } from "../types"; + +export const defaultUIState: UIState = { + noblesCollapsed: true, + tierThreeCollapsed: true, + tierTwoCollapsed: true, + tierOneCollapsed: true, + playerUICollapsed: false +} \ No newline at end of file diff --git a/src/util/initializeBoard.ts b/src/util/setup/initializeBoard.ts similarity index 97% rename from src/util/initializeBoard.ts rename to src/util/setup/initializeBoard.ts index 43323dd..d4da175 100644 --- a/src/util/initializeBoard.ts +++ b/src/util/setup/initializeBoard.ts @@ -1,5 +1,5 @@ -import { AppState, FullDeck, NobleData, ResourceCost, setStateType } from "./types"; -import NobleStore from '../data/nobles.json'; +import { AppState, FullDeck, NobleData, ResourceCost, setStateType } from "../types"; +import NobleStore from '../../data/nobles.json'; const shuffleDeck = (state: AppState, setState: setStateType) => { if (!state.gameboard.deck) return; diff --git a/src/util/types.ts b/src/util/types.ts index 7301abe..ab9eeee 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -105,3 +105,11 @@ export interface NobleData { points: number, resourceCost: ResourceCost } + +export interface UIState { + noblesCollapsed: boolean + tierThreeCollapsed: boolean + tierTwoCollapsed: boolean + tierOneCollapsed: boolean + playerUICollapsed: boolean +} diff --git a/src/util/util.test.ts b/src/util/util.test.ts index ad8ab11..03c7d02 100644 --- a/src/util/util.test.ts +++ b/src/util/util.test.ts @@ -1,9 +1,9 @@ import { describe, expect, test } from "vitest" -import cardTierToKey from "./cardTierToKey"; +import cardTierToKey from "./mechanics/cardTierToKey"; import { mockPlayerOne, mockState } from "./testUtils"; -import { turnOrderUtil } from "./turnOrderUtil"; +import { turnOrderUtil } from "./mechanics/TurnOrderUtil"; import { useCurrentPlayer } from "../hooks/useCurrentPlayer"; -import getTotalBuyingPower from "./getTotalBuyingPower"; +import getTotalBuyingPower from "./mechanics/getTotalBuyingPower"; describe('app utilities', () => { test('useCurrentPlayer', () => {