1
- import { useRef , useState } from 'react'
1
+ import { useMemo , useRef , useState } from 'react'
2
2
3
3
import { ActionButton , Button , Checkbox , Input , Label , Tabs , TabsContent , TabsList , TabsTrigger } from '@/components'
4
4
import { Dialog , DialogContent , DialogTitle , DialogTrigger } from '@/components/ui/dialog'
5
5
import { ImageCropper } from '@/extensions/Image/components/ImageCropper'
6
6
import { useLocale } from '@/locales'
7
7
import { actionDialogImage , useDialogImage } from '@/extensions/Image/store'
8
+ import Image from '@/extensions/Image/Image'
8
9
9
10
function ActionImageButton ( props : any ) {
10
11
const { t } = useLocale ( )
@@ -16,15 +17,20 @@ function ActionImageButton(props: any) {
16
17
17
18
const [ imageInline , setImageInline ] = useState ( false )
18
19
20
+ const uploadOptions = useMemo ( ( ) => {
21
+ const uploadOptions = props . editor . extensionManager . extensions . find (
22
+ ( extension : any ) => extension . name === Image . name ,
23
+ ) ?. options
24
+
25
+ return uploadOptions
26
+ } , [ props . editor ] )
27
+
19
28
async function handleFile ( event : any ) {
20
29
const files = event ?. target ?. files
21
30
if ( ! props . editor || props . editor . isDestroyed || files . length === 0 ) {
22
31
return
23
32
}
24
33
const file = files [ 0 ]
25
- const uploadOptions = props . editor . extensionManager . extensions . find (
26
- ( extension : any ) => extension . name === 'image' ,
27
- ) ?. options
28
34
29
35
let src = ''
30
36
if ( uploadOptions . upload ) {
@@ -65,17 +71,29 @@ function ActionImageButton(props: any) {
65
71
< DialogContent >
66
72
< DialogTitle > { t ( 'editor.image.dialog.title' ) } </ DialogTitle >
67
73
68
- < Tabs defaultValue = "upload" activationMode = "manual" >
74
+ < Tabs
75
+ defaultValue = {
76
+ uploadOptions . resourceImage === 'both' || uploadOptions . resourceImage === 'upload'
77
+ ? 'upload'
78
+ : 'link'
79
+ }
80
+ activationMode = "manual"
81
+ >
69
82
< TabsList className = "richtext-grid richtext-w-full richtext-grid-cols-2" >
70
- < TabsTrigger value = "upload" >
71
- { t ( 'editor.image.dialog.tab.upload' ) }
72
- { ' ' }
73
- </ TabsTrigger >
74
- < TabsTrigger value = "link" >
75
- { ' ' }
76
- { t ( 'editor.image.dialog.tab.url' ) }
77
- { ' ' }
78
- </ TabsTrigger >
83
+ { uploadOptions . resourceImage === 'both' || uploadOptions . resourceImage === 'upload'
84
+ ? (
85
+ < TabsTrigger value = "upload" >
86
+ { t ( 'editor.image.dialog.tab.upload' ) }
87
+ </ TabsTrigger >
88
+ )
89
+ : < > </ > }
90
+ { uploadOptions . resourceImage === 'both' || uploadOptions . resourceImage === 'link'
91
+ ? (
92
+ < TabsTrigger value = "link" >
93
+ { t ( 'editor.image.dialog.tab.url' ) }
94
+ </ TabsTrigger >
95
+ )
96
+ : < > </ > }
79
97
</ TabsList >
80
98
81
99
< div className = "richtext-flex richtext-items-center richtext-gap-[4px] richtext-my-[10px]" >
@@ -115,7 +133,7 @@ function ActionImageButton(props: any) {
115
133
< div className = "richtext-flex richtext-items-center richtext-gap-2" >
116
134
< Input
117
135
type = "url"
118
- autoFocus = { true }
136
+ autoFocus
119
137
value = { link }
120
138
onChange = { e => setLink ( e . target . value ) }
121
139
required
0 commit comments