From 5b4d2d1990bab89262a2fe98b293d79dea7b3095 Mon Sep 17 00:00:00 2001 From: deme Date: Fri, 28 Apr 2023 21:57:49 -0300 Subject: [PATCH] [#814,tutorial,docs][xl]: add initial version of the second tutorial, rename basic-example to learn-example, clean up learn-example --- examples/basic-example/.eslintrc.json | 3 - examples/basic-example/README.md | 34 --------- examples/basic-example/next.config.js | 7 -- examples/basic-example/pages/index.tsx | 42 ----------- .../.gitignore | 0 examples/learn-example/README.md | 1 + .../components/DRD.tsx | 0 .../components/DebouncedInput.tsx | 0 .../components/LineChart.tsx | 0 .../components/Table.tsx | 0 .../components/Vega.tsx | 0 .../components/VegaLite.tsx | 0 .../content/index.md | 0 .../lib/applyFullWidthDirective.tsx | 0 .../lib/loadData.tsx | 0 .../lib/markdown.js | 0 .../lib/parseCsv.ts | 0 .../package-lock.json | 0 .../package.json | 0 .../pages/[[...path]].tsx} | 8 ++- .../pages/_app.tsx | 0 .../pages/_document.tsx | 0 .../postcss.config.js | 0 .../public/data.csv | 0 .../public/favicon.png | Bin .../styles/globals.css | 0 .../tailwind.config.js | 0 .../tsconfig.json | 0 .../assets/docs/datasets-index-page.png | Bin 0 -> 16969 bytes .../assets/docs/my-incredible-dataset.png | Bin 0 -> 30962 bytes site/content/docs/index.md | 66 ++++++++++++++++++ 31 files changed, 73 insertions(+), 88 deletions(-) delete mode 100644 examples/basic-example/.eslintrc.json delete mode 100644 examples/basic-example/README.md delete mode 100644 examples/basic-example/next.config.js delete mode 100644 examples/basic-example/pages/index.tsx rename examples/{basic-example => learn-example}/.gitignore (100%) create mode 100644 examples/learn-example/README.md rename examples/{basic-example => learn-example}/components/DRD.tsx (100%) rename examples/{basic-example => learn-example}/components/DebouncedInput.tsx (100%) rename examples/{basic-example => learn-example}/components/LineChart.tsx (100%) rename examples/{basic-example => learn-example}/components/Table.tsx (100%) rename examples/{basic-example => learn-example}/components/Vega.tsx (100%) rename examples/{basic-example => learn-example}/components/VegaLite.tsx (100%) rename examples/{basic-example => learn-example}/content/index.md (100%) rename examples/{basic-example => learn-example}/lib/applyFullWidthDirective.tsx (100%) rename examples/{basic-example => learn-example}/lib/loadData.tsx (100%) rename examples/{basic-example => learn-example}/lib/markdown.js (100%) rename examples/{basic-example => learn-example}/lib/parseCsv.ts (100%) rename examples/{basic-example => learn-example}/package-lock.json (100%) rename examples/{basic-example => learn-example}/package.json (100%) rename examples/{basic-example/pages/[...path].tsx => learn-example/pages/[[...path]].tsx} (83%) rename examples/{basic-example => learn-example}/pages/_app.tsx (100%) rename examples/{basic-example => learn-example}/pages/_document.tsx (100%) rename examples/{basic-example => learn-example}/postcss.config.js (100%) rename examples/{basic-example => learn-example}/public/data.csv (100%) rename examples/{basic-example => learn-example}/public/favicon.png (100%) rename examples/{basic-example => learn-example}/styles/globals.css (100%) rename examples/{basic-example => learn-example}/tailwind.config.js (100%) rename examples/{basic-example => learn-example}/tsconfig.json (100%) create mode 100644 site/content/assets/docs/datasets-index-page.png create mode 100644 site/content/assets/docs/my-incredible-dataset.png diff --git a/examples/basic-example/.eslintrc.json b/examples/basic-example/.eslintrc.json deleted file mode 100644 index bffb357a..00000000 --- a/examples/basic-example/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/examples/basic-example/README.md b/examples/basic-example/README.md deleted file mode 100644 index c87e0421..00000000 --- a/examples/basic-example/README.md +++ /dev/null @@ -1,34 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. - -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/examples/basic-example/next.config.js b/examples/basic-example/next.config.js deleted file mode 100644 index ae887958..00000000 --- a/examples/basic-example/next.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, - swcMinify: true, -} - -module.exports = nextConfig diff --git a/examples/basic-example/pages/index.tsx b/examples/basic-example/pages/index.tsx deleted file mode 100644 index f1407b50..00000000 --- a/examples/basic-example/pages/index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { GetStaticProps } from 'next'; -import { promises as fs } from 'fs'; -import path from 'path'; -import parse from '../lib/markdown'; -import DRD from '../components/DRD'; - -export const getStaticProps = async (context) => { - const indexFile = path.join(process.cwd(), '/content/index.md'); - const readme = await fs.readFile(indexFile, 'utf8'); - let { mdxSource, frontMatter } = await parse(readme, '.mdx'); - return { - props: { - mdxSource, - frontMatter, - }, - }; -}; - -export default function DatasetPage({ mdxSource, frontMatter }) { - return ( -
-
-
- <> -

{frontMatter.title}

- {frontMatter.author && ( -
-

{frontMatter.author}

-
- )} - {frontMatter.description && ( -

{frontMatter.description}

- )} - -
-
-
- -
-
- ); -} diff --git a/examples/basic-example/.gitignore b/examples/learn-example/.gitignore similarity index 100% rename from examples/basic-example/.gitignore rename to examples/learn-example/.gitignore diff --git a/examples/learn-example/README.md b/examples/learn-example/README.md new file mode 100644 index 00000000..f70ab7b7 --- /dev/null +++ b/examples/learn-example/README.md @@ -0,0 +1 @@ +PortalJS Learn Example - https://portaljs.org/docs \ No newline at end of file diff --git a/examples/basic-example/components/DRD.tsx b/examples/learn-example/components/DRD.tsx similarity index 100% rename from examples/basic-example/components/DRD.tsx rename to examples/learn-example/components/DRD.tsx diff --git a/examples/basic-example/components/DebouncedInput.tsx b/examples/learn-example/components/DebouncedInput.tsx similarity index 100% rename from examples/basic-example/components/DebouncedInput.tsx rename to examples/learn-example/components/DebouncedInput.tsx diff --git a/examples/basic-example/components/LineChart.tsx b/examples/learn-example/components/LineChart.tsx similarity index 100% rename from examples/basic-example/components/LineChart.tsx rename to examples/learn-example/components/LineChart.tsx diff --git a/examples/basic-example/components/Table.tsx b/examples/learn-example/components/Table.tsx similarity index 100% rename from examples/basic-example/components/Table.tsx rename to examples/learn-example/components/Table.tsx diff --git a/examples/basic-example/components/Vega.tsx b/examples/learn-example/components/Vega.tsx similarity index 100% rename from examples/basic-example/components/Vega.tsx rename to examples/learn-example/components/Vega.tsx diff --git a/examples/basic-example/components/VegaLite.tsx b/examples/learn-example/components/VegaLite.tsx similarity index 100% rename from examples/basic-example/components/VegaLite.tsx rename to examples/learn-example/components/VegaLite.tsx diff --git a/examples/basic-example/content/index.md b/examples/learn-example/content/index.md similarity index 100% rename from examples/basic-example/content/index.md rename to examples/learn-example/content/index.md diff --git a/examples/basic-example/lib/applyFullWidthDirective.tsx b/examples/learn-example/lib/applyFullWidthDirective.tsx similarity index 100% rename from examples/basic-example/lib/applyFullWidthDirective.tsx rename to examples/learn-example/lib/applyFullWidthDirective.tsx diff --git a/examples/basic-example/lib/loadData.tsx b/examples/learn-example/lib/loadData.tsx similarity index 100% rename from examples/basic-example/lib/loadData.tsx rename to examples/learn-example/lib/loadData.tsx diff --git a/examples/basic-example/lib/markdown.js b/examples/learn-example/lib/markdown.js similarity index 100% rename from examples/basic-example/lib/markdown.js rename to examples/learn-example/lib/markdown.js diff --git a/examples/basic-example/lib/parseCsv.ts b/examples/learn-example/lib/parseCsv.ts similarity index 100% rename from examples/basic-example/lib/parseCsv.ts rename to examples/learn-example/lib/parseCsv.ts diff --git a/examples/basic-example/package-lock.json b/examples/learn-example/package-lock.json similarity index 100% rename from examples/basic-example/package-lock.json rename to examples/learn-example/package-lock.json diff --git a/examples/basic-example/package.json b/examples/learn-example/package.json similarity index 100% rename from examples/basic-example/package.json rename to examples/learn-example/package.json diff --git a/examples/basic-example/pages/[...path].tsx b/examples/learn-example/pages/[[...path]].tsx similarity index 83% rename from examples/basic-example/pages/[...path].tsx rename to examples/learn-example/pages/[[...path]].tsx index f0b97673..2b434ea5 100644 --- a/examples/basic-example/pages/[...path].tsx +++ b/examples/learn-example/pages/[[...path]].tsx @@ -1,11 +1,15 @@ -import { GetStaticProps } from 'next'; import { promises as fs } from 'fs'; import path from 'path'; import parse from '../lib/markdown'; import DRD from '../components/DRD'; export const getServerSideProps = async (context) => { - const indexFile = path.join(process.cwd(), '/content/' + context.params.path.join('/') + '/index.md'); + let pathToFile = 'index.md'; + if (context.params.path) { + pathToFile = context.params.path.join('/') + '/index.md'; + } + + const indexFile = path.join(process.cwd(), '/content/' + pathToFile); const readme = await fs.readFile(indexFile, 'utf8'); let { mdxSource, frontMatter } = await parse(readme, '.mdx'); return { diff --git a/examples/basic-example/pages/_app.tsx b/examples/learn-example/pages/_app.tsx similarity index 100% rename from examples/basic-example/pages/_app.tsx rename to examples/learn-example/pages/_app.tsx diff --git a/examples/basic-example/pages/_document.tsx b/examples/learn-example/pages/_document.tsx similarity index 100% rename from examples/basic-example/pages/_document.tsx rename to examples/learn-example/pages/_document.tsx diff --git a/examples/basic-example/postcss.config.js b/examples/learn-example/postcss.config.js similarity index 100% rename from examples/basic-example/postcss.config.js rename to examples/learn-example/postcss.config.js diff --git a/examples/basic-example/public/data.csv b/examples/learn-example/public/data.csv similarity index 100% rename from examples/basic-example/public/data.csv rename to examples/learn-example/public/data.csv diff --git a/examples/basic-example/public/favicon.png b/examples/learn-example/public/favicon.png similarity index 100% rename from examples/basic-example/public/favicon.png rename to examples/learn-example/public/favicon.png diff --git a/examples/basic-example/styles/globals.css b/examples/learn-example/styles/globals.css similarity index 100% rename from examples/basic-example/styles/globals.css rename to examples/learn-example/styles/globals.css diff --git a/examples/basic-example/tailwind.config.js b/examples/learn-example/tailwind.config.js similarity index 100% rename from examples/basic-example/tailwind.config.js rename to examples/learn-example/tailwind.config.js diff --git a/examples/basic-example/tsconfig.json b/examples/learn-example/tsconfig.json similarity index 100% rename from examples/basic-example/tsconfig.json rename to examples/learn-example/tsconfig.json diff --git a/site/content/assets/docs/datasets-index-page.png b/site/content/assets/docs/datasets-index-page.png new file mode 100644 index 0000000000000000000000000000000000000000..cee8b5d72d77ec5cf321a6ee5e36acc8f3b7846e GIT binary patch literal 16969 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%0D15s7|QxK?P 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 + +## Displaying data + +So far, the PortalJS app we created only has a single page displaying a dataset. Data catalogs and data portals generally showcase many different datasets. + +Let's explore how to add and display more datasets to our portal. + +### Pages in PortalJS + +As you have seen, in this example a dataset page is just a markdown file on disk plus a data file. + +To create a new data showcase page we just create a new markdown file in the `content/` folder and a new data file in the `public/` folder. + +Let's do that now. Create a `content/my-incredible-dataset` folder, and inside this new folder create a `index.md` file with the following content: + +```markdown +# My Incredible Dataset + +This is my incredible dataset. + +## Chart + + +``` + +Now, create a file in `public/` named `my-incredible-data.csv` and put the following content inside it: + +```bash +Year,Population (mi) +1980,227 +1990,249 +2000,281 +2010,309 +2020,331 +``` + +Note that pages are associated with a route based on their pathname, so, to see the new data page, access http://localhost:3000/my-incredible-dataset from the browser. You should see the following: + + + +> [!tip] +> In this tutorial we opted for storing content as markdown files and data as CSV files in the app, but PortalJS can have metadata, data and content stored anywhere. + +### Create an index page + +Now, let's create an index page. First, create a new folder `content/my-awesome-dataset/` and move `content/index.md` to it. Then, create a new file `content/index.md` and put the following content inside it: + +```markdown +# Welcome to my data portal! + +List of available datasets: + +- [My Awesome Dataset](/my-awesome-dataset) +- [My Incredible Dataset](/my-incredible-dataset) + +``` + +From the browser, access http://localhost:3000. You should see the following: + + +