pull/4566/head
bunsenstraat 12 months ago
parent 7aaf2be54e
commit f31c688a89
  1. 358
      libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts
  2. 38
      libs/remix-ui/terminal/src/lib/remix-ui-terminal-wrapper.tsx
  3. 110
      libs/remix-ui/xterm/src/lib/reducer/index.ts

@ -27,209 +27,209 @@ export const initialState = {
export const registerCommandReducer = (state, action) => { export const registerCommandReducer = (state, action) => {
switch (action.type) { switch (action.type) {
case HTML: case HTML:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, {...action.payload.data}), data: Object.assign(initialState.data, {...action.payload.data}),
} }
case LOG: case LOG:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, {...action.payload.data}), data: Object.assign(initialState.data, {...action.payload.data}),
} }
case INFO: case INFO:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, action.payload.data), data: Object.assign(initialState.data, action.payload.data),
} }
case WARN: case WARN:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, action.payload.data), data: Object.assign(initialState.data, action.payload.data),
} }
case ERROR: case ERROR:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, action.payload.data), data: Object.assign(initialState.data, action.payload.data),
} }
case SCRIPT: case SCRIPT:
return { return {
...state, ...state,
_commands: Object.assign(initialState._commands, action.payload._commands), _commands: Object.assign(initialState._commands, action.payload._commands),
commands: Object.assign(initialState.commands, action.payload.commands), commands: Object.assign(initialState.commands, action.payload.commands),
data: Object.assign(initialState.data, action.payload.data), data: Object.assign(initialState.data, action.payload.data),
} }
case CLEAR_CONSOLE: case CLEAR_CONSOLE:
return { return {
...state, ...state,
...state.journalBlocks.splice(0), ...state.journalBlocks.splice(0),
clearConsole: true, clearConsole: true,
} }
case SEARCH: case SEARCH:
return { return {
...state, ...state,
searchInput: action.payload, searchInput: action.payload,
} }
case TOGGLE: case TOGGLE:
return { return {
...state, ...state,
isOpen: !state.isOpen, isOpen: !state.isOpen,
} }
case SET_OPEN: case SET_OPEN:
return { return {
...state, ...state,
isOpen: action.payload, isOpen: action.payload,
} }
case LISTEN_ON_NETWORK: case LISTEN_ON_NETWORK:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log'}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log'}),
} }
case SET_ISVM: case SET_ISVM:
return { return {
...state, ...state,
isVM: action.payload, isVM: action.payload,
} }
default: default:
return {state} return {state}
} }
} }
export const registerFilterReducer = (state, action) => { export const registerFilterReducer = (state, action) => {
switch (action.type) { switch (action.type) {
case LOG: case LOG:
return { return {
...state, ...state,
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns), data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns),
} }
case INFO: case INFO:
return { return {
...state, ...state,
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns), data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns),
} }
case WARN: case WARN:
return { return {
...state, ...state,
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns), data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns),
} }
case ERROR: case ERROR:
return { return {
...state, ...state,
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns), data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns),
} }
case SCRIPT: case SCRIPT:
return { return {
...state, ...state,
data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns), data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns),
} }
default: default:
return {state} return {state}
} }
} }
export const addCommandHistoryReducer = (state, action) => { export const addCommandHistoryReducer = (state, action) => {
switch (action.type) { switch (action.type) {
case CMD_HISTORY: case CMD_HISTORY:
return { return {
...state, ...state,
_commandHistory: initialState._commandHistory.unshift(action.payload.script), _commandHistory: initialState._commandHistory.unshift(action.payload.script),
} }
default: default:
return {state} return {state}
} }
} }
export const remixWelcomeTextReducer = (state, action) => { export const remixWelcomeTextReducer = (state, action) => {
switch (action.type) { switch (action.type) {
case 'welcomeText': case 'welcomeText':
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push(action.payload.welcomeText), journalBlocks: initialState.journalBlocks.push(action.payload.welcomeText),
} }
} }
} }
export const registerScriptRunnerReducer = (state, action) => { export const registerScriptRunnerReducer = (state, action) => {
switch (action.type) { switch (action.type) {
case HTML: case HTML:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}),
} }
case LOG: case LOG:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}),
} }
case TYPEWRITERLOG: case TYPEWRITERLOG:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-log', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-log', provider: action.payload.provider}),
} }
case TYPEWRITERWARNING: case TYPEWRITERWARNING:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-warning', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-warning', provider: action.payload.provider}),
} }
case TYPEWRITERSUCCESS: case TYPEWRITERSUCCESS:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-success', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, typewriter: true, style: 'text-success', provider: action.payload.provider}),
} }
case INFO: case INFO:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-success', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-success', provider: action.payload.provider}),
} }
case WARN: case WARN:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-warning', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-warning', provider: action.payload.provider}),
} }
case ERROR: case ERROR:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-danger', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-danger', provider: action.payload.provider}),
} }
case SCRIPT: case SCRIPT:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: 'text-log', provider: action.payload.provider}),
} }
case KNOWN_TRANSACTION: case KNOWN_TRANSACTION:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'knownTransaction', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'knownTransaction', provider: action.payload.provider}),
} }
case UNKNOWN_TRANSACTION: case UNKNOWN_TRANSACTION:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'unknownTransaction', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'unknownTransaction', provider: action.payload.provider}),
} }
case EMPTY_BLOCK: case EMPTY_BLOCK:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'emptyBlock', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', name: 'emptyBlock', provider: action.payload.provider}),
} }
case NEW_TRANSACTION: case NEW_TRANSACTION:
return { return {
...state, ...state,
journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', provider: action.payload.provider}), journalBlocks: initialState.journalBlocks.push({message: action.payload.message, style: '', provider: action.payload.provider}),
} }
} }
} }

