aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-08-10 14:05:58 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2022-08-10 14:05:58 +0200
commit63e7484302ef2e96babd7b95161e18c08a9ae33d (patch)
tree3cda7703362992a4cc775cb45b735a0a868afcd5
parentcfb2e225f980af5c065e7d969245af262dfb5d52 (diff)
Fix download button
-rw-r--r--client/js/app/src/app/pages/querybuilder/Components/Buttons/DownloadJSONButton.jsx54
-rw-r--r--client/js/app/src/app/pages/querybuilder/Components/Contexts/QueryBuilderProvider.jsx2
-rw-r--r--client/js/app/src/app/pages/querybuilder/query-builder.jsx12
-rw-r--r--client/js/app/src/app/pages/querytracer/query-tracer.jsx12
4 files changed, 35 insertions, 45 deletions
diff --git a/client/js/app/src/app/pages/querybuilder/Components/Buttons/DownloadJSONButton.jsx b/client/js/app/src/app/pages/querybuilder/Components/Buttons/DownloadJSONButton.jsx
index 88af68910a8..b89e3f14b3b 100644
--- a/client/js/app/src/app/pages/querybuilder/Components/Buttons/DownloadJSONButton.jsx
+++ b/client/js/app/src/app/pages/querybuilder/Components/Buttons/DownloadJSONButton.jsx
@@ -1,42 +1,30 @@
import React from 'react';
-import transform from '../../TransformVespaTrace';
-import { useQueryBuilderContext } from 'app/pages/querybuilder/Components/Contexts/QueryBuilderProvider';
-
-export default function DownloadJSONButton({ children }) {
- const response = useQueryBuilderContext((ctx) => ctx.http.response);
-
- const transformResponse = (response) => {
- return transform(response);
- };
+import transform from 'app/pages/querybuilder/TransformVespaTrace';
+export default function DownloadJSONButton({ children, response }) {
const handleClick = () => {
- if (response != '') {
- let transformedResponse = JSON.stringify(
- transformResponse(JSON.parse(response), undefined, '\t')
- );
- // copied from safakeskinĀ“s answer on SO, link: https://stackoverflow.com/questions/55613438/reactwrite-to-json-file-or-export-download-no-server
- const fileName = 'vespa-response';
- const blob = new Blob([transformedResponse], {
- type: 'application/json',
- });
- const href = URL.createObjectURL(blob);
+ let content;
+ try {
+ content = JSON.stringify(transform(JSON.parse(response), null, 4));
+ } catch (error) {
+ alert(`Failed to transform response to Jaeger format: ${error}`); // TODO: Change to toast
+ return;
+ }
- // create "a" HTLM element with href to file
- const link = document.createElement('a');
- link.href = href;
- link.download = fileName + '.json';
- document.body.appendChild(link);
- link.click();
+ // copied from safakeskinĀ“s answer on SO, link: https://stackoverflow.com/questions/55613438/reactwrite-to-json-file-or-export-download-no-server
+ const blob = new Blob([content], { type: 'application/json' });
+ const href = URL.createObjectURL(blob);
- // clean up "a" element & remove ObjectURL
- document.body.removeChild(link);
- URL.revokeObjectURL(href);
+ // create "a" HTML element with href to file
+ const link = document.createElement('a');
+ link.href = href;
+ link.download = 'vespa-response.json';
+ document.body.appendChild(link);
+ link.click();
- // open Jaeger in a new tab
- window.open('http://localhost:16686/search', '__blank');
- } else {
- alert('Response was empty');
- }
+ // clean up "a" element & remove ObjectURL
+ document.body.removeChild(link);
+ URL.revokeObjectURL(href);
};
return <button onClick={handleClick}>{children}</button>;
diff --git a/client/js/app/src/app/pages/querybuilder/Components/Contexts/QueryBuilderProvider.jsx b/client/js/app/src/app/pages/querybuilder/Components/Contexts/QueryBuilderProvider.jsx
index 808dab3a8c8..2eebbb9b8b5 100644
--- a/client/js/app/src/app/pages/querybuilder/Components/Contexts/QueryBuilderProvider.jsx
+++ b/client/js/app/src/app/pages/querybuilder/Components/Contexts/QueryBuilderProvider.jsx
@@ -103,7 +103,7 @@ function preReducer(state, { action, data }) {
const children = jsonToInputs(JSON.parse(data), root);
return { ...state, query: { ...root, children } };
} catch (error) {
- // TODO: Display error somehow
+ alert(`Failed to parse query: ${error}`); // TODO: Change to toast
return state;
}
}
diff --git a/client/js/app/src/app/pages/querybuilder/query-builder.jsx b/client/js/app/src/app/pages/querybuilder/query-builder.jsx
index c0da870823e..b101e8639fb 100644
--- a/client/js/app/src/app/pages/querybuilder/query-builder.jsx
+++ b/client/js/app/src/app/pages/querybuilder/query-builder.jsx
@@ -19,7 +19,15 @@ function QueryBox() {
function ResponseBox() {
const response = useQueryBuilderContext((ctx) => ctx.http.response);
- return <textarea readOnly cols="70" rows="25" value={response} />;
+ return (
+ <>
+ <textarea readOnly cols="70" rows="25" value={response} />
+ <CopyResponseButton />
+ <DownloadJSONButton response={response}>
+ Download in Jeager format
+ </DownloadJSONButton>
+ </>
+ );
}
export function QueryBuilder() {
@@ -41,8 +49,6 @@ export function QueryBuilder() {
<QueryBox />
<p className="response">Response</p>
<ResponseBox />
- <CopyResponseButton />
- <DownloadJSONButton>Download response as JSON</DownloadJSONButton>
</QueryBuilderProvider>
<br />
<br />
diff --git a/client/js/app/src/app/pages/querytracer/query-tracer.jsx b/client/js/app/src/app/pages/querytracer/query-tracer.jsx
index 7d9d32fe1b7..c3212c70c8a 100644
--- a/client/js/app/src/app/pages/querytracer/query-tracer.jsx
+++ b/client/js/app/src/app/pages/querytracer/query-tracer.jsx
@@ -3,11 +3,7 @@ import DownloadJSONButton from '../querybuilder/Components/Buttons/DownloadJSONB
import { Container } from 'app/components';
export function QueryTracer() {
- const { response, setResponse } = useState('');
-
- const updateResponse = (e) => {
- setResponse(e.target.value);
- };
+ const [response, setResponse] = useState('');
return (
<Container>
@@ -15,10 +11,10 @@ export function QueryTracer() {
cols="70"
rows="25"
value={response}
- onChange={updateResponse}
+ onChange={({ target }) => setResponse(target.value)}
></textarea>
- <DownloadJSONButton>
- Convert to Jeager format and download trace
+ <DownloadJSONButton response={response}>
+ Download in Jeager format
</DownloadJSONButton>
</Container>
);