Skip to content

Commit

Permalink
♻️ Improve new version popup polling
Browse files Browse the repository at this point in the history
Use react-query to trigger the request more intelligently than with a timeout
  • Loading branch information
baptisteArno committed Feb 27, 2023
1 parent d57fb47 commit 2fc78a5
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 25 deletions.
34 changes: 9 additions & 25 deletions apps/builder/src/components/NewVersionPopup.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useTypebot } from '@/features/editor'
import { trpc } from '@/lib/trpc'
import {
Button,
DarkMode,
Expand All @@ -9,39 +10,22 @@ import {
Text,
} from '@chakra-ui/react'
import { useEffect, useState } from 'react'
import { sendRequest } from 'utils'
import { PackageIcon } from './icons'

const intervalDuration = 1000 * 60

export const NewVersionPopup = () => {
const { typebot, save } = useTypebot()
const [isReloading, setIsReloading] = useState(false)
const { data } = trpc.getAppVersionProcedure.useQuery()
const [currentVersion, setCurrentVersion] = useState<string>()
const [isNewVersionAvailable, setIsNewVersionAvailable] = useState(false)
const [isReloading, setIsReloading] = useState(false)

useEffect(() => {
if (isNewVersionAvailable) return
let cancelRequest = false
const interval = setInterval(async () => {
const { data } = await sendRequest<{
commitSha: string | undefined
}>('/api/version')
if (!data || cancelRequest) return
if (!currentVersion) {
setCurrentVersion(data.commitSha)
return
}
if (currentVersion !== data.commitSha) {
setIsNewVersionAvailable(true)
}
}, intervalDuration)

return () => {
cancelRequest = true
clearInterval(interval)
}
}, [currentVersion, isNewVersionAvailable])
if (!data?.commitSha) return
if (currentVersion === data.commitSha) return
setCurrentVersion(data.commitSha)
if (currentVersion === undefined) return
setIsNewVersionAvailable(true)
}, [data, currentVersion])

const saveAndReload = async () => {
if (isReloading) return
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { publicProcedure } from '@/utils/server/trpc'

export const getAppVersionProcedure = publicProcedure.query(async () => {
return { commitSha: process.env.VERCEL_GIT_COMMIT_SHA }
})
1 change: 1 addition & 0 deletions apps/builder/src/pages/api/version.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// TODO: Remove when all clients are up to date
import { NextApiRequest, NextApiResponse } from 'next'

const handler = async (_req: NextApiRequest, res: NextApiResponse) => {
Expand Down
2 changes: 2 additions & 0 deletions apps/builder/src/utils/server/routers/v1/trpcRouter.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { billingRouter } from '@/features/billing/api/router'
import { webhookRouter } from '@/features/blocks/integrations/webhook/api'
import { getAppVersionProcedure } from '@/features/dashboard/api/getAppVersionProcedure'
import { resultsRouter } from '@/features/results/api'
import { typebotRouter } from '@/features/typebot/api'
import { workspaceRouter } from '@/features/workspace/api'
import { router } from '../../trpc'

export const trpcRouter = router({
getAppVersionProcedure,
workspace: workspaceRouter,
typebot: typebotRouter,
webhook: webhookRouter,
Expand Down

0 comments on commit 2fc78a5

Please sign in to comment.