mirror of
https://github.com/Stone-Red-Code/website.git
synced 2026-09-07 07:56:12 +02:00
feat: persist layout state across pages
This commit is contained in:
@@ -23,6 +23,7 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
`gatsby-plugin-layout`,
|
||||||
{
|
{
|
||||||
resolve: `gatsby-transformer-remark`,
|
resolve: `gatsby-transformer-remark`,
|
||||||
plugins: [`gatsby-remark-prismjs`],
|
plugins: [`gatsby-remark-prismjs`],
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ const fs = require("fs")
|
|||||||
|
|
||||||
const requiredArticleFrontmatter = ["authors", "date"]
|
const requiredArticleFrontmatter = ["authors", "date"]
|
||||||
|
|
||||||
|
const LAYOUT_RESOURCES = "resources"
|
||||||
|
const LAYOUT_REGULAR = "regular"
|
||||||
|
|
||||||
let users = []
|
let users = []
|
||||||
try {
|
try {
|
||||||
users = JSON.parse(fs.readFileSync("./users.json", "utf-8"))
|
users = JSON.parse(fs.readFileSync("./users.json", "utf-8"))
|
||||||
@@ -51,6 +54,7 @@ const createResources = async ({ createPage, graphql }) => {
|
|||||||
component: languageResources,
|
component: languageResources,
|
||||||
context: {
|
context: {
|
||||||
file: node.relativePath,
|
file: node.relativePath,
|
||||||
|
layout: LAYOUT_RESOURCES,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -84,6 +88,15 @@ exports.onCreateNode = async ({ node, getNode, actions }) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.onCreatePage = ({ page, actions }) => {
|
||||||
|
const { createPage } = actions
|
||||||
|
|
||||||
|
page.context.layout = page.path.match(/resources/)
|
||||||
|
? LAYOUT_RESOURCES
|
||||||
|
: LAYOUT_REGULAR
|
||||||
|
createPage(page)
|
||||||
|
}
|
||||||
|
|
||||||
exports.createPages = ({ actions, graphql }) => {
|
exports.createPages = ({ actions, graphql }) => {
|
||||||
const { createPage } = actions
|
const { createPage } = actions
|
||||||
return createResources({ createPage, graphql })
|
return createResources({ createPage, graphql })
|
||||||
|
|||||||
Generated
+8
@@ -7729,6 +7729,14 @@
|
|||||||
"slash": "^1.0.0"
|
"slash": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gatsby-plugin-layout": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/gatsby-plugin-layout/-/gatsby-plugin-layout-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-nXtF5SJbx+qcSQBXLnpq3YeaPN0LEbkkH3HOJcoFfynzY0cKH4o09+IO3WGxoV/XLBjcxc3OxZFwBqQaeL6Keg==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"gatsby-plugin-manifest": {
|
"gatsby-plugin-manifest": {
|
||||||
"version": "2.2.4",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.4.tgz",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"gatsby": "^2.13.39",
|
"gatsby": "^2.13.39",
|
||||||
"gatsby-image": "^2.2.6",
|
"gatsby-image": "^2.2.6",
|
||||||
|
"gatsby-plugin-layout": "^1.1.2",
|
||||||
"gatsby-plugin-manifest": "^2.2.4",
|
"gatsby-plugin-manifest": "^2.2.4",
|
||||||
"gatsby-plugin-mdx": "^1.0.17",
|
"gatsby-plugin-mdx": "^1.0.17",
|
||||||
"gatsby-plugin-offline": "^2.2.4",
|
"gatsby-plugin-offline": "^2.2.4",
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import React, { PropsWithChildren } from "react"
|
||||||
|
import { Layout } from "../components/Layout"
|
||||||
|
import { ResourcesLayout } from "../components/ResourcesLayout"
|
||||||
|
|
||||||
|
export default function BaseLayout({
|
||||||
|
children,
|
||||||
|
pageContext,
|
||||||
|
}: PropsWithChildren<{
|
||||||
|
pageContext: {
|
||||||
|
layout?: string
|
||||||
|
}
|
||||||
|
}>) {
|
||||||
|
if (pageContext.layout === "resources") {
|
||||||
|
return <ResourcesLayout>{children}</ResourcesLayout>
|
||||||
|
}
|
||||||
|
|
||||||
|
return <Layout>{children}</Layout>
|
||||||
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
|
|
||||||
import { Layout } from "../components/Layout"
|
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
|
|
||||||
function NotFoundPage() {
|
function NotFoundPage() {
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Fragment>
|
||||||
<SEO title="404: Not found" />
|
<SEO title="404: Not found" />
|
||||||
<h1>NOT FOUND</h1>
|
<h1>NOT FOUND</h1>
|
||||||
<p>You just hit a route that doesn't exist... the sadness.</p>
|
<p>You just hit a route that doesn't exist... the sadness.</p>
|
||||||
</Layout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -1,7 +1,6 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
import { graphql } from "gatsby"
|
import { graphql } from "gatsby"
|
||||||
import { Markdown } from "../components/Markdown"
|
import { Markdown } from "../components/Markdown"
|
||||||
import { Layout } from "../components/Layout"
|
|
||||||
import { MarkdownRemark, Query } from "../generated/graphql"
|
import { MarkdownRemark, Query } from "../generated/graphql"
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
|
|
||||||
@@ -9,10 +8,10 @@ function AboutPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) {
|
|||||||
const { md } = data
|
const { md } = data
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Fragment>
|
||||||
<SEO title="About" />
|
<SEO title="About" />
|
||||||
<Markdown content={md.html!} />
|
<Markdown content={md.html!} />
|
||||||
</Layout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -1,19 +1,18 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
import { Link } from "gatsby"
|
import { Link } from "gatsby"
|
||||||
|
|
||||||
import { Layout } from "../components/Layout"
|
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
|
|
||||||
function IndexPage() {
|
function IndexPage() {
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Fragment>
|
||||||
<SEO title="Home" />
|
<SEO title="Home" />
|
||||||
<h1>Hi people</h1>
|
<h1>Hi people</h1>
|
||||||
<p>Welcome to your new Gatsby site.</p>
|
<p>Welcome to your new Gatsby site.</p>
|
||||||
<p>Now go build something great.</p>
|
<p>Now go build something great.</p>
|
||||||
<div style={{ maxWidth: `300px`, marginBottom: `1.45rem` }}></div>
|
<div style={{ maxWidth: `300px`, marginBottom: `1.45rem` }}></div>
|
||||||
<Link to="/page-2/">Go to page 2</Link>
|
<Link to="/page-2/">Go to page 2</Link>
|
||||||
</Layout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
|
|
||||||
import { ResourcesLayout } from "../components/ResourcesLayout"
|
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
|
|
||||||
function ResourcesPage() {
|
function ResourcesPage() {
|
||||||
return (
|
return (
|
||||||
<ResourcesLayout>
|
<Fragment>
|
||||||
<SEO title="Resources" />
|
<SEO title="Resources" />
|
||||||
the resources
|
the resources
|
||||||
</ResourcesLayout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -1,7 +1,6 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
import { graphql } from "gatsby"
|
import { graphql } from "gatsby"
|
||||||
import { Markdown } from "../components/Markdown"
|
import { Markdown } from "../components/Markdown"
|
||||||
import { Layout } from "../components/Layout"
|
|
||||||
import { MarkdownRemark, Query } from "../generated/graphql"
|
import { MarkdownRemark, Query } from "../generated/graphql"
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
|
|
||||||
@@ -9,10 +8,10 @@ function RulesPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) {
|
|||||||
const { md } = data
|
const { md } = data
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Fragment>
|
||||||
<SEO title="Rules" />
|
<SEO title="Rules" />
|
||||||
<Markdown content={md.html!} />
|
<Markdown content={md.html!} />
|
||||||
</Layout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import React from "react"
|
import React, { Fragment } from "react"
|
||||||
import { graphql } from "gatsby"
|
import { graphql } from "gatsby"
|
||||||
import { Markdown } from "../components/Markdown"
|
import { Markdown } from "../components/Markdown"
|
||||||
import { SEO } from "../components/SEO"
|
import { SEO } from "../components/SEO"
|
||||||
import { ResourcesLayout } from "../components/ResourcesLayout"
|
|
||||||
import { ResourceHeader } from "../components/ResourceHeader"
|
import { ResourceHeader } from "../components/ResourceHeader"
|
||||||
|
|
||||||
// @todo maybe find alternative type for data
|
// @todo maybe find alternative type for data
|
||||||
@@ -10,7 +9,7 @@ function LanguagePost({ data }: any) {
|
|||||||
const { html, fields, frontmatter, timeToRead } = data.file.post
|
const { html, fields, frontmatter, timeToRead } = data.file.post
|
||||||
console.log(data)
|
console.log(data)
|
||||||
return (
|
return (
|
||||||
<ResourcesLayout>
|
<Fragment>
|
||||||
<SEO title={frontmatter.title} />
|
<SEO title={frontmatter.title} />
|
||||||
<ResourceHeader
|
<ResourceHeader
|
||||||
title={frontmatter.title}
|
title={frontmatter.title}
|
||||||
@@ -20,7 +19,7 @@ function LanguagePost({ data }: any) {
|
|||||||
recommendedReading={frontmatter.recommended_reading}
|
recommendedReading={frontmatter.recommended_reading}
|
||||||
/>
|
/>
|
||||||
<Markdown content={html} />
|
<Markdown content={html} />
|
||||||
</ResourcesLayout>
|
</Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user