{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":92119369,"defaultBranch":"master","name":"blackjack","ownerLogin":"codegard1","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-05-23T02:20:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/5205131?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1714585005.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"08fa56b7ebc9f6f8bb143e243a80f266a5633318","ref":"refs/heads/dependabot/npm_and_yarn/multi-f001b0b9fa","pushedAt":"2024-05-01T17:36:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump ejs and react-scripts\n\nBumps [ejs](https://github.com/mde/ejs) to 3.1.10 and updates ancestor dependency [react-scripts](https://github.com/facebook/create-react-app/tree/HEAD/packages/react-scripts). These dependencies need to be updated together.\n\n\nUpdates `ejs` from 2.7.4 to 3.1.10\n- [Release notes](https://github.com/mde/ejs/releases)\n- [Commits](https://github.com/mde/ejs/compare/v2.7.4...v3.1.10)\n\nUpdates `react-scripts` from 4.0.3 to 5.0.1\n- [Release notes](https://github.com/facebook/create-react-app/releases)\n- [Changelog](https://github.com/facebook/create-react-app/blob/main/CHANGELOG-4.x.md)\n- [Commits](https://github.com/facebook/create-react-app/commits/react-scripts@5.0.1/packages/react-scripts)\n\n---\nupdated-dependencies:\n- dependency-name: ejs\n dependency-type: indirect\n- dependency-name: react-scripts\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump ejs and react-scripts"}},{"before":"653f4305c49c1c2801c392c08520f6ddcd972d4c","after":"67c13197465a2f7e982eccdfda2d8122dfb38604","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-19T03:15:58.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"remove ancient redundant code","shortMessageHtmlLink":"remove ancient redundant code"}},{"before":"5a16d6ced734080592627963d2bd1652df001f02","after":"653f4305c49c1c2801c392c08520f6ddcd972d4c","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-19T02:53:38.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"uncomment getSelected()","shortMessageHtmlLink":"uncomment getSelected()"}},{"before":"5d0893c74f5630576b0722aecec578e635679a92","after":"5a16d6ced734080592627963d2bd1652df001f02","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-17T01:18:22.000Z","pushType":"push","commitsCount":17,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"hacky way to force a rerender after the Hit button is pressed","shortMessageHtmlLink":"hacky way to force a rerender after the Hit button is pressed"}},{"before":"52c73b64e1bbae3fe5a48f8b8a2c375a91e8575b","after":"5d0893c74f5630576b0722aecec578e635679a92","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-16T22:08:45.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"IPlayer extends IPlayerOptions for the sake of consistency","shortMessageHtmlLink":"IPlayer extends IPlayerOptions for the sake of consistency"}},{"before":"5f9aadd8ae06eb24fc30489855576779537c61b2","after":"52c73b64e1bbae3fe5a48f8b8a2c375a91e8575b","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-16T20:41:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"add class properties","shortMessageHtmlLink":"add class properties"}},{"before":null,"after":"5f9aadd8ae06eb24fc30489855576779537c61b2","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-15T23:24:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"marginal update","shortMessageHtmlLink":"marginal update"}},{"before":"c707ec724e7dfb2ef12890e36b500108627cd110","after":null,"ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-15T23:23:56.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":null,"after":"c707ec724e7dfb2ef12890e36b500108627cd110","ref":"refs/heads/75-playerstore-and-deckcontext-both-track-player-hands-redundantly","pushedAt":"2024-04-15T23:23:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"Main (#68)\n\n* ci: add Azure Static Web Apps workflow file\r\non-behalf-of: @Azure opensource@microsoft.com\r\n\r\n* install typescript again","shortMessageHtmlLink":"Main (#68)"}},{"before":"18edd68ab9e979b1bda3ed991800be269d2c4679","after":null,"ref":"refs/heads/main","pushedAt":"2024-04-15T23:16:37.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":"c707ec724e7dfb2ef12890e36b500108627cd110","after":null,"ref":"refs/heads/stable","pushedAt":"2024-04-15T23:16:34.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":"0aa2c58b4e7d30ff52336bce0a731286d781b94b","after":null,"ref":"refs/heads/patch3","pushedAt":"2024-04-15T23:16:31.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":"21f73c9cd3f99baddf0c8f647210633991d95c16","after":"5f9aadd8ae06eb24fc30489855576779537c61b2","ref":"refs/heads/v2.1","pushedAt":"2024-04-15T23:15:58.000Z","pushType":"pr_merge","commitsCount":50,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"marginal update","shortMessageHtmlLink":"marginal update"}},{"before":"814984726406382560bc0109cf0bde31efbf4d7f","after":"0aa2c58b4e7d30ff52336bce0a731286d781b94b","ref":"refs/heads/patch3","pushedAt":"2024-04-09T23:23:49.000Z","pushType":"push","commitsCount":8,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"marginal update","shortMessageHtmlLink":"marginal update"}},{"before":"ad93564d33c78198f0a3e4e0b6d73f226574ff17","after":"814984726406382560bc0109cf0bde31efbf4d7f","ref":"refs/heads/patch3","pushedAt":"2024-04-09T18:19:58.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"refactor ControlPanel","shortMessageHtmlLink":"refactor ControlPanel"}},{"before":"f781f8962298ec9253eb1bc45181e3245baeae9e","after":"ad93564d33c78198f0a3e4e0b6d73f226574ff17","ref":"refs/heads/patch3","pushedAt":"2024-04-09T00:09:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"read PlayerStoreState from localStorage","shortMessageHtmlLink":"read PlayerStoreState from localStorage"}},{"before":"fe46078dd113617d713c5a1852ae3ebf8d01ce01","after":"f781f8962298ec9253eb1bc45181e3245baeae9e","ref":"refs/heads/patch3","pushedAt":"2024-04-08T23:49:01.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"add SetDeckState to GameActions","shortMessageHtmlLink":"add SetDeckState to GameActions"}},{"before":"af9e2cfbdf381014d492c5ec8ee5538bc92b2238","after":"fe46078dd113617d713c5a1852ae3ebf8d01ce01","ref":"refs/heads/patch3","pushedAt":"2024-04-08T23:17:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"confirmed that select works as expected","shortMessageHtmlLink":"confirmed that select works as expected"}},{"before":"a2b9c337aae38d385749f5b3d7e2159029ad296e","after":"af9e2cfbdf381014d492c5ec8ee5538bc92b2238","ref":"refs/heads/patch3","pushedAt":"2024-04-08T23:01:32.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"add deck.cardKeys to DebugWindow","shortMessageHtmlLink":"add deck.cardKeys to DebugWindow"}},{"before":"5ab62f5dbdd79cad616b9401d973d1d4a9b87bac","after":"a2b9c337aae38d385749f5b3d7e2159029ad296e","ref":"refs/heads/patch3","pushedAt":"2024-04-08T21:52:48.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"Add experimental Game class","shortMessageHtmlLink":"Add experimental Game class"}},{"before":"1649c4762b1956ba8e85bd4b704fa47a1c3e4319","after":"5ab62f5dbdd79cad616b9401d973d1d4a9b87bac","ref":"refs/heads/patch3","pushedAt":"2024-04-05T22:40:00.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"NewGame automatically deals cards to each player as expected","shortMessageHtmlLink":"NewGame automatically deals cards to each player as expected"}},{"before":"9ce44ea497f1f2883936f2251d0e75032fef79b6","after":"1649c4762b1956ba8e85bd4b704fa47a1c3e4319","ref":"refs/heads/patch3","pushedAt":"2024-04-05T22:23:55.000Z","pushType":"push","commitsCount":10,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"update shuffle and resetGame","shortMessageHtmlLink":"update shuffle and resetGame"}},{"before":"d75893b2f91fda09d330c8e5104e120756b29e43","after":"9ce44ea497f1f2883936f2251d0e75032fef79b6","ref":"refs/heads/patch3","pushedAt":"2024-04-05T17:30:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"add JsonViewer component to show state in DebugWindow","shortMessageHtmlLink":"add JsonViewer component to show state in DebugWindow"}},{"before":"21f73c9cd3f99baddf0c8f647210633991d95c16","after":"d75893b2f91fda09d330c8e5104e120756b29e43","ref":"refs/heads/patch3","pushedAt":"2024-04-05T17:03:32.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"use Dispatch instead of React.Dispatch","shortMessageHtmlLink":"use Dispatch instead of React.Dispatch"}},{"before":"83aac2410f632ae1b0ff5571dfaf40adbce83424","after":null,"ref":"refs/heads/v2-patch2","pushedAt":"2024-04-05T15:16:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":"959ad6e31a17fc154113b0944ae4eb6ae907412f","after":null,"ref":"refs/heads/v2-patch1","pushedAt":"2024-04-05T15:16:57.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}},{"before":null,"after":"21f73c9cd3f99baddf0c8f647210633991d95c16","ref":"refs/heads/patch3","pushedAt":"2024-04-02T16:45:36.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"V2 patch2 (#74)\n\n* ci: add Azure Static Web Apps workflow file\r\non-behalf-of: @Azure opensource@microsoft.com\r\n\r\n* install typescript again\r\n\r\n* Upgrade (#65)\r\n\r\n* Refresh base with new create-react-app template\r\n\r\n* add .nvmrc\r\n\r\n* update .gitignore\r\n\r\n* update package.json and dotfiles\r\n\r\n* update public folder contents\r\n\r\n* add types and interfaces\r\n\r\n* Add Suit class\r\n\r\n* add PlayingCardSort class\r\n\r\n* add PlayingCard class\r\n\r\n* Add PlayingCardDeck class\r\n\r\n* remove redundant JS files\r\n\r\n* organize types\r\n\r\n* organize interfaces\r\n\r\n* organize classes\r\n\r\n* cleanup imports\r\n\r\n* remove redundant image\r\n\r\n* fix typo\r\n\r\n* convert CardContainer to TS\r\n\r\n* Add SuitCollection type\r\n\r\n* Convert App to TS\r\n\r\n* remove redundant .babelrc\r\n\r\n* Convert boilerplate to TS\r\n\r\n* remove old, redundant files\r\n\r\n* add DeckContainer\r\n\r\n* convert IndexedDB to TS\r\n\r\n* add AppContext\r\n\r\n* consume appcontext\r\n\r\n* convert StatusDisplay to TS\r\n\r\n* move IAppContextProps to src/interfaces\r\n\r\n* Convert OptionsPanel to TS\r\n\r\n* remove unused Flux files\r\n\r\n* Move AppActions functionality into App state\r\n\r\n* convert PlayerContainer to TS\r\n\r\n* convert ControlPanel to TS\r\n\r\n* convert DeckCallout to TS\r\n\r\n* add Player type\r\n\r\n* convert ActivityLog to TS\r\n\r\n* convert SplashScreen to TSX\r\n\r\n* Convert UserForm to TS\r\n\r\n* convert StatusDisplay to TS\r\n\r\n* convert definitions to TS\r\n\r\n* update index\r\n\r\n* move stores into current workspace\r\n\r\n* convert Agent to TS\r\n\r\n* convert State to TS\r\n\r\n* add hand prop to Player type\r\n\r\n* update component index\r\n\r\n* convert Table to TS\r\n\r\n* Create PlayerStore.ts\r\n\r\nBegin translating PlayerStore.js to TypeScript\r\n\r\n* export PlayerHandValue type to its own file\r\n\r\n* export PlayerHand type to its own file\r\n\r\n* export PlayerCollection type to its own file\r\n\r\n* add PlayerAction Enum\r\n\r\n* Player => BasePlayer\r\n\r\n* update types index\r\n\r\n* add interface IPlayerStore\r\n\r\n* Add class Player\r\n\r\n* Add interface IPlayer\r\n\r\n* update indexes\r\n\r\n* merge all private methods into the PlayerStore class\r\n\r\n* neutral => neutralPrimary\r\n\r\n* move IAgentProps to interfaces folder\r\n\r\n* remove redundant JS file\r\n\r\n* resolve linting errors\r\n\r\n* Add IControlPanelState interface\r\n\r\n* Add IControlPanelStore interface\r\n\r\n* remove redundant StatsStore JS file\r\n\r\n* move IPlayerStoreState to interfaces folder\r\n\r\n* Make all is-prefixed context variables required in IAppContextProps\r\n\r\n* Update OptionsPanel and IDBDatabase to be functional again\r\n\r\n* Set defaults for required properties in AppContext\r\n\r\n* remove redundant class ControlPanelStore\r\n\r\n* Add unique Key to PlayingCard\r\n\r\n* Rename DeckContainer to CardStack\r\n\r\n* remove redundant element\r\n\r\n* resolve TS warnings in ControlPanel\r\n\r\n* update IAppContextProps and ICardStackProps\r\n\r\n* Update AppContext and move stores into classes folder\r\n\r\n* Update components so the App renders as expected\r\n\r\n* Move most state variables into App\r\n\r\n* Merge StatsStore into Player and PlayerStore\r\n\r\n* move enums into enums folder\r\n\r\n* Use enum for PlayerStatus\r\n\r\n* Move hasBlackJack and isBusted to Player class\r\n\r\n* use PlayerStore in App\r\n\r\n* merge DeckStore into PlayingCardDeck class\r\n\r\n* Update Table component for PlayerStore and DeckStore\r\n\r\n* Add enum GameStatus\r\n\r\n* add MessageBarDefinition type\r\n\r\n* merge GameStore into App and AppContext\r\n\r\n* remove redundant param from Player.updateStats\r\n\r\n* merge main into v2\r\n\r\n* merge main into v2\r\n\r\n* fix references to gameStore\r\n\r\n* remove redundant calls in AppActions\r\n\r\n* remove redundant props from PlayerContainer, provide them in AppContext instead\r\n\r\n* fix up renderPlayerContainers()\r\n\r\n* use playerStore to manage players\r\n\r\n* Refactor AppContext as a composed object\r\n\r\n* remove redundant file\r\n\r\n* replace deckStore with PlayingCardDeck\r\n\r\n* add bank and initial bet values to default player definitions\r\n\r\n* remove redundant deck logic from Table\r\n\r\n* add isSpinnerVisible, setSpinnerVisible to IGameStoreProps\r\n\r\n* remove redundant deck logic from App\r\n\r\n* remove IDeckStoreProps from interfaces index\r\n\r\n* add getter and setter for Player state\r\n\r\n* add interface IPlayerOpts\r\n\r\n* rewrite barrels using proper syntax\r\n\r\n* Rename Player type to BasePlayer\r\n\r\n* make all IPlayerState props required\r\n\r\n* update required props in IPlayerOpts\r\n\r\n* Add modifiers and inline comments to Player class\r\n\r\n* refactor default definitions\r\n\r\n* add interface IPlayingCardDeckState\r\n\r\n* refactor deck and player stores\r\n\r\n* deck and playerStore are optionally null, initially\r\n\r\n* remove IndexedDB class\r\n\r\n* Add StoreName type\r\n\r\n* use StoreName to consistently name localStorage keys\r\n\r\n* fix typo in defaultPlayers\r\n\r\n* create playerStore with no players by default\r\n\r\n* defaultSelectedPlayerKeys includes the first two entries\r\n\r\n* Dropdown state works properly\r\n\r\n* add defaultPlayersArr\r\n\r\n* SplashScreen properly passes selectedPlayers to App\r\n\r\n* newGame() adds selectedPlayers to PlayerStore\r\n\r\n* fix OptionsPanel toggle not changing\r\n\r\n* actively set settingStore values from localStorage data\r\n\r\n* remove gameStatus and minimumBet from IControlPanelProps\r\n\r\n* remove redundant props from IPlayerContainerProps\r\n\r\n* update PlayerContainer where player may be null\r\n\r\n* fix typo\r\n\r\n* pass player as Player object rather than just the key\r\n\r\n* PlayerContainers render correctly\r\n\r\n* remove keymirror from package.json\r\n\r\n* add Settings Context and reducer\r\n\r\n* update interfaces\r\n\r\n* add StoreName enum\r\n\r\n* add SettingState type\r\n\r\n* remvoe SettingContext props from AppContext\r\n\r\n* implement SettingContext and reducer for settings state\r\n\r\n* add DeckContext and reducer\r\n\r\n* remove redundant type StoreName\r\n\r\n* building out DeckContext\r\n\r\n* update DeckState type\r\n\r\n* add GameState type\r\n\r\n* add IGameReducerAction interface\r\n\r\n* extract fisherYates to src/functions\r\n\r\n* add GameAction enum\r\n\r\n* expand DeckAction enum\r\n\r\n* add GameContext and gameDefaults\r\n\r\n* expand deckReducer\r\n\r\n* integrate DeckContext with App\r\n\r\n* rename DeckAction enum values\r\n\r\n* add getRandomIndex function\r\n\r\n* extract _cardKeys() to src/functions\r\n\r\n* add deckSide property to IDeckReducerAction\r\n\r\n* Rename DeckAction instances\r\n\r\n* build out deckReducer\r\n\r\n* remove redundant DeckAction enum values\r\n\r\n* remove old deck class from App and AppContext\r\n\r\n* remove references to old deck from components\r\n\r\n* PlayerContainer reads from deck.playerHands\r\n\r\n* fix typo\r\n\r\n* build out gameReducer\r\n\r\n* default lastWriteTime is now\r\n\r\n* add gameReducer to barrel\r\n\r\n* use GameContext instead of GameStore\r\n\r\n* remove minimumBet from AppContext\r\n\r\n* add EndGame to GameAction enum\r\n\r\n* replace gameStore with gameState\r\n\r\n* remove gameStatusFlag from AppContext\r\n\r\n* remove messageBarDefinition from AppContext\r\n\r\n* remove dealerHasControl from AppContext\r\n\r\n* remove endGame, endGameTrap, and evaluateGame from AppContext\r\n\r\n* add newGame and resetGame to gameReducer\r\n\r\n* move reducers into src/functions\r\n\r\n* add PlayingCardSuit type\r\n\r\n* deprecate PlayingCardDeck class\r\n\r\n* add cardSuits to src/functions\r\n\r\n* move PlayerHandList type to src/types\r\n\r\n* move cardTuples to src/functions\r\n\r\n* add playerStore GameState\r\n\r\n* remove gameStore and playerStore from AppContext\r\n\r\n* add Deal and Stay to GameAction type\r\n\r\n* remove playerStore and gameStore from Components\r\n\r\n* remove redundant interface IGameStoreProps\r\n\r\n* remove AppContext entirely\r\n\r\n* move clearStores to src/functions\r\n\r\n* move endGameTrap and evaluateGame into gameReducer\r\n\r\n* remove redundant functions and move initializeStores into an effect\r\n\r\n* allow playerKey to be single or an array\r\n\r\n* fix file extension typo\r\n\r\n* pass selectedPlayers to gameDispatch\r\n\r\n* Show error message if no players are selected\r\n\r\n* Correctly add new players to gameState in NewGame action\r\n\r\n* add PlayingCardDeck to gameState for now\r\n\r\n* ante through playerStore in gameReducer\r\n\r\n* allow playerKey to be a single or an array\r\n\r\n* add deck context to SplashScreen component\r\n\r\n---------\r\n\r\nCo-authored-by: Chris Odegard ","shortMessageHtmlLink":"V2 patch2 (#74)"}},{"before":"c707ec724e7dfb2ef12890e36b500108627cd110","after":"21f73c9cd3f99baddf0c8f647210633991d95c16","ref":"refs/heads/v2.1","pushedAt":"2024-04-02T16:30:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"V2 patch2 (#74)\n\n* ci: add Azure Static Web Apps workflow file\r\non-behalf-of: @Azure opensource@microsoft.com\r\n\r\n* install typescript again\r\n\r\n* Upgrade (#65)\r\n\r\n* Refresh base with new create-react-app template\r\n\r\n* add .nvmrc\r\n\r\n* update .gitignore\r\n\r\n* update package.json and dotfiles\r\n\r\n* update public folder contents\r\n\r\n* add types and interfaces\r\n\r\n* Add Suit class\r\n\r\n* add PlayingCardSort class\r\n\r\n* add PlayingCard class\r\n\r\n* Add PlayingCardDeck class\r\n\r\n* remove redundant JS files\r\n\r\n* organize types\r\n\r\n* organize interfaces\r\n\r\n* organize classes\r\n\r\n* cleanup imports\r\n\r\n* remove redundant image\r\n\r\n* fix typo\r\n\r\n* convert CardContainer to TS\r\n\r\n* Add SuitCollection type\r\n\r\n* Convert App to TS\r\n\r\n* remove redundant .babelrc\r\n\r\n* Convert boilerplate to TS\r\n\r\n* remove old, redundant files\r\n\r\n* add DeckContainer\r\n\r\n* convert IndexedDB to TS\r\n\r\n* add AppContext\r\n\r\n* consume appcontext\r\n\r\n* convert StatusDisplay to TS\r\n\r\n* move IAppContextProps to src/interfaces\r\n\r\n* Convert OptionsPanel to TS\r\n\r\n* remove unused Flux files\r\n\r\n* Move AppActions functionality into App state\r\n\r\n* convert PlayerContainer to TS\r\n\r\n* convert ControlPanel to TS\r\n\r\n* convert DeckCallout to TS\r\n\r\n* add Player type\r\n\r\n* convert ActivityLog to TS\r\n\r\n* convert SplashScreen to TSX\r\n\r\n* Convert UserForm to TS\r\n\r\n* convert StatusDisplay to TS\r\n\r\n* convert definitions to TS\r\n\r\n* update index\r\n\r\n* move stores into current workspace\r\n\r\n* convert Agent to TS\r\n\r\n* convert State to TS\r\n\r\n* add hand prop to Player type\r\n\r\n* update component index\r\n\r\n* convert Table to TS\r\n\r\n* Create PlayerStore.ts\r\n\r\nBegin translating PlayerStore.js to TypeScript\r\n\r\n* export PlayerHandValue type to its own file\r\n\r\n* export PlayerHand type to its own file\r\n\r\n* export PlayerCollection type to its own file\r\n\r\n* add PlayerAction Enum\r\n\r\n* Player => BasePlayer\r\n\r\n* update types index\r\n\r\n* add interface IPlayerStore\r\n\r\n* Add class Player\r\n\r\n* Add interface IPlayer\r\n\r\n* update indexes\r\n\r\n* merge all private methods into the PlayerStore class\r\n\r\n* neutral => neutralPrimary\r\n\r\n* move IAgentProps to interfaces folder\r\n\r\n* remove redundant JS file\r\n\r\n* resolve linting errors\r\n\r\n* Add IControlPanelState interface\r\n\r\n* Add IControlPanelStore interface\r\n\r\n* remove redundant StatsStore JS file\r\n\r\n* move IPlayerStoreState to interfaces folder\r\n\r\n* Make all is-prefixed context variables required in IAppContextProps\r\n\r\n* Update OptionsPanel and IDBDatabase to be functional again\r\n\r\n* Set defaults for required properties in AppContext\r\n\r\n* remove redundant class ControlPanelStore\r\n\r\n* Add unique Key to PlayingCard\r\n\r\n* Rename DeckContainer to CardStack\r\n\r\n* remove redundant element\r\n\r\n* resolve TS warnings in ControlPanel\r\n\r\n* update IAppContextProps and ICardStackProps\r\n\r\n* Update AppContext and move stores into classes folder\r\n\r\n* Update components so the App renders as expected\r\n\r\n* Move most state variables into App\r\n\r\n* Merge StatsStore into Player and PlayerStore\r\n\r\n* move enums into enums folder\r\n\r\n* Use enum for PlayerStatus\r\n\r\n* Move hasBlackJack and isBusted to Player class\r\n\r\n* use PlayerStore in App\r\n\r\n* merge DeckStore into PlayingCardDeck class\r\n\r\n* Update Table component for PlayerStore and DeckStore\r\n\r\n* Add enum GameStatus\r\n\r\n* add MessageBarDefinition type\r\n\r\n* merge GameStore into App and AppContext\r\n\r\n* remove redundant param from Player.updateStats\r\n\r\n* merge main into v2\r\n\r\n* merge main into v2\r\n\r\n* fix references to gameStore\r\n\r\n* remove redundant calls in AppActions\r\n\r\n* remove redundant props from PlayerContainer, provide them in AppContext instead\r\n\r\n* fix up renderPlayerContainers()\r\n\r\n* use playerStore to manage players\r\n\r\n* Refactor AppContext as a composed object\r\n\r\n* remove redundant file\r\n\r\n* replace deckStore with PlayingCardDeck\r\n\r\n* add bank and initial bet values to default player definitions\r\n\r\n* remove redundant deck logic from Table\r\n\r\n* add isSpinnerVisible, setSpinnerVisible to IGameStoreProps\r\n\r\n* remove redundant deck logic from App\r\n\r\n* remove IDeckStoreProps from interfaces index\r\n\r\n* add getter and setter for Player state\r\n\r\n* add interface IPlayerOpts\r\n\r\n* rewrite barrels using proper syntax\r\n\r\n* Rename Player type to BasePlayer\r\n\r\n* make all IPlayerState props required\r\n\r\n* update required props in IPlayerOpts\r\n\r\n* Add modifiers and inline comments to Player class\r\n\r\n* refactor default definitions\r\n\r\n* add interface IPlayingCardDeckState\r\n\r\n* refactor deck and player stores\r\n\r\n* deck and playerStore are optionally null, initially\r\n\r\n* remove IndexedDB class\r\n\r\n* Add StoreName type\r\n\r\n* use StoreName to consistently name localStorage keys\r\n\r\n* fix typo in defaultPlayers\r\n\r\n* create playerStore with no players by default\r\n\r\n* defaultSelectedPlayerKeys includes the first two entries\r\n\r\n* Dropdown state works properly\r\n\r\n* add defaultPlayersArr\r\n\r\n* SplashScreen properly passes selectedPlayers to App\r\n\r\n* newGame() adds selectedPlayers to PlayerStore\r\n\r\n* fix OptionsPanel toggle not changing\r\n\r\n* actively set settingStore values from localStorage data\r\n\r\n* remove gameStatus and minimumBet from IControlPanelProps\r\n\r\n* remove redundant props from IPlayerContainerProps\r\n\r\n* update PlayerContainer where player may be null\r\n\r\n* fix typo\r\n\r\n* pass player as Player object rather than just the key\r\n\r\n* PlayerContainers render correctly\r\n\r\n* remove keymirror from package.json\r\n\r\n* add Settings Context and reducer\r\n\r\n* update interfaces\r\n\r\n* add StoreName enum\r\n\r\n* add SettingState type\r\n\r\n* remvoe SettingContext props from AppContext\r\n\r\n* implement SettingContext and reducer for settings state\r\n\r\n* add DeckContext and reducer\r\n\r\n* remove redundant type StoreName\r\n\r\n* building out DeckContext\r\n\r\n* update DeckState type\r\n\r\n* add GameState type\r\n\r\n* add IGameReducerAction interface\r\n\r\n* extract fisherYates to src/functions\r\n\r\n* add GameAction enum\r\n\r\n* expand DeckAction enum\r\n\r\n* add GameContext and gameDefaults\r\n\r\n* expand deckReducer\r\n\r\n* integrate DeckContext with App\r\n\r\n* rename DeckAction enum values\r\n\r\n* add getRandomIndex function\r\n\r\n* extract _cardKeys() to src/functions\r\n\r\n* add deckSide property to IDeckReducerAction\r\n\r\n* Rename DeckAction instances\r\n\r\n* build out deckReducer\r\n\r\n* remove redundant DeckAction enum values\r\n\r\n* remove old deck class from App and AppContext\r\n\r\n* remove references to old deck from components\r\n\r\n* PlayerContainer reads from deck.playerHands\r\n\r\n* fix typo\r\n\r\n* build out gameReducer\r\n\r\n* default lastWriteTime is now\r\n\r\n* add gameReducer to barrel\r\n\r\n* use GameContext instead of GameStore\r\n\r\n* remove minimumBet from AppContext\r\n\r\n* add EndGame to GameAction enum\r\n\r\n* replace gameStore with gameState\r\n\r\n* remove gameStatusFlag from AppContext\r\n\r\n* remove messageBarDefinition from AppContext\r\n\r\n* remove dealerHasControl from AppContext\r\n\r\n* remove endGame, endGameTrap, and evaluateGame from AppContext\r\n\r\n* add newGame and resetGame to gameReducer\r\n\r\n* move reducers into src/functions\r\n\r\n* add PlayingCardSuit type\r\n\r\n* deprecate PlayingCardDeck class\r\n\r\n* add cardSuits to src/functions\r\n\r\n* move PlayerHandList type to src/types\r\n\r\n* move cardTuples to src/functions\r\n\r\n* add playerStore GameState\r\n\r\n* remove gameStore and playerStore from AppContext\r\n\r\n* add Deal and Stay to GameAction type\r\n\r\n* remove playerStore and gameStore from Components\r\n\r\n* remove redundant interface IGameStoreProps\r\n\r\n* remove AppContext entirely\r\n\r\n* move clearStores to src/functions\r\n\r\n* move endGameTrap and evaluateGame into gameReducer\r\n\r\n* remove redundant functions and move initializeStores into an effect\r\n\r\n* allow playerKey to be single or an array\r\n\r\n* fix file extension typo\r\n\r\n* pass selectedPlayers to gameDispatch\r\n\r\n* Show error message if no players are selected\r\n\r\n* Correctly add new players to gameState in NewGame action\r\n\r\n* add PlayingCardDeck to gameState for now\r\n\r\n* ante through playerStore in gameReducer\r\n\r\n* allow playerKey to be a single or an array\r\n\r\n* add deck context to SplashScreen component\r\n\r\n---------\r\n\r\nCo-authored-by: Chris Odegard ","shortMessageHtmlLink":"V2 patch2 (#74)"}},{"before":null,"after":"c707ec724e7dfb2ef12890e36b500108627cd110","ref":"refs/heads/v2.1","pushedAt":"2024-04-02T16:27:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"},"commit":{"message":"Main (#68)\n\n* ci: add Azure Static Web Apps workflow file\r\non-behalf-of: @Azure opensource@microsoft.com\r\n\r\n* install typescript again","shortMessageHtmlLink":"Main (#68)"}},{"before":"7cc1bf7285ac2272baf41fb4898ab1265dd72b83","after":null,"ref":"refs/heads/dependabot/npm_and_yarn/express-4.19.2","pushedAt":"2024-04-02T16:27:31.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"codegard1","name":"Chris Odegard","path":"/codegard1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5205131?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEPxWfMgA","startCursor":null,"endCursor":null}},"title":"Activity ยท codegard1/blackjack"}