|
|
@@ -1,6 +1,6 @@
|
|
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
-import type { TLDocumentModel } from '@tldraw/core'
|
|
|
+import { deepEqual, TLApp, TLAsset, TLDocumentModel } from '@tldraw/core'
|
|
|
import {
|
|
|
AppCanvas,
|
|
|
AppProvider,
|
|
|
@@ -58,37 +58,49 @@ interface LogseqTldrawProps {
|
|
|
onPersist?: TLReactCallbacks<Shape>['onPersist']
|
|
|
}
|
|
|
|
|
|
-export const App = function App(props: LogseqTldrawProps): JSX.Element {
|
|
|
- const renderers: any = React.useMemo(() => {
|
|
|
+export const App = function App({
|
|
|
+ onPersist,
|
|
|
+ handlers,
|
|
|
+ renderers,
|
|
|
+ model,
|
|
|
+ ...rest
|
|
|
+}: LogseqTldrawProps): JSX.Element {
|
|
|
+ const memoRenders: any = React.useMemo(() => {
|
|
|
return Object.fromEntries(
|
|
|
- Object.entries(props.renderers).map(([key, comp]) => {
|
|
|
+ Object.entries(renderers).map(([key, comp]) => {
|
|
|
return [key, React.memo(comp)]
|
|
|
})
|
|
|
)
|
|
|
}, [])
|
|
|
const contextValue = {
|
|
|
- renderers,
|
|
|
- handlers: props.handlers,
|
|
|
+ renderers: memoRenders,
|
|
|
+ handlers: handlers,
|
|
|
}
|
|
|
|
|
|
const onFileDrop = useFileDrop(contextValue)
|
|
|
const onPaste = usePaste(contextValue)
|
|
|
const onQuickAdd = useQuickAdd()
|
|
|
|
|
|
+ const onPersistOnDiff: TLReactCallbacks<Shape>['onPersist'] = React.useCallback(
|
|
|
+ (app, info) => {
|
|
|
+ if (!deepEqual(app.serialized, model)) {
|
|
|
+ onPersist?.(app, info)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [model]
|
|
|
+ )
|
|
|
+
|
|
|
return (
|
|
|
- <LogseqContext.Provider
|
|
|
- value={{
|
|
|
- renderers,
|
|
|
- handlers: props.handlers,
|
|
|
- }}
|
|
|
- >
|
|
|
+ <LogseqContext.Provider value={contextValue}>
|
|
|
<AppProvider
|
|
|
Shapes={shapes}
|
|
|
Tools={tools}
|
|
|
onFileDrop={onFileDrop}
|
|
|
onPaste={onPaste}
|
|
|
onCanvasDBClick={onQuickAdd}
|
|
|
- {...props}
|
|
|
+ onPersist={onPersistOnDiff}
|
|
|
+ model={model}
|
|
|
+ {...rest}
|
|
|
>
|
|
|
<div className="logseq-tldraw logseq-tldraw-wrapper">
|
|
|
<AppCanvas components={components}>
|