Skip to content

Commit c3e8d39

Browse files
committed
fix(P4.02): guard chart lifecycle hooks against undefined chartRef and chart [codexPreflight]
1 parent b38d0ec commit c3e8d39

6 files changed

Lines changed: 30 additions & 8 deletions

File tree

src/lib/components/BarChart/BreakdownChart.svelte

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
)
3737
3838
onMount(() => {
39+
if (!chartRef) return
3940
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
4041
const handleResize = () => chart.resize()
4142
window.addEventListener('resize', handleResize, { passive: true })
@@ -52,16 +53,21 @@
5253
})
5354
5455
return () => {
55-
chart.dispose()
56+
chart?.dispose()
5657
window.removeEventListener('resize', handleResize)
5758
}
5859
})
5960
6061
afterUpdate(() => {
62+
if (!chartRef) return
6163
tippy(document.querySelectorAll('[data-tippy-content]'), {
6264
theme: 'light',
6365
animation: 'scale',
6466
})
67+
if (!chart) {
68+
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
69+
chart.on('click', (params) => { goto(Url.ProjectDetail(params.name)) })
70+
}
6571
chart.setOption(option)
6672
})
6773
</script>

src/lib/components/BarChart/StackedBarChart.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,21 @@
2727
$: option = createStackedBarChartOption(xValues, series)
2828
2929
onMount(() => {
30+
if (!chartRef) return
3031
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
3132
const handleResize = () => chart.resize()
3233
window.addEventListener('resize', handleResize, { passive: true })
3334
chart.setOption(option)
3435
3536
return () => {
36-
chart.dispose()
37+
chart?.dispose()
3738
window.removeEventListener('resize', handleResize)
3839
}
3940
})
4041
4142
afterUpdate(() => {
42-
chart.dispose()
43+
if (!chartRef) return
44+
chart?.dispose()
4345
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
4446
chart.setOption(option)
4547
})

src/lib/components/BarChart/WeekdaysBarChart.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@
2020
$: option = createSimpleBarChartOption(summaries)
2121
2222
onMount(() => {
23+
if (!chartRef) return
2324
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
2425
const handleResize = () => chart.resize()
2526
window.addEventListener('resize', handleResize, { passive: true })
2627
chart.setOption(option)
2728
2829
return () => {
29-
chart.dispose()
30+
chart?.dispose()
3031
window.removeEventListener('resize', handleResize)
3132
}
3233
})
3334
3435
afterUpdate(() => {
36+
if (!chartRef) return
37+
if (!chart) chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
3538
chart.setOption(option)
3639
})
3740
</script>

src/lib/components/GaugeChart/DailyGauge.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@
2626
$: option = createDisciplineGaugeOption(data)
2727
2828
onMount(() => {
29+
if (!chartRef) return
2930
chart = echarts.init(chartRef, 'dark', { renderer: 'canvas' })
3031
const handleResize = () => chart.resize()
3132
window.addEventListener('resize', handleResize, { passive: true })
3233
chart.setOption(option)
3334
3435
return () => {
35-
chart.dispose()
36+
chart?.dispose()
3637
window.removeEventListener('resize', handleResize)
3738
}
3839
})
3940
4041
afterUpdate(() => {
42+
if (!chartRef) return
43+
if (!chart) chart = echarts.init(chartRef, 'dark', { renderer: 'canvas' })
4144
chart.setOption(option)
4245
})
4346

src/lib/components/PieChart/PieChart.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,21 @@
1919
$: option = createPieChartOption(data)
2020
2121
onMount(() => {
22+
if (!chartRef) return
2223
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
2324
const handleResize = () => chart.resize()
2425
window.addEventListener('resize', handleResize, { passive: true })
2526
chart.setOption(option)
2627
2728
return () => {
28-
chart.dispose()
29+
chart?.dispose()
2930
window.removeEventListener('resize', handleResize)
3031
}
3132
})
3233
3334
afterUpdate(() => {
35+
if (!chartRef) return
36+
if (!chart) chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
3437
chart.setOption(option)
3538
})
3639
</script>

src/lib/components/TimelineChart/TimelineChart.svelte

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,23 @@
2323
$: option = createTimelineChartOption(durations, itemType)
2424
2525
onMount(() => {
26+
if (!chartRef) return
2627
chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
2728
const handleResize = () => chart.resize()
2829
window.addEventListener('resize', handleResize, { passive: true })
2930
chart.setOption(option)
3031
3132
return () => {
32-
chart.dispose()
33+
chart?.dispose()
3334
window.removeEventListener('resize', handleResize)
3435
}
3536
})
3637
37-
afterUpdate(() => chart.setOption(option))
38+
afterUpdate(() => {
39+
if (!chartRef) return
40+
if (!chart) chart = echarts.init(chartRef, 'dark', { renderer: 'svg' })
41+
chart.setOption(option)
42+
})
3843
3944
const onUpdate = (e: CustomEvent<SupabaseDuration>) => (durations = e.detail)
4045
</script>

0 commit comments

Comments
 (0)