chore(toolchain): upgrade Bun to 1.4.4 and migrate console to TanStack Router
This commit is contained in:
1 parent
b44ebc2ba1
commit
3b9376c75a
134 files changed
+893
-692
No files matched your search
@@ -0,0 +1,56 @@
|
||||
import { createMemoryHistory, createRootRoute, createRoute, createRouter } from "@tanstack/react-router";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
import { navigateTo, parseUrlSearch, resolveTo, stringifyUrlSearch } from "./router-compat.tsx";
|
||||
|
||||
const current = { pathname: "/console/files", search: "?view=trash", hash: "#old" };
|
||||
|
||||
afterEach(() => vi.unstubAllGlobals());
|
||||
|
||||
describe("路由目标兼容", () => {
|
||||
it("对象目标不继承未指定的查询和锚点", () => {
|
||||
expect(resolveTo({ pathname: "/console/settings", hash: "#account/totp" }, current)).toBe(
|
||||
"/console/settings#account/totp",
|
||||
);
|
||||
expect(resolveTo({ search: "?view=all" }, current)).toBe("/console/files?view=all");
|
||||
});
|
||||
|
||||
it("仅有锚点的字符串目标保留当前查询", () => {
|
||||
expect(resolveTo("#details", current)).toBe("/console/files?view=trash#details");
|
||||
});
|
||||
|
||||
it("重复定位同一设置字段生成新的导航 key,后退恢复原来的业务 state", async () => {
|
||||
vi.stubGlobal("window", { origin: "http://localhost" });
|
||||
vi.stubGlobal("crypto", undefined);
|
||||
const root = createRootRoute();
|
||||
const settings = createRoute({ getParentRoute: () => root, path: "/console/settings" });
|
||||
const history = createMemoryHistory({ initialEntries: ["/console/settings"] });
|
||||
const router = createRouter({
|
||||
routeTree: root.addChildren([settings]),
|
||||
history,
|
||||
isServer: false,
|
||||
parseSearch: parseUrlSearch,
|
||||
stringifySearch: stringifyUrlSearch,
|
||||
});
|
||||
const unsubscribe = history.subscribe(() => void router.load());
|
||||
try {
|
||||
await router.load();
|
||||
const target = new URL("/console/settings?tag=one&tag=two#account/totp", window.origin);
|
||||
const state = { field: "account.username", sheetFrom: "/console/settings" };
|
||||
await navigateTo(router, target, { state, preventScrollReset: true });
|
||||
const firstKey = router.state.location.state.__TSR_key;
|
||||
const firstIndex = history.location.state.__TSR_index;
|
||||
await navigateTo(router, target, { state, preventScrollReset: true });
|
||||
expect(router.state.location.state.__TSR_key).not.toBe(firstKey);
|
||||
expect(history.location.state.__TSR_index).toBe(firstIndex + 1);
|
||||
expect(router.state.location.state).toMatchObject(state);
|
||||
expect(router.state.location.search).toEqual({ tag: ["one", "two"] });
|
||||
expect(router.state.location.hash).toBe("account/totp");
|
||||
history.back();
|
||||
await router.load();
|
||||
expect(router.state.location.state.__TSR_key).toBe(firstKey);
|
||||
expect(router.state.location.state).toMatchObject(state);
|
||||
} finally {
|
||||
unsubscribe();
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user