diff --git a/apps/builder/src/features/theme/components/ChatSettings/AvatarForm.tsx b/apps/builder/src/features/theme/components/ChatSettings/AvatarForm.tsx index cfe5fbb02..8b7929a9c 100644 --- a/apps/builder/src/features/theme/components/ChatSettings/AvatarForm.tsx +++ b/apps/builder/src/features/theme/components/ChatSettings/AvatarForm.tsx @@ -5,15 +5,18 @@ import { HStack, Popover, PopoverContent, - PopoverTrigger, Stack, Switch, Image, Flex, Box, + Portal, + PopoverAnchor, + useDisclosure, } from '@chakra-ui/react' import { ImageUploadContent } from '@/components/ImageUploadContent' import { DefaultAvatar } from '../DefaultAvatar' +import { useOutsideClick } from '@/hooks/useOutsideClick' type Props = { uploadFilePath: string @@ -30,11 +33,21 @@ export const AvatarForm = ({ isDefaultCheck = false, onAvatarChange, }: Props) => { + const { isOpen, onOpen, onClose } = useDisclosure() const isChecked = avatarProps ? avatarProps.isEnabled : isDefaultCheck const handleOnCheck = () => onAvatarChange({ ...avatarProps, isEnabled: !isChecked }) const handleImageUrl = (url: string) => onAvatarChange({ isEnabled: isChecked, url }) + const popoverContainerRef = React.useRef(null) + + useOutsideClick({ + ref: popoverContainerRef, + handler: () => { + console.log('close') + onClose() + }, + }) const isDefaultAvatar = !avatarProps?.url || avatarProps.url.includes('{{') return ( @@ -47,36 +60,45 @@ export const AvatarForm = ({ {isChecked && ( - - - {isDefaultAvatar ? ( - - + + + {isDefaultAvatar ? ( + + + + ) : ( + Website image - - ) : ( - Website image - )} - - - - - + )} + + + e.stopPropagation()} + onPointerDown={(e) => e.stopPropagation()} + > + + + + + )} diff --git a/apps/docs/openapi/chat/_spec_.json b/apps/docs/openapi/chat/_spec_.json index e305d5702..4893921ad 100644 --- a/apps/docs/openapi/chat/_spec_.json +++ b/apps/docs/openapi/chat/_spec_.json @@ -2854,6 +2854,13 @@ "options": { "type": "object", "properties": { + "task": { + "type": "string", + "enum": [ + "Show widget", + "Close widget" + ] + }, "baseUrl": { "type": "string" }, diff --git a/package.json b/package.json index dcb425559..f3fc77f11 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "path": "node_modules/cz-emoji" } }, - "packageManager": "pnpm@7.28.0" + "packageManager": "pnpm@7.29.1" } diff --git a/packages/js/package.json b/packages/js/package.json index 5af150fed..ba4c36f9e 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -1,6 +1,6 @@ { "name": "@typebot.io/js", - "version": "0.0.23", + "version": "0.0.24", "description": "Javascript library to display typebots on your website", "type": "module", "main": "dist/index.js", diff --git a/packages/js/src/components/avatars/Avatar.tsx b/packages/js/src/components/avatars/Avatar.tsx index 398c0dc3e..4713788cf 100644 --- a/packages/js/src/components/avatars/Avatar.tsx +++ b/packages/js/src/components/avatars/Avatar.tsx @@ -1,10 +1,18 @@ import { isMobile } from '@/utils/isMobileSignal' -import { createSignal, Show } from 'solid-js' +import { createEffect, createSignal, Show } from 'solid-js' import { isNotEmpty } from 'utils' import { DefaultAvatar } from './DefaultAvatar' export const Avatar = (props: { initialAvatarSrc?: string }) => { - const [avatarSrc] = createSignal(props.initialAvatarSrc) + const [avatarSrc, setAvatarSrc] = createSignal(props.initialAvatarSrc) + + createEffect(() => { + if ( + avatarSrc()?.startsWith('{{') && + props.initialAvatarSrc?.startsWith('http') + ) + setAvatarSrc(props.initialAvatarSrc) + }) return (