2
0

feat(results): 🛂 Limit typebot branding

This commit is contained in:
Baptiste Arnaud
2022-02-13 07:09:22 +01:00
parent f46ba381ad
commit f57827c530
3 changed files with 46 additions and 5 deletions

View File

@ -13,7 +13,7 @@ export const SubscriptionTag = ({ plan }: { plan?: Plan }) => {
return <Tag>Offered</Tag> return <Tag>Offered</Tag>
} }
case Plan.PRO: { case Plan.PRO: {
return <Tag colorScheme="blue">Pro plan</Tag> return <Tag colorScheme="orange">Pro plan</Tag>
} }
default: { default: {
return <Tag>Free plan</Tag> return <Tag>Free plan</Tag>

View File

@ -1,6 +1,16 @@
import { Flex, FormLabel, Stack, Switch } from '@chakra-ui/react' import {
Flex,
FormLabel,
Stack,
Switch,
Tag,
useDisclosure,
} from '@chakra-ui/react'
import { UpgradeModal } from 'components/shared/modals/UpgradeModal.'
import { useUser } from 'contexts/UserContext'
import { GeneralSettings } from 'models' import { GeneralSettings } from 'models'
import React from 'react' import React from 'react'
import { isFreePlan } from 'services/user'
type Props = { type Props = {
generalSettings: GeneralSettings generalSettings: GeneralSettings
@ -11,16 +21,27 @@ export const GeneralSettingsForm = ({
generalSettings, generalSettings,
onGeneralSettingsChange, onGeneralSettingsChange,
}: Props) => { }: Props) => {
const handleSwitchChange = () => const { isOpen, onOpen, onClose } = useDisclosure()
const { user } = useUser()
const isUserFreePlan = isFreePlan(user)
const handleSwitchChange = () => {
if (generalSettings?.isBrandingEnabled && isUserFreePlan) return
onGeneralSettingsChange({ onGeneralSettingsChange({
isBrandingEnabled: !generalSettings?.isBrandingEnabled, isBrandingEnabled: !generalSettings?.isBrandingEnabled,
}) })
}
return ( return (
<Stack spacing={6}> <Stack spacing={6}>
<Flex justifyContent="space-between" align="center"> <UpgradeModal isOpen={isOpen} onClose={onClose} />
<Flex
justifyContent="space-between"
align="center"
onClick={isUserFreePlan ? onOpen : undefined}
>
<FormLabel htmlFor="branding" mb="0"> <FormLabel htmlFor="branding" mb="0">
Typebot.io branding Typebot.io branding{' '}
{isUserFreePlan && <Tag colorScheme="orange">Pro</Tag>}
</FormLabel> </FormLabel>
<Switch <Switch
id="branding" id="branding"

View File

@ -89,4 +89,24 @@ test.describe.parallel('Settings page', () => {
await page.fill('textarea#description', 'Lorem ipsum') await page.fill('textarea#description', 'Lorem ipsum')
}) })
}) })
test.describe('Free user', () => {
test.use({
storageState: path.join(__dirname, '../freeUser.json'),
})
test("can't remove branding", async ({ page }) => {
const typebotId = 'free-branding-typebot'
await importTypebotInDatabase(
path.join(__dirname, '../fixtures/typebots/theme.json'),
{
id: typebotId,
}
)
await page.goto(`/typebots/${typebotId}/settings`)
await page.click('button:has-text("General")')
await expect(page.locator('text=Pro')).toBeVisible()
await page.click('text=Typebot.io branding')
await expect(page.locator('text=Upgrade now')).toBeVisible()
})
})
}) })