1// services/PressService.js 2import { apiClient } from './core/ApiClient.js'; 3import { PressMock } from '../data/mocks/PressMock.js'; 4import { AppConfig } from '../config/AppConfig.js'; 5import { sanitizerService } from "./SanitizerService.js"; 6import { renderBlock } from '../htmlrenderer/htmlrenderer.js'; 7import { i18n } from "./I18nService.js"; 8import { mediaService } from './MediaService.js'; 9 10class PressService { 11 12 /** 13 * Helper privado para obtener la rama del mock según el idioma actual. 14 */ 15 _getLocalizedMock() { 16 const lang = i18n.getCurrentLocale(); 17 return PressMock[lang] || PressMock['es']; 18 } 19 20 /** 21 * Obtiene todos los datos de la sección de prensa (Notas, Clipping, Contacto, Kit). 22 */ 23 async getPressData() { 24 const localizedMock = this._getLocalizedMock(); 25 26 if (AppConfig.USE_REMOTE_API) { 27 try { 28 let response = await apiClient.get('/api/press/overview', localizedMock); 29 let data = response.data ? response.data : response; 30 31 data = sanitizerService.sanitizeResponse(data); 32 33 // Procesar las notas de prensa si vienen en formato de bloques (Strapi) 34 if (data.releases) { 35 data.releases = data.releases.map(pr => { 36 if (pr.content && Array.isArray(pr.content)) { 37 pr.content = renderBlock(pr.content); 38 } 39 return pr; 40 }); 41 } 42 43 return data; 44 } catch (error) { 45 console.error("Error API Press, usando mock como fallback", error); 46 return localizedMock; 47 } 48 } else { 49 return Promise.resolve(localizedMock); 50 } 51 } 52 53 async getPressReleases(queryString = '') { 54 const localizedMock = this._getLocalizedMock().releases; 55 56 if (AppConfig.USE_REMOTE_API) { 57 try { 58 let response = await apiClient.get(`/api/press-releases?filters[sourceType][$eq]=internal&${queryString}`, localizedMock); 59 // let data = response.data ? response.data : response; 60 61 response.data = sanitizerService.sanitizeResponse(response.data); 62 63 // Procesar las notas de prensa si vienen en formato de bloques (Strapi) 64 if (response.data) { 65 response.data = response.data.map(pr => { 66 if (pr.content && Array.isArray(pr.content)) { 67 pr.content = renderBlock(pr.content); 68 } 69 return pr; 70 }); 71 } 72 73 return response; 74 } catch (error) { 75 console.error("Error API Press, usando mock como fallback", error); 76 return localizedMock; 77 } 78 } else { 79 return Promise.resolve(localizedMock); 80 } 81 } 82 83 /** 84 * Obtiene el detalle de una nota de prensa especÃfica. 85 */ 86 async getPressReleaseDetail(id) { 87 const localizedMock = this._getLocalizedMock(); 88 const mockDetail = localizedMock.releases.data.find(r => r.id == id); 89 90 if (AppConfig.USE_REMOTE_API) { 91 try { 92 let response = await apiClient.get(`/api/press-releases/${id}`, mockDetail); 93 let data = response.data ? response.data : response; 94 95 data = sanitizerService.sanitizeResponse(data); 96 97 // Si el contenido viene de Strapi (bloques), lo renderizamos a HTML 98 if (data.content && Array.isArray(data.content)) { 99 data.content = renderBlock(data.content); 100 } 101 102 return data; 103 } catch (error) { 104 console.error(`Error obteniendo nota de prensa ${id}, usando mock`, error); 105 return mockDetail; 106 } 107 } else { 108 return Promise.resolve(mockDetail); 109 } 110 } 111 112 async getClipping(queryString = "") { 113 const localizedMock = this._getLocalizedMock().clipping; 114 115 if (AppConfig.USE_REMOTE_API) { 116 try { 117 let response = await apiClient.get(`/api/press-releases?filters[sourceType][$eq]=clipping&${queryString}`, localizedMock); 118 119 response.data = sanitizerService.sanitizeResponse(response.data); 120 121 return response; 122 } catch (error) { 123 console.error("Error API Press, usando mock como fallback", error); 124 return localizedMock; 125 } 126 } else { 127 return Promise.resolve(localizedMock); 128 } 129 } 130 131 async getDossier() { 132 const localizedMock = this._getLocalizedMock().dossier; 133 134 if (AppConfig.USE_REMOTE_API) { 135 try { 136 let response = await apiClient.get(`/api/dossier`, localizedMock); 137 let data = response.data ? response.data : response; 138 139 data = sanitizerService.sanitizeResponse(data); 140 if (data.url) data.url = mediaService.getImageUrl(data.url); 141 142 return data; 143 } catch (error) { 144 console.error(`Error obteniendo dossier, usando mock`, error); 145 return localizedMock; 146 } 147 } else { 148 return Promise.resolve(localizedMock); 149 } 150 } 151 152 async getGreenBook() { 153 const localizedMock = this._getLocalizedMock().green_book; 154 155 if (AppConfig.USE_REMOTE_API) { 156 try { 157 let response = await apiClient.get(`/api/green-book`, localizedMock); 158 let data = response.data ? response.data : response; 159 160 data = sanitizerService.sanitizeResponse(data); 161 if (data.url) data.url = mediaService.getImageUrl(data.url); 162 163 return data; 164 } catch (error) { 165 console.error(`Error obteniendo green book, usando mock`, error); 166 return localizedMock; 167 } 168 } else { 169 return Promise.resolve(localizedMock); 170 } 171 } 172} 173 174export const pressService = new PressService();
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.