diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 0c3f3eb7..785b13c6 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -5,9 +5,9 @@ "license": "MIT", "devDependencies": { "@typescript-eslint/eslint-plugin": "^4.0.0", - "@typescript-eslint/parser": "^3.7.0", + "@typescript-eslint/parser": "^4.22.0", "eslint": "^7.5.0", - "eslint-config-prettier": "^6.11.0", + "eslint-config-prettier": "^8.3.0", "eslint-config-standard": "^16.0.2", "eslint-import-resolver-typescript": "^2.0.0", "eslint-plugin-import": "^2.22.0", diff --git a/packages/front/contexts/FlightsContext.tsx b/packages/front/contexts/FlightsContext.tsx new file mode 100644 index 00000000..d6de53f4 --- /dev/null +++ b/packages/front/contexts/FlightsContext.tsx @@ -0,0 +1,83 @@ +import Flight from '@mach/common' +import { createContext, FC, useCallback, useReducer } from 'react' +import getFlights, { GetFlightsQuery } from '../actions/get-flights' + +type FlightsState = { + data: { items: Flight[]; count: number; query?: GetFlightsQuery } + loading: boolean + error: Error | null +} + +type FlightsContextData = { + state: FlightsState + loadFlights: (params: GetFlightsQuery) => Promise +} + +const FlightsContext = createContext({} as FlightsContextData) + +const initialState = { + data: { items: [], count: 0, query: null }, + loading: false, + error: null +} + +const reducer = ( + state: FlightsState, + action: { + type: FlightsActions + payload?: any + } +): typeof state => { + switch (action.type) { + case 'LOAD_FLIGHTS_INIT': + return { + ...state, + data: { ...state.data, query: action.payload }, + loading: true, + error: null + } + case 'LOAD_FLIGHTS_SUCCESS': + return { + ...state, + data: { ...state.data, ...action.payload }, + loading: false, + error: null + } + case 'LOAD_FLIGHTS_ERROR': + return { + ...state, + data: { items: [], count: 0 }, + loading: false, + error: action.payload + } + default: + throw new Error('Invalid operation provided') + } +} + +type FlightsActions = + | 'LOAD_FLIGHTS_INIT' + | 'LOAD_FLIGHTS_SUCCESS' + | 'LOAD_FLIGHTS_ERROR' + +const FlightsProvider: FC = ({ children }) => { + const [state, dispatch] = useReducer(reducer, initialState) + + const loadFlights = useCallback(async (params: GetFlightsQuery) => { + try { + dispatch({ type: 'LOAD_FLIGHTS_INIT', payload: params }) + const payload = await getFlights(params) + dispatch({ type: 'LOAD_FLIGHTS_SUCCESS', payload }) + } catch (error) { + dispatch({ type: 'LOAD_FLIGHTS_ERROR', payload: error }) + } + }, []) + + return ( + + {children} + + ) +} + +export { FlightsContext, FlightsProvider } diff --git a/packages/front/package.json b/packages/front/package.json index dacd9c62..e1cd21c6 100644 --- a/packages/front/package.json +++ b/packages/front/package.json @@ -11,10 +11,10 @@ "@mach/common": "^4.1.5", "bootstrap": "^4.5.2", "next": "^10.2.0", - "react": "^16.13.1", + "react": "^17.0.2", "react-bootstrap": "^1.3.0", "react-data-table-component": "^6.11.5", - "react-dom": "^16.13.1", + "react-dom": "^17.0.2", "styled-components": "^5.2.0" }, "devDependencies": { diff --git a/packages/front/pages/_app.tsx b/packages/front/pages/_app.tsx index f0519238..dee903c4 100755 --- a/packages/front/pages/_app.tsx +++ b/packages/front/pages/_app.tsx @@ -1,12 +1,17 @@ -import React, { useEffect } from 'react' import 'bootstrap/dist/css/bootstrap.min.css' import { AppProps } from 'next/app' +import React, { useEffect } from 'react' +import { FlightsProvider } from '../contexts/FlightsContext' const App: React.FC = ({ Component, pageProps }) => { useEffect(() => { document.title = 'Mach - Flight Planning' - }) - return + }, []) + return ( + + + + ) } export default App diff --git a/packages/front/pages/index.tsx b/packages/front/pages/index.tsx index 7f277e3c..5346c32f 100755 --- a/packages/front/pages/index.tsx +++ b/packages/front/pages/index.tsx @@ -1,36 +1,36 @@ import { useRouter } from 'next/router' -import React from 'react' +import React, { useContext } from 'react' import Alert from 'react-bootstrap/Alert' import Button from 'react-bootstrap/Button' import Form from 'react-bootstrap/Form' import { GetFlightsQuery } from '../actions/get-flights' +import { FlightsContext } from '../contexts/FlightsContext' import BaseLayout from '../layouts/base-layout' +import sanitizeParameters from '../utils/sanitize-parameters' const Home: React.FC = () => { const router = useRouter() - const [parameters, setParameters] = React.useState>({ + const { state, loadFlights } = useContext(FlightsContext) + const [parameters, setParameters] = React.useState({ departureIcao: '', - arrivalIcao: '' + arrivalIcao: '', + limit: 10, + offset: 0 }) - const [error, setError] = React.useState('') - const handleSubmit = evt => { + const handleSubmit = async evt => { evt.preventDefault() - if (!parameters.departureIcao && !parameters.arrivalIcao) { - setError('Fill at least one of the fields') - return - } - - router.replace({ - pathname: 'search', - query: parameters - }) + await loadFlights(parameters) + router.replace({ pathname: 'search' }) } const handleChange = event => { - const updated = {} - updated[event.target.name] = event.target.value.toUpperCase() - setParameters({ ...parameters, ...updated }) + setParameters( + sanitizeParameters({ + ...parameters, + [event.target.name]: event.target.value.toUpperCase() + }) + ) } return ( @@ -59,14 +59,19 @@ const Home: React.FC = () => { placeholder="SBRF" /> - - {error && ( + {state.error && ( - {error} + {state.error.message} )} diff --git a/packages/front/pages/search.tsx b/packages/front/pages/search.tsx index 554e8140..9668057b 100644 --- a/packages/front/pages/search.tsx +++ b/packages/front/pages/search.tsx @@ -1,36 +1,16 @@ import { NextPage } from 'next' -import { useRouter } from 'next/router' -import React from 'react' -import getFlights, { GetFlightsQuery } from '../actions/get-flights' +import React, { useContext } from 'react' +import { GetFlightsQuery } from '../actions/get-flights' import FlightModal from '../components/flight-modal' import ResultsLead from '../components/results-lead' import SearchTable from '../components/search-table' +import { FlightsContext } from '../contexts/FlightsContext' import BaseLayout from '../layouts/base-layout' import makeBlankFlight from '../utils/make-blank-flight' -const buildParameters = query => { - const parameters: GetFlightsQuery = { - offset: 0, - limit: 10 - } - - if (query.departureIcao) { - parameters.departureIcao = query.departureIcao as string - } - if (query.arrivalIcao) { - parameters.arrivalIcao = query.arrivalIcao as string - } - - return parameters -} - const Search: NextPage = () => { - const { query } = useRouter() - - const [parameters, setParameters] = React.useState(buildParameters(query)) - const [loading, setLoading] = React.useState(true) + const { state, loadFlights } = useContext(FlightsContext) const [show, setShow] = React.useState(false) - const [apiResponse, setApiResponse] = React.useState({ count: 0, items: [] }) const [flight, setFlight] = React.useState(makeBlankFlight()) const handleClose = () => setShow(false) @@ -39,30 +19,14 @@ const Search: NextPage = () => { setShow(true) } - const loadFlights = async () => { - try { - setLoading(true) - setApiResponse(await getFlights(parameters)) - } catch (error) { - setApiResponse({ count: 0, items: [] }) - console.error(error) - } finally { - setLoading(false) - } - } - - React.useEffect(() => { - loadFlights() - }, [parameters]) - return ( - + setParameters({ ...parameters, offset })} + loading={state.loading} + data={state.data.items} + count={state.data.count} + onOffsetChange={offset => loadFlights({ ...state.data.query, offset })} onDetailsShow={handleShow} /> diff --git a/packages/front/utils/sanitize-parameters.ts b/packages/front/utils/sanitize-parameters.ts new file mode 100644 index 00000000..b0d42aa3 --- /dev/null +++ b/packages/front/utils/sanitize-parameters.ts @@ -0,0 +1,7 @@ +import { GetFlightsQuery } from '../actions/get-flights' + +export default function sanitizeParameters(params: Partial) { + return Object.fromEntries( + Object.entries(params).filter(([_, v]) => v != '') + ) as GetFlightsQuery +} diff --git a/yarn.lock b/yarn.lock index c8519bbb..69ff9778 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,11 +1575,6 @@ dependencies: "@types/node" "*" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/express-serve-static-core@^4.17.18": version "4.17.19" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz#00acfc1632e729acac4f1530e9e16f6dd1508a1d" @@ -1664,9 +1659,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.1": - version "15.0.1" - resolved "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" - integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== + version "15.0.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.2.tgz#51e9c0920d1b45936ea04341aa3e2e58d339fb67" + integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1706,9 +1701,9 @@ "@types/react" "*" "@types/react@*", "@types/react@>=16.9.11", "@types/react@>=16.9.35", "@types/react@^17.0.4": - version "17.0.4" - resolved "https://registry.npmjs.org/@types/react/-/react-17.0.4.tgz#a67c6f7a460d2660e950d9ccc1c2f18525c28220" - integrity sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw== + version "17.0.5" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.5.tgz#3d887570c4489011f75a3fc8f965bf87d09a1bea" + integrity sha512-bj4biDB9ZJmGAYTWSKJly6bMr4BLUiBrx9ujiJEoP9XIDY9CTaPGxE5QWN/1WjpPLzYF7/jRNnV2nNxNe970sw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1750,111 +1745,73 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.0.0.tgz#99349a501447fed91de18346705c0c65cf603bee" - integrity sha512-5e6q1TR7gS2P+8W2xndCu7gBh3BzmYEo70OyIdsmCmknHha/yNbz2vdevl+tP1uoaMOcrzg4gyrAijuV3DDBHA== + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.1.tgz#6bcdbaa4548553ab861b4e5f34936ead1349a543" + integrity sha512-kVTAghWDDhsvQ602tHBc6WmQkdaYbkcTwZu+7l24jtJiYvm9l+/y/b2BZANEezxPDiX5MK2ZecE+9BFi/YJryw== dependencies: - "@typescript-eslint/experimental-utils" "4.0.0" - "@typescript-eslint/scope-manager" "4.0.0" + "@typescript-eslint/experimental-utils" "4.22.1" + "@typescript-eslint/scope-manager" "4.22.1" debug "^4.1.1" functional-red-black-tree "^1.0.1" + lodash "^4.17.15" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@3.10.1": - version "3.10.1" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/experimental-utils@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.0.0.tgz#fbec21a3b5ab59127edb6ce2e139ed378cc50eb5" - integrity sha512-hbX6zR+a/vcpFVNJYN/Nbd7gmaMosDTxHEKcvmhWeWcq/0UDifrqmCfkkodbAKL46Fn4ekSBMTyq2zlNDzcQxw== +"@typescript-eslint/experimental-utils@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz#3938a5c89b27dc9a39b5de63a62ab1623ab27497" + integrity sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.0.0" - "@typescript-eslint/types" "4.0.0" - "@typescript-eslint/typescript-estree" "4.0.0" + "@typescript-eslint/scope-manager" "4.22.1" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/typescript-estree" "4.22.1" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^3.7.0": - version "3.10.1" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" - integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== +"@typescript-eslint/parser@^4.22.0": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.1.tgz#a95bda0fd01d994a15fc3e99dc984294f25c19cc" + integrity sha512-l+sUJFInWhuMxA6rtirzjooh8cM/AATAe3amvIkqKFeMzkn85V+eLzb1RyuXkHak4dLfYzOmF6DXPyflJvjQnw== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.10.1" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/scope-manager" "4.22.1" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/typescript-estree" "4.22.1" + debug "^4.1.1" -"@typescript-eslint/scope-manager@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.0.0.tgz#8c9e3b3b8cdf5a1fbe671d9fad73ff67bc027ea8" - integrity sha512-9gcWUPoWo7gk/+ZQPg7L1ySRmR5HLIy3Vu6/LfhQbuzIkGm6v2CGIjpVRISoDLFRovNRDImd4aP/sa8O4yIEBg== +"@typescript-eslint/scope-manager@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.1.tgz#5bb357f94f9cd8b94e6be43dd637eb73b8f355b4" + integrity sha512-d5bAiPBiessSmNi8Amq/RuLslvcumxLmyhf1/Xa9IuaoFJ0YtshlJKxhlbY7l2JdEk3wS0EnmnfeJWSvADOe0g== dependencies: - "@typescript-eslint/types" "4.0.0" - "@typescript-eslint/visitor-keys" "4.0.0" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/visitor-keys" "4.22.1" -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== - -"@typescript-eslint/types@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.0.0.tgz#ec1f9fc06b8558a1d5afa6e337182d08beece7f5" - integrity sha512-bK+c2VLzznX2fUWLK6pFDv3cXGTp7nHIuBMq1B9klA+QCsqLHOOqe5TQReAQDl7DN2RfH+neweo0oC5hYlG7Rg== +"@typescript-eslint/types@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.1.tgz#bf99c6cec0b4a23d53a61894816927f2adad856a" + integrity sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw== -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== +"@typescript-eslint/typescript-estree@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz#dca379eead8cdfd4edc04805e83af6d148c164f9" + integrity sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A== dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/typescript-estree@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.0.0.tgz#2244c63de2f2190bc5718eb0fb3fd2c437d42097" - integrity sha512-ewFMPi2pMLDNIXGMPdf8r7El2oPSZw9PEYB0j+WcpKd7AX2ARmajGa7RUHTukllWX2bj4vWX6JLE1Oih2BMokA== - dependencies: - "@typescript-eslint/types" "4.0.0" - "@typescript-eslint/visitor-keys" "4.0.0" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/visitor-keys" "4.22.1" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" - lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== - dependencies: - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/visitor-keys@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.0.0.tgz#e2bbb69d98076d6a3f06abcb2048225a74362c33" - integrity sha512-sTouJbv6rjVJeTE4lpSBVYXq/u5K3gbB6LKt7ccFEZPTZB/VeQ0ssUz9q5Hx++sCqBbdF8PzrrgvEnicXAR6NQ== +"@typescript-eslint/visitor-keys@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz#6045ae25a11662c671f90b3a403d682dfca0b7a6" + integrity sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ== dependencies: - "@typescript-eslint/types" "4.0.0" + "@typescript-eslint/types" "4.22.1" eslint-visitor-keys "^2.0.0" JSONStream@^1.0.4: @@ -3679,12 +3636,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.11.0: - version "6.15.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== eslint-config-standard@^16.0.2: version "16.0.2" @@ -4394,11 +4349,6 @@ get-stdin@^4.0.1: resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -7794,15 +7744,14 @@ react-data-table-component@^6.11.5: lodash.orderby "^4.6.0" shortid "^2.2.16" -react-dom@^16.13.1: - version "16.14.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.20.2" react-is@16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" @@ -7848,14 +7797,13 @@ react-transition-group@^4.4.1: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^16.13.1: - version "16.14.0" - resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" read-cmd-shim@^2.0.0: version "2.0.0" @@ -8301,10 +8249,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1"