🐛 Fix inconsistent updatedAt when timezone is different fro…
This commit is contained in:
@@ -253,7 +253,7 @@ const RightElements = ({
|
|||||||
}: StackProps & { isResultsDisplayed: boolean }) => {
|
}: StackProps & { isResultsDisplayed: boolean }) => {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const { t } = useTranslate()
|
const { t } = useTranslate()
|
||||||
const { typebot, currentUserMode, save } = useTypebot()
|
const { typebot, currentUserMode, save, isSavingLoading } = useTypebot()
|
||||||
const {
|
const {
|
||||||
setRightPanel,
|
setRightPanel,
|
||||||
rightPanel,
|
rightPanel,
|
||||||
@@ -264,7 +264,7 @@ const RightElements = ({
|
|||||||
const handlePreviewClick = async () => {
|
const handlePreviewClick = async () => {
|
||||||
setStartPreviewAtGroup(undefined)
|
setStartPreviewAtGroup(undefined)
|
||||||
setStartPreviewAtEvent(undefined)
|
setStartPreviewAtEvent(undefined)
|
||||||
save().then()
|
await save()
|
||||||
setRightPanel(RightPanel.PREVIEW)
|
setRightPanel(RightPanel.PREVIEW)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +282,7 @@ const RightElements = ({
|
|||||||
<Button
|
<Button
|
||||||
colorScheme="gray"
|
colorScheme="gray"
|
||||||
onClick={handlePreviewClick}
|
onClick={handlePreviewClick}
|
||||||
isLoading={isNotDefined(typebot)}
|
isLoading={isNotDefined(typebot) || isSavingLoading}
|
||||||
leftIcon={<PlayIcon />}
|
leftIcon={<PlayIcon />}
|
||||||
size="sm"
|
size="sm"
|
||||||
iconSpacing={{ base: 0, xl: 2 }}
|
iconSpacing={{ base: 0, xl: 2 }}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { isDefined } from '@typebot.io/lib'
|
|||||||
|
|
||||||
export interface Actions<T extends { updatedAt: Date }> {
|
export interface Actions<T extends { updatedAt: Date }> {
|
||||||
set: (newPresent: T | ((current: T) => T) | undefined) => void
|
set: (newPresent: T | ((current: T) => T) | undefined) => void
|
||||||
|
setUpdateDate: (updateDate: Date) => void
|
||||||
undo: () => void
|
undo: () => void
|
||||||
redo: () => void
|
redo: () => void
|
||||||
flush: () => void
|
flush: () => void
|
||||||
@@ -107,6 +108,16 @@ export const useUndo = <T extends { updatedAt: Date }>(
|
|||||||
[history, params?.isReadOnly]
|
[history, params?.isReadOnly]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const setUpdateDate = useCallback(
|
||||||
|
(updatedAt: Date) => {
|
||||||
|
set((current) => ({
|
||||||
|
...current,
|
||||||
|
updatedAt,
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
[set]
|
||||||
|
)
|
||||||
|
|
||||||
const flush = useCallback(() => {
|
const flush = useCallback(() => {
|
||||||
if (params?.isReadOnly) return
|
if (params?.isReadOnly) return
|
||||||
setHistory({
|
setHistory({
|
||||||
@@ -116,5 +127,8 @@ export const useUndo = <T extends { updatedAt: Date }>(
|
|||||||
})
|
})
|
||||||
}, [params?.isReadOnly])
|
}, [params?.isReadOnly])
|
||||||
|
|
||||||
return [history.present, { set, undo, redo, flush, canUndo, canRedo }]
|
return [
|
||||||
|
history.present,
|
||||||
|
{ set, undo, redo, flush, setUpdateDate, canUndo, canRedo },
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,7 +174,15 @@ export const TypebotProvider = ({
|
|||||||
|
|
||||||
const [
|
const [
|
||||||
localTypebot,
|
localTypebot,
|
||||||
{ redo, undo, flush, canRedo, canUndo, set: setLocalTypebot },
|
{
|
||||||
|
redo,
|
||||||
|
undo,
|
||||||
|
flush,
|
||||||
|
canRedo,
|
||||||
|
canUndo,
|
||||||
|
set: setLocalTypebot,
|
||||||
|
setUpdateDate,
|
||||||
|
},
|
||||||
] = useUndo<TypebotV6>(undefined, {
|
] = useUndo<TypebotV6>(undefined, {
|
||||||
isReadOnly,
|
isReadOnly,
|
||||||
onUndo: (t) => {
|
onUndo: (t) => {
|
||||||
@@ -216,24 +224,33 @@ export const TypebotProvider = ({
|
|||||||
const typebotToSave = {
|
const typebotToSave = {
|
||||||
...localTypebot,
|
...localTypebot,
|
||||||
...updates,
|
...updates,
|
||||||
updatedAt: new Date(),
|
|
||||||
}
|
}
|
||||||
if (dequal(omit(typebot, 'updatedAt'), omit(typebotToSave, 'updatedAt')))
|
if (dequal(omit(typebot, 'updatedAt'), omit(typebotToSave, 'updatedAt')))
|
||||||
return
|
return
|
||||||
const newParsedTypebot = typebotV6Schema.parse({ ...typebotToSave })
|
const newParsedTypebot = typebotV6Schema.parse({ ...typebotToSave })
|
||||||
setLocalTypebot(newParsedTypebot)
|
setLocalTypebot(newParsedTypebot)
|
||||||
try {
|
try {
|
||||||
await updateTypebot({
|
const {
|
||||||
|
typebot: { updatedAt },
|
||||||
|
} = await updateTypebot({
|
||||||
typebotId: newParsedTypebot.id,
|
typebotId: newParsedTypebot.id,
|
||||||
typebot: newParsedTypebot,
|
typebot: newParsedTypebot,
|
||||||
})
|
})
|
||||||
|
setUpdateDate(updatedAt)
|
||||||
} catch {
|
} catch {
|
||||||
setLocalTypebot({
|
setLocalTypebot({
|
||||||
...localTypebot,
|
...localTypebot,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[isReadOnly, localTypebot, setLocalTypebot, typebot, updateTypebot]
|
[
|
||||||
|
isReadOnly,
|
||||||
|
localTypebot,
|
||||||
|
setLocalTypebot,
|
||||||
|
setUpdateDate,
|
||||||
|
typebot,
|
||||||
|
updateTypebot,
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
useAutoSave(
|
useAutoSave(
|
||||||
|
|||||||
@@ -120,8 +120,7 @@ export const updateTypebot = authenticatedProcedure
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
typebot.updatedAt &&
|
typebot.updatedAt &&
|
||||||
new Date(existingTypebot?.updatedAt).getTime() >
|
existingTypebot.updatedAt.getTime() > typebot.updatedAt.getTime()
|
||||||
typebot.updatedAt.getTime()
|
|
||||||
)
|
)
|
||||||
throw new TRPCError({
|
throw new TRPCError({
|
||||||
code: 'CONFLICT',
|
code: 'CONFLICT',
|
||||||
@@ -197,7 +196,6 @@ export const updateTypebot = authenticatedProcedure
|
|||||||
}),
|
}),
|
||||||
isClosed: typebot.isClosed,
|
isClosed: typebot.isClosed,
|
||||||
whatsAppCredentialsId: typebot.whatsAppCredentialsId ?? undefined,
|
whatsAppCredentialsId: typebot.whatsAppCredentialsId ?? undefined,
|
||||||
updatedAt: typebot.updatedAt,
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user