← back to Stars of Design

lib/sort.js

44 lines

// Sort + density helpers for the designer grid.
// Select <option> values must match SORTS keys exactly.

const SORTS = {
  newest:    'newest',
  era:       'era',
  city:      'city',
  name_az:   'name_az',
  style:     'style',
};

function sortDesigners(designers, key) {
  const k = SORTS[key] ? key : 'newest';
  const out = designers.slice();
  switch (k) {
    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.name || '').localeCompare(b.name || '')
      );
      break;
    case 'era':
      // Mid-century → contemporary → current. Sort by era_sort numeric.
      out.sort((a, b) => (a.era_sort || 9999) - (b.era_sort || 9999));
      break;
    case 'style':
      out.sort((a, b) => {
        const av = (a.styles && a.styles[0]) || 'zzz';
        const bv = (b.styles && b.styles[0]) || 'zzz';
        return av.localeCompare(bv) || (a.name || '').localeCompare(b.name || '');
      });
      break;
    case 'newest':
    default:
      out.sort((a, b) => (b.id || 0) - (a.id || 0));
  }
  return out;
}

module.exports = { SORTS, sortDesigners };