← 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 };