Sergey Krylov cfadb2adbe feat: migrate from react-router-dom to @tanstack/react-router (code-first)
- Create code-first route tree in src/app/routing/routeTree.tsx
- Replace ProtectedRoute with beforeLoad auth guards
- Add useSearchParamsCompat for URLSearchParams access
- Update App.tsx, layouts, and all page/widget imports
- Add frontend tooling: biome, prettier, env config
- Update all tests for TanStack Router compatibility
- Remove react-router-dom dependency, @tanstack/router-plugin
- Consolidate biome config at root level
2026-06-23 06:51:48 +03:00

74 lines
2.2 KiB
TypeScript

import '@testing-library/jest-dom'
import { server } from './server'
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }))
afterEach(() => server.resetHandlers())
afterAll(() => server.close())
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: (query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: () => {},
removeListener: () => {},
addEventListener: () => {},
removeEventListener: () => {},
dispatchEvent: () => false,
}),
})
// Prevent lightweight-charts animation frame callbacks in jsdom
window.requestAnimationFrame = () => 0
window.cancelAnimationFrame = () => {}
// Mock canvas 2D context to prevent jsdom "Not implemented" warnings from lightweight-charts
HTMLCanvasElement.prototype.getContext = ((contextId: string) => {
if (contextId === '2d') {
return {
canvas: {} as HTMLCanvasElement,
fillRect: () => {},
clearRect: () => {},
getImageData: () => ({ data: [], width: 0, height: 0 }),
putImageData: () => {},
createImageData: () => ({ width: 0, height: 0, data: [] }),
setTransform: () => {},
drawImage: () => {},
save: () => {},
fillText: () => {},
restore: () => {},
beginPath: () => {},
moveTo: () => {},
lineTo: () => {},
closePath: () => {},
stroke: () => {},
translate: () => {},
scale: () => {},
rotate: () => {},
arc: () => {},
fill: () => {},
measureText: () => ({ width: 0 }),
transform: () => {},
rect: () => {},
clip: () => {},
createLinearGradient: () => ({ addColorStop: () => {} }),
createRadialGradient: () => ({ addColorStop: () => {} }),
createPattern: () => ({ setTransform: () => {} }),
font: '',
fillStyle: '',
strokeStyle: '',
lineWidth: 1,
lineCap: 'butt' as CanvasLineCap,
lineJoin: 'miter' as CanvasLineJoin,
globalAlpha: 1,
globalCompositeOperation: 'source-over' as GlobalCompositeOperation,
shadowBlur: 0,
shadowColor: '',
shadowOffsetX: 0,
shadowOffsetY: 0,
} as unknown as CanvasRenderingContext2D
}
return null
}) as typeof HTMLCanvasElement.prototype.getContext