mirror of
https://github.com/Lissy93/web-check.git
synced 2025-01-26 08:08:56 +01:00
Adds card for viewing and downloading raw results
This commit is contained in:
parent
6a854af79e
commit
786ba7c03e
107
src/components/misc/ViewRaw.tsx
Normal file
107
src/components/misc/ViewRaw.tsx
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
import colors from 'styles/colors';
|
||||||
|
import { Card } from 'components/Form/Card';
|
||||||
|
import Button from 'components/Form/Button';
|
||||||
|
|
||||||
|
const CardStyles = `
|
||||||
|
margin: 0 auto 1rem auto;
|
||||||
|
width: 95vw;
|
||||||
|
position: relative;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
a {
|
||||||
|
color: ${colors.primary};
|
||||||
|
}
|
||||||
|
.controls {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
button {
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const StyledIframe = styled.iframe`
|
||||||
|
width: calc(100% - 2rem);
|
||||||
|
outline: none;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
min-height: 50vh;
|
||||||
|
height: 100%;
|
||||||
|
margin: 1rem;
|
||||||
|
background: ${colors.background};
|
||||||
|
`;
|
||||||
|
|
||||||
|
const ViewRaw = (props: { everything: { id: string, result: any}[] }) => {
|
||||||
|
const [resultUrl, setResultUrl] = useState<string | null>(null);
|
||||||
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
|
const makeResults = () => {
|
||||||
|
const result: {[key: string]: any} = {};
|
||||||
|
props.everything.forEach((item: {id: string, result: any}) => {
|
||||||
|
result[item.id] = item.result;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchResultsUrl = async () => {
|
||||||
|
const resultContent = makeResults();
|
||||||
|
const response = await fetch('https://jsonhero.io/api/create.json', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
title: 'web-check results',
|
||||||
|
content: resultContent,
|
||||||
|
readOnly: true,
|
||||||
|
ttl: 3600,
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if (!response.ok) {
|
||||||
|
setError(`HTTP error! status: ${response.status}`);
|
||||||
|
} else {
|
||||||
|
setError(null);
|
||||||
|
}
|
||||||
|
await response.json().then(
|
||||||
|
(data) => setResultUrl(data.location)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDownload = () => {
|
||||||
|
const blob = new Blob([JSON.stringify(makeResults(), null, 2)], { type: "application/json" });
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.download = 'web-check-results.json';
|
||||||
|
link.click();
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<Card heading="View / Download Raw Data" styles={CardStyles}>
|
||||||
|
<div className="controls">
|
||||||
|
<Button onClick={handleDownload}>Download Results</Button>
|
||||||
|
<Button onClick={fetchResultsUrl}>{resultUrl ? 'Update Results' : 'View Results'}</Button>
|
||||||
|
{ resultUrl && <Button onClick={() => setResultUrl('') }>Hide Results</Button> }
|
||||||
|
</div>
|
||||||
|
{ resultUrl && !error &&
|
||||||
|
<>
|
||||||
|
<StyledIframe title="Results, via JSON Hero" src={resultUrl} />
|
||||||
|
<small>Your results are available to view <a href={resultUrl}>here</a>.</small>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
{ error && <p className="error">{error}</p> }
|
||||||
|
<small>
|
||||||
|
These are the raw results generated from your URL, and in JSON format.
|
||||||
|
You can import these into your own program, for further analysis.
|
||||||
|
</small>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ViewRaw;
|
Loading…
Reference in New Issue
Block a user