Compare commits

...

2 Commits

Author SHA1 Message Date
e4c01b8051 remove query refresh 2025-04-03 13:59:51 +01:00
c450cfc7da fix editor connection loop 2025-04-03 13:51:45 +01:00
4 changed files with 25 additions and 23 deletions

View File

@ -34,6 +34,7 @@
"jotai": "^2.12.1",
"jotai-optics": "^0.4.0",
"js-cookie": "^3.0.5",
"jwt-decode": "^4.0.0",
"katex": "0.16.21",
"lowlight": "^3.2.0",
"mermaid": "^11.4.1",

View File

@ -19,8 +19,8 @@ export function useCollabToken(): UseQueryResult<ICollabToken, Error> {
queryKey: ["collab-token"],
queryFn: () => getCollabToken(),
staleTime: 20 * 60 * 60 * 1000, //20hrs
refetchInterval: 12 * 60 * 60 * 1000, // 12hrs
refetchIntervalInBackground: true,
//refetchInterval: 12 * 60 * 60 * 1000, // 12hrs
//refetchIntervalInBackground: true,
refetchOnMount: true,
//@ts-ignore
retry: (failureCount, error) => {

View File

@ -52,6 +52,7 @@ import { IPage } from "@/features/page/types/page.types.ts";
import { useParams } from "react-router-dom";
import { extractPageSlugId } from "@/lib";
import { FIVE_MINUTES } from "@/lib/constants.ts";
import { jwtDecode } from "jwt-decode";
interface PageEditorProps {
pageId: string;
@ -83,7 +84,6 @@ export default function PageEditor({
const documentState = useDocumentVisibility();
const [isCollabReady, setIsCollabReady] = useState(false);
const { pageSlug } = useParams();
const collabRetryCount = useRef(0);
const slugId = extractPageSlugId(pageSlug);
const localProvider = useMemo(() => {
@ -105,13 +105,11 @@ export default function PageEditor({
connect: false,
preserveConnection: false,
onAuthenticationFailed: (auth: onAuthenticationFailedParameters) => {
collabRetryCount.current = collabRetryCount.current + 1;
refetchCollabToken().then(() => {
collabRetryCount.current = 0;
});
if (collabRetryCount.current > 20) {
window.location.reload();
const payload = jwtDecode(collabQuery?.token);
const now = Date.now().valueOf() / 1000;
const isTokenExpired = now >= payload.exp;
if (isTokenExpired) {
refetchCollabToken();
}
},
onStatus: (status) => {
@ -265,19 +263,13 @@ export default function PageEditor({
documentState === "visible" &&
remoteProvider?.status === WebSocketStatus.Disconnected
) {
const reconnectTimeout = setTimeout(
() => {
remoteProvider.connect();
resetIdle();
},
collabRetryCount.current > 2 ? 3000 : 0,
);
setIsCollabReady(true);
return () => clearTimeout(reconnectTimeout);
resetIdle();
remoteProvider.connect();
setTimeout(() => {
setIsCollabReady(true);
}, 600);
}
}, [isIdle, documentState, remoteProvider?.status]);
}, [isIdle, documentState, remoteProvider]);
const isSynced = isLocalSynced && isRemoteSynced;
@ -286,7 +278,7 @@ export default function PageEditor({
if (
!isCollabReady &&
isSynced &&
remoteProvider.status === WebSocketStatus.Connected
remoteProvider?.status === WebSocketStatus.Connected
) {
setIsCollabReady(true);
}

9
pnpm-lock.yaml generated
View File

@ -272,6 +272,9 @@ importers:
js-cookie:
specifier: ^3.0.5
version: 3.0.5
jwt-decode:
specifier: ^4.0.0
version: 4.0.0
katex:
specifier: 0.16.21
version: 0.16.21
@ -6612,6 +6615,10 @@ packages:
jws@3.2.2:
resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
jwt-decode@4.0.0:
resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
engines: {node: '>=18'}
katex@0.16.21:
resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==}
hasBin: true
@ -16534,6 +16541,8 @@ snapshots:
jwa: 1.4.1
safe-buffer: 5.2.1
jwt-decode@4.0.0: {}
katex@0.16.21:
dependencies:
commander: 8.3.0