import { ref, Ref, onUnmounted, onMounted } from 'vue'; import * as echarts from 'echarts/core'; /** * eChart hook * @param domId * @param chart */ export const useChart = (domId: string): Ref => { let chartContainer: HTMLCanvasElement; const selfChart = ref(); const updateContainer = () => { selfChart.value.resize({ width: chartContainer.clientWidth, height: chartContainer.clientHeight, }); }; onMounted(() => { if (!chartContainer) { chartContainer = document.getElementById(domId) as HTMLCanvasElement; } selfChart.value = echarts.init(chartContainer); }); window.addEventListener('resize', updateContainer, false); onUnmounted(() => { window.removeEventListener('resize', updateContainer); }); return selfChart; }; /** * counter utils * @param duration * @returns */ export const useCounter = (duration = 60): [Ref, () => void] => { let intervalTimer: NodeJS.Timer; onMounted(() => { clearInterval(intervalTimer); }); const countDown = ref(0); return [ countDown, () => { countDown.value = duration; intervalTimer = setInterval(() => { if (countDown.value > 0) { countDown.value -= 1; } else { clearInterval(intervalTimer); countDown.value = 0; } }, 1000); }, ]; };