diff --git a/apps/web/components/Objects/Editor/EditorWrapper.tsx b/apps/web/components/Objects/Editor/EditorWrapper.tsx index 860beeae..e51180a3 100644 --- a/apps/web/components/Objects/Editor/EditorWrapper.tsx +++ b/apps/web/components/Objects/Editor/EditorWrapper.tsx @@ -15,6 +15,7 @@ import { getCollaborationServerUrl } from '@services/config/config' import randomColor from 'randomcolor' import MouseMovements from './MouseMovements' import { v4 as uuidv4 } from 'uuid'; +import { debounce } from '@/lib/utils'; interface EditorWrapperProps { content: string @@ -55,17 +56,18 @@ function EditorWrapper(props: EditorWrapperProps): JSX.Element { // Store the Y document in the browser new IndexeddbPersistence(props.activity.activity_uuid, doc) - document.addEventListener("mousemove", (event) => { - // Share any information you like - provider?.setAwarenessField("userMouseMovement", { - user: session.data.user, - mouseX: event.clientX, - mouseY: event.clientY, - color: thisPageColor, - onlineInstanceID: onlinePageInstanceID - }); - }); - + document.addEventListener( + 'mousemove', + debounce((event: MouseEvent) => { + provider?.setAwarenessField('userMouseMovement', { + user: session.data.user, + mouseX: event.clientX, + mouseY: event.clientY, + color: thisPageColor, + onlineInstanceID: onlinePageInstanceID, + }) + }, 300) + ) async function setContent(content: any) { let activity = props.activity @@ -196,5 +198,4 @@ function EditorWrapper(props: EditorWrapperProps): JSX.Element { -export default EditorWrapper - +export default EditorWrapper \ No newline at end of file diff --git a/apps/web/lib/utils.ts b/apps/web/lib/utils.ts index bd0c391d..01262daf 100644 --- a/apps/web/lib/utils.ts +++ b/apps/web/lib/utils.ts @@ -1,6 +1,17 @@ -import { clsx, type ClassValue } from "clsx" -import { twMerge } from "tailwind-merge" +import { clsx, type ClassValue } from 'clsx' +import { twMerge } from 'tailwind-merge' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + +export function debounce void>( + func: T, + delay: number +): T { + let timeoutId: ReturnType + return function (this: any, ...args: Parameters) { + clearTimeout(timeoutId) + timeoutId = setTimeout(() => func.apply(this, args), delay) + } as T +}