feat(ecommerce): selector Departamento/Ciudad con DIVIPOLA real en checkout
Reemplaza los inputs de texto libre de Ciudad/Departamento por dos selects en cascada, poblados con el dataset oficial de DIVIPOLA (33 departamentos + 1123 municipios, fuente proyecto26/colombia, verificado contra la codificacion real del DANE antes de incorporarlo -- id 5001 = Medellin, departmentId 5 = Antioquia, etc.). Sin dependencia npm nueva (JSON estatico + helper propio). Se guarda el id DIVIPOLA seleccionado en el estado del formulario, no solo el nombre -- EnvioClick (la integracion de envios real que reemplazara la tarifa fija de este ADR) va a necesitar identificar la ciudad sin ambiguedad, y las transportadoras colombianas referencian ciudades por este codigo. El nombre derivado del id sigue siendo lo que se manda a Medusa (shipping_address espera texto, no cambia el contrato existente).
This commit is contained in:
1 parent
7dc54a1d20
commit
61024b8f31
4 files changed
+1251
-8
No files matched your search
@@ -0,0 +1,32 @@
|
||||
import departamentosData from "./co-departamentos.json";
|
||||
import ciudadesData from "./co-ciudades.json";
|
||||
|
||||
// Dataset real de DIVIPOLA (Division Politico-Administrativa de Colombia,
|
||||
// codigos oficiales del DANE) -- 33 departamentos + 1123 municipios,
|
||||
// fuente: proyecto26/colombia (github.com/proyecto26/colombia), verificado
|
||||
// contra la codificacion oficial antes de incorporarlo (ej. id 5001 =
|
||||
// Medellin, departmentId 5 = Antioquia).
|
||||
//
|
||||
// Se usan los codigos (no solo los nombres) porque EnvioClick -- la
|
||||
// integracion de envios real que reemplazara la tarifa fija de ADR 0009 --
|
||||
// va a necesitar identificar la ciudad de forma inequivoca, y las
|
||||
// transportadoras colombianas en general referencian ciudades por su
|
||||
// codigo DIVIPOLA, no por texto libre.
|
||||
|
||||
export interface Departamento {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface Ciudad {
|
||||
id: number;
|
||||
name: string;
|
||||
departmentId: number;
|
||||
}
|
||||
|
||||
export const departamentos: Departamento[] = departamentosData.data;
|
||||
export const ciudades: Ciudad[] = ciudadesData.data;
|
||||
|
||||
export function ciudadesPorDepartamento(departmentId: number): Ciudad[] {
|
||||
return ciudades.filter((ciudad) => ciudad.departmentId === departmentId);
|
||||
}
|
||||
Reference in new issue
Block a user