From 217cb31ed2b1f9aae21df8eca7fa09e8dc17e8ef Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Wed, 4 Nov 2020 07:21:47 +1100 Subject: [PATCH] Add display user page --- api/src/graphql/users.sdl.js | 1 + api/src/services/users/users.js | 6 ++ web/src/Routes.js | 10 ++- web/src/components/Button/Button.js | 17 ++++++ web/src/components/Button/Button.stories.js | 10 +++ web/src/components/Button/Button.test.js | 11 ++++ .../components/ImageUploader/ImageUploader.js | 6 +- web/src/components/Svg/Svg.js | 2 +- web/src/components/User2Cell/User2Cell.js | 61 +++++++++++++++++++ web/src/layouts/MainLayout/MainLayout.js | 8 +-- web/src/pages/UserPage2/UserPage2.js | 12 ++++ 11 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 web/src/components/Button/Button.js create mode 100644 web/src/components/Button/Button.stories.js create mode 100644 web/src/components/Button/Button.test.js create mode 100644 web/src/components/User2Cell/User2Cell.js create mode 100644 web/src/pages/UserPage2/UserPage2.js diff --git a/api/src/graphql/users.sdl.js b/api/src/graphql/users.sdl.js index 4e25e97..44fe21a 100644 --- a/api/src/graphql/users.sdl.js +++ b/api/src/graphql/users.sdl.js @@ -15,6 +15,7 @@ export const schema = gql` type Query { users: [User!]! user(id: String!): User + userName(userName: String!): User } input CreateUserInput { diff --git a/api/src/services/users/users.js b/api/src/services/users/users.js index 9a10d66..5e4522b 100644 --- a/api/src/services/users/users.js +++ b/api/src/services/users/users.js @@ -10,6 +10,12 @@ export const user = ({ id }) => { }) } +export const userName = ({ userName }) => { + return db.user.findOne({ + where: { userName }, + }) +} + export const createUser = ({ input }) => { return db.user.create({ data: input, diff --git a/web/src/Routes.js b/web/src/Routes.js index 257a6ee..798f9e5 100644 --- a/web/src/Routes.js +++ b/web/src/Routes.js @@ -12,6 +12,13 @@ import { Router, Route, Private } from '@redwoodjs/router' const Routes = () => { return ( + + {/* */} + + + + + {/* GENERATED ROUTES BELOW, probably going to clean these up and delete most of them, but the CRUD functionality is useful for now */} @@ -28,9 +35,6 @@ const Routes = () => { - - {/* */} - ) } diff --git a/web/src/components/Button/Button.js b/web/src/components/Button/Button.js new file mode 100644 index 0000000..38277a1 --- /dev/null +++ b/web/src/components/Button/Button.js @@ -0,0 +1,17 @@ +import Svg from 'src/components/Svg' + +const Button = ({onClick, children}) => { + return ( +
+ +
+ ) +} + +export default Button diff --git a/web/src/components/Button/Button.stories.js b/web/src/components/Button/Button.stories.js new file mode 100644 index 0000000..7d95d2d --- /dev/null +++ b/web/src/components/Button/Button.stories.js @@ -0,0 +1,10 @@ +import Button from './Button' + +export const generated = () => { + return <> + button with icon + + +} + +export default { title: 'Components/Button' } diff --git a/web/src/components/Button/Button.test.js b/web/src/components/Button/Button.test.js new file mode 100644 index 0000000..b0f1d6e --- /dev/null +++ b/web/src/components/Button/Button.test.js @@ -0,0 +1,11 @@ +import { render } from '@redwoodjs/testing' + +import Button from './Button' + +describe('Button', () => { + it('renders successfully', () => { + expect(() => { + render(} {isEditable && } - {(cloudinaryId || !isEditable) &&
+ {(cloudinaryId || !isEditable) &&
{ } - return
+ return
{svgs[name]}
} diff --git a/web/src/components/User2Cell/User2Cell.js b/web/src/components/User2Cell/User2Cell.js new file mode 100644 index 0000000..791cbb7 --- /dev/null +++ b/web/src/components/User2Cell/User2Cell.js @@ -0,0 +1,61 @@ +import User from 'src/components/User' +import {Fragment} from 'react' +import ImageUploader from 'src/components/ImageUploader' +import Button from 'src/components/Button' +import Editor from "rich-markdown-editor"; + +export const QUERY = gql` + query FIND_USER_BY_ID($userName: String!) { + user: userName(userName: $userName) { + id + userName + email + createdAt + updatedAt + image + bio + } + } +` + +export const Loading = () =>
Loading...
+ +export const Empty = () =>
User not found
+ +export const Success = ({ user }) => { + const {userName, email} = user + const keyValueDisplay = Object.entries({userName, name: email}) // TODO add name field to user + return ( + <> +
+
+
+ +
+
+
+ {keyValueDisplay.map(([property, value]) => ( + {property}: + {value} + ))} +
+ +
+
+
+

Bio:

+
+ +
+
+
+ + ) +} diff --git a/web/src/layouts/MainLayout/MainLayout.js b/web/src/layouts/MainLayout/MainLayout.js index 7e00667..5baf22d 100644 --- a/web/src/layouts/MainLayout/MainLayout.js +++ b/web/src/layouts/MainLayout/MainLayout.js @@ -16,11 +16,9 @@ const MainLayout = ({ children }) => {
  • - - - - - +
    + +
  • diff --git a/web/src/pages/UserPage2/UserPage2.js b/web/src/pages/UserPage2/UserPage2.js new file mode 100644 index 0000000..efc80bb --- /dev/null +++ b/web/src/pages/UserPage2/UserPage2.js @@ -0,0 +1,12 @@ +import MainLayout from 'src/layouts/MainLayout' +import User2Cell from 'src/components/User2Cell' + +const UserPage = ({ userName }) => { + return ( + + + + ) +} + +export default UserPage