Skip to content

Instantly share code, notes, and snippets.

View lourd's full-sized avatar

Louis DeScioli lourd

View GitHub Profile
@lourd
lourd / thisLesson.js
Created July 21, 2017 17:13
Example of how "this" works in Javascript classes & functions
class Foo {
constructor() {
this.feeling = '🤥'
}
speak() {
console.log(this.feeling)
}
}
@lourd
lourd / BeforeLocationChange.js
Last active July 11, 2017 14:39
Possible component design & usage for history.before API
import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'
@withRouter
class BeforeLocationChange extends Component {
static propTypes = {
history: PropTypes.shape({
before: PropTypes.func.isRequired,
}).isRequired,
handler: PropTypes.func.isRequired,
@lourd
lourd / streamSaga.test.js
Last active July 13, 2017 04:17
Example of a redux-saga saga function that uses an external emitter through an eventChannel, tested with redux-saga-test-plan
import { eventChannel } from 'redux-saga'
import { call, cps, take, fork, put, cancel, select } from 'redux-saga/effects'
function emitterChannel(emitter, eventType) {
return eventChannel(emit => {
emitter.on(eventType, emit)
return () => emitter.off(eventType, emit)
})
}
@lourd
lourd / emitterChannel.test.js
Created March 23, 2017 17:10
Example of making a channel in redux-saga with a generic emitter source and testing it with jest
import { eventChannel } from 'redux-saga'
function emitterChannel(emitter, eventType) {
return eventChannel(emit => {
emitter.on(eventType, emit)
return () => emitter.off(eventType, emit)
})
}
describe('emitterChannel', () => {
@lourd
lourd / firebaseChannel.test.js
Last active September 19, 2018 03:56
Example of making a channel in redux-saga with a firebase source and testing it with jest
import { eventChannel } from 'redux-saga'
function firebaseChannel(firebase, {
eventType = 'value',
returnSnapshot = false,
} = {}) {
return eventChannel(emit => {
const subscription = firebase.on(eventType, snapshot => {
emit(returnSnapshot ? { snapshot } : { value: snapshot.val() })
})
const loaderUtils = require('loader-utils')
/**
* Turns a javascript object into sass variables
* @param {Object} obj POJO, values should be strings
* @param {String} options.prefix pre-pended to each sass variable
* @return {String} string to be injected into a Sass stylesheet
*/
function sassify(obj, { prefix = '' } = {}) {
return Object.entries(obj).reduce((str, [key, value]) => {
{
positions: {
[id]: {
title: String,
receivedFrom: [Recruiter],
company: EmployingCompany,
description: String,
link: String,
receivedOn: Date,
teamSize: Number,
@lourd
lourd / simple-server-and-client.js
Last active May 21, 2016 22:49
Simple Node http server and client communication example
// Bring in the core HTTP module
var http = require('http')
/////////////////////////
// Server code
/////////////////////////
// The in-memory state. Will be reset every time the server restarts!
var state = 'OFF'
@lourd
lourd / FontAwesome.jsx
Created August 13, 2015 06:30
An awesome FontAwesome React component
import React from 'react';
import radium from 'radium';
const version = '4.4.0';
const url = 'https://maxcdn.bootstrapcdn.com/font-awesome';
const fontFace = `
@font-face {
font-family: 'FontAwesome';
src: url('${url}/${version}/fonts/fontawesome-webfont.eot?v=${version}');
@lourd
lourd / BetterError.es6
Created July 6, 2015 14:45
ES6 Inheriting Errors
// Making this a global and not exporting because Meteor
BetterError = class extends Error {
constructor(message, details) {
var stack = super().stack;
this.stack = stack;
this.message = message;
if (typeof details === 'object') {
details = JSON.stringify(details);
}
this.details = details;