@datosgeo-atdt/geo-ui 0.11.2 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -761,6 +761,7 @@ function App() {
761
761
  | `className` | `string` | `""` | Clases CSS adicionales |
762
762
  | `showIndex` | `boolean` | `false` | Mostrar columna con índice numérico |
763
763
  | `indexLabel` | `string` | `"#"` | Etiqueta para la columna de índice |
764
+ | `onRowClick` | `(row: Record<string, any>, index: number) => void` | `undefined` | Callback que se ejecuta al hacer click en una fila. Recibe los datos de la fila y su índice |
764
765
 
765
766
  #### Tipo DataTableColumn
766
767
 
@@ -863,6 +864,83 @@ function App() {
863
864
  }
864
865
  ```
865
866
 
867
+ #### Ejemplo con interactividad bidireccional (Tabla ↔ Mapa)
868
+
869
+ Crea interacción entre la tabla y el mapa: click en tabla hace zoom en mapa, click en mapa cambia datos de tabla:
870
+
871
+ ```tsx
872
+ import { MapaPMTiles, DataTable } from '@atdt/geo-ui';
873
+ import { useState } from 'react';
874
+ import '@atdt/geo-ui/style.css';
875
+
876
+ function App() {
877
+ const [nivel, setNivel] = useState<'entidad' | 'municipio'>('entidad');
878
+ const [selectedEnt, setSelectedEnt] = useState<string | null>(null);
879
+
880
+ return (
881
+ <div style={{ display: 'flex', width: '100%', height: '100vh' }}>
882
+ {/* Mapa con click handler */}
883
+ <MapaPMTiles
884
+ csvPath={nivel === 'entidad' ? '/prueba_entidad.csv' : `/cdmx_prueba.csv`}
885
+ fitToIds={selectedEnt ? [selectedEnt] : undefined}
886
+ mode="jenks"
887
+ showMunicipios={nivel === 'municipio'}
888
+ enablePopup={true}
889
+ />
890
+
891
+ {/* Tabla con click handler */}
892
+ <DataTable
893
+ csvPath={nivel === 'entidad' ? '/prueba_entidad.csv' : `/cdmx_prueba.csv`}
894
+ columns={
895
+ nivel === 'entidad'
896
+ ? [
897
+ { key: 'entidad', label: 'Entidad' },
898
+ { key: 'total', label: 'Total' }
899
+ ]
900
+ : [
901
+ { key: 'municipio', label: 'Municipio' },
902
+ { key: 'valor', label: 'Valor' }
903
+ ]
904
+ }
905
+ onRowClick={(row) => {
906
+ if (nivel === 'entidad') {
907
+ // Click en tabla de entidades → zoom a esa entidad y muestra municipios
908
+ setSelectedEnt(row.cvegeo);
909
+ setNivel('municipio');
910
+ }
911
+ }}
912
+ />
913
+
914
+ {/* Botón para regresar */}
915
+ {nivel === 'municipio' && (
916
+ <button
917
+ style={{
918
+ position: 'absolute',
919
+ top: 20,
920
+ left: 20,
921
+ zIndex: 1000,
922
+ padding: '10px 20px'
923
+ }}
924
+ onClick={() => {
925
+ setNivel('entidad');
926
+ setSelectedEnt(null);
927
+ }}
928
+ >
929
+ ← Regresar a entidades
930
+ </button>
931
+ )}
932
+ </div>
933
+ );
934
+ }
935
+ ```
936
+
937
+ **Flujo de interacción:**
938
+ 1. **Vista inicial**: Muestra tabla con entidades (`prueba_entidad.csv`)
939
+ 2. **Click en fila de tabla**: Cambia a vista de municipios de esa entidad
940
+ 3. **Mapa hace zoom**: Automáticamente hacia la entidad seleccionada
941
+ 4. **Tabla cambia**: Muestra datos municipales (`cdmx_prueba.csv`)
942
+ 5. **Botón "Regresar"**: Vuelve a la vista de entidades
943
+
866
944
  ### Formato de Números
867
945
 
868
946
  Los números se formatean automáticamente con separadores de miles usando el formato mexicano:
@@ -13,6 +13,7 @@ export interface DataTableProps {
13
13
  className?: string;
14
14
  showIndex?: boolean;
15
15
  indexLabel?: string;
16
+ onRowClick?: (row: Record<string, any>, index: number) => void;
16
17
  }
17
18
  declare const DataTable: React.FC<DataTableProps>;
18
19
  export default DataTable;
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAqKvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAuKvC,CAAC;AAEF,eAAe,SAAS,CAAC"}