playbook_ui 13.13.0.pre.alpha.play900startratingasinput1657 → 13.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +53 -105
  3. data/app/pb_kits/playbook/pb_star_rating/_star_rating.tsx +62 -179
  4. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_default.html.erb +8 -6
  5. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_default.jsx +6 -19
  6. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_hide.html.erb +1 -3
  7. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_hide.jsx +5 -22
  8. data/app/pb_kits/playbook/pb_star_rating/docs/example.yml +5 -12
  9. data/app/pb_kits/playbook/pb_star_rating/docs/index.js +0 -8
  10. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +26 -48
  11. data/app/pb_kits/playbook/pb_star_rating/star_rating.rb +6 -82
  12. data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +34 -34
  13. data/dist/playbook-rails.js +5 -5
  14. data/lib/playbook/version.rb +2 -2
  15. metadata +7 -20
  16. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_background_options.html.erb +0 -2
  17. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_background_options.jsx +0 -25
  18. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_color_options.html.erb +0 -3
  19. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_color_options.jsx +0 -31
  20. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_number_config.html.erb +0 -6
  21. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_number_config.jsx +0 -58
  22. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_size_options.html.erb +0 -16
  23. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_size_options.jsx +0 -60
  24. data/app/pb_kits/playbook/pb_star_rating/stars/primary_star.svg +0 -3
  25. data/app/pb_kits/playbook/pb_star_rating/stars/star_outline.svg +0 -3
  26. data/app/pb_kits/playbook/pb_star_rating/stars/subtle_dark_star.svg +0 -3
  27. data/app/pb_kits/playbook/pb_star_rating/stars/subtle_star.svg +0 -3
  28. data/app/pb_kits/playbook/pb_star_rating/stars/yellow_star.svg +0 -3
@@ -1,53 +1,31 @@
1
1
  <%= content_tag(:div,
2
- id: object.id,
3
- data: object.data,
4
- class: object.classname) do %>
5
- <% if layout_option == "number" %>
6
- <% case object.size %>
7
- <% when "xs", "sm" %>
8
- <%= pb_rails("caption", props: { text: object.rating,
9
- size: "sm",
10
- classname: "pb_star_rating_number_#{size}",
11
- dark: dark,
12
- padding_right: "xxs" }) %>
13
- <% when "md" %>
14
- <%= pb_rails("body", props: { text: object.rating,
15
- dark: dark,
16
- classname: "pb_star_rating_number_#{size}",
17
- padding_right: "xxs" }) %>
18
- <% when "lg" %>
19
- <%= pb_rails("title", props: { text: object.rating,
20
- size: 2,
21
- dark: dark,
22
- classname: "pb_star_rating_number_#{size}",
23
- padding_right: "sm" }) %>
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname) do %>
5
+ <%# Rating value %>
6
+ <% if !object.hide_rating %>
7
+ <%= content_tag(:div, object.rating, class: "pb_star_rating_number") %>
24
8
  <% end %>
25
- <% end %>
26
- <%= pb_rails("flex", props: { }) do %>
27
- <% object.star_count.times do %>
28
- <%= pb_rails("icon", props: { classname: "#{star_color} pb_star_#{size}" , custom_icon: Playbook::Engine.root.join(star_svg_path) } ) %>
29
- <% end %>
30
- <% object.empty_stars.times do %>
31
- <%= pb_rails("icon", props: { classname: "#{background_star_color} pb_star_#{size}", custom_icon: Playbook::Engine.root.join(background_star_path) } ) %>
32
- <% end %>
33
- <% end %>
34
- <% if layout_option == "onestar" %>
35
- <%= content_tag(:div, class: "pb_star_rating_number_#{size}") do %>
36
- <% case object.size %>
37
- <% when "xs", "sm" %>
38
- <%= pb_rails("caption", props: { text: "#{object.rating} of #{object.denominator}",
39
- size: "sm",
40
- dark: dark,
41
- padding_left: "xxs" }) %>
42
- <% when "md" %>
43
- <%= pb_rails("body", props: { text: "#{object.rating} of #{object.denominator}",
44
- dark: dark,
45
- padding_left: "xxs" }) %>
46
- <% when "lg" %>
47
- <%= pb_rails("title", props: { text: "#{object.rating} of #{object.denominator}",
48
- size: 2,
49
- dark: dark }) %>
9
+
10
+ <%= content_tag(:div, class: "pb_star_rating_wrapper") do %>
11
+ <%# Gold stars generated by rating value %>
12
+ <%= content_tag(:div, class: "pb_star_rating_highlight") do %>
13
+ <% object.star_count.times do %>
14
+ <%= pb_rails("icon", props: { icon: "star" }) %>
15
+ <% end %>
16
+ <% unless object.star_full %>
17
+ <%= pb_rails("icon", props: { icon: "star-half" }) %>
18
+ <% end %>
19
+ <% end %>
20
+
21
+ <%# Grey background stars as base %>
22
+ <%= content_tag(:div, class: "pb_star_rating_base") do %>
23
+ <%= pb_rails("icon", props: { icon: "star" }) %>
24
+ <%= pb_rails("icon", props: { icon: "star" }) %>
25
+ <%= pb_rails("icon", props: { icon: "star" }) %>
26
+ <%= pb_rails("icon", props: { icon: "star" }) %>
27
+ <%= pb_rails("icon", props: { icon: "star" }) %>
50
28
  <% end %>
