summaryrefslogtreecommitdiff
path: root/lib/gitlab/form_builders/gitlab_ui_form_builder.rb
blob: a5290508e42039bccdf1eb2a6b84ba81c9cdd671 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# frozen_string_literal: true

module Gitlab
  module FormBuilders
    class GitlabUiFormBuilder < ActionView::Helpers::FormBuilder
      def gitlab_ui_checkbox_component(
        method,
        label,
        help_text: nil,
        checkbox_options: {},
        checked_value: '1',
        unchecked_value: '0',
        label_options: {}
      )
        @template.content_tag(
          :div,
          class: 'gl-form-checkbox custom-control custom-checkbox'
        ) do
          @template.check_box(
            @object_name,
            method,
            format_options(checkbox_options, ['custom-control-input']),
            checked_value,
            unchecked_value
          ) +
          @template.label(
            @object_name, method, format_options(label_options, ['custom-control-label'])
          ) do
            if help_text
              @template.content_tag(
                :span,
                label
              ) +
              @template.content_tag(
                :p,
                help_text,
                class: 'help-text'
              )
            else
              label
            end
          end
        end
      end

      private

      def format_options(options, classes)
        classes << options[:class]

        objectify_options(options.merge({ class: classes.flatten.compact }))
      end
    end
  end
end