Skip to content

Commit aa028cb

Browse files
remove the button option for tab and fix tests
1 parent 1c4dc46 commit aa028cb

File tree

3 files changed

+35
-68
lines changed

3 files changed

+35
-68
lines changed
Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
<%= content_tag :div, class: class_names(
22
"tabs__item-wrapper",
33
"tabs__item-wrapper--#{@variant}",
4-
"#{ACTIVE_CLASS}": scope? && @active
4+
"#{ACTIVE_CLASS}": @variant == :scope && @active
55
) do %>
6-
7-
<% content = capture do %>
6+
<%= link_to(@href,
7+
class: class_names(
8+
@classes,
9+
"tabs__item",
10+
"tabs__item--group": @variant == :group,
11+
"tabs__item--disabled": @disabled,
12+
"#{ACTIVE_CLASS}": @active
13+
),
14+
data: @data,
15+
title: @title,
16+
role: "tab",
17+
id: @id,
18+
"aria-selected": @active,
19+
"aria-controls": @aria_controls,
20+
"aria-disabled": @disabled,
21+
tabindex: @disabled ? -1 : 0
22+
) do %>
823
<%= svg @icon, class: "tabs__item-icon", "aria-hidden": "true" if @icon.present? %>
924
<%= tag.span @label, class: "tabs__item-label" if @label.present? %>
1025
<% end %>
11-
12-
<%= @href.present? ? link_to(content, @href, shared_attributes) : button_tag(content, button_attributes) %>
1326
<% end %>

app/components/avo/u_i/tabs/tab_component.rb

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,57 +12,13 @@ class TabComponent < Avo::BaseComponent
1212
prop :variant, default: :scope
1313
prop :active, default: false
1414
prop :icon
15-
prop :href
15+
prop :href, default: "#"
1616
prop :id, default: -> { "tab-#{object_id}" }
1717
prop :disabled, default: false
1818
prop :aria_controls, default: -> { "#{@id}-panel" }
1919
prop :data, default: {}.freeze
2020
prop :classes
2121
prop :title
22-
23-
def shared_attributes
24-
{
25-
class: element_classes,
26-
data: @data,
27-
title: @title,
28-
**tab_attributes.except(:"aria-disabled")
29-
}
30-
end
31-
32-
def button_attributes
33-
shared_attributes.merge(
34-
type: "button",
35-
disabled: @disabled,
36-
"aria-disabled": @disabled
37-
)
38-
end
39-
40-
private
41-
42-
def scope?
43-
@variant == :scope
44-
end
45-
46-
def tab_attributes
47-
{
48-
role: "tab",
49-
id: @id,
50-
"aria-selected": @active,
51-
"aria-controls": @aria_controls,
52-
"aria-disabled": @disabled,
53-
tabindex: @disabled ? -1 : 0
54-
}
55-
end
56-
57-
def element_classes
58-
class_names(
59-
@classes,
60-
"tabs__item",
61-
"tabs__item--group": @variant == :group,
62-
"tabs__item--disabled": @disabled,
63-
"#{ACTIVE_CLASS}": @active
64-
)
65-
end
6622
end
6723
end
6824
end

spec/components/avo/u_i/tabs/tab_component_spec.rb

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ def render_component(**opts)
1414
end
1515

1616
describe "rendering" do
17-
it "renders a button tab by default" do
17+
it "renders a link tab by default" do
1818
render_component
1919

20-
expect(page).to have_css("button[type='button']")
20+
expect(page).to have_css("a[href='#']")
2121
expect(page).to have_css("span.tabs__item-label", text: "Tab")
2222
expect(page).to have_css(".tabs__item")
2323
expect(page).to have_css(".tabs__item-wrapper")
@@ -79,58 +79,56 @@ def render_component(**opts)
7979
data: {testid: "test-tab", action: "click->tabs#select"}
8080
)
8181

82-
expect(page).to have_css("button#custom-tab-id")
83-
expect(page).to have_css("button[title='Click to view settings']")
82+
expect(page).to have_css("a#custom-tab-id[href='#']")
83+
expect(page).to have_css("a[title='Click to view settings']")
8484
expect(page).to have_css(".tabs__item.my-custom-class")
85-
expect(page).to have_css("button[data-testid='test-tab'][data-action='click->tabs#select']")
85+
expect(page).to have_css("a[data-testid='test-tab'][data-action='click->tabs#select']")
8686
end
8787
end
8888

8989
describe "disabled state" do
90-
it "applies disabled attributes to button" do
90+
it "applies disabled attributes to link" do
9191
render_component(disabled: true)
9292

93-
expect(page).to have_css("button[disabled]")
94-
expect(page).to have_css("button[aria-disabled='true']")
95-
expect(page).to have_css("button[tabindex='-1']")
93+
expect(page).to have_css("a[aria-disabled='true']")
94+
expect(page).to have_css("a[tabindex='-1']")
9695
expect(page).to have_css(".tabs__item--disabled")
9796
end
9897

9998
it "sets tabindex to 0 when enabled" do
10099
render_component(disabled: false)
101-
expect(page).to have_css("button[tabindex='0']")
100+
expect(page).to have_css("a[tabindex='0']")
102101
end
103102
end
104103

105104
describe "ARIA attributes" do
106105
it "includes proper ARIA attributes" do
107106
render_component(id: "my-tab", active: true)
108107

109-
expect(page).to have_css("button[role='tab']")
110-
expect(page).to have_css("button[aria-selected='true']")
111-
expect(page).to have_css("button[id='my-tab']")
112-
expect(page).to have_css("button[aria-controls]")
108+
expect(page).to have_css("a[role='tab']")
109+
expect(page).to have_css("a[aria-selected='true']")
110+
expect(page).to have_css("a[id='my-tab']")
111+
expect(page).to have_css("a[aria-controls]")
113112
end
114113

115114
it "uses custom aria-controls when provided" do
116115
render_component(aria_controls: "custom-panel")
117-
expect(page).to have_css("button[aria-controls='custom-panel']")
116+
expect(page).to have_css("a[aria-controls='custom-panel']")
118117
end
119118

120119
it "sets aria-selected based on active state" do
121120
render_component(active: false)
122-
expect(page).to have_css("button[aria-selected='false']")
121+
expect(page).to have_css("a[aria-selected='false']")
123122
end
124123
end
125124

126125
describe "data attributes" do
127126
it "preserves custom data attributes" do
128127
render_component(data: {custom: "value"})
129-
expect(page).to have_css("button[data-custom='value']")
128+
expect(page).to have_css("a[data-custom='value']")
130129
end
131130
end
132131

133-
134132
describe "variants" do
135133
describe "group variant" do
136134
it "applies group variant classes" do

0 commit comments

Comments
 (0)