import { has, pick, values } from 'lodash' import * as actions from './actions' const root = (state: any) => state.playbook export const playbookList = (state: any) => root(state).playbookList const searchPlaybooksStatus = (state: any) => root(state).searchPlaybooksStatus export const searchPlaybooksPending = (state: any) => searchPlaybooksStatus(state) === actions.searchPlaybooksPending() export const emailsByTabId = (state: any) => root(state).emailsByTabId export const emails = (state: any, props: any) => emailsByTabId(state)[props.tabId] || [] export const activeTabId = (state: any) => root(state).activeTabId export const enrolledSequenceCount = (state: any) => root(state).enrolledSequenceCount const fetchEnrolledSequenceCountStatus = (state: any) => root(state).fetchEnrolledSequenceCountStatus export const enrolledSequenceCountLoaded = (state: any) => { return fetchEnrolledSequenceCountStatus(state) === actions.fetchEnrolledSequenceCountSuccess.toString() } const playbookForEndUserByTabId = (state: any) => root(state).playbookForEndUserByTabId export const playbookForEndUser = (state: any, props: any) => playbookForEndUserByTabId(state)[props.tabId] export const editingPlaybookIdByTabId = (state: any) => root(state).editingPlaybookIdByTabId export const editingPlaybookId = (state: any, props: any) => root(state).editingPlaybookId[props.tabId] const fetchPlaybookForEndUserStatusByTabId = (state: any) => root(state).fetchPlaybookForEndUserStatusByTabId export const fetchPlaybookForEndUserPending = (state: any, props: any) => fetchPlaybookForEndUserStatusByTabId(state)[props.tabId] === actions.fetchPlaybookForEndUserPending.toString() const enrollStatusByEmail = (state: any, props: any) => pick(root(state).enrollStatusByEmail, emails(state, props)) export const enrollErrorsByEmail = (state: any) => root(state).enrollErrorsByEmail export const enrollingEmail = (state: any, props: { tabId: number, email: string }) => has(enrollStatusByEmail(state, props), props.email) const enrollHasCompleted = (state: any, props: any) => values(enrollStatusByEmail(state, props)).length === emails(state, props).length export const enrollSucceeded = (state: any, props: any) => { return enrollHasCompleted(state, props) && values(enrollStatusByEmail(state, props)).every((status: any) => status === actions.enrollSuccess.toString()) } export const enrollFailed = (state: any, props: any) => { return enrollHasCompleted(state, props) && values(enrollStatusByEmail(state, props)).some((status: any) => status === actions.enrollFailed.toString()) } const enrollingPlaybookIdByTabId = (state: any) => root(state).enrollingPlaybookIdByTabId export const enrollingPlaybookId = (state: any, props: any) => enrollingPlaybookIdByTabId(state)[props.tabId]