indicators on the canvas example (#4071)
This PR shows how you could use an OnTheCanvas component to display shape indicators. ### Change type - [x] `other`
This commit is contained in:
parent
c1fe8ec99a
commit
a466ffe92a
2 changed files with 85 additions and 0 deletions
|
@ -0,0 +1,75 @@
|
|||
import { TLComponents, Tldraw, useEditor, useEditorComponents, useValue } from 'tldraw'
|
||||
import 'tldraw/tldraw.css'
|
||||
|
||||
const components: TLComponents = {
|
||||
OnTheCanvas: () => {
|
||||
const editor = useEditor()
|
||||
|
||||
// [1]
|
||||
const renderingShapes = useValue(
|
||||
'rendering shapes',
|
||||
() => editor.getRenderingShapes().filter((_info) => true),
|
||||
[editor]
|
||||
)
|
||||
|
||||
// [2
|
||||
const { ShapeIndicator } = useEditorComponents()
|
||||
if (!ShapeIndicator) return null
|
||||
|
||||
return (
|
||||
<div style={{ position: 'absolute', top: 0, left: 0, zIndex: 9999 }}>
|
||||
{renderingShapes.map(({ id }) => (
|
||||
<ShapeIndicator key={id + '_indicator'} shapeId={id} />
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
export default function IndicatorsLogicExample() {
|
||||
return (
|
||||
<div className="tldraw__editor">
|
||||
<Tldraw
|
||||
components={components}
|
||||
onMount={(editor) => {
|
||||
if (editor.getCurrentPageShapeIds().size === 0) {
|
||||
editor.createShapes([
|
||||
{
|
||||
type: 'geo',
|
||||
x: 100,
|
||||
y: 100,
|
||||
},
|
||||
{
|
||||
type: 'geo',
|
||||
x: 500,
|
||||
y: 150,
|
||||
},
|
||||
{
|
||||
type: 'geo',
|
||||
x: 100,
|
||||
y: 500,
|
||||
},
|
||||
{
|
||||
type: 'geo',
|
||||
x: 500,
|
||||
y: 500,
|
||||
},
|
||||
])
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
/*
|
||||
[1]
|
||||
Get which indicators to show (based on the shapes currently on screen).
|
||||
You could include logic here using the filter to narrow down which shapes
|
||||
you want to show the indicators for.
|
||||
|
||||
[2]
|
||||
You could override the default ShapeIndicator component in this
|
||||
same TLComponents object, but the default (DefaultIndicator.tsx)
|
||||
has a lot of logic for where and how to display the indicator
|
||||
*/
|
10
apps/examples/src/examples/indicators-logic/README.md
Normal file
10
apps/examples/src/examples/indicators-logic/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: Indicators logic
|
||||
component: ./IndicatorsLogicExample.tsx
|
||||
category: editor-api
|
||||
keywords: [indicators]
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
If for some reason you wanted to show indicators yourself, here's an example of that.
|
Loading…
Reference in a new issue