diff --git a/app/components/form_elements/fieldset_toggle_component.html.erb b/app/components/form_elements/fieldset_toggle_component.html.erb
index 28549bc..e120f9d 100644
--- a/app/components/form_elements/fieldset_toggle_component.html.erb
+++ b/app/components/form_elements/fieldset_toggle_component.html.erb
@@ -1,9 +1,23 @@
-<%= tag.public_send(@tag, class: "flex items-center justify-between py-6") do %>
+<%= tag.public_send @tag, class: "flex items-center justify-between mb-6 last:mb-0",
+ data: @form.present? ? {
+ controller: "settings--toggle",
+ :'settings--toggle-switch-enabled-value' => @enabled.to_s
+ } : nil do %>
<%= @descripton %>
- <%= render FormElements::ToggleComponent.new(enabled: @enabled, input_enabled: @input_enabled) %>
+ <%= render FormElements::ToggleComponent.new(
+ enabled: @enabled,
+ input_enabled: @input_enabled,
+ data: {
+ :'settings--toggle-target' => "button",
+ action: "settings--toggle#toggleSwitch"
+ }) %>
+ <% if @form.present? %>
+ <%= @form.hidden_field @attribute, value: @enabled.to_s,
+ data: { :'settings--toggle-target' => "input" } %>
+ <% end %>
<% end %>
diff --git a/app/components/form_elements/fieldset_toggle_component.rb b/app/components/form_elements/fieldset_toggle_component.rb
index aa64535..b38bee7 100644
--- a/app/components/form_elements/fieldset_toggle_component.rb
+++ b/app/components/form_elements/fieldset_toggle_component.rb
@@ -2,7 +2,10 @@
module FormElements
class FieldsetToggleComponent < ViewComponent::Base
- def initialize(tag: "li", enabled: false, input_enabled: true, title:, description:)
+ def initialize(form: nil, attribute: nil, tag: "li", enabled: false,
+ input_enabled: true, title:, description:)
+ @form = form
+ @attribute = attribute
@tag = tag
@enabled = enabled
@input_enabled = input_enabled
diff --git a/app/components/form_elements/toggle_component.html.erb b/app/components/form_elements/toggle_component.html.erb
index 9023b7f..14f0a81 100644
--- a/app/components/form_elements/toggle_component.html.erb
+++ b/app/components/form_elements/toggle_component.html.erb
@@ -1,13 +1,15 @@
-
+<% end %>
diff --git a/app/components/form_elements/toggle_component.rb b/app/components/form_elements/toggle_component.rb
index 9702dfb..d5ee036 100644
--- a/app/components/form_elements/toggle_component.rb
+++ b/app/components/form_elements/toggle_component.rb
@@ -2,9 +2,10 @@
module FormElements
class ToggleComponent < ViewComponent::Base
- def initialize(enabled:, input_enabled: true)
+ def initialize(enabled:, input_enabled: true, data: nil)
@enabled = !!enabled
@input_enabled = input_enabled
+ @data = data
end
end
end
diff --git a/app/javascript/controllers/settings/toggle_controller.js b/app/javascript/controllers/settings/toggle_controller.js
new file mode 100644
index 0000000..5c9cff1
--- /dev/null
+++ b/app/javascript/controllers/settings/toggle_controller.js
@@ -0,0 +1,25 @@
+import { Controller } from "@hotwired/stimulus"
+
+export default class extends Controller {
+ static targets = [ "button", "switch", "input" ]
+ static values = { switchEnabled: Boolean }
+
+ toggleSwitch () {
+ this.switchEnabledValue = !this.switchEnabledValue
+ this.inputTarget.value = this.switchEnabledValue.toString()
+
+ if (this.switchEnabledValue) {
+ this.buttonTarget.setAttribute("aria-checked", "true");
+ this.buttonTarget.classList.remove("bg-gray-200")
+ this.buttonTarget.classList.add("bg-blue-600")
+ this.switchTarget.classList.remove("translate-x-0")
+ this.switchTarget.classList.add("translate-x-5")
+ } else {
+ this.buttonTarget.setAttribute("aria-checked", "false");
+ this.buttonTarget.classList.remove("bg-blue-600")
+ this.buttonTarget.classList.add("bg-gray-200")
+ this.switchTarget.classList.remove("translate-x-5")
+ this.switchTarget.classList.add("translate-x-0")
+ }
+ }
+}