Module: EasyAdmin::DashboardsHelper

Included in:
BaseComponent, Fields::BaseComponent
Defined in:
app/helpers/easy_admin/dashboards_helper.rb

Instance Method Summary collapse

Instance Method Details

#delta_badge_classesObject



51
52
53
54
55
56
57
58
59
60
61
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 51

def delta_badge_classes
  base_classes = "inline-flex items-center px-2 py-1 rounded-full text-xs font-medium"
  case trend_direction
  when :positive
    "#{base_classes} bg-green-100 text-green-800"
  when :negative
    "#{base_classes} bg-red-100 text-red-800"
  else
    "#{base_classes} bg-gray-100 text-gray-600" 
  end
end

#metric_value_classesObject

Metric card helper methods



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 23

def metric_value_classes
  base_classes = "text-3xl font-bold mb-1"
  if @card_data[:delta]
    case trend_direction
    when :positive
      "#{base_classes} text-green-600"
    when :negative  
      "#{base_classes} text-red-600"
    else
      "#{base_classes} text-gray-900"
    end
  else
    "#{base_classes} text-gray-900"
  end
end

#render_card(card, dashboard_class, request_params = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 3

def render_card(card, dashboard_class, request_params = nil)
  component_class = card_component_class(card[:type])
  
  # Use provided params or try to access from context
  permitted_params = if request_params
    request_params.permit(:date_from, :date_to, :segment, :search, :period, :refresh)
  elsif respond_to?(:params)
    params.permit(:date_from, :date_to, :segment, :search, :period, :refresh)
  else
    {}
  end
  
  component = component_class.new(
    card: card,
    dashboard_class: dashboard_class,
    request_params: permitted_params
  )
end

#sparkline_colorObject



79
80
81
82
83
84
85
86
87
88
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 79

def sparkline_color
  case trend_direction
  when :positive
    "#059669" # green-600
  when :negative
    "#dc2626" # red-600
  else
    "#4f46e5" # indigo-600
  end
end

#sparkline_pointsObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 90

def sparkline_points
  return "" unless @card_data[:sparkline_data]&.any?
  
  data = @card_data[:sparkline_data]
  max_val = data.map { |d| d[:value] }.max
  min_val = data.map { |d| d[:value] }.min
  range = max_val - min_val
  range = 1 if range == 0
  
  data.map.with_index do |point, i|
    x = i * (100.0 / (data.length - 1))
    y = 25 - ((point[:value] - min_val) / range.to_f * 20)
    "#{x},#{y}"
  end.join(' ')
end

#trend_directionObject



63
64
65
66
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 63

def trend_direction
  return :neutral unless @card_data[:delta]
  @card_data[:delta].to_f > 0 ? :positive : (@card_data[:delta].to_f < 0 ? :negative : :neutral)
end

#trend_iconObject



68
69
70
71
72
73
74
75
76
77
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 68

def trend_icon
  case trend_direction
  when :positive
    ""
  when :negative
    ""
  else
    ""
  end
end

#trend_indicator_classesObject



39
40
41
42
43
44
45
46
47
48
49
# File 'app/helpers/easy_admin/dashboards_helper.rb', line 39

def trend_indicator_classes
  base_classes = "flex items-center justify-center w-10 h-10 rounded-full"
  case trend_direction
  when :positive
    "#{base_classes} bg-green-100 text-green-600"
  when :negative
    "#{base_classes} bg-red-100 text-red-600" 
  else
    "#{base_classes} bg-gray-100 text-gray-600"
  end
end