1.17.0 • Published 6 years ago

@riqra/feature-flags v1.17.0

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

🚩 feature-flags 🚩

Feature flags made easy.

:package:   Components and HOCs

1.- <FlagProvider />

FlagProvider is expected to be used as the outermost component in your app's tree.

We asume all 'flags' passed down to FlagProvider are enabled

2.- <Flag />

Flag is the core component of this package, has the ability to decide what will be render

3.- withFlag(...args)

As the name may suggest, withFlag is a HoC, it's intended usage is to wrap components with flag validation.

💻   Usage

Install as project dependency:

$ yarn add @riqra/feature-flags

Now you can use feature-flags to control the rendering of your components. See below the examples to use this awesome package:

Basic use of Flag

import { FlagProvider, Flag } from '@riqra/flag-provider'

const flags = [
  { slug: 'feature-1' },
  { slug: 'feature-2' }
  // { slug: 'feature-3' }
]

class App extends Component {
  
  render () {
    <FlagProvider flags={flags}>
      <Flag slug='feature-1'>
        <div>
          This will be rendered, since 'feature-1' was passed 
          down to FlagProvider.
        <div>
      </Flag>
      <Flag slug='feature-3'>
        <div>
          This will not be rendered
        </div>
      </Flag>
    </FlagProvider>
  }
}

Render prop

import { FlagProvider, Flag } from '@riqra/flag-provider'

const flags = [
  { slug: 'feature-1' },
  { slug: 'feature-2' },
  { slug: 'permission-1' }
]

class App extends Component {
  
  render () {
    <FlagProvider flags={flags}>
      <Flag slug='feature-1'>
        {enabled => {
          if (!enabled) {
            return <div>You cannot see the content</div>
          }
          return (
            <div>
              This will be rendered, since 'feature-1'
              was passed down to FlagProvider.
            <div>
          )
        }}
      </Flag>

      <Flag
        slug='permission-1'
        render={enabled => {
          if (!enabled) {
            return <div>You do not have permission</div>
          }
          return (
            <div>
              This demonstrates another use of render prop
            </div>
          )
        }}
      />
    </FlagProvider>
  }
}

Wrap any component

import { FlagProvider, withFlag } from '@riqra/feature-flags'
import MyRegularComponent from './my-regular-component'
  
const MyFlagTogglableComponent = withFlag('feature-1')(MyRegularComponent)

const flags = [
  { slug: 'feature-1' },
  { slug: 'feature-2' }
  // { slug: 'feature-3' }
]
  
class App extends Component {
  render() {
    return (
      <FlagProvider flags={flags}>
        <MyFlagTogglableComponent />
      </FlagProvider>
    )
  }
}

Support multiple flags

import { FlagProvider, withFlag } from '@riqra/feature-flags'
import MyRegularComponent from './my-regular-component'

const slugs = ['feature-2', 'feature-1']

const flags = [
  { slug: 'feature-1' },
  { slug: 'feature-2' },
  { slug: 'feature-3' }
]

class App extends Component {
  render() {
    return (
      <FlagProvider flags={flags}>
        <Flag slugs={slugs}>
          <MyRegularComponent />
        </Flag>
      </FlagProvider>
    )
  }
}

Support wrap multiple flags

import { FlagProvider, withFlag } from '@riqra/feature-flags'
import MyRegularComponent from './my-regular-component'

const slugs = ['feature-2', 'feature-1']
const MyFlagTogglableComponent = withFlag(...slugs)(MyRegularComponent)

const flags = [
  { slug: 'feature-1' },
  { slug: 'feature-2' },
  { slug: 'feature-3' }
]

class App extends Component {
  render() {
    return (
      <FlagProvider flags={flags}>
        <MyFlagTogglableComponent />
      </FlagProvider>
    )
  }
}
1.17.0

6 years ago

1.16.0

6 years ago

1.15.0

6 years ago

1.14.0

6 years ago

1.13.0

6 years ago

1.12.0

6 years ago

1.11.0

6 years ago

1.10.0

6 years ago

1.9.0

6 years ago

1.8.0

6 years ago

1.7.0

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.0

6 years ago

1.3.0

6 years ago

1.2.0

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago