11import type { EmailBlock , EmailStyle } from "@/types/email-editor" ;
2- import type { ImageBlockSettings } from "./types" ;
2+ import type { ImageBlockSettings , Uploader , UploadedImage } from "./types" ;
33import { SettingsInput } from "@/components/settings/settings-input" ;
44import { SettingsSelect } from "@/components/settings/settings-select" ;
55import { SettingsColorPicker } from "@/components/settings/settings-color-picker" ;
@@ -8,16 +8,18 @@ import { SettingsSection } from "@/components/settings/settings-section";
88import { Button } from "@/components/ui/button" ;
99import { Upload } from "lucide-react" ;
1010
11- interface ImageSettingsProps {
11+ export interface ImageSettingsProps {
1212 block : Required < EmailBlock > & { settings : ImageBlockSettings } ;
1313 style ?: EmailStyle ;
1414 updateBlock : ( id : string , content : Partial < EmailBlock > ) => void ;
15+ uploader ?: Uploader ;
1516}
1617
1718export function ImageSettings ( {
1819 block,
1920 style,
2021 updateBlock,
22+ uploader : UploaderComponent ,
2123} : ImageSettingsProps ) {
2224 const handleSettingChange = ( key : string , value : any ) => {
2325 updateBlock ( block . id , {
@@ -35,6 +37,15 @@ export function ImageSettings({
3537 }
3638 } ;
3739
40+ const handleUploadedImageChange = ( image : UploadedImage ) => {
41+ updateBlock ( block . id , {
42+ settings : {
43+ ...block . settings ,
44+ ...image ,
45+ } ,
46+ } ) ;
47+ } ;
48+
3849 // Helper function to convert px string to number
3950 const pxToNumber = (
4051 value : string | undefined ,
@@ -49,6 +60,40 @@ export function ImageSettings({
4960 const borderRadius = pxToNumber ( block . settings . borderRadius , 0 ) ;
5061 const borderWidth = pxToNumber ( block . settings . borderWidth , 0 ) ;
5162
63+ const uploadButton = (
64+ < Button
65+ type = "button"
66+ variant = "outline"
67+ size = "icon"
68+ onClick = {
69+ UploaderComponent
70+ ? undefined
71+ : ( event ) => {
72+ event . preventDefault ( ) ;
73+ handleImageUpload ( ) ;
74+ }
75+ }
76+ title = "Browse for image"
77+ >
78+ < Upload className = "h-4 w-4" />
79+ </ Button >
80+ ) ;
81+
82+ let uploadControl = uploadButton ;
83+ if ( UploaderComponent ) {
84+ uploadControl = (
85+ < UploaderComponent
86+ value = { {
87+ ...block . settings ,
88+ src : block . settings . src || "" ,
89+ } }
90+ onChange = { handleUploadedImageChange }
91+ >
92+ { uploadButton }
93+ </ UploaderComponent >
94+ ) ;
95+ }
96+
5297 // Sample images
5398 const sampleImages = [
5499 "https://images.unsplash.com/photo-1557804506-669a67965ba0?w=400&h=300&fit=crop" ,
@@ -112,18 +157,7 @@ export function ImageSettings({
112157 placeholder = "https://example.com/image.jpg"
113158 className = "flex-1"
114159 />
115- < Button
116- type = "button"
117- variant = "outline"
118- size = "icon"
119- onClick = { ( e ) => {
120- e . preventDefault ( ) ;
121- handleImageUpload ( ) ;
122- } }
123- title = "Browse for image"
124- >
125- < Upload className = "h-4 w-4" />
126- </ Button >
160+ { uploadControl }
127161 </ div >
128162 </ div >
129163
0 commit comments