Link and remove image
This commit is contained in:
parent
d2b93502bc
commit
9ac774c0e7
@ -26,6 +26,7 @@ import ReactDatePicker from 'react-datepicker'
|
|||||||
import 'react-datepicker/dist/react-datepicker.css'
|
import 'react-datepicker/dist/react-datepicker.css'
|
||||||
import { debounce } from './use-debounce-callback'
|
import { debounce } from './use-debounce-callback'
|
||||||
import { ImageUpload } from './image'
|
import { ImageUpload } from './image'
|
||||||
|
import LinkIcon from '../svgs/link.svg'
|
||||||
|
|
||||||
export function SubmitButton ({
|
export function SubmitButton ({
|
||||||
children, variant, value, onClick, disabled, cost, ...props
|
children, variant, value, onClick, disabled, cost, ...props
|
||||||
@ -94,11 +95,19 @@ export function InputSkeleton ({ label, hint }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function ImageSelector ({ file, url }) {
|
function ImageSelector ({ file, url, text, setText, onRemove }) {
|
||||||
|
const onLink = () => {
|
||||||
|
let newText = text ? text + '\n\n' : ''
|
||||||
|
newText += url
|
||||||
|
setText(newText)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span className='d-flex align-items-center'>
|
<span className='d-flex align-items-center text-muted'>
|
||||||
<img className='me-1' src={window.URL.createObjectURL(file)} width={32} height={32} style={{ 'object-fit': 'contain' }} />
|
<img className='me-1' src={window.URL.createObjectURL(file)} width={32} height={32} style={{ objectFit: 'contain' }} />
|
||||||
<a href={url} target='_blank' rel='noreferrer'>{file.name}</a>
|
<a href={url} target='_blank' rel='noreferrer'>{file.name}</a>
|
||||||
|
<LinkIcon className='ms-auto me-1' width={18} height={18} onClick={onLink} style={{ cursor: 'pointer' }} />
|
||||||
|
<CloseIcon width={18} height={18} onClick={onRemove} style={{ cursor: 'pointer' }} />
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -221,6 +230,9 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
|||||||
}, [innerRef, helpers?.setValue, setSelectionRange, onKeyDown])
|
}, [innerRef, helpers?.setValue, setSelectionRange, onKeyDown])
|
||||||
|
|
||||||
const [uploadedImages, setUploadedImages] = useState([])
|
const [uploadedImages, setUploadedImages] = useState([])
|
||||||
|
const removeUploadedImage = useCallback((i) => {
|
||||||
|
setUploadedImages(prev => prev.slice(0, i).concat(prev.slice(i + 1)))
|
||||||
|
}, [setUploadedImages])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FormGroup label={label} className={groupClassName}>
|
<FormGroup label={label} className={groupClassName}>
|
||||||
@ -263,7 +275,7 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, setH
|
|||||||
/>)}
|
/>)}
|
||||||
</UserSuggest>
|
</UserSuggest>
|
||||||
{uploadedImages.map((props, i) => {
|
{uploadedImages.map((props, i) => {
|
||||||
return <ImageSelector {...props} key={i} />
|
return <ImageSelector key={i} {...props} text={meta.value} setText={helpers.setValue} onRemove={() => removeUploadedImage(i)} />
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
{tab !== 'write' &&
|
{tab !== 'write' &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user