EVSESList uses React hooks (useState, useEffect, useOne) but was missing
the 'use client' directive, causing it to be treated as a Server Component
where hooks are not available.
- page.tsx: Added evses relationship to Server Component query
- charging.station.detail.card.tsx: Replaced VariableAttributes alias with real evses relationship
- evses.ts: Fixed stationId type from Int! to String! (2 queries)
- evse.dto.tsx: Removed ocppConnectionName (not a DB column on Evses)
- evses.upsert.tsx: Removed ocppConnectionName prop, added String(stationId) coercion
- evses.list.tsx: Fixed id type to string, extract ChargingStations[0] from GraphQL response
- charging.station.detail.tabs.card.tsx: Fixed id type to string
Root cause: Next.js URL params are always strings, but Locations.id
is integer in PostgreSQL. Hasura/PostgreSQL cannot compare varchar
with integer without explicit cast.
Fix: Parse params.id to integer in LocationsDetail component before
passing to Refine useOne().
- Replace all Google Map components with Leaflet OSM alternatives
- Add osm-map.tsx with dynamic Leaflet import (SSR-safe)
- Use CDN for Leaflet CSS to avoid Next.js CSS import issues
- Update types.tsx to remove google.maps dependencies
- Replace Google Places autocomplete with Nominatim OSM
- Replace Google Geocoding with Nominatim OSM
- Add GPS coordinates for all 15 Martinique charging station locations
- Update next.config.mjs: ignoreBuildErrors for TypeScript loops
- Update package.json: use 'next build' instead of 'refine build'
- Add .dockerignore for faster Docker builds
- Fix map centering on Martinique (default: 14.6415, -61.0242)
- Upgrade Grafana from 10.2.0 to 11.3.0 (fixes ExecuteQuery panic with postgres plugin)
- Create complete dashboard with timeseries, table and geomap panels
- Clone Grid Singularity repos (gsy-e, gsy-framework, gsy-e-sdk)
- All panels now display data correctly