From a5df4c60a236a8cc2f84d8dd8e7a3a30794f0df9 Mon Sep 17 00:00:00 2001 From: Phillip Kelley-Dotson Date: Mon, 25 Jan 2021 19:14:52 -0800 Subject: [PATCH] feat: default timepicker to last week when dataset is changed (#12609) * set up timepicker to last when dataset is changed * simplify logic for dataset change * update modal code * remove uneeded code * fix bug * fix bug --- .../components/ControlPanelsContainer.jsx | 2 +- .../DateFilterControl/DateFilterControl.tsx | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/superset-frontend/src/explore/components/ControlPanelsContainer.jsx b/superset-frontend/src/explore/components/ControlPanelsContainer.jsx index e7b036edceb..8c82d460a53 100644 --- a/superset-frontend/src/explore/components/ControlPanelsContainer.jsx +++ b/superset-frontend/src/explore/components/ControlPanelsContainer.jsx @@ -132,7 +132,6 @@ class ControlPanelsContainer extends React.Component { if (visibility && !visibility.call(config, this.props, controlData)) { return null; } - return ( ); diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterControl.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterControl.tsx index 294ce994998..3e4833d1c13 100644 --- a/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterControl.tsx +++ b/superset-frontend/src/explore/components/controls/DateFilterControl/DateFilterControl.tsx @@ -74,7 +74,6 @@ const fetchTimeRange = async ( ) => { const query = rison.encode(timeRange); const endpoint = `/api/v1/time_range/?q=${query}`; - try { const response = await SupersetClient.get({ endpoint }); const timeRangeString = buildTimeRangeString( @@ -171,20 +170,23 @@ interface DateFilterLabelProps { onChange: (timeRange: string) => void; value?: string; endpoints?: TimeRangeEndpoints; + datasource?: string; } export default function DateFilterControl(props: DateFilterLabelProps) { - const { value = 'Last week', endpoints, onChange } = props; + const { value = 'Last week', endpoints, onChange, datasource } = props; const [actualTimeRange, setActualTimeRange] = useState(value); const [show, setShow] = useState(false); const [frame, setFrame] = useState(guessFrame(value)); + const [isMounted, setIsMounted] = useState(false); const [timeRangeValue, setTimeRangeValue] = useState(value); const [validTimeRange, setValidTimeRange] = useState(false); const [evalResponse, setEvalResponse] = useState(value); const [tooltipTitle, setTooltipTitle] = useState(value); useEffect(() => { + if (!isMounted) setIsMounted(true); fetchTimeRange(value, endpoints).then(({ value: actualRange, error }) => { if (error) { setEvalResponse(error || ''); @@ -218,6 +220,14 @@ export default function DateFilterControl(props: DateFilterLabelProps) { }); }, [value]); + useEffect(() => { + if (isMounted) { + onChange('Last week'); + setTimeRangeValue('Last week'); + setFrame(guessFrame('Last week')); + } + }, [datasource]); + useEffect(() => { fetchTimeRange(timeRangeValue, endpoints).then(({ value, error }) => { if (error) { @@ -236,8 +246,8 @@ export default function DateFilterControl(props: DateFilterLabelProps) { } function onHide() { - setFrame(guessFrame(value)); setTimeRangeValue(value); + setFrame(guessFrame(value)); setShow(false); }