♻️ (builder) Remove barrel export and flatten folder arch
This commit is contained in:
@@ -6,13 +6,14 @@ import {
|
||||
IntegrationBlockType,
|
||||
LogicBlockType,
|
||||
} from '@typebot.io/schemas'
|
||||
import { useBlockDnd } from '@/features/graph'
|
||||
import { useBlockDnd } from '@/features/graph/providers/GraphDndProvider'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { BlockIcon } from './BlockIcon'
|
||||
import { isFreePlan, LockTag } from '@/features/billing'
|
||||
import { isFreePlan } from '@/features/billing/helpers/isFreePlan'
|
||||
import { Plan } from '@typebot.io/prisma'
|
||||
import { useWorkspace } from '@/features/workspace'
|
||||
import { useWorkspace } from '@/features/workspace/WorkspaceProvider'
|
||||
import { BlockLabel } from './BlockLabel'
|
||||
import { LockTag } from '@/features/billing/components/LockTag'
|
||||
|
||||
type Props = {
|
||||
type: DraggableBlockType
|
||||
@@ -7,38 +7,36 @@ import {
|
||||
BlockType,
|
||||
} from '@typebot.io/schemas'
|
||||
import React from 'react'
|
||||
import { TextBubbleIcon } from '@/features/blocks/bubbles/textBubble'
|
||||
import { ImageBubbleIcon } from '@/features/blocks/bubbles/image'
|
||||
import { VideoBubbleIcon } from '@/features/blocks/bubbles/video'
|
||||
import { ChatwootLogo } from '@/features/blocks/integrations/chatwoot'
|
||||
import { FlagIcon } from '@/components/icons'
|
||||
import { SendEmailIcon } from '@/features/blocks/integrations/sendEmail'
|
||||
import { PabblyConnectLogo } from '@/features/blocks/integrations/pabbly'
|
||||
import { MakeComLogo } from '@/features/blocks/integrations/makeCom'
|
||||
import { ZapierLogo } from '@/features/blocks/integrations/zapier'
|
||||
import { WebhookIcon } from '@/features/blocks/integrations/webhook'
|
||||
import { GoogleSheetsLogo } from '@/features/blocks/integrations/googleSheets'
|
||||
import { TypebotLinkIcon } from '@/features/blocks/logic/typebotLink'
|
||||
import { RedirectIcon } from '@/features/blocks/logic/redirect'
|
||||
import { ConditionIcon } from '@/features/blocks/logic/condition'
|
||||
import { SetVariableIcon } from '@/features/blocks/logic/setVariable'
|
||||
import { FileInputIcon } from '@/features/blocks/inputs/fileUpload'
|
||||
import { RatingInputIcon } from '@/features/blocks/inputs/rating'
|
||||
import { PaymentInputIcon } from '@/features/blocks/inputs/payment'
|
||||
import { ButtonsInputIcon } from '@/features/blocks/inputs/buttons'
|
||||
import { PhoneInputIcon } from '@/features/blocks/inputs/phone'
|
||||
import { DateInputIcon } from '@/features/blocks/inputs/date'
|
||||
import { UrlInputIcon } from '@/features/blocks/inputs/url'
|
||||
import { EmailInputIcon } from '@/features/blocks/inputs/emailInput'
|
||||
import { NumberInputIcon } from '@/features/blocks/inputs/number'
|
||||
import { TextInputIcon } from '@/features/blocks/inputs/textInput'
|
||||
import { EmbedBubbleIcon } from '@/features/blocks/bubbles/embed'
|
||||
import { GoogleAnalyticsLogo } from '@/features/blocks/integrations/googleAnalytics'
|
||||
import { AudioBubbleIcon } from '@/features/blocks/bubbles/audio'
|
||||
import { FlagIcon, SendEmailIcon, WebhookIcon } from '@/components/icons'
|
||||
import { WaitIcon } from '@/features/blocks/logic/wait/components/WaitIcon'
|
||||
import { ScriptIcon } from '@/features/blocks/logic/script/components/ScriptIcon'
|
||||
import { JumpIcon } from '@/features/blocks/logic/jump/components/JumpIcon'
|
||||
import { OpenAILogo } from '@/features/blocks/integrations/openai/components/OpenAILogo'
|
||||
import { AudioBubbleIcon } from '@/features/blocks/bubbles/audio/components/AudioBubbleIcon'
|
||||
import { EmbedBubbleIcon } from '@/features/blocks/bubbles/embed/components/EmbedBubbleIcon'
|
||||
import { ImageBubbleIcon } from '@/features/blocks/bubbles/image/components/ImageBubbleIcon'
|
||||
import { TextBubbleIcon } from '@/features/blocks/bubbles/textBubble/components/TextBubbleIcon'
|
||||
import { VideoBubbleIcon } from '@/features/blocks/bubbles/video/components/VideoBubbleIcon'
|
||||
import { ButtonsInputIcon } from '@/features/blocks/inputs/buttons/components/ButtonsIcon'
|
||||
import { DateInputIcon } from '@/features/blocks/inputs/date/components/DateInputIcon'
|
||||
import { EmailInputIcon } from '@/features/blocks/inputs/emailInput/components/EmailInputIcon'
|
||||
import { FileInputIcon } from '@/features/blocks/inputs/fileUpload/components/FileInputIcon'
|
||||
import { NumberInputIcon } from '@/features/blocks/inputs/number/components/NumberInputIcon'
|
||||
import { PaymentInputIcon } from '@/features/blocks/inputs/payment/components/PaymentInputIcon'
|
||||
import { PhoneInputIcon } from '@/features/blocks/inputs/phone/components/PhoneInputIcon'
|
||||
import { RatingInputIcon } from '@/features/blocks/inputs/rating/components/RatingInputIcon'
|
||||
import { TextInputIcon } from '@/features/blocks/inputs/textInput/components/TextInputIcon'
|
||||
import { UrlInputIcon } from '@/features/blocks/inputs/url/components/UrlInputIcon'
|
||||
import { ChatwootLogo } from '@/features/blocks/integrations/chatwoot/components/ChatwootLogo'
|
||||
import { GoogleAnalyticsLogo } from '@/features/blocks/integrations/googleAnalytics/components/GoogleAnalyticsLogo'
|
||||
import { GoogleSheetsLogo } from '@/features/blocks/integrations/googleSheets/components/GoogleSheetsLogo'
|
||||
import { MakeComLogo } from '@/features/blocks/integrations/makeCom/components/MakeComLogo'
|
||||
import { PabblyConnectLogo } from '@/features/blocks/integrations/pabbly/components/PabblyConnectLogo'
|
||||
import { ZapierLogo } from '@/features/blocks/integrations/zapier/components/ZapierLogo'
|
||||
import { ConditionIcon } from '@/features/blocks/logic/condition/components/ConditionIcon'
|
||||
import { RedirectIcon } from '@/features/blocks/logic/redirect/components/RedirectIcon'
|
||||
import { SetVariableIcon } from '@/features/blocks/logic/setVariable/components/SetVariableIcon'
|
||||
import { TypebotLinkIcon } from '@/features/blocks/logic/typebotLink/components/TypebotLinkIcon'
|
||||
|
||||
type BlockIconProps = { type: BlockType } & IconProps
|
||||
|
||||
@@ -17,12 +17,12 @@ import {
|
||||
IntegrationBlockType,
|
||||
LogicBlockType,
|
||||
} from '@typebot.io/schemas'
|
||||
import { useBlockDnd } from '@/features/graph'
|
||||
import { useBlockDnd } from '@/features/graph/providers/GraphDndProvider'
|
||||
import React, { useState } from 'react'
|
||||
import { BlockCard } from './BlockCard'
|
||||
import { LockedIcon, UnlockedIcon } from '@/components/icons'
|
||||
import { headerHeight } from '../../constants'
|
||||
import { BlockCardOverlay } from './BlockCardOverlay'
|
||||
import { headerHeight } from '../constants'
|
||||
|
||||
export const BlocksSideBar = () => {
|
||||
const { setDraggedBlockType, draggedBlockType } = useBlockDnd()
|
||||
@@ -1 +0,0 @@
|
||||
export { BlocksSideBar } from './BlocksSideBar'
|
||||
@@ -16,12 +16,12 @@ import {
|
||||
SettingsIcon,
|
||||
} from '@/components/icons'
|
||||
import { useTypebot } from '../providers/TypebotProvider'
|
||||
import { useUser } from '@/features/account'
|
||||
import { useUser } from '@/features/account/hooks/useUser'
|
||||
import { useRouter } from 'next/router'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { isNotDefined } from '@typebot.io/lib'
|
||||
import { EditorSettingsModal } from './EditorSettingsModal'
|
||||
import { parseDefaultPublicId } from '@/features/publish'
|
||||
import { parseDefaultPublicId } from '@/features/publish/helpers/parseDefaultPublicId'
|
||||
|
||||
export const BoardMenuButton = (props: FlexProps) => {
|
||||
const { query } = useRouter()
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
import { Seo } from '@/components/Seo'
|
||||
import {
|
||||
Graph,
|
||||
GraphDndProvider,
|
||||
GraphProvider,
|
||||
GroupsCoordinatesProvider,
|
||||
} from '@/features/graph'
|
||||
import { Flex, Spinner, useColorModeValue } from '@chakra-ui/react'
|
||||
import {
|
||||
EditorProvider,
|
||||
@@ -17,6 +11,10 @@ import { BoardMenuButton } from './BoardMenuButton'
|
||||
import { GettingStartedModal } from './GettingStartedModal'
|
||||
import { PreviewDrawer } from '@/features/preview/components/PreviewDrawer'
|
||||
import { TypebotHeader } from './TypebotHeader'
|
||||
import { Graph } from '@/features/graph/components/Graph'
|
||||
import { GraphDndProvider } from '@/features/graph/providers/GraphDndProvider'
|
||||
import { GraphProvider } from '@/features/graph/providers/GraphProvider'
|
||||
import { GroupsCoordinatesProvider } from '@/features/graph/providers/GroupsCoordinateProvider'
|
||||
|
||||
export const EditorPage = () => {
|
||||
const { typebot, isReadOnly } = useTypebot()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { UserPreferencesForm } from '@/features/account'
|
||||
import { UserPreferencesForm } from '@/features/account/components/UserPreferencesForm'
|
||||
import {
|
||||
Modal,
|
||||
ModalBody,
|
||||
|
||||
@@ -14,21 +14,21 @@ import {
|
||||
RedoIcon,
|
||||
UndoIcon,
|
||||
} from '@/components/icons'
|
||||
import { RightPanel, useEditor } from '../../providers/EditorProvider'
|
||||
import { useTypebot } from '../../providers/TypebotProvider'
|
||||
import { useRouter } from 'next/router'
|
||||
import React, { useState } from 'react'
|
||||
import { isDefined, isNotDefined } from '@typebot.io/lib'
|
||||
import { EditableTypebotName } from './EditableTypebotName'
|
||||
import { open as openSupportBubble } from '@typebot.io/js'
|
||||
import Link from 'next/link'
|
||||
import { isCloudProdInstance } from '@/utils/helpers'
|
||||
import { headerHeight } from '../../constants'
|
||||
import { isCloudProdInstance } from '@/helpers/isCloudProdInstance'
|
||||
import { EditableEmojiOrImageIcon } from '@/components/EditableEmojiOrImageIcon'
|
||||
import { PublishButton } from '@/features/publish'
|
||||
import { CollaborationMenuButton } from '@/features/collaboration'
|
||||
import { useUndoShortcut } from '@/hooks/useUndoShortcut'
|
||||
import { useDebouncedCallback } from 'use-debounce'
|
||||
import { CollaborationMenuButton } from '@/features/collaboration/components/CollaborationMenuButton'
|
||||
import { PublishButton } from '@/features/publish/components/PublishButton'
|
||||
import { headerHeight } from '../constants'
|
||||
import { RightPanel, useEditor } from '../providers/EditorProvider'
|
||||
import { useTypebot } from '../providers/TypebotProvider'
|
||||
|
||||
export const TypebotHeader = () => {
|
||||
const router = useRouter()
|
||||
@@ -1 +0,0 @@
|
||||
export * from './TypebotHeader'
|
||||
@@ -1,6 +0,0 @@
|
||||
export { TypebotProvider, useTypebot } from './providers/TypebotProvider'
|
||||
export { TypebotHeader } from './components/TypebotHeader'
|
||||
export { EditorPage } from './components/EditorPage'
|
||||
export { headerHeight } from './constants'
|
||||
export { BlockIcon } from './components/BlocksSideBar/BlockIcon'
|
||||
export { RightPanel, useEditor } from './providers/EditorProvider'
|
||||
@@ -18,34 +18,30 @@ import {
|
||||
useState,
|
||||
} from 'react'
|
||||
import { isDefined, omit } from '@typebot.io/lib'
|
||||
import { edgesAction, EdgesActions } from './actions/edges'
|
||||
import { itemsAction, ItemsActions } from './actions/items'
|
||||
import { GroupsActions, groupsActions } from './actions/groups'
|
||||
import { blocksAction, BlocksActions } from './actions/blocks'
|
||||
import { variablesAction, VariablesActions } from './actions/variables'
|
||||
import { edgesAction, EdgesActions } from './typebotActions/edges'
|
||||
import { itemsAction, ItemsActions } from './typebotActions/items'
|
||||
import { GroupsActions, groupsActions } from './typebotActions/groups'
|
||||
import { blocksAction, BlocksActions } from './typebotActions/blocks'
|
||||
import { variablesAction, VariablesActions } from './typebotActions/variables'
|
||||
import { dequal } from 'dequal'
|
||||
import { useToast } from '@/hooks/useToast'
|
||||
import { useTypebotQuery } from '@/hooks/useTypebotQuery'
|
||||
import { useUndo } from '../../hooks/useUndo'
|
||||
import { useUndo } from '../hooks/useUndo'
|
||||
import { useLinkedTypebots } from '@/hooks/useLinkedTypebots'
|
||||
import { updateTypebotQuery } from '../../queries/updateTypebotQuery'
|
||||
import { preventUserFromRefreshing } from '@/utils/helpers'
|
||||
import {
|
||||
createPublishedTypebotQuery,
|
||||
updatePublishedTypebotQuery,
|
||||
deletePublishedTypebotQuery,
|
||||
} from '@/features/publish/queries'
|
||||
import { updateTypebotQuery } from '../queries/updateTypebotQuery'
|
||||
import { updateWebhookQuery } from '@/features/blocks/integrations/webhook/queries/updateWebhookQuery'
|
||||
import {
|
||||
checkIfTypebotsAreEqual,
|
||||
checkIfPublished,
|
||||
parseTypebotToPublicTypebot,
|
||||
parseDefaultPublicId,
|
||||
parsePublicTypebotToTypebot,
|
||||
} from '@/features/publish/utils'
|
||||
import { useAutoSave } from '@/hooks/useAutoSave'
|
||||
import { createWebhookQuery } from '@/features/blocks/integrations/webhook/queries/createWebhookQuery'
|
||||
import { duplicateWebhookQuery } from '@/features/blocks/integrations/webhook/queries/duplicateWebhookQuery'
|
||||
import { parseDefaultPublicId } from '@/features/publish/helpers/parseDefaultPublicId'
|
||||
import { createPublishedTypebotQuery } from '@/features/publish/queries/createPublishedTypebotQuery'
|
||||
import { deletePublishedTypebotQuery } from '@/features/publish/queries/deletePublishedTypebotQuery'
|
||||
import { updatePublishedTypebotQuery } from '@/features/publish/queries/updatePublishedTypebotQuery'
|
||||
import { preventUserFromRefreshing } from '@/helpers/preventUserFromRefreshing'
|
||||
import { areTypebotsEqual } from '@/features/publish/helpers/areTypebotsEqual'
|
||||
import { isPublished as isPublishedHelper } from '@/features/publish/helpers/isPublished'
|
||||
import { convertTypebotToPublicTypebot } from '@/features/publish/helpers/convertTypebotToPublicTypebot'
|
||||
import { convertPublicTypebotToTypebot } from '@/features/publish/helpers/convertPublicTypebotToTypebot'
|
||||
|
||||
const autoSaveTimeout = 10000
|
||||
|
||||
@@ -251,13 +247,13 @@ export const TypebotProvider = ({
|
||||
() =>
|
||||
isDefined(localTypebot) &&
|
||||
isDefined(publishedTypebot) &&
|
||||
checkIfPublished(localTypebot, publishedTypebot),
|
||||
isPublishedHelper(localTypebot, publishedTypebot),
|
||||
[localTypebot, publishedTypebot]
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
if (!localTypebot || !typebot) return
|
||||
if (!checkIfTypebotsAreEqual(localTypebot, typebot)) {
|
||||
if (!areTypebotsEqual(localTypebot, typebot)) {
|
||||
window.addEventListener('beforeunload', preventUserFromRefreshing)
|
||||
}
|
||||
|
||||
@@ -281,14 +277,14 @@ export const TypebotProvider = ({
|
||||
}
|
||||
if (publishedTypebot) {
|
||||
await savePublishedTypebot({
|
||||
...parseTypebotToPublicTypebot(newLocalTypebot),
|
||||
...convertTypebotToPublicTypebot(newLocalTypebot),
|
||||
id: publishedTypebot.id,
|
||||
})
|
||||
} else {
|
||||
setIsPublishing(true)
|
||||
const { data, error } = await createPublishedTypebotQuery(
|
||||
{
|
||||
...omit(parseTypebotToPublicTypebot(newLocalTypebot), 'id'),
|
||||
...omit(convertTypebotToPublicTypebot(newLocalTypebot), 'id'),
|
||||
},
|
||||
localTypebot.workspaceId
|
||||
)
|
||||
@@ -320,7 +316,9 @@ export const TypebotProvider = ({
|
||||
|
||||
const restorePublishedTypebot = () => {
|
||||
if (!publishedTypebot || !localTypebot) return
|
||||
setLocalTypebot(parsePublicTypebotToTypebot(publishedTypebot, localTypebot))
|
||||
setLocalTypebot(
|
||||
convertPublicTypebotToTypebot(publishedTypebot, localTypebot)
|
||||
)
|
||||
return saveTypebot()
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export { TypebotProvider, useTypebot } from './TypebotProvider'
|
||||
@@ -13,7 +13,7 @@ import { cleanUpEdgeDraft, deleteEdgeDraft } from './edges'
|
||||
import { createId } from '@paralleldrive/cuid2'
|
||||
import { byId, isWebhookBlock, blockHasItems } from '@typebot.io/lib'
|
||||
import { duplicateItemDraft } from './items'
|
||||
import { parseNewBlock } from '@/features/graph/utils'
|
||||
import { parseNewBlock } from '@/features/typebot/helpers/parseNewBlock'
|
||||
|
||||
export type BlocksActions = {
|
||||
createBlock: (
|
||||
@@ -13,8 +13,8 @@ import {
|
||||
duplicateBlockDraft,
|
||||
WebhookCallBacks,
|
||||
} from './blocks'
|
||||
import { Coordinates } from '@/features/graph'
|
||||
import { parseGroupTitle } from '@typebot.io/lib'
|
||||
import { Coordinates } from '@/features/graph/types'
|
||||
|
||||
export type GroupsActions = {
|
||||
createGroup: (
|
||||
Reference in New Issue
Block a user