From e537eaedf504048b7bdcc191e24b35cd3f1928f7 Mon Sep 17 00:00:00 2001 From: lingdocs <71590811+lingdocs@users.noreply.github.com> Date: Fri, 3 Sep 2021 14:29:30 +0400 Subject: [PATCH] problem with rev and lastLogin info changing triggering state updates --- website/src/App.tsx | 13 ++++++++----- website/src/lib/misc-helpers.ts | 11 +++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/website/src/App.tsx b/website/src/App.tsx index da3c2c1..7aeab22 100644 --- a/website/src/App.tsx +++ b/website/src/App.tsx @@ -73,7 +73,7 @@ import "./App.css"; import classNames from "classnames"; import { getTextOptions } from "./lib/get-text-options"; import { getTextFromShareTarget } from "./lib/share-target"; -import { objIsEqual } from "./lib/misc-helpers"; +import { objIsEqual, userObjIsEqual } from "./lib/misc-helpers"; // to allow Moustrap key combos even when input fields are in focus Mousetrap.prototype.stopCallback = function () { @@ -145,7 +145,6 @@ class App extends Component { ReactGA.pageview(window.location.pathname + window.location.search); } dictionary.initialize().then((r) => { - console.log(this.props.location.pathname); this.checkUserCronJob.start(); this.networkCronJob.start(); this.setState({ @@ -282,7 +281,10 @@ class App extends Component { if (userOnServer === "offline") return; if (userOnServer) sendSubmissions(); if (!userOnServer) { - this.setState({ user: undefined }); + if (this.state.user) { + console.log("setting state user because user is newly undefined"); + this.setState({ user: undefined }); + } saveUser(undefined); return; } @@ -291,7 +293,8 @@ class App extends Component { ...userOnServer, userTextOptionsRecord, }; - if (!objIsEqual(prevUser, user)) { + if (!userObjIsEqual(prevUser, user)) { + console.log("setting state user because something is different about the user") this.setState({ user }); saveUser(user); } @@ -409,7 +412,7 @@ class App extends Component { } } - private checkUserCronJob = new CronJob("1/3 * * * * *", () => { + private checkUserCronJob = new CronJob("1/20 * * * * *", () => { this.handleLoadUser(); }) diff --git a/website/src/lib/misc-helpers.ts b/website/src/lib/misc-helpers.ts index 96d5e2e..0042db1 100644 --- a/website/src/lib/misc-helpers.ts +++ b/website/src/lib/misc-helpers.ts @@ -1,4 +1,15 @@ +import * as AT from "../types/account-types"; + export function objIsEqual(obj1: any, obj2: any): boolean { if (!obj1 || !obj2) return false; return JSON.stringify(obj1) === JSON.stringify(obj2); +} + +export function userObjIsEqual(u1: AT.LingdocsUser | undefined, u2: AT.LingdocsUser | undefined): boolean { + if (!u1 || !u2) return false; + function removeFrills(u: AT.LingdocsUser) { + const { lastActive, _rev, ...rest } = u; + return rest; + } + return objIsEqual(removeFrills(u1), removeFrills(u2)); } \ No newline at end of file