function process_sort_fields(sort_by_objects, option_fields, search_provider) {
function set_sort_defaults(_object) {
return {
descending: _object.descending || true,
..._object
}
}
function stringify_descending(_boolean) {
if (typeof (_boolean) == 'string') {
return (_boolean.toLowerCase() == 'yes') ? 'desc' : 'asc'
} else {
return _boolean ? 'desc' : 'asc'
}
}
function convert_option_field(field) {
if (option_fields.includes(field)) {
return field + '_sort'
} else return field
}
sort_by_objects = sort_by_objects.map(e => set_sort_defaults(e))
if (search_provider == "Typesense") {
sort_by_objects = sort_by_objects.slice(0, 3)
let sort_by_string = ''
for (const key in sort_by_objects) {
sort_by_string = `${sort_by_string},${convert_option_field(sort_by_objects[key].field)}(missing_values: last):${stringify_descending(sort_by_objects[key].descending)}`
}
return sort_by_string.replace(',', '')
} else if (search_provider == "Algolia") {
sort_by_objects = sort_by_objects.slice(0, 1)
let sort_by_string = ''
for (const key in sort_by_objects) {
sort_by_string = `${sort_by_string},${normalize_index_name(search_index + "_" + convert_option_field(sort_by_objects[key].field),'Algolia')}_${stringify_descending(sort_by_objects[key].descending)}`
}
return sort_by_string.replace(',', '')
}
}