In the past it would have been confusing to add a way to directly enable/disable a phase in the phases table because it was in the middle of the form. So we would have had next to each other controls that don't do anything until the form is sent and controls which modify the database immediately. That's why we couldn't add the checkboxes we used when using the wizard. Now the phases aren't on the same page as the budget form, so we can edit them independently. We're using a switch, so it's consistent with the way we enable/disable features. We could have used checkboxes, but with checkboxes, users expect they aren't changing anything until they click on a button to send the form, so we'd have to add a button, and it might be missed since we're going to add "buttons" for headings and groups to this page which won't send a form but will be links. Since we're changing the element with JavaScript after an AJAX call, we need a way to find the button we're changing. The easiest way is adding an ID attribute to all admin actions buttons/links.
28 lines
498 B
Ruby
28 lines
498 B
Ruby
class Admin::BudgetPhases::ToggleEnabledComponent < ApplicationComponent
|
|
attr_reader :phase
|
|
|
|
def initialize(phase)
|
|
@phase = phase
|
|
end
|
|
|
|
private
|
|
|
|
def options
|
|
{
|
|
text: text,
|
|
method: :patch,
|
|
remote: true,
|
|
"aria-label": t("admin.budgets.edit.enable_phase", phase: phase.name),
|
|
"aria-pressed": phase.enabled?
|
|
}
|
|
end
|
|
|
|
def text
|
|
if phase.enabled?
|
|
t("shared.yes")
|
|
else
|
|
t("shared.no")
|
|
end
|
|
end
|
|
end
|