Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita6f6a14

Browse files
committed
config paths earlier, refactor alert/progress reducers
1 parentaf19182 commita6f6a14

File tree

26 files changed

+168
-69
lines changed

26 files changed

+168
-69
lines changed

‎lib/actions/alert.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
var_types_1=require('./_types');
33
functionalertToggle(alert,filter){
44
returnfunction(dispatch,getState){
5-
dispatch({type:_types_1.ALERT_TOGGLE,payload:{alert:alert}});
5+
dispatch({type:_types_1.ALERT_TOGGLE,payload:{alert:alert},filter:filter});
66
};
77
}
88
exports.alertToggle=alertToggle;

‎lib/actions/page.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use strict";
22
var_types_1=require('./_types');
3-
varconfig_task_tests_1=require('./config-task-tests');
43
varhint_1=require('./hint');
54
functionpageNext(){
65
returnfunction(dispatch,getState){
@@ -20,7 +19,7 @@ function pageSet(pagePosition) {
2019
if(pagePosition===void0){pagePosition=0;}
2120
returnfunction(dispatch,getState){
2221
var_a=getState(),dir=_a.dir,progress=_a.progress,tutorial=_a.tutorial;
23-
vartasks=config_task_tests_1.default(dir,tutorial,tutorial.pages[pagePosition].tasks||[]);
22+
vartasks=tutorial.pages[pagePosition].tasks||[];
2423
if(pagePosition>=progress.pages.length){
2524
dispatch({type:_types_1.ROUTE_SET,payload:{route:'final'}});
2625
}

‎lib/actions/progress.js

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
22
var_types_1=require('./_types');
33
varalert_1=require('./alert');
4+
vartest_1=require('./test');
45
functionprogressPagePositionLoad(){
56
returnfunction(dispatch,getState){
67
varprogress=getState().progress;
@@ -13,29 +14,37 @@ function progressLoad() {
1314
vartutorial=getState().tutorial;
1415
dispatch({type:_types_1.PROGRESS_LOAD,payload:{tutorial:tutorial}});
1516
dispatch(progressPagePositionLoad());
17+
dispatch(test_1.testRun());
1618
};
1719
}
1820
exports.progressLoad=progressLoad;
19-
functioncompletePage(){
21+
functioncompletePage(completed){
22+
if(completed===void0){completed=true;}
2023
returnfunction(dispatch,getState){
2124
var_a=getState(),pagePosition=_a.pagePosition,progress=_a.progress,tutorial=_a.tutorial;
22-
dispatch({type:_types_1.COMPLETE_PAGE,payload:{pagePosition:pagePosition,tutorial:tutorial}});
23-
if(progress.pages.every(function(x){returnx.completed;})){
24-
dispatch(completeTutorial());
25+
dispatch({type:_types_1.COMPLETE_PAGE,payload:{pagePosition:pagePosition,tutorial:tutorial,completed:completed}});
26+
if(completed){
27+
if(progress.pages.every(function(x){returnx.completed;})){
28+
dispatch(completeTutorial());
29+
}
30+
else{
31+
dispatch(alert_1.alertToggle({
32+
message:"Page "+(pagePosition+1)+" Complete",
33+
action:'pass',
34+
}));
35+
}
2536
}
26-
else{
27-
dispatch(alert_1.alertToggle({
28-
message:"Page "+(pagePosition+1)+" Complete",
29-
action:'pass',
30-
}));
37+
elseif(progress.completed){
38+
dispatch(completeTutorial(false));
3139
}
3240
};
3341
}
3442
exports.completePage=completePage;
35-
functioncompleteTutorial(){
43+
functioncompleteTutorial(completed){
44+
if(completed===void0){completed=true;}
3645
returnfunction(dispatch,getState){
3746
vartutorial=getState().tutorial;
38-
dispatch({type:_types_1.COMPLETE_TUTORIAL,payload:{tutorial:tutorial}});
47+
dispatch({type:_types_1.COMPLETE_TUTORIAL,payload:{tutorial:tutorial,completed:completed}});
3948
dispatch(alert_1.alertToggle({
4049
message:'Tutorial Complete',
4150
action:'pass',

‎lib/actions/test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
22
var_types_1=require('./_types');
33
varhint_1=require('./hint');
4+
varprogress_1=require('./progress');
45
functiontestRun(){
56
returnfunction(dispatch,getState){
67
var_a=getState(),taskTests=_a.taskTests,dir=_a.dir,tutorial=_a.tutorial,taskPosition=_a.taskPosition;
@@ -12,11 +13,14 @@ function testRun() {
1213
exports.testRun=testRun;
1314
functiontestResult(result){
1415
returnfunction(dispatch,getState){
15-
vartaskActions=getState().taskActions;
16+
var_a=getState(),taskActions=_a.taskActions,progress=_a.progress,pagePosition=_a.pagePosition;
1617
varfilter=getTestFilter(result);
17-
if(result.change!==0){
18+
if(filter==='PASS'||filter==='FAIL'){
1819
dispatch(hint_1.hintPositionSet(0));
1920
}
21+
if(filter==='FAIL'&&progress.pages[pagePosition]){
22+
dispatch(progress_1.completePage(false));
23+
}
2024
dispatch({type:_types_1.TEST_RESULT,payload:{result:result,taskActions:taskActions},filter:filter});
2125
};
2226
}

‎lib/components/Page/Tasks/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var Tasks = (function (_super) {
2828
var_a=this.props,tasks=_a.tasks,taskPosition=_a.taskPosition,testRun=_a.testRun,completed=_a.completed,page=_a.page;
2929
varvisTasks=visibleTasks(tasks,taskPosition);
3030
varbackgroundColor=completed ?colors_1.lightGreen200 :'white';
31-
return(React.createElement("div",null,React.createElement(Card_1.Card,{style:{backgroundColor:backgroundColor,margin:margin}},React.createElement(List_1.List,null,React.createElement(Subheader_1.default,null,"Tasks"),visTasks.map(function(task,index){return(React.createElement(Task_1.default,{key:index,index:index,task:task,taskPosition:taskPosition,testRun:testRun}));}))),React.createElement(TasksComplete_1.default,{page:page}),React.createElement("div",{ref:'listEnd'})));
31+
return(React.createElement("div",null,React.createElement(Card_1.Card,{style:{backgroundColor:backgroundColor,margin:margin}},React.createElement(List_1.List,null,React.createElement(Subheader_1.default,null,"Tasks"),visTasks.map(function(task,index){return(React.createElement(Task_1.default,{key:index,index:index,task:task,taskPosition:taskPosition,testRun:testRun}));}))),React.createElement(TasksComplete_1.default,{page:page,completed:completed}),React.createElement("div",{ref:'listEnd'})));
3232
};
3333
returnTasks;
3434
}(React.Component));

‎lib/components/Page/TasksComplete/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ var textStyles = {
1212
fontSize:'1.1em'
1313
};
1414
varTasksComplete=function(_a){
15-
varpage=_a.page;
16-
if(!page.completed||!page.onPageComplete){
15+
varpage=_a.page,completed=_a.completed;
16+
if(!completed||!page.onPageComplete){
1717
returnnull;
1818
}
1919
return(React.createElement(Card_1.Card,{style:styles},React.createElement(Card_1.CardText,null,React.createElement(index_1.Markdown,{style:textStyles},page.onPageComplete))));

‎lib/components/Page/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ var styles = {
1010
overflowY:'scroll',
1111
};
1212
varPage=function(_a){
13-
varpage=_a.page,taskPosition=_a.taskPosition,hintPosition=_a.hintPosition,tasks=_a.tasks,testRun=_a.testRun;
13+
varpage=_a.page,taskPosition=_a.taskPosition,hintPosition=_a.hintPosition,tasks=_a.tasks,testRun=_a.testRun,progress=_a.progress,pagePosition=_a.pagePosition;
1414
vartask=taskPosition<=tasks.length ?tasks[taskPosition] :null;
15-
varcompleted=page.completed;
15+
varcompleted=progress.pages[pagePosition];
1616
return(React.createElement("section",{style:styles,className:'cr-page'},React.createElement(index_1.ContentCard,{title:page.title,content:page.description}),React.createElement(Tasks_1.default,{tasks:tasks,taskPosition:taskPosition,testRun:testRun,completed:completed,page:page}),React.createElement(PageToolbar_1.default,{tasks:tasks,taskPosition:taskPosition},React.createElement(Hints_1.default,{task:task,hintPosition:hintPosition}),React.createElement(ProgressBar_1.default,{taskLength:tasks.length,taskPosition:taskPosition,completed:completed}))));
1717
};
1818
Object.defineProperty(exports,"__esModule",{value:true});

‎lib/reducers/alert/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function alertReducer(alert, action) {
3434
});
3535
case_types_1.TEST_RESULT:
3636
varresult=action.payload.result;
37-
switch(action.payload.filter){
37+
switch(action.filter){
3838
case'PASS':
3939
returnsetAlert({
4040
message:result.msg,

‎lib/reducers/page/index.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,18 @@ var _types_1 = require('../../actions/_types');
33
var_page={
44
title:'',
55
description:'',
6-
completed:false,
76
};
87
functionpageReducer(p,action){
98
if(p===void0){p=_page;}
109
switch(action.type){
1110
case_types_1.PAGE_SET:
1211
var_a=action.payload,pagePosition=_a.pagePosition,tutorial=_a.tutorial;
13-
var_b=tutorial.pages[pagePosition],title=_b.title,description=_b.description,onPageComplete=_b.onPageComplete,completed=_b.completed;
12+
var_b=tutorial.pages[pagePosition],title=_b.title,description=_b.description,onPageComplete=_b.onPageComplete;
1413
return{
1514
title:title,
1615
description:description,
1716
onPageComplete:onPageComplete,
18-
completed:completed||false
1917
};
20-
case_types_1.COMPLETE_PAGE:
21-
returnObject.assign({},p,{completed:true});
2218
default:
2319
returnp;
2420
}

‎lib/reducers/progress/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ function progressReducer(progress, action) {
1919
pages:tutorial.pages.map(function(){returnfalse;})
2020
};
2121
case_types_1.COMPLETE_PAGE:
22-
var_a=action.payload,tutorial=_a.tutorial,pagePosition=_a.pagePosition;
23-
progress.pages[pagePosition]=true;
22+
var_a=action.payload,tutorial=_a.tutorial,pagePosition=_a.pagePosition,completed=_a.completed;
23+
progress.pages[pagePosition]=completed;
2424
local_storage_1.saveToLocalStorage(tutorial,progress);
2525
returnprogress;
2626
case_types_1.COMPLETE_TUTORIAL:
27-
vartutorial=action.payload.tutorial.tutorial;
28-
progress.completed=true;
27+
var_b=action.payload.tutorial,tutorial=_b.tutorial,completed=_b.completed;
28+
progress.completed=completed;
2929
local_storage_1.saveToLocalStorage(tutorial,progress);
3030
returnprogress;
3131
default:

‎lib/reducers/tutorial/config-paths.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"use strict";
2+
varpath_1=require('path');
3+
varsystem_1=require('../../services/system');
4+
functionconfigTestString(dir,name,config,testPath){
5+
if(system_1.isWindows){
6+
testPath=testPath.split('/').join('\\');
7+
}
8+
if(config.dir){
9+
testPath=path_1.join(config.dir,testPath);
10+
}
11+
else{
12+
testPath=path_1.join(dir,'node_modules',name,testPath);
13+
}
14+
if(config.testSuffix){
15+
testPath+=config.testSuffix;
16+
}
17+
returntestPath;
18+
}
19+
functionconfigPaths(dir,name,config,pages){
20+
returnpages.map(function(page){
21+
page.tasks.map(function(task){
22+
task.tests=task.tests.map(function(testPath){
23+
if(typeoftestPath==='string'){
24+
returnconfigTestString(dir,name,config,testPath);
25+
}
26+
else{
27+
console.error('Invalid task test',testPath);
28+
}
29+
});
30+
returntask;
31+
});
32+
returnpage;
33+
});
34+
}
35+
Object.defineProperty(exports,"__esModule",{value:true});
36+
exports.default=configPaths;

‎lib/reducers/tutorial/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
varpath_1=require('path');
33
vartutorial_config_1=require('./tutorial-config');
44
var_types_1=require('../../actions/_types');
5+
varconfig_paths_1=require('./config-paths');
56
var_tutorial={
67
name:null,
78
info:null,
@@ -18,6 +19,7 @@ function tutorialReducer(tutorial, action) {
1819
varpackageJson=require(path_1.join(packagePath,'package.json'));
1920
varconfig=tutorial_config_1.tutorialConfig(packageJson,dir);
2021
var_b=require(path_1.join(packagePath,packageJson.main)),info=_b.info,pages=_b.pages;
22+
pages=config_paths_1.default(dir,name_1,config,pages||[]);
2123
return{
2224
name:packageJson.name,
2325
info:info,

‎src/actions/alert.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {ALERT_REPLAY, ALERT_TOGGLE} from './_types';
22

33
exportfunctionalertToggle(alert:Object,filter?:string):ReduxThunk.ThunkInterface{
44
return(dispatch,getState):void=>{
5-
dispatch({type:ALERT_TOGGLE,payload:{ alert}});
5+
dispatch({type:ALERT_TOGGLE,payload:{ alert}, filter});
66
};
77
}
88

‎src/actions/page.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import{
22
ROUTE_SET,PAGE_SET,PAGE_POSITION_SET
33
}from'./_types';
4-
importconfigTaskTestsfrom'./config-task-tests';
54
import{hintPositionSet}from'./hint';
65

76
exportfunctionpageNext():ReduxThunk.ThunkInterface|Action{
@@ -21,9 +20,7 @@ export function pageSet(pagePosition = 0): ReduxThunk.ThunkInterface {
2120
return(dispatch,getState):void=>{
2221
const{dir, progress, tutorial}=getState();
2322
// create absolute paths for 'task-tests'
24-
consttasks=configTaskTests(
25-
dir,tutorial,tutorial.pages[pagePosition].tasks||[]
26-
);
23+
consttasks=tutorial.pages[pagePosition].tasks||[];
2724
if(pagePosition>=progress.pages.length){
2825
dispatch({type:ROUTE_SET,payload:{route:'final'}});
2926
}

‎src/actions/progress.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
PROGRESS_PAGE_POSITION_LOAD,PROGRESS_LOAD,COMPLETE_PAGE,COMPLETE_TUTORIAL
33
}from'./_types';
44
import{alertToggle}from'./alert';
5+
import{testRun}from'./test';
56

67
exportfunctionprogressPagePositionLoad():ReduxThunk.ThunkInterface{
78
return(dispatch,getState):void=>{
@@ -16,29 +17,34 @@ export function progressLoad(): ReduxThunk.ThunkInterface {
1617
dispatch({type:PROGRESS_LOAD,payload:{ tutorial}});
1718
// call pagePositionLoad after progress loads
1819
dispatch(progressPagePositionLoad());
20+
dispatch(testRun());
1921
};
2022
}
2123

22-
exportfunctioncompletePage():ReduxThunk.ThunkInterface{
24+
exportfunctioncompletePage(completed=true):ReduxThunk.ThunkInterface{
2325
return(dispatch,getState):void=>{
2426
const{pagePosition, progress, tutorial}=getState();
2527
// all pages are true, tutorial complete
26-
dispatch({type:COMPLETE_PAGE,payload:{ pagePosition, tutorial}});
27-
if(progress.pages.every(x=>x.completed)){
28-
dispatch(completeTutorial());
29-
}else{
30-
dispatch(alertToggle({
31-
message:`Page${pagePosition+1} Complete`,
32-
action:'pass',
33-
}));
28+
dispatch({type:COMPLETE_PAGE,payload:{ pagePosition, tutorial, completed}});
29+
if(completed){
30+
if(progress.pages.every(x=>x.completed)){
31+
dispatch(completeTutorial());
32+
}else{
33+
dispatch(alertToggle({
34+
message:`Page${pagePosition+1} Complete`,
35+
action:'pass',
36+
}));
37+
}
38+
}elseif(progress.completed){
39+
dispatch(completeTutorial(false));
3440
}
3541
};
3642
}
3743

38-
exportfunctioncompleteTutorial():ReduxThunk.ThunkInterface{
44+
exportfunctioncompleteTutorial(completed=true):ReduxThunk.ThunkInterface{
3945
return(dispatch,getState):void=>{
4046
const{tutorial}=getState();
41-
dispatch({type:COMPLETE_TUTORIAL,payload:{ tutorial}});
47+
dispatch({type:COMPLETE_TUTORIAL,payload:{ tutorial, completed}});
4248
dispatch(alertToggle({
4349
message:'Tutorial Complete',
4450
action:'pass',

‎src/actions/test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
TEST_RUN,TEST_RESULT,TEST_COMPLETE,TEST_SAVE
33
}from'./_types';
44
import{hintPositionSet}from'./hint';
5+
import{completePage}from'./progress';
56

67
exportfunctiontestRun():ReduxThunk.ThunkInterface{
78
return(dispatch,getState):void=>{
@@ -14,11 +15,14 @@ export function testRun(): ReduxThunk.ThunkInterface {
1415

1516
exportfunctiontestResult(result:Test.Result):ReduxThunk.ThunkInterface{
1617
return(dispatch,getState):void=>{
17-
const{taskActions}=getState();
18+
const{taskActions, progress, pagePosition}=getState();
1819
constfilter:string=getTestFilter(result);
19-
if(result.change!==0){
20+
if(filter==='PASS'||filter==='FAIL'){
2021
dispatch(hintPositionSet(0));
2122
}
23+
if(filter==='FAIL'&&progress.pages[pagePosition]){
24+
dispatch(completePage(false));
25+
}
2226
dispatch({type:TEST_RESULT,payload:{ result, taskActions}, filter});
2327
};
2428
}

‎src/components/Page/Tasks/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ export default class Tasks extends React.Component<{
4545
</List>
4646
</Card>
4747

48-
<TasksCompletepage={page}/>
48+
<TasksComplete
49+
page={page}
50+
completed={completed}
51+
/>
4952

5053
<divref='listEnd'/>
5154
</div>

‎src/components/Page/TasksComplete/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ const textStyles = {
1414
};
1515

1616
constTasksComplete:React.StatelessComponent<{
17-
page:CR.Page
18-
}>=({page})=>{
19-
if(!page.completed||!page.onPageComplete){returnnull;}
17+
page:CR.Page,completed:boolean
18+
}>=({page, completed})=>{
19+
if(!completed||!page.onPageComplete){returnnull;}
2020
return(
2121
<Cardstyle={styles}>
2222
<CardText>

‎src/components/Page/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ const styles = {
1414

1515
constPage:React.StatelessComponent<{
1616
page:CR.Page,tasks:CR.Task[],taskPosition:number,
17-
hintPosition:number,testRun:boolean
18-
}>=({page, taskPosition, hintPosition, tasks, testRun})=>{
17+
hintPosition:number,testRun:boolean,
18+
progress:CR.Progress,pagePosition:number
19+
}>=({page, taskPosition, hintPosition, tasks, testRun, progress, pagePosition})=>{
1920
consttask=taskPosition<=tasks.length ?tasks[taskPosition] :null;
20-
constcompleted=page.completed;
21+
constcompleted=progress.pages[pagePosition];
2122
return(
2223
<sectionstyle={styles}className='cr-page'>
2324
<ContentCard

‎src/reducers/alert/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default function alertReducer(
4646
caseTEST_RESULT:
4747
constresult=action.payload.result;
4848

49-
switch(action.payload.filter){
49+
switch(action.filter){
5050

5151
case'PASS':
5252
returnsetAlert({

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp