UNPKG

@vidal-community/vidal-web-components

Version:

Vidal Web Components

165 lines 6.94 kB
import { html } from 'lit'; import { DrugPresent } from '../enums/drug-present'; import { when } from 'lit/directives/when.js'; import { logoMore, logoLess } from '../images'; function sortDosesByDispensingUnitThenUnitName(dose1, dose2) { if (dose1.unit.isDispensingUnit && !dose2.unit.isDispensingUnit) { return -1; } if (!dose1.unit.isDispensingUnit && dose2.unit.isDispensingUnit) { return 1; } return dose1.unit.name.localeCompare(dose2.unit.name); } function findAllDosesUnitUri(possibility) { const allUris = Object.values(possibility) .map((dosesWithTheirEquivalentDrug) => dosesWithTheirEquivalentDrug.dose) .flat() .sort((dose1, dose2) => sortDosesByDispensingUnitThenUnitName(dose1, dose2)) .map((dose) => dose.unit.uri); return Array.from(new Set(allUris)); } function equivalentDoseButton(input) { return html ` <td class="equivalent-dose-button">${input}</td> `; } export const displayCombinations = (prescriptionLine, combinations, vidalEquivalentForm) => { const displayedCombinations = vidalEquivalentForm.displayMoreCombinations ? combinations : [combinations[0]]; const inputDrug = prescriptionLine.drug; const isPrescribable = inputDrug.isPrescribable(); const substitutionLevel = isPrescribable ? DrugPresent.PRESENT_LEVEL_2_PHARMACEUTICEUTICAL_EQUIVALENT : DrugPresent.PRESENT_LEVEL_1_DIRECT_EQUIVALENCE; const displayMoreOrLess = vidalEquivalentForm.displayMoreCombinations ? 'Afficher moins de propositions' : 'Afficher plus de propositions ' + '(' + (combinations.length - 1) + ')'; const displayMoreOrLessLogo = vidalEquivalentForm.displayMoreCombinations ? logoLess : logoMore; return html ` <div class="substitution-level">${substitutionLevel}</div> ${checkboxToDisplayEquivalentsWithImpossibleDoses(vidalEquivalentForm)} <div class="possibility-container"> ${displayedCombinations.map((possibility, index) => { const isNoDoses = Object.values(possibility).flatMap((value) => value.dose).length === 0; const allUnitUris = findAllDosesUnitUri(possibility); return html ` <table class="combination-table" data-test="substitution-${inputDrug.safeDrugUri()}-combination-${index}" > ${Object.entries(possibility).map(([_, equivalentDrugDoseValue]) => html ` ${html ` <tr data-test="substitution-${inputDrug.safeDrugUri()}-${equivalentDrugDoseValue.equivalentDrug.safeDrugUri()}" > <td class="equivalent-drug-name" data-value="${equivalentDrugDoseValue.equivalentDrug.uri}" > ${equivalentDrugDoseValue.equivalentDrug.name} </td> ${allUnitUris.map((unitUri) => { const dose = equivalentDrugDoseValue.dose.find((dose) => unitUri === dose.unit.uri); if (dose) { return html ` <td class="equivalent-drug-dose" data-value="${dose.value} ${dose.unit.uri}" > ${dose.value} ${dose.unit.name} </td>`; } const doseInDispensingUnit = equivalentDrugDoseValue.dose.find((dose) => dose.unit.isDispensingUnit); if (doseInDispensingUnit) { return html ` <td class="equivalent-drug-dose" data-value="${doseInDispensingUnit.value} ${doseInDispensingUnit .unit.uri}" > ${doseInDispensingUnit.value} ${doseInDispensingUnit.unit.name} </td>`; } return html `<td class="equivalent-drug-dose" data-value="0" > 0 </td>`; })} ${when(isNoDoses, () => { const input = document.createElement('input'); input.type = 'radio'; input.id = inputDrug.safeDrugUri(); input.name = inputDrug.safeDrugUri(); input.addEventListener('change', (_) => { vidalEquivalentForm.buildSelectedEquivalentForm(equivalentDrugDoseValue.equivalentDrug); }); if (index === 0) { input.checked = true; } return equivalentDoseButton(input); })} </tr> `} `)} <tr> <td class="empty-equivalent"></td> ${when(!isNoDoses, () => allUnitUris.map((unitUri, indexUri) => { const input = document.createElement('input'); input.type = 'radio'; input.id = inputDrug.safeDrugUri() + '-' + unitUri.replace('vidal://', 'vidal-').replace('/', '-'); input.name = inputDrug.safeDrugUri(); input.value = unitUri; if (vidalEquivalentForm.selectedEquivalentCombinationForm[0] .unitUri === unitUri && index === 0) { input.checked = true; } input.addEventListener('change', (event) => { vidalEquivalentForm.buildSelectedEquivalentCombinationForm(event, indexUri + 1, prescriptionLine); }); return equivalentDoseButton(input); }))} </tr> </table> `; })} ${combinations.length > 1 ? html `<span title="Afficher plus ou moins de propositions" @click="${() => vidalEquivalentForm.switchDisplay()}" data-test="more-or-less-equivalents" class="show-more" > <img src="${displayMoreOrLessLogo}" alt="Minus" /> ${displayMoreOrLess} </span>` : ''} </div>`; }; export const notAvailable = (name, vidalEquivalentForm) => { return html ` <div>${name}</div> ${checkboxToDisplayEquivalentsWithImpossibleDoses(vidalEquivalentForm)} `; }; export const checkboxToDisplayEquivalentsWithImpossibleDoses = (vidalEquivalentForm) => { if (vidalEquivalentForm.displayCheckbox()) { return html `<label> <input type="checkbox" name="displayEquivalentsWithImpossibleDoses" @change="${vidalEquivalentForm.switchDisplayEquivalentsWithImpossibleDoses}" ?checked="${vidalEquivalentForm.displayEquivalentsWithImpossibleDoses}" /> Afficher les UCD avec des dosages impossibles à réaliser </label>`; } return html ``; }; //# sourceMappingURL=template.js.map