From 71ff34dbf2cf9b8ea07a561f9d7301a49881aec1 Mon Sep 17 00:00:00 2001 From: Shu Uesugi Date: Thu, 12 Mar 2020 22:16:45 -0700 Subject: [PATCH 01/11] TakeShape Example --- docs/advanced-features/preview-mode.md | 1 + docs/basic-features/data-fetching.md | 1 + docs/basic-features/pages.md | 1 + examples/cms-takeshape/.env.example | 3 + examples/cms-takeshape/.gitignore | 3 + examples/cms-takeshape/README.md | 0 examples/cms-takeshape/components/alert.js | 42 ++++++ examples/cms-takeshape/components/avatar.js | 20 +++ .../cms-takeshape/components/container.js | 3 + .../cms-takeshape/components/cover-image.js | 30 ++++ examples/cms-takeshape/components/date.js | 6 + examples/cms-takeshape/components/footer.js | 30 ++++ examples/cms-takeshape/components/header.js | 12 ++ .../cms-takeshape/components/hero-post.js | 37 +++++ examples/cms-takeshape/components/intro.js | 28 ++++ examples/cms-takeshape/components/layout.js | 16 +++ .../components/markdown-styles.module.css | 18 +++ examples/cms-takeshape/components/meta.js | 42 ++++++ .../cms-takeshape/components/more-stories.js | 24 ++++ .../cms-takeshape/components/post-body.js | 12 ++ .../cms-takeshape/components/post-header.js | 26 ++++ .../cms-takeshape/components/post-preview.js | 31 ++++ .../cms-takeshape/components/post-title.js | 7 + .../components/section-separator.js | 3 + examples/cms-takeshape/lib/api.js | 136 ++++++++++++++++++ examples/cms-takeshape/lib/constants.js | 5 + examples/cms-takeshape/lib/markdownToHtml.js | 9 ++ examples/cms-takeshape/next.config.js | 10 ++ examples/cms-takeshape/now.json | 13 ++ examples/cms-takeshape/package.json | 26 ++++ examples/cms-takeshape/pages/_app.js | 7 + examples/cms-takeshape/pages/_document.js | 15 ++ .../cms-takeshape/pages/api/exit-preview.js | 8 ++ examples/cms-takeshape/pages/api/preview.js | 29 ++++ examples/cms-takeshape/pages/index.js | 43 ++++++ examples/cms-takeshape/pages/posts/[slug].js | 88 ++++++++++++ examples/cms-takeshape/postcss.config.js | 18 +++ .../public/favicon/android-chrome-192x192.png | Bin 0 -> 4795 bytes .../public/favicon/android-chrome-512x512.png | Bin 0 -> 14640 bytes .../public/favicon/apple-touch-icon.png | Bin 0 -> 1327 bytes .../public/favicon/browserconfig.xml | 9 ++ .../public/favicon/favicon-16x16.png | Bin 0 -> 595 bytes .../public/favicon/favicon-32x32.png | Bin 0 -> 880 bytes .../cms-takeshape/public/favicon/favicon.ico | Bin 0 -> 15086 bytes .../public/favicon/mstile-150x150.png | Bin 0 -> 3567 bytes .../public/favicon/safari-pinned-tab.svg | 33 +++++ .../public/favicon/site.webmanifest | 19 +++ examples/cms-takeshape/styles/index.css | 5 + examples/cms-takeshape/tailwind.config.js | 32 +++++ 49 files changed, 901 insertions(+) create mode 100644 examples/cms-takeshape/.env.example create mode 100644 examples/cms-takeshape/.gitignore create mode 100644 examples/cms-takeshape/README.md create mode 100644 examples/cms-takeshape/components/alert.js create mode 100644 examples/cms-takeshape/components/avatar.js create mode 100644 examples/cms-takeshape/components/container.js create mode 100644 examples/cms-takeshape/components/cover-image.js create mode 100644 examples/cms-takeshape/components/date.js create mode 100644 examples/cms-takeshape/components/footer.js create mode 100644 examples/cms-takeshape/components/header.js create mode 100644 examples/cms-takeshape/components/hero-post.js create mode 100644 examples/cms-takeshape/components/intro.js create mode 100644 examples/cms-takeshape/components/layout.js create mode 100644 examples/cms-takeshape/components/markdown-styles.module.css create mode 100644 examples/cms-takeshape/components/meta.js create mode 100644 examples/cms-takeshape/components/more-stories.js create mode 100644 examples/cms-takeshape/components/post-body.js create mode 100644 examples/cms-takeshape/components/post-header.js create mode 100644 examples/cms-takeshape/components/post-preview.js create mode 100644 examples/cms-takeshape/components/post-title.js create mode 100644 examples/cms-takeshape/components/section-separator.js create mode 100644 examples/cms-takeshape/lib/api.js create mode 100644 examples/cms-takeshape/lib/constants.js create mode 100644 examples/cms-takeshape/lib/markdownToHtml.js create mode 100644 examples/cms-takeshape/next.config.js create mode 100644 examples/cms-takeshape/now.json create mode 100644 examples/cms-takeshape/package.json create mode 100644 examples/cms-takeshape/pages/_app.js create mode 100644 examples/cms-takeshape/pages/_document.js create mode 100644 examples/cms-takeshape/pages/api/exit-preview.js create mode 100644 examples/cms-takeshape/pages/api/preview.js create mode 100644 examples/cms-takeshape/pages/index.js create mode 100644 examples/cms-takeshape/pages/posts/[slug].js create mode 100644 examples/cms-takeshape/postcss.config.js create mode 100644 examples/cms-takeshape/public/favicon/android-chrome-192x192.png create mode 100644 examples/cms-takeshape/public/favicon/android-chrome-512x512.png create mode 100644 examples/cms-takeshape/public/favicon/apple-touch-icon.png create mode 100644 examples/cms-takeshape/public/favicon/browserconfig.xml create mode 100644 examples/cms-takeshape/public/favicon/favicon-16x16.png create mode 100644 examples/cms-takeshape/public/favicon/favicon-32x32.png create mode 100644 examples/cms-takeshape/public/favicon/favicon.ico create mode 100644 examples/cms-takeshape/public/favicon/mstile-150x150.png create mode 100644 examples/cms-takeshape/public/favicon/safari-pinned-tab.svg create mode 100644 examples/cms-takeshape/public/favicon/site.webmanifest create mode 100644 examples/cms-takeshape/styles/index.css create mode 100644 examples/cms-takeshape/tailwind.config.js diff --git a/docs/advanced-features/preview-mode.md b/docs/advanced-features/preview-mode.md index a5ef1e901e069b2..f47f88b3ba505f7 100644 --- a/docs/advanced-features/preview-mode.md +++ b/docs/advanced-features/preview-mode.md @@ -154,6 +154,7 @@ https:///api/preview?secret=&slug= Take a look at the following examples to learn more: - [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [TakeShape Example](https://github.com/zeit/next.js/tree/canary/examples/cms-takeshape) ## More Details diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md index c3f5053cd529f5c..995499c890433a5 100644 --- a/docs/basic-features/data-fetching.md +++ b/docs/basic-features/data-fetching.md @@ -429,6 +429,7 @@ function Profile() { Take a look at the following examples to learn more: - [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [TakeShape Example](https://github.com/zeit/next.js/tree/canary/examples/cms-takeshape) ## Learn more diff --git a/docs/basic-features/pages.md b/docs/basic-features/pages.md index 01142aee742dbe7..9c4c7bb4d023c4f 100644 --- a/docs/basic-features/pages.md +++ b/docs/basic-features/pages.md @@ -247,6 +247,7 @@ We've discussed two forms of pre-rendering for Next.js. Take a look at the following examples to learn more: - [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [TakeShape Example](https://github.com/zeit/next.js/tree/canary/examples/cms-takeshape) ## Learn more diff --git a/examples/cms-takeshape/.env.example b/examples/cms-takeshape/.env.example new file mode 100644 index 000000000000000..fce2c3ec20dfffc --- /dev/null +++ b/examples/cms-takeshape/.env.example @@ -0,0 +1,3 @@ +NEXT_EXAMPLE_CMS_TAKESHAPE_PROJECT_ID= +NEXT_EXAMPLE_CMS_TAKESHAPE_API_KEY= +NEXT_EXAMPLE_CMS_TAKESHAPE_PREVIEW_SECRET= \ No newline at end of file diff --git a/examples/cms-takeshape/.gitignore b/examples/cms-takeshape/.gitignore new file mode 100644 index 000000000000000..38f38049bf111e2 --- /dev/null +++ b/examples/cms-takeshape/.gitignore @@ -0,0 +1,3 @@ +.env +.now +.next \ No newline at end of file diff --git a/examples/cms-takeshape/README.md b/examples/cms-takeshape/README.md new file mode 100644 index 000000000000000..e69de29bb2d1d64 diff --git a/examples/cms-takeshape/components/alert.js b/examples/cms-takeshape/components/alert.js new file mode 100644 index 000000000000000..3530e66e59c8d35 --- /dev/null +++ b/examples/cms-takeshape/components/alert.js @@ -0,0 +1,42 @@ +import Container from './container' +import cn from 'classnames' +import { EXAMPLE_PATH } from '../lib/constants' + +export default function Alert({ preview }) { + return ( +
+ +
+ {preview ? ( + <> + This is page is a preview.{' '} + + Click here + {' '} + to exit preview mode. + + ) : ( + <> + The source code for this blog is{' '} + + available on GitHub + + . + + )} +
+
+
+ ) +} diff --git a/examples/cms-takeshape/components/avatar.js b/examples/cms-takeshape/components/avatar.js new file mode 100644 index 000000000000000..a5df334c51526c5 --- /dev/null +++ b/examples/cms-takeshape/components/avatar.js @@ -0,0 +1,20 @@ +import { getImageUrl } from 'takeshape-routing' + +export default function Avatar({ name, picture }) { + return ( +
+ {name} +
{name}
+
+ ) +} diff --git a/examples/cms-takeshape/components/container.js b/examples/cms-takeshape/components/container.js new file mode 100644 index 000000000000000..fc1c29dfb074756 --- /dev/null +++ b/examples/cms-takeshape/components/container.js @@ -0,0 +1,3 @@ +export default function Container({ children }) { + return
{children}
+} diff --git a/examples/cms-takeshape/components/cover-image.js b/examples/cms-takeshape/components/cover-image.js new file mode 100644 index 000000000000000..b048c0e20ebda36 --- /dev/null +++ b/examples/cms-takeshape/components/cover-image.js @@ -0,0 +1,30 @@ +import cn from 'classnames' +import Link from 'next/link' +import { getImageUrl } from 'takeshape-routing' + +export default function CoverImage({ title, coverImage, slug }) { + const image = ( + + ) + return ( +
+ {slug ? ( + + {image} + + ) : ( + image + )} +
+ ) +} diff --git a/examples/cms-takeshape/components/date.js b/examples/cms-takeshape/components/date.js new file mode 100644 index 000000000000000..eac5681378bfd4f --- /dev/null +++ b/examples/cms-takeshape/components/date.js @@ -0,0 +1,6 @@ +import { parseISO, format } from 'date-fns' + +export default function Date({ dateString }) { + const date = parseISO(dateString) + return +} diff --git a/examples/cms-takeshape/components/footer.js b/examples/cms-takeshape/components/footer.js new file mode 100644 index 000000000000000..dbde8ff306efdbf --- /dev/null +++ b/examples/cms-takeshape/components/footer.js @@ -0,0 +1,30 @@ +import Container from './container' +import { EXAMPLE_PATH } from '../lib/constants' + +export default function Footer() { + return ( + + ) +} diff --git a/examples/cms-takeshape/components/header.js b/examples/cms-takeshape/components/header.js new file mode 100644 index 000000000000000..562e7e3eebb6a00 --- /dev/null +++ b/examples/cms-takeshape/components/header.js @@ -0,0 +1,12 @@ +import Link from 'next/link' + +export default function Header() { + return ( +

+ + Blog + + . +

+ ) +} diff --git a/examples/cms-takeshape/components/hero-post.js b/examples/cms-takeshape/components/hero-post.js new file mode 100644 index 000000000000000..4a8e37bc724c5c8 --- /dev/null +++ b/examples/cms-takeshape/components/hero-post.js @@ -0,0 +1,37 @@ +import Avatar from '../components/avatar' +import Date from '../components/date' +import CoverImage from '../components/cover-image' +import Link from 'next/link' + +export default function HeroPost({ + title, + coverImage, + date, + excerpt, + author, + slug, +}) { + return ( +
+
+ +
+
+
+

+ + {title} + +

+
+ +
+
+
+

{excerpt}

+ +
+
+
+ ) +} diff --git a/examples/cms-takeshape/components/intro.js b/examples/cms-takeshape/components/intro.js new file mode 100644 index 000000000000000..5931b3c5961bdbb --- /dev/null +++ b/examples/cms-takeshape/components/intro.js @@ -0,0 +1,28 @@ +import { CMS_NAME, CMS_URL } from '../lib/constants' + +export default function Intro() { + return ( +
+

+ Blog. +

+

+ A statically generated blog example using{' '} + + Next.js + {' '} + and{' '} + + {CMS_NAME} + + . +

+
+ ) +} diff --git a/examples/cms-takeshape/components/layout.js b/examples/cms-takeshape/components/layout.js new file mode 100644 index 000000000000000..99d95353131e0fa --- /dev/null +++ b/examples/cms-takeshape/components/layout.js @@ -0,0 +1,16 @@ +import Alert from '../components/alert' +import Footer from '../components/footer' +import Meta from '../components/meta' + +export default function Layout({ preview, children }) { + return ( + <> + +
+ +
{children}
+
+