UNPKG

@gouvfr-anct/mednum

Version:

✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique

33 lines (32 loc) 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processServices = void 0; const lieux_de_mediation_numerique_1 = require("@gouvfr-anct/lieux-de-mediation-numerique"); const input_1 = require("../../input"); const modalites_accompagnement_field_1 = require("../modalites-accompagnement/modalites-accompagnement.field"); const isAllowedTerm = (choice, sourceValue) => choice.sauf?.every((forbidden) => !sourceValue.includes(forbidden)) ?? true; const isMatchingModaliteAccompagnement = (choice, modalitesAccompagnement) => choice.modalitesAccompagnement == null ? true : modalitesAccompagnement.includes(choice.modalitesAccompagnement); const isTermFound = (choice, modalitesAccompagnement, sourceValue) => (found, term) => found || (sourceValue.includes(term.toLowerCase()) && isAllowedTerm(choice, sourceValue) && isMatchingModaliteAccompagnement(choice, modalitesAccompagnement)); const containsOneOfTheTerms = (choice, modalitesAccompagnement, sourceValue = '') => choice.termes == null ? sourceValue !== '' : choice.termes.reduce(isTermFound(choice, modalitesAccompagnement, sourceValue.toLowerCase()), false); const appendService = (services, service) => [ ...services, ...(service == null ? [] : [service]) ]; const isDefault = (choice) => choice.colonnes == null; const findAndAppendServices = (choice, source, modalitesAccompagnement) => (services, colonne) => containsOneOfTheTerms(choice, modalitesAccompagnement, source[colonne]?.toString()) ? appendService(services, choice.cible) : services; const servicesForTerms = (choice, source, modalitesAccompagnement) => (services, colonne) => isDefault(choice) ? appendService(services, choice.cible) : findAndAppendServices(choice, source, modalitesAccompagnement)(services, colonne); const appendServices = (source, modalitesAccompagnement) => (services, choice) => [ ...services, ...(choice.colonnes ?? (0, input_1.cibleAsDefault)(choice)).reduce(servicesForTerms(choice, source, modalitesAccompagnement), []) ]; const processServices = (source, matching) => (0, lieux_de_mediation_numerique_1.Services)(Array.from(new Set(matching.services?.reduce(appendServices(source, (0, modalites_accompagnement_field_1.processModalitesAccompagnement)(source, matching)), [])))); exports.processServices = processServices;