feat: add city/state/country to complex, new settings page with sidebar, and Biome linting

- Added city, state, and country optional fields to Complex model
- Updated onboarding to include optional location fields
- Created new settings page with sidebar navigation (Datos del Complejo, Canchas)
- Replaced ESLint with Biome for frontend and backend linting
- Added parallel dev script with concurrently
- Migrated register-routes to use direct app.route() pattern
This commit is contained in:
Jose Selesan
2026-04-10 15:36:15 -03:00
parent 77004b14b0
commit 9ee98a4cb4
129 changed files with 2929 additions and 3186 deletions

View File

@@ -1,45 +1,45 @@
import { StrictMode, useEffect } from 'react'
import { createRoot } from 'react-dom/client'
import { QueryClientProvider } from '@tanstack/react-query'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import { RouterProvider } from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/router-devtools'
import { AuthProvider, useAuth } from '@/lib/auth'
import { apiClient, configureApiClient } from '@/lib/api-client'
import { queryClient } from '@/lib/query-client'
import { ThemeProvider } from '@/lib/theme'
import { router } from './router'
import './index.css'
import { apiClient, configureApiClient } from '@/lib/api-client';
import { AuthProvider, useAuth } from '@/lib/auth';
import { queryClient } from '@/lib/query-client';
import { ThemeProvider } from '@/lib/theme';
import { QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { RouterProvider } from '@tanstack/react-router';
import { TanStackRouterDevtools } from '@tanstack/router-devtools';
import { StrictMode, useEffect } from 'react';
import { createRoot } from 'react-dom/client';
import { router } from './router';
import './index.css';
function AppRouter() {
const auth = useAuth()
const auth = useAuth();
useEffect(() => {
router.invalidate()
}, [auth.isAuthenticated, auth.loading, auth.user])
router.invalidate();
}, [auth.isAuthenticated, auth.loading, auth.user]);
useEffect(() => {
configureApiClient({
onForbidden: async () => {
if (!auth.isAuthenticated) {
return
return;
}
await auth.signOut()
await router.navigate({ to: '/login' })
await auth.signOut();
await router.navigate({ to: '/login' });
},
onError: (error) => {
console.error('[API]', error)
console.error('[API]', error);
},
})
}, [auth])
});
}, [auth]);
if (auth.loading) {
return (
<main className="mx-auto flex min-h-screen w-full max-w-6xl items-center justify-center px-6">
<p className="text-sm text-muted-foreground">Validando sesión...</p>
</main>
)
);
}
return (
@@ -47,7 +47,7 @@ function AppRouter() {
<RouterProvider router={router} context={{ auth, api: apiClient }} />
{import.meta.env.DEV && <TanStackRouterDevtools router={router} />}
</>
)
);
}
createRoot(document.getElementById('root')!).render(
@@ -60,5 +60,5 @@ createRoot(document.getElementById('root')!).render(
</AuthProvider>
</QueryClientProvider>
</ThemeProvider>
</StrictMode>,
)
</StrictMode>
);