rx/presenters

View on GitHub
app/demo/components/text_fields.pom

Summary

Maintainability
Test Coverage
require_relative '../helpers/indented_grid'

Voom::Presenters.define(:text_fields) do
  helpers Demo::Helpers::IndentedGrid
  attach :top_nav
  attach :component_drawer
  page_title 'Text Fields'

  indented_grid do
    headline 'Text'

    text_field name: :text do
      label 'Text...'
    end

    title 'Restricted Input'
    grid do
      column 3 do
        text_field name: :password, password: true do
          label 'Password'
        end
      end
      column 3 do
        text_field name: :upper, case_type: :upper do
          label 'Upper Only'
        end
      end
      column 3 do
        text_field name: :lower, case_type: :lower do
          label 'Lower Only'
        end
      end
    end

    headline 'Numeric'
    # Client side validation with hints
    title 'With Hints'
    text_field name: :numeric do
      label 'Number...'
      pattern /-?[0-9]*(\.[0-9]+)?/
      hint 'Input should be a number!'
    end

    title 'With Leading Icon'
    text_field name: :numeric do
      label 'Amount'
      icon :attach_money, position: :left
    end

    title 'With Trailing Icon'
    text_field name: :numeric do
      label 'Name'
      icon :remove_red_eye
    end

    blank
    card do
      headline 'Client Side Validations'
      body 'This demonstrates client side validations for text fields '
      text_field id: :my_required_field, name: :field1, required: true do
        label 'Data to post'
        hint 'Hint: You must enter a valid number in the field above'
        validation_error 'This is a custom validation error. This field is required and must be a number.'
        pattern /-?[0-9]*(\.[0-9]+)?/
      end
      text_field name: :field2, required: true do
        label 'More data to post'
      end
      button 'Submit' do
        event :click do
          posts '/_echo_'
          snackbar 'Posted to _echo_'
        end
      end
    end

    blank
    card do
      headline 'Field Level Events'
      title 'Text Fields'
      body 'This demonstrates that a change event will submit the field value to the event action. '\
                 'This works with posts and replace actions'
      text_field name: :myfield do
        label 'Data to post'
        event :change do
          replaces :context_list, :context_list
        end
      end
      attach :context_list
    end

    blank
    card do
      form do
        headline 'Form Level Events'
        title 'Array of Text Fields'
        text_field name: 'myfield[]' do
          label 'Data to post'
        end
        text_field name: 'myfield[]' do
          label 'More data to post'
        end
        button 'Submit' do
          event :click do
            posts '/_echo_'
            snackbar 'Posted to _echo_'
          end
        end
      end
    end

    attach :code, file: __FILE__
  end
end