stop
This commit is contained in:
@@ -1,28 +1,100 @@
|
|||||||
.App {
|
html {
|
||||||
text-align: center;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
h1, h2, h3, h4, h5, h6 {
|
||||||
animation: App-logo-spin infinite 20s linear;
|
color: #4A4A4A;
|
||||||
height: 80px;
|
line-height: 1.45;
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
line-height: 1.25em
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header {
|
h1 {
|
||||||
background-color: #222;
|
font-size: 3.3rem;
|
||||||
height: 150px;
|
|
||||||
padding: 20px;
|
|
||||||
color: white;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-title {
|
h2 {
|
||||||
font-size: 1.5em;
|
font-size: 2.6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-intro {
|
h3 {
|
||||||
font-size: large;
|
font-size: 2.4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
h4 {
|
||||||
from { transform: rotate(0deg); }
|
font-size: 2.2rem;
|
||||||
to { transform: rotate(360deg); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
margin-top: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
line-height: 1.9rem;
|
||||||
|
color: #5d686f;
|
||||||
|
font-size: 1.125rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content-wrap {
|
||||||
|
display: block;
|
||||||
|
max-width: 750px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding-right: 1.2em;
|
||||||
|
padding-left: 1.2em;
|
||||||
|
padding-bottom: 1.2em;
|
||||||
|
}
|
||||||
|
.headerBump {
|
||||||
|
padding-top: 3.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content-wrap img {
|
||||||
|
display: block;
|
||||||
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: 1.2rem
|
||||||
|
}
|
||||||
|
|
||||||
|
.bodyWithNav {
|
||||||
|
width: calc(100% - 250px);
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headline {
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headlineSubtext {
|
||||||
|
font-size: .8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
border-left: 2px solid #d1dced;
|
||||||
|
padding: .4em 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-family: "Courier New", Courier, monospace;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: #f5f5f5;
|
||||||
|
padding: 0 .4em;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #00558d;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: #6c6c6c;
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { TOGGLE_ITEM, CHANGE_SORT } from './constants';
|
import { TOGGLE_ITEM, CHANGE_SORT, SHOW_CHANGE } from './constants';
|
||||||
|
|
||||||
export const toggleItem = (id) => ({type: TOGGLE_ITEM, payload: {id} });
|
export const toggleItem = (id) => ({type: TOGGLE_ITEM, payload: {id} });
|
||||||
export const changeSort = (newSort) => ({type: CHANGE_SORT, payload: { newSort }});
|
export const changeSort = (newSort) => ({type: CHANGE_SORT, payload: { newSort }});
|
||||||
|
export const showX = (num) =>({ type: SHOW_CHANGE, payload: { num } })
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
export const TOGGLE_ITEM = "TOGGLE_ITEM";
|
export const TOGGLE_ITEM = "TOGGLE_ITEM";
|
||||||
export const CHANGE_SORT = "TOGGLE_SORT";
|
export const CHANGE_SORT = "TOGGLE_SORT";
|
||||||
|
export const SHOW_CHANGE = "SHOW_CHANGE";
|
||||||
@@ -3,16 +3,20 @@ import Checkbox from './Checkbox';
|
|||||||
|
|
||||||
export default class HelloWorld extends PureComponent {
|
export default class HelloWorld extends PureComponent {
|
||||||
render(){
|
render(){
|
||||||
let boxes = this.props.todoItems && this.props.todoItems.map(i => {
|
let boxes = this.props.todoItems && this.props.todoItems.slice(0, this.props.showX).map(i => {
|
||||||
return <Checkbox key={`${i.get('id')}-${i.get('name')}`} onFireEvnt={this.props.onCheckboxClick} checked={i.get('checked')} name={i.get('name')} itemId={i.get('id')} /> ;
|
return <Checkbox key={`${i.get('id')}-${i.get('name')}`} onFireEvnt={this.props.onCheckboxClick} checked={i.get('checked')} name={i.get('name')} itemId={i.get('id')} /> ;
|
||||||
})
|
})
|
||||||
return (
|
return (
|
||||||
<div>
|
<div class="main-content-wrap">
|
||||||
<select value={this.props.order} onChange={this.props.sortChanged}>
|
<select value={this.props.order} onChange={this.props.sortChanged}>
|
||||||
<option value="1">Asc</option>
|
<option value="1">Asc</option>
|
||||||
<option value="0">Dec</option>
|
<option value="0">Dec</option>
|
||||||
</select>
|
</select>
|
||||||
<h2>Hello React</h2>
|
<h2>Hello React</h2>
|
||||||
|
<div>
|
||||||
|
<label>Show Last <input type="number" value={this.props.showX} onChange={(evnt) => {this.props.onShowChange(evnt.target.value)}} /></label>
|
||||||
|
|
||||||
|
</div>
|
||||||
{boxes}
|
{boxes}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import HelloWorld from '../components/HelloWorld'
|
import HelloWorld from '../components/HelloWorld'
|
||||||
import { toggleItem, changeSort} from '../actions/check.js';
|
import { toggleItem, changeSort, showX} from '../actions/check.js';
|
||||||
import { computeDropoffs, stateItemsWithChecked, stateOrder} from '../selectors/todoSelector';
|
import { computeDropoffs, stateItemsWithChecked, stateOrder} from '../selectors/todoSelector';
|
||||||
export const mapStateToProps = (state) => {
|
export const mapStateToProps = (state) => {
|
||||||
let before = performance.now();
|
let before = performance.now();
|
||||||
// let todoItems = state.get('todoItems').sort(
|
|
||||||
// (a, b) =>
|
|
||||||
// state.get('order') > 0 ? a.get('name').localeCompare(b.get('name'))
|
|
||||||
// : b.get('name').localeCompare(a.get('name'))
|
|
||||||
// )
|
|
||||||
// .map(i => i.set("checked", state.get('checked').get(i.get("id").toString())));
|
|
||||||
|
|
||||||
let todoItems = stateItemsWithChecked(state);
|
const items = state.get("todoItems");
|
||||||
|
const order = state.get("order");
|
||||||
|
const stateChecked = state.get("checked")
|
||||||
|
|
||||||
|
let itemsOrdered = items.sort((a, b) => order > 0 ? a.get('name').localeCompare(b.get('name')): b.get('name').localeCompare(a.get('name')));
|
||||||
|
let todoItems = itemsOrdered.map(i => i.set("checked", stateChecked.get(i.get("id").toString())))
|
||||||
|
// let todoItems = stateItemsWithChecked(state);
|
||||||
let res =
|
let res =
|
||||||
{
|
{
|
||||||
todoItems,
|
todoItems,
|
||||||
|
order: stateOrder(state),
|
||||||
order: stateOrder(state)
|
showX: state.get('showX')
|
||||||
}
|
}
|
||||||
let after = performance.now();
|
let after = performance.now();
|
||||||
console.log(`took ${after - before}ms`)
|
console.log(`took ${after - before}ms`)
|
||||||
@@ -29,7 +29,8 @@ export const mapDispatchToProps = dispatch => ({
|
|||||||
},
|
},
|
||||||
sortChanged: (event) => {
|
sortChanged: (event) => {
|
||||||
dispatch(changeSort(event.target.value));
|
dispatch(changeSort(event.target.value));
|
||||||
}
|
},
|
||||||
|
onShowChange: (num) => dispatch(showX(num))
|
||||||
})
|
})
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { TOGGLE_ITEM, CHANGE_SORT } from "../actions/constants";
|
import { TOGGLE_ITEM, CHANGE_SORT, SHOW_CHANGE } from "../actions/constants";
|
||||||
import { Map } from 'immutable';
|
import { Map } from 'immutable';
|
||||||
export default function rootReducer(state, action){
|
export default function rootReducer(state, action){
|
||||||
switch(action.type) {
|
switch(action.type) {
|
||||||
@@ -9,6 +9,9 @@ export default function rootReducer(state, action){
|
|||||||
case CHANGE_SORT: {
|
case CHANGE_SORT: {
|
||||||
return state.set('order', action.payload.newSort );
|
return state.set('order', action.payload.newSort );
|
||||||
}
|
}
|
||||||
|
case SHOW_CHANGE: {
|
||||||
|
return state.set('showX', action.payload.num);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const stateChecked = state => state.get("checked");
|
|||||||
export const stateItems = state => state.get("todoItems");
|
export const stateItems = state => state.get("todoItems");
|
||||||
export const stateOrder = state => state.get("order");
|
export const stateOrder = state => state.get("order");
|
||||||
export const stateItemsAsList = createSelector([stateItems], x => x.toList());
|
export const stateItemsAsList = createSelector([stateItems], x => x.toList());
|
||||||
|
|
||||||
export const stateItemsOrdered = createSelector([stateItems, stateOrder], (items, order) =>{
|
export const stateItemsOrdered = createSelector([stateItems, stateOrder], (items, order) =>{
|
||||||
return items.sort((a, b) =>
|
return items.sort((a, b) =>
|
||||||
order > 0 ? a.get('name').localeCompare(b.get('name'))
|
order > 0 ? a.get('name').localeCompare(b.get('name'))
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ const store = createStore(
|
|||||||
accum[item.id] = item.checked;
|
accum[item.id] = item.checked;
|
||||||
return accum;
|
return accum;
|
||||||
}, {}),
|
}, {}),
|
||||||
order: 0
|
order: 0,
|
||||||
|
showX: 20
|
||||||
}),
|
}),
|
||||||
composedEnhancers
|
composedEnhancers
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ let nouns = [
|
|||||||
"bow",
|
"bow",
|
||||||
"keys"];
|
"keys"];
|
||||||
|
|
||||||
for (let i = 0; i <= 3000; i++) {
|
for (let i = 0; i <= 30000; i++) {
|
||||||
let randomVerb = _.sample(verbs);
|
let randomVerb = _.sample(verbs);
|
||||||
let randomNoun = _.sample(nouns);
|
let randomNoun = _.sample(nouns);
|
||||||
results.push(`${randomVerb} ${randomNoun}`);
|
results.push(`${randomVerb} ${randomNoun}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user