/
animal_view.ex
59 lines (49 loc) · 1.43 KB
/
animal_view.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
defmodule CritWeb.Setup.AnimalView do
use CritWeb, :view
alias CritWeb.Setup.AnimalController
alias Ecto.Changeset
def animal_form_id(animal) do
"animal_#{animal.id}"
end
@new_service_gap_header ~E"""
<h4 class="ui center aligned header">
Add a gap during which the animal cannot be reserved
</h4>
""" |> safe_to_string
@existing_service_gap_header ~E"""
<h4 class="ui center aligned header">
Edit or delete earlier gaps
</h4>
""" |> safe_to_string
def nested_service_gap_forms(f, animal_changeset) do
{:safe, [empty_form | forms]} =
inputs_for(f, :service_gaps, fn gap_f ->
one_service_gap(gap_f, unique_snippet(animal_changeset, gap_f))
end)
new_with_header =
[@new_service_gap_header, empty_form]
editable_with_header =
if Enum.empty?(forms) do
[]
else
[@existing_service_gap_header | forms]
end
{:safe, [new_with_header, editable_with_header]}
end
def one_service_gap(gap_f, unique_snippet) do
parts = [
small_calendar(gap_f, "Unavailable starting:",
:in_service_datestring, unique: unique_snippet),
small_calendar(gap_f, "Back on:",
:out_of_service_datestring, unique: unique_snippet),
labeled_text_field(gap_f, "Because: ",
:reason),
delete_if_exists(gap_f)
]
~E"""
<div class="fields">
<%= parts %>
</div>
"""
end
end