chore: fix remote image component

This commit is contained in:
Aman Harwara
2023-03-31 15:49:06 +05:30
parent c3d3633e6b
commit c832371e3a
2 changed files with 66 additions and 35 deletions

View File

@@ -2,13 +2,27 @@ import { useApplication } from '@/Components/ApplicationProvider'
import Icon from '@/Components/Icon/Icon' import Icon from '@/Components/Icon/Icon'
import Spinner from '@/Components/Spinner/Spinner' import Spinner from '@/Components/Spinner/Spinner'
import { isDesktopApplication } from '@/Utils' import { isDesktopApplication } from '@/Utils'
import { BlockWithAlignableContents } from '@lexical/react/LexicalBlockWithAlignableContents'
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
import { classNames } from '@standardnotes/snjs' import { classNames } from '@standardnotes/snjs'
import { ElementFormatType, NodeKey } from 'lexical'
import { useCallback, useState } from 'react' import { useCallback, useState } from 'react'
import { $createFileNode } from '../EncryptedFilePlugin/Nodes/FileUtils' import { $createFileNode } from '../EncryptedFilePlugin/Nodes/FileUtils'
import { RemoteImageNode } from './RemoteImageNode' import { RemoteImageNode } from './RemoteImageNode'
const RemoteImageComponent = ({ src, alt, node }: { src: string; alt?: string; node: RemoteImageNode }) => { type Props = {
src: string
alt?: string
node: RemoteImageNode
className: Readonly<{
base: string
focus: string
}>
format: ElementFormatType | null
nodeKey: NodeKey
}
const RemoteImageComponent = ({ className, src, alt, node, format, nodeKey }: Props) => {
const application = useApplication() const application = useApplication()
const [editor] = useLexicalComposerContext() const [editor] = useLexicalComposerContext()
@@ -51,6 +65,7 @@ const RemoteImageComponent = ({ src, alt, node }: { src: string; alt?: string; n
const canShowSaveButton = application.isNativeMobileWeb() || isDesktopApplication() const canShowSaveButton = application.isNativeMobileWeb() || isDesktopApplication()
return ( return (
<BlockWithAlignableContents className={className} format={format} nodeKey={nodeKey}>
<div className="relative flex min-h-[2rem] flex-col items-center gap-2.5"> <div className="relative flex min-h-[2rem] flex-col items-center gap-2.5">
<img <img
alt={alt} alt={alt}
@@ -82,6 +97,7 @@ const RemoteImageComponent = ({ src, alt, node }: { src: string; alt?: string; n
</button> </button>
)} )}
</div> </div>
</BlockWithAlignableContents>
) )
} }

View File

@@ -1,5 +1,5 @@
import { DecoratorBlockNode, SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode' import { DecoratorBlockNode, SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode'
import { DOMConversionMap, DOMExportOutput, LexicalNode, Spread } from 'lexical' import { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, Spread } from 'lexical'
import RemoteImageComponent from './RemoteImageComponent' import RemoteImageComponent from './RemoteImageComponent'
type SerializedRemoteImageNode = Spread< type SerializedRemoteImageNode = Spread<
@@ -75,8 +75,23 @@ export class RemoteImageNode extends DecoratorBlockNode {
return { element } return { element }
} }
decorate(): JSX.Element { decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element {
return <RemoteImageComponent node={this} src={this.__src} alt={this.__alt} /> const embedBlockTheme = config.theme.embedBlock || {}
const className = {
base: embedBlockTheme.base || '',
focus: embedBlockTheme.focus || '',
}
return (
<RemoteImageComponent
className={className}
format={this.__format}
nodeKey={this.getKey()}
node={this}
src={this.__src}
alt={this.__alt}
/>
)
} }
} }