1const BASE_URL = '/sp_api.aspx?ref=' 2const SITIOS_ESPECIFICOS = [ 3 'Sala de Prensa', 4] 5 6const LISTAS_ESPECIFICAS = [ 7 { 8 nombre: 'Acordeon', 9 campos: [ 10 'Title', 11 'Pagina' 12 ] 13 } 14] 15 16/** 17 * Obtiene los subsitios del portal 18 * @returns {Promise<Array>} Lista de subsitios 19 */ 20 21const obtenerSubsitios = async () => { 22 const response = await fetch(BASE_URL + 'get-subsites'); 23 if (!response.ok) { 24 throw new Error('Error al obtener los subsitios'); 25 } 26 let data = await response.json(); 27 data = data.data || [] 28 return data; 29 30} 31 32const obtenerMicrositios = (sitios, actual) => { 33 if (!Array.isArray(sitios) || !actual) return []; 34 35 return sitios.filter(sitio => 36 sitio.Url && 37 sitio.Url.startsWith(actual) && 38 sitio.Url !== actual 39 ); 40} 41 42 43const obtenerSubsitiosPrimerNivelEspecificos = (subsitios) => { 44 // Filtrar solo los subsitios de primer nivel 45 let sites = subsitios.filter(subsitio => { 46 // Cuenta la cantidad de "/" en la URL 47 // Ejemplo: "/Geoportal/" => 2 barras 48 return subsitio.Url.split('/').filter(Boolean).length === 2; 49 }); 50 51 // Agregar subsitios especÃficos 52 for (const nombre of SITIOS_ESPECIFICOS) { 53 const subsitio = obtenerSubsitioEspecifico(subsitios, nombre); 54 if (subsitio) { 55 sites.push(subsitio); 56 } 57 } 58 return sites; 59} 60 61/** 62 * Obtiene un subsitio especÃfico por su nombre 63 * Hace parte del mapeo de sitios con paginas de primer nivel y especificas 64 * @param {Array} subsitios - Lista de subsitios 65 * @param {string} nombreSubsitio - Nombre del subsitio a buscar 66 * 67 * @return {Object|null} Objeto del subsitio encontrado o null si no se encuentra 68 */ 69const obtenerSubsitioEspecifico = (subsitios, nombreSubsitio) => { 70 const subsitio = subsitios.find(s => s.Title.toLowerCase() === nombreSubsitio.toLowerCase()); 71 if (!subsitio) { 72 return null; 73 } 74 return subsitio; 75} 76 77/** 78 * Obtiene las páginas de un subsitio especÃfico 79 * Hace parte del mapeo de sitios con paginas de primer nivel y especificas 80 * @param {string} subsitio - Nombre del subsitio 81 * @return {Promise<Array>} Lista de páginas del subsitio 82 */ 83const obtenerPaginasSubsitio = async (subsitio) => { 84 const body = { 85 site: subsitio, 86 fields: [ 87 'Title', 88 'FileRef', 89 'Comments' 90 ], 91 } 92 93 const response = await fetch(BASE_URL + 'get-pages', { 94 method: 'POST', 95 headers: { 96 'Content-Type': 'application/json' 97 }, 98 body: JSON.stringify(body) 99 }); 100 101 if (!response.ok) { 102 throw new Error('Error al obtener las páginas del subsitio'); 103 } 104 105 let data = await response.json(); 106 data = data.data || []; 107 108 return data 109} 110 111/** 112 * 113 * @param {*} subsitio 114 * @returns 115 */ 116const obtenerPaginaPrincipalSubsitio = async (subsitio) => { 117 const body = { 118 site: subsitio, 119 fields: [ 120 'Title', 121 'FileRef' 122 ], 123 } 124 125 const response = await fetch(BASE_URL + 'get-principal-page', { 126 method: 'POST', 127 headers: { 128 'Content-Type': 'application/json' 129 }, 130 body: JSON.stringify(body) 131 }); 132 133 if (!response.ok) { 134 throw new Error('Error al obtener la página principal del subsitio'); 135 } 136 137 let data = await response.json(); 138 data = data.data || {}; 139 140 return data 141} 142 143const obtenerListas = async (subsitio) => { 144 const body = { 145 site: subsitio, 146 fields: ['Title'] 147 }; 148 149 const response = await fetch(BASE_URL + 'get-lists', { 150 method: 'POST', 151 headers: { 152 'Content-Type': 'application/json' 153 }, 154 body: JSON.stringify(body) 155 }); 156 157 if (!response.ok) { 158 console.warn(`No se pudo obtener las listas del sitio "${subsitio}"`); 159 return []; 160 } 161 162 const data = await response.json(); 163 return data.data || []; 164}; 165 166/** 167 * Consulta solo listas especÃficas enviadas en el body 168 * @param {string} subsitio - URL del subsitio 169 * @param {Array<string>} nombresListas - Nombres de las listas a consultar 170 * @returns {Promise<Array>} Datos de las listas especÃficas 171 */ 172 173const obtenerElementosLista = async (subsitio, lista, campos) => { 174 const body = { 175 site: subsitio, 176 list: lista, 177 fields: campos 178 }; 179 180 const response = await fetch(BASE_URL + 'get-list-items', { 181 method: 'POST', 182 headers: { 183 'Content-Type': 'application/json' 184 }, 185 body: JSON.stringify(body) 186 });
187 188 if (!response.ok) { 189 console.warn(`No se pudieron obtener las listas especÃficas del sitio "${subsitio}"`); 190 return []; 191 } 192 193 const data = await response.json(); 194 return data.data || []; 195}; 196 197 198export const api = { 199 obtenerSubsitios, 200 obtenerMicrositios, 201 obtenerPaginasSubsitio, 202 obtenerSubsitiosPrimerNivelEspecificos, 203 obtenerPaginaPrincipalSubsitio, 204 obtenerListas, 205 obtenerElementosLista, 206 LISTAS_ESPECIFICAS 207}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.