Implement useExtensionButton()
This commit is contained in:
parent
d260f74c06
commit
10c2b69bf3
1 changed files with 36 additions and 0 deletions
36
packages/playground/src/shared/utils/useExtensionButton.ts
Normal file
36
packages/playground/src/shared/utils/useExtensionButton.ts
Normal file
|
@ -0,0 +1,36 @@
|
|||
import studio from '@theatre/studio'
|
||||
import {useEffect, useMemo, useRef} from 'react'
|
||||
|
||||
let idCounter = 0
|
||||
|
||||
export function useExtensionButton(
|
||||
title: string,
|
||||
callback: () => void,
|
||||
svgSource: string = stepForward,
|
||||
) {
|
||||
const refs = useRef({callback, svgSource})
|
||||
const id = useMemo(() => 'useExtensionButton#' + idCounter++, [])
|
||||
useEffect(() => {
|
||||
studio.extend({
|
||||
id: id,
|
||||
toolbars: {
|
||||
global(set) {
|
||||
set([
|
||||
{
|
||||
type: 'Icon',
|
||||
title,
|
||||
onClick() {
|
||||
refs.current.callback()
|
||||
},
|
||||
svgSource: refs.current.svgSource,
|
||||
},
|
||||
])
|
||||
return () => {}
|
||||
},
|
||||
},
|
||||
})
|
||||
}, [id])
|
||||
}
|
||||
|
||||
// FontAwesome FaStepForward
|
||||
const stepForward = `<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"></path></svg>`
|
Loading…
Reference in a new issue