Om dit te laten werken, is het een kwestie van wat meer voorwaardelijke logica toevoegen aan wanneer een waarde wordt doorgegeven via { $in: value }
. Omdat de fouten die opdoken het gevolg waren van opmaakproblemen met { $in: value }
, de sleutel was om ervoor te zorgen dat dit alleen wordt geactiveerd als er een waarde moet worden doorgegeven.
Dus om dit uiteindelijk werkend te krijgen - zonder een array van alle mogelijke waarden door te geven, wat geen elegante of performante oplossing was - heb ik dit veranderd:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value) {
delete this.body[name];
} else {
this.body[name] = { $in: value };
}
}
... naar dit:
private processType(name: string, value: any, body)
{
if (this.body[name] && !value || this.body[name] && value.length < 1) {
delete this.body[name];
} else if (value) {
this.body[name] = { $in: value };
}
}
Wat dit doet, is er in feite voor zorgen dat een array van ten minste één waarde beschikbaar is wanneer de { $in:value } wordt geactiveerd.
De enige andere wijziging die nodig was, was die met betrekking tot wat wordt uitgezonden wanneer een gebruiker alle waarden heeft gedeselecteerd. Ik heb dat op deze manier aangepakt:
private sendLangSelections(languageFilterOptions) {
const origLangArray = ['English', 'Spanish', 'Mandarin'];
if (languageFilterOptions)
{
let selectionsArray = this.languageFilterOptions.selection;
let values = selectionsArray.map((a) => { return a.value; });
if (values && values.length > 0)
{
this.sendLanguage.emit(values);
}
else if (values && values.length < 1)
{
this.sendLanguage.emit(this.obj = undefined);
}
}
}