GithubHelp home page GithubHelp logo

Comments (8)

tdeekens avatar tdeekens commented on August 25, 2024
  1. This would probably involve renaming ld-wrapper to launchdarkly-adapter
  2. This would include adding a localstorage-adapter
  3. This would include having to pass in an adapter to ConfigureFlopFlip manually

Possible examples to configure adapters

import launchdarklyAdapter from '@flopflip/launchdarkly-adapter';

<ConfigureFlopFlip adapter={launchdarklyAdapter} adapterArgs={{ clientSideId: '123' }}>
  <App />
<ConfigureFlopFlip>

//..

import localstorageAdapter from '@flopflip/localstorage-adapter';

<ConfigureFlopFlip adapter={localstorageAdapter}>
  <App />
<ConfigureFlopFlip>

or something like

import launchdarklyAdapter from '@flopflip/launchdarkly-adapter';

launchdarklyAdapter.configure({ ldClientSideId: '123' })

<ConfigureFlopFlip adapter={launchdarklyAdapter}>
  <App />
<ConfigureFlopFlip>

All adapters would have to satisfy an API which could be roughly something like

  • onStatusStateChange: Used for adapter to be able to communicate if they're ready, setup up and able interact with their "backend"
  • onFlagsStateChange: Used to signal that the status of one or multiple flags has changed

from flopflip.

tdeekens avatar tdeekens commented on August 25, 2024

The localstorage adapter would

  1. Define a "constant" as a key to where flags are status data is persisted
  2. Expose the API above (same for the launchdarkly-adapter`
  3. Poll localstorage and "emit" changes though the onFlagsStateChange callback

from flopflip.

tdeekens avatar tdeekens commented on August 25, 2024

Another adapter could be an url-adapter which reads the flag statuses from the url. Behind the scenes it could use something like https://github.com/ReactTraining/history

from flopflip.

tdeekens avatar tdeekens commented on August 25, 2024

Another dapter could be an api-adapter which behind the scenes fetches flags from some service.

apiAdapter.configure({ url: 'http://my-great-service.com/flags', userKey: '123' })

It would then poll for changes taking the url http://my-great-service.com/flags/123. It compares the newly polled flags to the last and triggers the onFlagsStateChange callback to flush them into redux or the broadcasting mechanism.

from flopflip.

tdeekens avatar tdeekens commented on August 25, 2024

Curious to what @dferber90 thinks if he finds time having a look 😅 .

from flopflip.

dferber90 avatar dferber90 commented on August 25, 2024

Adapters sound like a powerful concept.

Somehow seems like a perfect use-case for observable. But then again it would only raise more questions and we can achieve everything through functions already anyways. So I'd not use them.

After thinking about it a bit I'd prefer the version with adapterArgs as it provides a more natural to reconfigure the adapter in case information changes (like user logging out).

Maybe use a signature for the Adapter like this:

export default createAdapter = adapterArgs => (setStatusState, setFlagsState) => {
  setStatusState({ ready: true })
  setFlagsState({ FOO_FLAG: true })
}

Now either we only call the factory when adapterArgs' reference changes or we leave that to the adapter itself.

from flopflip.

tdeekens avatar tdeekens commented on August 25, 2024

This will be part of #49. Thanks for all the feedback! Currently the launchdarkly-adapter has been ported while a memory-adapter has been created. The release will likely also contain a localstorage-adapter. Currently it feels like api-adapters are generally pretty bound to people's use cases, APIs and platforms. As a result I'd like to wait if someone actually needs on or if the implementation details settles.

from flopflip.

dferber90 avatar dferber90 commented on August 25, 2024

👍❤️

from flopflip.

Related Issues (20)

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.