}
{
formKey && getForm()
diff --git a/daiquiri/query/assets/js/components/submit/job/Job.js b/daiquiri/query/assets/js/components/submit/job/Job.js
index 7e93a5b84..b5a98ccf3 100644
--- a/daiquiri/query/assets/js/components/submit/job/Job.js
+++ b/daiquiri/query/assets/js/components/submit/job/Job.js
@@ -11,7 +11,7 @@ import JobResults from './JobResults'
import JobPlot from './JobPlot'
import JobDownload from './JobDownload'
-const Job = ({ jobId, loadForm }) => {
+const Job = ({ jobId, loadForm, loadJob }) => {
const { data: job } = useJobQuery(jobId)
const [activeTab, setActiveTab] = useLsState('daiquiri.query.job.activeTab', 'overview')
@@ -71,7 +71,7 @@ const Job = ({ jobId, loadForm }) => {
activeTab === 'results' &&
}
{
activeTab === 'download' &&
@@ -84,7 +84,8 @@ const Job = ({ jobId, loadForm }) => {
Job.propTypes = {
jobId: PropTypes.string.isRequired,
- loadForm: PropTypes.func.isRequired
+ loadForm: PropTypes.func.isRequired,
+ loadJob: PropTypes.func.isRequired,
}
export default Job
diff --git a/daiquiri/query/assets/js/components/submit/job/JobPlot.js b/daiquiri/query/assets/js/components/submit/job/JobPlot.js
index 798ee230f..e363cd1ee 100644
--- a/daiquiri/query/assets/js/components/submit/job/JobPlot.js
+++ b/daiquiri/query/assets/js/components/submit/job/JobPlot.js
@@ -11,7 +11,7 @@ import Scatter from './plots/Scatter'
import JobPlotType from './JobPlotType'
-const JobPlot = ({ job }) => {
+const JobPlot = ({ job, loadJob }) => {
const [type, setType] = useState('scatter')
const [columns, setColumns] = useState([])
@@ -22,10 +22,19 @@ const JobPlot = ({ job }) => {
))), [job])
return job.phase == 'COMPLETED' ? (
+ job.nrows > 1000000 ? (
+
+
+
+ The plotting tool is available only for query results with fewer than 1 million rows.
+
+
+
+ ): (
{
- (type == 'scatter') &&
+ (type == 'scatter') &&
}
{
(type == 'colorScatter') &&
@@ -34,13 +43,15 @@ const JobPlot = ({ job }) => {
(type == 'histogram') &&
}
+ )
) : (
{jobPhaseMessage[job.phase]}
)
}
JobPlot.propTypes = {
- job: PropTypes.object.isRequired
+ job: PropTypes.object.isRequired,
+ loadJob: PropTypes.func.isRequired,
}
export default JobPlot
diff --git a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatter.js b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatter.js
index 5a6781ac7..222eefceb 100644
--- a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatter.js
+++ b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatter.js
@@ -10,7 +10,7 @@ import ColorScatterPlot from './ColorScatterPlot'
const ColorScatter = ({ job, columns }) => {
- const [values, setValues] = useState({
+ const [plotValues, setPlotValues] = useState({
x: {
column: ''
},
@@ -23,27 +23,27 @@ const ColorScatter = ({ job, columns }) => {
}
})
- useEffect(() => setValues({
- ...values,
+ useEffect(() => setPlotValues({
+ ...plotValues,
x: {
- ...values.x, column: isNil(columns[0]) ? '' : columns[0].name
+ ...plotValues.x, column: isNil(columns[0]) ? '' : columns[0].name
},
y: {
- ...values.y, column: isNil(columns[1]) ? '' : columns[1].name
+ ...plotValues.y, column: isNil(columns[1]) ? '' : columns[1].name
},
z: {
- ...values.z, column: isNil(columns[2]) ? '' : columns[2].name
+ ...plotValues.z, column: isNil(columns[2]) ? '' : columns[2].name
}
}), [columns])
- const { data: x } = useJobPlotQuery(job, values.x.column)
- const { data: y } = useJobPlotQuery(job, values.y.column)
- const { data: z } = useJobPlotQuery(job, values.z.column)
+ const { data: x } = useJobPlotQuery(job, plotValues.x.column)
+ const { data: y } = useJobPlotQuery(job, plotValues.y.column)
+ const { data: z } = useJobPlotQuery(job, plotValues.z.column)
return (
-
-
+
+
)
}
diff --git a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterForm.js b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterForm.js
index ffa18d8ab..2042166c9 100644
--- a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterForm.js
+++ b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterForm.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
import { cmaps } from 'daiquiri/query/assets/js/constants/plot'
-const ColorScatterForm = ({ columns, values, setValues }) => {
+const ColorScatterForm = ({ columns, plotValues, setPlotValues }) => {
return (
@@ -14,8 +14,8 @@ const ColorScatterForm = ({ columns, values, setValues }) => {
-
- {
- setValues({...values, y: {...values.y, column: value.target.value}})
+ {
+ setPlotValues({ ...plotValues, y: { ...plotValues.y, column: value.target.value } })
}}>
{
@@ -48,8 +48,8 @@ const ColorScatterForm = ({ columns, values, setValues }) => {
- {
- setValues({...values, z: {...values.z, column: value.target.value}})
+ {
+ setPlotValues({ ...plotValues, z: { ...plotValues.z, column: value.target.value } })
}}>
{
@@ -63,8 +63,8 @@ const ColorScatterForm = ({ columns, values, setValues }) => {
-
{
- setValues({...values, z: {...values.z, cmap: value.target.value}})
+ {
+ setPlotValues({ ...plotValues, z: { ...plotValues.z, cmap: value.target.value } })
}}>
{
cmaps.map((cmap, cmapIndex) => )
@@ -79,8 +79,8 @@ const ColorScatterForm = ({ columns, values, setValues }) => {
ColorScatterForm.propTypes = {
columns: PropTypes.array.isRequired,
- values: PropTypes.object.isRequired,
- setValues: PropTypes.func.isRequired
+ plotValues: PropTypes.object.isRequired,
+ setPlotValues: PropTypes.func.isRequired
}
export default ColorScatterForm
diff --git a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterPlot.js b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterPlot.js
index 7cae74332..85f5be0fa 100644
--- a/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterPlot.js
+++ b/daiquiri/query/assets/js/components/submit/job/plots/ColorScatterPlot.js
@@ -6,7 +6,7 @@ import { isNil } from 'lodash'
import { config, layout } from 'daiquiri/query/assets/js/constants/plot'
import { getColumnLabel } from 'daiquiri/query/assets/js/utils/plot'
-const ColorScatterPlot = ({ columns, values, x, y, z }) => {
+const ColorScatterPlot = ({ columns, plotValues, x, y, z }) => {
if (isNil(x) || isNil(y) || isNil(z)) {
return null
} else {
@@ -24,30 +24,31 @@ const ColorScatterPlot = ({ columns, values, x, y, z }) => {
marker: {
showscale: true,
color: z,
- colorscale: values.z.cmap,
+ colorscale: plotValues.z.cmap,
colorbar: {
title: {
- text: getColumnLabel(columns, values.z.column),
+ text: getColumnLabel(columns, plotValues.z.column),
side: 'right'
}
}
},
+ hoverinfo: 'skip'
}
]}
layout={{
...layout,
xaxis: {
title: {
- text: getColumnLabel(columns, values.x.column),
+ text: getColumnLabel(columns, plotValues.x.column),
},
},
yaxis: {
title: {
- text: getColumnLabel(columns, values.y.column),
+ text: getColumnLabel(columns, plotValues.y.column),
}
}
}}
- style={{width: '100%'}}
+ style={{ width: '100%' }}
useResizeHandler={true}
config={config}
/>
@@ -60,7 +61,7 @@ const ColorScatterPlot = ({ columns, values, x, y, z }) => {
ColorScatterPlot.propTypes = {
columns: PropTypes.array.isRequired,
- values: PropTypes.object.isRequired,
+ plotValues: PropTypes.object.isRequired,
x: PropTypes.array,
y: PropTypes.array,
z: PropTypes.array
diff --git a/daiquiri/query/assets/js/components/submit/job/plots/Histogram.js b/daiquiri/query/assets/js/components/submit/job/plots/Histogram.js
index 61b87d701..c4b8e7a24 100644
--- a/daiquiri/query/assets/js/components/submit/job/plots/Histogram.js
+++ b/daiquiri/query/assets/js/components/submit/job/plots/Histogram.js
@@ -10,7 +10,7 @@ import HistogramPlot from './HistogramPlot'
const Histogram = ({ job, columns }) => {
- const [values, setValues] = useState({
+ const [plotValues, setPlotValues] = useState({
x: {
column: ''
},
@@ -22,20 +22,20 @@ const Histogram = ({ job, columns }) => {
bins: 20,
})
- useEffect(() => setValues({
- ...values,
+ useEffect(() => setPlotValues({
+ ...plotValues,
x: {
- ...values.x, column: isNil(columns[0]) ? '' : columns[0].name
+ ...plotValues.x, column: isNil(columns[0]) ? '' : columns[0].name
}
}), [columns])
- const { data: x } = useJobPlotQuery(job, values.x.column)
- const { data: s } = useJobPlotQuery(job, values.s.column)
+ const { data: x } = useJobPlotQuery(job, plotValues.x.column)
+ const { data: s } = useJobPlotQuery(job, plotValues.s.column)
return (
-
-
+
+
)
}
diff --git a/daiquiri/query/assets/js/components/submit/job/plots/HistogramForm.js b/daiquiri/query/assets/js/components/submit/job/plots/HistogramForm.js
index 582bcc353..468f98b48 100644
--- a/daiquiri/query/assets/js/components/submit/job/plots/HistogramForm.js
+++ b/daiquiri/query/assets/js/components/submit/job/plots/HistogramForm.js
@@ -4,12 +4,12 @@ import { useDebouncedCallback } from 'use-debounce'
import { operations } from 'daiquiri/query/assets/js/constants/plot'
-const HistogramForm = ({ columns, values, setValues }) => {
- const setBins = useDebouncedCallback((event) => setValues({
- ...values, bins: event.target.value
+const HistogramForm = ({ columns, plotValues, setPlotValues }) => {
+ const setBins = useDebouncedCallback((event) => setPlotValues({
+ ...plotValues, bins: event.target.value
}), 500)
- const setSelectValue = useDebouncedCallback((event) => setValues({
- ...values, s: {...values.s, value: event.target.value}
+ const setSelectValue = useDebouncedCallback((event) => setPlotValues({
+ ...plotValues, s: { ...plotValues.s, value: event.target.value }
}), 500)
return (
@@ -22,8 +22,8 @@ const HistogramForm = ({ columns, values, setValues }) => {
- {
- setValues({...values, x: {...values.x, column: event.target.value}})
+ {
+ setPlotValues({ ...plotValues, x: { ...plotValues.x, column: event.target.value } })
}}>
{
@@ -39,7 +39,7 @@ const HistogramForm = ({ columns, values, setValues }) => {
-
+
@@ -49,8 +49,8 @@ const HistogramForm = ({ columns, values, setValues }) => {
- {
- setValues({...values, s: {...values.s, column: event.target.value}})
+ {
+ setPlotValues({ ...plotValues, s: { ...plotValues.s, column: event.target.value } })
}}>
{
@@ -59,8 +59,8 @@ const HistogramForm = ({ columns, values, setValues }) => {
- {
- setValues({...values, s: {...values.s, operation: event.target.value}})
+ {
+ setPlotValues({ ...plotValues, s: { ...plotValues.s, operation: event.target.value } })
}}>
{
operations.map((operation, operationIndex) => )
@@ -68,7 +68,7 @@ const HistogramForm = ({ columns, values, setValues }) => {
-
+