diff options
Diffstat (limited to 'src/console/reducers')
-rw-r--r-- | src/console/reducers/completion.ts | 99 | ||||
-rw-r--r-- | src/console/reducers/console.ts | 64 | ||||
-rw-r--r-- | src/console/reducers/index.ts | 134 |
3 files changed, 163 insertions, 134 deletions
diff --git a/src/console/reducers/completion.ts b/src/console/reducers/completion.ts new file mode 100644 index 0000000..2c7ee55 --- /dev/null +++ b/src/console/reducers/completion.ts @@ -0,0 +1,99 @@ +import Completions from "../Completions"; +import CompletionType from "../../shared/CompletionType"; +import { + COMPLETION_COMPLETION_NEXT, + COMPLETION_COMPLETION_PREV, + COMPLETION_SET_COMPLETIONS, + COMPLETION_START_COMPLETION, + CompletionAction, +} from "../actions/completion"; + +export interface State { + completionTypes: CompletionType[]; + completionSource: string; + completions: Completions; + select: number; +} + +export const defaultState = { + completionTypes: [], + completionSource: "", + completions: [], + select: -1, +}; + +const nextSelection = (state: State): number => { + if (state.completions.length === 0) { + return -1; + } + if (state.select < 0) { + return 0; + } + + const length = state.completions + .map((g) => g.items.length) + .reduce((x, y) => x + y); + if (state.select + 1 < length) { + return state.select + 1; + } + return -1; +}; + +const prevSelection = (state: State): number => { + const length = state.completions + .map((g) => g.items.length) + .reduce((x, y) => x + y); + if (state.select < 0) { + return length - 1; + } + return state.select - 1; +}; + +export const completedText = (state: State): string => { + if (state.select < 0) { + return state.completionSource; + } + const items = state.completions + .map((g) => g.items) + .reduce((g1, g2) => g1.concat(g2)); + return items[state.select].content || ""; +}; + +// eslint-disable-next-line max-lines-per-function +export default function reducer( + state: State = defaultState, + action: CompletionAction +): State { + switch (action.type) { + case COMPLETION_START_COMPLETION: + return { + ...state, + completionTypes: action.completionTypes, + completions: [], + select: -1, + }; + case COMPLETION_SET_COMPLETIONS: + return { + ...state, + completions: action.completions, + completionSource: action.completionSource, + select: -1, + }; + case COMPLETION_COMPLETION_NEXT: { + const select = nextSelection(state); + return { + ...state, + select: select, + }; + } + case COMPLETION_COMPLETION_PREV: { + const select = prevSelection(state); + return { + ...state, + select: select, + }; + } + default: + return state; + } +} diff --git a/src/console/reducers/console.ts b/src/console/reducers/console.ts new file mode 100644 index 0000000..3acd0e9 --- /dev/null +++ b/src/console/reducers/console.ts @@ -0,0 +1,64 @@ +import ColorScheme from "../../shared/ColorScheme"; +import { + CONSOLE_HIDE, + CONSOLE_HIDE_COMMAND, + CONSOLE_SET_COLORSCHEME, + CONSOLE_SET_CONSOLE_TEXT, + CONSOLE_SHOW_COMMAND, + CONSOLE_SHOW_ERROR, + CONSOLE_SHOW_FIND, + CONSOLE_SHOW_INFO, + ConsoleAction, +} from "../actions/console"; + +export interface State { + mode: string; + messageText: string; + consoleText: string; + colorscheme: ColorScheme; +} + +export const defaultState = { + mode: "", + messageText: "", + consoleText: "", + colorscheme: ColorScheme.System, +}; + +// eslint-disable-next-line max-lines-per-function +export default function reducer( + state: State = defaultState, + action: ConsoleAction +): State { + switch (action.type) { + case CONSOLE_HIDE: + return { ...state, mode: "" }; + case CONSOLE_SHOW_COMMAND: + return { + ...state, + mode: "command", + consoleText: action.text, + }; + case CONSOLE_SHOW_FIND: + return { ...state, mode: "find", consoleText: "" }; + case CONSOLE_SHOW_ERROR: + return { ...state, mode: "error", messageText: action.text }; + case CONSOLE_SHOW_INFO: + return { ...state, mode: "info", messageText: action.text }; + case CONSOLE_HIDE_COMMAND: + return { + ...state, + mode: + state.mode === "command" || state.mode === "find" ? "" : state.mode, + }; + case CONSOLE_SET_CONSOLE_TEXT: + return { ...state, consoleText: action.consoleText }; + case CONSOLE_SET_COLORSCHEME: + return { + ...state, + colorscheme: action.colorscheme, + }; + default: + return state; + } +} diff --git a/src/console/reducers/index.ts b/src/console/reducers/index.ts deleted file mode 100644 index 49d0de1..0000000 --- a/src/console/reducers/index.ts +++ /dev/null @@ -1,134 +0,0 @@ -import * as actions from "../actions"; -import Completions from "../Completions"; -import CompletionType from "../../shared/CompletionType"; -import ColorScheme from "../../shared/ColorScheme"; - -export interface State { - mode: string; - messageText: string; - consoleText: string; - completionTypes: CompletionType[]; - completionSource: string; - completions: Completions; - select: number; - colorscheme: ColorScheme; -} - -export const defaultState = { - mode: "", - messageText: "", - consoleText: "", - completionTypes: [], - completionSource: "", - completions: [], - select: -1, - colorscheme: ColorScheme.System, -}; - -const nextSelection = (state: State): number => { - if (state.completions.length === 0) { - return -1; - } - if (state.select < 0) { - return 0; - } - - const length = state.completions - .map((g) => g.items.length) - .reduce((x, y) => x + y); - if (state.select + 1 < length) { - return state.select + 1; - } - return -1; -}; - -const prevSelection = (state: State): number => { - const length = state.completions - .map((g) => g.items.length) - .reduce((x, y) => x + y); - if (state.select < 0) { - return length - 1; - } - return state.select - 1; -}; - -const nextConsoleText = (completions: any[], select: number, defaults: any) => { - if (select < 0) { - return defaults; - } - const items = completions - .map((g) => g.items) - .reduce((g1, g2) => g1.concat(g2)); - return items[select].content; -}; - -// eslint-disable-next-line max-lines-per-function -export default function reducer( - state: State = defaultState, - action: actions.ConsoleAction -): State { - switch (action.type) { - case actions.CONSOLE_HIDE: - return { ...state, mode: "" }; - case actions.CONSOLE_SHOW_COMMAND: - return { - ...state, - mode: "command", - consoleText: action.text, - completionTypes: action.completionTypes, - completions: [], - }; - case actions.CONSOLE_SHOW_FIND: - return { ...state, mode: "find", consoleText: "", completions: [] }; - case actions.CONSOLE_SHOW_ERROR: - return { ...state, mode: "error", messageText: action.text }; - case actions.CONSOLE_SHOW_INFO: - return { ...state, mode: "info", messageText: action.text }; - case actions.CONSOLE_HIDE_COMMAND: - return { - ...state, - mode: - state.mode === "command" || state.mode === "find" ? "" : state.mode, - }; - case actions.CONSOLE_SET_CONSOLE_TEXT: - return { ...state, consoleText: action.consoleText }; - case actions.CONSOLE_SET_COMPLETIONS: - return { - ...state, - completions: action.completions, - completionSource: action.completionSource, - select: -1, - }; - case actions.CONSOLE_COMPLETION_NEXT: { - const select = nextSelection(state); - return { - ...state, - select: select, - consoleText: nextConsoleText( - state.completions, - select, - state.completionSource - ), - }; - } - case actions.CONSOLE_COMPLETION_PREV: { - const select = prevSelection(state); - return { - ...state, - select: select, - consoleText: nextConsoleText( - state.completions, - select, - state.completionSource - ), - }; - } - case actions.CONSOLE_SET_COLORSCHEME: - return { - ...state, - colorscheme: action.colorscheme, - }; - default: - return state; - } -} |