adding in delay to handle network latency

This commit is contained in:
2024-11-19 09:17:16 -07:00
parent d02d6d8b7b
commit 594573879e
3 changed files with 20 additions and 11 deletions

View File

@@ -20,7 +20,7 @@ import { useAuthoritativeUpdates } from "../../utils/useAuthoritativeUpdates";
export default function EditLecture({ lectureDay }: { lectureDay: string }) {
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const [weeks, { dataUpdatedAt: serverDataUpdatedAt }] =
const [weeks, { dataUpdatedAt: serverDataUpdatedAt, isFetching }] =
useLecturesSuspenseQuery();
const updateLecture = useLectureUpdateMutation();
@@ -40,6 +40,10 @@ export default function EditLecture({ lectureDay }: { lectureDay: string }) {
const handler = setTimeout(() => {
try {
if (isFetching || updateLecture.isPending) {
console.log("network requests in progress, not updating page");
return;
}
const parsed = parseLecture(text);
if (!lecture || lectureToString(parsed) !== lectureToString(lecture)) {
if (clientIsAuthoritative) {
@@ -70,6 +74,7 @@ export default function EditLecture({ lectureDay }: { lectureDay: string }) {
}, [
clientIsAuthoritative,
courseName,
isFetching,
lecture,
settings,
text,

View File

@@ -30,12 +30,12 @@ export function AssignmentButtons({
const router = useRouter();
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const {
data: canvasAssignments,
isPending: canvasIsPending,
isRefetching: canvasIsRefetching,
} = useCanvasAssignmentsQuery();
const [assignment] = useAssignmentQuery(moduleName, assignmentName);
const { data: canvasAssignments, isFetching: canvasIsFetching } =
useCanvasAssignmentsQuery();
const [assignment, { isFetching }] = useAssignmentQuery(
moduleName,
assignmentName
);
const addToCanvas = useAddAssignmentToCanvasMutation();
const deleteFromCanvas = useDeleteAssignmentFromCanvasMutation();
const updateAssignment = useUpdateAssignmentInCanvasMutation();
@@ -49,11 +49,13 @@ export function AssignmentButtons({
const anythingIsLoading =
addToCanvas.isPending ||
canvasIsPending ||
canvasIsRefetching ||
canvasIsFetching ||
isFetching ||
deleteFromCanvas.isPending ||
updateAssignment.isPending;
console.log("assignment pending", updateAssignment.isPending);
return (
<div className="p-5 flex flex-row justify-between gap-3">
<div>

View File

@@ -13,8 +13,10 @@ export function useAuthoritativeUpdates({
useState(serverUpdatedAt);
const [updateMonacoKey, setUpdateMonacoKey] = useState(1);
const clientIsAuthoritative = useMemo(() => {
const authority = serverUpdatedAt <= clientDataUpdatedAt;
// const authority = serverUpdatedAt <= clientDataUpdatedAt + 500; // if it is close, it might be the second-to-last update changing the first (by file update delays), add some buffer...
// const authority = serverUpdatedAt <= clientDataUpdatedAt;
const estimatedNetworkRoundTrip = 500; // network latency means client is still authoritative for a slight delay
const authority =
serverUpdatedAt <= clientDataUpdatedAt + estimatedNetworkRoundTrip;
// console.log("client is authoritative", authority);
return authority;
}, [clientDataUpdatedAt, serverUpdatedAt]);