mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
35 lines
987 B
TypeScript
35 lines
987 B
TypeScript
"use client";
|
|
import { useState, useMemo, useCallback } from "react";
|
|
|
|
export function useAuthoritativeUpdates({
|
|
serverUpdatedAt,
|
|
startingText,
|
|
}: {
|
|
serverUpdatedAt: number;
|
|
startingText: string;
|
|
}) {
|
|
const [text, setText] = useState(startingText);
|
|
const [clientDataUpdatedAt, setClientDataUpdatedAt] =
|
|
useState(serverUpdatedAt);
|
|
const [updateMonacoKey, setUpdateMonacoKey] = useState(1);
|
|
|
|
// console.log("client is authoritative", clientIsAuthoritative);
|
|
const textUpdate = useCallback((t: string, updateMonaco: boolean = false) => {
|
|
setText(t);
|
|
setClientDataUpdatedAt(Date.now());
|
|
if (updateMonaco) setUpdateMonacoKey((t) => t + 1);
|
|
}, []);
|
|
|
|
return useMemo(
|
|
() => ({
|
|
clientIsAuthoritative: serverUpdatedAt <= clientDataUpdatedAt,
|
|
serverUpdatedAt,
|
|
clientDataUpdatedAt,
|
|
textUpdate,
|
|
text,
|
|
monacoKey: updateMonacoKey,
|
|
}),
|
|
[clientDataUpdatedAt, serverUpdatedAt, text, textUpdate, updateMonacoKey]
|
|
);
|
|
}
|