atproto explorer pdsls.dev
atproto tool

fix navigation reloads

Changed files
+16 -15
src
+7 -5
src/components/account.tsx
···
import { createSignal, onMount, For, Show } from "solid-js";
import Tooltip from "./tooltip.jsx";
import { deleteStoredSession, getSession, OAuthUserAgent } from "@atcute/oauth-browser-client";
-
import { agent, Login, loginState, setLoginState } from "./login.jsx";
+
import { agent, Login, loginState, retrieveSession, setLoginState } from "./login.jsx";
import { Did } from "@atcute/lexicons";
import { resolveDidDoc } from "../utils/api.js";
import { createStore } from "solid-js/store";
import { Client, CredentialManager } from "@atcute/client";
import { Modal } from "./modal.jsx";
+
import { useNavigate } from "@solidjs/router";
const AccountManager = () => {
+
const navigate = useNavigate();
const [openManager, setOpenManager] = createSignal(false);
const [sessions, setSessions] = createStore<Record<string, string | undefined>>();
const [avatar, setAvatar] = createSignal<string>();
onMount(async () => {
+
await retrieveSession();
+
if (loginState() && location.pathname === "/") navigate(`/at://${agent.sub}`);
+
const storedSessions = localStorage.getItem("atcute-oauth:sessions");
if (storedSessions) {
const sessionDids = Object.keys(JSON.parse(storedSessions)) as Did[];
···
deleteStoredSession(did);
}
setSessions(did, undefined);
-
if (currentSession === did) {
-
setLoginState(false);
-
window.location.reload;
-
}
+
if (currentSession === did) setLoginState(false);
};
const getAvatar = async (did: Did) => {
+3 -2
src/components/create.tsx
···
import * as monaco from "monaco-editor";
import { theme } from "../components/settings.jsx";
import Tooltip from "./tooltip.jsx";
-
import { useParams } from "@solidjs/router";
+
import { useNavigate, useParams } from "@solidjs/router";
import { remove } from "@mary/exif-rm";
import { TextInput } from "./text-input.jsx";
import { Modal } from "./modal.jsx";
export const RecordEditor = (props: { create: boolean; record?: any }) => {
+
const navigate = useNavigate();
const params = useParams();
const [openDialog, setOpenDialog] = createSignal(false);
const [notice, setNotice] = createSignal("");
···
return;
}
setOpenDialog(false);
-
window.location.href = `/${res.data.uri}`;
+
navigate(`/${res.data.uri}`);
};
const editRecord = async (formData: FormData) => {
+3 -6
src/layout.tsx
···
import { createEffect, ErrorBoundary, onMount, Show, Suspense } from "solid-js";
-
import { A, RouteSectionProps, useLocation, useNavigate, useParams } from "@solidjs/router";
-
import { agent, loginState, retrieveSession } from "./components/login.jsx";
+
import { A, RouteSectionProps, useLocation, useParams } from "@solidjs/router";
+
import { loginState } from "./components/login.jsx";
import { RecordEditor } from "./components/create.jsx";
import Tooltip from "./components/tooltip.jsx";
import { NavBar } from "./components/navbar.jsx";
···
const Layout = (props: RouteSectionProps<unknown>) => {
const params = useParams();
const location = useLocation();
-
const navigate = useNavigate();
-
onMount(async () => {
+
onMount(() => {
if (location.search.includes("kawaii=true")) localStorage.kawaii = "true";
-
await retrieveSession();
-
if (loginState() && location.pathname === "/") navigate(`/at://${agent.sub}`);
});
createEffect(async () => {
+3 -2
src/views/record.tsx
···
import { CredentialManager, Client } from "@atcute/client";
-
import { useParams } from "@solidjs/router";
+
import { useNavigate, useParams } from "@solidjs/router";
import { createSignal, onMount, Show } from "solid-js";
import { Backlinks } from "../components/backlinks.jsx";
···
import { Modal } from "../components/modal.jsx";
export const RecordView = () => {
+
const navigate = useNavigate();
const params = useParams();
const [record, setRecord] =
createSignal<InferXRPCBodyOutput<ComAtprotoRepoGetRecord.mainSchema["output"]>>();
···
rkey: params.rkey,
},
});
-
window.location.href = `/at://${params.repo}/${params.collection}`;
+
navigate(`/at://${params.repo}/${params.collection}`);
};
const checkUri = (uri: string) => {