Skip to content

Commit 3f05741

Browse files
committed
chore(packages/solid): refactor solidjs wrapper
1 parent ed448cc commit 3f05741

File tree

2 files changed

+46
-18
lines changed

2 files changed

+46
-18
lines changed

examples/with-solid/src/App.tsx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
11
import { Show, createSignal } from 'solid-js'
2-
import { Fireworks } from '@fireworks-js/solid'
2+
import { Fireworks, FireworksHandlers } from '@fireworks-js/solid'
33

44
export function App() {
55
const [enabled, setEnabled] = createSignal(true)
6+
let fireworks: FireworksHandlers
7+
8+
// https://github.com/solidjs/solid/issues/116#issuecomment-583247897
9+
setTimeout(() => console.log(fireworks))
10+
11+
const toggleFireworks = () => {
12+
if (fireworks.isRunning) {
13+
fireworks.waitStop()
14+
} else {
15+
fireworks.start()
16+
}
17+
}
618

719
return (
820
<>
9-
<button
10-
onClick={() => setEnabled(!enabled())}
11-
style={{ position: 'absolute', 'z-index': 1 }}
21+
<div
22+
style={{
23+
display: 'flex',
24+
gap: '4px',
25+
position: 'absolute',
26+
'z-index': 1
27+
}}
1228
>
13-
{enabled() ? 'Enabled' : 'Disabled'}
14-
</button>
29+
<button onClick={() => setEnabled(!enabled())}>
30+
{enabled() ? 'Enabled' : 'Disabled'}
31+
</button>
32+
<button onClick={() => toggleFireworks()}>Toggle</button>
33+
</div>
1534
<Show when={enabled()}>
1635
<Fireworks
36+
ref={(ref) => (fireworks = ref)}
1737
options={{ opacity: 0.5 }}
1838
style={{
1939
top: 0,

packages/solid/src/index.tsx

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
11
import { Fireworks as FireworksJS } from 'fireworks-js'
2-
import type { FireworksOptions } from 'fireworks-js'
3-
import { onCleanup, onMount } from 'solid-js'
2+
import type { FireworksHandlers, FireworksOptions } from 'fireworks-js'
3+
import { mergeProps, onCleanup, onMount } from 'solid-js'
44
import type { JSX, ParentComponent } from 'solid-js'
55

6-
type FireworksProps = {
6+
interface FireworksProps
7+
extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'ref'> {
78
options?: FireworksOptions
8-
style?: JSX.CSSProperties
9+
autostart?: boolean
10+
ref?: (handlers: FireworksHandlers) => void
911
}
1012

11-
const Fireworks: ParentComponent<FireworksProps> = ({
12-
options,
13-
style,
14-
children
15-
}) => {
13+
const Fireworks: ParentComponent<FireworksProps> = (props) => {
14+
const { autostart, options, children, ref, ...rest } = mergeProps(
15+
{ autostart: true },
16+
props
17+
)
1618
let container: HTMLDivElement | undefined
1719
let fireworks: FireworksJS | undefined
1820

1921
onMount(() => {
2022
fireworks = new FireworksJS(container!, options)
21-
fireworks.start()
23+
if (autostart) {
24+
fireworks.start()
25+
}
26+
27+
if (ref) {
28+
ref(fireworks)
29+
}
2230

2331
onCleanup(() => {
2432
fireworks!.stop()
@@ -28,7 +36,7 @@ const Fireworks: ParentComponent<FireworksProps> = ({
2836
return (
2937
<div
3038
ref={container}
31-
style={style}
39+
{...rest}
3240
>
3341
{children}
3442
</div>
@@ -37,4 +45,4 @@ const Fireworks: ParentComponent<FireworksProps> = ({
3745

3846
export { Fireworks }
3947
export default Fireworks
40-
export type { FireworksOptions }
48+
export type { FireworksOptions, FireworksHandlers }

0 commit comments

Comments
 (0)