Skip to content

Commit 247306f

Browse files
committed
Update React Project
1 parent 665c82c commit 247306f

File tree

5 files changed

+76
-0
lines changed

5 files changed

+76
-0
lines changed

frontend/src/App.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import EventDetailPage, {
1212
} from './pages/EventDetail';
1313
import EditEventPage from './pages/EditEvent';
1414
import NewEventPage from './pages/NewEvent';
15+
import NewsletterPage, { action as newsletterAction } from './pages/Newsletter';
1516
import { action as manipulateEventAction } from './components/EventForm';
1617

1718
const router = createBrowserRouter([
@@ -54,6 +55,11 @@ const router = createBrowserRouter([
5455
},
5556
],
5657
},
58+
{
59+
path: 'newsletter',
60+
element: <NewsletterPage />,
61+
action: newsletterAction,
62+
},
5763
],
5864
},
5965
]);

frontend/src/components/MainNavigation.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { NavLink } from 'react-router-dom';
33

4+
import NewsletterSignup from './NewsletterSignup';
45
import classes from './MainNavigation.module.css';
56

67
function MainNavigation() {
@@ -29,8 +30,19 @@ function MainNavigation() {
2930
Events
3031
</NavLink>
3132
</li>
33+
<li>
34+
<NavLink
35+
to="/newsletter"
36+
className={({ isActive }) =>
37+
isActive ? classes.active : undefined
38+
}
39+
>
40+
Newsletter
41+
</NavLink>
42+
</li>
3243
</ul>
3344
</nav>
45+
<NewsletterSignup />
3446
</header>
3547
);
3648
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react';
2+
import classes from './NewsletterSignup.module.css';
3+
4+
function NewsletterSignup() {
5+
return (
6+
<form method="post" className={classes.newsletter}>
7+
<input
8+
type="email"
9+
placeholder="Sign up for newsletter..."
10+
aria-label="Sign up for newsletter"
11+
/>
12+
<button>Sign up</button>
13+
</form>
14+
);
15+
}
16+
17+
export default NewsletterSignup;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
.newsletter input,
2+
.newsletter button {
3+
font: inherit;
4+
padding: 0.25rem 0.75rem;
5+
border-radius: 0;
6+
border: none;
7+
}
8+
9+
.newsletter button {
10+
border-top-right-radius: 4px;
11+
border-bottom-right-radius: 4px;
12+
cursor: pointer;
13+
}
14+
15+
.newsletter button:hover {
16+
background-color: var(--color-primary-300);
17+
color: var(--color-gray-800);
18+
}

frontend/src/pages/Newsletter.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from 'react';
2+
3+
import NewsletterSignup from '../components/NewsletterSignup';
4+
import PageContent from '../components/PageContent';
5+
6+
function NewsletterPage() {
7+
return (
8+
<PageContent title="Join our awesome newsletter!">
9+
<NewsletterSignup />
10+
</PageContent>
11+
);
12+
}
13+
14+
export default NewsletterPage;
15+
16+
export async function action({ request }) {
17+
const data = await request.formData();
18+
const email = data.get('email');
19+
20+
// send to backend newsletter server ...
21+
console.log(email);
22+
return { message: 'Signup successful!' };
23+
}

0 commit comments

Comments
 (0)