refactor: enhance image uploading feedback in message editors with new class handling
This commit is contained in:
@@ -26,6 +26,7 @@ import {
|
|||||||
removeEditorImageByTitle,
|
removeEditorImageByTitle,
|
||||||
revokeEditorObjectUrl,
|
revokeEditorObjectUrl,
|
||||||
revokeEditorObjectUrls,
|
revokeEditorObjectUrls,
|
||||||
|
setEditorImageUploadingByTitle,
|
||||||
} from "@/lib/im-editor-image"
|
} from "@/lib/im-editor-image"
|
||||||
import { generateUUID } from "@/lib/utils"
|
import { generateUUID } from "@/lib/utils"
|
||||||
|
|
||||||
@@ -153,7 +154,7 @@ export function ImMessageEditor({
|
|||||||
editorProps: {
|
editorProps: {
|
||||||
attributes: {
|
attributes: {
|
||||||
class:
|
class:
|
||||||
"h-full min-h-12 max-h-[20vh] overflow-y-auto px-1.5 py-1 text-sm leading-6 text-foreground outline-none sm:max-h-none [&_.ProseMirror-focused]:outline-none [&_p]:m-0 [&_p+img]:mt-2 [&_img]:my-2 [&_img]:max-h-64 [&_img]:rounded-md [&_img]:object-contain [&_p.is-editor-empty:first-child]:before:text-muted-foreground",
|
"h-full min-h-12 max-h-[20vh] overflow-y-auto px-1.5 py-1 text-sm leading-6 text-foreground outline-none sm:max-h-none [&_.ProseMirror-focused]:outline-none [&_p]:m-0 [&_p+img]:mt-2 [&_img]:my-2 [&_img]:max-h-64 [&_img]:rounded-md [&_img]:object-contain [&_img.cs-agent-editor-image-uploading]:animate-pulse [&_img.cs-agent-editor-image-uploading]:opacity-55 [&_img.cs-agent-editor-image-uploading]:ring-2 [&_img.cs-agent-editor-image-uploading]:ring-primary/35 [&_p.is-editor-empty:first-child]:before:text-muted-foreground",
|
||||||
},
|
},
|
||||||
handleKeyDown: (_view, event) => {
|
handleKeyDown: (_view, event) => {
|
||||||
if (event.key === "Enter" && !event.shiftKey) {
|
if (event.key === "Enter" && !event.shiftKey) {
|
||||||
@@ -246,6 +247,7 @@ export function ImMessageEditor({
|
|||||||
title: placeholderId,
|
title: placeholderId,
|
||||||
})
|
})
|
||||||
.run()
|
.run()
|
||||||
|
setEditorImageUploadingByTitle(editor, placeholderId)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const uploaded = await onUploadImageRef.current(file)
|
const uploaded = await onUploadImageRef.current(file)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
removeEditorImageByTitle,
|
removeEditorImageByTitle,
|
||||||
revokeEditorObjectUrl,
|
revokeEditorObjectUrl,
|
||||||
revokeEditorObjectUrls,
|
revokeEditorObjectUrls,
|
||||||
|
setEditorImageUploadingByTitle,
|
||||||
} from "@/lib/im-editor-image"
|
} from "@/lib/im-editor-image"
|
||||||
import { generateUUID } from "@/lib/utils"
|
import { generateUUID } from "@/lib/utils"
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ export function KefuMessageEditor({
|
|||||||
editorProps: {
|
editorProps: {
|
||||||
attributes: {
|
attributes: {
|
||||||
class:
|
class:
|
||||||
"cs-agent-scrollbar min-h-12 max-h-40 overflow-y-auto px-1.5 py-1 text-sm leading-6 text-foreground outline-none [&_p]:m-0 [&_p+*]:mt-2 [&_img]:my-2 [&_img]:max-h-64 [&_img]:rounded-lg [&_img]:object-contain",
|
"cs-agent-scrollbar min-h-12 max-h-40 overflow-y-auto px-1.5 py-1 text-sm leading-6 text-foreground outline-none [&_p]:m-0 [&_p+*]:mt-2 [&_img]:my-2 [&_img]:max-h-64 [&_img]:rounded-lg [&_img]:object-contain [&_img.cs-agent-editor-image-uploading]:animate-pulse [&_img.cs-agent-editor-image-uploading]:opacity-55 [&_img.cs-agent-editor-image-uploading]:ring-2 [&_img.cs-agent-editor-image-uploading]:ring-primary/35",
|
||||||
},
|
},
|
||||||
handleKeyDown: (_view, event) => {
|
handleKeyDown: (_view, event) => {
|
||||||
if (event.key === "Enter" && !event.shiftKey) {
|
if (event.key === "Enter" && !event.shiftKey) {
|
||||||
@@ -208,6 +209,7 @@ export function KefuMessageEditor({
|
|||||||
title: placeholderId,
|
title: placeholderId,
|
||||||
})
|
})
|
||||||
.run()
|
.run()
|
||||||
|
setEditorImageUploadingByTitle(editor, placeholderId)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setLocalUploading(true)
|
setLocalUploading(true)
|
||||||
|
|||||||
@@ -40,9 +40,20 @@ export function markEditorImageUploadedByTitle(
|
|||||||
image.setAttribute("data-provider", uploaded.provider)
|
image.setAttribute("data-provider", uploaded.provider)
|
||||||
image.setAttribute("data-storage-key", uploaded.storageKey)
|
image.setAttribute("data-storage-key", uploaded.storageKey)
|
||||||
image.setAttribute("alt", uploaded.filename || image.getAttribute("alt") || "image")
|
image.setAttribute("alt", uploaded.filename || image.getAttribute("alt") || "image")
|
||||||
|
image.classList.remove("cs-agent-editor-image-uploading")
|
||||||
|
image.removeAttribute("data-uploading")
|
||||||
image.removeAttribute("title")
|
image.removeAttribute("title")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setEditorImageUploadingByTitle(editor: Editor, title: string) {
|
||||||
|
const image = findEditorImageElementByTitle(editor, title)
|
||||||
|
if (!image) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
image.classList.add("cs-agent-editor-image-uploading")
|
||||||
|
image.setAttribute("data-uploading", "true")
|
||||||
|
}
|
||||||
|
|
||||||
export function buildSendableEditorHTML(
|
export function buildSendableEditorHTML(
|
||||||
html: string,
|
html: string,
|
||||||
uploadedImages?: UploadedEditorImageMap
|
uploadedImages?: UploadedEditorImageMap
|
||||||
|
|||||||
Reference in New Issue
Block a user