Module: Playbook::PbFormsHelper

Includes:
PbFormsGlobalPropsHelper
Included in:
PbKitHelper
Defined in:
lib/playbook/pb_forms_helper.rb

Instance Method Summary collapse

Instance Method Details

#pb_form_with(data: {}, validate: false, loading: false, **kwargs, &block) ⇒ Object

Renders a pb form with ::Playbook::Forms::Builder, that can render Playbook kits in the most railsie way.

I.e.:

pb_form_with model: @user do |f|
  f.text_field :name
end

The form can also validate the fields, and trigger the validation automatically:

I.e.:

pb_form_with model: @user, validate: true do |f|
  f.text_field :name, required: true
end

Parameters:

  • data (Hash) (defaults to: {})

    hash of data attributes

  • validate (Boolean) (defaults to: false)

    whether validation should be triggered or not

See Also:

  • for other options
[View source]

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/playbook/pb_forms_helper.rb', line 28

def pb_form_with(data: {}, validate: false, loading: false, **kwargs, &block)
  global_props, form_options = extract_all_props(kwargs)

  classnames = ["pb-form"]
  classnames << form_options[:class] if form_options[:class].present?
  classnames << "pb_form_loading" if loading
  classnames.concat(generate_prop_classes(global_props))

  data = data.merge("pb-form-validation" => validate)

  options = form_options.merge(
    class: classnames.compact.join(" "),
    data: data,
    builder: ::Playbook::Forms::Builder
  )

  content_for(:pb_js, javascript_tag(<<~JS))
    window.addEventListener("DOMContentLoaded", function() { PbFormValidation.start() })
    window.addEventListener("DOMContentLoaded", () => formHelper())
  JS

  form_with(**options, &block)
end