Tldraw/apps/dotcom/src/components/SneakyOnDropOverride.ts

34 wiersze
1.2 KiB
TypeScript

import { useEffect } from 'react'
import { parseAndLoadDocument, useDefaultHelpers, useEditor } from 'tldraw'
import { shouldOverrideDocument } from '../utils/shouldOverrideDocument'
export function SneakyOnDropOverride({ isMultiplayer }: { isMultiplayer: boolean }) {
const editor = useEditor()
const { addDialog, msg, addToast } = useDefaultHelpers()
useEffect(() => {
const defaultOnDrop = editor.externalContentHandlers['files']
editor.registerExternalContentHandler('files', async (content) => {
const { files } = content
const tldrawFiles = files.filter((file) => file.name.endsWith('.tldr'))
if (tldrawFiles.length > 0) {
if (isMultiplayer) {
addToast({
title: msg('file-system.shared-document-file-open-error.title'),
description: msg('file-system.shared-document-file-open-error.description'),
severity: 'error',
})
} else {
const shouldOverride = await shouldOverrideDocument(addDialog)
if (!shouldOverride) return
await parseAndLoadDocument(editor, await tldrawFiles[0].text(), msg, addToast)
}
} else {
await defaultOnDrop?.(content)
}
})
}, [isMultiplayer, editor, addToast, msg, addDialog])
return null
}