From ad32ae02ef4493af34c4e777a7305ffba24cbb7d Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Sat, 4 Jun 2022 11:05:46 +0200 Subject: [PATCH] =?UTF-8?q?feat(db):=20=F0=9F=97=83=EF=B8=8F=20Remove=20du?= =?UTF-8?q?plicate=20fields=20in=20PublicTypebot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/builder/components/auth/SignInForm.tsx | 2 ++ .../builder/components/share/ShareContent.tsx | 10 ++++----- .../shared/TypebotHeader/TypebotHeader.tsx | 3 +-- .../TypebotContext/TypebotContext.tsx | 21 +------------------ apps/builder/playwright/services/database.ts | 3 --- apps/builder/services/publicTypebot.tsx | 9 +++----- apps/viewer/layouts/TypebotPage.tsx | 4 ++-- apps/viewer/pages/[[...publicId]].tsx | 8 ++++--- apps/viewer/playwright/services/database.ts | 3 --- .../migration.sql | 10 +++++++++ packages/db/prisma/schema.prisma | 3 --- 11 files changed, 29 insertions(+), 47 deletions(-) create mode 100644 packages/db/prisma/migrations/20220604084638_remove_public_typebot_duplicates/migration.sql diff --git a/apps/builder/components/auth/SignInForm.tsx b/apps/builder/components/auth/SignInForm.tsx index a03ebcef0..b07907959 100644 --- a/apps/builder/components/auth/SignInForm.tsx +++ b/apps/builder/components/auth/SignInForm.tsx @@ -5,6 +5,7 @@ import { Stack, HStack, Text, + Spinner, } from '@chakra-ui/react' import React, { ChangeEvent, FormEvent, useEffect } from 'react' import { useState } from 'react' @@ -70,6 +71,7 @@ export const SignInForm = ({ }) setAuthLoading(false) } + if (isLoadingProviders) return if (hasNoAuthProvider) return ( diff --git a/apps/builder/components/share/ShareContent.tsx b/apps/builder/components/share/ShareContent.tsx index 521ca60d8..9eeb261fe 100644 --- a/apps/builder/components/share/ShareContent.tsx +++ b/apps/builder/components/share/ShareContent.tsx @@ -23,14 +23,14 @@ import { integrationsList } from './integrations/EmbedButton' export const ShareContent = () => { const { workspace } = useWorkspace() - const { typebot, updateOnBothTypebots } = useTypebot() + const { typebot, updateTypebot } = useTypebot() const { showToast } = useToast() const handlePublicIdChange = (publicId: string) => { if (publicId === typebot?.publicId) return if (publicId.length < 4) return showToast({ description: 'ID must be longer than 4 characters' }) - updateOnBothTypebots({ publicId }) + updateTypebot({ publicId }) } const publicId = typebot @@ -46,8 +46,8 @@ export const ShareContent = () => { handleCustomDomainChange(newDomain) } - const handleCustomDomainChange = (customDomain: string | null) => - updateOnBothTypebots({ customDomain }) + const handleCustomDomainChange = (customDomain: string | undefined) => + updateTypebot({ customDomain }) return ( @@ -76,7 +76,7 @@ export const ShareContent = () => { icon={} aria-label="Remove custom domain" size="xs" - onClick={() => handleCustomDomainChange(null)} + onClick={() => handleCustomDomainChange(undefined)} /> )} diff --git a/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx b/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx index ac67e47b3..54f210724 100644 --- a/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx +++ b/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx @@ -25,7 +25,6 @@ export const TypebotHeader = () => { const router = useRouter() const { typebot, - updateOnBothTypebots, updateTypebot, save, undo, @@ -36,7 +35,7 @@ export const TypebotHeader = () => { } = useTypebot() const { setRightPanel, rightPanel, setStartPreviewAtBlock } = useEditor() - const handleNameSubmit = (name: string) => updateOnBothTypebots({ name }) + const handleNameSubmit = (name: string) => updateTypebot({ name }) const handleChangeIcon = (icon: string) => updateTypebot({ icon }) diff --git a/apps/builder/contexts/TypebotContext/TypebotContext.tsx b/apps/builder/contexts/TypebotContext/TypebotContext.tsx index 2eb95d660..b732217ea 100644 --- a/apps/builder/contexts/TypebotContext/TypebotContext.tsx +++ b/apps/builder/contexts/TypebotContext/TypebotContext.tsx @@ -52,6 +52,7 @@ type UpdateTypebotPayload = Partial<{ name: string publishedTypebotId: string icon: string + customDomain: string }> export type SetTypebot = ( @@ -77,11 +78,6 @@ const typebotContext = createContext< webhook: Partial ) => Promise updateTypebot: (updates: UpdateTypebotPayload) => void - updateOnBothTypebots: (updates: { - publicId?: string - name?: string - customDomain?: string | null - }) => void publishTypebot: () => void restorePublishedTypebot: () => void } & BlocksActions & @@ -322,20 +318,6 @@ export const TypebotContext = ({ } } - const updateOnBothTypebots = async (updates: { - publicId?: string - name?: string - customDomain?: string | null - }) => { - updateLocalTypebot(updates) - await saveTypebot() - if (!publishedTypebot) return - await savePublishedTypebot({ - ...publishedTypebot, - ...updates, - }) - } - const restorePublishedTypebot = () => { if (!publishedTypebot || !localTypebot) return setLocalTypebot(parsePublicTypebotToTypebot(publishedTypebot, localTypebot)) @@ -377,7 +359,6 @@ export const TypebotContext = ({ isPublished, updateTypebot: updateLocalTypebot, restorePublishedTypebot, - updateOnBothTypebots, updateWebhook, ...blocksActions(setLocalTypebot as SetTypebot), ...stepsAction(setLocalTypebot as SetTypebot), diff --git a/apps/builder/playwright/services/database.ts b/apps/builder/playwright/services/database.ts index ae8208f88..d91eef0c8 100644 --- a/apps/builder/playwright/services/database.ts +++ b/apps/builder/playwright/services/database.ts @@ -260,15 +260,12 @@ const parseTypebotToPublicTypebot = ( typebot: Typebot ): Omit => ({ id, - name: typebot.name, blocks: typebot.blocks, typebotId: typebot.id, theme: typebot.theme, settings: typebot.settings, - publicId: typebot.publicId, variables: typebot.variables, edges: typebot.edges, - customDomain: null, }) const parseTestTypebot = (partialTypebot: Partial): Typebot => ({ diff --git a/apps/builder/services/publicTypebot.tsx b/apps/builder/services/publicTypebot.tsx index e6931d46d..33e58e31b 100644 --- a/apps/builder/services/publicTypebot.tsx +++ b/apps/builder/services/publicTypebot.tsx @@ -9,12 +9,9 @@ export const parseTypebotToPublicTypebot = ( typebotId: typebot.id, blocks: typebot.blocks, edges: typebot.edges, - name: typebot.name, - publicId: typebot.publicId, settings: typebot.settings, theme: typebot.theme, variables: typebot.variables, - customDomain: typebot.customDomain, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }) @@ -26,12 +23,12 @@ export const parsePublicTypebotToTypebot = ( id: typebot.typebotId, blocks: typebot.blocks, edges: typebot.edges, - name: typebot.name, - publicId: typebot.publicId, + name: existingTypebot.name, + publicId: existingTypebot.publicId, settings: typebot.settings, theme: typebot.theme, variables: typebot.variables, - customDomain: typebot.customDomain, + customDomain: existingTypebot.customDomain, createdAt: existingTypebot.createdAt, updatedAt: existingTypebot.updatedAt, publishedTypebotId: typebot.id, diff --git a/apps/viewer/layouts/TypebotPage.tsx b/apps/viewer/layouts/TypebotPage.tsx index 9ecaca0a0..2deb0eafb 100644 --- a/apps/viewer/layouts/TypebotPage.tsx +++ b/apps/viewer/layouts/TypebotPage.tsx @@ -9,7 +9,7 @@ import { createResult, updateResult } from '../services/result' import { ErrorPage } from './ErrorPage' export type TypebotPageProps = { - typebot?: PublicTypebot + typebot?: PublicTypebot & { typebot: { name: string } } url: string isIE: boolean customHeadCode: string | null @@ -97,7 +97,7 @@ export const TypebotPage = ({
{showTypebot && ( diff --git a/apps/viewer/pages/[[...publicId]].tsx b/apps/viewer/pages/[[...publicId]].tsx index 3ce15a1af..9c205f30f 100644 --- a/apps/viewer/pages/[[...publicId]].tsx +++ b/apps/viewer/pages/[[...publicId]].tsx @@ -62,8 +62,9 @@ export const getServerSideProps: GetServerSideProps = async ( const getTypebotFromPublicId = async (publicId?: string) => { if (!publicId) return null - const typebot = await prisma.publicTypebot.findUnique({ - where: { publicId }, + const typebot = await prisma.publicTypebot.findFirst({ + where: { typebot: { publicId } }, + include: { typebot: { select: { name: true } } }, }) if (isNotDefined(typebot)) return null return omit(typebot as unknown as PublicTypebot, 'createdAt', 'updatedAt') @@ -71,7 +72,8 @@ const getTypebotFromPublicId = async (publicId?: string) => { const getTypebotFromCustomDomain = async (customDomain: string) => { const typebot = await prisma.publicTypebot.findFirst({ - where: { customDomain }, + where: { typebot: { customDomain } }, + include: { typebot: { select: { name: true } } }, }) if (isNotDefined(typebot)) return null return omit(typebot as unknown as PublicTypebot, 'createdAt', 'updatedAt') diff --git a/apps/viewer/playwright/services/database.ts b/apps/viewer/playwright/services/database.ts index 5037c775a..cd79bbc7c 100644 --- a/apps/viewer/playwright/services/database.ts +++ b/apps/viewer/playwright/services/database.ts @@ -92,15 +92,12 @@ const parseTypebotToPublicTypebot = ( typebot: Typebot ): PublicTypebot => ({ id, - name: typebot.name, blocks: typebot.blocks, typebotId: typebot.id, theme: typebot.theme, settings: typebot.settings, - publicId: typebot.publicId, variables: typebot.variables, edges: typebot.edges, - customDomain: null, createdAt: typebot.createdAt, updatedAt: typebot.updatedAt, }) diff --git a/packages/db/prisma/migrations/20220604084638_remove_public_typebot_duplicates/migration.sql b/packages/db/prisma/migrations/20220604084638_remove_public_typebot_duplicates/migration.sql new file mode 100644 index 000000000..88297df0c --- /dev/null +++ b/packages/db/prisma/migrations/20220604084638_remove_public_typebot_duplicates/migration.sql @@ -0,0 +1,10 @@ +-- DropIndex +DROP INDEX "PublicTypebot_customDomain_key"; + +-- DropIndex +DROP INDEX "PublicTypebot_publicId_key"; + +-- AlterTable +ALTER TABLE "PublicTypebot" DROP COLUMN "customDomain", +DROP COLUMN "name", +DROP COLUMN "publicId"; diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index b7400b957..ff0392d2f 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -215,14 +215,11 @@ model PublicTypebot { updatedAt DateTime @default(now()) @updatedAt typebotId String @unique typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade) - name String blocks Json[] variables Json[] edges Json[] theme Json settings Json - publicId String? @unique - customDomain String? @unique } model Result {