Skip to content

Commit 46e3bf8

Browse files
committed
refactor selectors
1 parent 761af3a commit 46e3bf8

File tree

14 files changed

+35
-31
lines changed

14 files changed

+35
-31
lines changed

lib/components/Page/Task/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var index_1 = require('../../index');
1919
var taskCheckbox_1 = require('./taskCheckbox');
2020
var List_1 = require('material-ui/List');
2121
var colors_1 = require('material-ui/styles/colors');
22+
var selectors_1 = require('../../../selectors');
2223
var styles = {
2324
task: {
2425
margin: '5px',
@@ -52,6 +53,7 @@ var Task = (function (_super) {
5253
react_redux_1.connect(function (state, props) { return ({
5354
testRun: state.testRun,
5455
isCompletedTask: state.taskPosition > props.index,
56+
task: selectors_1.taskByIndexSelector(state, props)
5557
}); }),
5658
__metadata('design:paramtypes', [])
5759
], Task);

lib/components/Page/Tasks/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ var Tasks = (function (_super) {
3434
Tasks.prototype.render = function () {
3535
var _a = this.props, tasks = _a.tasks, completed = _a.completed;
3636
var backgroundColor = completed ? colors_1.lightGreen200 : 'white';
37-
return (React.createElement(Card_1.Card, {style: { backgroundColor: backgroundColor, margin: margin }}, React.createElement(List_1.List, null, React.createElement(Subheader_1.default, null, "Tasks"), tasks.map(function (task, index) { return (React.createElement(Task_1.default, {key: index, index: index, task: task})); })), React.createElement("div", {ref: 'listEnd'})));
37+
return (React.createElement(Card_1.Card, {style: { backgroundColor: backgroundColor, margin: margin }}, React.createElement(List_1.List, null, React.createElement(Subheader_1.default, null, "Tasks"), tasks.map(function (task, index) {
38+
return React.createElement(Task_1.default, {key: index, index: index});
39+
}), "}"), React.createElement("div", {ref: 'listEnd'})));
3840
};
3941
Tasks = __decorate([
4042
react_redux_1.connect(function (state) { return ({

lib/modules/tutorial/reducer.js

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ function tutorialReducer(t, action) {
1818
var _a = action.payload, name_1 = _a.name, dir = _a.dir;
1919
var packagePath = path_1.join(dir, 'node_modules', name_1);
2020
var packageJson = require(path_1.join(packagePath, 'package.json'));
21-
console.log(packageJson);
2221
var config = config_1.tutorialConfig(packageJson, dir);
2322
var coderoadJsonPath = path_1.join(packagePath, packageJson.main);
2423
var _b = require(coderoadJsonPath), info = _b.info, pages = _b.pages;

lib/selectors/hints.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
var reselect_1 = require('reselect');
33
var tasks_1 = require('./tasks');
4-
exports.hintsSelector = reselect_1.createSelector(tasks_1.taskSelector, function (task) { return task && task.hints ? task.hints : []; });
4+
exports.hintsSelector = reselect_1.createSelector(tasks_1.currentTaskSelector, function (task) { return task && task.hints ? task.hints : []; });
55
exports.hintSelector = reselect_1.createSelector(exports.hintsSelector, function (state) { return state.hintPosition; }, function (hints, hintPosition) { return (hintPosition >= 0 && hints && hints.length) ?
66
hints[hintPosition] : null; });
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
"use strict";
2-
var hints_1 = require('./selectors/hints');
2+
var hints_1 = require('./hints');
33
exports.hintsSelector = hints_1.hintsSelector;
44
exports.hintSelector = hints_1.hintSelector;
5-
var page_1 = require('./selectors/page');
5+
var page_1 = require('./page');
66
exports.pageSelector = page_1.pageSelector;
77
exports.pageCompletedSelector = page_1.pageCompletedSelector;
8-
var tasks_1 = require('./selectors/tasks');
8+
var tasks_1 = require('./tasks');
99
exports.tasksSelector = tasks_1.tasksSelector;
10-
exports.taskPositionSelector = tasks_1.taskPositionSelector;
11-
exports.taskSelector = tasks_1.taskSelector;
10+
exports.currentTaskSelector = tasks_1.currentTaskSelector;
1211
exports.visibleTasksSelector = tasks_1.visibleTasksSelector;
1312
exports.taskProgressSelector = tasks_1.taskProgressSelector;
14-
var packageJson_1 = require('./selectors/packageJson');
13+
exports.taskByIndexSelector = tasks_1.taskByIndexSelector;
14+
var packageJson_1 = require('./packageJson');
1515
exports.configSelector = packageJson_1.configSelector;

lib/selectors/tasks.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
var reselect_1 = require('reselect');
33
var page_1 = require('./page');
44
exports.tasksSelector = reselect_1.createSelector(page_1.pageSelector, function (page) { return page.tasks; });
5-
exports.taskPositionSelector = function (state) { return state.taskPosition; };
6-
exports.taskSelector = reselect_1.createSelector(exports.tasksSelector, function (state) { return state.taskPosition; }, function (tasks, taskPosition) { return tasks.length && taskPosition <= tasks.length - 1 ?
5+
exports.currentTaskSelector = reselect_1.createSelector(exports.tasksSelector, function (state) { return state.taskPosition; }, function (tasks, taskPosition) { return tasks.length && taskPosition <= tasks.length - 1 ?
76
tasks[taskPosition] : null; });
7+
exports.taskByIndexSelector = reselect_1.createSelector(exports.tasksSelector, function (state, props) { return props.index; }, function (tasks, index) { return tasks[index]; });
88
exports.visibleTasksSelector = reselect_1.createSelector(exports.tasksSelector, function (state) { return state.taskPosition; }, function (tasks, taskPosition) { return tasks.slice(0, taskPosition + 1); });
99
exports.taskProgressSelector = reselect_1.createSelector(exports.tasksSelector, function (state) { return state.taskPosition; }, function (tasks, taskPosition) { return (taskPosition / tasks.length) * 100; });

src/components/Page/Task/index.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {Markdown} from '../../index';
44
import TaskCheckbox from './taskCheckbox';
55
import {ListItem} from 'material-ui/List';
66
import {lightGreen200, orange200} from 'material-ui/styles/colors';
7+
import {taskByIndexSelector} from '../../../selectors';
78

89
const styles = {
910
task: {
@@ -28,9 +29,10 @@ const styles = {
2829
@connect((state, props) => ({
2930
testRun: state.testRun,
3031
isCompletedTask: state.taskPosition > props.index,
32+
task: taskByIndexSelector(state, props)
3133
}))
3234
export default class Task extends React.Component<{
33-
task: CR.Task, index: number, testRun?: boolean,
35+
task?: CR.Task, index: number, testRun?: boolean,
3436
isCurrentTask?: boolean, isCompletedTask?: boolean
3537
}, {}> {
3638
render() {

src/components/Page/Tasks/index.tsx

+4-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {Card} from 'material-ui/Card';
66
import Subheader from 'material-ui/Subheader';
77
import Task from '../Task';
88
import {lightGreen200} from 'material-ui/styles/colors';
9-
import {visibleTasksSelector, pageCompletedSelector} from '../../../selectors';
9+
import {pageCompletedSelector, visibleTasksSelector} from '../../../selectors';
1010

1111
const margin = '10px 5px';
1212

@@ -32,13 +32,9 @@ export default class Tasks extends React.Component<{
3232
<List>
3333
<Subheader>Tasks</Subheader>
3434

35-
{tasks.map((task: CR.Task, index: number) => (
36-
<Task
37-
key={index}
38-
index={index}
39-
task={task}
40-
/>)
41-
)}
35+
{tasks.map((task, index: number) => {
36+
return <Task key={index} index={index} />;
37+
})}}
4238

4339
</List>
4440
<div ref='listEnd' />

src/modules/tutorial/reducer.ts

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ export default function tutorialReducer(
2424
// get tutorial package.json
2525
const packagePath: string = join(dir, 'node_modules', name);
2626
const packageJson: PackageJson = require(join(packagePath, 'package.json'));
27-
console.log(packageJson);
2827

2928
const config: Tutorial.Config = tutorialConfig(packageJson, dir);
3029
const coderoadJsonPath = join(packagePath, packageJson.main);

src/selectors.ts

-4
This file was deleted.

src/selectors/hints.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {createSelector} from 'reselect';
2-
import {taskSelector} from './tasks';
2+
import {currentTaskSelector} from './tasks';
33

44
export const hintsSelector = createSelector(
5-
taskSelector,
5+
currentTaskSelector,
66
task => task && task.hints ? task.hints : []
77
);
88

src/selectors/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export {hintsSelector, hintSelector} from './hints';
2+
export {pageSelector, pageCompletedSelector} from './page';
3+
export {tasksSelector, currentTaskSelector, visibleTasksSelector, taskProgressSelector, taskByIndexSelector} from './tasks';
4+
export {configSelector} from './packageJson';

src/selectors/tasks.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@ export const tasksSelector = createSelector(
66
page => page.tasks
77
);
88

9-
export const taskPositionSelector = state => state.taskPosition;
10-
11-
export const taskSelector = createSelector(
9+
export const currentTaskSelector = createSelector(
1210
tasksSelector,
1311
state => state.taskPosition,
1412
(tasks, taskPosition) => tasks.length && taskPosition <= tasks.length - 1 ?
1513
tasks[taskPosition] : null
1614
);
1715

16+
export const taskByIndexSelector = createSelector(
17+
tasksSelector,
18+
(state, props) => props.index,
19+
(tasks, index) => tasks[index]
20+
);
21+
1822
export const visibleTasksSelector = createSelector(
1923
tasksSelector,
2024
state => state.taskPosition,

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@
7777
"src/modules/tutorials/reducer.ts",
7878
"src/modules/tutorials/types.ts",
7979
"src/reducers.ts",
80-
"src/selectors.ts",
8180
"src/selectors/hints.ts",
81+
"src/selectors/index.ts",
8282
"src/selectors/packageJson.ts",
8383
"src/selectors/page.ts",
8484
"src/selectors/tasks.ts",

0 commit comments

Comments
 (0)