Skip to content

Commit

Permalink
✨ Added Next.js example code
Browse files Browse the repository at this point in the history
  • Loading branch information
lukecarr committed Nov 17, 2021
1 parent 137fbbc commit e67219f
Show file tree
Hide file tree
Showing 10 changed files with 3,217 additions and 0 deletions.
16 changes: 16 additions & 0 deletions examples/nextjs/data/books.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"books": [
{
"id": "1",
"name": "The Da Vinci Code",
"author": "Dan Brown",
"publisher": "Transworld"
},
{
"id": "2",
"name": "Harry Potter and the Deathly Hallows",
"author": "J.K. Rowling",
"publisher": "Bloomsbury"
}
]
}
3 changes: 3 additions & 0 deletions examples/nextjs/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
reactStrictMode: true,
}
20 changes: 20 additions & 0 deletions examples/nextjs/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "nextjs",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@moducate/houston": "../..",
"next": "12.0.4",
"react": "17.0.2",
"react-dom": "17.0.2"
},
"devDependencies": {
"eslint": "7",
"eslint-config-next": "12.0.4"
}
}
7 changes: 7 additions & 0 deletions examples/nextjs/pages/_app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import '../styles/globals.css'

function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}

export default MyApp
30 changes: 30 additions & 0 deletions examples/nextjs/pages/api/books/[id].js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { withError } from '@moducate/houston'

const books = [
{
id: '1',
name: 'The Da Vinci Code',
author: 'Dan Brown',
publisher: 'Transworld'
},
{
id: '2',
name: 'Harry Potter and the Deathly Hallows',
author: 'J.K. Rowling',
publisher: 'Bloomsbury'
}
]

export default function handler({ query }, res) {
const book = books.find(x => x.id === query.id)
if (book) {
return res.json(book)
}
return withError(res, {
type: 'https://express.example.com/not-found',
status: 404,
instance: `/books/${query.id}`,
title: 'Book not found.',
detail: `No book was found with the ID '${query.id}'.`
})
}
5 changes: 5 additions & 0 deletions examples/nextjs/pages/api/books/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { books } from "../../../data/books.json"

export default function handler(_, res) {
return res.json(books)
}
48 changes: 48 additions & 0 deletions examples/nextjs/pages/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import styles from '../styles/Home.module.css'

export default function Home() {
return (
<div className={styles.container}>
<main className={styles.main}>
<h1 className={styles.title}>
Welcome to <a href="https://nextjs.org">Next.js!</a>
</h1>

<p className={styles.description}>
Get started by editing{' '}
<code className={styles.code}>pages/index.js</code>
</p>

<div className={styles.grid}>
<a href="https://nextjs.org/docs" className={styles.card}>
<h2>Documentation &rarr;</h2>
<p>Find in-depth information about Next.js features and API.</p>
</a>

<a href="https://nextjs.org/learn" className={styles.card}>
<h2>Learn &rarr;</h2>
<p>Learn about Next.js in an interactive course with quizzes!</p>
</a>

<a
href="https://github.com/vercel/next.js/tree/master/examples"
className={styles.card}
>
<h2>Examples &rarr;</h2>
<p>Discover and deploy boilerplate example Next.js projects.</p>
</a>

<a
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
className={styles.card}
>
<h2>Deploy &rarr;</h2>
<p>
Instantly deploy your Next.js site to a public URL with Vercel.
</p>
</a>
</div>
</main>
</div>
)
}
100 changes: 100 additions & 0 deletions examples/nextjs/styles/Home.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
.container {
padding: 0 2rem;
}

.main {
min-height: 100vh;
padding: 4rem 0;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

.title a {
color: #0070f3;
text-decoration: none;
}

.title a:hover,
.title a:focus,
.title a:active {
text-decoration: underline;
}

.title {
margin: 0;
line-height: 1.15;
font-size: 4rem;
}

.title,
.description {
text-align: center;
}

.description {
margin: 4rem 0;
line-height: 1.5;
font-size: 1.5rem;
}

.code {
background: #fafafa;
border-radius: 5px;
padding: 0.75rem;
font-size: 1.1rem;
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
Bitstream Vera Sans Mono, Courier New, monospace;
}

.grid {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
max-width: 800px;
}

.card {
margin: 1rem;
padding: 1.5rem;
text-align: left;
color: inherit;
text-decoration: none;
border: 1px solid #eaeaea;
border-radius: 10px;
transition: color 0.15s ease, border-color 0.15s ease;
max-width: 300px;
}

.card:hover,
.card:focus,
.card:active {
color: #0070f3;
border-color: #0070f3;
}

.card h2 {
margin: 0 0 1rem 0;
font-size: 1.5rem;
}

.card p {
margin: 0;
font-size: 1.25rem;
line-height: 1.5;
}

.logo {
height: 1em;
margin-left: 0.5rem;
}

@media (max-width: 600px) {
.grid {
width: 100%;
flex-direction: column;
}
}
16 changes: 16 additions & 0 deletions examples/nextjs/styles/globals.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
html,
body {
padding: 0;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
}

a {
color: inherit;
text-decoration: none;
}

* {
box-sizing: border-box;
}
Loading

0 comments on commit e67219f

Please sign in to comment.