In the following code I'd like to filter according to received filters. The thing is that each of the filters can be defined or not. I'm getting a error inside the Lucid If statements because filters.status and filters.departments can be undefined. Is that a bug or is there a solution that does not involves telling Typescript to ignore the error?
In theory, the Lucid if statement checks if both filter properties exists.
export interface ISalesFilter {
status?: number[];
departments?: string[];
}
async filterSales(filters: ISalesFilter {
const filteredSales = await FilterModel.query()
.if(filters.status, (query) => {
query.whereIn('statusId', filters.status);
})
.if(filters.department, (query) => {
query.whereIn('departmentId', filters.departments);
});
return filteredSales;;
}
The following solution works, but they doesn't sound like bad practice to me:
export interface ISalesFilter {
status?: number[];
departments?: string[];
}
async filterSales(filters: ISalesFilter {
const filteredSales = await FilterModel.query()
.if(filters.status, (query) => {
if(filters.status){
query.whereIn('statusId', filters.status);
}
})
.if(filters.department, (query) => {
if(filters.departments){
query.whereIn('departmentId', filters.departments);
}
});
return filteredSales;;
}
Telling Typescript to ignore the problem also works, but again a fell it's not a good way of solving this:
export interface ISalesFilter {
status?: number[];
departments?: string[];
}
async filterSales(filters: ISalesFilter {
const filteredSales = await FilterModel.query()
.if(filters.status, (query) => {
// @ts-ignore
query.whereIn('statusId', filters.status);
})
.if(filters.department, (query) => {
// @ts-ignore
query.whereIn('departmentId', filters.departments);
});
return filteredSales;;
}