Skip to content

Commit f464d38

Browse files
committed
chore(packages/vue): refactor vue wrapper
1 parent 1f01768 commit f464d38

File tree

5 files changed

+60
-18
lines changed

5 files changed

+60
-18
lines changed

examples/with-vue/src/App.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,13 @@ const options = ref<FireworksOptions>({ opacity: 0.5 })
3131
const mounted = ref(true)
3232
3333
async function startFireworks() {
34-
const { fireworks } = fw.value!
35-
fireworks?.start()
34+
if (!fw.value) return
35+
fw.value.start()
3636
await new Promise((resolve) => setTimeout(resolve, 1000))
37-
await fireworks?.waitStop()
37+
await fw.value.waitStop()
3838
}
3939
40-
watch(fw, () => {
41-
if (fw.value) {
42-
startFireworks()
43-
}
44-
})
40+
watch(fw, () => startFireworks())
4541
</script>
4642

4743
<style>

packages/fireworks-js/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Fireworks } from './fireworks.js'
2-
import type { FireworksOptions } from './types.js'
2+
import type { FireworksHandlers, FireworksOptions } from './types.js'
33

44
export { Fireworks }
55
export default Fireworks
6-
export type { FireworksOptions }
6+
export type { FireworksOptions, FireworksHandlers }

packages/fireworks-js/src/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { Fireworks } from './fireworks.js'
2+
13
export type LineStyle = 'round' | 'square'
24

35
export interface IFireworksOptions {
@@ -93,3 +95,18 @@ export type RecursivePartial<T> = {
9395
? RecursivePartial<T[P]>
9496
: T[P]
9597
}
98+
99+
export interface FireworksHandlers
100+
extends Pick<
101+
Fireworks,
102+
| 'isRunning'
103+
| 'start'
104+
| 'pause'
105+
| 'clear'
106+
| 'updateOptions'
107+
| 'updateBoundaries'
108+
| 'updateSize'
109+
> {
110+
waitStop(): Promise<void>
111+
stop(): void
112+
}

packages/react/src/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React, { useEffect, useImperativeHandle, useRef } from 'react'
44

55
interface FireworksProps extends React.HTMLAttributes<HTMLDivElement> {
66
children?: React.ReactNode
7+
autostart?: boolean
78
options?: FireworksOptions
89
}
910

@@ -16,7 +17,7 @@ interface FireworksHandlers
1617
}
1718

1819
const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
19-
({ children, options, ...rest }, ref) => {
20+
({ children, options, autostart = true, ...rest }, ref) => {
2021
const container = useRef<HTMLDivElement>(null)
2122
const fireworks = useRef<FireworksJs | null>(null)
2223

@@ -46,7 +47,9 @@ const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
4647

4748
useEffect(() => {
4849
fireworks.current = new FireworksJs(container.current!, options)
49-
fireworks.current.start()
50+
if (autostart) {
51+
fireworks.current.start()
52+
}
5053

5154
return () => {
5255
fireworks.current!.stop(true)

packages/vue/src/fireworks.vue

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<script lang="ts" setup>
22
import { Fireworks } from 'fireworks-js'
3-
import type { FireworksOptions } from 'fireworks-js'
4-
import { PropType, defineExpose, onMounted, onUnmounted, ref } from 'vue'
3+
import type { FireworksHandlers, FireworksOptions } from 'fireworks-js'
4+
import { defineExpose, onMounted, onUnmounted, ref } from 'vue'
5+
import type { PropType } from 'vue'
56
67
const props = defineProps({
78
autostart: {
@@ -14,8 +15,8 @@ const props = defineProps({
1415
}
1516
})
1617
17-
const fireworks = ref<Fireworks>()
1818
const container = ref<HTMLDivElement>()
19+
const fireworks = ref<Fireworks>()
1920
2021
onMounted(() => {
2122
fireworks.value = new Fireworks(container.value!, props.options)
@@ -28,9 +29,34 @@ onUnmounted(() => {
2829
fireworks.value!.stop()
2930
})
3031
31-
defineExpose({
32-
fireworks,
33-
container
32+
defineExpose<FireworksHandlers>({
33+
get isRunning() {
34+
return fireworks.value!.isRunning
35+
},
36+
start() {
37+
fireworks.value!.start()
38+
},
39+
stop() {
40+
fireworks.value!.stop()
41+
},
42+
async waitStop() {
43+
await fireworks.value!.waitStop()
44+
},
45+
pause() {
46+
fireworks.value!.pause()
47+
},
48+
clear() {
49+
fireworks.value!.clear()
50+
},
51+
updateOptions(options) {
52+
fireworks.value!.updateOptions(options)
53+
},
54+
updateSize(size) {
55+
fireworks.value!.updateSize(size)
56+
},
57+
updateBoundaries(boundaries) {
58+
fireworks.value!.updateBoundaries(boundaries)
59+
}
3460
})
3561
</script>
3662

0 commit comments

Comments
 (0)