Skip to content

Instantly share code, notes, and snippets.

View conorhastings's full-sized avatar
🏄‍♂️
9-5, just to make a living

Conor Hastings conorhastings

🏄‍♂️
9-5, just to make a living
View GitHub Profile
function PromiseComponent(initializeComponent, loadingComponent) {
let cachedComponent;
return class PromiseComponent extends React.Component {
state = { Component: cachedComponent || loadingComponent || () => null };
componentDidMount() {
if (!cachedComponent) {
initializeComponent.then(component => {
cachedComponent = component.default;
this.setState({ Component: cachedComponent });
});
@conorhastings
conorhastings / state-component.js
Last active March 30, 2017 20:36
you can enact most of the behavior of redux with a simple component
/* this lacks subscribe behavior or ability to dispatch from outside of component tree but that is generally not neccesary */
class State extends React.Component {
constructor(props) {
super(props);
this.state = YOUR_INITIAL_STATE;
}
reducer = (action, state, props) => {...newState};
/* setState takes an object of new state as first arg or a function of props and state that returns new state
* which we will use here
* we pass dispatch around and use it similarly to redux dispatch
@conorhastings
conorhastings / esnextbin.md
Last active March 16, 2017 17:24
esnextbin sketch
@conorhastings
conorhastings / esnextbin.md
Created May 30, 2017 19:11
esnextbin sketch
@conorhastings
conorhastings / subscribable-request.js
Created December 24, 2017 17:01
subscriable request
export default function subscribableRequest({ baseUrl }) {
let subscriptions = {};
return {
fetch: ({ endpoint, ...rest }) => (
fetch(`${baseUrl}/${endpoint}`, ...rest)
.then(res => res.json())
.then(res => {
subscriptions[endpoint] &&
subscriptions[endpoint].forEach(sub => sub(res));
return res;
import gql from 'graphql-tag';
import { pick } = 'lodash'
function routeql({ query = {}, params = [], method, apiPrefix = "" }) {
const ast = gql`
${query}
`;
if (
ast.definitions.length > 1 ||
ast.definitions[0].selectionSet.selections.length > 1
@conorhastings
conorhastings / schedule.json
Last active August 31, 2018 14:31
scheduling
{
"1": [
[1, 2],
[1, 3],
[1, 9],
[1, 6],
[1, 3],
[1, 9],
[1, 6],
[1, 5],
export default function(babel) {
const { types: t } = babel;
return {
visitor: {
VariableDeclaration(path) {
const node = path.node;
if (node.declarations && node.declarations.length === 1) {
const [{ init }] = node.declarations;
if (t.isTemplateLiteral(init)) {
export const userType = `
type User {
id: Int!
title: String!
}
`;
export const resolveUserData() {
return someFunctionThatGetsData();
}
@conorhastings
conorhastings / machine.js
Created November 8, 2019 19:19
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions