From 135452bd4ba42ccf6cadc274e995b2c72c2f5de1 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Sirois Date: Wed, 27 May 2020 02:42:39 -0400 Subject: [PATCH] feat(resources): split up topics and languages --- gatsby-config.js | 11 +- gatsby-node.js | 114 +++++++++++------- .../resources/{ => language}/cpp/intro.md | 0 .../cpp/multidimensional-arrays.md | 0 .../{ => language}/cpp/pragma-once.md | 0 .../resources/{ => language}/java/class.md | 0 .../resources/{ => language}/java/generics.md | 0 .../{ => language}/java/inheritance.md | 0 .../resources/{ => language}/java/intro.md | 0 .../resources/{ => language}/java/streams.md | 0 .../javascript/es6/arrow-functions.md | 0 .../{ => language}/javascript/intro.md | 0 .../javascript/iterative-vs-functional.md | 0 .../javascript/promises/async-await.md | 0 .../promises/converting-a-callback.md | 0 .../javascript/promises/intro.md | 0 .../promises/simplifying-promises.md | 0 .../javascript/spread-operator.md | 0 .../{ => language}/javascript/variables.md | 0 .../resources/{ => language}/kotlin/intro.md | 0 .../kotlin/native/creating-c-bindings.md | 0 .../php/design-patterns/singleton.md | 0 .../resources/{ => language}/php/intro.md | 0 .../php/pdo/prepared-statements.md | 0 .../resources/{ => language}/python/intro.md | 0 .../{ => language}/python/operators.md | 0 .../bot-deployment-with-heroku.md | 0 .../{ => topic}/bot-development/intro.md | 0 .../bot-development/kutils-guide.md | 0 .../{ => topic}/cryptography/history.md | 0 .../{ => topic}/cryptography/intro.md | 0 .../deploying-a-site-with-netlify.md | 0 .../{ => topic}/web-development/intro.md | 0 .../{languageHome.tsx => resourceHome.tsx} | 10 +- .../{languagePost.tsx => resourcePage.tsx} | 6 +- 35 files changed, 86 insertions(+), 55 deletions(-) rename src/content/resources/{ => language}/cpp/intro.md (100%) rename src/content/resources/{ => language}/cpp/multidimensional-arrays.md (100%) rename src/content/resources/{ => language}/cpp/pragma-once.md (100%) rename src/content/resources/{ => language}/java/class.md (100%) rename src/content/resources/{ => language}/java/generics.md (100%) rename src/content/resources/{ => language}/java/inheritance.md (100%) rename src/content/resources/{ => language}/java/intro.md (100%) rename src/content/resources/{ => language}/java/streams.md (100%) rename src/content/resources/{ => language}/javascript/es6/arrow-functions.md (100%) rename src/content/resources/{ => language}/javascript/intro.md (100%) rename src/content/resources/{ => language}/javascript/iterative-vs-functional.md (100%) rename src/content/resources/{ => language}/javascript/promises/async-await.md (100%) rename src/content/resources/{ => language}/javascript/promises/converting-a-callback.md (100%) rename src/content/resources/{ => language}/javascript/promises/intro.md (100%) rename src/content/resources/{ => language}/javascript/promises/simplifying-promises.md (100%) rename src/content/resources/{ => language}/javascript/spread-operator.md (100%) rename src/content/resources/{ => language}/javascript/variables.md (100%) rename src/content/resources/{ => language}/kotlin/intro.md (100%) rename src/content/resources/{ => language}/kotlin/native/creating-c-bindings.md (100%) rename src/content/resources/{ => language}/php/design-patterns/singleton.md (100%) rename src/content/resources/{ => language}/php/intro.md (100%) rename src/content/resources/{ => language}/php/pdo/prepared-statements.md (100%) rename src/content/resources/{ => language}/python/intro.md (100%) rename src/content/resources/{ => language}/python/operators.md (100%) rename src/content/resources/{ => topic}/bot-development/bot-deployment-with-heroku.md (100%) rename src/content/resources/{ => topic}/bot-development/intro.md (100%) rename src/content/resources/{ => topic}/bot-development/kutils-guide.md (100%) rename src/content/resources/{ => topic}/cryptography/history.md (100%) rename src/content/resources/{ => topic}/cryptography/intro.md (100%) rename src/content/resources/{ => topic}/web-development/deploying-a-site-with-netlify.md (100%) rename src/content/resources/{ => topic}/web-development/intro.md (100%) rename src/templates/{languageHome.tsx => resourceHome.tsx} (88%) rename src/templates/{languagePost.tsx => resourcePage.tsx} (94%) diff --git a/gatsby-config.js b/gatsby-config.js index 0902077..873736a 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -54,8 +54,15 @@ module.exports = { { resolve: `gatsby-source-filesystem`, options: { - name: `resources`, - path: `${__dirname}/src/content/resources`, + name: `languages`, + path: `${__dirname}/src/content/resources/language`, + }, + }, + { + resolve: `gatsby-source-filesystem`, + options: { + name: `topics`, + path: `${__dirname}/src/content/resources/topic`, }, }, { diff --git a/gatsby-node.js b/gatsby-node.js index 8874cbd..69ffe5c 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -48,57 +48,81 @@ const validateResourceArticle = node => { } const createResources = async ({ createPage, graphql }) => { - const languageResources = path.resolve(`src/templates/languagePost.tsx`) - const languageHome = path.resolve(`src/templates/languageHome.tsx`) + const resourcePage = path.resolve(`src/templates/resourcePage.tsx`) + const resourceHome = path.resolve(`src/templates/resourceHome.tsx`) - const result = await graphql(` - query FetchResources { - allFile(filter: { sourceInstanceName: { eq: "resources" } }) { - edges { - node { - relativePath - sourceInstanceName + const languagesQuery = await graphql( + ` + query FetchLanguages { + allFile(filter: { sourceInstanceName: { eq: "languages" } }) { + edges { + node { + relativePath + sourceInstanceName + } } } } - } - `) + ` + ) - if (result.errors) { - return Promise.reject(result.errors) + const topicsQuery = await graphql( + ` + query FetchTopics { + allFile(filter: { sourceInstanceName: { eq: "topics" } }) { + edges { + node { + relativePath + sourceInstanceName + } + } + } + } + ` + ) + + const resources = [ + { key: "topics", query: topicsQuery }, + { key: "languages", query: languagesQuery }, + ] + + for ({ key, query } of resources) { + if (query.errors) { + return Promise.reject(query.errors) + } + + const resources = query.data.allFile.edges.reduce((acc, { node }) => { + const [resourceCategory] = node.relativePath.split("/") + if (!acc.includes(resourceCategory)) { + acc.push(resourceCategory) + } + return acc + }, []) + + // create home page for each resources + resources.forEach((resource) => { + createPage({ + path: path.join("resources", resource), + component: resourceHome, + context: { + resourceType: key, + entry: resource, + layout: LAYOUT_RESOURCES, + }, + }) + }) + + query.data.allFile.edges.forEach(({ node }) => { + createPage({ + path: path.join("resources", node.relativePath), + component: resourcePage, + context: { + file: node.relativePath, + layout: LAYOUT_RESOURCES, + }, + }) + }) } - - const languages = result.data.allFile.edges.reduce((acc, { node }) => { - const [language] = node.relativePath.split("/") - if (!acc.includes(language)) { - acc.push(language) - } - return acc - }, []) - - // create home page for each languages - languages.forEach(language => { - createPage({ - path: path.join("resources", language), - component: languageHome, - context: { - language, - layout: LAYOUT_RESOURCES, - }, - }) - }) - - // create resource pages - return result.data.allFile.edges.forEach(({ node }) => { - createPage({ - path: path.join("resources", node.relativePath), - component: languageResources, - context: { - file: node.relativePath, - layout: LAYOUT_RESOURCES, - }, - }) - }) } const createArchives = async ({ createPage, graphql }) => { diff --git a/src/content/resources/cpp/intro.md b/src/content/resources/language/cpp/intro.md similarity index 100% rename from src/content/resources/cpp/intro.md rename to src/content/resources/language/cpp/intro.md diff --git a/src/content/resources/cpp/multidimensional-arrays.md b/src/content/resources/language/cpp/multidimensional-arrays.md similarity index 100% rename from src/content/resources/cpp/multidimensional-arrays.md rename to src/content/resources/language/cpp/multidimensional-arrays.md diff --git a/src/content/resources/cpp/pragma-once.md b/src/content/resources/language/cpp/pragma-once.md similarity index 100% rename from src/content/resources/cpp/pragma-once.md rename to src/content/resources/language/cpp/pragma-once.md diff --git a/src/content/resources/java/class.md b/src/content/resources/language/java/class.md similarity index 100% rename from src/content/resources/java/class.md rename to src/content/resources/language/java/class.md diff --git a/src/content/resources/java/generics.md b/src/content/resources/language/java/generics.md similarity index 100% rename from src/content/resources/java/generics.md rename to src/content/resources/language/java/generics.md diff --git a/src/content/resources/java/inheritance.md b/src/content/resources/language/java/inheritance.md similarity index 100% rename from src/content/resources/java/inheritance.md rename to src/content/resources/language/java/inheritance.md diff --git a/src/content/resources/java/intro.md b/src/content/resources/language/java/intro.md similarity index 100% rename from src/content/resources/java/intro.md rename to src/content/resources/language/java/intro.md diff --git a/src/content/resources/java/streams.md b/src/content/resources/language/java/streams.md similarity index 100% rename from src/content/resources/java/streams.md rename to src/content/resources/language/java/streams.md diff --git a/src/content/resources/javascript/es6/arrow-functions.md b/src/content/resources/language/javascript/es6/arrow-functions.md similarity index 100% rename from src/content/resources/javascript/es6/arrow-functions.md rename to src/content/resources/language/javascript/es6/arrow-functions.md diff --git a/src/content/resources/javascript/intro.md b/src/content/resources/language/javascript/intro.md similarity index 100% rename from src/content/resources/javascript/intro.md rename to src/content/resources/language/javascript/intro.md diff --git a/src/content/resources/javascript/iterative-vs-functional.md b/src/content/resources/language/javascript/iterative-vs-functional.md similarity index 100% rename from src/content/resources/javascript/iterative-vs-functional.md rename to src/content/resources/language/javascript/iterative-vs-functional.md diff --git a/src/content/resources/javascript/promises/async-await.md b/src/content/resources/language/javascript/promises/async-await.md similarity index 100% rename from src/content/resources/javascript/promises/async-await.md rename to src/content/resources/language/javascript/promises/async-await.md diff --git a/src/content/resources/javascript/promises/converting-a-callback.md b/src/content/resources/language/javascript/promises/converting-a-callback.md similarity index 100% rename from src/content/resources/javascript/promises/converting-a-callback.md rename to src/content/resources/language/javascript/promises/converting-a-callback.md diff --git a/src/content/resources/javascript/promises/intro.md b/src/content/resources/language/javascript/promises/intro.md similarity index 100% rename from src/content/resources/javascript/promises/intro.md rename to src/content/resources/language/javascript/promises/intro.md diff --git a/src/content/resources/javascript/promises/simplifying-promises.md b/src/content/resources/language/javascript/promises/simplifying-promises.md similarity index 100% rename from src/content/resources/javascript/promises/simplifying-promises.md rename to src/content/resources/language/javascript/promises/simplifying-promises.md diff --git a/src/content/resources/javascript/spread-operator.md b/src/content/resources/language/javascript/spread-operator.md similarity index 100% rename from src/content/resources/javascript/spread-operator.md rename to src/content/resources/language/javascript/spread-operator.md diff --git a/src/content/resources/javascript/variables.md b/src/content/resources/language/javascript/variables.md similarity index 100% rename from src/content/resources/javascript/variables.md rename to src/content/resources/language/javascript/variables.md diff --git a/src/content/resources/kotlin/intro.md b/src/content/resources/language/kotlin/intro.md similarity index 100% rename from src/content/resources/kotlin/intro.md rename to src/content/resources/language/kotlin/intro.md diff --git a/src/content/resources/kotlin/native/creating-c-bindings.md b/src/content/resources/language/kotlin/native/creating-c-bindings.md similarity index 100% rename from src/content/resources/kotlin/native/creating-c-bindings.md rename to src/content/resources/language/kotlin/native/creating-c-bindings.md diff --git a/src/content/resources/php/design-patterns/singleton.md b/src/content/resources/language/php/design-patterns/singleton.md similarity index 100% rename from src/content/resources/php/design-patterns/singleton.md rename to src/content/resources/language/php/design-patterns/singleton.md diff --git a/src/content/resources/php/intro.md b/src/content/resources/language/php/intro.md similarity index 100% rename from src/content/resources/php/intro.md rename to src/content/resources/language/php/intro.md diff --git a/src/content/resources/php/pdo/prepared-statements.md b/src/content/resources/language/php/pdo/prepared-statements.md similarity index 100% rename from src/content/resources/php/pdo/prepared-statements.md rename to src/content/resources/language/php/pdo/prepared-statements.md diff --git a/src/content/resources/python/intro.md b/src/content/resources/language/python/intro.md similarity index 100% rename from src/content/resources/python/intro.md rename to src/content/resources/language/python/intro.md diff --git a/src/content/resources/python/operators.md b/src/content/resources/language/python/operators.md similarity index 100% rename from src/content/resources/python/operators.md rename to src/content/resources/language/python/operators.md diff --git a/src/content/resources/bot-development/bot-deployment-with-heroku.md b/src/content/resources/topic/bot-development/bot-deployment-with-heroku.md similarity index 100% rename from src/content/resources/bot-development/bot-deployment-with-heroku.md rename to src/content/resources/topic/bot-development/bot-deployment-with-heroku.md diff --git a/src/content/resources/bot-development/intro.md b/src/content/resources/topic/bot-development/intro.md similarity index 100% rename from src/content/resources/bot-development/intro.md rename to src/content/resources/topic/bot-development/intro.md diff --git a/src/content/resources/bot-development/kutils-guide.md b/src/content/resources/topic/bot-development/kutils-guide.md similarity index 100% rename from src/content/resources/bot-development/kutils-guide.md rename to src/content/resources/topic/bot-development/kutils-guide.md diff --git a/src/content/resources/cryptography/history.md b/src/content/resources/topic/cryptography/history.md similarity index 100% rename from src/content/resources/cryptography/history.md rename to src/content/resources/topic/cryptography/history.md diff --git a/src/content/resources/cryptography/intro.md b/src/content/resources/topic/cryptography/intro.md similarity index 100% rename from src/content/resources/cryptography/intro.md rename to src/content/resources/topic/cryptography/intro.md diff --git a/src/content/resources/web-development/deploying-a-site-with-netlify.md b/src/content/resources/topic/web-development/deploying-a-site-with-netlify.md similarity index 100% rename from src/content/resources/web-development/deploying-a-site-with-netlify.md rename to src/content/resources/topic/web-development/deploying-a-site-with-netlify.md diff --git a/src/content/resources/web-development/intro.md b/src/content/resources/topic/web-development/intro.md similarity index 100% rename from src/content/resources/web-development/intro.md rename to src/content/resources/topic/web-development/intro.md diff --git a/src/templates/languageHome.tsx b/src/templates/resourceHome.tsx similarity index 88% rename from src/templates/languageHome.tsx rename to src/templates/resourceHome.tsx index 3d9f7b4..87dd89b 100644 --- a/src/templates/languageHome.tsx +++ b/src/templates/resourceHome.tsx @@ -7,7 +7,7 @@ import { PageContent } from "../components/PageContent" import useSidebar from "../hooks/useSidebar" // @todo maybe find alternative type for data -const LanguageHome: FC = ({ data, pageContext }) => { +const ResourceHome: FC = ({ data, pageContext }) => { const { current: language } = useSidebar() const { relativePath } = data.file const { html, excerpt, fields, frontmatter, timeToRead } = data.file.post @@ -43,13 +43,13 @@ const LanguageHome: FC = ({ data, pageContext }) => { ) } -export default LanguageHome +export default ResourceHome export const query = graphql` - query LanguageHome($language: String!) { + query ResourceHome($resourceType: String!, $entry: String!) { file( - sourceInstanceName: { eq: "resources" } - relativeDirectory: { eq: $language } + sourceInstanceName: { eq: $resourceType } + relativeDirectory: { eq: $entry } base: { eq: "intro.md" } ) { relativePath diff --git a/src/templates/languagePost.tsx b/src/templates/resourcePage.tsx similarity index 94% rename from src/templates/languagePost.tsx rename to src/templates/resourcePage.tsx index 1213f03..6c90173 100644 --- a/src/templates/languagePost.tsx +++ b/src/templates/resourcePage.tsx @@ -10,7 +10,7 @@ import useSidebar from "../hooks/useSidebar" import { buildToc } from "../utils" // @todo maybe find alternative type for data -const LanguagePost: FC = ({ data }) => { +const ResourcePage: FC = ({ data }) => { const { current: language } = useSidebar() const { relativePath } = data.file const { @@ -61,10 +61,10 @@ const LanguagePost: FC = ({ data }) => { ) } -export default LanguagePost +export default ResourcePage export const query = graphql` - query LanguagePost($file: String!) { + query ResourcePage($file: String!) { file(relativePath: { eq: $file }) { relativePath post: childMarkdownRemark {