@vidal-community/vidal-web-components
Version:
Vidal Web Components
165 lines • 6.94 kB
JavaScript
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