Skip to content

Commit 8886167

Browse files
committed
fix: improve img load view
1 parent 02b18da commit 8886167

File tree

4 files changed

+37
-25
lines changed

4 files changed

+37
-25
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,6 @@
177177
"svgmoji": "^3.2.0",
178178
"void-elements": "^3.1.0",
179179
"yjs": "^13.6.14",
180-
"zens": "^0.0.32"
180+
"zens": "^0.0.33"
181181
}
182182
}

src/editor/extensions/Image/image-nodeview.tsx

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { NodeViewComponentProps } from '@remirror/react'
2-
import { Image, Popover } from 'zens'
2+
import { Image as ZensImage, Popover } from 'zens'
33
import type { PopoverStore } from 'zens'
44
import { ImageToolTips } from './image-tool-tips'
55
import { Resizable } from '@/editor/components/Resizable'
@@ -15,7 +15,6 @@ const warningFallBack =
1515

1616
export function ImageNodeView(props: ImageNodeViewProps) {
1717
const { node, selected, updateAttributes, handleViewImgSrcUrl } = props
18-
const [src, setSrc] = useState<string>('')
1918
const initRef = useRef<() => void>()
2019
const popoverStore = useRef<PopoverStore>()
2120
const [open, setOpen] = useState(selected)
@@ -27,30 +26,37 @@ export function ImageNodeView(props: ImageNodeViewProps) {
2726
setOpen(selected)
2827
}, [selected])
2928

30-
useEffect(() => {
31-
if (handleViewImgSrcUrl) {
32-
handleViewImgSrcUrl(node.attrs.src).then((newSrc) => {
33-
setSrc(newSrc)
34-
})
35-
} else {
36-
setSrc(node.attrs.src)
37-
}
38-
}, [handleViewImgSrcUrl, node.attrs.src])
39-
4029
const handleStoreChange = (store: PopoverStore) => (popoverStore.current = store)
4130

42-
const Main = src ? (
31+
const Main = (
4332
<Resizable controlInit={(init) => (initRef.current = init)} {...props}>
44-
<Image
45-
fallback={warningFallBack}
33+
<ZensImage
4634
onLoad={() => initRef.current?.()}
47-
preview={false}
35+
src={node.attrs.src}
36+
imgPromise={(src) => {
37+
return new Promise((resolve, reject) => {
38+
const makeImageLoad = (targetSrc: string) => {
39+
const img = new Image()
40+
img.src = targetSrc
41+
img.onload = () => {
42+
resolve(targetSrc)
43+
}
44+
img.onerror = () => {
45+
reject(warningFallBack)
46+
}
47+
}
48+
if (handleViewImgSrcUrl) {
49+
handleViewImgSrcUrl(node.attrs.src).then((newSrc) => {
50+
makeImageLoad(newSrc)
51+
})
52+
} else {
53+
makeImageLoad(node.attrs.src)
54+
}
55+
})
56+
}}
4857
{...node.attrs}
49-
src={src}
5058
/>
5159
</Resizable>
52-
) : (
53-
<Image src={warningFallBack} style={{ width: '80px', height: '80px' }} />
5460
)
5561

5662
if (!open) {
@@ -67,6 +73,8 @@ export function ImageNodeView(props: ImageNodeViewProps) {
6773
open={open}
6874
onStoreChange={handleStoreChange}
6975
toggleOnClick
70-
>{Main}</Popover>
76+
>
77+
{Main}
78+
</Popover>
7179
)
7280
}

src/playground/content.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ The world is almost ruined. None of the remaining <img src="https://www.gstatic
2222
console.log('Hello MarkFlowy')
2323
\`\`\`
2424
25+
- [ ] task 1
26+
- [ ] task 2
27+
- [x] task 3
28+
2529
`.trim(),
2630
].join("\n")
2731

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10300,10 +10300,10 @@ yocto-queue@^1.0.0:
1030010300
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
1030110301
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
1030210302

10303-
zens@^0.0.32:
10304-
version "0.0.32"
10305-
resolved "https://registry.yarnpkg.com/zens/-/zens-0.0.32.tgz#8b334e7a3fe78a36eecf3c594e780e41d5b45778"
10306-
integrity sha512-DNTuv/AeOnXNLlq4lSgTwPwRaiyVk27/qyVB5XPwZx2ucKAlv+xqJso/CTeYGNQfLfvoR57NqtagB3XKxVTqZg==
10303+
zens@^0.0.33:
10304+
version "0.0.33"
10305+
resolved "https://registry.yarnpkg.com/zens/-/zens-0.0.33.tgz#83ddbde88a008fdad320b2f63caeb872c611faaa"
10306+
integrity sha512-e83RZo2H0QYMVuHXotIevtlbxeyUANs2oYqHB1/ksFbfm7jTf+cQEIej9BRrS3F8z4aus33bpeUhnec10WoqRQ==
1030710307
dependencies:
1030810308
"@ant-design/icons" "^5.3.7"
1030910309
"@ariakit/react" "^0.4.5"

0 commit comments

Comments
 (0)