Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

move Primer::CloseButton to Primer::Beta::CloseButton #1277

Merged
merged 10 commits into from
Aug 8, 2022
5 changes: 5 additions & 0 deletions .changeset/sour-crews-suffer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@primer/view-components': patch
---

move the Primer::CloseButton component into Primer::Beta::CloseButton, update all references, create a deprecated Primer::CloseButton in place of the original
41 changes: 41 additions & 0 deletions app/components/primer/beta/close_button.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# frozen_string_literal: true

module Primer
module Beta
# Use `CloseButton` to render an `×` without default button styles.
#
# @accessibility
# `CloseButton` has a default `aria-label` of "Close" to provides assistive technologies with an accessible label.
# You may choose to override this label with something more descriptive via [system_arguments][0].
# [0]: https://primer.style/view-components/system-arguments#html-attributes
class CloseButton < Primer::Component
status :beta

DEFAULT_TYPE = :button
TYPE_OPTIONS = [DEFAULT_TYPE, :submit].freeze

# @example Default
# <%= render(Primer::Beta::CloseButton.new) %>
#
# @param type [Symbol] <%= one_of(Primer::Beta::CloseButton::TYPE_OPTIONS) %>
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
def initialize(type: DEFAULT_TYPE, **system_arguments)
@system_arguments = deny_tag_argument(**system_arguments)
@system_arguments[:tag] = :button
@system_arguments[:block] = false
@system_arguments[:type] = fetch_or_fallback(TYPE_OPTIONS, type, DEFAULT_TYPE)
@system_arguments[:classes] = class_names(
"close-button",
system_arguments[:classes]
)
@system_arguments[:"aria-label"] ||= "Close"
end

def call
render(Primer::Beta::BaseButton.new(**@system_arguments)) do
render(Primer::OcticonComponent.new("x"))
end
end
end
end
end
36 changes: 2 additions & 34 deletions app/components/primer/close_button.rb
Original file line number Diff line number Diff line change
@@ -1,39 +1,7 @@
# frozen_string_literal: true

module Primer
# Use `CloseButton` to render an `×` without default button styles.
#
# @accessibility
# `CloseButton` has a default `aria-label` of "Close" to provides assistive technologies with an accessible label.
# You may choose to override this label with something more descriptive via [system_arguments][0].
# [0]: https://primer.style/view-components/system-arguments#html-attributes
class CloseButton < Primer::Component
status :beta

DEFAULT_TYPE = :button
TYPE_OPTIONS = [DEFAULT_TYPE, :submit].freeze

# @example Default
# <%= render(Primer::CloseButton.new) %>
#
# @param type [Symbol] <%= one_of(Primer::CloseButton::TYPE_OPTIONS) %>
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
def initialize(type: DEFAULT_TYPE, **system_arguments)
@system_arguments = deny_tag_argument(**system_arguments)
@system_arguments[:tag] = :button
@system_arguments[:block] = false
@system_arguments[:type] = fetch_or_fallback(TYPE_OPTIONS, type, DEFAULT_TYPE)
@system_arguments[:classes] = class_names(
"close-button",
system_arguments[:classes]
)
@system_arguments[:"aria-label"] ||= "Close"
end

def call
render(Primer::Beta::BaseButton.new(**@system_arguments)) do
render(Primer::OcticonComponent.new("x"))
end
end
class CloseButton < Primer::Beta::CloseButton
status :deprecated
end
end
2 changes: 1 addition & 1 deletion docs/src/@primer/gatsby-theme-doctocat/nav.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
- title: ClipboardCopy
url: "/components/clipboardcopy"
- title: CloseButton
url: "/components/closebutton"
url: "/components/beta/closebutton"
- title: Counter
url: "/components/counter"
- title: Details
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ class CloseButton < Base
ATTRIBUTES = %w[type].freeze

TYPE_OPTIONS = Primer::ViewComponents::Constants.get(
component: "Primer::CloseButton",
component: "Primer::Beta::CloseButton",
constant: "TYPE_OPTIONS"
).freeze

DEFAULT_TYPE = Primer::ViewComponents::Constants.get(
component: "Primer::CloseButton",
component: "Primer::Beta::CloseButton",
constant: "DEFAULT_TYPE"
).freeze

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ class CloseButtonComponentMigrationCounter < BaseLinter

TAGS = %w[button].freeze
CLASSES = %w[close-button].freeze
MESSAGE = "We are migrating close-button to use [Primer::CloseButton](https://primer.style/view-components/components/closebutton), please try to use that instead of raw HTML."
MESSAGE = "We are migrating close-button to use [Primer::Beta::CloseButton](https://primer.style/view-components/components/closebutton), please try to use that instead of raw HTML."
ARGUMENT_MAPPER = ArgumentMappers::CloseButton
COMPONENT = "Primer::CloseButton"
COMPONENT = "Primer::Beta::CloseButton"

