2
0
Files
bot/apps/builder/src/features/dashboard/components/DashboardHeader.tsx

136 lines
3.9 KiB
TypeScript
Raw Normal View History

2021-12-06 15:48:50 +01:00
import React from 'react'
import {
Menu,
MenuButton,
MenuList,
MenuItem,
Text,
HStack,
Flex,
SkeletonCircle,
2022-05-13 15:22:44 -07:00
Button,
useDisclosure,
2021-12-06 15:48:50 +01:00
} from '@chakra-ui/react'
2022-05-13 15:22:44 -07:00
import {
ChevronLeftIcon,
HardDriveIcon,
LogOutIcon,
PlusIcon,
SettingsIcon,
} from '@/components/icons'
2021-12-06 15:48:50 +01:00
import { signOut } from 'next-auth/react'
import { useUser } from '@/features/account'
import { useWorkspace } from '@/features/workspace'
import { isNotDefined } from 'utils'
2022-11-02 19:45:46 +01:00
import Link from 'next/link'
import { EmojiOrImageIcon } from '@/components/EmojiOrImageIcon'
import { TypebotLogo } from '@/components/TypebotLogo'
import { PlanTag } from '@/features/billing'
import { WorkspaceSettingsModal } from '@/features/workspace'
2021-12-06 15:48:50 +01:00
export const DashboardHeader = () => {
2021-12-27 15:59:32 +01:00
const { user } = useUser()
2021-12-06 15:48:50 +01:00
2022-05-13 15:22:44 -07:00
const { workspace, workspaces, switchWorkspace, createWorkspace } =
useWorkspace()
const { isOpen, onOpen, onClose } = useDisclosure()
2021-12-06 15:48:50 +01:00
const handleLogOut = () => {
2022-05-13 15:22:44 -07:00
localStorage.removeItem('workspaceId')
2021-12-06 15:48:50 +01:00
signOut()
}
2022-05-13 15:22:44 -07:00
const handleCreateNewWorkspace = () =>
createWorkspace(user?.name ?? undefined)
2021-12-06 15:48:50 +01:00
return (
<Flex w="full" borderBottomWidth="1px" justify="center">
<Flex
justify="space-between"
alignItems="center"
h="16"
2022-07-06 07:47:14 +02:00
maxW="1000px"
2021-12-06 15:48:50 +01:00
flex="1"
>
2022-11-02 19:45:46 +01:00
<Link href="/typebots" data-testid="typebot-logo">
2021-12-06 15:48:50 +01:00
<TypebotLogo w="30px" />
2022-11-02 19:45:46 +01:00
</Link>
2022-05-13 15:22:44 -07:00
<HStack>
{user && workspace && (
<WorkspaceSettingsModal
isOpen={isOpen}
onClose={onClose}
user={user}
workspace={workspace}
/>
)}
<Button
leftIcon={<SettingsIcon />}
onClick={onOpen}
isLoading={isNotDefined(workspace)}
>
2022-05-13 15:22:44 -07:00
Settings & Members
</Button>
<Menu placement="bottom-end">
<MenuButton as={Button} variant="outline" px="2">
<HStack>
<SkeletonCircle
isLoaded={workspace !== undefined}
alignItems="center"
display="flex"
boxSize="20px"
>
<EmojiOrImageIcon
boxSize="20px"
icon={workspace?.icon}
defaultIcon={HardDriveIcon}
/>
</SkeletonCircle>
{workspace && (
<>
<Text noOfLines={1} maxW="200px">
{workspace.name}
</Text>
<PlanTag plan={workspace.plan} />
</>
2022-05-13 15:22:44 -07:00
)}
<ChevronLeftIcon transform="rotate(-90deg)" />
</HStack>
</MenuButton>
<MenuList>
{workspaces
?.filter((w) => w.id !== workspace?.id)
.map((workspace) => (
<MenuItem
key={workspace.id}
onClick={() => switchWorkspace(workspace.id)}
>
<HStack>
<EmojiOrImageIcon
icon={workspace.icon}
boxSize="16px"
defaultIcon={HardDriveIcon}
/>
<Text>{workspace.name}</Text>
<PlanTag plan={workspace.plan} />
2022-05-13 15:22:44 -07:00
</HStack>
</MenuItem>
))}
<MenuItem onClick={handleCreateNewWorkspace} icon={<PlusIcon />}>
New workspace
</MenuItem>
<MenuItem
onClick={handleLogOut}
icon={<LogOutIcon />}
color="orange.500"
>
Log out
</MenuItem>
</MenuList>
</Menu>
</HStack>
2021-12-06 15:48:50 +01:00
</Flex>
</Flex>
)
}