You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
2.9 KiB
130 lines
2.9 KiB
import { createSelector } from 'reselect'
|
|
|
|
// Initial State
|
|
const initialState = {
|
|
isOpen: false,
|
|
node_key: '',
|
|
local_amt: 0,
|
|
push_amt: 0,
|
|
|
|
step: 1
|
|
}
|
|
|
|
// Constants
|
|
// ------------------------------------
|
|
export const OPEN_CHANNEL_FORM = 'OPEN_CHANNEL_FORM'
|
|
export const CLOSE_CHANNEL_FORM = 'CLOSE_CHANNEL_FORM'
|
|
|
|
export const SET_NODE_KEY = 'SET_NODE_KEY'
|
|
export const SET_LOCAL_AMOUNT = 'SET_LOCAL_AMOUNT'
|
|
export const SET_PUSH_AMOUNT = 'SET_PUSH_AMOUNT'
|
|
|
|
export const CHANGE_STEP = 'CHANGE_STEP'
|
|
|
|
export const RESET_CHANNEL_FORM = 'RESET_CHANNEL_FORM'
|
|
|
|
// ------------------------------------
|
|
// Actions
|
|
// ------------------------------------
|
|
export function openChannelForm() {
|
|
return {
|
|
type: OPEN_CHANNEL_FORM
|
|
}
|
|
}
|
|
|
|
export function closeChannelForm() {
|
|
return {
|
|
type: CLOSE_CHANNEL_FORM
|
|
}
|
|
}
|
|
|
|
export function setNodeKey(node_key) {
|
|
return {
|
|
type: SET_NODE_KEY,
|
|
node_key
|
|
}
|
|
}
|
|
|
|
export function setLocalAmount(local_amt) {
|
|
return {
|
|
type: SET_LOCAL_AMOUNT,
|
|
local_amt
|
|
}
|
|
}
|
|
|
|
export function setPushAmount(push_amt) {
|
|
return {
|
|
type: SET_PUSH_AMOUNT,
|
|
push_amt
|
|
}
|
|
}
|
|
|
|
export function changeStep(step) {
|
|
return {
|
|
type: CHANGE_STEP,
|
|
step
|
|
}
|
|
}
|
|
|
|
export function resetChannelForm() {
|
|
return {
|
|
type: RESET_CHANNEL_FORM
|
|
}
|
|
}
|
|
|
|
// ------------------------------------
|
|
// Action Handlers
|
|
// ------------------------------------
|
|
const ACTION_HANDLERS = {
|
|
[OPEN_CHANNEL_FORM]: state => ({ ...state, isOpen: true }),
|
|
[CLOSE_CHANNEL_FORM]: state => ({ ...state, isOpen: false }),
|
|
|
|
[SET_NODE_KEY]: (state, { node_key }) => ({ ...state, node_key }),
|
|
[SET_LOCAL_AMOUNT]: (state, { local_amt }) => ({ ...state, local_amt }),
|
|
[SET_PUSH_AMOUNT]: (state, { push_amt }) => ({ ...state, push_amt }),
|
|
|
|
[CHANGE_STEP]: (state, { step }) => ({ ...state, step }),
|
|
|
|
[RESET_CHANNEL_FORM]: () => (initialState)
|
|
}
|
|
|
|
const channelFormSelectors = {}
|
|
const channelFormStepSelector = state => state.channelform.step
|
|
const channelFormLocalAmountSelector = state => state.channelform.local_amt
|
|
|
|
channelFormSelectors.channelFormHeader = createSelector(
|
|
channelFormStepSelector,
|
|
(step) => {
|
|
switch (step) {
|
|
case 1:
|
|
return 'Step 1: Select a peer'
|
|
case 2:
|
|
return 'Step 2: Set your local amount'
|
|
case 3:
|
|
return 'Step 3: Set your push amount'
|
|
default:
|
|
return 'Step 4: Create your channel'
|
|
}
|
|
}
|
|
)
|
|
|
|
channelFormSelectors.channelFormProgress = createSelector(
|
|
channelFormStepSelector,
|
|
step => ((step - 1) / 3) * 100
|
|
)
|
|
|
|
channelFormSelectors.stepTwoIsValid = createSelector(
|
|
channelFormLocalAmountSelector,
|
|
local_amt => local_amt > 0
|
|
)
|
|
|
|
export { channelFormSelectors }
|
|
|
|
// ------------------------------------
|
|
// Reducer
|
|
// ------------------------------------
|
|
export default function channelFormReducer(state = initialState, action) {
|
|
const handler = ACTION_HANDLERS[action.type]
|
|
|
|
return handler ? handler(state, action) : state
|
|
}
|
|
|