diff --git a/frontend/src/Store/Actions/commandActions.js b/frontend/src/Store/Actions/commandActions.js index a31979d0d..083bdd61f 100644 --- a/frontend/src/Store/Actions/commandActions.js +++ b/frontend/src/Store/Actions/commandActions.js @@ -17,6 +17,7 @@ export const section = 'commands'; let lastCommand = null; let lastCommandTimeout = null; const removeCommandTimeoutIds = {}; +const commandFinishedCallbacks = {}; // // State @@ -119,7 +120,7 @@ function scheduleRemoveCommand(command, dispatch) { }, 60000 * 5); } -export function executeCommandHelper( payload, dispatch) { +export function executeCommandHelper(payload, dispatch) { // TODO: show a message for the user if (lastCommand && isSameCommand(lastCommand, payload)) { console.warn('Please wait at least 5 seconds before running this command again'); @@ -136,14 +137,23 @@ export function executeCommandHelper( payload, dispatch) { lastCommand = null; }, 5000); + const { + commandFinished, + ...requestPayload + } = payload; + const promise = createAjaxRequest({ url: '/command', method: 'POST', - data: JSON.stringify(payload), + data: JSON.stringify(requestPayload), dataType: 'json' }).request; return promise.then((data) => { + if (commandFinished) { + commandFinishedCallbacks[data.id] = commandFinished; + } + dispatch(addCommand(data)); }); } @@ -183,12 +193,20 @@ export const actionHandlers = handleThunks({ } }); + const commandFinished = commandFinishedCallbacks[payload.id]; + + if (commandFinished) { + commandFinished(payload); + } + + delete commandFinishedCallbacks[payload.id]; + dispatch(updateItem({ section: 'commands', ...payload })); scheduleRemoveCommand(payload, dispatch); showCommandMessage(payload, dispatch); }, - [ADD_COMMAND]: function(getState, payload, dispatch) { + [REMOVE_COMMAND]: function(getState, payload, dispatch) { dispatch(removeItem({ section: 'commands', ...payload })); } diff --git a/frontend/src/System/Events/LogsTableConnector.js b/frontend/src/System/Events/LogsTableConnector.js index 957e2a5e1..dd4286072 100644 --- a/frontend/src/System/Events/LogsTableConnector.js +++ b/frontend/src/System/Events/LogsTableConnector.js @@ -96,7 +96,14 @@ class LogsTableConnector extends Component { } onClearLogsPress = () => { - this.props.executeCommand({ name: commandNames.CLEAR_LOGS }); + this.props.executeCommand({ + name: commandNames.CLEAR_LOGS, + commandFinished: this.onCommandFinished + }); + } + + onCommandFinished = () => { + this.props.gotoLogsFirstPage(); } // diff --git a/frontend/src/System/Logs/Files/LogFilesConnector.js b/frontend/src/System/Logs/Files/LogFilesConnector.js index b81fd229f..71ddee538 100644 --- a/frontend/src/System/Logs/Files/LogFilesConnector.js +++ b/frontend/src/System/Logs/Files/LogFilesConnector.js @@ -51,12 +51,6 @@ class LogFilesConnector extends Component { this.props.fetchLogFiles(); } - componentDidUpdate(prevProps) { - if (prevProps.deleteFilesExecuting && !this.props.deleteFilesExecuting) { - this.props.fetchLogFiles(); - } - } - // // Listeners @@ -65,7 +59,14 @@ class LogFilesConnector extends Component { } onDeleteFilesPress = () => { - this.props.executeCommand({ name: commandNames.DELETE_LOG_FILES }); + this.props.executeCommand({ + name: commandNames.DELETE_LOG_FILES, + commandFinished: this.onCommandFinished + }); + } + + onCommandFinished = () => { + this.props.fetchLogFiles(); } //