@ -8,26 +8,26 @@ import RemixUiTerminal from './remix-ui-terminal'
import { RemixUiTerminalProps } from './types/terminalTypes' import { RemixUiTerminalProps } from './types/terminalTypes'
export const RemixUITerminalWrapper = (props: RemixUiTerminalProps) => { export const RemixUITerminalWrapper = (props: RemixUiTerminalProps) => {
const [terminalState, dispatch] = useReducer(registerCommandReducer, initialState) const [terminalState, dispatch] = useReducer(registerCommandReducer, initialState)
const [xtermState, dispatchXterm] = useReducer(xtermReducer, xTerminInitialState) const [xtermState, dispatchXterm] = useReducer(xtermReducer, xTerminInitialState)
const platform = useContext(platformContext) const platform = useContext(platformContext)
const providerState = { const providerState = {
terminalState, terminalState,
dispatch, dispatch,
xtermState, xtermState,
dispatchXterm dispatchXterm
} }
return (<> return (<>
<TerminalContext.Provider value={providerState}> <TerminalContext.Provider value={providerState}>
<RemixUITerminalBar {...props} /> <RemixUITerminalBar {...props} />
{platform !== appPlatformTypes.desktop && <RemixUiTerminal {...props} />} {platform !== appPlatformTypes.desktop && <RemixUiTerminal {...props} />}
{platform === appPlatformTypes.desktop && {platform === appPlatformTypes.desktop &&
<> <>
<RemixUiTerminal visible={xtermState.showOutput} plugin={props.plugin} onReady={props.onReady} /> <RemixUiTerminal visible={xtermState.showOutput} plugin={props.plugin} onReady={props.onReady} />
<RemixUiXterminals {...props} /> <RemixUiXterminals {...props} />
</> </>
} }
</TerminalContext.Provider> </TerminalContext.Provider>
</>) </>)
} }

@ -10,60 +10,60 @@ export const xTerminInitialState: xTerminalUiState = {
export const xtermReducer = (state = xTerminInitialState, action: Actions) => { export const xtermReducer = (state = xTerminInitialState, action: Actions) => {
switch (action.type) { switch (action.type) {
case 'ENABLE_TERMINALS': case 'ENABLE_TERMINALS':
return { return {
...state, ...state,
terminalsEnabled: true terminalsEnabled: true
} }
case 'DISABLE_TERMINALS': case 'DISABLE_TERMINALS':
return { return {
...state, ...state,
terminalsEnabled: false terminalsEnabled: false
} }
case 'ADD_TERMINAL': case 'ADD_TERMINAL':
return { return {
...state, ...state,
terminals: [...state.terminals, action.payload] terminals: [...state.terminals, action.payload]
} }
case 'HIDE_TERMINAL': case 'HIDE_TERMINAL':
return { return {
...state, ...state,
terminals: state.terminals.map(terminal => terminal.pid === action.payload ? { ...terminal, hidden: true } : terminal) terminals: state.terminals.map(terminal => terminal.pid === action.payload ? { ...terminal, hidden: true } : terminal)
} }
case 'SHOW_TERMINAL': case 'SHOW_TERMINAL':
return { return {
...state, ...state,
terminals: state.terminals.map(terminal => terminal.pid === action.payload ? { ...terminal, hidden: false } : terminal) terminals: state.terminals.map(terminal => terminal.pid === action.payload ? { ...terminal, hidden: false } : terminal)
} }
case 'HIDE_ALL_TERMINALS': case 'HIDE_ALL_TERMINALS':
return { return {
...state, ...state,
terminals: state.terminals.map(terminal => ({ ...terminal, hidden: true })) terminals: state.terminals.map(terminal => ({ ...terminal, hidden: true }))
} }
case 'REMOVE_TERMINAL': case 'REMOVE_TERMINAL':
const removed = state.terminals.filter(xtermState => xtermState.pid !== action.payload) const removed = state.terminals.filter(xtermState => xtermState.pid !== action.payload)
if (removed.length > 0) if (removed.length > 0)
removed[removed.length - 1].hidden = false removed[removed.length - 1].hidden = false
return { return {
...state, ...state,
terminals: removed terminals: removed
} }
case 'ADD_SHELLS': case 'ADD_SHELLS':
return { return {
...state, ...state,
shells: action.payload shells: action.payload
} }
case 'SHOW_OUTPUT': case 'SHOW_OUTPUT':
return { return {
...state, ...state,
showOutput: action.payload showOutput: action.payload
} }
case 'SET_WORKING_DIR': case 'SET_WORKING_DIR':
return { return {
...state, ...state,
workingDir: action.payload workingDir: action.payload
} }
default: default:
return state return state
} }
} }

Loading…
Cancel
Save