1.0.0 • Published 5 years ago

onno-react v1.0.0

Weekly downloads
42
License
MIT
Repository
github
Last release
5 years ago

onno-react

Code Coverage Bundle Size Build Status License

Onno propTypes for React

yarn add onno-react

Usage

You can use onno-react in place of onno since it re-exports the API:

import styled from "styled-components"
import { display, padding } from "onno-react"

const Box = styled.div(display, padding)

// [{ display: "flex" }, { padding: "10px" }]
<Box display="flex" padding="10px" />

// [{ display: "grid" }, { padding: "20em" }]
<Box d="grid" p="20em" />

To add propTypes for onno's render functions to your components:

import styled from "styled-components"
import { display, padding, propTypes } from "onno-react"

const Box = styled.div(display, padding)

Box.propTypes = propTypes(display, padding)

// Warning: Failed prop type: Invalid prop "display" supplied to "Box".
// Warning: Failed prop type: Invalid prop "padding" supplied to "Box".
<Box display={true} padding={[false]} />

// Warning: Failed prop type: Invalid prop "d" supplied to "Box".
// Warning: Failed prop type: Invalid prop "p" supplied to "Box".
<Box d={true} p={[false]} />

Render functions can be passed to propTypes as an array or list of arguments:

import { display, padding, propTypes } from "onno-react"

// Array of render functions
const propTypes2 = propTypes([display, padding])

// List of render functions
const propTypes1 = propTypes(display, padding)

Following DRY principles, wrap your render functions in an array or use onno's compose method:

import styled from "styled-components"
import { display, padding, compose, propTypes } from "onno-react"

const styles = [display, padding]
const boxSet = compose({
  name: "box",
  renderers: styles
})

// Spread the styles array
const Box1 = styled.div(...styles)
Box1.propTypes = propTypes(styles)

// Pass the composed renderer
const Box2 = styled.div(boxSet)
Box2.propTypes = propTypes(boxSet)

To add other propTypes alongside the render function props:

import styled from "styled-components"
import { display, padding, propTypes } from "onno-react"
import { number, string } from "prop-types"

const styles = [display, padding]

const Box = styled.div(...styles)

Box.propTypes = {
  ...propTypes(styles),
  foo: string.isRequired,
  bar: number.isRequired
}

Sanitizing Props

To sanitize props before applying them to a component, you can use onno's omit function:

import { omit, display, padding } from "onno-react"

const omitPropsKeys = omit({
  propsKeys: ["foo", "bar"]
})

const omitRenderers = omit({
  renderers: [display, padding]
})

const omitComposite = omit({
  propsKeys: ["foo", "bar"],
  renderers: [display, padding]
})

const props = {
  foo: "foo",
  bar: "bar",
  baz: "baz",
  display: "block",
  d: "inline-block",
  padding: 4,
  p: 8
}

// {
//   baz: "baz",
//   display: "block",
//   d: "inline-block",
//   padding: 4,
//   p: 8
// }
omitPropsKeys(props)

// {
//   foo: "foo",
//   bar: "bar",
//   baz: "baz"
// }
omitRenderers(props)

// {
//   baz: "baz"
// }
omitComposite(props)

Author

Matthew Wagerfield

License

MIT

1.0.0

5 years ago

0.6.0

5 years ago

0.5.4

5 years ago

0.5.3

5 years ago

0.5.2

5 years ago

0.5.1

5 years ago

0.5.0

5 years ago

0.4.8

5 years ago

0.4.7

5 years ago

0.4.6

5 years ago

0.4.5

5 years ago

0.4.4

5 years ago

0.4.3

5 years ago

0.4.2

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago

0.0.18

5 years ago

0.0.17

5 years ago

0.0.16

5 years ago

0.0.15

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago