@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
JavaScript
;
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;