Extract component to render a date range

Note we're using the `call` method (which is equivalent to adding an ERB
file) because we were getting an error calling `render` from the `dates`
method:

```
ActionView::Base#lookup_context delegated to
view_renderer.lookup_context, but view_renderer is nil:
```

It might be because we aren't rendering the
`Adming::Budgets::DurationComponent` but just calling one method, and so
there's no view context in this case.
This commit is contained in:
Javi Martín
2021-07-31 23:34:46 +02:00
parent e7da2cb0f3
commit 89436b528f
2 changed files with 31 additions and 9 deletions

View File

@@ -6,7 +6,7 @@ class Admin::Budgets::DurationComponent < ApplicationComponent
end end
def dates def dates
safe_join([formatted_start_date, "-", formatted_end_date], " ") Admin::DateRangeComponent.new(start_time, end_time).call
end end
def duration def duration
@@ -15,15 +15,11 @@ class Admin::Budgets::DurationComponent < ApplicationComponent
private private
def formatted_start_date def start_time
formatted_date(durable.starts_at) if durable.starts_at.present? durable.starts_at
end end
def formatted_end_date def end_time
formatted_date(durable.ends_at - 1.second) if durable.ends_at.present? durable.ends_at - 1.second if durable.ends_at.present?
end
def formatted_date(time)
time_tag(time, format: :short_datetime)
end end
end end

View File

@@ -0,0 +1,26 @@
class Admin::DateRangeComponent < ApplicationComponent
attr_reader :start_time, :end_time
def initialize(start_time, end_time)
@start_time = start_time
@end_time = end_time
end
def call
safe_join([formatted_start_time, "-", formatted_end_time], " ")
end
private
def formatted_start_time
formatted_date(start_time) if start_time.present?
end
def formatted_end_time
formatted_date(end_time) if end_time.present?
end
def formatted_date(time)
time_tag(time, format: :short_datetime)
end
end