{"version":3,"file":"static/js/133.d0eb9dbc.chunk.js","mappings":"sJAMO,SAASA,EAAoBC,GAClC,MAAM,SAAEC,GAAaD,GACdE,EAAkBC,IAAuBC,EAAAA,EAAAA,UAAoB,CAAC,IAS/D,SAAEC,GAAaC,EAAAA,EACrB,OACEC,IAAAA,cAACF,EAAQ,CAACG,MAAO,CAAEN,mBAAkBO,uBATPC,IAC9BP,GAAqBQ,IAAmC,IACnDA,KACAD,KACF,IAMAT,EAGP,C,qQClBO,SAASW,EACdC,EACAC,GAAY,GAEZ,MAAMC,EAAuC,iBAAXF,EAE5BG,EAA2D,CAAC,EAC5DC,EAAO,4BACXF,EAAsB,SAAQF,IAAY,IAAGA,MAEzC,iBAAEX,EAAgB,uBAAEO,IAA2BS,EAAAA,EAAAA,KAE/CC,EAAwBC,IAC5B,IAAIC,GAAgB,EAQpB,MAPmB,iBAARD,EACTC,EAAgBC,OAAOC,KAAKrB,GAAkBsB,SAASJ,GAC9CK,MAAMC,QAAQN,KACvBC,EAAgBD,EAAIO,OAAOC,GACzBN,OAAOC,KAAKrB,GAAkBsB,SAASI,MAGpCP,CAAa,EAEhBQ,GAAiBC,EAAAA,EAAAA,MACjBC,GAAQC,EAAAA,EAAAA,aAAuBf,OAAKgB,EAAW,CACnDC,QAASpB,IAAcK,EAAqBN,KAAYgB,IAGpDM,EACJhB,EAAqBN,IACH,UAAlBkB,GAAOK,QACW,YAAlBL,GAAOK,OAET,GAAIjB,EAAqBN,IAAWsB,EAClC,GAAIV,MAAMC,QAAQb,GAChB,IAAK,MAAMO,KAAOP,EAChBG,EAAkBH,EAAOO,IAAQlB,EAAiBW,EAAOO,SAG3DJ,EAAkBH,GAAUX,EAAiBW,QAE1C,GAAIkB,GAAOM,MAAQF,EAAS,CACjC,IAAK,MAAMf,KAAOW,EAAMM,KACtBrB,EAAkBI,GAAOW,EAAMM,KAAKjB,IA4BxC,WACE,GAAIK,MAAMC,QAAQb,GAChB,IAAK,MAAMyB,KAASzB,EACbS,OAAOC,KAAKP,GAAmBQ,SAASX,EAAOyB,MAClDtB,EAAkBH,EAAOyB,SAAUL,QAItClB,GACAO,OAAOC,KAAKP,GAAmBQ,SAASX,KAEzCG,EAAkBH,QAAUoB,EAEhC,CAvCEM,EACF,CAmBA,OAjBAC,EAAAA,EAAAA,YAAU,KACR,GAAIL,EAAS,CACX,MAAMM,EAAUnB,OAAOC,KAAKP,GAAmB0B,QAC5Cd,IAAoD,IAA9CN,OAAOC,KAAKrB,GAAkBsB,SAASI,KAGhD,GAAIa,EAAQE,OAAS,EAAG,CACtB,MAAMC,EAA6BtB,OAAOuB,YACxCvB,OAAOwB,QAAQ9B,GAAmB0B,QAAO,EAAEtB,KACzCqB,EAAQjB,SAASJ,MAGrBX,EAAuBmC,EACzB,CACF,IACC,CAAC1C,EAAkBc,EAAmBmB,EAAS1B,IAE3C,CACL0B,UACAY,QAAShB,EAAMgB,QACfvC,MAAOO,EAAqBC,EAAoBA,EAAkBH,GAiBtE,C,0DCnFO,MAAMP,GAAqB0C,EAAAA,EAAAA,oBAEhCf,GAIK,SAASf,IACd,MAAM+B,GAAUC,EAAAA,EAAAA,YAAW5C,GAC3B,IAAK2C,EACH,MAAM,IAAIE,MACR,8GAGJ,OAAOF,CACT,C","sources":["webpack:///./src/feature-flag/FeatureFlagProvider.tsx","webpack:///./src/feature-flag/useFeatureFlag.ts","webpack:///./src/feature-flag/useFeatureFlagConfig.ts"],"sourcesContent":["import React, { ReactNode, SetStateAction, useState } from 'react';\nimport { ObjectMap, featureFlagContext } from './useFeatureFlagConfig';\n\ntype Props = {\n  children: ReactNode;\n};\nexport function FeatureFlagProvider(props: Readonly<Props>) {\n  const { children } = props;\n  const [featureFlagCache, setFeatureFlagCache] = useState<ObjectMap>({});\n\n  const updateFeatureFlagCache = (newData: ObjectMap) => {\n    setFeatureFlagCache((prevData: SetStateAction<ObjectMap>) => ({\n      ...prevData,\n      ...newData,\n    }));\n  };\n\n  const { Provider } = featureFlagContext;\n  return (\n    <Provider value={{ featureFlagCache, updateFeatureFlagCache }}>\n      {children}\n    </Provider>\n  );\n}\n","import { useEffect } from 'react';\nimport { useApiQuery } from '../query';\nimport { ObjectMap, useFeatureFlagContext } from './useFeatureFlagConfig';\nimport { useIsTokenExpired } from '../auth/user-info.hooks';\n\nexport function useFeatureFlag(\n  params: string | string[],\n  isEnabled = true\n): any {\n  const isMultiFlagRequest = typeof params === 'object';\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const featureFlagValues: { [key: string]: string | undefined } = {};\n  const url = `/shared/v1/feature-flags${\n    isMultiFlagRequest ? `?keys=${params}` : `/${params}`\n  }`;\n  const { featureFlagCache, updateFeatureFlagCache } = useFeatureFlagContext();\n\n  const doesFeatureFlagExist = (key?: string | string[]) => {\n    let isFlagInCache = false;\n    if (typeof key === 'string') {\n      isFlagInCache = Object.keys(featureFlagCache).includes(key);\n    } else if (Array.isArray(key)) {\n      isFlagInCache = key.every((x) =>\n        Object.keys(featureFlagCache).includes(x)\n      );\n    }\n    return isFlagInCache;\n  };\n  const isTokenExpired = useIsTokenExpired();\n  const query = useApiQuery<ObjectMap>(url, undefined, {\n    enabled: isEnabled && !doesFeatureFlagExist(params) && !isTokenExpired,\n  });\n\n  const isReady =\n    doesFeatureFlagExist(params) ||\n    query?.status === 'error' ||\n    query?.status === 'success';\n\n  if (doesFeatureFlagExist(params) && isReady) {\n    if (Array.isArray(params)) {\n      for (const key in params) {\n        featureFlagValues[params[key]] = featureFlagCache[params[key]];\n      }\n    } else {\n      featureFlagValues[params] = featureFlagCache[params];\n    }\n  } else if (query?.data && isReady) {\n    for (const key in query.data) {\n      featureFlagValues[key] = query.data[key];\n    }\n    setDefaultForNonExistingKey();\n  }\n\n  useEffect(() => {\n    if (isReady) {\n      const newKeys = Object.keys(featureFlagValues).filter(\n        (x) => Object.keys(featureFlagCache).includes(x) === false\n      );\n\n      if (newKeys.length > 0) {\n        const newFeatureFlags: ObjectMap = Object.fromEntries(\n          Object.entries(featureFlagValues).filter(([key]) =>\n            newKeys.includes(key)\n          )\n        );\n        updateFeatureFlagCache(newFeatureFlags);\n      }\n    }\n  }, [featureFlagCache, featureFlagValues, isReady, updateFeatureFlagCache]);\n\n  return {\n    isReady,\n    refetch: query.refetch,\n    value: isMultiFlagRequest ? featureFlagValues : featureFlagValues[params],\n  };\n\n  function setDefaultForNonExistingKey() {\n    if (Array.isArray(params)) {\n      for (const param in params) {\n        if (!Object.keys(featureFlagValues).includes(params[param])) {\n          featureFlagValues[params[param]] = undefined;\n        }\n      }\n    } else if (\n      !isMultiFlagRequest &&\n      !Object.keys(featureFlagValues).includes(params)\n    ) {\n      featureFlagValues[params] = undefined;\n    }\n  }\n}\n","import { createContext, useContext } from 'react';\n\nexport type ObjectMap = {\n  [key: string]: string | undefined;\n};\n\n/** context for feature Flag */\nexport const featureFlagContext = createContext<\n  IFeatureFlagContext | undefined\n>(undefined);\n\n/** Hook to access 'featureFlagContext' Data.\n */\nexport function useFeatureFlagContext() {\n  const context = useContext(featureFlagContext);\n  if (!context) {\n    throw new Error(\n      'featureFlagContext value is undefined. Make sure you use the FeatureFlagProvider before using the context.'\n    );\n  }\n  return context;\n}\n\nexport type IFeatureFlagContext = {\n  featureFlagCache: ObjectMap;\n  updateFeatureFlagCache: (newData: ObjectMap) => void;\n};\n"],"names":["FeatureFlagProvider","props","children","featureFlagCache","setFeatureFlagCache","useState","Provider","featureFlagContext","React","value","updateFeatureFlagCache","newData","prevData","useFeatureFlag","params","isEnabled","isMultiFlagRequest","featureFlagValues","url","useFeatureFlagContext","doesFeatureFlagExist","key","isFlagInCache","Object","keys","includes","Array","isArray","every","x","isTokenExpired","useIsTokenExpired","query","useApiQuery","undefined","enabled","isReady","status","data","param","setDefaultForNonExistingKey","useEffect","newKeys","filter","length","newFeatureFlags","fromEntries","entries","refetch","createContext","context","useContext","Error"],"sourceRoot":""}