Inspired by Elixir's cond
this is a simpler alternative to lodash's _.cond
Install with npm or yarn via
yarn add cond-construct
or
npm i cond-construct
type Cond = (
pairs: Array<[boolean, unknown | (() => unknown)]>,
options?: { strict: boolean }
) => unknown
import cond from 'cond-construct'
const value = cond([
[false, 'false'],
[true, 'true'],
[true, 'true but too late']
])
// value === 'true'
You can disable strict checking by passing options as the second argument:
import cond from 'cond-construct'
const value = cond(
[
[false, 'false'],
[1, 'truthy'],
[true, 'true but also too late']
],
{ strict: false }
)
// value === 'truthy'
Also works nicely with React components as you can have the values lazily evaluated by wrapping it in a function:
import cond from 'cond-construct'
const Component = ({ hasErrors, isNew, isLoading }) => (
<>
{cond([
[isLoading, () => <Loading />],
[isNew, () => <Create />],
[hasErrors, () => <ShowErrors />]
])}
</>
)
- [] Handle multiple method executions
- [] Add more option for falsy value
As all predicates have to be evaluated before the right branch can be chosen, it can have a negative performance impact if you rely on heavy computations here. It's best have simple booleans and resort to _.cond
for complex use cases.