29
+
51
30
  <% end %>
52
- <% end %>
53
31
  <% end %>
@@ -3,94 +3,18 @@
3
3
  module Playbook
4
4
  module PbStarRating
5
5
  class StarRating < Playbook::KitBase
6
+ prop :hide_rating, type: Playbook::Props::Boolean,
7
+ default: false
8
+
6
9
  prop :rating, type: Playbook::Props::Numeric,
7
10
  default: 0
8
11
 
9
- prop :denominator, type: Playbook::Props::Numeric,
10
- default: 5
11
-
12
- prop :layout_option, type: Playbook::Props::Enum,
13
- values: %w[default onestar number],
14
- default: "default"
15
-
16
- prop :color_option, type: Playbook::Props::Enum,
17
- values: %w[yellow primary subtle],
18
- default: "yellow"
19
-
20
- prop :size, type: Playbook::Props::Enum,
21
- values: %w[xs sm md lg],
22
- default: "sm"
23
-
24
- prop :background_type, type: Playbook::Props::Enum,
25
- values: %w[fill outline],
26
- default: "fill"
27
-
28
12
  def star_count
29
- rating.floor > denominator_style ? denominator_style : rating.floor
30
- end
31
-
32
- def denominator_style
33
- layout_option == "onestar" ? 1 : denominator
34
- end
35
-
36
- def empty_stars
37
- (denominator_style - rating.floor).negative? ? 0 : denominator_style - rating.floor
38
- end
39
-
40
- def star_color
41
- case color_option
42
- when "yellow"
43
- "yellow_star"
44
- when "primary"
45
- "primary_star"
46
- when "subtle"
47
- dark ? "suble_star_dark" : "suble_star_light"
48
- end
49
- end
50
-
51
- def background_star_color
52
- if background_type === "outline"
53
- dark ? "outline_empty_star_dark" : "outline_empty_star_light"
54
- else
55
- dark ? "empty_star_dark" : "empty_star_light"
56
- end
57
- end
58
-
59
- def svg_size
60
- sizes = { "xs": "pb_star_xs",
61
- "sm": "pb_star_sm",
62
- "md": "pb_star_md",
63
- "lg": "pb_star_lg" }
64
- sizes[size.to_sym]
65
- end
66
-
67
- def svg_class
68
- "pb_star_#{size}"
69
- end
70
-
71
- def background_star_path
72
- if background_type === "outline"
73
- "app/pb_kits/playbook/pb_star_rating/stars/star_outline.svg"
74
- else
75
- "app/pb_kits/playbook/pb_star_rating/stars/yellow_star.svg"
76
- end
13
+ rating.floor
77
14
  end
78
15
 
79
- def star_svg_path
80
- case color_option
81
- when "yellow"
82
- "app/pb_kits/playbook/pb_star_rating/stars/yellow_star.svg"
83
- when "primary"
84
- "app/pb_kits/playbook/pb_star_rating/stars/primary_star.svg"
85
- when "subtle"
86
- if dark == true
87
- "app/pb_kits/playbook/pb_star_rating/stars/subtle_dark_star.svg"
88
- else
89
- "app/pb_kits/playbook/pb_star_rating/stars/subtle_star.svg"
90
- end
91
- else
92
- "app/pb_kits/playbook/pb_star_rating/stars/primary_star.svg"
93
- end
16
+ def star_full
17
+ (rating.to_f % 1).zero?
94
18
  end
95
19
 
96
20
  def classname
@@ -1,22 +1,24 @@
1
- import React from "react"
2
- import { render, screen } from "../utilities/test-utils"
1
+ import React from "react";
2
+ import { render, screen } from "../utilities/test-utils";
3
3
 
4
- import StarRating from "./_star_rating"
4
+ import StarRating from "./_star_rating";
5
5
 
6
- const testId = "star-rating-kit"
6
+ const testId = "star-rating-kit";
7
7
 
8
8
  describe("Star Rating Kit", () => {
9
9
  test("Expects to have correct classname", () => {
10
10
  render(
11
11
  <StarRating
12
12
  data={{ testid: testId }}
13
+ rating={2}
13
14
  />
14
- )
15
+ );
15
16
 
16
- const kit = screen.getByTestId(testId)
17
- expect(kit.className).toBe("pb_star_rating_kit")
18
17
 
19
- })
18
+ const kit = screen.getByTestId(testId);
19
+ expect(kit).toHaveClass("pb_star_rating_kit");
20
+
21
+ });
20
22
 
21
23
  test('should render aria-label', () => {
22
24
  render(
@@ -25,47 +27,45 @@ describe("Star Rating Kit", () => {
25
27
  data={{ testid: testId }}
26
28
  rating={2}
27
29
  />
28
- )
30
+ );
29
31
 
30
32
  const kit = screen.getByTestId(testId)
31
33
  expect(kit).toHaveAttribute('aria-label', testId)
32
- })
34
+ });
33
35
 
34
- test("Displays correct denominator", () => {
36
+ test("Displays two highlighted stars", () => {
35
37
  render(
36
38
  <StarRating
37
39
  data={{ testid: testId }}
38
- denominator={4}
39
40
  rating={2}
40
- size="xs"
41
41
  />
42
- )
42
+ );
43
43
 
44
- const kit = screen.getByTestId(testId)
45
- const highlight = kit.querySelector(".star_flex_area")
46
- const stars = highlight.querySelectorAll(".pb_star_xs")
47
- const count = stars.length
48
44
 
49
- expect(count).toBe(4)
50
- })
45
+ const kit = screen.getByTestId(testId);
46
+ const highlight = kit.querySelector(".pb_star_rating_highlight");
47
+ const stars = highlight.querySelectorAll(".far.fa-star");
48
+ const count = stars.length;
51
49
 
52
- test("Uses correct size", () => {
50
+ expect(count).toBe(2);
51
+ });
52
+
53
+ test("Displays three highlighted stars and a half star", () => {
53
54
  render(
54
55
  <StarRating
55
56
  data={{ testid: testId }}
56
- layoutOption="number"
57
- rating={2}
58
- size="lg"
57
+ rating={3.5}
59
58
  />
60
- )
59
+ );
61
60
 
62
- const kit = screen.getByTestId(testId)
63
- const highlight = kit.querySelector(".star_flex_area")
64
- const title = kit.querySelector(".pb_star_rating_number_lg")
65
- const stars = highlight.querySelectorAll(".pb_star_lg")
66
- const count = stars.length
61
+ const kit = screen.getByTestId(testId);
62
+ const highlight = kit.querySelector(".pb_star_rating_highlight");
63
+ const stars = highlight.querySelectorAll(".far.fa-star");
64
+ const halfStars = highlight.querySelectorAll(".far.fa-star-half");
65
+ const starCount = stars.length;
66
+ const halfStarCount = halfStars.length;
67
67
 
68
- expect(title.className).toBe("pb_title_kit_size_2 pr_sm pb_star_rating_number_lg")
69
- expect(count).toBe(5)
70
- })
71
- })
68
+ expect(starCount).toBe(3);
69
+ expect(halfStarCount).toBe(1);
70
+ });
71
+ });