npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

wonderwall-builder

v0.6.3

Published

Wonderwall Builder

Downloads

14

Readme

Wonderwall Builder

Wonderwall Builder (WWB) aims to do all the heavy lifting when creating Wonderwalls.

It is built on work using Boiler Room Runner (BRR) and is meant to be used with Boiler Room Builder (BRB), and is opinionated on how Wonderwalls should be built, to ensure consistency from one Wonderwall to the next.

Creating a Wonderwall

1. Add Wonderwall Builder Dependency

yarn add wonderwall-builder

2. Create Your source/client.js and source/server.js

WWB uses BRB and BRR, so these files are where we configure our Wonderwall.

WWB provides us with existing utility functions which will handle most of this configuration for us, and we will just need to pass through some options to specify some of the custom parts of our Wonderwall.

The easiest way to handle these options, is to put them in a central file e.g. source/index.js, and include those in both your source/client.js and source/server.js.

Your setup should look something like this, we will cover these options later in .

source/index.js
import layouts from './layouts'
import { assets, snippets } from './assets'

export default {
	prismicRepo: process.env.PRISMIC_REPO,
	layouts,
	assets,
	snippets
}
source/client.js
import options from './index'
import { createClient } from 'wonderwall-builder'

export createClient(options)
source/server.js
import options from './index'
import { createServer } from 'wonderwall-builder'

export createServer(options)

3. Setup your Configuration

These are the config options available to you in your config object that you pass to createClient and createServer.

prismicRepo (required)

The id of the Prismic repository that contains all of our stories e.g. wonderwall or childrens-hospital

This can be included however you wish, however using .env files are the recommended solution.

layouts (required)

The React components that will handle laying out our pages. There are two required layouts that need to be passed through via the layouts options.

Story

This is mounted for an individual story page. Your Story component will have the story available via the story prop, and can display the story however it wishes, either using generic components via WWB, or completely custom.

Listing

This is mounted for the story listing page. Your Listing component will have the stories available via the stories prop. Again, the stories can be displayed however you wish.

Note that WWB will handle wrapping your components in the containing page, including the header and footer, as well as things such as a styles reset. The idea is that you can create these components and get straight into implementing the design.

assets (optional)

This is an array of assets (JS and CSS) to include in the document. These should include the defaults, which are /main.css and main.js, but can also include other files if needed, such as Google Fonts.

snippets (optional)

Snippets are used for scripts that need to be included. This is used for things like analytic scripts. If you provide just an array of strings to include, WWB will include these above the closing body tag

favicon (optional)

The favicon to be used for the Wonderwall.

Example Config
import Story from './layouts/Story'
import Listing from './layouts/Listing'
import Page from './layouts/Page'

export default {
	prismicRepo: process.env.PRISMIC_REPO,
	layouts: {
		Page,
		Story,
		Listing
	},
	assets: [
		'/main.css',
		'/main.js',
		'https://use.fontawesome.com/a90dc103f0.js',
	    'https://fonts.googleapis.com/css?family=Lato:400,700'
	],
	snippets: [
		'[Google Analytics Snippet]',
		'[Other Snippet]'
	]
}

4.Configure Your Scripts

We will just utilise BRB scripts to handle our build.

"scripts": {
	"start": "ENV_FILE=.env brb serve",
    "build": "ENV_FILE=.env brb build",
}

Now you can run your app locally.

npm start

And you can do a static build of your Wonderwall.

npm run build

What WWB Handles

The idea of WWB is to handle as much as possible of the reusable parts of building Wonderwalls, while still providing the flexibility to display the Wonderwall as needed, due to the often custom requests for client work.

The following is a list of things that WWB, along with BRB and BRR, will handle for you, so you don't have to include them individual Wonderwall installations.

Build and Static Build

BRB provides us with all the build configuration we need. WWB also handles fetching your stories and generating a static build for your Wonderwall.

Routes

Routing is consistent across installations of the Wonderwall.

/ - index route for story listing

/:story_uid - individual story page

/tags/:tag_uid - listing page for an individual tag

Route Hooks

All of our routes are wrapped to fetch all the data they need. For example, the listing route will fetch us all the stories we need, so that our Listing component we can create can expect an array of stories via the stories prop.

Data

As mentioned above, WWB will fetch all the data we need. This involves actions which fetch the required data from Prismic, and handles them via the relevant reducers to be made available to our components.

Components

WWB has a load of components that you can optionally use to build out your Wonderwall. All of these components can be imported via wonderwall-builder/components.

More documentation on these components to come.

Higher Order Components

There are some HOC's provided to help. connectSettings is one example, which we can wrap one of our components in to give us the ability to read the Wonderwall's settings.

For example, we might be creating a custom button, and we want to know the accent color in this client's settings. We would do something like below.

import React from 'react'
import { connectSettings } from 'wonderwall-builder'

const CustomButton = ({ children, settings }) => (
	<button style={{ backgroundColor: settings.accent }}>{children}</button>
)

export default connectSettings(CustomButton)
CXS and Traits

WWB uses Cxsync as it's CSS in JS solution. Some helpful utils are also provided.

import css from 'cxsync'
import { traits } from 'wonderwall-builder'

const button = css({
	padding: traits.rhythm(1),
	color: '#000'
})

export default ({ children }) => (
	<button className={button}>{children}</button>
)

NOTE: More information to come on configuring your traits. Need to figure out a much better way of passing traits in to WWB, or to just avoid doing it in the first place.

Working on WWB

If you are working on WWB, it is worth running through some the provided scripts.

npm run build

Builds the app into the dist directory for publishing

npm run test:unit

Runs the test suite, which uses Mocha, Chai and Enzyme

npm run test:lint

Runs standard linting on the project

npm test

Runs both the unit testing and the linting