Skip to content

Instantly share code, notes, and snippets.

View elierotenberg's full-sized avatar

Elie Rotenberg elierotenberg

View GitHub Profile
@elierotenberg
elierotenberg / TransformProps.js
Last active August 29, 2015 14:21
TransformProps
const TransformProps = (Component, transform) => class extends React.Component {
displayName = Component.displayName;
render() {
return <Component {...transform(this.props)}>;
}
};
const transform = (f) => (t) => {
r = {};
@elierotenberg
elierotenberg / isExtensionOf.js
Last active August 29, 2015 14:20
isExtensionOf
// is A an extension of B ?
// ex:
// class C extends Oject {}
// class B extends C {}
// class A extends B {}
// isExtension(A, B) === true
// isExtension(A, C) === true
// isExtension(A, Object) === true
// isExtension(B, A) === false
function isExtensionOf(A, B) {
@elierotenberg
elierotenberg / client.jsx
Created February 8, 2015 18:27
Flux over the Wire client.jsx
const client = new FluxClient('http://localhost:8080');
const messageList = client.Store('/messageList');
const postMessage = client.Action('/postMessage');
const MessageList = React.createClass({
getInitialState() {
return { messageList: this.props.messageList.head, message: null };
},
componentDidMount() {
messageList.onUpdate(({ head }) => this.setState({ messageList: head }));
@elierotenberg
elierotenberg / server.js
Last active August 29, 2015 14:15
Flux over the Wire server.js
const server = new FluxServer(8080);
const messageList = server.Store('/messageList');
messageList.set('nextId', 0).commit();
const postMessage = server.Action('/postMessage')
.onDispatch(({ nickname, message }) => {
messageList.set(messageList.get('nextId') + 1, { nickname, message })
.set('nextId', messageList.get('nextId') + 1)
.commit()
});
Full stack flux
^ Actions go up v Updates go down
PostgreSQL (shardable)
^ Stored procedures v NOTIFY
Node PostegreSQL/redis broker (clusterable)
^ PUBLISH v SUBSCRIBE
redis MQ (shardable)
^ PUBLISH v SUBSCRIBE
function renderToObject(element) {
const inst = instantiateReactComponent(element);
inst.state = inst.getInitialState ? inst.getInitialState() : null;
return Promise.resolve(inst.componentWillMount ? inst.componentWillMount() : null)
.then(() => {
const r = inst.render();
inst.componentWillUnmount();
return r;
});
}
@elierotenberg
elierotenberg / .bashrc
Created December 15, 2014 16:01
Usefule .bashrc additions
alias git-patch="git add -A && git commit -m"
alias npm-patch="npm version patch && git push && git push --tags && npm publish"
alias npm-minor="npm version minor && git push && git push --tags && npm publish"
alias npm-major="npm version major && git push && git push --tags && npm publish"
alias npm-upgrade="npm cache clear && npm-check-updates -u && npm install"
@elierotenberg
elierotenberg / AsyncDependenciesExample.js
Last active August 29, 2015 14:06
AsyncDependencies
var AsyncDependencies = require("react-asyncdependencies");
var request = require("request");
var TodoList = React.createClass({
mixins: [AsyncDependencies.Mixin],
getInitialState: function() {
return {
todosIds: null,
};
},
@elierotenberg
elierotenberg / DropDown.css
Created August 25, 2014 15:43
React + react-query + bootstrap
.DropDown-backdrop {
display: none;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 100;
}
.DropDown.open .DropDown-backdrop{
@elierotenberg
elierotenberg / SpinWheel.jsx
Created August 2, 2014 17:03
SpinWheel.jsx
/** @jsx React.DOM */
var React = require("react");
var AnimateMixin = require("react-animate");
var fromCSS = require("react-css").fromCSS;
var from = fromCSS("{" +
"transform: rotate(0deg);" +
"background-color: blue;" +
"margin: 50px;" +
"width: 200px;" +