1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-19 13:19:39 +02:00
Maybe/app/helpers/application_helper.rb

118 lines
4.2 KiB
Ruby
Raw Normal View History

2024-02-02 09:05:04 -06:00
module ApplicationHelper
def title(page_title)
content_for(:title) { page_title }
end
def header_title(page_title)
content_for(:header_title) { page_title }
end
2024-02-02 23:41:58 +00:00
def permitted_accountable_partial(name)
name.underscore
end
def notification(text, **options, &block)
content = tag.p(text)
content = capture &block if block_given?
render partial: "shared/notification", locals: { type: options[:type], content: content }
end
# Wrap view with <%= modal do %> ... <% end %> to have it open in a modal
# Make sure to add data-turbo-frame="modal" to the link/button that opens the modal
def modal(&block)
content = capture &block
render partial: "shared/modal", locals: { content: content }
end
def currency_dropdown(f: nil, options: [])
render partial: "shared/currency_dropdown", locals: { f: f, options: options }
end
2024-02-11 13:09:14 -06:00
def sidebar_link_to(name, path, options = {})
2024-02-11 12:56:23 -06:00
base_class_names = [ "block", "border", "border-transparent", "rounded-xl", "-ml-2", "p-2", "text-sm", "font-medium", "text-gray-500", "flex", "items-center" ]
2024-02-12 17:20:50 -05:00
hover_class_names = [ "hover:bg-white", "hover:border-alpha-black-50", "hover:text-gray-900", "hover:shadow-xs" ]
current_page_class_names = [ "bg-white", "border-alpha-black-50", "text-gray-900", "shadow-xs" ]
2024-02-11 12:56:23 -06:00
link_class_names = if current_page?(path) || (request.path.start_with?(path) && path != "/")
2024-02-11 12:56:23 -06:00
base_class_names.delete("border-transparent")
base_class_names + hover_class_names + current_page_class_names
else
base_class_names + hover_class_names
end
2024-02-11 12:56:23 -06:00
merged_options = options.reverse_merge(class: link_class_names.join(" ")).except(:icon)
link_to path, merged_options do
lucide_icon(options[:icon], class: "w-5 h-5 mr-2") + name
end
end
# Styles to use when displaying a change in value
def trend_styles(trend_direction)
bg_class, text_class, symbol, icon = case trend_direction
when "up"
[ "bg-green-500/5", "text-green-500", "+", "arrow-up" ]
when "down"
[ "bg-red-500/5", "text-red-500", "-", "arrow-down" ]
when "flat"
[ "bg-gray-500/5", "text-gray-500", "", "minus" ]
else
raise ArgumentError, "Invalid trend direction: #{trend_direction}"
end
{ bg_class: bg_class, text_class: text_class, symbol: symbol, icon: icon }
end
def trend_label(date_range)
start_date, end_date = date_range.values_at(:start, :end)
days_apart = (end_date - start_date).to_i
case days_apart
when 1
"vs. yesterday"
when 7
"vs. last week"
when 30, 31
"vs. last month"
when 365, 366
"vs. last year"
else
"from #{start_date.strftime('%b %d, %Y')} to #{end_date.strftime('%b %d, %Y')}"
end
end
def format_currency(number, options = {})
user_currency_preference = Current.family.try(:currency) || "USD"
case user_currency_preference
when "USD"
options.reverse_merge!(unit: "$", precision: 2, delimiter: ",", separator: ".")
when "EUR"
options.reverse_merge!(unit: "", precision: 2, delimiter: ".", separator: ",")
when "GBP"
options.reverse_merge!(unit: "£", precision: 2, delimiter: ",", separator: ".")
when "CAD"
options.reverse_merge!(unit: "C$", precision: 2, delimiter: ",", separator: ".")
when "MXN"
options.reverse_merge!(unit: "MX$", precision: 2, delimiter: ",", separator: ".")
when "HKD"
options.reverse_merge!(unit: "HK$", precision: 2, delimiter: ",", separator: ".")
when "CHF"
options.reverse_merge!(unit: "CHF", precision: 2, delimiter: ".", separator: ",")
when "SGD"
options.reverse_merge!(unit: "S$", precision: 2, delimiter: ",", separator: ".")
when "NZD"
options.reverse_merge!(unit: "NZ$", precision: 2, delimiter: ",", separator: ".")
when "AUD"
options.reverse_merge!(unit: "A$", precision: 2, delimiter: ",", separator: ".")
when "KRW"
options.reverse_merge!(unit: "", precision: 0, delimiter: ",", separator: ".")
else
options.reverse_merge!(unit: "$", precision: 2, delimiter: ",", separator: ".")
end
number_to_currency(number, options)
end
2024-02-02 09:05:04 -06:00
end