Skip to content

Instantly share code, notes, and snippets.

@simenbrekken
simenbrekken / withForm.js
Created March 31, 2017 10:57
Redux Form HoC
export const RESET_FORM = 'RESET_FORM'
export const SET_FORM_VALUE = 'SET_FORM_VALUE'
export const setValue = (id, name, value) => ({ type: SET_FORM_VALUE, id, name, value })
export const reset = (id, name, value) => ({ type: SET_FORM_VALUE, id })
const withForm = (stateName, id = stateName, resetOnUmount = true) => {
const composers = [
connect(state => {
form: state.forms[id],
@simenbrekken
simenbrekken / expandObject.js
Created March 14, 2017 13:06
Flatten and expand object
import { reduce, set } from 'lodash'
export default function expandObject(object) {
return reduce(object, (expanded, value, key) => set(expanded, key, value), {})
}
@simenbrekken
simenbrekken / schema.js
Created December 21, 2016 14:06
Firebase backed GraphQL schema
import firebase from 'firebase'
import { filter, map } from 'lodash'
import { makeExecutableSchema } from 'graphql-tools'
firebase.initializeApp({
databaseURL: 'https://grafire-b1b6e.firebaseio.com',
})
const mapSnapshotToEntity = snapshot => ({ id: snapshot.key, ...snapshot.val() })
const mapSnapshotToEntities = snapshot => map(snapshot.val(), (value, id) => ({ id, ...value }))
@simenbrekken
simenbrekken / server.js
Created December 7, 2016 16:37
MIME Based History Fallback Middleware
import express from 'express'
import path from 'path'
import mime from 'mime'
const app = express()
app.use(express.static(buildPath))
app.use((req, res, next) => {
if (req.method === 'GET' && mime.lookup(req.path) === mime.default_type) {
res.sendFile('index.html')
return
@simenbrekken
simenbrekken / async-await-retry.js
Created October 12, 2016 13:10
Async/await exponential retry
const startTime = Date.now()
const start = async (attempt, { retries = 3, interval = 250 }) => {
for (let tries = 0, delay = interval; tries < retries; tries++, delay *= 2) {
console.log('Waiting', delay, Date.now() - startTime)
await attempt()
console.log('Retrying!')
}
console.log('Done trying')
@simenbrekken
simenbrekken / delete-merge-squashed.sh
Created September 7, 2016 13:25
Delete git merge --squash
git for-each-ref --no-merged master --shell refs/heads/ --format='git merge-tree `git merge-base %(refname) master` master %(refname)'|s
@simenbrekken
simenbrekken / Frontpage.js
Created August 5, 2016 12:28
Frontpage.js
import React, { Component, PropTypes } from 'react'
import useSheet from 'react-jss'
class Frontpage extends Component {
static propTypes = {
sheet: PropTypes.object.isRequired,
}
render() {
const { classes } = this.props.sheet
@simenbrekken
simenbrekken / MyComponent.js
Created July 6, 2016 12:01
Lazy loading React components with Webpack 2 and System.import
import React from 'react'
export default () => (
<div>
My Component
</div>
)
/* eslint-disable no-use-before-define */
import {
GraphQLBoolean,
GraphQLID,
GraphQLInt,
GraphQLInterfaceType,
GraphQLList,
GraphQLNonNull,
GraphQLObjectType,
@simenbrekken
simenbrekken / deploy.sh
Created April 13, 2016 09:43
Build and deploy docker image to remote hosts via SSH
#!/bin/bash -e
get_current_branch() {
echo `git symbolic-ref --short HEAD`
}
get_app_name() {
local branch_name=$(get_current_branch)
local app_name=$npm_package_name
if [ $branch_name != "master" ]; then