@datosgeo-atdt/geo-ui 0.11.2 → 0.11.4

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,91 @@ function App() {
863
864
  }
864
865
  ```
865
866
 
867
+ #### Ejemplo con interactividad bidireccional (Tabla ↔ Mapa)
868
+
869
+ Crea interacción completa entre la tabla y el mapa usando `onRowClick` y `onFeatureClick`:
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
+ onFeatureClick={(featureId, properties) => {
890
+ // Click en mapa → cambia tabla a municipios de esa entidad
891
+ if (nivel === 'entidad') {
892
+ setSelectedEnt(featureId);
893
+ setNivel('municipio');
894
+ }
895
+ }}
896
+ />
897
+
898
+ {/* Tabla con click handler */}
899
+ <DataTable
900
+ csvPath={nivel === 'entidad' ? '/prueba_entidad.csv' : `/cdmx_prueba.csv`}
901
+ columns={
902
+ nivel === 'entidad'
903
+ ? [
904
+ { key: 'entidad', label: 'Entidad' },
905
+ { key: 'total', label: 'Total' }
906
+ ]
907
+ : [
908
+ { key: 'municipio', label: 'Municipio' },
909
+ { key: 'valor', label: 'Valor' }
910
+ ]
911
+ }
912
+ onRowClick={(row) => {
913
+ // Click en tabla → hace zoom en mapa a esa entidad
914
+ if (nivel === 'entidad') {
915
+ setSelectedEnt(row.cvegeo);
916
+ setNivel('municipio');
917
+ }
918
+ }}
919
+ />
920
+
921
+ {/* Botón para regresar */}
922
+ {nivel === 'municipio' && (
923
+ <button
924
+ style={{
925
+ position: 'absolute',
926
+ top: 20,
927
+ left: 20,
928
+ zIndex: 1000,
929
+ padding: '10px 20px'
930
+ }}
931
+ onClick={() => {
932
+ setNivel('entidad');
933
+ setSelectedEnt(null);
934
+ }}
935
+ >
936
+ ← Regresar a entidades
937
+ </button>
938
+ )}
939
+ </div>
940
+ );
941
+ }
942
+ ```
943
+
944
+ **Flujo de interacción bidireccional:**
945
+ 1. **Vista inicial**: Muestra tabla con entidades (`prueba_entidad.csv`) y mapa de México
946
+ 2. **Click en MAPA**: Hace zoom a la entidad y cambia tabla a municipios
947
+ 3. **Click en TABLA**: Hace zoom en el mapa y cambia tabla a municipios
948
+ 4. **Mapa hace zoom**: Automáticamente hacia la entidad seleccionada
949
+ 5. **Tabla cambia**: Muestra datos municipales (`cdmx_prueba.csv`)
950
+ 6. **Botón "Regresar"**: Vuelve a la vista de entidades
951
+
866
952
  ### Formato de Números
867
953
 
868
954
  Los números se formatean automáticamente con separadores de miles usando el formato mexicano:
@@ -958,6 +1044,7 @@ Puedes sobrescribir los estilos usando la clase `className`:
958
1044
  | `joinCsvKeyMunicipios` | `string` | `"cvegeo"` | Campo del CSV municipal para hacer el join (por defecto usa cvegeo de 5 dígitos) |
959
1045
  | `fieldMunicipios` | `string` | `field` | Campo del CSV municipal con los valores a visualizar (por defecto usa el mismo `field` de entidades) |
960
1046
  | `modeMunicipios` | `"boolean" \| "jenks"` | `mode` | Modo de estilo para municipios (permite usar diferente clasificación que entidades) |
1047
+ | `onFeatureClick` | `(featureId: string, properties: any) => void` | `undefined` | Callback que se ejecuta al hacer click en una feature del mapa. Recibe el ID de la feature y sus propiedades. Solo funciona cuando hay 2 o más entidades en `fitToIds` |
961
1048
 
962
1049
  ## Modos de Estilo
963
1050
 
@@ -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"}
@@ -26,6 +26,7 @@ export interface MapaPMTilesProps {
26
26
  joinCsvKeyMunicipios?: string;
27
27
  fieldMunicipios?: string;
28
28
  modeMunicipios?: 'boolean' | 'jenks';
29
+ onFeatureClick?: (featureId: string, properties: any) => void;
29
30
  }
30
31
  export declare const MapaPMTiles: React.FC<MapaPMTilesProps>;
31
32
  //# sourceMappingURL=MapaPMTiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapaPMTiles.d.ts","sourceRoot":"","sources":["../../src/components/MapaPMTiles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,OAAO,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACtC;AAmDD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqqBlD,CAAC"}
1
+ {"version":3,"file":"MapaPMTiles.d.ts","sourceRoot":"","sources":["../../src/components/MapaPMTiles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,OAAO,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAErC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/D;AAmDD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA2qBlD,CAAC"}