vent
7 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with
27 additions and
1 deletions
-
packages/effects/plugins/src/echarts/use-echarts.ts
|
|
|
@ -32,6 +32,21 @@ function useEcharts(chartRef: Ref<EchartsUIType>) { |
|
|
|
const { height, width } = useWindowSize(); |
|
|
|
const resizeHandler: () => void = useDebounceFn(resize, 200); |
|
|
|
|
|
|
|
const getChartEl = (): HTMLElement | null => { |
|
|
|
const refValue = chartRef?.value as unknown; |
|
|
|
if (!refValue) return null; |
|
|
|
if (refValue instanceof HTMLElement) { |
|
|
|
return refValue; |
|
|
|
} |
|
|
|
const maybeComponent = refValue as { $el?: HTMLElement }; |
|
|
|
return maybeComponent.$el ?? null; |
|
|
|
}; |
|
|
|
|
|
|
|
const isElHidden = (el: HTMLElement | null): boolean => { |
|
|
|
if (!el) return true; |
|
|
|
return el.offsetHeight === 0 || el.offsetWidth === 0; |
|
|
|
}; |
|
|
|
|
|
|
|
const getOptions = computed((): EChartsOption => { |
|
|
|
if (!isDark.value) { |
|
|
|
return {}; |
|
|
|
@ -54,7 +69,7 @@ function useEcharts(chartRef: Ref<EchartsUIType>) { |
|
|
|
|
|
|
|
const renderEcharts = ( |
|
|
|
options: EChartsOption, |
|
|
|
clear = true, |
|
|
|
clear = true |
|
|
|
): Promise<Nullable<echarts.ECharts>> => { |
|
|
|
cacheOptions = options; |
|
|
|
const currentOptions = { |
|
|
|
@ -69,6 +84,13 @@ function useEcharts(chartRef: Ref<EchartsUIType>) { |
|
|
|
return; |
|
|
|
} |
|
|
|
nextTick(() => { |
|
|
|
const el = getChartEl(); |
|
|
|
if (isElHidden(el)) { |
|
|
|
useTimeoutFn(async () => { |
|
|
|
resolve(await renderEcharts(currentOptions)); |
|
|
|
}, 30); |
|
|
|
return; |
|
|
|
} |
|
|
|
useTimeoutFn(() => { |
|
|
|
if (!chartInstance) { |
|
|
|
const instance = initCharts(); |
|
|
|
@ -83,6 +105,10 @@ function useEcharts(chartRef: Ref<EchartsUIType>) { |
|
|
|
}; |
|
|
|
|
|
|
|
function resize() { |
|
|
|
const el = getChartEl(); |
|
|
|
if (isElHidden(el)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
chartInstance?.resize({ |
|
|
|
animation: { |
|
|
|
duration: 300, |
|
|
|
|