mirror of
https://github.com/Stone-Red-Code/website.git
synced 2026-09-08 07:56:12 +02:00
feat(resources): split up topics and languages
This commit is contained in:
+9
-2
@@ -54,8 +54,15 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
resolve: `gatsby-source-filesystem`,
|
resolve: `gatsby-source-filesystem`,
|
||||||
options: {
|
options: {
|
||||||
name: `resources`,
|
name: `languages`,
|
||||||
path: `${__dirname}/src/content/resources`,
|
path: `${__dirname}/src/content/resources/language`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
resolve: `gatsby-source-filesystem`,
|
||||||
|
options: {
|
||||||
|
name: `topics`,
|
||||||
|
path: `${__dirname}/src/content/resources/topic`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
+69
-45
@@ -48,57 +48,81 @@ const validateResourceArticle = node => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const createResources = async ({ createPage, graphql }) => {
|
const createResources = async ({ createPage, graphql }) => {
|
||||||
const languageResources = path.resolve(`src/templates/languagePost.tsx`)
|
const resourcePage = path.resolve(`src/templates/resourcePage.tsx`)
|
||||||
const languageHome = path.resolve(`src/templates/languageHome.tsx`)
|
const resourceHome = path.resolve(`src/templates/resourceHome.tsx`)
|
||||||
|
|
||||||
const result = await graphql(`
|
const languagesQuery = await graphql(
|
||||||
query FetchResources {
|
`
|
||||||
allFile(filter: { sourceInstanceName: { eq: "resources" } }) {
|
query FetchLanguages {
|
||||||
edges {
|
allFile(filter: { sourceInstanceName: { eq: "languages" } }) {
|
||||||
node {
|
edges {
|
||||||
relativePath
|
node {
|
||||||
sourceInstanceName
|
relativePath
|
||||||
|
sourceInstanceName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
`
|
||||||
`)
|
)
|
||||||
|
|
||||||
if (result.errors) {
|
const topicsQuery = await graphql(
|
||||||
return Promise.reject(result.errors)
|
`
|
||||||
|
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 }) => {
|
const createArchives = async ({ createPage, graphql }) => {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { PageContent } from "../components/PageContent"
|
|||||||
import useSidebar from "../hooks/useSidebar"
|
import useSidebar from "../hooks/useSidebar"
|
||||||
|
|
||||||
// @todo maybe find alternative type for data
|
// @todo maybe find alternative type for data
|
||||||
const LanguageHome: FC<any> = ({ data, pageContext }) => {
|
const ResourceHome: FC<any> = ({ data, pageContext }) => {
|
||||||
const { current: language } = useSidebar()
|
const { current: language } = useSidebar()
|
||||||
const { relativePath } = data.file
|
const { relativePath } = data.file
|
||||||
const { html, excerpt, fields, frontmatter, timeToRead } = data.file.post
|
const { html, excerpt, fields, frontmatter, timeToRead } = data.file.post
|
||||||
@@ -43,13 +43,13 @@ const LanguageHome: FC<any> = ({ data, pageContext }) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default LanguageHome
|
export default ResourceHome
|
||||||
|
|
||||||
export const query = graphql`
|
export const query = graphql`
|
||||||
query LanguageHome($language: String!) {
|
query ResourceHome($resourceType: String!, $entry: String!) {
|
||||||
file(
|
file(
|
||||||
sourceInstanceName: { eq: "resources" }
|
sourceInstanceName: { eq: $resourceType }
|
||||||
relativeDirectory: { eq: $language }
|
relativeDirectory: { eq: $entry }
|
||||||
base: { eq: "intro.md" }
|
base: { eq: "intro.md" }
|
||||||
) {
|
) {
|
||||||
relativePath
|
relativePath
|
||||||
@@ -10,7 +10,7 @@ import useSidebar from "../hooks/useSidebar"
|
|||||||
import { buildToc } from "../utils"
|
import { buildToc } from "../utils"
|
||||||
|
|
||||||
// @todo maybe find alternative type for data
|
// @todo maybe find alternative type for data
|
||||||
const LanguagePost: FC<any> = ({ data }) => {
|
const ResourcePage: FC<any> = ({ data }) => {
|
||||||
const { current: language } = useSidebar()
|
const { current: language } = useSidebar()
|
||||||
const { relativePath } = data.file
|
const { relativePath } = data.file
|
||||||
const {
|
const {
|
||||||
@@ -61,10 +61,10 @@ const LanguagePost: FC<any> = ({ data }) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default LanguagePost
|
export default ResourcePage
|
||||||
|
|
||||||
export const query = graphql`
|
export const query = graphql`
|
||||||
query LanguagePost($file: String!) {
|
query ResourcePage($file: String!) {
|
||||||
file(relativePath: { eq: $file }) {
|
file(relativePath: { eq: $file }) {
|
||||||
relativePath
|
relativePath
|
||||||
post: childMarkdownRemark {
|
post: childMarkdownRemark {
|
||||||
Reference in New Issue
Block a user