ObjectUIObjectUI
Fields

Summary Field

Read-only aggregation field for rollup calculations

The Summary Field component displays aggregated values from related records. This is a read-only field where the value is automatically calculated by the backend through rollup aggregations.

Count Summary

Count Of Related Records

42

Sum Summary

Sum Of Field Values

15750.50

Average Summary

Average Of Field Values

4.52

Field Schema

interface SummaryFieldSchema {
  type: 'summary';
  name: string;                  // Field name/ID
  label?: string;                // Field label
  value?: number;                // Computed value (read-only)
  readonly: true;                // Always read-only
  className?: string;            // Additional CSS classes
  
  // Summary Configuration
  summary_object?: string;       // Related object name
  summary_field?: string;        // Field to aggregate
  summary_type?: 'count' | 'sum' | 'avg' | 'min' | 'max';
}

Summary Types

  • count: Count of related records
  • sum: Sum of numeric field values
  • avg: Average of numeric field values
  • min: Minimum value in the field
  • max: Maximum value in the field

Examples

{
  type: 'summary',
  name: 'task_count',
  label: 'Open Tasks',
  summary_object: 'tasks',
  summary_field: 'id',
  summary_type: 'count'
}

Sum Amounts

{
  type: 'summary',
  name: 'total_sales',
  label: 'Total Sales',
  summary_object: 'invoices',
  summary_field: 'amount',
  summary_type: 'sum'
}

Average Value

{
  type: 'summary',
  name: 'avg_response_time',
  label: 'Avg Response Time',
  summary_object: 'support_tickets',
  summary_field: 'response_time_hours',
  summary_type: 'avg'
}

Min/Max Values

{
  type: 'summary',
  name: 'highest_bid',
  label: 'Highest Bid',
  summary_object: 'bids',
  summary_field: 'amount',
  summary_type: 'max'
}

Cell Renderer

In tables/grids, displays with tabular numbers:

import { SummaryCellRenderer } from '@object-ui/fields';

// Renders: 15,750.50 (formatted with proper precision)

Backend Implementation

Summary fields are calculated through database aggregations:

// Example backend aggregation
const calculateSummary = async (config: SummaryConfig, parentId: string) => {
  const { summary_object, summary_field, summary_type } = config;
  
  switch (summary_type) {
    case 'count':
      return db.count(summary_object, { parent_id: parentId });
    
    case 'sum':
      return db.sum(summary_object, summary_field, { parent_id: parentId });
    
    case 'avg':
      return db.avg(summary_object, summary_field, { parent_id: parentId });
    
    case 'min':
      return db.min(summary_object, summary_field, { parent_id: parentId });
    
    case 'max':
      return db.max(summary_object, summary_field, { parent_id: parentId });
  }
};

Use Cases

  • Order Management: Total order value, order count
  • CRM: Number of contacts, total deal value
  • Project Management: Task count, total hours
  • Analytics: Average ratings, min/max values
  • Financial: Sum of expenses, average transaction size

On this page