@xtreamsrl/react-feature-flags
TypeScript icon, indicating that this package has built-in type declarations

0.1.4 • Public • Published

@xtreamsrl/react-feature-flags

This package exposes a collections of hooks and utilities to manage feature flags.

Installation

npm install @xtreamsrl/react-feature-flags

Usage

In order to use the feature flag utilities, the package must be configured with a manger of your choice that implements FeatureFlagManager interface.

This can be done using one of the available managers (growthbook or launchdarkly) or by implementing a custom one.

Define the features you want to manage by augmenting the Features interface; Then assign the value of the flag (defined in the chosen manager platform) to the corresponding key within the FeaturesMap .

// features.d.ts
import { Features } from '@xtreamsrl/react-feature-flags';

declare module '@xtreamsrl/react-feature-flags' {

  interface Features {
    /*
    * Here you can list your app features.
    * This interface will define the keys of the features map.
    *
    * Logout: boolean;
    *
    */
  }
}
// featuresMap.ts
import { FeaturesMap } from "@xtreamsrl/react-feature-flags";

export const featuresMap: FeaturesMap = {
  /*
  * Here you can map your app features (defined in features.d.ts)
  * to the according flag keys (defined in the chosen manager platform)
  *
  * Logout: {
  *   flag: 'show-logout',
  * }
  *
  */
};

Client Side Usage

Set up the feature flag manager and the retrieval hook with configureManager and configureFeatureFlags. Be sure to wrap the main app with the FeatureFlagProvider.

// app.tsx
import { configureManager, configureFeatureFlags, FeatureFlagProvider } from '@xtreamsrl/react-feature-flags'
import { featuresMap } from '.shared/feature-flags'

configureFeatureFlags({
    useFeatureFlagValue: /* Add your hook for managing flags values here */,
});

configureManager({
manager: /* Add here an instance of a manager implementing FeatureFlagManager interface */
});

export function App() {
  return (
    <FeatureFlagProvider featuresMap={featuresMap}>
      <MainApp />
    </FeatureFlagProvider>
  );
}

Feature Flag Value

To retrieve the flag value use the useFlag hook or the FeatureWrapper,

useFlag

// Welcome.tsx
import React, { useCallback } from "react";
import { useFlag } from '@xtreamsrl/react-feature-flags';
import { FeatureFlag } from './shared/feature-flags';

export function Welcome() {  
  const allowSkipTutorial = useFlag(FeatureFlag.AllowSkipTutorial);

  const onClick = useCallback(() => {
    const url = allowSkipTutorial ? '/home' : '/tutorial';
    // ... redirect(url)
  }, [])
  
  return (
    <div>
      <h1>Welcome 👋</h1>
      <button onClick={onClick}>Click Me</button>
    </div>
  );
}

FeatureWrapper

// Welcome.tsx
import React from "react";
import { FeatureWrapper } from '@xtreamsrl/react-feature-flags';
import { FeatureFlag } from './shared/feature-flags';

export function Welcome() {
  return (
    <div>
      <h1>Welcome 👋</h1>
      <FeatureWrapper feature={FeatureFlag.PROFILE}>
        <Profile />
      </FeatureWrapper>
    </div>
  );
}

Who we are

xtream logo

A proudly 🇮🇹 software development and data science startup.
We consider ourselves a family of talented and passionate people building their own products and powerful solutions for our clients. Get to know us more on xtreamers.io or follow us on LinkedIn.

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.1.40latest

Version History

VersionDownloads (Last 7 Days)Published
0.1.40
0.1.354
0.1.20
0.1.10
0.0.60
0.0.50
0.0.40

Package Sidebar

Install

npm i @xtreamsrl/react-feature-flags

Weekly Downloads

54

Version

0.1.4

License

none

Unpacked Size

45.6 kB

Total Files

10

Last publish

Collaborators

  • xtreamsrl