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).
33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
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);
|
|
}
|