Skip to content

Commit 0c24d36

Browse files
committed
turbo CRUD for line items
1 parent fc0d78a commit 0c24d36

File tree

10 files changed

+82
-40
lines changed

10 files changed

+82
-40
lines changed

NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ broadcasts_to ->(quote) { [quote.company, "quotes"] }, inserts_by: :prepend
5656
view:
5757
<%= turbo_stream_from(current_company, "quotes") %>
5858

59+
nested_dom_id(parent, identifier)

app/controllers/line_items_controller.rb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ def create
1111
@line_item = @line_item_date.line_items.build(line_item_params)
1212

1313
if @line_item.save
14-
redirect_to quote_path(@quote), notice: "Item was successfully created."
14+
respond_to do |format|
15+
notice = "Item was successfully created."
16+
format.html { redirect_to quote_path(@quote), notice: }
17+
format.turbo_stream { flash.now[:notice] = notice }
18+
end
1519
else
1620
render :new, status: :unprocessable_entity
1721
end
@@ -22,7 +26,11 @@ def edit
2226

2327
def update
2428
if @line_item.update(line_item_params)
25-
redirect_to quote_path(@quote), notice: "Item was successfully updated."
29+
respond_to do |format|
30+
notice = "Item was successfully updated."
31+
format.html { redirect_to quote_path(@quote), notice: }
32+
format.turbo_stream { flash.now[:notice] = notice }
33+
end
2634
else
2735
render :edit, status: :unprocessable_entity
2836
end
@@ -31,7 +39,11 @@ def update
3139
def destroy
3240
@line_item.destroy
3341

34-
redirect_to quote_path(@quote), notice: "Item was successfully destroyed."
42+
respond_to do |format|
43+
notice = "Date was successfully destroyed."
44+
format.html { redirect_to quote_path(@quote), notice: }
45+
format.turbo_stream { flash.now[:notice] = notice }
46+
end
3547
end
3648

3749
private

app/helpers/application_helper.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@ def form_error_notification(object)
1010
end
1111
end
1212
end
13+
14+
# NOTE: This may be already defined (rails version perhaps?), I think it was working prior to this definition.
15+
def nested_dom_id(*args)
16+
args.map { |arg| arg.respond_to?(:to_key) ? dom_id(arg) : arg }.join("_")
17+
end
1318
end

app/views/line_item_dates/_line_item_date.html.erb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,16 @@
2525
<div class="line-item__actions"></div>
2626
</div>
2727

28-
<%= render line_item_date.line_items, quote: quote, line_item_date: line_item_date %>
28+
<%= turbo_frame_tag nested_dom_id(line_item_date, "line_items") do %>
29+
<%= render line_item_date.line_items, quote: quote, line_item_date: line_item_date %>
30+
<% end %>
31+
32+
<%= turbo_frame_tag nested_dom_id(line_item_date, LineItem.new) %>
2933

3034
<div class="line-item-date__footer">
3135
<%= link_to "Add item",
3236
[:new, quote, line_item_date, :line_item],
33-
data: { turbo_frame: "_top" },
37+
data: { turbo_frame: nested_dom_id(line_item_date, LineItem.new) },
3438
class: "btn btn--primary" %>
3539
</div>
3640
</div>
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
1-
<div class="line-item">
2-
<div class="line-item__name">
3-
<%= line_item.name %>
4-
<div class="line-item__description">
5-
<%= simple_format line_item.description %>
1+
<%= turbo_frame_tag line_item do %>
2+
<div class="line-item">
3+
<div class="line-item__name">
4+
<%= line_item.name %>
5+
<div class="line-item__description">
6+
<%= simple_format line_item.description %>
7+
</div>
68
</div>
7-
</div>
8-
<div class="line-item__quantity-price">
9-
<%= line_item.quantity %>
10-
&times;
11-
<%= number_to_currency line_item.unit_price %>
12-
</div>
13-
<div class="line-item__quantity">
14-
<%= line_item.quantity %>
15-
</div>
16-
<div class="line-item__price">
17-
<%= number_to_currency line_item.unit_price %>
18-
</div>
19-
<div class="line-item__actions">
20-
<%= button_to "Delete",
21-
[quote, line_item_date, line_item],
22-
method: :delete,
23-
form: { data: { turbo_frame: "_top" } },
9+
<div class="line-item__quantity-price">
10+
<%= line_item.quantity %>
11+
&times;
12+
<%= number_to_currency line_item.unit_price %>
13+
</div>
14+
<div class="line-item__quantity">
15+
<%= line_item.quantity %>
16+
</div>
17+
<div class="line-item__price">
18+
<%= number_to_currency line_item.unit_price %>
19+
</div>
20+
<div class="line-item__actions">
21+
<%= button_to "Delete",
22+
[quote, line_item_date, line_item],
23+
method: :delete,
24+
class: "btn btn--light" %>
25+
<%= link_to "Edit",
26+
[:edit, quote, line_item_date, line_item],
2427
class: "btn btn--light" %>
25-
<%= link_to "Edit",
26-
[:edit, quote, line_item_date, line_item],
27-
data: { turbo_frame: "_top" },
28-
class: "btn btn--light" %>
28+
</div>
2929
</div>
30-
</div>
30+
<% end %>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<%# Step 1: empty the Turbo Frame containing the form %>
2+
<%= turbo_stream.update nested_dom_id(@line_item_date, LineItem.new), "" %>
3+
4+
<%# Step 2: append the created line item to the list %>
5+
<%= turbo_stream.append nested_dom_id(@line_item_date, "line_items") do %>
6+
<%= render @line_item, quote: @quote, line_item_date: @line_item_date %>
7+
<% end %>
8+
9+
<%= render_turbo_stream_flash_messages %>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<%= turbo_stream.remove @line_item %>
2+
<%= render_turbo_stream_flash_messages %>

app/views/line_items/edit.html.erb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
<h1>Edit item</h1>
66
</div>
77

8-
<%= render "form",
9-
quote: @quote,
10-
line_item_date: @line_item_date,
11-
line_item: @line_item %>
8+
<%= turbo_frame_tag @line_item do %>
9+
<%= render "form",
10+
quote: @quote,
11+
line_item_date: @line_item_date,
12+
line_item: @line_item %>
13+
<% end %>
1214
</main>

app/views/line_items/new.html.erb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
<h1>New item for <%= l(@line_item_date.date, format: :long) %></h1>
66
</div>
77

8-
<%= render "form",
9-
quote: @quote,
10-
line_item_date: @line_item_date,
11-
line_item: @line_item %>
8+
<%= turbo_frame_tag nested_dom_id(@line_item_date, LineItem.new) do %>
9+
<%= render "form",
10+
quote: @quote,
11+
line_item_date: @line_item_date,
12+
line_item: @line_item %>
13+
<% end %>
1214
</main>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<%= turbo_stream.replace @line_item do %>
2+
<%= render @line_item, quote: @quote, line_item_date: @line_item_date %>
3+
<% end %>
4+
5+
<%= render_turbo_stream_flash_messages %>

0 commit comments

Comments
 (0)