Skip to main content

Marketplace Utilities

The marketplace module provides a set of utility functions that help with common operations such as data formatting, display processing, and user interface helpers.

Core Utilities

Class Name Utility

The cn() utility function is used throughout the codebase for conditional class name merging:
import { cn } from '@/lib/utils';

// Usage
const className = cn(
  'base-class', 
  condition && 'conditional-class',
  {
    'dynamic-class-1': condition1,
    'dynamic-class-2': condition2
  },
  props.className
);
This utility combines clsx and tailwind-merge to provide intelligent class merging that respects Tailwind’s specificity rules.

Marketplace-Specific Utilities

Filter Helpers

import { filterBuildersBySkills, sortBuildersByRelevance } from '@/lib/marketplace/utils';
filterBuildersBySkills
function
Filter a list of builders by required skills.
function filterBuildersBySkills(
  builders: BuilderProfileListing[],
  requiredSkills: string[]
): BuilderProfileListing[]
sortBuildersByRelevance
function
Sort builders by relevance to search criteria.
function sortBuildersByRelevance(
  builders: BuilderProfileListing[],
  searchQuery: string,
  requiredSkills: string[]
): BuilderProfileListing[]

Display Helpers

formatHourlyRate
function
Format hourly rate as a display string.
function formatHourlyRate(
  rate: number | undefined, 
  options?: { showCurrency?: boolean }
): string
getTierString
function
Convert numeric validation tier to display string.
function getTierString(tier: number): 'beginner' | 'established' | 'expert'

Image Helpers

getInitials
function
Extract initials from a name for avatar fallbacks.
function getInitials(name: string): string

Usage Examples

Formatting and Display

import { formatHourlyRate, getTierString } from '@/lib/marketplace/utils';

function BuilderInfo({ builder }) {
  return (
    <div>
      <p>Hourly Rate: {formatHourlyRate(builder.hourlyRate)}</p>
      <p>Tier: {getTierString(builder.validationTier)}</p>
    </div>
  );
}

Filter Operations

import { filterBuildersBySkills, sortBuildersByRelevance } from '@/lib/marketplace/utils';
import { useState } from 'react';

function BuilderSearch() {
  const [builders, setBuilders] = useState<BuilderProfileListing[]>([]);
  const [searchQuery, setSearchQuery] = useState('');
  const [selectedSkills, setSelectedSkills] = useState<string[]>([]);
  
  function handleSearch() {
    // Filter by skills
    const filteredBuilders = filterBuildersBySkills(builders, selectedSkills);
    
    // Sort by relevance to search
    const sortedBuilders = sortBuildersByRelevance(
      filteredBuilders, 
      searchQuery, 
      selectedSkills
    );
    
    return sortedBuilders;
  }
  
  // ... component implementation
}

See Also