Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 13 additions & 37 deletions src/App.css
Original file line number Diff line number Diff line change
@@ -1,38 +1,14 @@
.App {
text-align: center;
}

.App-logo {
height: 40vmin;
pointer-events: none;
}

@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
.App{
height: 100vh;
}

.form-container {
display: flex;
flex-direction: column;
padding: 2rem;
width: 30rem;
margin: 5rem auto;
border: 1px solid #ccc;
border-radius: 8px;
background-color: #f9f9f9;
}
}

.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}

.App-link {
color: #61dafb;
}

@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
46 changes: 29 additions & 17 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,36 @@
import logo from './logo.svg';
import './App.css';
import "./App.css";
import "bulma/css/bulma.css";
import Navbar from "./components/Navbar.js";
import FormField from "./components/FormField.js";
import SignupForm from "./components/SignupForm.js";
import { useState } from "react";


function App() {
const [showSignUp, setShowSignUp] = useState(false);
const [showLogin, setShowLogin] = useState(true);


const handleSignUpClick = () => {
setShowSignUp(!showSignUp);
setShowLogin(false);
};

const handleLoginClick = () => {
setShowLogin(true);
setShowSignUp(false);
};
return (

<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
<Navbar onLoginClick={handleLoginClick} onSignUpClick={handleSignUpClick} />
{showSignUp && <SignupForm />}
{showLogin && (
<div className="form-container">
<FormField label="Name" type="text" placeholder="e.g Alex Smith" />
<FormField label="Email" type="email" placeholder="e.g. alexsmith@gmail.com" />
</div>)}
</div>
);
}

Expand Down
8 changes: 0 additions & 8 deletions src/App.test.js

This file was deleted.

48 changes: 48 additions & 0 deletions src/components/CoolButton.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React from 'react';

export default function CoolButton(props) {
const bulmaClassesMap = {
isCentered: 'is-centered',
isActive: 'is-active',
isBlack: 'is-black',
isDanger: 'is-danger',
isDark: 'is-dark',
isFocused: 'is-focused',
isGrouped: 'is-grouped',
isHovered: 'is-hovered',
isInfo: 'is-info',
isInverted: 'is-inverted',
isLarge: 'is-large',
isLight: 'is-light',
isLink: 'is-link',
isLoading: 'is-loading',
isMedium: 'is-medium',
isOutlined: 'is-outlined',
isPrimary: 'is-primary',
isRight: 'is-right',
isRounded: 'is-rounded',
isSelected: 'is-selected',
isSmall: 'is-small',
isStatic: 'is-static',
isSuccess: 'is-success',
isText: 'is-text',
isWarning: 'is-warning',
isWhite: 'is-white'
};

// Start with the base "button" class
let classNames = 'button';

// Iterate over the props to add corresponding Bulma classes
Object.keys(bulmaClassesMap).forEach((key) => {
if (props[key]) {
classNames += ` ${bulmaClassesMap[key]}`;
}
});

return (
<button className={classNames} onClick={props.onClick}>
{props.children}
</button>
);
}
21 changes: 21 additions & 0 deletions src/components/FormField.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
.field {
margin-bottom: 1rem;
}

.label {
font-weight: bold;
margin-bottom: 0.5rem;
}

.control {
display: flex;
align-items: center;
}

.input {
padding: 0.5rem;
font-size: 1rem;
border: 1px solid #ccc;
border-radius: 4px;
}

15 changes: 15 additions & 0 deletions src/components/FormField.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import React from 'react';
import './FormField.css';

const FormField = ({ label, type, placeholder }) => {
return (
<div className="field">
<label className="label">{label}</label>
<div className="control">
<input className="input" type={type} placeholder={placeholder} />
</div>
</div>
);
};

export default FormField;
24 changes: 24 additions & 0 deletions src/components/Navbar.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
.Navbar{
height: 3rem;
background-color: rgb(255, 255, 255);
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: solid 2px rgb(99, 99, 99);
}

.navbarsides{
display: flex;
gap: 20px;
padding: 0 20px;
align-items: center;
}

.bulmaLogo{
width: 9rem;
}

.right-navbar>button{
padding: 7px 10px;
border-radius: 5px;
}
19 changes: 19 additions & 0 deletions src/components/Navbar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import "./Navbar.css"
import React from 'react'
import BulmaLogo from "../images/bulma-logo.png"
import CoolButton from "./CoolButton"

export default function Navbar({ onSignUpClick, onLoginClick }) {
return (
<div className="Navbar is-transparent">
<div className="left-navbar navbarsides">
<div><img className="bulmaLogo" src={BulmaLogo} alt="bulma-logo"></img></div>
<div>Home</div>
</div>
<div className="right-navbar navbarsides">
<CoolButton isInfo onClick={onLoginClick}>Login</CoolButton>
<CoolButton isPrimary onClick={onSignUpClick}>Signup</CoolButton>
</div>
</div>
)
}
17 changes: 17 additions & 0 deletions src/components/SignupForm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import React from 'react'
import FormField from './FormField'
import Navbar from './Navbar'
import CoolButton from './CoolButton'

export default function SignupForm() {
return (
<div>
<form className="form-container">
<FormField label="Name" type="text" placeholder="e.g Alex Smith" />
<FormField label="Email" type="email" placeholder="e.g. alexsmith@gmail.com" />
<FormField label="Password" type="email" placeholder="e.g. alexsmith@gmail.com" />
<CoolButton isPrimary>Submit </CoolButton>
</form>
</div>
)
}
Binary file added src/images/bulma-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 1 addition & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
Expand All @@ -11,7 +11,3 @@ root.render(
</React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
1 change: 0 additions & 1 deletion src/logo.svg

This file was deleted.

13 changes: 0 additions & 13 deletions src/reportWebVitals.js

This file was deleted.

5 changes: 0 additions & 5 deletions src/setupTests.js

This file was deleted.