import { BubbleBlock, BubbleBlockType, Edge, EmailInputBlock, InputBlockType, PhoneNumberInputBlock, Block, UrlInputBlock, Variable, } from 'models' import { isPossiblePhoneNumber } from 'react-phone-number-input' import { isInputBlock } from 'utils' import { parseVariables } from './variable' const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ const urlRegex = /^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})$/ export const isInputValid = ( inputValue: string, type: InputBlockType ): boolean => { switch (type) { case InputBlockType.EMAIL: return emailRegex.test(inputValue) case InputBlockType.PHONE: return isPossiblePhoneNumber(inputValue) case InputBlockType.URL: return urlRegex.test(inputValue) } return true } export const blockCanBeRetried = ( block: Block ): block is EmailInputBlock | UrlInputBlock | PhoneNumberInputBlock => isInputBlock(block) && 'retryMessageContent' in block.options export const parseRetryBlock = ( block: EmailInputBlock | UrlInputBlock | PhoneNumberInputBlock, variables: Variable[], createEdge: (edge: Edge) => void ): BubbleBlock => { const content = parseVariables(variables)(block.options.retryMessageContent) const newBlockId = block.id + Math.random() * 1000 const newEdge: Edge = { id: (Math.random() * 1000).toString(), from: { blockId: newBlockId, groupId: block.groupId }, to: { groupId: block.groupId, blockId: block.id }, } createEdge(newEdge) return { groupId: block.groupId, id: newBlockId, type: BubbleBlockType.TEXT, content: { html: `