feat(editor): ⚡️ Image picker and dynamic preview
This commit is contained in:
@ -1,16 +1,21 @@
|
||||
import { Box, Text, Image } from '@chakra-ui/react'
|
||||
import { ImageBubbleStep } from 'models'
|
||||
|
||||
export const ImageBubbleContent = ({ step }: { step: ImageBubbleStep }) =>
|
||||
!step.content?.url ? (
|
||||
export const ImageBubbleContent = ({ step }: { step: ImageBubbleStep }) => {
|
||||
const containsVariables =
|
||||
step.content?.url?.includes('{{') && step.content.url.includes('}}')
|
||||
return !step.content?.url ? (
|
||||
<Text color={'gray.500'}>Click to edit...</Text>
|
||||
) : (
|
||||
<Box w="full">
|
||||
<Image
|
||||
src={step.content?.url}
|
||||
alt="Step image"
|
||||
src={
|
||||
containsVariables ? '/images/dynamic-image.png' : step.content?.url
|
||||
}
|
||||
alt="Block image"
|
||||
rounded="md"
|
||||
objectFit="cover"
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { ChangeEvent, useEffect, useState } from 'react'
|
||||
import { ChangeEvent, useState } from 'react'
|
||||
import {
|
||||
Button,
|
||||
Flex,
|
||||
@ -13,10 +13,9 @@ import { SearchContextManager } from '@giphy/react-components'
|
||||
import { UploadButton } from '../buttons/UploadButton'
|
||||
import { GiphySearch } from './GiphySearch'
|
||||
import { useTypebot } from 'contexts/TypebotContext'
|
||||
import { useDebounce } from 'use-debounce'
|
||||
import { Input } from '../Textbox'
|
||||
import { BaseEmoji, emojiIndex } from 'emoji-mart'
|
||||
import { emojis } from './emojis'
|
||||
import { Input } from '../Textbox/Input'
|
||||
|
||||
type Props = {
|
||||
url?: string
|
||||
@ -123,26 +122,15 @@ const UploadFileContent = ({ onNewUrl }: ContentProps) => {
|
||||
)
|
||||
}
|
||||
|
||||
const EmbedLinkContent = ({ initialUrl, onNewUrl }: ContentProps) => {
|
||||
const [imageUrl, setImageUrl] = useState(initialUrl ?? '')
|
||||
const [debouncedImageUrl] = useDebounce(imageUrl, 100)
|
||||
|
||||
useEffect(() => {
|
||||
if (initialUrl === debouncedImageUrl) return
|
||||
onNewUrl(imageUrl)
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [debouncedImageUrl])
|
||||
|
||||
return (
|
||||
<Stack py="2">
|
||||
<Input
|
||||
placeholder={'Paste the image link...'}
|
||||
onChange={setImageUrl}
|
||||
defaultValue={imageUrl}
|
||||
/>
|
||||
</Stack>
|
||||
)
|
||||
}
|
||||
const EmbedLinkContent = ({ initialUrl, onNewUrl }: ContentProps) => (
|
||||
<Stack py="2">
|
||||
<Input
|
||||
placeholder={'Paste the image link...'}
|
||||
onChange={onNewUrl}
|
||||
defaultValue={initialUrl ?? ''}
|
||||
/>
|
||||
</Stack>
|
||||
)
|
||||
|
||||
const EmojiContent = ({
|
||||
onEmojiSelected,
|
||||
|
BIN
apps/builder/public/images/dynamic-image.png
Normal file
BIN
apps/builder/public/images/dynamic-image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
Reference in New Issue
Block a user