Integration/Widget Configuration

Configuration Reference

Complete reference for all FlowSearch configuration options to customize search behavior.

Basic Configuration

Every FlowSearch instance requires at minimum the API URL and API key:

const flowSearch = new FlowSearch({
  // Required
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY'
});

All Configuration Options

Core Settings

OptionTypeDefaultDescription
apiUrlstringrequiredFlowSearch API endpoint URL
apiKeystringrequiredYour FlowSearch API key
debugbooleanfalseEnable debug logging to console

Element Selectors

OptionDefaultDescription
searchInputSelector'[data-flowsearch-input]'CSS selector for search input
resultsContainerSelector'[data-flowsearch-results]'CSS selector for results container
submitButtonSelector'[data-flowsearch-submit]'CSS selector for submit button

Search Behavior

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  // Search timing
  debounceMs: 300,           // Wait 300ms after typing stops
  minQueryLength: 2,         // Minimum characters to trigger search
  
  // Results
  maxResults: 10,            // Max results in dropdown
  maxPageResults: 20,        // Max results per page (search page)
  
  // Features
  enableRealTimeSearch: true,     // Search as user types
  enableKeyboardNavigation: true, // Arrow key navigation
  enableCaching: true,            // Cache search results
  cacheTimeout: 300000            // Cache expires in 5 minutes
});

UI Options

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  // Display
  showLoadingIndicator: true,  // Show spinner during search
  showSearchStats: true,       // Show "X results in Yms"
  showPagination: true,        // Show pagination controls
  
  // Behavior
  autoFocus: false,            // Auto-focus input on page load
  clearOnEscape: true,         // Clear search on Escape key
  
  // Dropdown
  autoShowDropdown: true,      // Show dropdown when typing
  hideOnOutsideClick: true,    // Hide when clicking outside
  dropdownMaxHeight: '400px',  // Maximum dropdown height
  dropdownPosition: 'bottom'   // 'bottom', 'top', or 'auto'
});

Search Parameters

Fine-tune how search queries are processed:

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  searchParameters: {
    // Fields to search
    queryFields: ['title', 'content', 'description'],
    
    // Sorting
    sortBy: 'relevance',        // 'relevance', 'date', 'title'
    sortOrder: 'desc',
    
    // Typo tolerance
    typoTolerance: true,
    
    // Highlighting
    highlightFields: ['title', 'content'],
    highlightStartTag: '<mark>',
    highlightEndTag: '</mark>',
    
    // Faceting (filters)
    facetBy: ['category', 'author', 'tags'],
    
    // Pre-defined filters
    filters: {
      category: 'blog',
      status: 'published'
    }
  }
});

Custom Templates

Customize how search results are rendered:

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  templates: {
    // Dropdown result item
    dropdownHit: `
      <div class="search-result">
        <h3 class="result-title">{{title}}</h3>
        <p class="result-description">{{description}}</p>
        <span class="result-category">{{category}}</span>
      </div>
    `,
    
    // Empty state
    dropdownEmpty: '<div class="no-results">No results found</div>',
    
    // Loading state
    dropdownLoading: '<div class="loading">Searching...</div>',
    
    // Error state
    dropdownError: '<div class="error">Search unavailable</div>',
    
    // Stats template
    stats: 'Found {{nbHits}} results in {{processingTimeMS}}ms'
  }
});

Event Callbacks

Handle search events with custom callbacks:

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  callbacks: {
    // Search lifecycle
    onSearchStart: (query, state) => {
      console.log('Searching for:', query);
    },
    
    onSearchComplete: (results, state) => {
      console.log('Found', results.nbHits, 'results');
    },
    
    onSearchError: (error, state) => {
      console.error('Search failed:', error);
    },
    
    // User interactions
    onResultClick: (result, event) => {
      // Track analytics
      gtag('event', 'search_click', {
        search_term: result.query,
        result_title: result.title
      });
    },
    
    // Initialization
    onInit: (instance) => {
      console.log('FlowSearch ready!');
    }
  }
});

Analytics Configuration

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  // Enable built-in analytics
  enableAnalytics: true,
  
  analytics: {
    // Track these events
    trackEvents: {
      search: true,        // Track searches
      click: true,         // Track result clicks
      noResults: true,     // Track zero-result searches
      pagination: true     // Track page changes
    },
    
    // Custom event handler (send to your analytics)
    onEvent: (eventType, eventData) => {
      gtag('event', eventType, eventData);
    }
  }
});

Error Handling

const flowSearch = new FlowSearch({
  apiUrl: 'https://api.flowsearch.io',
  apiKey: 'YOUR_API_KEY',
  
  errorHandling: {
    // Show user-friendly error messages
    showErrorMessages: true,
    
    // Gracefully degrade on failure
    gracefulDegradation: true,
    
    // Fallback to native form submission
    fallbackBehavior: 'native-search',
    
    // Retry configuration
    retryAttempts: 3,
    retryDelay: 1000,
    
    // Request timeout (ms)
    requestTimeout: 5000,
    
    // Custom error handler
    onError: (error, context) => {
      // Log to your error tracking service
      Sentry.captureException(error);
    }
  }
});

Runtime Configuration Updates

Update configuration after initialization:

// Update general config
flowSearch.updateConfig({
  debounceMs: 500,
  maxResults: 15
});

// Update templates
flowSearch.updateTemplates({
  dropdownHit: newTemplate
});

// Update search parameters
flowSearch.updateSearchParameters({
  sortBy: 'date:desc'
});

Next Steps