Skip to content

Commit a8646e0

Browse files
committed
Shop Cart implementation
- Order and OrderItem - Cart list page 🚀
1 parent 9e877b6 commit a8646e0

File tree

28 files changed

+320
-11
lines changed

28 files changed

+320
-11
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ gem 'redis', '~>3.2'
2323
gem 'sidekiq'
2424
gem 'sidekiq-scheduler', '~> 2.1.4'
2525
gem 'simple_form'
26+
gem 'font-awesome-rails'
2627

2728
gem 'courses', path: 'components/courses'
2829
gem 'shop', path: 'components/shop'

Gemfile.lock

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ GEM
226226
faraday (1.0.1)
227227
multipart-post (>= 1.2, < 3)
228228
ffi (1.12.2)
229+
font-awesome-rails (4.7.0.7)
230+
railties (>= 3.2, < 7)
229231
formatador (0.2.5)
230232
friendly_id (5.3.0)
231233
activerecord (>= 4.0.0)
@@ -650,6 +652,7 @@ DEPENDENCIES
650652
ez-settings
651653
factory_bot_rails
652654
faker
655+
font-awesome-rails
653656
friendly_id (~> 5.1)
654657
gibbon (~> 3.0)
655658
groupdate (~> 4.0)

app/assets/stylesheets/app/application.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
@import "https://fonts.googleapis.com/css2?family=Oswald&display=swap'";
1616
@import "local_fonts";
17+
@import "font-awesome";
1718

1819
@import "normalize";
1920

app/assets/stylesheets/app/base/_base.scss

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,28 @@ q {
134134
.pk-no-display {
135135
display: none !important;
136136
}
137+
138+
.shopping_cart-icon {
139+
display: inline-block;
140+
position: fixed;
141+
left: 1450px;
142+
opacity: 80%;
143+
144+
&:hover {
145+
opacity: 100%;
146+
}
147+
}
148+
149+
.cart_table {
150+
margin: 40px;
151+
152+
table {
153+
border-collapse: collapse;
154+
width: 100%;
155+
}
156+
157+
th, td {
158+
text-align: left;
159+
padding: 8px;
160+
}
161+
}

app/helpers/admin/events_helper.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ def event_status_label(event)
4242
class: ['ui label', BG_STATUS_CLASS[event.status.to_sym]]
4343
end
4444

45-
# rubocop:disable Metrics/AbcSize
4645
def event_visitors(event)
4746
requested = event.pending_visit_requests.length
4847
approved = event.approved_visit_requests.length
@@ -56,7 +55,6 @@ def event_visitors(event)
5655
t('events.index.visitors.visited') => visited
5756
}
5857
end
59-
# rubocop:enable Metrics/AbcSize
6058

6159
def event_verified_user_data(event)
6260
verified = event.verified_visitors.length

app/views/layouts/application.slim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ html
1313
link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"
1414
link rel="manifest" href="/manifest.json"
1515
link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"
16+
link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css"
1617
== render 'layouts/ga/head' if Rails.env.production?
1718

1819
body.pk-main-layout class="#{yield(:main_body_class)}"

components/shop/app/controllers/shop/base_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ module Shop
44
class BaseController < ApplicationController
55
before_action :authenticate_user!
66

7+
def current_order
8+
session[:order_id] ? Shop::Order.find(session[:order_id]) : []
9+
end
10+
711
private
812

913
def render_form

components/shop/app/controllers/shop/items_controller.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,22 @@
33
module Shop
44
class ItemsController < BaseController
55
helper_method :items
6+
helper_method :current_order
7+
8+
# @deprecated
9+
# def add_to_cart
10+
# cart = session[:cart] || []
11+
# cart << item.id unless cart.include?(item.id)
12+
13+
# session[:cart] = cart
14+
15+
# redirect_back(fallback_location: root_path, notice: "#{item.name} was successfully added to cart")
16+
# end
17+
18+
# def remove_from_cart
19+
# session[:cart].delete(item.id)
20+
# redirect_back(fallback_location: root_path, notice: "#{item.name} was successfully removed from cart")
21+
# end
622

723
private
824

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# frozen_string_literal: true
2+
3+
module Shop
4+
class OrderItemsController < BaseController
5+
helper_method :item
6+
helper_method :order_items
7+
helper_method :current_order
8+
9+
def create
10+
order_item = ::Shop::OrderItem.new(item_id: item.id, order_id: order_id, price: item.price)
11+
order_item.save
12+
13+
redirect_to shop_items_path
14+
end
15+
16+
def update
17+
order_item.increase_quantity!
18+
redirect_to shop_order_items_path
19+
end
20+
21+
def destroy
22+
order_item.reduce_quantity!
23+
redirect_to shop_order_items_path
24+
end
25+
26+
private
27+
28+
def order_items
29+
order_items = Shop::OrderItem.includes(:item)
30+
end
31+
32+
def order_item
33+
@order_items ||= Shop::OrderItem.find(params[:id])
34+
end
35+
36+
def item
37+
@items ||= Shop::Item.find(params[:item_id])
38+
end
39+
40+
def order_id
41+
session[:order_id] ||= Shop::Order.create.id
42+
end
43+
end
44+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
module Shop
4+
module ItemHelper
5+
end
6+
end

0 commit comments

Comments
 (0)