Skip to content

Instantly share code, notes, and snippets.

@antonycourtney
antonycourtney / Header.react.js
Last active October 19, 2015 02:49
React Header component for oneref-todomvc
/**
* Header.react.js -- React component for TodoMVC Header UI
*/
import React from 'react';
import TodoTextInput from './TodoTextInput.react';
import * as TodoActions from '../todoActions';
export default class Header extends React.Component {
render() {
return (
@antonycourtney
antonycourtney / app.js
Last active October 19, 2015 02:43
Top level of React application
/**
* app.js -- top level of TodoMVC app
*/
import React from 'react';
import OneRef from 'oneref';
import TodoAppState from './todoAppState';
import TodoApp from './components/TodoApp.react';
const todoAppState = new TodoAppState();
const stateRef = new OneRef.Ref(todoAppState);
@antonycourtney
antonycourtney / todoActions.js
Last active October 19, 2015 02:42
Responses to user interaction in oneref-todomvc
/**
* todoActions.js -- event handlers for TodoMVC app
*/
import TodoItem from './todoItem';
export function create(text,updater) {
updater((state) => state.addItem(new TodoItem(text)));
}
export function toggleComplete(item,updater) {
@antonycourtney
antonycourtney / viewTest.js
Last active October 19, 2015 02:38
Test of static version of views
/**
* viewTest.js -- render TodoApp component with static test data
*/
const item0 = new TodoItem('This is a test item');
const state0 = new TodoAppState();
const todoAppState = state0.addItem(item0);
React.render(
<TodoApp appState={todoAppState} />,
document.getElementById('todoapp')
@antonycourtney
antonycourtney / TodoApp.React.js
Last active October 19, 2015 02:36
Top level View component for TodoMVC app
/**
* todoApp.React.js -- top-level React component for TodoMVC
*/
export default class TodoApp extends React.Component {
render() {
const appState = this.props.appState;
const allTodos = appState.getAll();
return (
<div>
<Header stateRefUpdater={this.props.stateRefUpdater} />
@antonycourtney
antonycourtney / todoAppStatic.React.js
Last active October 19, 2015 02:36
top level app component for static version of app
/**
* todoApp.React.js -- top-level React component for TodoMVC
*/
export default class TodoApp extends React.Component {
render() {
const appState = this.props.appState;
const allTodos = appState.getAll();
return (
<div>
<Header />
@antonycourtney
antonycourtney / todoAppState.js
Last active October 19, 2015 02:34
Purely functional data structure for Todo list application state
/**
* todoAppState.js -- Application State for TodoMVC as
* an immutable record
*/
export default class TodoAppState extends Immutable.Record({
todoItems: Immutable.Map() // map from id to TodoItem
}) {
/**
* functional item update -- returns a new state with the given item included in the
* set of todo items. If there is an existing entry for item.id, the result state
@antonycourtney
antonycourtney / todoItem.js
Last active October 19, 2015 02:00
An individual TODO list item as an Immutable Record
/**
* todoItem.js - An individual item in the TODO list as an Immutable record
*/
export default class TodoItem extends Immutable.Record({
id: '',
complete: false,
text: ''
}) {
constructor(text,complete = false) {
super({id: genID(), text, complete});
@antonycourtney
antonycourtney / scrollAction.js
Created October 15, 2015 06:32
scroll action in oneref-flux-challenge
export function scroll(scrollAmount,updater) {
updater((prevState) => {
const {nextState, oldRequests} = prevState.scrollAdjust(scrollAmount);
oldRequests.forEach((req) => req.abort()); // cancel old requests
// Need invokeLater since we're within updater
invokeLater(() => fillView(nextState,updater));
return nextState;
});
}
@antonycourtney
antonycourtney / fillView.js
Created October 15, 2015 06:28
fillView action in oneref-flux-challenge
/*
* fill view by generating more requests if necessary
*/
function fillView(st,updater) {
const lastSith = st.lastKnownSith();
if (st.needsApprentice(lastSith)) {
requestSithInfo(true,lastSith.info.apprenticeId,updater);
} else {
const firstSith = st.firstKnownSith();
if (st.needsMaster(firstSith)) {