Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| const _ = require(`lodash`) | |
| const Promise = require(`bluebird`) | |
| const path = require(`path`) | |
| const slug = require(`slug`) | |
| const slash = require(`slash`) | |
| // Implement the Gatsby API “createPages”. This is | |
| // called after the Gatsby bootstrap is finished so you have | |
| // access to any information necessary to programmatically | |
| // create pages. | |
| exports.createPages = ({ graphql, actions }) => { | |
| const { createPage } = actions | |
| return new Promise((resolve, reject) => { | |
| // The “graphql” function allows us to run arbitrary | |
| // queries against this Gatsbygram's graphql schema. Think of | |
| // it like Gatsbygram has a built-in database constructed | |
| // from static data that you can run queries against. | |
| // | |
| // Post is a data node type derived from data/posts.json | |
| // which is created when scraping Instagram. “allPostsJson” | |
| // is a "connection" (a GraphQL convention for accessing | |
| // a list of nodes) gives us an easy way to query all | |
| // Post nodes. | |
| resolve( | |
| graphql( | |
| ` | |
| { | |
| allPostsJson(limit: 1000) { | |
| edges { | |
| node { | |
| id | |
| } | |
| } | |
| } | |
| } | |
| ` | |
| ).then(result => { | |
| if (result.errors) { | |
| reject(new Error(result.errors)) | |
| } | |
| // Create image post pages. | |
| const postTemplate = path.resolve(`src/templates/post-page.js`) | |
| // We want to create a detailed page for each | |
| // Instagram post. Since the scrapped Instagram data | |
| // already includes an ID field, we just use that for | |
| // each page's path. | |
| _.each(result.data.allPostsJson.edges, edge => { | |
| // Gatsby uses Redux to manage its internal state. | |
| // Plugins and sites can use functions like "createPage" | |
| // to interact with Gatsby. | |
| createPage({ | |
| // Each page is required to have a `path` as well | |
| // as a template component. The `context` is | |
| // optional but is often necessary so the template | |
| // can query data specific to each page. | |
| path: `/${slug(edge.node.id)}/`, | |
| component: slash(postTemplate), | |
| context: { | |
| id: edge.node.id, | |
| }, | |
| }) | |
| }) | |
| return | |
| }) | |
| ) | |
| }) | |
| } |