diff --git a/apps/builder/src/features/blocks/inputs/phone/phone.spec.ts b/apps/builder/src/features/blocks/inputs/phone/phone.spec.ts index 092df19f4..c1bf88faa 100644 --- a/apps/builder/src/features/blocks/inputs/phone/phone.spec.ts +++ b/apps/builder/src/features/blocks/inputs/phone/phone.spec.ts @@ -37,7 +37,7 @@ test.describe('Phone input block', () => { await page.click('text=Restart') await page.locator(`input[placeholder="+33 XX XX XX XX"]`).type('+33 6 73') - await expect(page.getByRole('combobox')).toHaveText(/🇫🇷.+/) + await expect(page.getByText('🇫🇷')).toBeVisible() await page.locator('button >> text="Go"').click() await expect(page.locator('text=Try again bro')).toBeVisible() await page diff --git a/apps/viewer/package.json b/apps/viewer/package.json index 18b1f7b3d..e05ccf3ea 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -23,11 +23,11 @@ "db": "workspace:*", "google-spreadsheet": "3.3.0", "got": "12.5.3", + "libphonenumber-js": "^1.10.21", "next": "13.1.6", "nextjs-cors": "^2.1.2", "nodemailer": "6.9.1", "openai": "^3.2.1", - "phone": "^3.1.34", "qs": "6.11.0", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/apps/viewer/src/features/blocks/inputs/phone/api/utils/formatPhoneNumber.ts b/apps/viewer/src/features/blocks/inputs/phone/api/utils/formatPhoneNumber.ts index 89844f49c..0f6366714 100644 --- a/apps/viewer/src/features/blocks/inputs/phone/api/utils/formatPhoneNumber.ts +++ b/apps/viewer/src/features/blocks/inputs/phone/api/utils/formatPhoneNumber.ts @@ -1,4 +1,4 @@ -import phone from 'phone' +import { parsePhoneNumber } from 'libphonenumber-js' export const formatPhoneNumber = (phoneNumber: string) => - phone(phoneNumber).phoneNumber + parsePhoneNumber(phoneNumber).formatInternational() diff --git a/apps/viewer/src/features/blocks/inputs/phone/api/utils/validatePhoneNumber.ts b/apps/viewer/src/features/blocks/inputs/phone/api/utils/validatePhoneNumber.ts index 4c78f9a03..3025bf28d 100644 --- a/apps/viewer/src/features/blocks/inputs/phone/api/utils/validatePhoneNumber.ts +++ b/apps/viewer/src/features/blocks/inputs/phone/api/utils/validatePhoneNumber.ts @@ -1,4 +1,4 @@ -import { phone } from 'phone' +import { isValidPhoneNumber } from 'libphonenumber-js' export const validatePhoneNumber = (phoneNumber: string) => - phone(phoneNumber).isValid + isValidPhoneNumber(phoneNumber) diff --git a/apps/viewer/src/features/chat/api/utils/continueBotFlow.ts b/apps/viewer/src/features/chat/api/utils/continueBotFlow.ts index a2c934611..a18898d26 100644 --- a/apps/viewer/src/features/chat/api/utils/continueBotFlow.ts +++ b/apps/viewer/src/features/chat/api/utils/continueBotFlow.ts @@ -50,13 +50,13 @@ export const continueBotFlow = message: 'Current block is not an input block', }) + if (reply && !isReplyValid(reply, block)) return parseRetryMessage(block) + const formattedReply = formatReply(reply, block.type) if (!formattedReply && !canSkip(block.type)) { return parseRetryMessage(block) } - if (formattedReply && !isReplyValid(formattedReply, block)) - return parseRetryMessage(block) const newSessionState = await processAndSaveAnswer( state, diff --git a/packages/js/package.json b/packages/js/package.json index 15e881758..f992cb829 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -1,6 +1,6 @@ { "name": "@typebot.io/js", - "version": "0.0.21", + "version": "0.0.22", "description": "Javascript library to display typebots on your website", "type": "module", "main": "dist/index.js", diff --git a/packages/js/src/components/icons/ChevronDownIcon.tsx b/packages/js/src/components/icons/ChevronDownIcon.tsx new file mode 100644 index 000000000..24fef0780 --- /dev/null +++ b/packages/js/src/components/icons/ChevronDownIcon.tsx @@ -0,0 +1,16 @@ +import { JSX } from 'solid-js/jsx-runtime' + +export const ChevronDownIcon = (props: JSX.SvgSVGAttributes) => ( + + + +) diff --git a/packages/js/src/features/blocks/inputs/phone/components/PhoneInput.tsx b/packages/js/src/features/blocks/inputs/phone/components/PhoneInput.tsx index d238594c0..aa91aecaf 100644 --- a/packages/js/src/features/blocks/inputs/phone/components/PhoneInput.tsx +++ b/packages/js/src/features/blocks/inputs/phone/components/PhoneInput.tsx @@ -1,4 +1,5 @@ import { ShortTextInput } from '@/components' +import { ChevronDownIcon } from '@/components/icons/ChevronDownIcon' import { SendButton } from '@/components/SendButton' import { InputSubmitContent } from '@/types' import { isMobile } from '@/utils/isMobileSignal' @@ -75,7 +76,13 @@ export const PhoneInput = (props: PhoneInputProps) => { const selectNewCountryCode = ( event: Event & { currentTarget: { value: string } } ) => { - setSelectedCountryCode(event.currentTarget.value) + const code = event.currentTarget.value + setSelectedCountryCode(code) + const dial_code = phoneCountries.find( + (country) => country.code === code + )?.dial_code + if (inputValue() === '' && dial_code) setInputValue(dial_code) + inputRef?.focus() } onMount(() => { @@ -91,30 +98,37 @@ export const PhoneInput = (props: PhoneInputProps) => { }} onKeyDown={submitWhenEnter} > -
- - {(country) => ( - - )} - - + + {(country) => ( + + )} + + +
+ =12'} - dev: false - /php-parser/3.1.3: resolution: {integrity: sha512-hPvBmnRYPqWEtMfIFOlyjQv1q75UUtxt4U+YscKIQViGmEE2Xa4BuS1B1/cZdjy7MVcwtnr0WkEsr915LgRKOw==} dev: true