ALLOWED_OCTICON_ARGS = %w[icon aria-label aria].freeze

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module DeprecatedComponentsHelpers
# If there is no alternative to suggest, set the value to nil
COMPONENT_TO_USE_INSTEAD = {
"Primer::ButtonGroup" => "Primer::Beta::ButtonGroup",
"Primer::CloseButton" => "Primer::Beta::CloseButton",
"Primer::Alpha::AutoComplete::Item" => "Primer::Beta::AutoComplete::Item",
"Primer::Alpha::AutoComplete" => "Primer::Beta::AutoComplete",
"Primer::BlankslateComponent" => "Primer::Beta::Blankslate",
Expand Down
1 change: 1 addition & 0 deletions lib/rubocop/cop/primer/component_name_migration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class ComponentNameMigration < BaseCop
DEPRECATIONS = {
"Primer::BoxComponent" => "Primer::Box",
"Primer::ButtonGroup" => "Primer::Beta::ButtonGroup",
"Primer::CloseButton" => "Primer::Beta::CloseButton",
"Primer::BlankslateComponent" => "Primer::Beta::Blankslate",
"Primer::BorderBoxComponent" => "Primer::Beta::BorderBox",
"Primer::BaseButton" => "Primer::Beta::BaseButton",
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/docs.rake
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ namespace :docs do
Primer::Beta::ButtonGroup,
Primer::Alpha::ButtonMarketing,
Primer::ClipboardCopy,
Primer::CloseButton,
Primer::Beta::CloseButton,
Primer::CounterComponent,
Primer::DetailsComponent,
Primer::Dropdown,
Expand Down
22 changes: 11 additions & 11 deletions static/arguments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,17 @@
type: Hash
default: N/A
description: "[System arguments](/system-arguments)"
- component: CloseButton
source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/close_button.rb
parameters:
- name: type
type: Symbol
default: "`:button`"
description: One of `:button` or `:submit`.
- name: system_arguments
type: Hash
default: N/A
description: "[System arguments](/system-arguments)"
- component: Flash
source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/flash.rb
parameters:
Expand Down Expand Up @@ -588,17 +599,6 @@
type: Hash
default: N/A
description: "[System arguments](/system-arguments)"
- component: CloseButton
source: https://github.com/primer/view_components/tree/main/app/components/primer/close_button.rb
parameters:
- name: type
type: Symbol
default: "`:button`"
description: One of `:button` or `:submit`.
- name: system_arguments
type: Hash
default: N/A
description: "[System arguments](/system-arguments)"
- component: Counter
source: https://github.com/primer/view_components/tree/main/app/components/primer/counter_component.rb
parameters:
Expand Down
1 change: 1 addition & 0 deletions static/audited_at.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"Primer::Beta::Breadcrumbs": "",
"Primer::Beta::Breadcrumbs::Item": "",
"Primer::Beta::ButtonGroup": "",
"Primer::Beta::CloseButton": "",
"Primer::Beta::Flash": "",
"Primer::Beta::Text": "",
"Primer::Beta::Truncate": "",
Expand Down
12 changes: 7 additions & 5 deletions static/constants.json
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,13 @@
},
"Primer::Beta::ButtonGroup": {
},
"Primer::Beta::CloseButton": {
"DEFAULT_TYPE": "button",
"TYPE_OPTIONS": [
"button",
"submit"
]
},
"Primer::Beta::Flash": {
"DEFAULT_SCHEME": "default",
"SCHEME_MAPPINGS": {
Expand Down Expand Up @@ -359,11 +366,6 @@
"Primer::ClipboardCopy": {
},
"Primer::CloseButton": {
"DEFAULT_TYPE": "button",
"TYPE_OPTIONS": [
"button",
"submit"
]
},
"Primer::ConditionalWrapper": {
},
Expand Down
3 changes: 2 additions & 1 deletion static/statuses.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"Primer::Beta::Breadcrumbs": "beta",
"Primer::Beta::Breadcrumbs::Item": "alpha",
"Primer::Beta::ButtonGroup": "beta",
"Primer::Beta::CloseButton": "beta",
"Primer::Beta::Flash": "beta",
"Primer::Beta::Text": "beta",
"Primer::Beta::Truncate": "beta",
Expand All @@ -34,7 +35,7 @@
"Primer::ButtonComponent": "beta",
"Primer::ButtonGroup": "deprecated",
"Primer::ClipboardCopy": "beta",
"Primer::CloseButton": "beta",
"Primer::CloseButton": "deprecated",
"Primer::ConditionalWrapper": "alpha",
"Primer::Content": "stable",
"Primer::CounterComponent": "beta",
Expand Down
13 changes: 13 additions & 0 deletions stories/primer/beta/close_button_stories.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

require "primer/beta/close_button"

class Primer::Beta::CloseButtonStories < ViewComponent::Storybook::Stories
layout "storybook_preview"

story(:close_button) do
controls do
select(:type, Primer::Beta::CloseButton::TYPE_OPTIONS, Primer::Beta::CloseButton::DEFAULT_TYPE)
end
end
end
11 changes: 0 additions & 11 deletions stories/primer/close_button_stories.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

require "test_helper"

class PrimerCloseButtonTest < Minitest::Test
class PrimerBetaCloseButtonTest < Minitest::Test
include Primer::ComponentTestHelpers

def test_renders
render_inline(Primer::CloseButton.new)
render_inline(Primer::Beta::CloseButton.new)

assert_selector("button[type='button'][aria-label='Close'].close-button") do
assert_selector(".octicon.octicon-x")
end
end

def test_renders_as_submit
render_inline(Primer::CloseButton.new(type: :submit))
render_inline(Primer::Beta::CloseButton.new(type: :submit))

assert_selector("button[type='submit'].close-button") do
assert_selector(".octicon.octicon-x")
Expand All @@ -23,7 +23,7 @@ def test_renders_as_submit

def test_renders_defaults_type_to_button
without_fetch_or_fallback_raises do
render_inline(Primer::CloseButton.new(type: :invalid))
render_inline(Primer::Beta::CloseButton.new(type: :invalid))

assert_selector("button[type='button'].close-button") do
assert_selector(".octicon.octicon-x")
Expand All @@ -32,19 +32,19 @@ def test_renders_defaults_type_to_button
end

def test_does_not_render_content
render_inline(Primer::CloseButton.new) { "content" }
render_inline(Primer::Beta::CloseButton.new) { "content" }

refute_text("content")
end

def test_does_not_render_as_block
render_inline(Primer::CloseButton.new(block: true))
render_inline(Primer::Beta::CloseButton.new(block: true))

refute_selector(".btn-block")
end

def test_can_override_aria_label
render_inline(Primer::CloseButton.new(aria: { label: "Label" }))
render_inline(Primer::Beta::CloseButton.new(aria: { label: "Label" }))

assert_selector("button[type='button'][aria-label='Label'].close-button")
end
Expand Down
3 changes: 2 additions & 1 deletion test/components/component_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class PrimerComponentTest < Minitest::Test
[Primer::Alpha::ButtonMarketing, {}],
[Primer::ClipboardCopy, { "aria-label": "String that will be read to screenreaders", value: "String that will be copied" }],
[Primer::ConditionalWrapper, { condition: true, tag: :div }],
[Primer::CloseButton, {}],
[Primer::Beta::CloseButton, {}],
[Primer::CounterComponent, { count: 1 }],
[Primer::DetailsComponent, {}, lambda do |component|
component.summary { "Foo" }
Expand Down Expand Up @@ -88,6 +88,7 @@ class PrimerComponentTest < Minitest::Test
def test_registered_components
ignored_components = [
"Primer::ButtonGroup",
"Primer::CloseButton",
"Primer::Component",
"Primer::OcticonsSymbolComponent",
"Primer::Content",
Expand Down
2 changes: 1 addition & 1 deletion test/linters/argument_mappers/close_button_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def test_returns_no_arguments_if_only_close_button
end

def test_returns_type_argument
Primer::CloseButton::TYPE_OPTIONS.each do |type|
Primer::Beta::CloseButton::TYPE_OPTIONS.each do |type|
# button is the default, so it does not require a `type` argument
next if type == :button

Expand Down
12 changes: 6 additions & 6 deletions test/linters/close_button_component_migration_counter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def test_autocorrects_using_primer_octicon_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(\"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(\"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand All @@ -28,7 +28,7 @@ def test_autocorrects_using_octicon_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(\"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(\"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand All @@ -40,7 +40,7 @@ def test_autocorrects_using_primer_octicon_hash_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(\"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(\"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand All @@ -54,7 +54,7 @@ def test_autocorrects_using_primer_octicon_class_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(\"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(\"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand All @@ -68,7 +68,7 @@ def test_autocorrects_with_primer_octicon_class_without_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(\"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(\"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand Down Expand Up @@ -112,7 +112,7 @@ def test_autocorrects_mixing_button_args_and_octicon_aria_label
HTML

expected = <<~HTML
<%= render Primer::CloseButton.new(ml: 1, \"aria-value\": \"some value\", \"aria-label\": \"Close menu\") %>
<%= render Primer::Beta::CloseButton.new(ml: 1, \"aria-value\": \"some value\", \"aria-label\": \"Close menu\") %>
HTML

assert_equal expected, corrected_content
Expand Down