From c5d347272169c5c106c0eb664841e071bf0a5687 Mon Sep 17 00:00:00 2001 From: benjaminramey Date: Tue, 26 May 2020 23:18:08 -0500 Subject: [PATCH] working run detail and routing! --- package-lock.json | 96 ++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/App.js | 36 +++------------- src/components/Home.js | 43 +++++++++++++++++++ src/components/Run.js | 35 +++++++++++++++ src/index.js | 7 ++- 6 files changed, 186 insertions(+), 32 deletions(-) create mode 100644 src/components/Home.js create mode 100644 src/components/Run.js diff --git a/package-lock.json b/package-lock.json index 6ff8552..d780010 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7641,6 +7641,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -7651,6 +7664,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -9574,6 +9595,15 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=" }, + "mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "requires": { + "@babel/runtime": "^7.5.5", + "tiny-warning": "^1.0.3" + } + }, "mini-css-extract-plugin": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", @@ -12130,6 +12160,52 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", @@ -12533,6 +12609,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -14013,6 +14094,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -14389,6 +14480,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 7e17d0b..b8576ad 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "aws-amplify": "^3.0.12", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", "react-scripts": "3.4.1" }, "scripts": { diff --git a/src/App.js b/src/App.js index 700c689..9862090 100644 --- a/src/App.js +++ b/src/App.js @@ -1,38 +1,14 @@ /* src/App.js */ -import React, { useState } from 'react' -import { API, graphqlOperation } from 'aws-amplify' -import { createRun } from './graphql/mutations' - -const initialState = { name: '' } +import React from 'react'; +import { Route } from 'react-router-dom'; +import Home from './components/Home'; +import Run from './components/Run'; const App = () => { - const [formState, setFormState] = useState(initialState) - - function setInput(key, value) { - setFormState({ ...formState, [key]: value }) - } - - async function addRun() { - try { - if (!formState.name) return; - const run = { ...formState } - setFormState(initialState) - await API.graphql(graphqlOperation(createRun, { input: run })) - } - catch (err) { - console.log('error creating todo:', err) - } - } - return (
-

Start a run

- setInput('name', event.target.value)} - value={formState.name} - placeholder="Name" - /> - + +
) } diff --git a/src/components/Home.js b/src/components/Home.js new file mode 100644 index 0000000..4d211f2 --- /dev/null +++ b/src/components/Home.js @@ -0,0 +1,43 @@ +/* src/components/Home.js */ +import React, { useState } from 'react'; +import { useHistory } from 'react-router-dom'; +import { API, graphqlOperation } from 'aws-amplify'; +import { createRun } from '../graphql/mutations'; + +const initialState = { name: '' }; + +const Home = () => { + const [formState, setFormState] = useState(initialState); + const history = useHistory(); + + function setInput(key, value) { + setFormState({ ...formState, [key]: value }) + } + + async function addRun() { + try { + if (!formState.name) return; + const run = { ...formState } + setFormState(initialState) + let response = await API.graphql(graphqlOperation(createRun, { input: run })) + history.push("/run/" + response.data.createRun.id); + } + catch (err) { + console.log('error creating todo:', err) + } + } + + return ( +
+

Start a run

+ setInput('name', event.target.value)} + value={formState.name} + placeholder="Name" + /> + +
+ ) +} + +export default Home; \ No newline at end of file diff --git a/src/components/Run.js b/src/components/Run.js new file mode 100644 index 0000000..097f365 --- /dev/null +++ b/src/components/Run.js @@ -0,0 +1,35 @@ +/* src/components/Run.js */ +import React, { useState, useEffect, useCallback } from 'react'; +import { API, graphqlOperation } from 'aws-amplify'; +import { getRun } from '../graphql/queries'; +import { useParams } from 'react-router-dom'; + +const Run = () => { + const [run, setRun] = useState({}); + const { id } = useParams(); + + const loadRun = useCallback(async () => { + try { + let response = await API.graphql(graphqlOperation(getRun, { id: id })); + setRun(response.data.getRun); + } + catch (err) { + console.log('error creating todo:', err) + } + }, [id]); + + useEffect(() => { + loadRun(); + }, [loadRun]); + + return ( +
+

A run

+

+ {run.name} +

+
+ ) +} + +export default Run; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 2d8ebee..f09c2a6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,18 @@ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; +import { BrowserRouter } from 'react-router-dom'; import App from './App'; import * as serviceWorker from './serviceWorker'; import Amplify from "aws-amplify"; import awsExports from "./aws-exports"; -Amplify.configure(awsExports); +Amplify.configure(awsExports); ReactDOM.render( - + + + , document.getElementById('root') );