gatsby-theme-schedule
Gatsby Theme Schedule
Examples
Getting started
To get started you can either clone this starter gatsby-schedule-starter or follow the instructions below.
Install
yarn add @hawkstein/gatsby-theme-schedule
or
npm install @hawkstein/gatsby-theme-schedule
Install Peer Dependencies
yarn add gatsby gatsby-plugin-mdx gatsby-source-filesystem react react-dom @mdx-js/mdx @mdx-js/react gatsby-plugin-mdx @emotion/core @emotion/styled theme-ui gatsby-plugin-theme-ui gatsby-plugin-sharp gatsby-remark-images gatsby-transformer-sharp gatsby-image
or
npm install gatsby gatsby-plugin-mdx gatsby-source-filesystem react react-dom @mdx-js/mdx @mdx-js/react gatsby-plugin-mdx @emotion/core @emotion/styled theme-ui gatsby-plugin-theme-ui gatsby-plugin-sharp gatsby-remark-images gatsby-transformer-sharp gatsby-image
Woah! That's a lot of peer dependencies! Well, this is a Gatsby Theme so chances are you'll be installing these as part of combining this theme with other themes and plugins.
Setup
gatsby-config.js
Add @hawkstein/gatsby-theme-schedule
to your gatsby-config.js
// gatsby-config.js
module.exports = {
plugins: ['@hawkstein/gatsby-theme-schedule']
}
Theme options
Example
// gatsby-config.js
module.exports = {
plugins: [
{
resolve: '@hawkstein/gatsby-theme-schedule',
options: {
heading: "Example Event",
locationsOrder: [`Main Location`, `Location Two`, `Location Three`],
}
}
]
}
Option | Default | Description |
---|---|---|
basePath | "/" | The base path which the theme will start at |
collection | "events" | Name for this specific collection of events |
useCollectionInURLs | false | If set to true then the collection option will be prefixed in front of day and event slugs |
contentPath | "src/events" | The location of the MDX files which will generate the event pages and day pages |
heading | "Events Schedule" | Title used in the header component |
locationsOrder | [] | An array of strings, this is used to create a custom sort for your locations |
locationsLabel | "Locations" | Label for the locations link in the header |
locationsSlug | "locations" | The slug to use as part of the url for the link in the header |
scheduleLabel | "Schedule" | Label for the schedule link in the header |
scheduleSlug | "schedule" | The slug to use as part of the url for the link in the header |
use24Hour | true | Should the theme use 24 hour times |
navLinks | [] | Array of objects of type { label: string, url: string } |
footerLinks | [] | Array of objects of type { label: string, url: string } |
actionLabel | "Buy Tickets" | Label for the call to action button in the header |
actionURL | "/buy" | URL for the call to action button in the header |
remarkImageOptions | { maxWidth: 1200, withWebp: true } | Object to pass to 'gatsby-remark-images' plugin |
Source data directory setup
To add events create .mdx
files in the src/events
directory. The source directory can be adjusted by setting the plugin option contentPath
.
|-- src
|-- events
|-- my-event.mdx
|-- my-other-event.mdx
|-- another-event.mdx
|-- the-last-event.mdx
MDX Pages Setup
Pages must include date
and start
in the frontmatter
. You'll probably to include location
too but if it's omitted from all of the mdx then it will be ignored.
// src/events/my-event.mdx
---
date: 6/11/81
start: 18:00
location: Main Location
---
# My Event
Content for the event page. Any valid markdown / mdx will work here!
As the .mdx files are parsed by Gatsby, source nodes for all the events days and locations will be generated.
Theme UI Components
The theme is using theme-ui
for layout and so anything provided by theme-ui/components is going to fit in.
Shadowing gatsby-theme-schedule Components
The first thing to shadow is your logo.
|-- src
|-- @hawkstein
|-- gatsby-theme-schedule
|-- src
|-- components
|-- logo.tsx
If you would like to customize any part of the theme you can do so by shadowing the theme file. Perhaps layout.tsx
or its children header.tsx
or footer.tsx
.
To do this create the following directory src/gatsby-plugin-theme-ui
and then create an index.js
// src/gatsby-plugin-theme-ui/index.js
import baseTheme from "@hawkstein/gatsby-theme-schedule/src/theme.js"
export default {
...baseTheme,
colors: {
...baseTheme.colors,
primary: "#EEE",
background: "#000",
},
}
Theme creates a redirect from /schedule to the 1st day of the schedule, if you want this to be implemented by your host then you should use the relevant plugin (e.g. Netlify plugin)
Theme Options
Theme Options set in gatsby-config
are available via a custom hook exported as useScheduleOptions
Development
gatsby-theme-schedules uses yarn workspaces
for development. Clone and run yarn && yarn develop
.
Thanks!
Thanks for making it this far and checking out my theme, if you have any thoughts or comments then please get in touch. @liamhawks @hawkstein