Giter VIP home page Giter VIP logo

segmented-control's Introduction

.

npm version

<SegmentedControl> – a good-lookin' segmented control React component

<SegmentedControlWithoutStyles> - a version that doesn't import the stylesheet (if <SegmentedControl> doesn't work in your build systemβ€”eg Next.js)

<FormsySegmentedControl> – a version for Formsy

UX background

In iOS, a segmented control is usually used to display different views (the equivalent of tabs in material design). However, segmented controls are increasingly being used in lieu of plain radio buttons or select inputs (dropdowns, or material menus). See for instance the designer lukew's recommendations:

Other good choices are radio groups, like this Ionic component, or a button list, as used in the Yo or Thumbtack apps, that looks the same, except on click, instead of seeing a checkmark, you're taken to the next screen.

A similar component in material design is the toggle button.

Component

Demo: lorensr.me/segmented-control

two three disabled formsy

Usage

npm install --save segmented-control

Plain

<SegmentedControl> props:

  • className: PropTypes.string: optional custom className for the container in addition to the default segmented-control class.
  • name: PropTypes.string.isRequired: name of the radio <input>s. Also the attribute included in the first argument of Formsy's onSubmit.
  • options: PropTypes.array.isRequired: Maximum length 10, each element an object of the form:
    • label: display text
    • value: value passed to setValue and Formsy's onSubmit
    • default: true: one object must have this
    • disabled: true: optional
  • style: PropTypes.object: common styles are width and color
  • setValue: PropTypes.func: callback on input change, passed the value string. Called once initially with the default value on mount.
import { SegmentedControl } from 'segmented-control'

<SegmentedControl
  name="oneDisabled"
  options={[
    { label: "One", value: "one", disabled: true },
    { label: "Two", value: "two" },
    { label: "Three", value: "three", default: true },
    { label: "Four", value: "four" }
  ]}
  setValue={newValue => this.doSomething(newValue)}
  style={{ width: 400, color: '#ab47bc' }} // purple400
  />

Without styles

As above, but with a different import statement:

import SegmentedControlWithoutStyles from 'segmented-control/SegmentedControlWithoutStyles'

Formsy

<FormsySegmentedControl> has the same props, but includes Formsy.Mixin and calls Formsy's setValue, so that the value is included in onSubmit (see the event triggered by submitting the demo form). In the example below, the first arg of onSubmit would be {exampleInput: 'two'}:

import Formsy from 'formsy-react'
import Button from '@material-ui/core/Button'
import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'
import { FormsySegmentedControl } from 'segmented-control'

<MuiThemeProvider>
  <Formsy.Form
    onValidSubmit={this.onSubmit}
    >
    <FormsySegmentedControl
      name="exampleInput"
      options={[
        { label: "One", value: "one" },
        { label: "Two", value: "two", default: true },
        { label: "Three", value: "three" }
      ]}
      style={{ width: 300, color: 'rgb(0, 188, 212)' }} // match default material-ui primary teal
      />
    <Button
      variant="contained"
      type="submit"
      label="submit formsy form"
      style={{
        display: 'block',
        width: 200,
        margin: "20px auto"
      }}
      primary
    >
      Submit
    </Button>
  </Formsy.Form>
</MuiThemeProvider>

Development

git clone [email protected]:lorensr/segmented-control.git
npm install
npm start

http://localhost:9009

Credits

segmented-control's People

Contributors

lorensr avatar dependabot[bot] avatar loan-laux avatar rvcarlig avatar loanlaux avatar structbylightning avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.