Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions src/app/loading.js

This file was deleted.

14 changes: 11 additions & 3 deletions src/components/Charts/Bar.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
'use client';
import React, { useRef, useState } from 'react';
import ReactECharts from 'echarts-for-react';
import isEqual from 'lodash/isEqual';
import Loading from '../Loading';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Bar({ data, stack, onSelect, link, metabaseLink }) {
const [loading, setLoading] = useState(true);
Expand Down Expand Up @@ -115,7 +121,8 @@ export default function Bar({ data, stack, onSelect, link, metabaseLink }) {
};

const onMouseOver = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
echartsInstance.dispatchAction({
type: 'takeGlobalCursor',
key: 'brush',
Expand All @@ -127,7 +134,8 @@ export default function Bar({ data, stack, onSelect, link, metabaseLink }) {

const onBrushEnd = (params) => {
if (params.areas.length > 0) {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
let start = echartsInstance.convertFromPixel(
{ xAxisIndex: 0 },
params.areas[0].range[0]
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/CountryMap.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
'use client';
import ReactECharts from 'echarts-for-react';
import 'echarts-countries-js/echarts-countries-js/world';
import isEqual from 'lodash/isEqual';
import Loading from '../Loading';
Expand All @@ -9,6 +8,13 @@ import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function CountryMap({ data, selected, onClick, link, metabaseLink }) {
const [loading, setLoading] = useState(true);
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/Gauge.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
'use client'
import React, { useState } from 'react'
import ReactECharts from 'echarts-for-react';
import isEqual from 'lodash/isEqual'
import Loading from '../Loading'
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Gauge({ data }) {
const [loading, setLoading] = useState(true)
Expand Down
11 changes: 9 additions & 2 deletions src/components/Charts/HeatMap.jsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
'use client';
import React, { useRef, useState } from 'react';
import isEqual from 'lodash/isEqual';
import ReactECharts from 'echarts-for-react';
import styles from './styles.module.css';
import Loading from '../Loading';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function HeatMap({ data, title, subtitle, onClick, link, metabaseLink }) {
const chartRef = useRef();
Expand Down Expand Up @@ -96,7 +102,8 @@ export default function HeatMap({ data, title, subtitle, onClick, link, metabase
},
extraCssText: 'visibility: hidden;padding:0px;',
position: (point, params, dom, rect, size) => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
const pos = echartsInstance.convertToPixel({ seriesIndex: 0 }, [
params.value[0],
params.value[1]
Expand Down
11 changes: 9 additions & 2 deletions src/components/Charts/HorizontalBar.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use client';
import React, { useRef, useState } from 'react';
import isEqual from 'lodash/isEqual';
import ReactECharts from 'echarts-for-react';
import styles from './styles.module.css';
import { formatNumber, toValidStyleName } from '@/utils/utils';
import Loading from '../Loading';
Expand All @@ -10,6 +9,13 @@ import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function HorizontalBar({
data,
Expand Down Expand Up @@ -170,7 +176,8 @@ export default function HorizontalBar({
};

const onMouseOver = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
};

const onChartReady = (echarts) => {
Expand Down
21 changes: 15 additions & 6 deletions src/components/Charts/Line.jsx
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
'use client';
import React, { useRef, useState } from 'react';
import isEqual from 'lodash/isEqual';
import ReactECharts from 'echarts-for-react';

import styles from './styles.module.css';
import Loading from '../Loading';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Line({ data, onSelect, onClear, link, metabaseLink }) {
const [loading, setLoading] = useState(true);

const chartRef = useRef();
const xAxis = data.map((p) => p.x);
const onMouseOver = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
const newOptions = echartsInstance.getOption();
newOptions.series[0].lineStyle.opacity = 1;
newOptions.series[0].lineStyle.shadowColor = '#FAFF69';
Expand Down Expand Up @@ -111,7 +117,8 @@ export default function Line({ data, onSelect, onClear, link, metabaseLink }) {
},
extraCssText: 'visibility: hidden;padding:0px;',
position: (point, params, dom, rect, size) => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
const pos = echartsInstance.convertToPixel({ seriesIndex: 0 }, [
params[0].axisValue,
params[0].value
Expand All @@ -132,13 +139,15 @@ export default function Line({ data, onSelect, onClear, link, metabaseLink }) {
}

const onMouseOut = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
echartsInstance.setOption(options);
};

const onBrushEnd = (params) => {
if (params.areas.length > 0) {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
let start = echartsInstance.convertFromPixel(
{ xAxisIndex: 0 },
params.areas[0].range[0]
Expand Down
14 changes: 11 additions & 3 deletions src/components/Charts/MultiLine.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
'use client';
import React, { useRef, useState } from 'react';
import ReactECharts from 'echarts-for-react';
import isEqual from 'lodash/isEqual';
import Loading from '../Loading';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function MultiLine({ data, stack, fill, onSelect, link, metabaseLink }) {
const [loading, setLoading] = useState(true);
Expand Down Expand Up @@ -117,7 +123,8 @@ export default function MultiLine({ data, stack, fill, onSelect, link, metabaseL
};

const onMouseOver = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
echartsInstance.dispatchAction({
type: 'takeGlobalCursor',
key: 'brush',
Expand All @@ -129,7 +136,8 @@ export default function MultiLine({ data, stack, fill, onSelect, link, metabaseL

const onBrushEnd = (params) => {
if (params.areas.length > 0) {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
let start = echartsInstance.convertFromPixel(
{ xAxisIndex: 0 },
params.areas[0].range[0]
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/Pie.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import ReactECharts from 'echarts-for-react';
import Loading from '../Loading';
import isEqual from 'lodash/isEqual';
import { useState } from 'react';
Expand All @@ -7,6 +6,13 @@ import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Pie({ data, onClick, link, metabaseLink }) {
const [loading, setLoading] = useState(true);
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/PunchCard.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
'use client';
import React, { useState } from 'react';
import ReactECharts from 'echarts-for-react';
import isEqual from 'lodash/isEqual';
import Loading from '../Loading';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function PunchCard({
data,
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/Radar.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
'use client';
import ReactECharts from 'echarts-for-react';
import isEqual from 'lodash/isEqual';
import Loading from '../Loading';
import { useState } from 'react';
import Link from 'next/link';
import {
ArrowTopRightOnSquareIcon,
} from '@heroicons/react/20/solid';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Radar({ data, onClick, link }) {
const [loading, setLoading] = useState(true);
Expand Down
16 changes: 11 additions & 5 deletions src/components/Charts/Spark.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
'use client';
import React, { useRef, useState } from 'react';
import ReactECharts from 'echarts-for-react';
import { ArrowTopRightOnSquareIcon } from '@heroicons/react/20/solid';
import Link from 'next/link';
import { useRouter } from 'next/navigation';
import isEqual from 'lodash/isEqual';
import Image from 'next/image';
import CopyDropdown from '../CopyDropdown';
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function Spark({ name, data, link, metabaseLink, type='bar' }) {
const chartRef = useRef();
Expand All @@ -20,7 +26,8 @@ export default function Spark({ name, data, link, metabaseLink, type='bar' }) {
};

const onMouseOver = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
const newOptions = echartsInstance.getOption();
newOptions.series[0].lineStyle.opacity = 0.8;
newOptions.series[0].lineStyle.shadowColor = '#262626';
Expand Down Expand Up @@ -59,8 +66,6 @@ export default function Spark({ name, data, link, metabaseLink, type='bar' }) {
top: '10px'
},
xAxis: {
type: 'category',
data: data.map((p) => p.x),
show: true,
type: 'category',
data: xAxis,
Expand Down Expand Up @@ -116,7 +121,8 @@ export default function Spark({ name, data, link, metabaseLink, type='bar' }) {
};

const onMouseOut = () => {
const echartsInstance = chartRef.current.getEchartsInstance();
const echartsInstance = chartRef.current?.getEchartsInstance();
if (!echartsInstance) return;
echartsInstance.setOption(options);
setSelected(false);
};
Expand Down
8 changes: 7 additions & 1 deletion src/components/Charts/treemap.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
'use client'
import React, { useRef } from 'react'
import ReactECharts from 'echarts-for-react'
import dynamic from 'next/dynamic'

// ECharts depends on browser APIs (window/document), so it breaks during Next.js SSR.
// We load it dynamically on the client only.
const ReactECharts = dynamic(() => import('echarts-for-react'), {
ssr: false,
})

export default function TreeMap ({data, onSelect}) {

Expand Down
Loading