mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 23:07:28 +08:00
FEATURE: allow wizard checkbox field to be disabled (#17916)
* FEATURE: allow wizard checkbox field to be disabled * Changes per review feedback
This commit is contained in:
@ -7,6 +7,7 @@ export default Component.extend({
|
|||||||
":wizard-container__field",
|
":wizard-container__field",
|
||||||
"typeClasses",
|
"typeClasses",
|
||||||
"field.invalid",
|
"field.invalid",
|
||||||
|
"field.disabled",
|
||||||
],
|
],
|
||||||
|
|
||||||
@discourseComputed("field.type", "field.id")
|
@discourseComputed("field.type", "field.id")
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<label class="wizard-container__label">
|
<label class="wizard-container__label">
|
||||||
<Input @type="checkbox" class="wizard-container__checkbox" @checked={{this.field.value}} />
|
<Input @type="checkbox" disabled={{this.field.disabled}} class="wizard-container__checkbox" @checked={{this.field.value}} />
|
||||||
<span class="wizard-container__checkbox-slider"></span>
|
<span class="wizard-container__checkbox-slider"></span>
|
||||||
{{#if this.field.icon}}
|
{{#if this.field.icon}}
|
||||||
{{d-icon this.field.icon}}
|
{{d-icon this.field.icon}}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class WizardFieldSerializer < ApplicationSerializer
|
class WizardFieldSerializer < ApplicationSerializer
|
||||||
attributes :id, :type, :required, :value, :label, :placeholder, :description, :extra_description, :icon, :show_in_sidebar
|
attributes :id, :type, :required, :value, :label, :placeholder, :description, :extra_description, :icon, :disabled, :show_in_sidebar
|
||||||
has_many :choices, serializer: WizardFieldChoiceSerializer, embed: :objects
|
has_many :choices, serializer: WizardFieldChoiceSerializer, embed: :objects
|
||||||
|
|
||||||
def id
|
def id
|
||||||
@ -75,6 +75,14 @@ class WizardFieldSerializer < ApplicationSerializer
|
|||||||
object.icon.present?
|
object.icon.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def disabled
|
||||||
|
object.disabled
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_disabled?
|
||||||
|
object.disabled
|
||||||
|
end
|
||||||
|
|
||||||
def show_in_sidebar
|
def show_in_sidebar
|
||||||
object.show_in_sidebar
|
object.show_in_sidebar
|
||||||
end
|
end
|
||||||
|
@ -16,7 +16,7 @@ class Wizard
|
|||||||
end
|
end
|
||||||
|
|
||||||
class Field
|
class Field
|
||||||
attr_reader :id, :type, :required, :value, :icon, :choices, :show_in_sidebar
|
attr_reader :id, :type, :required, :value, :icon, :choices, :disabled, :show_in_sidebar
|
||||||
attr_accessor :step
|
attr_accessor :step
|
||||||
|
|
||||||
def initialize(attrs)
|
def initialize(attrs)
|
||||||
@ -27,6 +27,7 @@ class Wizard
|
|||||||
@required = !!attrs[:required]
|
@required = !!attrs[:required]
|
||||||
@value = attrs[:value]
|
@value = attrs[:value]
|
||||||
@icon = attrs[:icon]
|
@icon = attrs[:icon]
|
||||||
|
@disabled = attrs[:disabled]
|
||||||
@choices = []
|
@choices = []
|
||||||
@show_in_sidebar = attrs[:show_in_sidebar]
|
@show_in_sidebar = attrs[:show_in_sidebar]
|
||||||
end
|
end
|
||||||
|
@ -16,9 +16,12 @@ RSpec.describe Wizard::Step do
|
|||||||
dropdown.add_choice('candy')
|
dropdown.add_choice('candy')
|
||||||
dropdown.add_choice('nachos', data: { color: 'yellow' })
|
dropdown.add_choice('nachos', data: { color: 'yellow' })
|
||||||
dropdown.add_choice('pizza', label: 'Pizza!')
|
dropdown.add_choice('pizza', label: 'Pizza!')
|
||||||
|
|
||||||
expect(step.fields).to eq([text, dropdown])
|
expect(step.fields).to eq([text, dropdown])
|
||||||
expect(dropdown.choices.size).to eq(3)
|
expect(dropdown.choices.size).to eq(3)
|
||||||
|
|
||||||
|
checkbox = step.add_field(id: 'foobar', type: 'checkbox', disabled: true)
|
||||||
|
expect(step.fields).to eq([text, dropdown, checkbox])
|
||||||
|
expect(checkbox.disabled).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user