From f94ed89c30f5ac6bc94a5e471d71145f5a4a3c4d Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Tue, 13 Apr 2021 14:30:14 -0400 Subject: [PATCH 1/8] Export results iff results && no errors --- .../QueryResultsTable/QueryResultsTable.jsx | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 22747927e59..4e228eb9ee5 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -195,20 +195,24 @@ class QueryResultsTable extends Component { queryTimerMilliseconds={queryTimerMilliseconds} /> )} - - + {!hasNoResults && !hasErrors && ( +
+ + +
+ )} Results
From 4c602136e7444c7d90c08714305d574a56e6ede9 Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Tue, 13 Apr 2021 17:23:00 -0400 Subject: [PATCH 2/8] Debug fullscreen mode --- .../QueryResultsTable/QueryResultsTable.jsx | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 4e228eb9ee5..9aa5fa535c9 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -195,24 +195,24 @@ class QueryResultsTable extends Component { queryTimerMilliseconds={queryTimerMilliseconds} /> )} - {!hasNoResults && !hasErrors && ( -
- - -
- )} + { !hasNoResults && !hasErrors && ( + <> + + + + )} Results
From 52837637015306a88ac0d78e130fe5a4ed3c8431 Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Tue, 13 Apr 2021 19:36:03 -0400 Subject: [PATCH 3/8] Export Errors button functional --- .../QueryResultsTable/QueryResultsTable.jsx | 26 ++++- .../queries/QueryResultsTable/_styles.scss | 1 + .../pages/queries/QueryPage/QueryPage.jsx | 105 ++++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 9aa5fa535c9..ce79e536c7b 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -18,7 +18,9 @@ class QueryResultsTable extends Component { static propTypes = { campaign: campaignInterface.isRequired, onExportQueryResults: PropTypes.func, + onExportErrorsResults: PropTypes.func, onToggleQueryFullScreen: PropTypes.func, + onToggleErrorsFullScreen: PropTypes.func, isQueryFullScreen: PropTypes.bool, isQueryShrinking: PropTypes.bool, onRunQuery: PropTypes.func.isRequired, @@ -148,9 +150,11 @@ class QueryResultsTable extends Component { const { campaign, onExportQueryResults, + onExportErrorsResults, isQueryFullScreen, isQueryShrinking, onToggleQueryFullScreen, + onToggleErrorsFullScreen, onRunQuery, onStopQuery, queryIsRunning, @@ -195,7 +199,7 @@ class QueryResultsTable extends Component { queryTimerMilliseconds={queryTimerMilliseconds} /> )} - { !hasNoResults && !hasErrors && ( + { !hasNoResults && ( <> + +
+ Errors
{renderErrorsTable()}
+ )} ); diff --git a/frontend/components/queries/QueryResultsTable/_styles.scss b/frontend/components/queries/QueryResultsTable/_styles.scss index 25fe5772fbf..9baf9336008 100644 --- a/frontend/components/queries/QueryResultsTable/_styles.scss +++ b/frontend/components/queries/QueryResultsTable/_styles.scss @@ -13,6 +13,7 @@ &__button-wrap { @include clearfix; + margin-top: 20px; } &__export-btn { diff --git a/frontend/pages/queries/QueryPage/QueryPage.jsx b/frontend/pages/queries/QueryPage/QueryPage.jsx index 50bb527d1ab..1d1ac57e9cb 100644 --- a/frontend/pages/queries/QueryPage/QueryPage.jsx +++ b/frontend/pages/queries/QueryPage/QueryPage.jsx @@ -200,6 +200,32 @@ export class QueryPage extends Component { return false; }; + onExportErrorsResults = (evt) => { + evt.preventDefault(); + + const { campaign } = this.state; + const { errors } = campaign; + + if (errors) { + const csv = convertToCSV(errors, (fields) => { + const result = filter(fields, (f) => f !== "host_hostname"); + + result.unshift("host_hostname"); + + return result; + }); + const formattedTime = moment(new Date()).format("MM-DD-YY hh-mm-ss"); + const filename = `${this.csvQueryName} (${formattedTime}).csv`; + const file = new global.window.File([csv], filename, { + type: "text/csv", + }); + + FileSaver.saveAs(file); + } + + return false; + }; + onFetchTargets = (query, targetResponse) => { const { dispatch } = this.props; const { targets_count: targetsCount } = targetResponse; @@ -433,6 +459,81 @@ export class QueryPage extends Component { return false; }; + onToggleErrorsFullScreen = (evt) => { + console.log("You reached full screen!") + // const { + // document: { body }, + // window, + // } = global; + // const { errorsResultsToggle, errorsPosition } = this.state; + // const { dispatch } = this.props; + // window.scrollTo(0, 0); + // const { + // parentNode: { parentNode: parent }, + // } = evt.currentTarget; + // const { parentNode: grandParent } = parent; + // const rect = parent.getBoundingClientRect(); + + // const defaultPosition = { + // top: `${rect.top}px`, + // left: `${rect.left}px`, + // right: `${rect.right - rect.left}px`, + // bottom: `${rect.bottom - rect.top}px`, + // maxWidth: `${parent.offsetWidth}px`, + // maxHeight: `${parent.offsetHeight}px`, + // position: "fixed", + // }; + + // const resetPosition = { + // position: null, + // maxWidth: null, + // minWidth: null, + // maxHeight: null, + // minHeight: null, + // top: null, + // right: null, + // bottom: null, + // left: null, + // }; + + // let newPosition = clone(defaultPosition); + // let newState; + // let callback; + + // if (errorsResultsToggle !== ERRORS_RESULTS_OPTIONS.FULL_SCREEN) { + // newState = { + // errorsResultsToggle: ERRORS_RESULTS_OPTIONS.FULL_SCREEN, + // errorsPosition: defaultPosition, + // }; + + // callback = () => { + // body.style.overflow = "hidden"; + // merge(parent.style, newPosition); + // grandParent.style.height = `${newPosition.maxHeight}`; + // }; + // } else { + // newState = { + // errorsResultsToggle: ERRORS_RESULTS_OPTIONS.SHRINKING, + // }; + + // callback = () => { + // body.style.overflow = "visible"; + // newPosition = queryPosition; + // merge(parent.style, newPosition); + // grandParent.style.height = `${newPosition.maxHeight}`; + + // window.setTimeout(() => { + // merge(parent.style, resetPosition); + // this.setState({ errorsResultsToggle: null }); + // }, 500); + // }; + // } + + // this.setState(newState, callback); + + // return false; + }; + setupDistributedQuery = (socket) => { this.socket = socket; const update = () => { @@ -522,7 +623,9 @@ export class QueryPage extends Component { } = this.state; const { onExportQueryResults, + onExportErrorsResults, onToggleQueryFullScreen, + onToggleErrorsFullScreen, onRunQuery, onStopQuery, onTargetSelect, @@ -546,7 +649,9 @@ export class QueryPage extends Component { Date: Fri, 16 Apr 2021 14:11:07 -0400 Subject: [PATCH 4/8] Remove fullscreen errors button --- .../QueryResultsTable/QueryResultsTable.jsx | 77 +++++++++---------- .../pages/queries/QueryPage/QueryPage.jsx | 77 ------------------- 2 files changed, 35 insertions(+), 119 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index ce79e536c7b..97539684cbf 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -20,7 +20,6 @@ class QueryResultsTable extends Component { onExportQueryResults: PropTypes.func, onExportErrorsResults: PropTypes.func, onToggleQueryFullScreen: PropTypes.func, - onToggleErrorsFullScreen: PropTypes.func, isQueryFullScreen: PropTypes.bool, isQueryShrinking: PropTypes.bool, onRunQuery: PropTypes.func.isRequired, @@ -154,7 +153,6 @@ class QueryResultsTable extends Component { isQueryFullScreen, isQueryShrinking, onToggleQueryFullScreen, - onToggleErrorsFullScreen, onRunQuery, onStopQuery, queryIsRunning, @@ -199,23 +197,25 @@ class QueryResultsTable extends Component { queryTimerMilliseconds={queryTimerMilliseconds} /> )} - { !hasNoResults && ( - <> - - - + {!hasNoResults && ( + <> + + + )} Results @@ -232,30 +232,23 @@ class QueryResultsTable extends Component { {hasErrors && ( <> -
-
-
- - -
-
- Errors -
- {renderErrorsTable()} +
+
+
+ +
+
+ Errors +
+ {renderErrorsTable()} +
-
)}
diff --git a/frontend/pages/queries/QueryPage/QueryPage.jsx b/frontend/pages/queries/QueryPage/QueryPage.jsx index 1d1ac57e9cb..aaebe04c449 100644 --- a/frontend/pages/queries/QueryPage/QueryPage.jsx +++ b/frontend/pages/queries/QueryPage/QueryPage.jsx @@ -459,81 +459,6 @@ export class QueryPage extends Component { return false; }; - onToggleErrorsFullScreen = (evt) => { - console.log("You reached full screen!") - // const { - // document: { body }, - // window, - // } = global; - // const { errorsResultsToggle, errorsPosition } = this.state; - // const { dispatch } = this.props; - // window.scrollTo(0, 0); - // const { - // parentNode: { parentNode: parent }, - // } = evt.currentTarget; - // const { parentNode: grandParent } = parent; - // const rect = parent.getBoundingClientRect(); - - // const defaultPosition = { - // top: `${rect.top}px`, - // left: `${rect.left}px`, - // right: `${rect.right - rect.left}px`, - // bottom: `${rect.bottom - rect.top}px`, - // maxWidth: `${parent.offsetWidth}px`, - // maxHeight: `${parent.offsetHeight}px`, - // position: "fixed", - // }; - - // const resetPosition = { - // position: null, - // maxWidth: null, - // minWidth: null, - // maxHeight: null, - // minHeight: null, - // top: null, - // right: null, - // bottom: null, - // left: null, - // }; - - // let newPosition = clone(defaultPosition); - // let newState; - // let callback; - - // if (errorsResultsToggle !== ERRORS_RESULTS_OPTIONS.FULL_SCREEN) { - // newState = { - // errorsResultsToggle: ERRORS_RESULTS_OPTIONS.FULL_SCREEN, - // errorsPosition: defaultPosition, - // }; - - // callback = () => { - // body.style.overflow = "hidden"; - // merge(parent.style, newPosition); - // grandParent.style.height = `${newPosition.maxHeight}`; - // }; - // } else { - // newState = { - // errorsResultsToggle: ERRORS_RESULTS_OPTIONS.SHRINKING, - // }; - - // callback = () => { - // body.style.overflow = "visible"; - // newPosition = queryPosition; - // merge(parent.style, newPosition); - // grandParent.style.height = `${newPosition.maxHeight}`; - - // window.setTimeout(() => { - // merge(parent.style, resetPosition); - // this.setState({ errorsResultsToggle: null }); - // }, 500); - // }; - // } - - // this.setState(newState, callback); - - // return false; - }; - setupDistributedQuery = (socket) => { this.socket = socket; const update = () => { @@ -625,7 +550,6 @@ export class QueryPage extends Component { onExportQueryResults, onExportErrorsResults, onToggleQueryFullScreen, - onToggleErrorsFullScreen, onRunQuery, onStopQuery, onTargetSelect, @@ -651,7 +575,6 @@ export class QueryPage extends Component { onExportQueryResults={onExportQueryResults} onExportErrorsResults={onExportErrorsResults} isQueryFullScreen={isQueryFullScreen} - onToggleErrorsFullScreen={onToggleErrorsFullScreen} isQueryShrinking={isQueryShrinking} onToggleQueryFullScreen={onToggleQueryFullScreen} onRunQuery={onRunQuery} From 232bd8a43e97c717725e41cb742777b270438525 Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Fri, 16 Apr 2021 14:15:53 -0400 Subject: [PATCH 5/8] Rename Errors csv file --- frontend/pages/queries/QueryPage/QueryPage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/pages/queries/QueryPage/QueryPage.jsx b/frontend/pages/queries/QueryPage/QueryPage.jsx index aaebe04c449..e5ee33db12d 100644 --- a/frontend/pages/queries/QueryPage/QueryPage.jsx +++ b/frontend/pages/queries/QueryPage/QueryPage.jsx @@ -215,7 +215,7 @@ export class QueryPage extends Component { return result; }); const formattedTime = moment(new Date()).format("MM-DD-YY hh-mm-ss"); - const filename = `${this.csvQueryName} (${formattedTime}).csv`; + const filename = `${this.csvQueryName} Errors (${formattedTime}).csv`; const file = new global.window.File([csv], filename, { type: "text/csv", }); From 46c9a13e477add2569c320c38e72b9c494825ee4 Mon Sep 17 00:00:00 2001 From: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Date: Mon, 19 Apr 2021 18:17:14 -0400 Subject: [PATCH 6/8] QueryResultsTable.jsx keep "toggle fullscreen" at all times Co-authored-by: noahtalerman <47070608+noahtalerman@users.noreply.github.com> --- .../QueryResultsTable/QueryResultsTable.jsx | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 97539684cbf..4de94a28bb1 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -197,26 +197,24 @@ class QueryResultsTable extends Component { queryTimerMilliseconds={queryTimerMilliseconds} /> )} - {!hasNoResults && ( - <> - - - - )} + + {!hasNoResults && !queryIsRunning && ( + + )} Results
From c0657f36c00ef2afa116b6fa5e98f743c929099a Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Tue, 20 Apr 2021 13:37:48 -0400 Subject: [PATCH 7/8] Fix linting issue --- .../QueryResultsTable/QueryResultsTable.jsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 4de94a28bb1..f2fb249e269 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -202,19 +202,17 @@ class QueryResultsTable extends Component { onClick={onToggleQueryFullScreen} variant="grey" > - + {!hasNoResults && !queryIsRunning && ( - - )} + + )} Results
From 4000c0984ef7e8223d08e022b858f098558d679f Mon Sep 17 00:00:00 2001 From: Rachel Elysia Perkins Date: Tue, 20 Apr 2021 13:49:18 -0400 Subject: [PATCH 8/8] Fix linting 2 --- .../QueryResultsTable/QueryResultsTable.jsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx index 4de94a28bb1..f2fb249e269 100644 --- a/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx +++ b/frontend/components/queries/QueryResultsTable/QueryResultsTable.jsx @@ -202,19 +202,17 @@ class QueryResultsTable extends Component { onClick={onToggleQueryFullScreen} variant="grey" > - + {!hasNoResults && !queryIsRunning && ( - - )} + + )} Results