← back to Designerrepresentatives
lib/sort.js
44 lines
// Sort + density helpers shared between server-rendered grid and client.
// The select <option> values must match SORTS keys exactly.
const SORTS = {
newest: 'newest',
city: 'city',
agency_az: 'agency_az',
name_az: 'name_az',
vertical: 'vertical',
};
function sortReps(reps, key) {
const k = SORTS[key] ? key : 'newest';
const out = reps.slice();
switch (k) {
case 'agency_az':
out.sort((a, b) => (a.agency || '').localeCompare(b.agency || ''));
break;
case 'name_az':
out.sort((a, b) => (a.name || '').localeCompare(b.name || ''));
break;
case 'city':
out.sort((a, b) =>
(a.city || '').localeCompare(b.city || '') ||
(a.agency || '').localeCompare(b.agency || '')
);
break;
case 'vertical':
// Group residential / hospitality / contract / commercial / healthcare / luxury
out.sort((a, b) => {
const av = (a.vertical && a.vertical[0]) || 'zzz';
const bv = (b.vertical && b.vertical[0]) || 'zzz';
return av.localeCompare(bv) || (a.agency || '').localeCompare(b.agency || '');
});
break;
case 'newest':
default:
out.sort((a, b) => (b.id || 0) - (a.id || 0));
}
return out;
}
module.exports = { SORTS, sortReps };