Add mark action and reducer
This commit is contained in:
parent
bf8cfbcb35
commit
bf283c732e
5 changed files with 129 additions and 0 deletions
|
@ -22,4 +22,10 @@ export default {
|
||||||
|
|
||||||
// Find
|
// Find
|
||||||
FIND_SET_KEYWORD: 'find.set.keyword',
|
FIND_SET_KEYWORD: 'find.set.keyword',
|
||||||
|
|
||||||
|
// Mark
|
||||||
|
MARK_START_SET: 'mark.start.set',
|
||||||
|
MARK_START_JUMP: 'mark.start.jump',
|
||||||
|
MARK_CANCEL: 'mark.cancel',
|
||||||
|
MARK_SET_LOCAL: 'mark.set.local',
|
||||||
};
|
};
|
||||||
|
|
25
src/content/actions/mark.js
Normal file
25
src/content/actions/mark.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import actions from 'content/actions';
|
||||||
|
|
||||||
|
const startSet = () => {
|
||||||
|
return { type: actions.MARK_START_SET };
|
||||||
|
};
|
||||||
|
|
||||||
|
const startJump = () => {
|
||||||
|
return { type: actions.MARK_START_JUMP };
|
||||||
|
};
|
||||||
|
|
||||||
|
const cancel = () => {
|
||||||
|
return { type: actions.MARK_CANCEL };
|
||||||
|
};
|
||||||
|
|
||||||
|
const setLocal = (key, y) => {
|
||||||
|
return {
|
||||||
|
type: actions.MARK_SET_LOCAL,
|
||||||
|
key,
|
||||||
|
y,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
startSet, startJump, cancel, setLocal,
|
||||||
|
};
|
25
src/content/reducers/mark.js
Normal file
25
src/content/reducers/mark.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import actions from 'content/actions';
|
||||||
|
|
||||||
|
const defaultState = {
|
||||||
|
set: false,
|
||||||
|
jump: false,
|
||||||
|
marks: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function reducer(state = defaultState, action = {}) {
|
||||||
|
switch (action.type) {
|
||||||
|
case actions.MARK_START_SET:
|
||||||
|
return { ...state, set: true };
|
||||||
|
case actions.MARK_START_JUMP:
|
||||||
|
return { ...state, jump: true };
|
||||||
|
case actions.MARK_CANCEL:
|
||||||
|
return { ...state, set: false, jump: false };
|
||||||
|
case actions.MARK_SET_LOCAL: {
|
||||||
|
let marks = { ...state.marks };
|
||||||
|
marks[action.key] = { y: action.y };
|
||||||
|
return { ...state, marks };
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
34
test/content/actions/mark.test.js
Normal file
34
test/content/actions/mark.test.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import actions from 'content/actions';
|
||||||
|
import * as markActions from 'content/actions/mark';
|
||||||
|
|
||||||
|
describe('mark actions', () => {
|
||||||
|
describe('startSet', () => {
|
||||||
|
it('create MARK_START_SET action', () => {
|
||||||
|
let action = markActions.startSet();
|
||||||
|
expect(action.type).to.equal(actions.MARK_START_SET);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('startJump', () => {
|
||||||
|
it('create MARK_START_JUMP action', () => {
|
||||||
|
let action = markActions.startJump();
|
||||||
|
expect(action.type).to.equal(actions.MARK_START_JUMP);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('cancel', () => {
|
||||||
|
it('create MARK_CANCEL action', () => {
|
||||||
|
let action = markActions.cancel();
|
||||||
|
expect(action.type).to.equal(actions.MARK_CANCEL);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('setLocal', () => {
|
||||||
|
it('create setLocal action', () => {
|
||||||
|
let action = markActions.setLocal('a', 30);
|
||||||
|
expect(action.type).to.equal(actions.MARK_SET_LOCAL);
|
||||||
|
expect(action.key).to.equal('a');
|
||||||
|
expect(action.y).to.equal(30);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
39
test/content/reducers/mark.test.js
Normal file
39
test/content/reducers/mark.test.js
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import actions from 'content/actions';
|
||||||
|
import reducer from 'content/reducers/mark';
|
||||||
|
|
||||||
|
describe("mark reducer", () => {
|
||||||
|
it('return the initial state', () => {
|
||||||
|
let state = reducer(undefined, {});
|
||||||
|
expect(state.set).to.be.false;
|
||||||
|
expect(state.jump).to.be.false;
|
||||||
|
expect(state.marks).to.be.empty;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('starts set mode', () => {
|
||||||
|
let action = { type: actions.MARK_START_SET };
|
||||||
|
let state = reducer(undefined, action);
|
||||||
|
expect(state.set).to.be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('starts jump mode', () => {
|
||||||
|
let action = { type: actions.MARK_START_JUMP };
|
||||||
|
let state = reducer(undefined, action);
|
||||||
|
expect(state.jump).to.be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('cancels set and jump mode', () => {
|
||||||
|
let action = { type: actions.MARK_CANCEL };
|
||||||
|
let state = reducer({ set: true }, action);
|
||||||
|
expect(state.set).to.be.false;
|
||||||
|
|
||||||
|
state = reducer({ jump: true }, action);
|
||||||
|
expect(state.jump).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('stores local mark', () => {
|
||||||
|
let action = { type: actions.MARK_SET_LOCAL, key: 'a', y: 10 };
|
||||||
|
let state = reducer(undefined, action);
|
||||||
|
expect(state.marks['a']).to.be.an('object')
|
||||||
|
expect(state.marks['a'].y).to.equal(10)
|
||||||
|
});
|
||||||
|
});
|
Reference in a new issue