2
0

🚸 (editor) Improve editor performance by rounding paths

Related to #575
This commit is contained in:
Baptiste Arnaud
2023-06-24 11:48:46 +02:00
parent 69254c3624
commit 0582ca74ac
6 changed files with 37 additions and 12 deletions

View File

@@ -58,7 +58,9 @@ export const Graph = ({
const [debouncedGraphPosition] = useDebounce(graphPosition, 200)
const transform = useMemo(
() =>
`translate(${graphPosition.x}px, ${graphPosition.y}px) scale(${graphPosition.scale})`,
`translate(${Number(graphPosition.x.toFixed(2))}px, ${Number(
graphPosition.y.toFixed(2)
)}px) scale(${graphPosition.scale})`,
[graphPosition]
)
const { user } = useUser()

View File

@@ -39,10 +39,14 @@ export const SourceEndpoint = ({
const endpointY = useMemo(
() =>
ref.current
? (ref.current?.getBoundingClientRect().y +
(endpointHeight * graphPosition.scale) / 2 -
graphPosition.y) /
graphPosition.scale
? Number(
(
(ref.current?.getBoundingClientRect().y +
(endpointHeight * graphPosition.scale) / 2 -
graphPosition.y) /
graphPosition.scale
).toFixed(2)
)
: undefined,
// We need to force recompute whenever the group height and position changes
// eslint-disable-next-line react-hooks/exhaustive-deps

View File

@@ -28,10 +28,14 @@ export const TargetEndpoint = ({
const endpointY = useMemo(
() =>
ref.current
? (ref.current?.getBoundingClientRect().y +
(endpointHeight * graphPosition.scale) / 2 -
graphPosition.y) /
graphPosition.scale
? Number(
(
(ref.current?.getBoundingClientRect().y +
(endpointHeight * graphPosition.scale) / 2 -
graphPosition.y) /
graphPosition.scale
).toFixed(2)
)
: undefined,
// We need to force recompute whenever the group height and position changes
// eslint-disable-next-line react-hooks/exhaustive-deps

View File

@@ -170,8 +170,8 @@ const NonMemoizedDraggableGroupNode = ({
setIsMouseDown(false)
}
const newCoord = {
x: offsetX / graphPosition.scale,
y: offsetY / graphPosition.scale,
x: Number((offsetX / graphPosition.scale).toFixed(2)),
y: Number((offsetY / graphPosition.scale).toFixed(2)),
}
setCurrentCoordinates(newCoord)
onGroupDrag(newCoord)

View File

@@ -0,0 +1,12 @@
import { Typebot } from '@typebot.io/schemas'
export const roundGroupsCoordinate = (typebot: Typebot): Typebot => {
const groups = typebot.groups.map((group) => {
const { x, y } = group.graphCoordinates
return {
...group,
graphCoordinates: { x: Number(x.toFixed(2)), y: Number(y.toFixed(2)) },
}
})
return { ...typebot, groups }
}

View File

@@ -9,6 +9,7 @@ import { getTypebot } from '@/features/typebot/helpers/getTypebot'
import { archiveResults } from '@/features/results/helpers/archiveResults'
import { isReadTypebotForbidden } from '@/features/typebot/helpers/isReadTypebotForbidden'
import { removeTypebotOldProperties } from '@/features/typebot/helpers/removeTypebotOldProperties'
import { roundGroupsCoordinate } from '@/features/typebot/helpers/roundGroupsCoordinate'
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const user = await getAuthenticatedUser(req, res)
@@ -36,7 +37,9 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
collaborators.find((c) => c.userId === user.id)?.type ===
CollaborationType.READ
return res.send({
typebot: removeTypebotOldProperties(typebot),
typebot: roundGroupsCoordinate(
removeTypebotOldProperties(typebot) as Typebot
),
publishedTypebot,
isReadOnly,
webhooks,