Skip to content

Commit

Permalink
feat(editor): ✨ Add auto save
Browse files Browse the repository at this point in the history
  • Loading branch information
baptisteArno committed Jan 23, 2022
1 parent a58600a commit 079cf5e
Show file tree
Hide file tree
Showing 20 changed files with 145 additions and 198 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const TypebotHeader = () => {
const handleNameSubmit = (name: string) => updateTypebot({ name })

const handlePreviewClick = async () => {
await save()
save().then()
setRightPanel(RightPanel.PREVIEW)
}

Expand Down
9 changes: 9 additions & 0 deletions apps/builder/contexts/TypebotContext/TypebotContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ import { choiceItemsAction, ChoiceItemsActions } from './actions/choiceItems'
import { variablesAction, VariablesActions } from './actions/variables'
import { edgesAction, EdgesActions } from './actions/edges'
import { webhooksAction, WebhooksAction } from './actions/webhooks'
import { useDebounce } from 'use-debounce'

const autoSaveTimeout = 10000

type UpdateTypebotPayload = Partial<{
theme: Theme
Expand Down Expand Up @@ -85,6 +88,12 @@ export const TypebotContext = ({
undefined
)

const [debouncedLocalTypebot] = useDebounce(localTypebot, autoSaveTimeout)
useEffect(() => {
if (hasUnsavedChanges) saveTypebot()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [debouncedLocalTypebot])

const [localPublishedTypebot, setLocalPublishedTypebot] =
useState<PublicTypebot>()
const [isSavingLoading, setIsSavingLoading] = useState(false)
Expand Down
10 changes: 9 additions & 1 deletion apps/builder/pages/_app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,22 @@ import 'assets/styles/plate.css'
import 'focus-visible/dist/focus-visible'
import 'assets/styles/submissionsTable.css'
import 'assets/styles/codeMirror.css'
import { UserContext } from 'contexts/UserContext'
import { TypebotContext } from 'contexts/TypebotContext'
import { useRouter } from 'next/router'

const App = ({ Component, pageProps }: AppProps) => {
useRouterProgressBar()
const { query } = useRouter()

return (
<ChakraProvider theme={customTheme}>
<SessionProvider>
<Component {...pageProps} />
<UserContext>
<TypebotContext typebotId={query.typebotId?.toString()}>
<Component {...pageProps} />
</TypebotContext>
</UserContext>
</SessionProvider>
</ChakraProvider>
)
Expand Down
19 changes: 7 additions & 12 deletions apps/builder/pages/account.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
import { Stack } from '@chakra-ui/react'
import { AccountHeader } from 'components/account/AccountHeader'
import { Seo } from 'components/Seo'
import { UserContext } from 'contexts/UserContext'
import { AccountContent } from 'layouts/account/AccountContent'

const AccountSubscriptionPage = () => {
return (
<UserContext>
<Seo title="My account" />{' '}
<Stack>
<AccountHeader />
<AccountContent />
</Stack>
</UserContext>
)
}
const AccountSubscriptionPage = () => (
<Stack>
<Seo title="My account" />
<AccountHeader />
<AccountContent />
</Stack>
)
export default AccountSubscriptionPage
2 changes: 2 additions & 0 deletions apps/builder/pages/register.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ import { SignInForm } from 'components/auth/SignInForm'
import { Heading, VStack } from '@chakra-ui/react'
import { useRouter } from 'next/router'
import React from 'react'
import { Seo } from 'components/Seo'

const RegisterPage = () => {
const { query } = useRouter()

return (
<VStack spacing={4} h="100vh" justifyContent="center">
<Seo title="Register" />
<Heading>Create an account</Heading>
<AuthSwitcher type="register" />
<SignInForm defaultEmail={query.g?.toString()} />
Expand Down
2 changes: 2 additions & 0 deletions apps/builder/pages/signin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { AuthSwitcher } from 'components/auth/AuthSwitcher'
import { SignInForm } from 'components/auth/SignInForm'
import { Heading, VStack } from '@chakra-ui/react'
import React from 'react'
import { Seo } from 'components/Seo'

const SignInPage = () => {
return (
<VStack spacing={4} h="100vh" justifyContent="center">
<Seo title="Sign in" />
<Heading>Sign in</Heading>
<AuthSwitcher type="signin" />
<SignInForm />
Expand Down
34 changes: 0 additions & 34 deletions apps/builder/pages/typebots/[id]/edit.tsx

This file was deleted.

25 changes: 0 additions & 25 deletions apps/builder/pages/typebots/[id]/results.tsx

This file was deleted.

25 changes: 0 additions & 25 deletions apps/builder/pages/typebots/[id]/results/analytics.tsx

This file was deleted.

25 changes: 0 additions & 25 deletions apps/builder/pages/typebots/[id]/settings.tsx

This file was deleted.

25 changes: 0 additions & 25 deletions apps/builder/pages/typebots/[id]/share.tsx

This file was deleted.

25 changes: 0 additions & 25 deletions apps/builder/pages/typebots/[id]/theme.tsx

This file was deleted.

23 changes: 23 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/edit.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Flex } from '@chakra-ui/layout'
import { Board } from 'components/board/Board'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import { EditorContext } from 'contexts/EditorContext'
import { KBarProvider } from 'kbar'
import React from 'react'
import { actions } from 'libs/kbar'
import { KBar } from 'components/shared/KBar'

const TypebotEditPage = () => (
<EditorContext>
<Seo title="Editor" />
<KBarProvider actions={actions}>
<KBar />
<Flex overflow="hidden" h="100vh" flexDir="column">
<TypebotHeader />
<Board />
</Flex>
</KBarProvider>
</EditorContext>
)
export default TypebotEditPage
15 changes: 15 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/results.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Flex } from '@chakra-ui/layout'
import { ResultsContent } from 'layouts/results/ResultsContent'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import React from 'react'

const ResultsPage = () => (
<Flex overflow="hidden" h="100vh" flexDir="column">
<Seo title="Share" />
<TypebotHeader />
<ResultsContent />
</Flex>
)

export default ResultsPage
15 changes: 15 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/results/analytics.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Flex } from '@chakra-ui/layout'
import { ResultsContent } from 'layouts/results/ResultsContent'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import React from 'react'

const AnalyticsPage = () => (
<Flex overflow="hidden" h="100vh" flexDir="column">
<Seo title="Analytics" />
<TypebotHeader />
<ResultsContent />
</Flex>
)

export default AnalyticsPage
15 changes: 15 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/settings.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { SettingsContent } from 'components/settings/SettingsContent'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import React from 'react'

const SettingsPage = () => (
<Flex overflow="hidden" h="100vh" flexDir="column">
<Seo title="Settings" />
<TypebotHeader />
<SettingsContent />
</Flex>
)

export default SettingsPage
15 changes: 15 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/share.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { ShareContent } from 'components/share/ShareContent'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import React from 'react'

const SharePage = () => (
<Flex overflow="hidden" h="100vh" flexDir="column">
<Seo title="Share" />
<TypebotHeader />
<ShareContent />
</Flex>
)

export default SharePage
15 changes: 15 additions & 0 deletions apps/builder/pages/typebots/[typebotId]/theme.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import { ThemeContent } from 'components/theme/ThemeContent'
import React from 'react'

const ThemePage = () => (
<Flex overflow="hidden" h="100vh" flexDir="column">
<Seo title="Theme" />
<TypebotHeader />
<ThemeContent />
</Flex>
)

export default ThemePage
Loading

0 comments on commit 079cf5e

Please sign in to comment.