diff --git a/apps/builder/components/settings/MetadataForm.tsx b/apps/builder/components/settings/MetadataForm.tsx
index 2ce264da6..e64c82000 100644
--- a/apps/builder/components/settings/MetadataForm.tsx
+++ b/apps/builder/components/settings/MetadataForm.tsx
@@ -9,10 +9,7 @@ import {
PopoverContent,
} from '@chakra-ui/react'
import { ImageUploadContent } from 'components/shared/ImageUploadContent'
-import {
- InputWithVariableButton,
- TextareaWithVariableButton,
-} from 'components/shared/TextboxWithVariableButton'
+import { Input, Textarea } from 'components/shared/Textbox'
type Props = {
typebotName: string
@@ -89,9 +86,9 @@ export const MetadataForm = ({
Title:
-
@@ -99,9 +96,9 @@ export const MetadataForm = ({
Description:
-
diff --git a/apps/builder/components/shared/DebouncedInput.tsx b/apps/builder/components/shared/DebouncedInput.tsx
deleted file mode 100644
index 642603f2f..000000000
--- a/apps/builder/components/shared/DebouncedInput.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { Input, InputProps } from '@chakra-ui/react'
-import {
- ChangeEvent,
- ForwardedRef,
- forwardRef,
- useEffect,
- useState,
-} from 'react'
-import { useDebounce } from 'use-debounce'
-
-type Props = Omit & {
- initialValue: string
- onChange: (debouncedValue: string) => void
-}
-
-export const DebouncedInput = forwardRef(
- (
- { onChange, initialValue, ...props }: Props,
- ref: ForwardedRef
- ) => {
- const [currentValue, setCurrentValue] = useState(initialValue)
- const [debouncedValue] = useDebounce(
- currentValue,
- process.env.NEXT_PUBLIC_E2E_TEST ? 0 : 1000
- )
-
- useEffect(() => {
- if (debouncedValue === initialValue) return
- onChange(debouncedValue)
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [debouncedValue])
-
- const handleChange = (e: ChangeEvent) =>
- setCurrentValue(e.target.value)
-
- return (
-
- )
- }
-)
diff --git a/apps/builder/components/shared/DebouncedTextarea.tsx b/apps/builder/components/shared/DebouncedTextarea.tsx
deleted file mode 100644
index 074140e08..000000000
--- a/apps/builder/components/shared/DebouncedTextarea.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Textarea, TextareaProps } from '@chakra-ui/react'
-import { ChangeEvent, useEffect, useState } from 'react'
-import { useDebounce } from 'use-debounce'
-
-type Props = Omit & {
- initialValue: string
- onChange: (debouncedValue: string) => void
-}
-
-export const DebouncedTextarea = ({
- onChange,
- initialValue,
- ...props
-}: Props) => {
- const [currentValue, setCurrentValue] = useState(initialValue)
- const [debouncedValue] = useDebounce(
- currentValue,
- process.env.NEXT_PUBLIC_E2E_TEST ? 0 : 1000
- )
-
- useEffect(() => {
- if (debouncedValue === initialValue) return
- onChange(debouncedValue)
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [debouncedValue])
-
- const handleChange = (e: ChangeEvent) => {
- setCurrentValue(e.target.value)
- }
-
- return (
-
- )
-}
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/MediaBubblePopoverContent/VideoUploadContent.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/MediaBubblePopoverContent/VideoUploadContent.tsx
index 0693d62e0..baea9a3de 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/MediaBubblePopoverContent/VideoUploadContent.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/MediaBubblePopoverContent/VideoUploadContent.tsx
@@ -1,5 +1,5 @@
import { Stack, Text } from '@chakra-ui/react'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox/Input'
import { VideoBubbleContent, VideoBubbleContentType } from 'models'
import urlParser from 'js-video-url-parser/lib/base'
import 'js-video-url-parser/lib/provider/vimeo'
@@ -24,9 +24,9 @@ export const VideoUploadContent = ({ content, onSubmit }: Props) => {
}
return (
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ChoiceInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ChoiceInputSettingsBody.tsx
index 9c3c808e0..ea2ad7e0e 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ChoiceInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ChoiceInputSettingsBody.tsx
@@ -1,6 +1,6 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
import { SwitchWithLabel } from 'components/shared/SwitchWithLabel'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { ChoiceInputOptions, Variable } from 'models'
import React from 'react'
@@ -34,9 +34,9 @@ export const ChoiceInputSettingsBody = ({
Button label:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/CodeSettings.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/CodeSettings.tsx
index 14073d005..47dda78d5 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/CodeSettings.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/CodeSettings.tsx
@@ -1,6 +1,6 @@
import { FormLabel, Stack, Text } from '@chakra-ui/react'
import { CodeEditor } from 'components/shared/CodeEditor'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
+import { Input } from 'components/shared/Textbox'
import { CodeOptions } from 'models'
import React from 'react'
@@ -20,10 +20,11 @@ export const CodeSettings = ({ options, onOptionsChange }: Props) => {
Name:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ConditionSettingsBody/ComparisonsItem.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ConditionSettingsBody/ComparisonsItem.tsx
index 0802251cf..7f3f36ed5 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ConditionSettingsBody/ComparisonsItem.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/ConditionSettingsBody/ComparisonsItem.tsx
@@ -1,6 +1,6 @@
import { Stack } from '@chakra-ui/react'
import { DropdownList } from 'components/shared/DropdownList'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox/Input'
import { TableListItemProps } from 'components/shared/TableList'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { Comparison, Variable, ComparisonOperators } from 'models'
@@ -39,8 +39,8 @@ export const ComparisonItem = ({
placeholder="Select an operator"
/>
{item.comparisonOperator !== ComparisonOperators.IS_SET && (
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/DateInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/DateInputSettingsBody.tsx
index 09f73861e..47f9be93c 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/DateInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/DateInputSettingsBody.tsx
@@ -1,6 +1,6 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
import { SwitchWithLabel } from 'components/shared/SwitchWithLabel'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { DateInputOptions, Variable } from 'models'
import React from 'react'
@@ -46,9 +46,9 @@ export const DateInputSettingsBody = ({
From label:
-
@@ -58,9 +58,9 @@ export const DateInputSettingsBody = ({
To label:
-
@@ -69,9 +69,9 @@ export const DateInputSettingsBody = ({
Button label:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/EmailInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/EmailInputSettingsBody.tsx
index d7400cdb6..9f17bd52a 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/EmailInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/EmailInputSettingsBody.tsx
@@ -1,6 +1,5 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { EmailInputOptions, Variable } from 'models'
import React from 'react'
@@ -29,9 +28,9 @@ export const EmailInputSettingsBody = ({
Placeholder:
-
@@ -39,9 +38,9 @@ export const EmailInputSettingsBody = ({
Button label:
-
@@ -49,9 +48,9 @@ export const EmailInputSettingsBody = ({
Retry message:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleAnalyticsSettings.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleAnalyticsSettings.tsx
index c6613e3ae..22548951b 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleAnalyticsSettings.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleAnalyticsSettings.tsx
@@ -9,8 +9,7 @@ import {
Stack,
Tag,
} from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { GoogleAnalyticsOptions } from 'models'
import React from 'react'
@@ -47,9 +46,9 @@ export const GoogleAnalyticsSettings = ({
Tracking ID:
-
@@ -58,9 +57,9 @@ export const GoogleAnalyticsSettings = ({
Event category:
-
@@ -69,9 +68,9 @@ export const GoogleAnalyticsSettings = ({
Event action:
-
@@ -91,9 +90,9 @@ export const GoogleAnalyticsSettings = ({
Event label Optional:
-
@@ -102,9 +101,9 @@ export const GoogleAnalyticsSettings = ({
Event value Optional:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleSheetsSettingsBody/CellWithValueStack.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleSheetsSettingsBody/CellWithValueStack.tsx
index f222143aa..120f3bc54 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleSheetsSettingsBody/CellWithValueStack.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/GoogleSheetsSettingsBody/CellWithValueStack.tsx
@@ -1,6 +1,6 @@
import { Stack } from '@chakra-ui/react'
import { DropdownList } from 'components/shared/DropdownList'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox/Input'
import { TableListItemProps } from 'components/shared/TableList'
import { Cell } from 'models'
@@ -25,8 +25,8 @@ export const CellWithValueStack = ({
items={columns}
placeholder="Select a column"
/>
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/NumberInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/NumberInputSettingsBody.tsx
index 16d52c726..9b8aa3023 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/NumberInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/NumberInputSettingsBody.tsx
@@ -1,6 +1,6 @@
import { FormLabel, HStack, Stack } from '@chakra-ui/react'
import { SmartNumberInput } from 'components/shared/SmartNumberInput'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { NumberInputOptions, Variable } from 'models'
import React from 'react'
@@ -35,9 +35,9 @@ export const NumberInputSettingsBody = ({
Placeholder:
-
@@ -45,9 +45,9 @@ export const NumberInputSettingsBody = ({
Button label:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/PhoneNumberSettingsBody/PhoneNumberSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/PhoneNumberSettingsBody/PhoneNumberSettingsBody.tsx
index f1b136467..cff0d19d0 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/PhoneNumberSettingsBody/PhoneNumberSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/PhoneNumberSettingsBody/PhoneNumberSettingsBody.tsx
@@ -1,6 +1,5 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { PhoneNumberInputOptions, Variable } from 'models'
import React from 'react'
@@ -32,9 +31,9 @@ export const PhoneNumberSettingsBody = ({
Placeholder:
-
@@ -42,9 +41,9 @@ export const PhoneNumberSettingsBody = ({
Button label:
-
@@ -61,9 +60,9 @@ export const PhoneNumberSettingsBody = ({
Retry message:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/RedirectSettings.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/RedirectSettings.tsx
index e091572ba..83a7a25b9 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/RedirectSettings.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/RedirectSettings.tsx
@@ -1,6 +1,6 @@
import { FormLabel, Stack } from '@chakra-ui/react'
import { SwitchWithLabel } from 'components/shared/SwitchWithLabel'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { RedirectOptions } from 'models'
import React from 'react'
@@ -21,9 +21,9 @@ export const RedirectSettings = ({ options, onOptionsChange }: Props) => {
Url:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx
index e0f501508..5e00bcb41 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx
@@ -1,9 +1,6 @@
import { Stack, useDisclosure, Text } from '@chakra-ui/react'
import { CredentialsDropdown } from 'components/shared/CredentialsDropdown'
-import {
- InputWithVariableButton,
- TextareaWithVariableButton,
-} from 'components/shared/TextboxWithVariableButton'
+import { Input, Textarea } from 'components/shared/Textbox'
import { CredentialsType, SendEmailOptions } from 'models'
import React, { useState } from 'react'
import { SmtpConfigModal } from './SmtpConfigModal'
@@ -80,43 +77,43 @@ export const SendEmailSettings = ({ options, onOptionsChange }: Props) => {
To:
-
Cc:
-
Bcc:
-
Subject:
-
Body:
-
{
From email:
-
From name:
-
Host:
-
Username / Email:
-
Password:
-
{
Value / Expression:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/TextInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/TextInputSettingsBody.tsx
index f10ea247d..67a6c88b3 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/TextInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/TextInputSettingsBody.tsx
@@ -1,6 +1,6 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
import { SwitchWithLabel } from 'components/shared/SwitchWithLabel'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { TextInputOptions, Variable } from 'models'
import React from 'react'
@@ -35,9 +35,9 @@ export const TextInputSettingsBody = ({
Placeholder:
-
@@ -45,9 +45,9 @@ export const TextInputSettingsBody = ({
Button label:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/UrlInputSettingsBody.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/UrlInputSettingsBody.tsx
index 03c22d5ff..9ea4a0c62 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/UrlInputSettingsBody.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/UrlInputSettingsBody.tsx
@@ -1,6 +1,5 @@
import { FormLabel, Stack } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { UrlInputOptions, Variable } from 'models'
import React from 'react'
@@ -29,9 +28,9 @@ export const UrlInputSettingsBody = ({
Placeholder:
-
@@ -39,9 +38,9 @@ export const UrlInputSettingsBody = ({
Button label:
-
@@ -49,9 +48,9 @@ export const UrlInputSettingsBody = ({
Retry message:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/KeyValueInputs.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/KeyValueInputs.tsx
index 8af631cba..0767205c1 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/KeyValueInputs.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/KeyValueInputs.tsx
@@ -1,5 +1,5 @@
import { Stack, FormControl, FormLabel } from '@chakra-ui/react'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { TableListItemProps } from 'components/shared/TableList'
import { KeyValue } from 'models'
@@ -40,18 +40,18 @@ export const KeyValueInputs = ({
Key:
-
Value:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/VariableForTestInputs.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/VariableForTestInputs.tsx
index b564048b8..48936d68b 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/VariableForTestInputs.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/VariableForTestInputs.tsx
@@ -1,6 +1,6 @@
import { Stack, FormControl, FormLabel } from '@chakra-ui/react'
-import { DebouncedInput } from 'components/shared/DebouncedInput'
import { TableListItemProps } from 'components/shared/TableList'
+import { Input } from 'components/shared/Textbox'
import { VariableSearchInput } from 'components/shared/VariableSearchInput'
import { VariableForTest, Variable } from 'models'
@@ -26,9 +26,9 @@ export const VariableForTestInputs = ({
Test value:
-
diff --git a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/WebhookSettings.tsx b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/WebhookSettings.tsx
index e23009d16..ff0445a02 100644
--- a/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/WebhookSettings.tsx
+++ b/apps/builder/components/shared/Graph/Nodes/StepNode/SettingsPopoverContent/bodies/WebhookSettings/WebhookSettings.tsx
@@ -12,7 +12,7 @@ import {
useToast,
Text,
} from '@chakra-ui/react'
-import { InputWithVariableButton } from 'components/shared/TextboxWithVariableButton/InputWithVariableButton'
+import { Input } from 'components/shared/Textbox'
import { useTypebot } from 'contexts/TypebotContext'
import {
HttpMethod,
@@ -144,9 +144,9 @@ export const WebhookSettings = ({
if (!localWebhook) return
return (
-
{
return (
-
)
diff --git a/apps/builder/components/shared/Textbox/Input.tsx b/apps/builder/components/shared/Textbox/Input.tsx
new file mode 100644
index 000000000..40f8b686a
--- /dev/null
+++ b/apps/builder/components/shared/Textbox/Input.tsx
@@ -0,0 +1,7 @@
+import { Input as ChakraInput } from '@chakra-ui/react'
+import React from 'react'
+import { TextBox, TextBoxProps } from './TextBox'
+
+export const Input = (props: Omit) => (
+
+)
diff --git a/apps/builder/components/shared/TextboxWithVariableButton/TextboxWithVariableButton.tsx b/apps/builder/components/shared/Textbox/TextBox.tsx
similarity index 73%
rename from apps/builder/components/shared/TextboxWithVariableButton/TextboxWithVariableButton.tsx
rename to apps/builder/components/shared/Textbox/TextBox.tsx
index 81034fb10..e01dfbe67 100644
--- a/apps/builder/components/shared/TextboxWithVariableButton/TextboxWithVariableButton.tsx
+++ b/apps/builder/components/shared/Textbox/TextBox.tsx
@@ -12,38 +12,49 @@ import {
} from '@chakra-ui/react'
import { UserIcon } from 'assets/icons'
import { Variable } from 'models'
-import React, { useEffect, useRef, useState } from 'react'
-import { useDebounce } from 'use-debounce'
+import React, { ChangeEvent, useEffect, useRef, useState } from 'react'
+import { useDebouncedCallback } from 'use-debounce'
import { VariableSearchInput } from '../VariableSearchInput'
-export type TextBoxWithVariableButtonProps = {
- initialValue: string
+export type TextBoxProps = {
onChange: (value: string) => void
TextBox:
| ComponentWithAs<'textarea', TextareaProps>
| ComponentWithAs<'input', InputProps>
+ withVariableButton?: boolean
} & Omit
-export const TextBoxWithVariableButton = ({
- initialValue,
+export const TextBox = ({
onChange,
TextBox,
+ withVariableButton = true,
...props
-}: TextBoxWithVariableButtonProps) => {
+}: TextBoxProps) => {
const textBoxRef = useRef<(HTMLInputElement & HTMLTextAreaElement) | null>(
null
)
- const [value, setValue] = useState(initialValue)
- const [debouncedValue] = useDebounce(
- value,
+ const [carretPosition, setCarretPosition] = useState(0)
+ const [value, setValue] = useState(props.defaultValue)
+ const debounced = useDebouncedCallback(
+ (value) => {
+ onChange(value)
+ },
process.env.NEXT_PUBLIC_E2E_TEST ? 0 : 1000
)
- const [carretPosition, setCarretPosition] = useState(0)
- useEffect(() => {
- onChange(value)
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [debouncedValue])
+ useEffect(
+ () => () => {
+ debounced.flush()
+ },
+ [debounced]
+ )
+
+ const handleChange = (
+ e: ChangeEvent
+ ) => {
+ setValue(e.target.value)
+ debounced(e.target.value)
+ }
const handleVariableSelected = (variable?: Variable) => {
if (!textBoxRef.current || !variable) return
@@ -56,11 +67,12 @@ export const TextBoxWithVariableButton = ({
cursorPosition,
textBoxRef.current.value.length
)
- setValue(
+ const newValue =
textBeforeCursorPosition +
- `{{${variable.name}}}` +
- textAfterCursorPosition
- )
+ `{{${variable.name}}}` +
+ textAfterCursorPosition
+ setValue(newValue)
+ debounced(newValue)
textBoxRef.current.focus()
setTimeout(() => {
if (!textBoxRef.current) return
@@ -75,17 +87,24 @@ export const TextBoxWithVariableButton = ({
setCarretPosition(textBoxRef.current.selectionStart)
}
- const handleChange = (
- e: React.ChangeEvent
- ) => setValue(e.target.value)
-
+ if (!withVariableButton) {
+ return (
+
+ )
+ }
return (
) => (
+
+)
diff --git a/apps/builder/components/shared/Textbox/index.tsx b/apps/builder/components/shared/Textbox/index.tsx
new file mode 100644
index 000000000..e438e196a
--- /dev/null
+++ b/apps/builder/components/shared/Textbox/index.tsx
@@ -0,0 +1,2 @@
+export { Input } from './Input'
+export { Textarea } from './Textarea'
diff --git a/apps/builder/components/shared/TextboxWithVariableButton/InputWithVariableButton.tsx b/apps/builder/components/shared/TextboxWithVariableButton/InputWithVariableButton.tsx
deleted file mode 100644
index 9d1f63801..000000000
--- a/apps/builder/components/shared/TextboxWithVariableButton/InputWithVariableButton.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { Input } from '@chakra-ui/react'
-import React from 'react'
-import {
- TextBoxWithVariableButton,
- TextBoxWithVariableButtonProps,
-} from './TextboxWithVariableButton'
-
-export const InputWithVariableButton = (
- props: Omit
-) =>
diff --git a/apps/builder/components/shared/TextboxWithVariableButton/TextareaWithVariableButton.tsx b/apps/builder/components/shared/TextboxWithVariableButton/TextareaWithVariableButton.tsx
deleted file mode 100644
index 4bb9be196..000000000
--- a/apps/builder/components/shared/TextboxWithVariableButton/TextareaWithVariableButton.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { Textarea } from '@chakra-ui/react'
-import React from 'react'
-import {
- TextBoxWithVariableButton,
- TextBoxWithVariableButtonProps,
-} from './TextboxWithVariableButton'
-
-export const TextareaWithVariableButton = (
- props: Omit
-) =>
diff --git a/apps/builder/components/shared/TextboxWithVariableButton/index.tsx b/apps/builder/components/shared/TextboxWithVariableButton/index.tsx
deleted file mode 100644
index db443c541..000000000
--- a/apps/builder/components/shared/TextboxWithVariableButton/index.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-export { InputWithVariableButton } from './InputWithVariableButton'
-export { TextareaWithVariableButton } from './TextareaWithVariableButton'
diff --git a/apps/builder/services/utils/index.ts b/apps/builder/services/utils/index.ts
index ee0777f38..68167416c 100644
--- a/apps/builder/services/utils/index.ts
+++ b/apps/builder/services/utils/index.ts
@@ -1,2 +1,3 @@
export * from './utils'
export * from './useUndo'
+export * from './useRefState'
diff --git a/apps/builder/services/utils/useRefState.ts b/apps/builder/services/utils/useRefState.ts
new file mode 100644
index 000000000..975b66dcd
--- /dev/null
+++ b/apps/builder/services/utils/useRefState.ts
@@ -0,0 +1,10 @@
+import { useEffect, useRef, useState } from 'react'
+
+export const useRefState = (initialValue: string) => {
+ const [state, setState] = useState(initialValue)
+ const stateRef = useRef(state)
+ useEffect(() => {
+ stateRef.current = state
+ }, [state])
+ return [stateRef, setState]
+}