From a4bc865c23150cf1e1a6c1b89507e721f42f9c1f Mon Sep 17 00:00:00 2001
From: Lyulyaev Maxim <8152180+LyulyaevMaxim@users.noreply.github.com>
Date: Mon, 10 Aug 2020 03:13:45 +0300
Subject: [PATCH] [Feature] Gameboard (part 1) (#2)
* [Feature] Add game board. Now we can to start and restart game. I use mock data yet
* [Feature][Modules] Add Ant Design for base stylization
* [Bugfix][Environment] Hot reload works incorrectly after version 2.24.9 ( https://github.com/gatsbyjs/gatsby/issues/26192 )
* [Bugfix] Stub for 'Error: The result of this StaticQuery could not be fetched' (https://github.com/gatsbyjs/gatsby/issues/24902)
---
.gitignore | 1 +
configs/linters/.eslintrc.js | 4 +
configs/linters/.stylelintrc.js | 5 +-
gatsby-browser.ts | 1 +
package.json | 2 +-
src/components/page-root/GameBoard.tsx | 58 ++
src/components/page-root/GameBoardCell.tsx | 95 ++++
src/components/page-root/GameInfo.tsx | 54 ++
src/components/page-root/index.tsx | 11 +
src/helpers/decorators/index.tsx | 57 ++
src/modules/optimizations/index.tsx | 7 +-
src/modules/seo/index.tsx | 18 +-
src/modules/stylization/css-reset.css | 52 --
src/modules/stylization/package.json | 3 +-
src/pages/index.tsx | 28 +-
src/store/battleshipGame/@types/index.ts | 74 +++
src/store/battleshipGame/actions.ts | 14 +
src/store/battleshipGame/reducer.ts | 93 +++
src/store/battleshipGame/selectors.ts | 40 ++
src/store/index.ts | 17 +-
yarn.lock | 622 +++++++++++++++++++--
21 files changed, 1125 insertions(+), 131 deletions(-)
create mode 100644 src/components/page-root/GameBoard.tsx
create mode 100644 src/components/page-root/GameBoardCell.tsx
create mode 100644 src/components/page-root/GameInfo.tsx
create mode 100644 src/components/page-root/index.tsx
create mode 100644 src/helpers/decorators/index.tsx
create mode 100644 src/store/battleshipGame/@types/index.ts
create mode 100644 src/store/battleshipGame/actions.ts
create mode 100644 src/store/battleshipGame/reducer.ts
create mode 100644 src/store/battleshipGame/selectors.ts
diff --git a/.gitignore b/.gitignore
index 068d37b..b2865ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
+yarn-error.log
.pnp.*
/cypress
diff --git a/configs/linters/.eslintrc.js b/configs/linters/.eslintrc.js
index 4c52284..cf622f6 100644
--- a/configs/linters/.eslintrc.js
+++ b/configs/linters/.eslintrc.js
@@ -30,6 +30,7 @@ module.exports = {
'one-var': 0,
'spaced-comment': 0,
'no-param-reassign': 1,
+ 'default-case': 1,
'no-use-before-define': 0,
'no-unused-vars': 1,
'no-shadow': 1,
@@ -46,7 +47,10 @@ module.exports = {
'react/destructuring-assignment': 0,
'react/no-children-prop': 0,
'react/jsx-props-no-spreading': 0,
+ 'react/jsx-pascal-case': 0,
'react/button-has-type': 0,
+ 'react/state-in-constructor': 0,
+ 'react/static-property-placement': 0,
'react/require-default-props': 2,
'react/jsx-max-depth': [1, { max: 5 }],
'react-hooks/exhaustive-deps': 1,
diff --git a/configs/linters/.stylelintrc.js b/configs/linters/.stylelintrc.js
index df04667..22875c8 100644
--- a/configs/linters/.stylelintrc.js
+++ b/configs/linters/.stylelintrc.js
@@ -37,10 +37,10 @@ module.exports = {
format: 'hsl',
},
'aditayvm/at-rule-no-children': [{ severity: 'warning' }],
- 'order/order': ['custom-properties', 'dollar-variables', 'declarations', 'at-rules', 'rules'],
+ 'order/order': null, //['custom-properties', 'dollar-variables', 'declarations', 'at-rules', 'rules'],
// 'order/properties-alphabetical-order': true,
'selector-type-no-unknown': [true, { ignore: ['custom-elements'] }],
- 'selector-class-pattern': '^[a-z][a-zA-Z0-9]+$', //lowerCamelCase
+ // 'selector-class-pattern': '^[a-z][a-zA-Z0-9]+$', //lowerCamelCase
'block-no-empty': null,
'at-rule-no-unknown': null,
'max-nesting-depth': null,
@@ -48,6 +48,7 @@ module.exports = {
'no-missing-end-of-source-newline': null,
'comment-empty-line-before': null,
'comment-whitespace-inside': null,
+ 'value-keyword-case': null,
...(withJS && { 'no-empty-source': null }),
},
}
diff --git a/gatsby-browser.ts b/gatsby-browser.ts
index 358cc1f..ec13590 100644
--- a/gatsby-browser.ts
+++ b/gatsby-browser.ts
@@ -1,4 +1,5 @@
/* https://www.gatsbyjs.org/docs/browser-apis/ */
+import 'antd/dist/antd.css'
import 'modules/stylization/css-reset.css'
import { detectBrowser } from 'modules/polyfills'
diff --git a/package.json b/package.json
index f791678..33004c3 100644
--- a/package.json
+++ b/package.json
@@ -46,7 +46,7 @@
"babel-loader": "8.1.0",
"babel-preset-gatsby": "0.5.5",
"cross-env": "7.0.2",
- "gatsby": "2.24.36",
+ "gatsby": "2.24.9",
"gatsby-plugin-manifest": "2.4.22",
"gatsby-plugin-offline": "3.2.22",
"gatsby-plugin-sharp": "2.6.25",
diff --git a/src/components/page-root/GameBoard.tsx b/src/components/page-root/GameBoard.tsx
new file mode 100644
index 0000000..60334ae
--- /dev/null
+++ b/src/components/page-root/GameBoard.tsx
@@ -0,0 +1,58 @@
+import React from 'react'
+import { css } from 'styled-components'
+import { useSelector } from 'react-redux'
+import { flowRight } from 'lodash-es'
+import { withErrorBoundaries } from 'helpers/decorators'
+import { battleshipGameSelectors } from 'store/battleshipGame/selectors'
+import { GameBoardCell } from './GameBoardCell'
+
+function GameBoard() {
+ const gameBoardSize = useSelector(battleshipGameSelectors.getGameBoardSize),
+ gameBoardMap = useSelector(battleshipGameSelectors.getGameBoardData),
+ [rowsSize, columnsSize] = [gameBoardSize, gameBoardSize],
+ Cells = React.useMemo(() => {
+ const cells = []
+ for (let rowIndex = 0; rowIndex < rowsSize; rowIndex += 1) {
+ for (let columnIndex = 0; columnIndex < columnsSize; columnIndex += 1) {
+ const cell = gameBoardMap[rowIndex][columnIndex]
+ cells.push(
+
+ )
+ }
+ }
+ return cells
+ }, [gameBoardMap, rowsSize, columnsSize])
+
+ return (
+
+ )
+}
+
+const boardStyles = {
+ wrapper: css<{ rowsSize: number; columnsSize: number }>`
+ display: grid;
+ grid-area: game-board;
+ ${(props) => {
+ let dynamicStyles = ''
+ const cellSize = '2rem'
+
+ dynamicStyles += `
+ grid-template-columns: repeat(${props.columnsSize}, ${cellSize});
+ grid-template-rows: repeat(${props.rowsSize}, ${cellSize});
+ `
+
+ return dynamicStyles
+ }};
+ `,
+}
+
+const withDecorators = flowRight(withErrorBoundaries(), React.memo)(GameBoard)
+export { withDecorators as GameBoard }
diff --git a/src/components/page-root/GameBoardCell.tsx b/src/components/page-root/GameBoardCell.tsx
new file mode 100644
index 0000000..d3b6f3d
--- /dev/null
+++ b/src/components/page-root/GameBoardCell.tsx
@@ -0,0 +1,95 @@
+import React from 'react'
+import { css } from 'styled-components'
+import { Checkbox } from 'antd'
+import { useSelector, useDispatch } from 'react-redux'
+import { battleshipGameSelectors } from 'store/battleshipGame/selectors'
+import { battleshipGameAPI } from 'store/battleshipGame/actions'
+import { NGameBoard } from 'store/battleshipGame/@types'
+
+interface IGameBoardCell extends NGameBoard.ICell {
+ rowIndex: NGameBoard.rowIndex
+ columnIndex: NGameBoard.columnIndex
+}
+
+export const GameBoardCell: React.FC = React.memo((props) => {
+ const { rowIndex, columnIndex, shipId, isShot } = props
+
+ const dispatch = useDispatch(),
+ onCellClick = React.useCallback(
+ (event: any) => {
+ event.stopPropagation()
+ dispatch(battleshipGameAPI.shotCell({ payload: { rowIndex, columnIndex } }))
+ },
+ [dispatch, rowIndex, columnIndex]
+ )
+
+ const ship = useSelector(battleshipGameSelectors.getShip({ shipId })),
+ cell = useSelector(battleshipGameSelectors.getShipCell({ shipId, rowIndex, columnIndex })),
+ cellBorders = cell?.borders ?? Object.prototype,
+ isShowHints = useSelector(battleshipGameSelectors.isShowHints({ shipId }))
+
+ const styles = React.useMemo(
+ () => [
+ cellStyles.cell,
+ shipId &&
+ css`
+ --cellsAlive: ${ship?.cellsAlive};
+ `,
+ isShowHints && cellStyles.cellWithHints,
+ ],
+ [shipId, isShowHints]
+ ),
+ className = React.useMemo(
+ () =>
+ [
+ shipId &&
+ Object.keys(cellBorders)
+ .map((borderPosition) => `border-${borderPosition}`)
+ .join(' '),
+ ]
+ .filter(Boolean)
+ .join(''),
+ [shipId, cellBorders]
+ )
+
+ return (
+
+ )
+})
+
+const cellStyles = {
+ cell: css`
+ &.ant-checkbox-wrapper {
+ margin: 0;
+ }
+ .ant-checkbox {
+ display: flex;
+ }
+ .ant-checkbox,
+ .ant-checkbox-inner {
+ width: 100%;
+ height: 100%;
+ }
+
+ .ant-checkbox-disabled .ant-checkbox-inner {
+ background-color: hsl(0 70% calc(var(--cellsAlive) * 20%));
+ }
+
+ &[class*='border-'] .ant-checkbox-disabled .ant-checkbox-inner {
+ border: initial !important;
+ }
+
+ ${['left', 'right', 'top', 'bottom'].reduce((dynamicStyles, currentBorderPosition) => {
+ dynamicStyles += `
+ &.border-${currentBorderPosition} .ant-checkbox-disabled .ant-checkbox-inner {
+ border-${currentBorderPosition}: 2px solid hsl(0deg 0% 0%) !important;
+ }`
+ return dynamicStyles
+ }, '')}
+ `,
+ cellWithHints: css`
+ .ant-checkbox-inner {
+ background-color: hsl(271 76% 53% / 0.4);
+ }
+ `,
+}
diff --git a/src/components/page-root/GameInfo.tsx b/src/components/page-root/GameInfo.tsx
new file mode 100644
index 0000000..7110657
--- /dev/null
+++ b/src/components/page-root/GameInfo.tsx
@@ -0,0 +1,54 @@
+import React from 'react'
+import { css } from 'styled-components'
+import { Modal, Button } from 'antd'
+import { useSelector, useDispatch } from 'react-redux'
+import { flowRight } from 'lodash-es'
+import { withErrorBoundaries } from 'helpers/decorators'
+import { battleshipGameSelectors } from 'store/battleshipGame/selectors'
+import { battleshipGameAPI } from 'store/battleshipGame/actions'
+
+function GameInfo() {
+ const dispatch = useDispatch(),
+ aliveShips = useSelector(battleshipGameSelectors.getAliveShips),
+ onShowHints = React.useCallback(() => {
+ dispatch(battleshipGameAPI.showHints())
+ setTimeout(() => dispatch(battleshipGameAPI.showHints()), 1000)
+ }, [dispatch])
+
+ const [isModalVisible, setModalVisible] = React.useState(false),
+ onClickCancel = React.useCallback(() => setModalVisible(false), []),
+ onClickOk = React.useCallback(() => {
+ setModalVisible(false)
+ dispatch(battleshipGameAPI.restartGame())
+ }, [dispatch])
+
+ React.useEffect(() => {
+ if (!aliveShips) setTimeout(() => setModalVisible(true))
+ }, [aliveShips])
+
+ return (
+
+ )
+}
+
+const infoStyles = {
+ wrapper: css`
+ grid-area: info;
+ `,
+}
+
+const withDecorators = flowRight(withErrorBoundaries(), React.memo)(GameInfo)
+export { withDecorators as GameInfo }
diff --git a/src/components/page-root/index.tsx b/src/components/page-root/index.tsx
new file mode 100644
index 0000000..57c717a
--- /dev/null
+++ b/src/components/page-root/index.tsx
@@ -0,0 +1,11 @@
+import { LoadableComponent } from '@loadable/component'
+import { getModuleAsync } from 'modules/optimizations'
+
+export const GameBoard: LoadableComponent<{}> = getModuleAsync({
+ moduleName: 'GameBoard',
+ moduleImport: () => import(/* webpackChunkName: "GameBoard", webpackPrefetch: true */ `./GameBoard`),
+ }),
+ GameInfo: LoadableComponent<{}> = getModuleAsync({
+ moduleName: 'GameInfo',
+ moduleImport: () => import(/* webpackChunkName: "GameInfo", webpackPrefetch: true */ `./GameInfo`),
+ })
diff --git a/src/helpers/decorators/index.tsx b/src/helpers/decorators/index.tsx
new file mode 100644
index 0000000..7f40a26
--- /dev/null
+++ b/src/helpers/decorators/index.tsx
@@ -0,0 +1,57 @@
+import React from 'react'
+
+interface IWithErrorBoundariesSettings {
+ isWrapperHandler?: boolean
+ customError?: null | ((errorInfo: IWrapperState) => React.ReactNode)
+}
+
+interface IWithErrorBoundaries {
+ stateKey: string
+ (settings?: IWithErrorBoundariesSettings): (Component: any) => React.ComponentType
+}
+
+interface IWrapperState {
+ hasError: boolean
+}
+
+/** After error:
+ * withErrorBoundaries()(SomeComponent)
+ wrapper will replace children to renderDefaultError
+
+ * withErrorBoundaries({customError: OtherComp})(SomeComponent)
+ wrapper will replace children to OtherComp
+
+ * withErrorBoundaries({isWrapperHandler: null})(SomeComponent)
+ wrapper will ignore error, SomeComponent must use props[withErrorBoundaries.stateKey] for custom error handling
+ */
+
+export const withErrorBoundaries: IWithErrorBoundaries = (settings = Object.prototype) => (Component) =>
+ class Wrapper extends React.Component {
+ static displayName = `withErrorBoundaries(${displayNameCreate(Component)})`
+
+ state = { hasError: false }
+
+ static getDerivedStateFromError(error: any) {
+ return { hasError: true, error }
+ }
+
+ renderDefaultError = () => Something went wrong
+
+ /*componentDidCatch(error, errorInfo) {
+ showNotification()
+ sendErrorToLog(error, errorInfo);
+ }*/
+
+ render() {
+ const { isWrapperHandler = true, customError = this.renderDefaultError } = settings,
+ { hasError } = this.state
+
+ if (isWrapperHandler && hasError) return customError ? customError(this.state) : null
+
+ return
+ }
+ }
+
+withErrorBoundaries.stateKey = 'withErrorBoundaries'
+
+const displayNameCreate = (Component: any) => Component.displayName || Component.name || 'Component'
diff --git a/src/modules/optimizations/index.tsx b/src/modules/optimizations/index.tsx
index 848adee..0d26fe3 100644
--- a/src/modules/optimizations/index.tsx
+++ b/src/modules/optimizations/index.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import loadable from '@loadable/component'
import { timeout as pTimeout } from 'promise-timeout'
+import { Spin } from 'antd'
interface IGetAsyncModule {
moduleImport: any
@@ -30,7 +31,7 @@ export function getModuleAsync({
})
},
{
- fallback: ,
+ fallback: ,
}
)
@@ -38,7 +39,3 @@ export function getModuleAsync({
return AsyncComponent
}
-
-export const Loader: React.FC = () => {
- return <>Loading...>
-}
diff --git a/src/modules/seo/index.tsx b/src/modules/seo/index.tsx
index bcb8168..ced47fa 100644
--- a/src/modules/seo/index.tsx
+++ b/src/modules/seo/index.tsx
@@ -1,23 +1,9 @@
import React from 'react'
import { Helmet } from 'react-helmet'
-import { useStaticQuery, graphql } from 'gatsby'
+import { siteMetadata } from '../../constants'
export function SEO({ locale, pageName }: any) {
- const data = useStaticQuery(
- graphql`
- query {
- site {
- siteMetadata {
- title
- description
- }
- }
- }
- `
- )
-
- const { siteMetadata } = data.site,
- { title } = siteMetadata
+ const { title } = siteMetadata
return (
.tl-edges {
- display: none;
-}
-
-.unsupported-browser .alertForUnsupportedBrowser {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
-}
-
-.alertForUnsupportedBrowser-content > * {
- display: none;
-}
-
-.opera-extreme-mode .alertForUnsupportedBrowser .opera-extreme-mode,
-.browser-trident .alertForUnsupportedBrowser .ie {
- display: block;
-}
-/*Stubs for unsupported browsers: end*/
diff --git a/src/modules/stylization/package.json b/src/modules/stylization/package.json
index 672fe30..5ed967c 100644
--- a/src/modules/stylization/package.json
+++ b/src/modules/stylization/package.json
@@ -7,7 +7,8 @@
"dependencies": {
"gatsby-plugin-transition-link": "1.20.2",
"react-spring": "8.0.27",
- "styled-components": "5.1.1"
+ "styled-components": "5.1.1",
+ "antd": "4.5.2"
},
"devDependencies": {
"@types/styled-components": "5.1.2",
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index e7ac7b8..d9d490a 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,5 +1,31 @@
import React from 'react'
+import { css } from 'styled-components'
+import { GameBoard, GameInfo } from 'components/page-root'
export default function PageRoot() {
- return Hello, world!
+ return (
+
+
+
+
+
+ )
+}
+
+const pageMainStyles = {
+ wrapper: css`
+ display: grid;
+ grid-template-areas: 'title title' 'game-board info';
+ column-gap: 2rem;
+ row-gap: 1rem;
+ justify-content: center;
+ align-items: flex-start;
+ padding: 1.5rem;
+ `,
+ title: css`
+ grid-area: title;
+ font-size: 2rem;
+ font-weight: 700;
+ text-align: center;
+ `,
}
diff --git a/src/store/battleshipGame/@types/index.ts b/src/store/battleshipGame/@types/index.ts
new file mode 100644
index 0000000..4a4312d
--- /dev/null
+++ b/src/store/battleshipGame/@types/index.ts
@@ -0,0 +1,74 @@
+export namespace NBattleshipGame {
+ export interface IStore {
+ showHints: boolean
+ board: NGameBoard.IBoard
+ ships: NShips.IShips
+ }
+
+ export type IActions = IShotCell | IGameRestart | IShowHints
+
+ export enum ActionTypes {
+ SHOT_CELL = 'SHOT_CELL',
+ RESTART_GAME = 'RESTART_GAME',
+ SHOW_HINTS = 'SHOW_HINTS',
+ }
+
+ export interface IShotCell {
+ type: ActionTypes.SHOT_CELL
+ payload: {
+ rowIndex: NGameBoard.rowIndex
+ columnIndex: NGameBoard.columnIndex
+ }
+ }
+
+ export interface IGameRestart {
+ type: ActionTypes.RESTART_GAME
+ }
+
+ export interface IShowHints {
+ type: ActionTypes.SHOW_HINTS
+ }
+}
+
+export namespace NGameBoard {
+ export interface ICell {
+ isShot: boolean
+ shipId?: NShips.shipId
+ }
+
+ export type rowIndex = number
+ export type columnIndex = number
+
+ export interface IBoard {
+ size: number
+ data: Record>
+ }
+}
+
+namespace NShips {
+ interface IShipCell {
+ isShot: boolean
+ borders: { left?: boolean; right?: boolean; top?: boolean; bottom?: boolean }
+ }
+
+ interface IShip {
+ cellsAlive: number
+ coords: Record>
+ }
+
+ interface IShipDotShaped extends IShip {
+ cellsAlive: 1
+ }
+
+ interface IShipIShaped extends IShip {
+ cellsAlive: 3
+ }
+
+ interface IShipLShaped extends IShip {
+ cellsAlive: 4
+ }
+
+ export type shipId = string
+
+ export type IShips = Record
+}
diff --git a/src/store/battleshipGame/actions.ts b/src/store/battleshipGame/actions.ts
new file mode 100644
index 0000000..bb9f316
--- /dev/null
+++ b/src/store/battleshipGame/actions.ts
@@ -0,0 +1,14 @@
+import { Dispatch } from 'redux'
+import { NBattleshipGame } from './@types'
+
+export const battleshipGameAPI = {
+ shotCell: (params: Omit) => (dispatch: Dispatch) =>
+ dispatch({
+ ...params,
+ type: NBattleshipGame.ActionTypes.SHOT_CELL,
+ }),
+ showHints: () => (dispatch: Dispatch) =>
+ dispatch({ type: NBattleshipGame.ActionTypes.SHOW_HINTS }),
+ restartGame: () => (dispatch: Dispatch) =>
+ dispatch({ type: NBattleshipGame.ActionTypes.RESTART_GAME }),
+}
diff --git a/src/store/battleshipGame/reducer.ts b/src/store/battleshipGame/reducer.ts
new file mode 100644
index 0000000..83d35a7
--- /dev/null
+++ b/src/store/battleshipGame/reducer.ts
@@ -0,0 +1,93 @@
+import produce from 'immer'
+import { NBattleshipGame } from './@types'
+
+function getInitialState(): NBattleshipGame.IStore {
+ return {
+ showHints: false,
+ board: {
+ size: 10,
+ data: {
+ 0: {
+ 0: { isShot: false, shipId: 'ship-1' },
+ 1: { isShot: false },
+ 2: { isShot: false, shipId: 'ship-3' },
+ 3: { isShot: false, shipId: 'ship-3' },
+ 4: { isShot: false, shipId: 'ship-3' },
+ ...[5, 6, 7, 8].reduce((acc, index) => ({ ...acc, [index]: { isShot: false } }), {}),
+ 9: { isShot: false, shipId: 'ship-2' },
+ },
+ ...[1, 2, 3, 4, 5, 6, 7, 8, 9].reduce(
+ (acc, index) => ({
+ ...acc,
+ [index]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].reduce(
+ (acc, index) => ({ ...acc, [index]: { isShot: false } }),
+ {}
+ ),
+ }),
+ {}
+ ),
+ },
+ },
+ ships: {
+ 'ship-1': {
+ cellsAlive: 1,
+ coords: {
+ 0: {
+ 0: { isShot: false, borders: { left: true, right: true, top: true, bottom: true } },
+ },
+ },
+ },
+ 'ship-2': {
+ cellsAlive: 1,
+ coords: {
+ 0: {
+ 9: { isShot: false, borders: { left: true, right: true, top: true, bottom: true } },
+ },
+ },
+ },
+ 'ship-3': {
+ cellsAlive: 3,
+ coords: {
+ 0: {
+ 2: { isShot: false, borders: { left: true, top: true, bottom: true } },
+ 3: { isShot: false, borders: { top: true, bottom: true } },
+ 4: { isShot: false, borders: { right: true, top: true, bottom: true } },
+ },
+ },
+ },
+ },
+ }
+}
+
+export const battleshipGameReducer = produce((draft: NBattleshipGame.IStore, action: NBattleshipGame.IActions) => {
+ switch (action.type) {
+ case NBattleshipGame.ActionTypes.SHOT_CELL: {
+ const { rowIndex, columnIndex } = action.payload,
+ cell = draft.board.data[rowIndex][columnIndex],
+ { shipId } = cell
+
+ cell.isShot = true
+
+ if (shipId) {
+ const ship = draft.ships[shipId]
+ ship.coords[rowIndex][columnIndex].isShot = true
+ ship.cellsAlive -= 1
+ }
+ break
+ }
+
+ case NBattleshipGame.ActionTypes.RESTART_GAME: {
+ const newState = getInitialState()
+ ;(Object.keys(newState) as Array).forEach((key) => {
+ // @ts-ignore
+ draft[key] = newState[key]
+ })
+ break
+ }
+
+ case NBattleshipGame.ActionTypes.SHOW_HINTS: {
+ draft.showHints = !draft.showHints
+ break
+ }
+ }
+}, getInitialState())
diff --git a/src/store/battleshipGame/selectors.ts b/src/store/battleshipGame/selectors.ts
new file mode 100644
index 0000000..ac58d61
--- /dev/null
+++ b/src/store/battleshipGame/selectors.ts
@@ -0,0 +1,40 @@
+import { createSelector } from 'reselect'
+import { IStore } from 'store'
+
+export const battleshipGameSelectors = {
+ get getBattleshipGame() {
+ return createSelector(
+ (store: IStore) => store,
+ (store) => store.battleshipGame
+ )
+ },
+ get getGameBoard() {
+ return createSelector(this.getBattleshipGame, (battleshipGame) => battleshipGame.board)
+ },
+ isShowHints({ shipId }: any) {
+ return createSelector(this.getBattleshipGame, (battleshipGame) => (shipId ? battleshipGame.showHints : false))
+ },
+ get getGameBoardSize() {
+ return createSelector(this.getGameBoard, (board) => board.size)
+ },
+ get getGameBoardData() {
+ return createSelector(this.getGameBoard, (board) => board.data)
+ },
+ get getShips() {
+ return createSelector(this.getBattleshipGame, (battleshipGame) => battleshipGame.ships)
+ },
+ getShip({ shipId }: any) {
+ return createSelector(this.getShips, (ships) => ships?.[shipId] ?? null)
+ },
+ getShipCell({ shipId, rowIndex, columnIndex }: any) {
+ return createSelector(this.getShip({ shipId }), (ship) => ship?.coords[rowIndex][columnIndex])
+ },
+ get getAliveShips() {
+ return createSelector(this.getShips, (ships) =>
+ Object.values(ships).reduce((acc: number, current: any) => {
+ if (current.cellsAlive) acc += 1
+ return acc
+ }, 0)
+ )
+ },
+}
diff --git a/src/store/index.ts b/src/store/index.ts
index 6177cb3..5301b7b 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -1,8 +1,13 @@
import { createStore, applyMiddleware, combineReducers, compose } from 'redux'
import thunkMiddleware from 'redux-thunk'
-import { get } from 'lodash'
+import { get } from 'lodash-es'
-export interface IStore {}
+import { NBattleshipGame } from 'store/battleshipGame/@types'
+import { battleshipGameReducer } from 'store/battleshipGame/reducer'
+
+export interface IStore {
+ battleshipGame: NBattleshipGame.IStore
+}
export function configureStore(preloadedState?: any) {
const middlewares = [thunkMiddleware],
@@ -11,5 +16,11 @@ export function configureStore(preloadedState?: any) {
compose,
enhancer = composedEnhancers(applyMiddleware(...middlewares))
- return createStore(combineReducers({}), preloadedState, enhancer)
+ return createStore(
+ combineReducers({
+ battleshipGame: battleshipGameReducer,
+ }),
+ preloadedState,
+ enhancer
+ )
}
diff --git a/yarn.lock b/yarn.lock
index ecb45a1..bab3dad 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -21,6 +21,46 @@
dependencies:
"@analytics/cookie-utils" "^0.2.3"
+"@ant-design/colors@^3.1.0":
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-3.2.2.tgz#5ad43d619e911f3488ebac303d606e66a8423903"
+ integrity sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==
+ dependencies:
+ tinycolor2 "^1.4.1"
+
+"@ant-design/css-animation@^1.7.2":
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/@ant-design/css-animation/-/css-animation-1.7.3.tgz#60a1c970014e86b28f940510d69e503e428f1136"
+ integrity sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA==
+
+"@ant-design/icons-svg@^4.0.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz#480b025f4b20ef7fe8f47d4a4846e4fee84ea06c"
+ integrity sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ==
+
+"@ant-design/icons@^4.2.1":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.2.2.tgz#6533c5a02aec49238ec4748074845ad7d85a4f5e"
+ integrity sha512-DrVV+wcupnHS7PehJ6KiTcJtAR5c25UMgjGECCc6pUT9rsvw0AuYG+a4HDjfxEQuDqKTHwW+oX/nIvCymyLE8Q==
+ dependencies:
+ "@ant-design/colors" "^3.1.0"
+ "@ant-design/icons-svg" "^4.0.0"
+ "@babel/runtime" "^7.10.4"
+ classnames "^2.2.6"
+ insert-css "^2.0.0"
+ rc-util "^5.0.1"
+
+"@ant-design/react-slick@~0.27.0":
+ version "0.27.0"
+ resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.27.0.tgz#c5d4bfd879885b74024ffbce42cccb5f7bff41e9"
+ integrity sha512-dq/p/1oKgew99cNrhT6/BA4v7c7nAhPlS6IcVGVTMsp175bYxbHBT1GfY5vxZyz97YaTnzJ8s2Wql4AOnFQ+9g==
+ dependencies:
+ "@babel/runtime" "^7.10.4"
+ classnames "^2.2.5"
+ json2mq "^0.2.0"
+ lodash "^4.17.15"
+ resize-observer-polyfill "^1.5.0"
+
"@ardatan/aggregate-error@0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.1.tgz#1403ac5de10d8ca689fc1f65844c27179ae1d44f"
@@ -1062,7 +1102,7 @@
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
@@ -3859,6 +3899,55 @@ ansicolors@~0.3.2:
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=
+antd@4.5.2:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/antd/-/antd-4.5.2.tgz#0551b2999d5c9827d996b860e827974d50d87ed9"
+ integrity sha512-XDI4ywKpj2LfvvQjHxkdItzLH0zlVvm3wKHyko03BoSzYVinZ9MWap3PXraclb8xBKH8d/14BRJSGmIsvxzkfg==
+ dependencies:
+ "@ant-design/css-animation" "^1.7.2"
+ "@ant-design/icons" "^4.2.1"
+ "@ant-design/react-slick" "~0.27.0"
+ "@babel/runtime" "^7.10.4"
+ array-tree-filter "^2.1.0"
+ classnames "^2.2.6"
+ copy-to-clipboard "^3.2.0"
+ lodash "^4.17.13"
+ moment "^2.25.3"
+ omit.js "^2.0.2"
+ raf "^3.4.1"
+ rc-animate "~3.1.0"
+ rc-cascader "~1.3.0"
+ rc-checkbox "~2.3.0"
+ rc-collapse "~2.0.0"
+ rc-dialog "~8.1.0"
+ rc-drawer "~4.1.0"
+ rc-dropdown "~3.1.2"
+ rc-field-form "~1.8.0"
+ rc-input-number "~6.0.0"
+ rc-mentions "~1.4.0"
+ rc-menu "~8.5.0"
+ rc-notification "~4.4.0"
+ rc-pagination "~2.4.1"
+ rc-picker "~1.15.1"
+ rc-progress "~3.0.0"
+ rc-rate "~2.8.2"
+ rc-resize-observer "^0.2.3"
+ rc-select "~11.0.10"
+ rc-slider "~9.3.0"
+ rc-steps "~4.1.0"
+ rc-switch "~3.2.0"
+ rc-table "~7.8.0"
+ rc-tabs "~11.5.0"
+ rc-textarea "~0.3.0"
+ rc-tooltip "~4.2.0"
+ rc-tree "~3.8.0"
+ rc-tree-select "~4.1.0"
+ rc-trigger "~4.3.0"
+ rc-upload "~3.2.0"
+ rc-util "^5.0.1"
+ scroll-into-view-if-needed "^2.2.25"
+ warning "^4.0.3"
+
any-base@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
@@ -4109,6 +4198,11 @@ array-reduce@~0.0.0:
resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+array-tree-filter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
+ integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
+
array-union@^1.0.1, array-union@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -4259,6 +4353,11 @@ async-retry-ng@^2.0.1:
resolved "https://registry.yarnpkg.com/async-retry-ng/-/async-retry-ng-2.0.1.tgz#f5285ec1c52654a2ba6a505d0c18b1eadfaebd41"
integrity sha512-iitlc2murdQ3/A5Re3CcplQBEf7vOmFrFQ6RFn3+/+zZUyIHYkZnnEziMSa6YIb2Bs2EJEPZWReTxjHqvQbDbw==
+async-validator@^3.0.3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-3.4.0.tgz#871b3e594124bf4c4eb7bcd1a9e78b44f3b09cae"
+ integrity sha512-VrFk4eYiJAWKskEz115iiuCf9O0ftnMMPXrOFMqyzGH2KxO7YwncKyn/FgOOP+0MDHMfXL7gLExagCutaZGigA==
+
async@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@@ -4752,7 +4851,7 @@ babel-plugin-remove-export-keywords@^1.6.5:
resolved "https://registry.yarnpkg.com/babel-plugin-remove-export-keywords/-/babel-plugin-remove-export-keywords-1.6.16.tgz#e764b42e3c8e4a5ce3e2c996dc43b6348d5d94cf"
integrity sha512-JrB9ZASlMAfkRF+5NdgoQxgenhJxzXFEO1vrqsSDJdzLrC38L2wrvXF9mm1YLbrehkZxcrNz9UYDyARP4jaY9g==
-babel-plugin-remove-graphql-queries@^2.9.16:
+babel-plugin-remove-graphql-queries@^2.9.15, babel-plugin-remove-graphql-queries@^2.9.16:
version "2.9.16"
resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.16.tgz#7fff54c7fc618c9cc9508b020d99354e3144b435"
integrity sha512-7Z+awkeghPRk4axY8N6ywQu9GpxpqHTkXRiZ+VxDaIppbybeZsAQ7uA6B4B63M4nm0BSOrHZzZWuT/kOg2RA8g==
@@ -4940,7 +5039,7 @@ babel-preset-gatsby-package@^0.4.4:
babel-plugin-dynamic-import-node "^2.3.3"
core-js "^2.6.11"
-babel-preset-gatsby@0.5.5, babel-preset-gatsby@^0.5.5:
+babel-preset-gatsby@0.5.5, babel-preset-gatsby@^0.5.3:
version "0.5.5"
resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.5.5.tgz#f8d05aa407a56514d7786f7b576c1954e0a3f425"
integrity sha512-gkBRAEv5OvSerqh15gMHCCtExiUpTuKiKwb6QBImb3nSBAuCcjr0ESHzpgk4m0eZLbxUaeooVd0uPyC6FQsCBQ==
@@ -6098,6 +6197,11 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
+classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+ integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
clean-deep@^3.0.2, clean-deep@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/clean-deep/-/clean-deep-3.3.0.tgz#00509a2cb431fa83fb202aa759534681f0309172"
@@ -6618,6 +6722,11 @@ compression@^1.7.4:
safe-buffer "5.1.2"
vary "~1.1.2"
+compute-scroll-into-view@^1.0.14:
+ version "1.0.14"
+ resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz#80e3ebb25d6aa89f42e533956cb4b16a04cfe759"
+ integrity sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -7422,7 +7531,7 @@ dataloader@^2.0.0:
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f"
integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ==
-date-fns@^2.0.1, date-fns@^2.14.0, date-fns@^2.8.1:
+date-fns@^2.0.1, date-fns@^2.14.0, date-fns@^2.15.0, date-fns@^2.8.1:
version "2.15.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f"
integrity sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==
@@ -7439,6 +7548,11 @@ date-time@^2.1.0:
dependencies:
time-zone "^1.0.0"
+dayjs@^1.8.30:
+ version "1.8.32"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.32.tgz#66c48b95c397d9f7907e89bd29f78b3d19d40294"
+ integrity sha512-V91aTRu5btP+uzGHaaOfodckEfBWhmi9foRP7cauAO1PTB8+tZ9o0Jec7q6TIIRY1N4q1IfiKsZunkB/AEWqMQ==
+
debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -8025,6 +8139,11 @@ dom-accessibility-api@^0.4.6:
resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.4.7.tgz#31d01c113af49f323409b3ed09e56967aba485a8"
integrity sha512-5+GzhTpCQYHz4NjL8loYTDVBnXIjNLBadWQBKxXk+osFEplLt3EsSYBu2YZcdZ8QqrvCHgW6TSMGMbmgfhrn2g==
+dom-align@^1.7.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.0.tgz#56fb7156df0b91099830364d2d48f88963f5a29c"
+ integrity sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA==
+
dom-converter@^0.2:
version "0.2.0"
resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
@@ -9088,7 +9207,7 @@ eventemitter3@^3.1.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
-eventemitter3@^4.0.0, eventemitter3@^4.0.4:
+eventemitter3@^4.0.0:
version "4.0.4"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
@@ -10117,10 +10236,10 @@ fuzzy@^0.1.3:
resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8"
integrity sha1-THbsL/CsGjap3M+aAN+GIweNTtg=
-gatsby-cli@^2.12.79:
- version "2.12.79"
- resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.79.tgz#a9b162c08d980647c8aab5ccaba306e6b7d3ee0d"
- integrity sha512-0BYRDlPWDm40bMjXnRW3bauBuBwUaPcVCMBR894FOZS1ca1xz2mCjecp0AN1b8eiwQZ5TvrOIhr5V8IDwYXJ/A==
+gatsby-cli@^2.12.65:
+ version "2.12.80"
+ resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.80.tgz#3ef391ce9a40229b0da3301a8bdf83bc2ce8d82d"
+ integrity sha512-B8KUYMnepRSGexV4XjWhVAUUXy6TsmvUElQ0E3OgyI9RxpoKsCprJzhG96A+Df7Rgx+cPkV1fGArbOjfxnF4lQ==
dependencies:
"@babel/code-frame" "^7.10.3"
"@hapi/joi" "^15.1.1"
@@ -10136,7 +10255,7 @@ gatsby-cli@^2.12.79:
fs-exists-cached "^1.0.0"
fs-extra "^8.1.0"
gatsby-core-utils "^1.3.15"
- gatsby-recipes "^0.2.9"
+ gatsby-recipes "^0.2.10"
gatsby-telemetry "^1.3.26"
hosted-git-info "^3.0.4"
ink "^2.7.1"
@@ -10162,7 +10281,7 @@ gatsby-cli@^2.12.79:
yargs "^15.3.1"
yurnalist "^1.1.2"
-gatsby-core-utils@^1.3.15:
+gatsby-core-utils@^1.3.13, gatsby-core-utils@^1.3.15:
version "1.3.15"
resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-1.3.15.tgz#6fad76a238df514afa70fed0f94427fbb39762ca"
integrity sha512-np1tJCGejhCHtgHdFl6+y5EwVAzdrieJZ3hdvpeOrJ22bL9ktl5XVLy4K937ThgxHLp8+ElMDVdziNun5tC8eg==
@@ -10181,7 +10300,7 @@ gatsby-design-tokens@^2.0.2:
dependencies:
hex2rgba "^0.0.1"
-gatsby-graphiql-explorer@^0.4.12:
+gatsby-graphiql-explorer@^0.4.11:
version "0.4.12"
resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.12.tgz#9c7a3c9c562e7bb8e3e24bf7c8ac4b319d0ce64b"
integrity sha512-kHVHzGvebZlUGeGOoAAJVdLWAXftZiYeOk6EitWFkXEZtYxpgXM5Pum9qDMCzUCJ6pzS8r9U5IBJncjMal3ScQ==
@@ -10275,7 +10394,7 @@ gatsby-plugin-offline@3.2.22:
lodash "^4.17.15"
workbox-build "^4.3.1"
-gatsby-plugin-page-creator@^2.3.20:
+gatsby-plugin-page-creator@^2.3.18:
version "2.3.20"
resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.20.tgz#7172680f178426cb35ae29175f4cf9a9afbefcd7"
integrity sha512-EtoKgXNXvkY5IA4XvBPhlM5TelR6R04e3fpcGWuYO4oqts/9Ih0GGI9CzUBRXNwM5MplNBUcUutyAwMtT9NzVA==
@@ -10368,7 +10487,7 @@ gatsby-plugin-typescript-checker@1.1.1:
dependencies:
fork-ts-checker-webpack-plugin "^1.3.4"
-gatsby-plugin-typescript@2.4.17, gatsby-plugin-typescript@^2.4.17:
+gatsby-plugin-typescript@2.4.17, gatsby-plugin-typescript@^2.4.16:
version "2.4.17"
resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.17.tgz#0d3c1ebe0915ce34cd1066fd9f8a58521b2e8a71"
integrity sha512-Bp0e2Nc3CYYfhYvvIO7DIZOzy6hlYDJFBE/rHPK9mu5RLX8THqNmT53579SJWx4ozSPCNK41EfPbAJdtEgEPaA==
@@ -10388,10 +10507,10 @@ gatsby-react-router-scroll@^3.0.12:
dependencies:
"@babel/runtime" "^7.10.3"
-gatsby-recipes@^0.2.9:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.2.9.tgz#635e2264b673b67d71b4f209c59f562f42bc86fc"
- integrity sha512-gLRjYRAsW4N4gjJjRynpkshiRtM4ExqU/ghDmFZzfH3sCzEYs/BKAradoy8WNuTziwCnV5fh3kKPq7P2TSx6sw==
+gatsby-recipes@^0.2.10:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.2.10.tgz#ec9e56acd0cd39f544407a8d9dbeaf23e764e4e1"
+ integrity sha512-4iL9ZaZxIk1qTHCq+bFhT7edFJVuyWLInQKwQLsxxHIzM5DcizB21Lw62lzAOcACLiXzmJTofgVQOw+17c6Yhw==
dependencies:
"@babel/core" "^7.9.6"
"@babel/generator" "^7.9.6"
@@ -10414,6 +10533,7 @@ gatsby-recipes@^0.2.9:
acorn-jsx "^5.2.0"
ansi-html "^0.0.7"
babel-plugin-remove-export-keywords "^1.6.5"
+ better-queue "^3.8.10"
chokidar "3.4.0"
concurrently "^5.0.0"
contentful-management "^5.26.3"
@@ -10442,10 +10562,10 @@ gatsby-recipes@^0.2.9:
isomorphic-fetch "^2.1.0"
jest-diff "^25.5.0"
lodash "^4.17.15"
+ mitt "^1.2.0"
mkdirp "^0.5.1"
node-fetch "^2.5.0"
normalize.css "^8.0.1"
- p-queue "^6.4.0"
pkg-dir "^4.2.0"
prettier "^2.0.5"
prop-types "^15.6.1"
@@ -10512,7 +10632,7 @@ gatsby-source-graphql@2.7.0:
node-fetch "^1.7.3"
uuid "^3.4.0"
-gatsby-telemetry@^1.3.26:
+gatsby-telemetry@^1.3.22, gatsby-telemetry@^1.3.26:
version "1.3.26"
resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.26.tgz#c9b3845787ed47258da0d902d565f7c930534871"
integrity sha512-10DqlSw0mvuRcQfoYmYdt+XAZqECqCUY8wYWo1Vpg3BwSpRtaW2rFjDqPa+MZSB5qfBfL92urDw8g1uZZolBNQ==
@@ -10554,10 +10674,10 @@ gatsby-transformer-sharp@2.5.12:
semver "^5.7.1"
sharp "^0.25.1"
-gatsby@2.24.36:
- version "2.24.36"
- resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.24.36.tgz#0bcfb328f2edc5270995c995f2669b8d2d878bfa"
- integrity sha512-hpfNWnbRjQTZSshPvfckZaNDLoc2rcrqzw7O0UMUSfAihnQ7WWGsSnyymvL1Da0Cxqep1utI5HkaYe9QTdKKsQ==
+gatsby@2.24.9:
+ version "2.24.9"
+ resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.24.9.tgz#e20dbab2973a191af753b9226e01bd672d1282c7"
+ integrity sha512-OaDwuoLZL9hYEt/u69+MwlK26CUK70XTWN1oSIIwFgcpJaWud15qriYxZgg+dt1fP/SGgEu+T2uUwAi8b7vClA==
dependencies:
"@babel/code-frame" "^7.10.3"
"@babel/core" "^7.10.3"
@@ -10580,8 +10700,8 @@ gatsby@2.24.36:
babel-loader "^8.1.0"
babel-plugin-add-module-exports "^0.3.3"
babel-plugin-dynamic-import-node "^2.3.3"
- babel-plugin-remove-graphql-queries "^2.9.16"
- babel-preset-gatsby "^0.5.5"
+ babel-plugin-remove-graphql-queries "^2.9.15"
+ babel-preset-gatsby "^0.5.3"
better-opn "1.0.0"
better-queue "^3.8.10"
bluebird "^3.7.2"
@@ -10617,18 +10737,17 @@ gatsby@2.24.36:
express-graphql "^0.9.0"
fast-levenshtein "^2.0.6"
file-loader "^1.1.11"
- find-cache-dir "^3.3.1"
fs-exists-cached "1.0.0"
fs-extra "^8.1.0"
- gatsby-cli "^2.12.79"
- gatsby-core-utils "^1.3.15"
- gatsby-graphiql-explorer "^0.4.12"
+ gatsby-cli "^2.12.65"
+ gatsby-core-utils "^1.3.13"
+ gatsby-graphiql-explorer "^0.4.11"
gatsby-legacy-polyfills "^0.0.2"
gatsby-link "^2.4.13"
- gatsby-plugin-page-creator "^2.3.20"
- gatsby-plugin-typescript "^2.4.17"
+ gatsby-plugin-page-creator "^2.3.18"
+ gatsby-plugin-typescript "^2.4.16"
gatsby-react-router-scroll "^3.0.12"
- gatsby-telemetry "^1.3.26"
+ gatsby-telemetry "^1.3.22"
glob "^7.1.6"
got "8.3.2"
graphql "^14.6.0"
@@ -10654,7 +10773,7 @@ gatsby@2.24.36:
mkdirp "^0.5.1"
moment "^2.27.0"
name-all-modules-plugin "^1.0.1"
- normalize-path "^3.0.0"
+ normalize-path "^2.1.1"
null-loader "^3.0.0"
opentracing "^0.14.4"
optimize-css-assets-webpack-plugin "^5.0.3"
@@ -11560,7 +11679,7 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1:
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -12235,6 +12354,11 @@ inquirer@^7.0.0:
strip-ansi "^6.0.0"
through "^2.3.6"
+insert-css@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/insert-css/-/insert-css-2.0.0.tgz#eb5d1097b7542f4c79ea3060d3aee07d053880f4"
+ integrity sha1-610Ql7dUL0x56jBg067gfQU4gPQ=
+
internal-ip@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
@@ -13621,6 +13745,13 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+json2mq@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
+ integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=
+ dependencies:
+ string-convert "^0.2.0"
+
json3@^3.3.2:
version "3.3.3"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
@@ -15029,6 +15160,14 @@ mini-css-extract-plugin@^0.8.2:
schema-utils "^1.0.0"
webpack-sources "^1.1.0"
+mini-store@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/mini-store/-/mini-store-3.0.6.tgz#44b86be5b2877271224ce0689b3a35a2dffb1ca9"
+ integrity sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==
+ dependencies:
+ hoist-non-react-statics "^3.3.2"
+ shallowequal "^1.0.2"
+
mini-svg-data-uri@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz#e16baa92ad55ddaa1c2c135759129f41910bc39f"
@@ -15243,7 +15382,7 @@ moize@^5.4.4, moize@^5.4.7:
fast-stringify "^1.1.0"
micro-memoize "^2.1.1"
-moment@^2.27.0:
+moment@^2.24.0, moment@^2.25.3, moment@^2.27.0:
version "2.27.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d"
integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
@@ -16128,6 +16267,11 @@ omggif@^1.0.10, omggif@^1.0.9:
resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
+omit.js@^2.0.0, omit.js@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-2.0.2.tgz#dd9b8436fab947a5f3ff214cb2538631e313ec2f"
+ integrity sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -16458,14 +16602,6 @@ p-pipe@^1.1.0:
resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
-p-queue@^6.4.0:
- version "6.6.0"
- resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.0.tgz#263f2b73add4cefca81d8d6b2696ee74b326de2f"
- integrity sha512-zPHXPNy9jZsiym0PpJjvnHQysx1fSd/QdaNVwiDRLU2KFChD6h9CkCB6b8i3U8lBwJyA+mHgNZCzcy77glUssQ==
- dependencies:
- eventemitter3 "^4.0.4"
- p-timeout "^3.1.0"
-
p-reduce@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
@@ -18002,7 +18138,7 @@ quick-lru@^4.0.1:
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
-raf@^3.4.1:
+raf@^3.4.0, raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
@@ -18073,6 +18209,56 @@ raw-loader@^0.5.1:
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
+rc-align@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.1.tgz#0566de141a82d9a1923b7672c70bdb19dcde6e23"
+ integrity sha512-RQ5Fhxl0LW+zsxbY8dxAcpXdaHkHH2jzRSSpvBTS7G9LMK3T+WRcn4ovjg/eqAESM6TdTx0hfqWF2S1pO75jxQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ dom-align "^1.7.0"
+ rc-util "^5.0.1"
+ resize-observer-polyfill "^1.5.1"
+
+rc-animate@3.x, rc-animate@^3.0.0, rc-animate@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.1.0.tgz#051b689c2c7194e4c8ae016d32a0e5f9de6c8baa"
+ integrity sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==
+ dependencies:
+ "@ant-design/css-animation" "^1.7.2"
+ classnames "^2.2.6"
+ raf "^3.4.0"
+ rc-util "^5.0.1"
+
+rc-cascader@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.3.0.tgz#67925c7ac4b732fe06cabb3a9c91631c96d04ccf"
+ integrity sha512-wayuMo/dSZixvdpiRFZB4Q6A3omKRXQcJ3CxN02+PNiTEcRnK2KDqKUzrx7GwgMsyH5tz90lUZ91lLaEPNFv0A==
+ dependencies:
+ array-tree-filter "^2.1.0"
+ rc-trigger "^4.0.0"
+ rc-util "^5.0.1"
+ warning "^4.0.1"
+
+rc-checkbox@~2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.3.1.tgz#2a61bc43017c783bd2e9f1a67553bf8efe7aa4d3"
+ integrity sha512-i290/iTqmZ0WtI2UPIryqT9rW6O99+an4KeZIyZDH3r+Jbb6YdddaWNdzq7g5m9zaNhJvgjf//wJtC4fvve2Tg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+
+rc-collapse@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-2.0.0.tgz#08c5942f82005b4342ced02d983581e4c41cd324"
+ integrity sha512-R5+Ge1uzwK9G1wZPRPhqQsed4FXTDmU0BKzsqfNBtZdk/wd+yey8ZutmJmSozYc5hQwjPkCvJHV7gOIRZKIlJg==
+ dependencies:
+ "@ant-design/css-animation" "^1.7.2"
+ classnames "2.x"
+ rc-animate "3.x"
+ react-is "^16.7.0"
+ shallowequal "^1.1.0"
+
rc-config-loader@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-3.0.0.tgz#1484ed55d6fb8b21057699c8426370f7529c52a7"
@@ -18083,6 +18269,325 @@ rc-config-loader@^3.0.0:
json5 "^2.1.1"
require-from-string "^2.0.2"
+rc-dialog@~8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.1.0.tgz#393910963bb05ac19d6d136620bd09622f1d677a"
+ integrity sha512-vMVAtyxpnokh/okFcDQVLO6ymIXfoTKYKtqJ/hMtf+0WcvRn4VgVDBvGyEk5zd94k0RgwEze9o2kGw8SyjivZg==
+ dependencies:
+ rc-animate "3.x"
+ rc-util "^5.0.1"
+
+rc-drawer@~4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-4.1.0.tgz#d7bf0bc030300b62d282bc04e053b9acad6b08b4"
+ integrity sha512-kjeQFngPjdzAFahNIV0EvEBoIKMOnvUsAxpkSPELoD/1DuR4nLafom5ryma+TIxGwkFJ92W6yjsMi1U9aiOTeQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-util "^5.0.1"
+
+rc-dropdown@^3.1.0, rc-dropdown@~3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-3.1.2.tgz#5199bd532ac8519813a347d194ab4b0cee702333"
+ integrity sha512-s2W5jqvjTid5DxotGO5FlTBaQWeB+Bu7McQgjB8Ot3Wbl72AIKwLf11+lgbV4mA2vWC1H8DKyn6SW9TKLTi0xg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-trigger "^4.0.0"
+
+rc-field-form@~1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.8.0.tgz#c51312321409727e5a333873311f9c1f5e13e8c2"
+ integrity sha512-WQyC3yBEKIWehNzkRMTBK/Lzdjronov9GsB9C9bgVcfpDqsIQSSBgGFAJMmWUAGs2IrCbgh9RBY0Ste4foHzvg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+ async-validator "^3.0.3"
+ rc-util "^5.0.0"
+
+rc-input-number@~6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-6.0.0.tgz#0c0af57c8183f3ca6b87f7edf6fed3bd5a3ba16f"
+ integrity sha512-vbe+g7HvR/joknSnvLkBTi9N9I+LsV4kljfuog8WNiS7OAF3aEN0QcHSOQ4+xk6+Hx9P1tU63z2+TyEx8W/j2Q==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.0.1"
+
+rc-mentions@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-1.4.0.tgz#6b7a2770ec02a5c0265d459a3385a23913efcc61"
+ integrity sha512-DIcjQZNerCZ50tnDnL6P9mpNmlGc9VFrSjXh55RzkAZOTelf061T7ZbYv0bYeSdohvAwYNr4gt3/Pe79AUsjLw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ rc-menu "^8.0.1"
+ rc-textarea "^0.3.0"
+ rc-trigger "^4.3.0"
+ rc-util "^5.0.1"
+
+rc-menu@^8.0.1, rc-menu@^8.2.1, rc-menu@~8.5.0:
+ version "8.5.2"
+ resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-8.5.2.tgz#fa43bccabfcf422b9d3cdfcae5b71da08bab7e54"
+ integrity sha512-GPtr7qoCynVEkFgco/9cW0z/xU33GV89Q6r8FgEkrdhaQSJzuSC+v8pv+Bll5fVGQlJyJgOVqiKk7l2Knk1jYg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ mini-store "^3.0.1"
+ omit.js "^2.0.0"
+ rc-motion "^1.0.1"
+ rc-trigger "^4.4.0"
+ rc-util "^5.0.1"
+ resize-observer-polyfill "^1.5.0"
+ shallowequal "^1.1.0"
+
+rc-motion@^1.0.0, rc-motion@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-1.0.1.tgz#9a9106cd8e932a25f49a3324443dada90c9b8006"
+ integrity sha512-+gk3bk72678cnwqsKmLTaqLNnAdvxe97SEttyGrrGH29UHiDj1tZTRwguDEAHZ9ZW44VMLmKhr2BKZqZOBPm0Q==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ raf "^3.4.1"
+ rc-util "^5.0.6"
+
+rc-notification@~4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.4.0.tgz#192d082cd6e2995705f43c6929162631c71e3db1"
+ integrity sha512-IDeNAFGVeOsy1tv4zNVqMAXB9tianR80ewQbtObaAQfjwAjWfONdqdyjFkEU6nc6UQhSUYA5OcTGb7kwwbnh0g==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-animate "3.x"
+ rc-util "^5.0.1"
+
+rc-pagination@~2.4.1:
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-2.4.6.tgz#cc030c9693c730b43592bdb6974fb32c1502a500"
+ integrity sha512-1ykd3Jti+JuOFdzEFXGfVpkuH+hKxLYz3FKV6BSwnnWXLr9Y8bbm7YiTSwBmdDcOg6tinH8b4IYaKzxBWRC6EA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+
+rc-picker@~1.15.1:
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-1.15.1.tgz#b0d647f3827468f844bc95c9255436ea787d26ce"
+ integrity sha512-YW6I91R1rMDTKpWY2yYjUk3mX4ttk7l8dx5fuojGBj86TGPj0R5vh+wFoRNzOeA4qAHcRzGWGPP60HFnoxL1TA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ date-fns "^2.15.0"
+ dayjs "^1.8.30"
+ moment "^2.24.0"
+ rc-trigger "^4.0.0"
+ rc-util "^5.0.1"
+ react "^16.0.0"
+ shallowequal "^1.1.0"
+
+rc-progress@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-3.0.0.tgz#cea324ce8fc31421cd815d94a4649a8a29f8f8db"
+ integrity sha512-dQv1KU3o6Vay604FMYMF4S0x4GNXAgXf1tbQ1QoxeIeQt4d5fUeB7Ri82YPu+G+aRvH/AtxYAlEcnxyVZ1/4Hw==
+ dependencies:
+ classnames "^2.2.6"
+
+rc-rate@~2.8.2:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.8.2.tgz#d82d237d74fd4aef3e0581d2700b646cdd1cd8a2"
+ integrity sha512-f9T/D+ZwWQrWHkpidpQbnXpnVMGMC4eSRAkwuu88a8Qv1C/9LNc4AErazoh8tpnZBFqq19F3j0Glv+sDgkfEig==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-util "^5.0.1"
+
+rc-resize-observer@^0.2.0, rc-resize-observer@^0.2.1, rc-resize-observer@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-0.2.3.tgz#8268284d1766d163240b1682661ae7b59bc4523d"
+ integrity sha512-dEPCGX15eRRnu+TNBIGyEghpzE24fTDW8pHdJPJS/kCR3lafFqBLqKzBgZW6pMUuM70/ZDyFQ0Kynx9kWsXRNw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ rc-util "^5.0.0"
+ resize-observer-polyfill "^1.5.1"
+
+rc-select@^11.1.1:
+ version "11.1.3"
+ resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-11.1.3.tgz#acb6436e0ec389e1676903d9b514aa0d7565dbeb"
+ integrity sha512-Mf/EiYFmdWOoOget6RacSz1uAfn0hxf3wOa/YSOf7bw70EH6s80biDHQ4WPk8hNMxVRhzojlkktgmN4YxNQisQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^1.0.1"
+ rc-trigger "^4.3.0"
+ rc-util "^5.0.1"
+ rc-virtual-list "^1.1.2"
+ warning "^4.0.3"
+
+rc-select@~11.0.10:
+ version "11.0.13"
+ resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-11.0.13.tgz#fe5718af819d3e0bc12a55334bc1717257ef2dac"
+ integrity sha512-4/GDmBkGnDhYre3Dvq5UkIRXQJW8hbGdpdH8SjquSbCktAVitYV+opd/lKI28qMcBxCgjOHgYXwZ18TF+kP2VQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^1.0.1"
+ rc-trigger "^4.3.0"
+ rc-util "^5.0.1"
+ rc-virtual-list "^1.1.2"
+ warning "^4.0.3"
+
+rc-slider@~9.3.0:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.3.1.tgz#444012f3b4847d592b167a9cee6a1a46779a6ef4"
+ integrity sha512-c52PWPyrfJWh28K6dixAm0906L3/4MUIxqrNQA4TLnC/Z+cBNycWJUZoJerpwSOE1HdM3XDwixCsmtFc/7aWlQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ rc-tooltip "^4.0.0"
+ rc-util "^5.0.0"
+ shallowequal "^1.1.0"
+
+rc-steps@~4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-4.1.2.tgz#370f4c6b40d3888f03b271f1628953c66eb91c04"
+ integrity sha512-kTPiojPtJi12Y7whRqlydRgJXQ1u9JlvGchI6xDrmOMZVpCTLpfc/18iu+aHCtCZaSnM2ENU/9lfm/naWVFcRw==
+ dependencies:
+ "@babel/runtime" "^7.10.2"
+ classnames "^2.2.3"
+ rc-util "^5.0.1"
+
+rc-switch@~3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-3.2.0.tgz#aa36bb417409ff4cc7d542ec4381cb5d87cfedc1"
+ integrity sha512-WQZnRrWZ+KGh4Cd98FpP1ZgvMmebctoHzKAO2n1Xsry1FQBSGgIw4rQJRxET31VS/dR1LIKb5md/k0UzcXXc0g==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ rc-util "^5.0.1"
+
+rc-table@~7.8.0:
+ version "7.8.6"
+ resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.8.6.tgz#897fb1671c62eb3a46033b53f0690fa0fd65dc61"
+ integrity sha512-rHRStVTO6FYlxs5Bk9S56Vo/Jn7pX3hOtHTHP+Vu++i9SF7DroOReMIi+OJ7RA9n3jVBxyT/9+NESXgTFvPbYA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.5"
+ raf "^3.4.1"
+ rc-resize-observer "^0.2.0"
+ rc-util "^5.0.0"
+ shallowequal "^1.1.0"
+
+rc-tabs@~11.5.0:
+ version "11.5.6"
+ resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-11.5.6.tgz#bcff03f8c8dcc08b57ca97c0debe5d9fa3373957"
+ integrity sha512-Q2wqnt66SFksGXxNARLqGNMYIFH3KSm48+hMc4tq6qhgpsW104dedHcM86NUyqsQcvYWWiceUNu3TSnbe+XZnw==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ raf "^3.4.1"
+ rc-dropdown "^3.1.0"
+ rc-menu "^8.2.1"
+ rc-resize-observer "^0.2.1"
+ rc-trigger "^4.2.1"
+ rc-util "^5.0.0"
+
+rc-textarea@^0.3.0, rc-textarea@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-0.3.0.tgz#9860ef797e00717d8227d1ef4ee7895dd9358ddf"
+ integrity sha512-vrTPkPT6wrO7EI8ouLFZZLXA1pFVrVRCnkmyyf0yRComFbcH1ogmFEGu85CjVT96rQqAiQFOe0QV3nKopZOJow==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+ omit.js "^2.0.0"
+ rc-resize-observer "^0.2.3"
+
+rc-tooltip@^4.0.0, rc-tooltip@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-4.2.1.tgz#c1a2d5017ee03a771a9301c0dfdb46dfdf8fef94"
+ integrity sha512-oykuaGsHg7RFvPUaxUpxo7ScEqtH61C66x4JUmjlFlSS8gSx2L8JFtfwM1D68SLBxUqGqJObtxj4TED75gQTiA==
+ dependencies:
+ rc-trigger "^4.2.1"
+
+rc-tree-select@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-4.1.1.tgz#2d3c61f2449de72839eddf94ab876d3f6567692f"
+ integrity sha512-pawxt/W1chLpjtAEQe8mXI9C9DYNMGS/BR6eBmOY8cJDK6OWSa6M88S6F0jXc+A10D/CLfHAfF1ZIj7VGse+5Q==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-select "^11.1.1"
+ rc-tree "^3.8.0"
+ rc-util "^5.0.5"
+
+rc-tree@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-3.9.0.tgz#89de29a8ea5692447d01bbbda8931bd6b3e9b2e1"
+ integrity sha512-TYvIq2SKdVugS2mdOGC++CNWjj1VDBws4JZkFOAJVQfXFWg+BNW4rhuTzAs4ZY3KiE+1xG0u5cOVvIPr7qkxCA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^1.0.0"
+ rc-util "^5.0.0"
+ rc-virtual-list "^1.1.0"
+
+rc-tree@~3.8.0:
+ version "3.8.5"
+ resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-3.8.5.tgz#1f6d8c14a4f9263d5a426f7a24703a4c7be46ea3"
+ integrity sha512-audXUWwxyGB/4rLI4v+KuVucbc74y5t10XYQlR5WUe1J0sQuxP19+5GTb6DgrGXPxWOC6mxmkiw/xsKissE0GA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^1.0.0"
+ rc-util "^5.0.0"
+ rc-virtual-list "^1.1.0"
+
+rc-trigger@^4.0.0, rc-trigger@^4.2.1, rc-trigger@^4.3.0, rc-trigger@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-4.4.0.tgz#52be45c7b40327b297ebacff84d69ce9285606bc"
+ integrity sha512-09562wc5I1JUbCdWohcFYJeLTpjKjEqH+0lY7plDtyI9yFXRngrvmqsrSJyT6Nat+C35ymD7fhwCCPq3cfUI4g==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ raf "^3.4.1"
+ rc-align "^4.0.0"
+ rc-motion "^1.0.0"
+ rc-util "^5.0.1"
+
+rc-trigger@~4.3.0:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-4.3.5.tgz#0da18a324a2afd1fa7f91cc3d73edd545c484c80"
+ integrity sha512-OKIrgGVHnpQ16H/nuOjANrnufHx/tw4cvCuiWSM+XflahUlcqJu6UtlQzNTZ2BoNinC/9Eopx5I38jVD+xLvew==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.6"
+ raf "^3.4.1"
+ rc-align "^4.0.0"
+ rc-animate "^3.0.0"
+ rc-util "^5.0.1"
+
+rc-upload@~3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-3.2.0.tgz#251fc3c9105902e808600a414f368f285d63bfba"
+ integrity sha512-/vyOGVxl5QVM3ZE7s+GqYPbCLC/Q/vJq0sjdwnvJw01KvAR5kVOC4jbHEaU56dMss7PFGDfNzc8zO5bWYLDzVQ==
+ dependencies:
+ classnames "^2.2.5"
+
+rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.5, rc-util@^5.0.6:
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.6.tgz#2b828bc87a818a66384b813f76a561ad4609e9b0"
+ integrity sha512-uLGxF9WjbpJSjd6iDnIjl8ZeMUglpcuh1DwO26aaXh++yAmlB6eIAJMUwwJCuqJvo4quCvsDPg1VkqHILc4U0A==
+ dependencies:
+ react-is "^16.12.0"
+ shallowequal "^1.1.0"
+
+rc-virtual-list@^1.1.0, rc-virtual-list@^1.1.2:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-1.1.6.tgz#b255baf9aacde149a8893324e6307214094f4c0a"
+ integrity sha512-u3+izqWL8p8bQy8nYH48qWpiGyxR/ye8D2k0zJlXmfYeL55/xh83YrzHqiDzO78uj0Ewag3nXDA0JTVrYO7ygQ==
+ dependencies:
+ classnames "^2.2.6"
+ raf "^3.4.1"
+ rc-util "^5.0.0"
+
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@@ -18359,7 +18864,7 @@ react-window@1.8.5:
"@babel/runtime" "^7.0.0"
memoize-one ">=3.1.1 <6"
-react@16.13.1, react@^16.8.0:
+react@16.13.1, react@^16.0.0, react@^16.8.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
@@ -19103,7 +19608,7 @@ reserved-words@^0.1.2:
resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=
-resize-observer-polyfill@^1.5.1:
+resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
@@ -19434,6 +19939,13 @@ screenfull@^5.0.0:
resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.0.2.tgz#b9acdcf1ec676a948674df5cd0ff66b902b0bed7"
integrity sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ==
+scroll-into-view-if-needed@^2.2.25:
+ version "2.2.25"
+ resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.25.tgz#117b7bc7c61bc7a2b7872a0984bc73a19bc6e961"
+ integrity sha512-C8RKJPq9lK7eubwGpLbUkw3lklcG3Ndjmea2PyauzrA0i4DPlzAmVMGxaZrBFqCrVLfvJmP80IyHnv4jxvg1OQ==
+ dependencies:
+ compute-scroll-into-view "^1.0.14"
+
seek-bzip@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4"
@@ -19616,7 +20128,7 @@ shallow-compare@^1.2.2:
resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb"
integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==
-shallowequal@^1.1.0:
+shallowequal@^1.0.2, shallowequal@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
@@ -20373,6 +20885,11 @@ string-argv@0.3.1:
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
+string-convert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
+ integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c=
+
string-length@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
@@ -22640,7 +23157,7 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
-warning@^4.0.3:
+warning@^4.0.1, warning@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
@@ -23340,11 +23857,16 @@ xss@^1.0.6:
commander "^2.20.3"
cssfilter "0.0.10"
-xstate@^4.11.0, xstate@^4.9.1:
+xstate@^4.11.0:
version "4.11.0"
resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.11.0.tgz#dc0bd31079fe22918c2c27c118d6310bef3dcd9e"
integrity sha512-v+S3jF2YrM2tFOit8o7+4N3FuFd9IIGcIKHyfHeeNjMlmNmwuiv/IbY9uw7ECifx7H/A9aGLcxPSr0jdjTGDww==
+xstate@^4.9.1:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.9.1.tgz#da883ae0993b129ba0b54592c59b069963b0fe0a"
+ integrity sha512-cfNnRaBebnr1tvs0nHBUTyomfJx36+8MWwXceyNTZfjyELMM8nIoiBDcUzfKmpNlnAvs2ZPREos19cw6Zl4nng==
+
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"