diff --git a/frontend/app/components/Dashboard/components/WidgetChart/WidgetChart.tsx b/frontend/app/components/Dashboard/components/WidgetChart/WidgetChart.tsx index 67247a2d2..732359789 100644 --- a/frontend/app/components/Dashboard/components/WidgetChart/WidgetChart.tsx +++ b/frontend/app/components/Dashboard/components/WidgetChart/WidgetChart.tsx @@ -4,7 +4,7 @@ import CustomMetricPercentage from 'App/components/Dashboard/Widgets/CustomMetri import CustomMetricTable from 'App/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable'; import CustomMetricPieChart from 'App/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart'; import { Styles } from 'App/components/Dashboard/Widgets/common'; -import { observer, useObserver } from 'mobx-react-lite'; +import { observer } from 'mobx-react-lite'; import { Loader } from 'UI'; import { useStore } from 'App/mstore'; import WidgetPredefinedChart from '../WidgetPredefinedChart'; @@ -13,23 +13,25 @@ import { getStartAndEndTimestampsByDensity } from 'Types/dashboard/helper'; import { debounce } from 'App/utils'; import useIsMounted from 'App/hooks/useIsMounted' import { FilterKey } from 'Types/filter/filterType'; - +import { CLICKMAP } from 'App/constants/card'; import FunnelWidget from 'App/components/Funnels/FunnelWidget'; import ErrorsWidget from '../Errors/ErrorsWidget'; import SessionWidget from '../Sessions/SessionWidget'; import CustomMetricTableSessions from 'App/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTableSessions'; import CustomMetricTableErrors from 'App/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTableErrors'; + interface Props { metric: any; isWidget?: boolean; isTemplate?: boolean; } + function WidgetChart(props: Props) { const { isWidget = false, metric, isTemplate } = props; const { dashboardStore, metricStore } = useStore(); const _metric: any = metricStore.instance; - const period = useObserver(() => dashboardStore.period); - const drillDownPeriod = useObserver(() => dashboardStore.drillDownPeriod); + const period = dashboardStore.period; + const drillDownPeriod = dashboardStore.drillDownPeriod; const drillDownFilter = dashboardStore.drillDownFilter; const colors = Styles.customMetricColors; const [loading, setLoading] = useState(true) @@ -175,6 +177,11 @@ function WidgetChart(props: Props) { ) } } + if (metricType === CLICKMAP) { + return ( +
rendering clickmap
+ ) + } return
Unknown
; } diff --git a/frontend/app/components/Dashboard/components/WidgetForm/WidgetForm.tsx b/frontend/app/components/Dashboard/components/WidgetForm/WidgetForm.tsx index be1d80eef..93df06c54 100644 --- a/frontend/app/components/Dashboard/components/WidgetForm/WidgetForm.tsx +++ b/frontend/app/components/Dashboard/components/WidgetForm/WidgetForm.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { metricTypes, metricOf, issueOptions } from 'App/constants/filterOptions'; import { FilterKey } from 'Types/filter/filterType'; import { useStore } from 'App/mstore'; -import { useObserver } from 'mobx-react-lite'; +import { observer } from 'mobx-react-lite'; import { Button, Icon, SegmentSelection } from 'UI' import FilterSeries from '../FilterSeries'; import { confirm, Tooltip } from 'UI'; @@ -28,8 +28,8 @@ function WidgetForm(props: Props) { const { history, match: { params: { siteId, dashboardId } } } = props; const { metricStore, dashboardStore } = useStore(); const dashboards = dashboardStore.dashboards; - const isSaving = useObserver(() => metricStore.isSaving); - const metric: any = useObserver(() => metricStore.instance) + const isSaving = metricStore.isSaving; + const metric: any = metricStore.instance const timeseriesOptions = metricOf.filter(i => i.type === 'timeseries'); const tableOptions = metricOf.filter(i => i.type === 'table'); @@ -37,7 +37,7 @@ function WidgetForm(props: Props) { const isFunnel = metric.metricType === 'funnel'; const canAddToDashboard = metric.exists() && dashboards.length > 0; const canAddSeries = metric.series.length < 3; - const eventsLength = useObserver(() => metric.series[0].filter.filters.filter((i: any) => i.isEvent).length) + const eventsLength = metric.series[0].filter.filters.filter((i: any) => i.isEvent).length const cannotSaveFunnel = isFunnel && (!metric.series[0] || eventsLength <= 1); const writeOption = ({ value, name }: any) => { @@ -100,12 +100,12 @@ function WidgetForm(props: Props) { } } - return useObserver(() => ( + return (
- + {/* {metric.metricType === 'timeseries' && ( @@ -216,7 +216,7 @@ function WidgetForm(props: Props) {
- )); + ); } -export default WidgetForm; +export default observer(WidgetForm); diff --git a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricSubtypeDropdown/MetricSubtypeDropdown.tsx b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricSubtypeDropdown/MetricSubtypeDropdown.tsx index 4e76c47de..eccfda55e 100644 --- a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricSubtypeDropdown/MetricSubtypeDropdown.tsx +++ b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricSubtypeDropdown/MetricSubtypeDropdown.tsx @@ -1,5 +1,5 @@ import { useStore } from 'App/mstore'; -import { useObserver } from 'mobx-react-lite'; +import { observer } from 'mobx-react-lite'; import { TYPES } from 'App/constants/card'; import { MetricType } from 'App/components/Dashboard/components/MetricTypeItem/MetricTypeItem'; import React from 'react'; @@ -12,8 +12,8 @@ interface Props { } function MetricSubtypeDropdown(props: Props) { const { metricStore } = useStore(); - const metric: any = useObserver(() => metricStore.instance); - + const metric: any = metricStore.instance; + const options = React.useMemo(() => { const type = TYPES.find((i: MetricType) => i.slug === metric.metricType); if (type && type.subTypes) { @@ -56,4 +56,4 @@ function MetricSubtypeDropdown(props: Props) { ) : null; } -export default MetricSubtypeDropdown; +export default observer(MetricSubtypeDropdown); diff --git a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx index 0a5ee8122..9a7d85fe8 100644 --- a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx +++ b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx @@ -4,15 +4,16 @@ import Select from 'Shared/Select'; import { MetricType } from 'App/components/Dashboard/components/MetricTypeItem/MetricTypeItem'; import { components } from 'react-select'; import CustomDropdownOption from 'Shared/CustomDropdownOption'; -import { useObserver } from 'mobx-react-lite'; +import { observer } from 'mobx-react-lite'; import { useStore } from 'App/mstore'; +import withLocationHandlers from 'HOCs/withLocationHandlers'; interface Props { - onSelect: any; + query: Record any>; } function MetricTypeDropdown(props: Props) { const { metricStore } = useStore(); - const metric: any = useObserver(() => metricStore.instance); + const metric: any = metricStore.instance; const options: any = useMemo(() => { // TYPES.shift(); // remove "Add from library" item return TYPES.filter((i: MetricType) => i.slug !== LIBRARY).map((i: MetricType) => ({ @@ -23,16 +24,25 @@ function MetricTypeDropdown(props: Props) { })); }, []); - const onSelect = (_: any, option: Record) => - props.onSelect({ value: { value: option.value }, name: option.name }); + React.useEffect(() => { + const queryCardType = props.query.get('type') + if (queryCardType && options.length > 0 && metric.metricType) { + const type = options.find(i => i.value === queryCardType) + setTimeout(() => onChange(type.value), 0) + console.log('trying to change to ', type, metric.metricType) + } + }, []) + const onChange = (type: string) => { + metricStore.changeType(type) + } return (