@flopflip/react-redux
Version:
A feature toggle wrapper to use LaunchDarkly with React Redux
1 lines • 24.5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["reducer","allAdapterIdentifiers","ConfigureAdapter","flagsReducer","statusReducer","createFlagsReducer","allAdapterIdentifiers","DEFAULT_FLAG_PROP_KEY","DEFAULT_FLAGS_PROP_KEY","SharedToggleFeature"],"sources":["../src/constants.ts","../src/ducks/flags.ts","../src/use-feature-toggle.ts","../src/branch-on-feature-toggle.tsx","../src/use-update-flags.ts","../src/ducks/status.ts","../src/use-update-status.ts","../src/configure.tsx","../src/ducks/index.ts","../src/enhancer.ts","../src/use-flag-variations.ts","../src/inject-feature-toggle.tsx","../src/inject-feature-toggles.tsx","../src/toggle-feature.tsx","../src/use-adapter-status.ts","../src/use-all-feature-toggles.ts","../src/use-feature-toggles.ts","../src/use-flag-variation.ts","../src/index.ts"],"sourcesContent":["export const STATE_SLICE = '@flopflip';\n","import { isNil } from '@flopflip/react';\nimport type {\n TAdapterIdentifiers,\n TFlagName,\n TFlagsChange,\n TFlagsContext,\n TFlagVariation,\n} from '@flopflip/types';\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { STATE_SLICE } from '../constants';\nimport type { TState } from '../types';\n\nconst initialState: TFlagsContext = { memory: {} };\n\nconst flagsSlice = createSlice({\n name: 'flags',\n initialState,\n reducers: {\n updateFlags: {\n reducer(\n state,\n action: PayloadAction<\n TFlagsChange & { adapterIdentifiers: TAdapterIdentifiers[] }\n >,\n ) {\n if (action.payload.id) {\n state[action.payload.id] = {\n ...state[action.payload.id],\n ...action.payload.flags,\n };\n return;\n }\n\n for (const adapterId of action.payload.adapterIdentifiers) {\n state[adapterId] = {\n ...state[adapterId],\n ...action.payload.flags,\n };\n }\n },\n prepare(\n flagsChange: TFlagsChange,\n adapterIdentifiers: TAdapterIdentifiers[],\n ) {\n return {\n payload: { ...flagsChange, adapterIdentifiers },\n };\n },\n },\n },\n});\n\nexport const { updateFlags } = flagsSlice.actions;\nexport const reducer = flagsSlice.reducer;\n\nexport const createReducer = (preloadedState: TFlagsContext = initialState) => {\n // oxlint-disable-next-line default-param-last -- false positive\n return (state = preloadedState, action: ReturnType<typeof updateFlags>) =>\n reducer(state, action);\n};\n\nexport const selectFlags = () => (state: TState) =>\n state[STATE_SLICE].flags ?? {};\n\nexport const selectFlag =\n (flagName: TFlagName, adapterIdentifiers: TAdapterIdentifiers[]) =>\n (state: TState): TFlagVariation => {\n const allFlags = selectFlags()(state);\n let foundFlagVariation: TFlagVariation = false;\n\n for (const adapterId of adapterIdentifiers) {\n const flagValue = allFlags[adapterId]?.[flagName];\n if (!isNil(flagValue)) {\n foundFlagVariation = flagValue;\n }\n }\n\n return foundFlagVariation;\n };\n","import { getIsFeatureEnabled, useAdapterContext } from '@flopflip/react';\nimport type { TFlagName, TFlagVariation } from '@flopflip/types';\nimport { useDebugValue } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { selectFlags } from './ducks/flags';\n\nfunction useFeatureToggle(\n flagName: TFlagName,\n flagVariation: TFlagVariation = true,\n) {\n const adapterContext = useAdapterContext();\n const allFlags = useSelector(selectFlags());\n\n const isFeatureEnabled: boolean = getIsFeatureEnabled(\n allFlags,\n adapterContext.adapterEffectIdentifiers,\n flagName,\n flagVariation,\n );\n\n useDebugValue({\n flagName,\n flagVariation,\n isEnabled: isFeatureEnabled,\n });\n\n return isFeatureEnabled;\n}\n\nexport { useFeatureToggle };\n","import type { TFlagName, TFlagVariation } from '@flopflip/types';\nimport React from 'react';\n\nimport { useFeatureToggle } from './use-feature-toggle';\n\ntype TBranchOnFeatureToggleOptions = {\n flag: TFlagName;\n variation?: TFlagVariation;\n};\nfunction branchOnFeatureToggle<OwnProps extends Record<string, unknown>>(\n { flag: flagName, variation: flagVariation }: TBranchOnFeatureToggleOptions,\n UntoggledComponent?: React.ComponentType,\n) {\n return (ToggledComponent: React.ComponentType<OwnProps>) => {\n function WrappedToggledComponent(ownProps: OwnProps) {\n const isFeatureEnabled = useFeatureToggle(flagName, flagVariation);\n\n if (isFeatureEnabled) {\n return <ToggledComponent {...ownProps} />;\n }\n if (UntoggledComponent) {\n return <UntoggledComponent {...ownProps} />;\n }\n return null;\n }\n\n return WrappedToggledComponent;\n };\n}\n\nexport { branchOnFeatureToggle };\n","import type {\n TAdapterEventHandlers,\n TAdapterIdentifiers,\n TFlagsChange,\n} from '@flopflip/types';\nimport { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { updateFlags } from './ducks/flags';\n\ntype TUseUpdateFlagsOptions = {\n adapterIdentifiers: TAdapterIdentifiers[];\n};\nconst useUpdateFlags = ({\n adapterIdentifiers,\n}: TUseUpdateFlagsOptions): TAdapterEventHandlers['onFlagsStateChange'] => {\n const dispatch = useDispatch();\n\n return useCallback(\n (flagsChange: TFlagsChange) =>\n dispatch(updateFlags(flagsChange, adapterIdentifiers)),\n [dispatch, adapterIdentifiers],\n );\n};\n\nexport { useUpdateFlags };\n","import { selectAdapterConfigurationStatus } from '@flopflip/react';\nimport type {\n TAdapterIdentifiers,\n TAdapterStatusChange,\n TAdaptersStatus,\n} from '@flopflip/types';\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nimport { STATE_SLICE } from '../constants';\nimport type { TState } from '../types';\n\nconst initialState: TAdaptersStatus = {};\n\nconst statusSlice = createSlice({\n name: 'status',\n initialState,\n reducers: {\n updateStatus: {\n reducer(\n state,\n action: PayloadAction<\n TAdapterStatusChange & { adapterIdentifiers: TAdapterIdentifiers[] }\n >,\n ) {\n if (action.payload.id) {\n state[action.payload.id] = {\n ...state[action.payload.id],\n ...action.payload.status,\n };\n return;\n }\n\n for (const adapterInterfaceIdentifier of action.payload\n .adapterIdentifiers) {\n state[adapterInterfaceIdentifier] = {\n ...state[adapterInterfaceIdentifier],\n ...action.payload.status,\n };\n }\n },\n prepare(\n statusChange: TAdapterStatusChange,\n adapterIdentifiers: TAdapterIdentifiers[],\n ) {\n return {\n payload: { ...statusChange, adapterIdentifiers },\n };\n },\n },\n },\n});\n\nexport const { updateStatus } = statusSlice.actions;\nexport const reducer = statusSlice.reducer;\n\n// Selectors\ntype TSelectStatusArgs = {\n adapterIdentifiers?: TAdapterIdentifiers[];\n};\n\nexport const selectStatus =\n ({ adapterIdentifiers }: TSelectStatusArgs = {}) =>\n (state: TState) => {\n const { status } = state[STATE_SLICE];\n return selectAdapterConfigurationStatus(status, adapterIdentifiers);\n };\n","import {\n adapterIdentifiers as allAdapterIdentifiers,\n type TAdapterEventHandlers,\n type TAdapterStatusChange,\n} from '@flopflip/types';\nimport { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { updateStatus } from './ducks/status';\n\nconst useUpdateStatus = (): TAdapterEventHandlers['onStatusStateChange'] => {\n const dispatch = useDispatch();\n\n return useCallback(\n (statusChange: TAdapterStatusChange) =>\n dispatch(updateStatus(statusChange, Object.keys(allAdapterIdentifiers))),\n [dispatch],\n );\n};\n\nexport { useUpdateStatus };\n","import { ConfigureAdapter, useAdapterSubscription } from '@flopflip/react';\nimport type {\n TAdapter,\n TConfigureAdapterChildren,\n TConfigureAdapterProps,\n TFlags,\n} from '@flopflip/types';\n// oxlint-disable-next-line no-unused-vars -- false positive\nimport React from 'react';\n\nimport { useUpdateFlags } from './use-update-flags';\nimport { useUpdateStatus } from './use-update-status';\n\ntype TBaseProps = {\n readonly children?: TConfigureAdapterChildren;\n readonly shouldDeferAdapterConfiguration?: boolean;\n readonly defaultFlags?: TFlags;\n};\ntype TProps<AdapterInstance extends TAdapter> = TBaseProps &\n TConfigureAdapterProps<AdapterInstance>;\n\nfunction Configure<AdapterInstance extends TAdapter>({\n adapter,\n adapterArgs,\n children,\n defaultFlags = {},\n shouldDeferAdapterConfiguration = false,\n}: TProps<AdapterInstance>) {\n const adapterIdentifiers = [adapter.id];\n const handleUpdateFlags = useUpdateFlags({ adapterIdentifiers });\n const handleUpdateStatus = useUpdateStatus();\n\n useAdapterSubscription(adapter);\n\n return (\n <ConfigureAdapter\n adapter={adapter}\n adapterArgs={adapterArgs}\n defaultFlags={defaultFlags}\n shouldDeferAdapterConfiguration={shouldDeferAdapterConfiguration}\n onFlagsStateChange={handleUpdateFlags}\n onStatusStateChange={handleUpdateStatus}\n >\n {children}\n </ConfigureAdapter>\n );\n}\n\nConfigure.displayName = 'ConfigureFlopflip';\n\nexport { Configure };\n","import type { TFlagsContext } from '@flopflip/types';\nimport { combineReducers } from '@reduxjs/toolkit';\n\nimport {\n createReducer as createFlagsReducer,\n reducer as flagsReducer,\n} from './flags';\nimport { reducer as statusReducer } from './status';\n\nexport { selectFlag, selectFlags, updateFlags } from './flags';\nexport { updateStatus } from './status';\n\nexport const flopflipReducer = combineReducers({\n flags: flagsReducer,\n status: statusReducer,\n});\nexport const createFlopflipReducer = (\n preloadedState: TFlagsContext = { memory: {} },\n) =>\n combineReducers({\n flags: createFlagsReducer(preloadedState),\n status: statusReducer,\n });\n","import {\n adapterIdentifiers as allAdapterIdentifiers,\n type TAdapter,\n type TAdapterArgs,\n type TAdapterInterface,\n type TAdapterStatusChange,\n type TFlagsChange,\n} from '@flopflip/types';\nimport { createAction } from '@reduxjs/toolkit';\nimport type { Reducer, Store, StoreEnhancerStoreCreator } from 'redux';\n\nimport { updateFlags, updateStatus } from './ducks';\nimport type { TState } from './types';\n\n// Create typed actions\nconst configureAdapter = createAction<{\n adapter: TAdapter;\n adapterArgs: TAdapterArgs;\n}>('flopflip/configureAdapter');\n\nfunction createFlopFlipEnhancer(\n adapter: TAdapter,\n adapterArgs: TAdapterArgs,\n): <StoreState extends TState>(\n next: StoreEnhancerStoreCreator<StoreState>,\n) => (reducer: Reducer<StoreState>, preloadedState?: StoreState) => Store {\n return (next) =>\n (...args) => {\n const store: Store = next(...args);\n\n // Dispatch configuration action\n store.dispatch(configureAdapter({ adapter, adapterArgs }));\n\n // Configure adapter with bound action creators\n (adapter as TAdapterInterface<TAdapterArgs>).configure(adapterArgs, {\n onFlagsStateChange: (flagsChange: TFlagsChange) => {\n store.dispatch(updateFlags(flagsChange, [adapter.id]));\n },\n onStatusStateChange: (statusChange: TAdapterStatusChange) => {\n store.dispatch(\n updateStatus(statusChange, Object.keys(allAdapterIdentifiers)),\n );\n },\n });\n\n return store;\n };\n}\n\nexport { createFlopFlipEnhancer };\n","import { getFlagVariation, useAdapterContext } from '@flopflip/react';\nimport type { TFlagName, TFlagVariation } from '@flopflip/types';\nimport { useSelector } from 'react-redux';\n\nimport { selectFlags } from './ducks/flags';\n\nfunction useFlagVariations(\n flagNames: (TFlagName | undefined)[],\n): TFlagVariation[] {\n const adapterContext = useAdapterContext();\n const allFlags = useSelector(selectFlags());\n const flagVariations: TFlagVariation[] = flagNames.map((requestedVariation) =>\n getFlagVariation(\n allFlags,\n adapterContext.adapterEffectIdentifiers,\n requestedVariation,\n ),\n );\n\n return flagVariations;\n}\n\nexport { useFlagVariations };\n","import {\n DEFAULT_FLAG_PROP_KEY,\n setDisplayName,\n wrapDisplayName,\n} from '@flopflip/react';\nimport type { TFlagName, TFlagVariation } from '@flopflip/types';\nimport React from 'react';\n\nimport { useFlagVariations } from './use-flag-variations';\n\ntype InjectedProps = Record<string, TFlagVariation>;\n\nconst injectFeatureToggle =\n <OwnProps extends Record<string, unknown>>(\n flagName: TFlagName,\n propKey: string = DEFAULT_FLAG_PROP_KEY,\n ) =>\n (\n Component: React.ComponentType<any>,\n ): React.ComponentType<OwnProps & InjectedProps> => {\n function WrappedComponent(ownProps: OwnProps) {\n const [flagVariation] = useFlagVariations([flagName]);\n const props = {\n ...ownProps,\n [propKey]: flagVariation,\n };\n\n return <Component {...props} />;\n }\n\n setDisplayName(wrapDisplayName(WrappedComponent, 'injectFeatureToggle'));\n\n return WrappedComponent;\n };\n\nexport { injectFeatureToggle };\n","import {\n DEFAULT_FLAGS_PROP_KEY,\n setDisplayName,\n wrapDisplayName,\n} from '@flopflip/react';\nimport type { TFlagName, TFlags } from '@flopflip/types';\nimport React from 'react';\n\nimport { useFlagVariations } from './use-flag-variations';\n\ntype InjectedProps = Record<string, TFlags>;\n\nconst injectFeatureToggles =\n <OwnProps extends Record<string, unknown>>(\n flagNames: TFlagName[],\n propKey: string = DEFAULT_FLAGS_PROP_KEY,\n ) =>\n (\n Component: React.ComponentType,\n ): React.ComponentType<OwnProps & InjectedProps> => {\n function WrappedComponent(ownProps: OwnProps) {\n const flagVariations = useFlagVariations(flagNames);\n const flags = Object.fromEntries(\n flagNames.map((flagName, indexOfFlagName) => [\n flagName,\n flagVariations[indexOfFlagName],\n ]),\n );\n const props = {\n ...ownProps,\n [propKey]: flags,\n };\n\n return <Component {...props} />;\n }\n\n setDisplayName(wrapDisplayName(WrappedComponent, 'injectFeatureToggles'));\n\n return WrappedComponent;\n };\n\nexport { injectFeatureToggles };\n","import {\n ToggleFeature as SharedToggleFeature,\n type TToggleFeatureProps,\n} from '@flopflip/react';\nimport type { TFlagName, TFlagVariation } from '@flopflip/types';\n// oxlint-disable-next-line no-unused-vars -- false positive\nimport React from 'react';\n\nimport { useFeatureToggle } from './use-feature-toggle';\n\ntype TProps = {\n flag: TFlagName;\n variation?: TFlagVariation;\n} & Omit<TToggleFeatureProps, 'isFeatureEnabled'>;\n\nfunction ToggleFeature<OwnProps extends TProps>({\n flag,\n variation,\n ...remainingProps\n}: OwnProps) {\n const isFeatureEnabled = useFeatureToggle(flag, variation);\n\n return (\n <SharedToggleFeature\n flag={flag}\n variation={variation}\n {...remainingProps}\n isFeatureEnabled={isFeatureEnabled}\n />\n );\n}\n\nToggleFeature.displayName = 'ToggleFeature';\n\nexport { ToggleFeature };\n","import type { TAdapterIdentifiers } from '@flopflip/types';\nimport { useDebugValue } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { selectStatus } from './ducks/status';\n\ntype TUseAdapterStatusArgs = { adapterIdentifiers?: TAdapterIdentifiers[] };\nfunction useAdapterStatus({ adapterIdentifiers }: TUseAdapterStatusArgs = {}) {\n const adapterStatus = useSelector(selectStatus({ adapterIdentifiers }));\n\n useDebugValue({ adapterStatus });\n\n return adapterStatus;\n}\n\nexport { useAdapterStatus };\n","import { useAdapterContext } from '@flopflip/react';\nimport type { TFlags } from '@flopflip/types';\nimport { useSelector } from 'react-redux';\n\nimport { selectFlags } from './ducks/flags';\n\nfunction useAllFeatureToggles(): TFlags {\n const adapterContext = useAdapterContext();\n const allFlags = useSelector(selectFlags());\n const reversedAdapterEffectIdentifiers = [\n ...adapterContext.adapterEffectIdentifiers,\n ].toReversed();\n\n return reversedAdapterEffectIdentifiers.reduce<TFlags>(\n (_allFlags, adapterIdentifier) => ({\n ..._allFlags,\n ...allFlags[adapterIdentifier],\n }),\n {},\n );\n}\n\nexport { useAllFeatureToggles };\n","import { getIsFeatureEnabled, useAdapterContext } from '@flopflip/react';\nimport type { TFlagName, TFlags, TFlagVariation } from '@flopflip/types';\nimport { useSelector } from 'react-redux';\n\nimport { selectFlags } from './ducks/flags';\n\nfunction useFeatureToggles(flags: TFlags) {\n const allFlags = useSelector(selectFlags());\n const adapterContext = useAdapterContext();\n\n const requestedFlags: boolean[] = Object.entries(flags).reduce<boolean[]>(\n (previousFlags, [flagName, flagVariation]: [TFlagName, TFlagVariation]) => {\n const isFeatureEnabled: boolean = getIsFeatureEnabled(\n allFlags,\n adapterContext.adapterEffectIdentifiers,\n flagName,\n flagVariation,\n );\n\n previousFlags.push(isFeatureEnabled);\n\n return previousFlags;\n },\n [],\n );\n\n return requestedFlags;\n}\n\nexport { useFeatureToggles };\n","import type { TFlagName, TFlagVariation } from '@flopflip/types';\n\nimport { useFlagVariations } from './use-flag-variations';\n\nfunction useFlagVariation(flagName?: TFlagName): TFlagVariation {\n const [flagVariation] = useFlagVariations([flagName]);\n\n return flagVariation;\n}\n\nexport { useFlagVariation };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { branchOnFeatureToggle } from './branch-on-feature-toggle';\nexport { Configure as ConfigureFlopFlip } from './configure';\nexport { STATE_SLICE as FLOPFLIP_STATE_SLICE } from './constants';\nexport {\n createFlopflipReducer,\n flopflipReducer,\n selectFlag as selectFeatureFlag,\n selectFlags as selectFeatureFlags,\n} from './ducks';\nexport { createFlopFlipEnhancer } from './enhancer';\nexport { injectFeatureToggle } from './inject-feature-toggle';\nexport { injectFeatureToggles } from './inject-feature-toggles';\nexport { ReconfigureAdapter as ReconfigureFlopFlip } from './reconfigure';\nexport { ToggleFeature } from './toggle-feature';\nexport { useAdapterReconfiguration } from './use-adapter-reconfiguration';\nexport { useAdapterStatus } from './use-adapter-status';\nexport { useAllFeatureToggles } from './use-all-feature-toggles';\nexport { useFeatureToggle } from './use-feature-toggle';\nexport { useFeatureToggles } from './use-feature-toggles';\nexport { useFlagVariation } from './use-flag-variation';\nexport { useFlagVariations } from './use-flag-variations';\n\nexport { version };\n"],"mappings":"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"}