2
0

feat(editor): Team workspaces

This commit is contained in:
Baptiste Arnaud
2022-05-13 15:22:44 -07:00
parent 6c2986590b
commit f0fdf08b00
132 changed files with 3354 additions and 1228 deletions

View File

@ -13,16 +13,17 @@ import { TrashIcon } from 'assets/icons'
import { UpgradeButton } from 'components/shared/buttons/UpgradeButton'
import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import { useUser } from 'contexts/UserContext'
import { useWorkspace } from 'contexts/WorkspaceContext'
import React from 'react'
import { parseDefaultPublicId } from 'services/typebots'
import { isFreePlan } from 'services/user'
import { isFreePlan } from 'services/workspace'
import { isDefined, isNotDefined } from 'utils'
import { CustomDomainsDropdown } from './customDomain/CustomDomainsDropdown'
import { EditableUrl } from './EditableUrl'
import { integrationsList } from './integrations/EmbedButton'
export const ShareContent = () => {
const { user } = useUser()
const { workspace } = useWorkspace()
const { typebot, updateOnBothTypebots } = useTypebot()
const toast = useToast({
position: 'top-right',
@ -83,7 +84,7 @@ export const ShareContent = () => {
/>
</HStack>
)}
{isFreePlan(user) ? (
{isFreePlan(workspace) ? (
<UpgradeButton colorScheme="gray">
<Text mr="2">Add my domain</Text>{' '}
<Tag colorScheme="orange">Pro</Tag>

View File

@ -23,7 +23,7 @@ const hostnameRegex =
/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/
type CustomDomainModalProps = {
userId: string
workspaceId: string
isOpen: boolean
onClose: () => void
domain?: string
@ -31,7 +31,7 @@ type CustomDomainModalProps = {
}
export const CustomDomainModal = ({
userId,
workspaceId,
isOpen,
onClose,
onNewDomain,
@ -67,7 +67,7 @@ export const CustomDomainModal = ({
const onAddDomainClick = async () => {
if (!hostnameRegex.test(inputValue)) return
setIsLoading(true)
const { error } = await createCustomDomain(userId, {
const { error } = await createCustomDomain(workspaceId, {
name: inputValue,
})
setIsLoading(false)

View File

@ -16,6 +16,7 @@ import React, { useState } from 'react'
import { useUser } from 'contexts/UserContext'
import { CustomDomainModal } from './CustomDomainModal'
import { deleteCustomDomain, useCustomDomains } from 'services/user'
import { useWorkspace } from 'contexts/WorkspaceContext'
type Props = Omit<MenuButtonProps, 'type'> & {
currentCustomDomain?: string
@ -29,26 +30,26 @@ export const CustomDomainsDropdown = ({
}: Props) => {
const [isDeleting, setIsDeleting] = useState('')
const { isOpen, onOpen, onClose } = useDisclosure()
const { user } = useUser()
const { customDomains, mutate } = useCustomDomains({
userId: user?.id,
onError: (error) =>
toast({ title: error.name, description: error.message }),
})
const { workspace } = useWorkspace()
const toast = useToast({
position: 'top-right',
status: 'error',
})
const { customDomains, mutate } = useCustomDomains({
workspaceId: workspace?.id,
onError: (error) =>
toast({ title: error.name, description: error.message }),
})
const handleMenuItemClick = (customDomain: string) => () =>
onCustomDomainSelect(customDomain)
const handleDeleteDomainClick =
(domainName: string) => async (e: React.MouseEvent) => {
if (!user) return
if (!workspace) return
e.stopPropagation()
setIsDeleting(domainName)
const { error } = await deleteCustomDomain(user.id, domainName)
const { error } = await deleteCustomDomain(workspace.id, domainName)
setIsDeleting('')
if (error) return toast({ title: error.name, description: error.message })
mutate({
@ -59,11 +60,11 @@ export const CustomDomainsDropdown = ({
}
const handleNewDomain = (domain: string) => {
if (!user) return
if (!workspace) return
mutate({
customDomains: [
...(customDomains ?? []),
{ name: domain, ownerId: user?.id },
{ name: domain, workspaceId: workspace?.id },
],
})
handleMenuItemClick(domain)()
@ -71,9 +72,9 @@ export const CustomDomainsDropdown = ({
return (
<Menu isLazy placement="bottom-start" matchWidth>
{user?.id && (
{workspace?.id && (
<CustomDomainModal
userId={user.id}
workspaceId={workspace.id}
isOpen={isOpen}
onClose={onClose}
onNewDomain={handleNewDomain}