2
0

(settings) Add a "disable responses saving" option

Closes #164
This commit is contained in:
Baptiste Arnaud
2022-11-16 16:17:42 +01:00
parent 0c3dcc522e
commit 473d315e0f
4 changed files with 31 additions and 2 deletions

View File

@ -46,6 +46,12 @@ export const GeneralSettingsForm = ({
isHideQueryParamsEnabled, isHideQueryParamsEnabled,
}) })
const handleDisableResultsSavingChange = (isResultSavingEnabled: boolean) =>
onGeneralSettingsChange({
...generalSettings,
isResultSavingEnabled: !isResultSavingEnabled,
})
return ( return (
<Stack spacing={6}> <Stack spacing={6}>
<ChangePlanModal <ChangePlanModal
@ -90,6 +96,16 @@ export const GeneralSettingsForm = ({
onCheckChange={handleHideQueryParamsChange} onCheckChange={handleHideQueryParamsChange}
moreInfoContent="If your URL contains query params, they will be automatically hidden when the bot starts." moreInfoContent="If your URL contains query params, they will be automatically hidden when the bot starts."
/> />
<SwitchWithLabel
label="Disable responses saving"
initialValue={
isDefined(generalSettings.isResultSavingEnabled)
? !generalSettings.isResultSavingEnabled
: false
}
onCheckChange={handleDisableResultsSavingChange}
moreInfoContent="Prevent responses from being saved on Typebot. Chats limit usage will still be tracked."
/>
</Stack> </Stack>
) )
} }

View File

@ -23,6 +23,11 @@ test.describe.parallel('Settings page', () => {
).toBeHidden() ).toBeHidden()
await page.click('text="Remember session"') await page.click('text="Remember session"')
await expect(
page.locator('input[type="checkbox"] >> nth=-3')
).toHaveAttribute('checked', '')
await page.click('text="Disable responses saving"')
await expect( await expect(
page.locator('input[type="checkbox"] >> nth=-1') page.locator('input[type="checkbox"] >> nth=-1')
).toHaveAttribute('checked', '') ).toHaveAttribute('checked', '')

View File

@ -99,6 +99,8 @@ export const TypebotPage = ({
const sendNewVariables = const sendNewVariables =
(resultId: string) => async (variables: VariableWithValue[]) => { (resultId: string) => async (variables: VariableWithValue[]) => {
if (publishedTypebot.settings.general.isResultSavingEnabled === false)
return
const { error } = await updateResultQuery(resultId, { variables }) const { error } = await updateResultQuery(resultId, { variables })
if (error) setError(error) if (error) setError(error)
} }
@ -107,8 +109,10 @@ export const TypebotPage = ({
answer: Answer & { uploadedFiles: boolean } answer: Answer & { uploadedFiles: boolean }
) => { ) => {
if (!resultId) return setError(new Error('Error: result was not created')) if (!resultId) return setError(new Error('Error: result was not created'))
if (publishedTypebot.settings.general.isResultSavingEnabled !== false) {
const { error } = await upsertAnswerQuery({ ...answer, resultId }) const { error } = await upsertAnswerQuery({ ...answer, resultId })
if (error) setError(error) if (error) setError(error)
}
if (chatStarted) return if (chatStarted) return
updateResultQuery(resultId, { updateResultQuery(resultId, {
hasStarted: true, hasStarted: true,
@ -116,6 +120,8 @@ export const TypebotPage = ({
} }
const handleCompleted = async () => { const handleCompleted = async () => {
if (publishedTypebot.settings.general.isResultSavingEnabled === false)
return
if (!resultId) return setError(new Error('Error: result was not created')) if (!resultId) return setError(new Error('Error: result was not created'))
const { error } = await updateResultQuery(resultId, { isCompleted: true }) const { error } = await updateResultQuery(resultId, { isCompleted: true })
if (error) setError(error) if (error) setError(error)

View File

@ -6,6 +6,7 @@ const generalSettings = z.object({
isInputPrefillEnabled: z.boolean().optional(), isInputPrefillEnabled: z.boolean().optional(),
isHideQueryParamsEnabled: z.boolean().optional(), isHideQueryParamsEnabled: z.boolean().optional(),
isNewResultOnRefreshEnabled: z.boolean().optional(), isNewResultOnRefreshEnabled: z.boolean().optional(),
isResultSavingEnabled: z.boolean().optional(),
}) })
const typingEmulation = z.object({ const typingEmulation = z.object({
@ -34,6 +35,7 @@ export const defaultSettings: Settings = {
isNewResultOnRefreshEnabled: false, isNewResultOnRefreshEnabled: false,
isInputPrefillEnabled: true, isInputPrefillEnabled: true,
isHideQueryParamsEnabled: true, isHideQueryParamsEnabled: true,
isResultSavingEnabled: true,
}, },
typingEmulation: { enabled: true, speed: 300, maxDelay: 1.5 }, typingEmulation: { enabled: true, speed: 300, maxDelay: 1.5 },
metadata: { metadata: {