Show uploaded images below text input
This commit is contained in:
parent
7a83813c85
commit
d2b93502bc
@ -94,6 +94,15 @@ export function InputSkeleton ({ label, hint }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ImageSelector ({ file, url }) {
|
||||||
|
return (
|
||||||
|
<span className='d-flex align-items-center'>
|
||||||
|
<img className='me-1' src={window.URL.createObjectURL(file)} width={32} height={32} style={{ 'object-fit': 'contain' }} />
|
||||||
|
<a href={url} target='_blank' rel='noreferrer'>{file.name}</a>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULT_MENTION_INDICES = { start: -1, end: -1 }
|
const DEFAULT_MENTION_INDICES = { start: -1, end: -1 }
|
||||||
export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setHasImgLink, onKeyDown, innerRef, ...props }) {
|
export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setHasImgLink, onKeyDown, innerRef, ...props }) {
|
||||||
const [tab, setTab] = useState('write')
|
const [tab, setTab] = useState('write')
|
||||||
@ -211,6 +220,8 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
|||||||
}
|
}
|
||||||
}, [innerRef, helpers?.setValue, setSelectionRange, onKeyDown])
|
}, [innerRef, helpers?.setValue, setSelectionRange, onKeyDown])
|
||||||
|
|
||||||
|
const [uploadedImages, setUploadedImages] = useState([])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FormGroup label={label} className={groupClassName}>
|
<FormGroup label={label} className={groupClassName}>
|
||||||
<div className={`${styles.markdownInput} ${tab === 'write' ? styles.noTopLeftRadius : ''}`}>
|
<div className={`${styles.markdownInput} ${tab === 'write' ? styles.noTopLeftRadius : ''}`}>
|
||||||
@ -223,8 +234,8 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
|||||||
</Nav.Item>
|
</Nav.Item>
|
||||||
<span className='ms-auto text-muted d-flex align-items-center'>
|
<span className='ms-auto text-muted d-flex align-items-center'>
|
||||||
<ImageUpload
|
<ImageUpload
|
||||||
className='d-flex align-items-center me-1' onSuccess={(url) => {
|
className='d-flex align-items-center me-1' onSuccess={(file, url) => {
|
||||||
console.log('image uploaded to', url)
|
setUploadedImages(prev => [...prev, { file, url }])
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<AddImageIcon width={18} height={18} />
|
<AddImageIcon width={18} height={18} />
|
||||||
@ -251,6 +262,9 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
|||||||
onBlur={() => setTimeout(resetSuggestions, 100)}
|
onBlur={() => setTimeout(resetSuggestions, 100)}
|
||||||
/>)}
|
/>)}
|
||||||
</UserSuggest>
|
</UserSuggest>
|
||||||
|
{uploadedImages.map((props, i) => {
|
||||||
|
return <ImageSelector {...props} key={i} />
|
||||||
|
})}
|
||||||
</div>
|
</div>
|
||||||
{tab !== 'write' &&
|
{tab !== 'write' &&
|
||||||
<div className='form-group'>
|
<div className='form-group'>
|
||||||
|
@ -188,7 +188,7 @@ export function ImageUpload ({ children, className, onSelect, onSuccess }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const url = `https://${process.env.NEXT_PUBLIC_AWS_UPLOAD_BUCKET}.s3.amazonaws.com/${data.getSignedPOST.fields.key}`
|
const url = `https://${process.env.NEXT_PUBLIC_AWS_UPLOAD_BUCKET}.s3.amazonaws.com/${data.getSignedPOST.fields.key}`
|
||||||
onSuccess?.(url)
|
onSuccess?.(file, url)
|
||||||
}
|
}
|
||||||
}, [toaster, getSignedPOST])
|
}, [toaster, getSignedPOST])
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user