{"version":3,"file":"static/js/casino-games.74371bd2.chunk.js","mappings":"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","sources":["elements/Accounts/_partials/Favorites/FavoritesCasinoContent/FavoriteProviders/skeleton.tsx","newcomponents/UI/UserPersonalization/__partials/Steps/SelectCasinoGames/PersonalizedGameCard.tsx","newcomponents/UI/UserPersonalization/__partials/Steps/SelectCasinoGames/PersonalizedGamesProvider.tsx","newelements/Casino/Games/__partials/constants/generic.ts","newelements/Casino/Games/__partials/hooks/useSelectedCategory.ts","newelements/Casino/Games/__partials/providers/CasinoGamesConditionalsProvider.tsx","newelements/Casino/Games/__partials/providers/CasinoGamesFetchDisabledContext.tsx","newelements/Casino/Games/__partials/providers/CasinoGamesFetchParamsContext.tsx","newelements/Casino/Games/__partials/state/conditionals-reducer.ts","newelements/Casino/Games/__partials/state/reducer.ts","newelements/Casino/Games/__partials/utils/default-constants.ts","newelements/Casino/Games/__partials/constants/fetch-params.ts","newelements/Casino/Games/__partials/utils/compute-configs.ts","newelements/Casino/Games/__partials/components/EmptyCasinoGamesResult/index.tsx","utils/generic/divide-array.ts","newelements/Casino/Games/__partials/components/GamesCarousel/SeeAllGames.tsx","newelements/Casino/Games/__partials/hooks/useGamesLoadMore.ts","newelements/Casino/Games/__partials/components/GamesByCategory/Skeleton.tsx","newelements/Casino/Games/__partials/components/GamesCarousel/index.tsx","hooks/useDebouncedCallback.ts","newelements/Casino/Games/__partials/components/GamesLazyLoad/index.tsx","newelements/Casino/Games/__partials/components/GamesByCategory/index.tsx","newhooks/generic/useQueryClient.ts","newelements/Casino/Games/__partials/utils/check-selected-category.ts","newelements/Casino/Games/__partials/hooks/useGamesCombinedData.ts","newhooks/casino/useCasinoOnlinePlayers.ts","newelements/Casino/Games/__partials/hooks/useCombineFavoriteGames.ts","newelements/Casino/Games/__partials/utils/check-backend-anomaly.ts","newelements/Casino/Games/GamesContent.tsx","newelements/Casino/Games/__partials/hooks/useGamesQuery.ts","newelements/Casino/Games/__partials/hooks/useGamesOrder.ts","newelements/Casino/Games/index.tsx","newhooks/dom/useInView.ts","services/casino/casino-fetch-games-query.ts"],"sourcesContent":["import { ReactElement } from 'react';\nimport cc from 'classcat';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { Skeleton } from 'newcomponents/UI/Skeleton';\nimport './index.less';\n\nexport const FavoriteCasinoProviderCardSkeleton = (): ReactElement => {\n  return (\n    <div className=\"favoritesCasinoProviders__provider\">\n      <Skeleton\n        active\n        title={{\n          width: '35px',\n          style: { height: 35, margin: 10 }\n        }}\n        paragraph={false}\n        className=\"matchHeader__skeleton\"\n      />\n      <Skeleton\n        active\n        title={{ width: 276, style: { height: 175 } }}\n        paragraph={false}\n        className={cc([\n          'matchHeader__skeleton providerRightImage__skeleton',\n          {\n            'providerRightImage__skeleton--rtl': SpringConfigs.IS_RTL\n          }\n        ])}\n      />\n      <Skeleton\n        active\n        title={{ width: '40%', style: { height: 20 } }}\n        paragraph={false}\n        className=\"matchHeader__skeleton\"\n      />\n    </div>\n  );\n};\n","import { useContext } from 'react';\nimport cc from 'classcat';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { isMobile } from 'utils/is-mobile';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport { PersonalizedGamesContext } from './PersonalizedGamesProvider';\nimport { Checkbox } from 'newcomponents/UI/Checkbox';\nimport './index.less';\n\nexport const PersonalizedGameCard = ({ game }: { game: NewCasinoGame }) => {\n  const { games, onCheck } = useContext(PersonalizedGamesContext);\n\n  return (\n    <div\n      key={game.id}\n      className={cc([\n        'personalizedCasinoGames-item',\n        {\n          selected: games?.length && games.find(item => item.id === game.id),\n          'personalizedCasinoGames__item--mobile': isMobile()\n        }\n      ])}\n      onClick={() => {\n        onCheck && onCheck?.(game);\n      }}\n    >\n      <div className=\"personalizedCasinoGames-item-img\">\n        <img\n          key={game.id}\n          src={`${\n            SpringConfigs.CASINO_HIGH_QUALITY_PICTURES && game.icon_3\n              ? game.icon_3\n              : isMobile() && game.icon_1\n              ? game.icon_1\n              : game.icon_2\n          }?v=${SpringConfigs.VERSION}`}\n          alt={game.name}\n          loading=\"lazy\"\n        />\n      </div>\n      <div className=\"personalizedCasinoGames-item-footer\">\n        <span className=\"personalizedCasinoGames-item-name globalEllipsis\">\n          {game.name}\n        </span>\n        <span className=\"personalizedCasinoGames-item-providerName\">\n          {game.provider_title}\n        </span>\n      </div>\n      {games && games.find(item => item.id === game.id) ? (\n        <Checkbox className=\"personalizedCasinoGames-item-checkbox\" checked />\n      ) : null}\n    </div>\n  );\n};\n","import { createContext, ReactNode } from 'react';\nimport { NewCasinoGame } from 'interfaces/new-casino';\n\ntype Props = {\n  children: ReactNode;\n  value: {\n    games: NewCasinoGame[] | null;\n    onCheck: (value: NewCasinoGame) => void | null;\n  };\n};\nexport const PersonalizedGamesContext = createContext<Props['value']>({\n  games: null,\n  onCheck: () => {}\n});\n\nexport const PersonalizedGamesProvider = ({ children, value }: Props) => {\n  return (\n    <PersonalizedGamesContext.Provider value={value}>\n      {children}\n    </PersonalizedGamesContext.Provider>\n  );\n};\n","export const CASINO_GAMES_SLIDER_LIMIT_MULTIPLIER = 2;\n","import { useLocation } from 'react-router-dom';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport { mountPoint } from 'utils/generic/route-manipulation';\nimport { useSbRouteMatch } from 'newhooks/generic/useSbRouteMatch';\nimport { CasinoGamesConfigs } from '../providers/CasinoGamesConfigsContext';\n\nexport const useSelectedCategory = ({\n  configs\n}: {\n  configs: Partial<CasinoGamesConfigs>;\n}) => {\n  const location = useLocation();\n  const routeMatch = useSbRouteMatch(\n    `${mountPoint(location.pathname, false, true)}/:category`\n  );\n\n  const selectedCategory =\n    !configs.bindWithCategories && !configs.groupAllByCategories\n      ? configs.categoryIds || CUSTOM_CATEGORIES.all.id\n      : routeMatch?.params?.category || CUSTOM_CATEGORIES.all.id;\n\n  return { selectedCategory };\n};\n","import {\n  createContext,\n  memo,\n  ReactElement,\n  ReactNode,\n  useContext\n} from 'react';\nimport {\n  CasinoGamesConditionalsActionType,\n  ConditionalsState\n} from '../state/conditionals-reducer';\n\nexport type CasinoGamesConditionalsProviderProps = {\n  children: ReactNode;\n  value: {\n    conditionals: Partial<ConditionalsState>;\n    dispatchConditionals: (action: {\n      type: CasinoGamesConditionalsActionType;\n      payload?: Partial<ConditionalsState>;\n    }) => void;\n  };\n};\n\nconst CasinoGamesConditionalsContext = createContext<\n  CasinoGamesConditionalsProviderProps['value']\n>({\n  conditionals: {},\n  dispatchConditionals: () => {}\n});\n\nexport const CasinoGamesConditionalsProvider = memo(\n  (props: CasinoGamesConditionalsProviderProps): ReactElement => {\n    return (\n      <CasinoGamesConditionalsContext.Provider value={props.value}>\n        {props.children}\n      </CasinoGamesConditionalsContext.Provider>\n    );\n  }\n);\n\nexport const useCasinoGamesConditionalsValues =\n  (): CasinoGamesConditionalsProviderProps['value'] => {\n    return useContext(CasinoGamesConditionalsContext);\n  };\n","import { createContext, ReactElement, ReactNode, useContext } from 'react';\n\nexport type CasinoGamesFetchDisabledProviderProps = {\n  children: ReactNode;\n  value: {\n    isFetchDisabled: boolean;\n    setIsFetchDisabled: (value: boolean) => void;\n  };\n};\n\nconst CasinoGamesFetchDisabledContext = createContext<\n  CasinoGamesFetchDisabledProviderProps['value']\n>({\n  isFetchDisabled: false,\n  setIsFetchDisabled: () => {}\n});\n\nexport const CasinoGamesFetchDisabledProvider = (\n  props: CasinoGamesFetchDisabledProviderProps\n): ReactElement => {\n  return (\n    <CasinoGamesFetchDisabledContext.Provider value={props.value}>\n      {props.children}\n    </CasinoGamesFetchDisabledContext.Provider>\n  );\n};\n\nexport const useCasinoGamesFetchDisabledValues =\n  (): CasinoGamesFetchDisabledProviderProps['value'] => {\n    return useContext(CasinoGamesFetchDisabledContext);\n  };\n","import { createContext, ReactElement, ReactNode, useContext } from 'react';\nimport { NewCasinoGamesFetchingParams } from 'interfaces/new-casino';\nimport { CasinoGamesFetchingParamsActionType } from '../state/reducer';\n\nexport type CasinoGamesFetchParamsProviderProps = {\n  children: ReactNode;\n  value: {\n    fetchParams: Partial<NewCasinoGamesFetchingParams>;\n    dispatchFetchParams: (action: {\n      type: CasinoGamesFetchingParamsActionType;\n      payload?: Partial<NewCasinoGamesFetchingParams>;\n    }) => void;\n  };\n};\n\nconst CasinoGamesFetchParamsContext = createContext<\n  CasinoGamesFetchParamsProviderProps['value']\n>({\n  fetchParams: {},\n  dispatchFetchParams: () => {}\n});\n\nexport const CasinoGamesFetchParamsProvider = (\n  props: CasinoGamesFetchParamsProviderProps\n): ReactElement => {\n  return (\n    <CasinoGamesFetchParamsContext.Provider value={props.value}>\n      {props.children}\n    </CasinoGamesFetchParamsContext.Provider>\n  );\n};\n\nexport const useCasinoGamesFetchParamsValues =\n  (): CasinoGamesFetchParamsProviderProps['value'] => {\n    return useContext(CasinoGamesFetchParamsContext);\n  };\n","export enum CasinoGamesConditionalsActionType {\n  SET = 'SET_CONDITIONAL',\n  RESET = 'RESET_CONDITIONALS'\n}\n\nexport interface ConditionalsState {\n  emptyResults: boolean;\n  loading: boolean;\n  queryLoading: boolean;\n}\n\nexport const casinoGamesConditionalsReducer = (\n  state: Partial<ConditionalsState>,\n  action: {\n    type: CasinoGamesConditionalsActionType;\n    payload?: Partial<ConditionalsState>;\n  }\n): Partial<ConditionalsState> => {\n  const { type, payload } = action;\n\n  switch (type) {\n    case CasinoGamesConditionalsActionType.SET:\n      return { ...state, ...payload };\n    case CasinoGamesConditionalsActionType.RESET:\n      return {};\n    default:\n      return state;\n  }\n};\n","import { NewCasinoGamesFetchingParams } from 'interfaces/new-casino';\n\nexport enum CasinoGamesFetchingParamsActionType {\n  SET = 'SET_FETCHING_PARAMS',\n  RESET = 'RESET_FETCHING_PARAMS'\n}\n\nexport const casinoGamesFetchingParamsReducer = (\n  state: Partial<NewCasinoGamesFetchingParams>,\n  action: {\n    type: CasinoGamesFetchingParamsActionType;\n    payload?: Partial<NewCasinoGamesFetchingParams>;\n  }\n): Partial<NewCasinoGamesFetchingParams> => {\n  const { type, payload } = action;\n\n  switch (type) {\n    case CasinoGamesFetchingParamsActionType.SET:\n      return { ...state, ...payload };\n    case CasinoGamesFetchingParamsActionType.RESET:\n      return {};\n    default:\n      return state;\n  }\n};\n","import { CasinoGamesLoadMoreBtnType } from '../providers/CasinoGamesConfigsContext';\n\nexport const CasinoGamesDefaultConstants = {\n  LOAD_MORE_TYPE: CasinoGamesLoadMoreBtnType.BUTTON,\n  GAMES_PER_ROW: 6,\n  GAMES_ROWS: 1,\n  CASINO_GAMES_LIMIT: 16,\n  LOAD_MORE_BUTTON_ENABLED: false,\n  ARROWS_ENABLED: false,\n  CATEGORY_NAME_VISIBLE: false\n};\n","import { LIVE_CASINO_CATEGORY } from 'utils/constants/casino/casino_categories';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport {\n  ENewCasinoGamesFetchingParamsKey,\n  NewCasinoGamesFetchingParams\n} from 'interfaces/new-casino';\nimport type { CasinoGamesConfigs } from '../providers/CasinoGamesConfigsContext';\n\nexport const INITIAL_FETCH_PARAMS_STATE: Partial<NewCasinoGamesFetchingParams> =\n  {\n    by_key: ENewCasinoGamesFetchingParamsKey.Category,\n    external_id: undefined,\n    provider: undefined\n  };\n\nexport const INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_ALL_CATEGORY: Partial<NewCasinoGamesFetchingParams> =\n  {\n    by_key: ENewCasinoGamesFetchingParamsKey.Id,\n    external_id: undefined,\n    provider: undefined,\n    _fake_category: CUSTOM_CATEGORIES.all.id\n  };\n\nexport const INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_LIVE_CASINO_CATEGORY: Partial<NewCasinoGamesFetchingParams> =\n  {\n    by_key: ENewCasinoGamesFetchingParamsKey.Id,\n    external_id: undefined,\n    provider: undefined,\n    category: `${LIVE_CASINO_CATEGORY}`\n  };\n\nconst INITIAL_FETCH_PARAMS_BY_SKIP_CATEGORY: Record<\n  string,\n  Partial<NewCasinoGamesFetchingParams>\n> = {\n  [CUSTOM_CATEGORIES.all.id]:\n    INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_ALL_CATEGORY,\n  [`${LIVE_CASINO_CATEGORY}`]:\n    INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_LIVE_CASINO_CATEGORY\n};\n\nexport const getInitialFetchParams = (configs: Partial<CasinoGamesConfigs>) => {\n  return configs.skipQueryKeysCheck\n    ? INITIAL_FETCH_PARAMS_BY_SKIP_CATEGORY[\n        configs.categoryIds || CUSTOM_CATEGORIES.all.id\n      ] || INITIAL_FETCH_PARAMS_STATE\n    : INITIAL_FETCH_PARAMS_STATE;\n};\n","import { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { isMobile } from 'utils/is-mobile';\nimport { CasinoGamesDefaultConstants } from './default-constants';\nimport {\n  CasinoGamesConfigs,\n  CasinoGamesLayoutType,\n  CasinoGamesLoadMoreBtnType\n} from '../providers/CasinoGamesConfigsContext';\n\nexport const computeCasinoLoadMoreButtonType = (\n  configs: Partial<CasinoGamesConfigs>\n): CasinoGamesLoadMoreBtnType => {\n  return (\n    (isMobile() && configs.mobileCustomSettings\n      ? configs.mobileLoadMoreType\n      : configs.loadMoreType) || CasinoGamesDefaultConstants.LOAD_MORE_TYPE\n  );\n};\n\nexport const computeCasinoGamesPerRow = (\n  configs: Partial<CasinoGamesConfigs>\n): number => {\n  return (\n    (isMobile() && configs.mobileCustomSettings\n      ? configs.mobileGamesPerRow\n      : configs.gamesPerRow) || CasinoGamesDefaultConstants.GAMES_PER_ROW\n  );\n};\n\nexport const computeCasinoGamesRows = (\n  configs: Partial<CasinoGamesConfigs>\n): number => {\n  return (\n    (isMobile() && configs.mobileCustomSettings\n      ? configs.mobileGamesRows\n      : configs.gamesRows) || CasinoGamesDefaultConstants.GAMES_ROWS\n  );\n};\n\nexport const computeCasinoGamesCountForSliderSkeleton = (\n  configs: Partial<CasinoGamesConfigs>\n): number => {\n  return computeCasinoLoadMoreButtonType(configs) !==\n    CasinoGamesLoadMoreBtnType.SLIDER\n    ? computeCasinoGamesLimit(configs)\n    : computeCasinoGamesRows(configs) * computeCasinoGamesPerRow(configs);\n};\n\nexport const computeCasinoGamesLimit = (\n  configs: Partial<CasinoGamesConfigs>\n): number => {\n  return (\n    (isMobile() && configs.mobileCustomSettings\n      ? configs.mobileCasinoGamesLimit\n      : configs.casinoGamesLimit) ||\n    CasinoGamesDefaultConstants.CASINO_GAMES_LIMIT\n  );\n};\n\nexport const computeCasinoGamesLoadMoreButtonEnabled = (\n  configs: Partial<CasinoGamesConfigs>,\n  selectedCategory: string\n): boolean => {\n  // these categories are getting games from promoted endpoint, which works very bad with pagination\n  if (\n    [CUSTOM_CATEGORIES.special.id, CUSTOM_CATEGORIES.specialLive.id].includes(\n      selectedCategory\n    )\n  ) {\n    return false;\n  }\n\n  return (\n    (isMobile() && configs?.mobileCustomSettings\n      ? configs.mobileShowLoadMoreBtn\n      : configs.showLoadMoreBtn) ||\n    CasinoGamesDefaultConstants.LOAD_MORE_BUTTON_ENABLED\n  );\n};\n\nexport const computeCasinoGamesArrowsEnabled = (\n  configs: Partial<CasinoGamesConfigs>\n): boolean => {\n  return (\n    (isMobile() && configs?.mobileCustomSettings\n      ? configs.mobileShowArrow\n      : configs.showArrowForMobile) ||\n    CasinoGamesDefaultConstants.ARROWS_ENABLED\n  );\n};\n\nexport const computeCasinoGamesLayoutType = (\n  configs: Partial<CasinoGamesConfigs>\n): CasinoGamesLayoutType => {\n  return configs.layoutType ?? CasinoGamesLayoutType.CLASSIC;\n};\n\nexport const computeCasinoGamesCategoryNameVisible = (\n  configs: Partial<CasinoGamesConfigs>,\n  selectedCategory: string\n): boolean => {\n  if (SpringConfigs.DECENTRALIZED_CASINO_URL) {\n    return false;\n  }\n\n  if (\n    selectedCategory === CUSTOM_CATEGORIES.all.id &&\n    !configs.groupAllByCategories\n  ) {\n    return false;\n  }\n\n  return (\n    configs.showCategoryName ||\n    CasinoGamesDefaultConstants.CATEGORY_NAME_VISIBLE\n  );\n};\n\nexport const computeLeftSideBarCasinoAvailable = (): boolean => {\n  const matchCasinoUrl = new RegExp(`${SpringConfigs.PAGE_URLS.casino}/`);\n\n  return (\n    !isMobile() &&\n    !!window.location.href.match(matchCasinoUrl) &&\n    SpringConfigs.LEFT_SIDE_BAR &&\n    SpringConfigs.LEFT_SIDE_BAR_CASINO\n  );\n};\n","import { useTranslation } from 'react-i18next';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { EmptyCasinoGames } from 'components/EmptyResultBoxes/EmptyCasinoGames';\nimport { useSelectedCategory } from '../../hooks/useSelectedCategory';\nimport { useCasinoGamesConfigsValues } from '../../providers/CasinoGamesConfigsContext';\n\nexport const EmptyCasinoGamesResult = () => {\n  const { configs } = useCasinoGamesConfigsValues();\n  const { t } = useTranslation();\n\n  const { selectedCategory } = useSelectedCategory({ configs });\n\n  const isFavoriteCategory = selectedCategory === CUSTOM_CATEGORIES.favorite.id;\n  const isLastPlayedCategory =\n    selectedCategory === CUSTOM_CATEGORIES.lastPlayed.id;\n\n  return (\n    <EmptyCasinoGames\n      title={t(\n        `emptyMessages.${\n          isFavoriteCategory\n            ? SpringConfigs.USER_PERSONALIZATION_ENABLED\n              ? 'noCasinoPersonalizationFavorite'\n              : 'noCasinoGameFavorite'\n            : isLastPlayedCategory\n            ? 'noCasinoGameLastPlayed'\n            : 'noCasinoGame'\n        }`\n      )}\n      gameText={t(\n        `emptyMessages.${\n          isFavoriteCategory\n            ? SpringConfigs.USER_PERSONALIZATION_ENABLED\n              ? 'noCasinoPersonalizationTextFavorite'\n              : 'noCasinoGameTextFavorite'\n            : isLastPlayedCategory\n            ? 'noCasinoGameTextLastPlayed'\n            : 'noCasinoGameText'\n        }`\n      )}\n    />\n  );\n};\n","// input divideArray([1, 2, 3, 4, 5, 6], 2, 6)\n// output [[1, 2], [3, 4], [5, 6]]\nexport const divideArray = (\n  array: any[],\n  itemLength: number,\n  itemsCount: number\n) => {\n  const ans = [];\n  let temp = [];\n\n  for (let i = 0; i < itemsCount; i++) {\n    temp.push(array[i]);\n\n    if ((i + 1) % itemLength == 0) {\n      ans.push(temp);\n      temp = [];\n    }\n  }\n\n  // If last group doesn't have enough\n  // elements then add null to it\n  if (temp.length != 0) {\n    let a = temp.length;\n\n    while (a != itemLength) {\n      temp.push(null);\n      a++;\n    }\n\n    ans.push(temp);\n  }\n\n  return ans;\n};\n","import { MouseEventHandler } from 'react';\nimport { useTranslation } from 'react-i18next';\n\ntype SeeAllGamesProps = {\n  onViewAll?: MouseEventHandler<HTMLDivElement>;\n  slidesPerView: number;\n};\nconst GAMES_CARD_WIDTH = 24;\n\nexport const SeeAllGames = ({ onViewAll, slidesPerView }: SeeAllGamesProps) => {\n  const { t } = useTranslation();\n\n  return (\n    <div\n      className=\"seeAllGames x-casinoGameCardImageWrapper\"\n      onClick={onViewAll}\n      style={{\n        width: window.innerWidth / slidesPerView - GAMES_CARD_WIDTH\n      }}\n    >\n      <span className=\"seeAllGames__text\">{t('casino.seeAll')}</span>\n    </div>\n  );\n};\n","import { useCallback } from 'react';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { CASINO_GAMES_SLIDER_LIMIT_MULTIPLIER } from '../constants/generic';\nimport { useCasinoGamesConditionalsValues } from '../providers/CasinoGamesConditionalsProvider';\nimport {\n  CasinoGamesLoadMoreBtnType,\n  useCasinoGamesConfigsValues\n} from '../providers/CasinoGamesConfigsContext';\nimport { useCasinoGamesFetchParamsValues } from '../providers/CasinoGamesFetchParamsContext';\nimport { CasinoGamesFetchingParamsActionType } from '../state/reducer';\nimport { CasinoGamesDefaultConstants } from '../utils/default-constants';\n\nexport const useGamesLoadMore = () => {\n  const { dispatchFetchParams, fetchParams } =\n    useCasinoGamesFetchParamsValues();\n\n  const { computedConfigs } = useCasinoGamesConfigsValues();\n\n  const { conditionals } = useCasinoGamesConditionalsValues();\n\n  const handleLoadMore = useCallback(() => {\n    if (fetchParams.offset === undefined || fetchParams.limit === undefined) {\n      return;\n    }\n\n    if (conditionals.queryLoading) {\n      return;\n    }\n\n    let gamesLimit = computedConfigs.gamesLimit;\n\n    // In case of slider type, we need to change the limit and offset based on gamesRows and gamesPerRow\n    if (\n      computedConfigs.loadMoreButtonType === CasinoGamesLoadMoreBtnType.SLIDER\n    ) {\n      gamesLimit =\n        (computedConfigs.gamesRows || CasinoGamesDefaultConstants.GAMES_ROWS) *\n        (computedConfigs.gamesPerRow ||\n          CasinoGamesDefaultConstants.GAMES_PER_ROW) *\n        CASINO_GAMES_SLIDER_LIMIT_MULTIPLIER;\n    }\n\n    dispatchFetchParams({\n      type: CasinoGamesFetchingParamsActionType.SET,\n      payload: {\n        offset: fetchParams.limit,\n        limit:\n          fetchParams.limit +\n          Math.min(gamesLimit, SpringConfigs.CASINO_GAMES_FETCH_MAX_COUNT)\n      }\n    });\n  }, [\n    fetchParams.offset,\n    fetchParams.limit,\n    computedConfigs.gamesLimit,\n    computedConfigs.loadMoreButtonType,\n    computedConfigs.gamesRows,\n    computedConfigs.gamesPerRow,\n    conditionals.queryLoading\n  ]);\n\n  return { handleLoadMore };\n};\n","import { CSSProperties, ReactElement, useMemo } from 'react';\nimport cc from 'classcat';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport {\n  FavoritePerRow,\n  FavoritePerRowMobile\n} from 'utils/constants/sportsbook/magic-numbers';\nimport { createArray } from 'utils/helpers/create-fake-array';\nimport { isMobile } from 'utils/is-mobile';\nimport { FavoriteCasinoProviderCardSkeleton } from 'elements/Accounts/_partials/Favorites/FavoritesCasinoContent/FavoriteProviders/skeleton';\nimport { CasinoGameCardSkeleton } from 'newcomponents/Shared/casino/CasinoGameCard/Skeleton';\nimport { Skeleton } from 'newcomponents/UI/Skeleton';\nimport { useSelectedCategory } from '../../hooks/useSelectedCategory';\nimport {\n  CasinoGamesLoadMoreBtnType,\n  useCasinoGamesConfigsValues\n} from '../../providers/CasinoGamesConfigsContext';\nimport { computeCasinoLoadMoreButtonType } from '../../utils/compute-configs';\nimport './index.less';\n\ntype TCasinoGamesByCategorySkeletonProps = {\n  favProvidersEnabled?: boolean;\n};\ninterface CustomCSSProperties extends CSSProperties {\n  '--games-per-row'?: number;\n}\n\nexport const CasinoGamesByCategorySkeleton = ({\n  favProvidersEnabled = false\n}: TCasinoGamesByCategorySkeletonProps): ReactElement => {\n  const { configs, computedConfigs } = useCasinoGamesConfigsValues();\n  const loadMoreButtonType = computeCasinoLoadMoreButtonType(configs);\n  const { selectedCategory } = useSelectedCategory({ configs });\n\n  const gamesByCategoryClasses = {\n    aspectRatio: {\n      [`casino-container__${\n        configs.aspectRatio && configs.aspectRatio.toString().replace('.', '-')\n      }`]: configs.aspectRatio\n    }\n  };\n\n  const sliderSkeletonGridTemplate = useMemo(() => {\n    if (loadMoreButtonType === CasinoGamesLoadMoreBtnType.SLIDER) {\n      return {\n        gridTemplateRows: `repeat(${computedConfigs.gamesRows}, auto)`,\n        gridTemplateColumns: `repeat(${Math.ceil(\n          computedConfigs.gamesCountForSkeleton /\n            (computedConfigs.gamesRows || 1)\n        )}, minmax(${computedConfigs.gamesPerRow}, auto)`,\n        '--games-per-row': computedConfigs.gamesPerRow\n      };\n    }\n\n    return { '--games-per-row': computedConfigs.gamesPerRow };\n  }, [\n    computedConfigs.gamesCountForSkeleton,\n    computedConfigs.gamesRows,\n    computedConfigs.gamesPerRow\n  ]);\n\n  const CategoryNameSkeleton = () => (\n    <div\n      className={cc([\n        'x-casinoGamesByCategories__categoryName',\n        { 'x-casinoGamesByCategories__categoryName--mobile': isMobile() }\n      ])}\n    >\n      <Skeleton\n        title={{\n          style: { width: '150px', margin: '0', height: 24 }\n        }}\n        paragraph={false}\n        active\n      />\n\n      {(selectedCategory === CUSTOM_CATEGORIES.all.id ||\n        selectedCategory === CUSTOM_CATEGORIES.favorite.id) && (\n        <div className=\"x-casinoGamesByCategories__categoryName__viewAll\">\n          <Skeleton\n            title={{\n              style: { width: '100px', margin: '0', height: 20 }\n            }}\n            paragraph={false}\n            active\n          />\n        </div>\n      )}\n    </div>\n  );\n\n  return (\n    <div\n      className={cc([\n        'x-casinoGamesByCategories',\n        gamesByCategoryClasses.aspectRatio,\n        {\n          'x-casinoGamesByCategories__slider':\n            loadMoreButtonType === CasinoGamesLoadMoreBtnType.SLIDER\n        }\n      ])}\n    >\n      {favProvidersEnabled && (\n        <div\n          className={cc([\n            'favoritesCasinoProviders__container--skeleton',\n            {\n              'favoritesCasinoProviders__container--skeleton--mobile':\n                isMobile()\n            }\n          ])}\n        >\n          {computedConfigs.categoryNameVisible &&\n            configs.groupAllByCategories && <CategoryNameSkeleton />}\n          <div\n            className=\"x-casinoGamesByCategories__providers favoritesCasinoProviders\"\n            style={\n              {\n                ...sliderSkeletonGridTemplate,\n                '--games-per-row': isMobile()\n                  ? FavoritePerRowMobile\n                  : FavoritePerRow\n              } as CustomCSSProperties\n            }\n          >\n            {Array.from({ length: 3 }, (v, i) => i).map(provider => (\n              <FavoriteCasinoProviderCardSkeleton key={provider} />\n            ))}\n          </div>\n        </div>\n      )}\n\n      {computedConfigs.categoryNameVisible && <CategoryNameSkeleton />}\n\n      <div\n        className=\"x-casinoGamesByCategories__games\"\n        style={sliderSkeletonGridTemplate}\n      >\n        {createArray(computedConfigs.gamesCountForSkeleton).map(key => (\n          <CasinoGameCardSkeleton key={key} />\n        ))}\n      </div>\n    </div>\n  );\n};\n","import {\n  ComponentProps,\n  FC,\n  memo,\n  MouseEventHandler,\n  Suspense,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport cc from 'classcat';\nimport { DEBOUNCE_DELAY } from 'utils/constants/app/magic-numbers-app';\nimport { divideArray } from 'utils/generic/divide-array';\nimport { lazy } from 'utils/generic/lazy';\nimport { isMobile } from 'utils/is-mobile';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport { SeeAllGames } from './SeeAllGames';\nimport { CasinoGameCard as CasinoGameCardComponent } from 'newcomponents/Shared/casino/CasinoGameCard';\nimport { useDebouncedCallback } from 'hooks/useDebouncedCallback';\nimport { useInView } from 'newhooks/dom/useInView';\nimport { useGamesLoadMore } from '../../hooks/useGamesLoadMore';\nimport { useCasinoGamesConfigsValues } from '../../providers/CasinoGamesConfigsContext';\nimport { CasinoGamesByCategorySkeleton } from '../GamesByCategory/Skeleton';\nimport './index.less';\n\nconst { SwiperSlider } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"swiper-wrapper\" */ 'newcomponents/UI/SwiperSlider'\n    )\n);\n\ninterface ICasinoGamesCarouselProps {\n  loadMoreFunctionalityAvailable: boolean;\n  data: NewCasinoGame[];\n  viewAllEnabled: boolean;\n  onViewAll: MouseEventHandler<HTMLDivElement>;\n  CasinoGameCard: (\n    props: Pick<\n      ComponentProps<typeof CasinoGameCardComponent>,\n      'game' | 'index'\n    >\n  ) => ReturnType<typeof CasinoGameCardComponent>;\n}\n\nconst _CasinoGamesCarousel: FC<ICasinoGamesCarouselProps> = ({\n  data,\n  loadMoreFunctionalityAvailable,\n  CasinoGameCard,\n  viewAllEnabled,\n  onViewAll\n}) => {\n  const { computedConfigs } = useCasinoGamesConfigsValues();\n  const { handleLoadMore } = useGamesLoadMore();\n  const [observableReference, setObservableReference] =\n    useState<HTMLDivElement | null>();\n\n  const scrollableReference = useRef<HTMLDivElement | null>(null);\n\n  const inView = useInView(observableReference, {\n    destructOnFirstIntersect: true,\n    options: {\n      threshold: 0.5\n    }\n  });\n\n  // this technique ensures that the observableReference is attached at least to the last card based on\n  // games rows and games per row to be visible in case of user swipes very quickly\n  const observableIndexDiff =\n    computedConfigs.gamesPerRow * computedConfigs.gamesRows;\n\n  const showArrows = isMobile() ? computedConfigs.arrowsEnabled : true;\n\n  const loadMoreGames = useCallback(() => {\n    if (!loadMoreFunctionalityAvailable) {\n      return false;\n    }\n\n    handleLoadMore();\n\n    return true;\n  }, [loadMoreFunctionalityAvailable, handleLoadMore]);\n\n  const debouncedLoadMoreGames = useDebouncedCallback(\n    loadMoreGames,\n    DEBOUNCE_DELAY._300\n  );\n\n  // the check when arrows are disabled is done through attaching the ref to game card\n  useEffect(() => {\n    if (!inView) {\n      return;\n    }\n\n    loadMoreGames();\n  }, [inView]);\n\n  // the check when arrows are disabled is done through attaching the ref to scrollable element\n  useEffect(() => {\n    const scrollableElement = scrollableReference.current;\n\n    if (!scrollableElement) {\n      return;\n    }\n\n    let loadMoreCalled = false;\n\n    const handleScroll = () => {\n      if (!scrollableElement) {\n        return;\n      }\n\n      const totalScrollWidth = scrollableElement.scrollWidth;\n      const scrollLeft = scrollableElement.scrollLeft;\n      const clientWidth = scrollableElement.clientWidth;\n\n      if (\n        scrollLeft + clientWidth + clientWidth > totalScrollWidth &&\n        !loadMoreCalled\n      ) {\n        loadMoreCalled = loadMoreGames();\n      }\n    };\n\n    scrollableElement.addEventListener('scroll', handleScroll);\n\n    return () => {\n      if (!scrollableElement) {\n        return;\n      }\n\n      scrollableElement.removeEventListener('scroll', handleScroll);\n    };\n  }, [data.length]);\n\n  const drawableData = useMemo(() => {\n    let res;\n\n    if (computedConfigs.gamesRows > 1) {\n      const dividedData = divideArray(\n        data,\n        computedConfigs.gamesRows,\n        data.length\n      );\n\n      res = dividedData.map((group, groupIndex, dataArray) => (\n        <div\n          className=\"casinoGame__carousel-item casinoGame__carousel-item-grid\"\n          key={group[0].id}\n          /* this ensures that observable reference is being attached only when arrows are enabled*/\n          {...(showArrows &&\n            groupIndex + observableIndexDiff === dataArray.length && {\n              ref: setObservableReference\n            })}\n        >\n          {group.map(\n            (game, index) =>\n              game && <CasinoGameCard game={game} index={index} key={game.id} />\n          )}\n        </div>\n      ));\n    } else {\n      res = data.map((game, index, dataArray) => (\n        <div\n          className=\"casinoGame__carousel-item\"\n          key={game.id}\n          /* this ensures that observable reference is being attached only when arrows are enabled*/\n          {...(showArrows &&\n            index + observableIndexDiff === dataArray.length && {\n              ref: setObservableReference\n            })}\n        >\n          <CasinoGameCard game={game} index={index} />\n        </div>\n      ));\n    }\n\n    if (viewAllEnabled && isMobile()) {\n      res.push(\n        <div className=\"casinoGame__carousel-item casinoGame__carousel-item-grid\">\n          <SeeAllGames\n            onViewAll={onViewAll}\n            slidesPerView={computedConfigs.gamesPerRow}\n          />\n        </div>\n      );\n    }\n\n    return res;\n  }, [data]);\n\n  return (\n    <Suspense fallback={<CasinoGamesByCategorySkeleton />}>\n      <div\n        className={cc([\n          {\n            'casinoGame__carousel-wrapper': !isMobile(),\n            'casinoGame__carousel-wrapper-mobile': isMobile(),\n            'casinoGame__carousel-without-arrows':\n              isMobile() && !computedConfigs.arrowsEnabled\n          }\n        ])}\n      >\n        <SwiperSlider\n          bodyArrows={isMobile() ? computedConfigs.arrowsEnabled : true}\n          activeSlide={0}\n          slidesPerView={computedConfigs.gamesPerRow}\n          disableSwiping={!isMobile() || computedConfigs.arrowsEnabled}\n          alwaysShowArrows={isMobile()}\n          spaceBetween={8}\n          slideOnHover={computedConfigs.nextSlideOnHover && !isMobile()}\n          fetchOnProgress={{\n            point: 0.7,\n            callback: () => {\n              debouncedLoadMoreGames();\n            }\n          }}\n          drawableTabs={drawableData}\n        />\n      </div>\n    </Suspense>\n  );\n};\n\nexport const CasinoGamesCarousel = memo(_CasinoGamesCarousel);\n","import { useEffect, useMemo, useRef } from 'react';\nimport { timeoutDuration } from 'utils/constants/dateInfo/time-numbers';\nimport { debounce } from 'utils/helpers/debounce';\nimport RidGenerator from 'utils/swarm/rid-generator';\n\nexport const useDebouncedCallback = (\n  callback: Function,\n  delay: number = timeoutDuration.DURATION_300,\n  deps: Array<any> = []\n) => {\n  const ref = useRef<Function>();\n  const debounceId = useRef(RidGenerator.rand());\n\n  useEffect(() => {\n    ref.current = callback;\n  }, [callback]);\n\n  return useMemo(() => {\n    const func = () => {\n      ref.current?.();\n    };\n\n    return debounce(debounceId.current, func, delay);\n  }, deps);\n};\n","import { ComponentProps, CSSProperties, FC, useEffect, useState } from 'react';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport { Loading } from 'components/Loading';\nimport { CasinoGameCard as CasinoGameCardComponent } from 'newcomponents/Shared/casino/CasinoGameCard';\nimport { useGamesLoadMore } from '../../hooks/useGamesLoadMore';\nimport { useCasinoGamesConditionalsValues } from '../../providers/CasinoGamesConditionalsProvider';\nimport { useCasinoGamesConfigsValues } from '../../providers/CasinoGamesConfigsContext';\n\ninterface ICasinoGamesLazyLoadProps {\n  gamesCount: number;\n  data: NewCasinoGame[];\n  loadMoreContainerStyles: { className: string; style: CSSProperties };\n  loadMoreFunctionalityAvailable: boolean;\n  CasinoGameCard: (\n    props: Pick<\n      ComponentProps<typeof CasinoGameCardComponent>,\n      'game' | 'index'\n    >\n  ) => ReturnType<typeof CasinoGameCardComponent>;\n}\n\nconst TRIGGER_ELEMENT_THRESHOLD = 0.5;\n\nconst createIntersectionObserver = (callback: () => void) => {\n  return new IntersectionObserver(\n    ([entry], observer) => {\n      if (!entry.isIntersecting) {\n        return;\n      }\n\n      observer.unobserve(entry.target);\n      observer.disconnect();\n      callback();\n    },\n    { threshold: TRIGGER_ELEMENT_THRESHOLD }\n  );\n};\n\nexport const GamesLazyLoad: FC<ICasinoGamesLazyLoadProps> = ({\n  data,\n  loadMoreContainerStyles,\n  loadMoreFunctionalityAvailable,\n  CasinoGameCard\n}) => {\n  const { handleLoadMore } = useGamesLoadMore();\n  const { conditionals } = useCasinoGamesConditionalsValues();\n  const { computedConfigs } = useCasinoGamesConfigsValues();\n  const [triggerCard, setTriggerCard] = useState<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    if (!triggerCard) {\n      return;\n    }\n\n    const observer = createIntersectionObserver(handleLoadMore);\n    observer.observe(triggerCard);\n\n    return () => {\n      if (!triggerCard) {\n        return;\n      }\n\n      observer.unobserve(triggerCard);\n      observer.disconnect();\n    };\n  }, [triggerCard]);\n\n  return (\n    <>\n      <div\n        className={loadMoreContainerStyles.className}\n        style={loadMoreContainerStyles.style}\n      >\n        {data.map((game, index) => (\n          <div\n            key={game.id}\n            ref={(elem: HTMLDivElement) => {\n              if (data.length - computedConfigs.gamesPerRow !== index) {\n                return;\n              }\n\n              if (!elem) {\n                return;\n              }\n\n              if (loadMoreFunctionalityAvailable) {\n                setTriggerCard(elem);\n              } else {\n                setTriggerCard(null);\n              }\n            }}\n          >\n            <CasinoGameCard game={game} />\n          </div>\n        ))}\n      </div>\n      {conditionals.queryLoading && (\n        <Loading className=\"x-casinoGames__loading\" />\n      )}\n    </>\n  );\n};\n","import {\n  ComponentProps,\n  CSSProperties,\n  FC,\n  Fragment,\n  memo,\n  MouseEventHandler,\n  RefObject,\n  Suspense,\n  useCallback,\n  useMemo\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport cc from 'classcat';\nimport {\n  CUSTOM_CATEGORIES,\n  CUSTOM_CATEGORIES_ARRAY,\n  CUSTOM_CATEGORY_IDS_WITHOUT_PROVIDERS\n} from 'utils/constants/casino/custom-categories';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { lazy as namedLazy } from 'utils/generic/lazy';\nimport { mountPoint, shouldRedirect } from 'utils/generic/route-manipulation';\nimport { isMobile } from 'utils/is-mobile';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport { CasinoGameCard as CasinoGameCardComponent } from 'newcomponents/Shared/casino/CasinoGameCard';\nimport { PersonalizedGameCard } from 'newcomponents/UI/UserPersonalization/__partials/Steps/SelectCasinoGames/PersonalizedGameCard';\nimport { clearAllFavorite } from 'store/actions';\nimport { getFavoriteProviders } from 'store/selectors/fav-data';\nimport { useSelectedCategory } from '../../hooks/useSelectedCategory';\nimport {\n  CasinoGamesLayoutType,\n  CasinoGamesLoadMoreBtnType,\n  useCasinoGamesConfigsValues\n} from '../../providers/CasinoGamesConfigsContext';\nimport { CasinoGamesCarousel } from '../GamesCarousel';\nimport { GamesLazyLoad } from '../GamesLazyLoad';\nimport './index.less';\n\nconst { CasinoLoadMoreButton } = namedLazy(\n  /* webpackChunkName: \"CasinoLoadMoreButton\" */ () =>\n    import('../LoadMoreButton')\n);\n\ninterface GamesByCategoryProps {\n  category: {\n    id: string;\n    name: string;\n    gamesCount: number;\n  };\n  data: NewCasinoGame[];\n  parentRef: RefObject<HTMLDivElement>;\n}\nconst MIN_GAMES_PER_ROW = 4;\n\nconst _GamesByCategory: FC<GamesByCategoryProps> = ({\n  category,\n  data,\n  parentRef\n}) => {\n  const { configs, computedConfigs } = useCasinoGamesConfigsValues();\n  const favoriteProviders = useSelector(getFavoriteProviders) || [];\n\n  const { selectedCategory } = useSelectedCategory({ configs });\n  const dispatch = useDispatch();\n\n  const { t } = useTranslation();\n  const history = useHistory();\n  const { location } = history;\n\n  const isLoadMoreButtonSlider =\n    computedConfigs.loadMoreButtonType === CasinoGamesLoadMoreBtnType.SLIDER;\n\n  const isLoadMoreButtonLazyLoad =\n    computedConfigs.loadMoreButtonType === CasinoGamesLoadMoreBtnType.LAZY_LOAD;\n\n  const customCategory = {\n    isSelected:\n      CUSTOM_CATEGORY_IDS_WITHOUT_PROVIDERS.includes(selectedCategory),\n    category: CUSTOM_CATEGORIES_ARRAY.find(\n      _customCategory => _customCategory.id === selectedCategory\n    )\n  };\n\n  const viewAllEnabled =\n    selectedCategory === CUSTOM_CATEGORIES.all.id &&\n    !!configs.groupAllByCategories;\n\n  const isPromotedCategory = [\n    CUSTOM_CATEGORIES.special.id,\n    CUSTOM_CATEGORIES.specialLive.id\n  ].includes(selectedCategory);\n\n  const loadMoreFunctionalityAvailable =\n    computedConfigs.loadMoreButtonEnabled &&\n    (selectedCategory !== CUSTOM_CATEGORIES.all.id ||\n      (selectedCategory === CUSTOM_CATEGORIES.all.id &&\n        !configs.groupAllByCategories)) &&\n    !isPromotedCategory && // in case of it is a promoted category, load more should not work, because that endpoint does not work correctly\n    data.length < category.gamesCount;\n\n  const loadMoreButtonAvailable =\n    loadMoreFunctionalityAvailable &&\n    computedConfigs.loadMoreButtonType === CasinoGamesLoadMoreBtnType.BUTTON;\n\n  const drawGamesWithCarousel =\n    isLoadMoreButtonSlider && data.length >= computedConfigs.gamesPerRow;\n\n  const drawGamesFallback = !drawGamesWithCarousel && !isLoadMoreButtonLazyLoad;\n\n  const gamesByCategoryClasses = {\n    aspectRatio: {\n      [`casino-container__${\n        configs.aspectRatio && configs.aspectRatio.toString().replace('.', '-')\n      }`]: configs.aspectRatio\n    },\n    arrows: {\n      'x-casinoGamesByCategories__arrows':\n        computedConfigs.categoryNameVisible &&\n        !viewAllEnabled &&\n        isLoadMoreButtonSlider &&\n        isMobile()\n    }\n  };\n\n  const isAlternativeTitle = configs.favorite?.useAlternativeTitle;\n  const isFavoriteMultiView =\n    customCategory?.category?.id === 'favorite' && isAlternativeTitle;\n\n  const createCategoryTitle = () => {\n    if (isFavoriteMultiView) {\n      return t('casino.favoriteGames');\n    } else if (customCategory.isSelected) {\n      return customCategory?.category?.title;\n    } else {\n      return category.name;\n    }\n  };\n\n  const loadMoreContainerStyles = useMemo(\n    () => ({\n      className: cc([\n        'x-casinoGamesByCategories__games',\n        {\n          'x-casinoGamesByCategories__small':\n            computedConfigs.gamesPerRow >= MIN_GAMES_PER_ROW\n        }\n      ]),\n      style: {\n        '--games-per-row': computedConfigs.gamesPerRow,\n        overflow: 'unset'\n      } as CSSProperties\n    }),\n    [computedConfigs.gamesPerRow]\n  );\n\n  const onViewAll: MouseEventHandler<HTMLDivElement> = () => {\n    const redirectPathToCasino = SpringConfigs.PAGE_URLS.casino;\n    const shouldRedirectToCasino = shouldRedirect(redirectPathToCasino);\n\n    const redirectPathToLiveCasino = SpringConfigs.PAGE_URLS['live-casino'];\n    const shouldRedirectToLiveCasino = shouldRedirect(redirectPathToLiveCasino);\n\n    if (!shouldRedirectToCasino || !shouldRedirectToLiveCasino) {\n      parentRef?.current?.scrollIntoView();\n\n      history.push({\n        pathname: `${mountPoint(location.pathname, false, true)}/${\n          category.id\n        }`,\n        search: location.search\n      });\n    } else {\n      const redirectPath = shouldRedirectToCasino\n        ? redirectPathToCasino\n        : redirectPathToLiveCasino;\n\n      window.location.href = `${redirectPath}/${SpringConfigs.CASINO_MOUNT_PATH}/${category.id}`;\n    }\n  };\n\n  const CasinoGameCard = useCallback(\n    ({\n      game,\n      index\n    }: Pick<\n      ComponentProps<typeof CasinoGameCardComponent>,\n      'game' | 'index'\n    >) =>\n      computedConfigs.layoutType === CasinoGamesLayoutType.CLASSIC ? (\n        <CasinoGameCardComponent\n          game={game}\n          casinoPlayRealBtnSize={configs.casinoPlayRealBtnSize}\n          casinoNameSize={configs.casinoNameSize}\n          index={index}\n        />\n      ) : (\n        <PersonalizedGameCard game={game} />\n      ),\n    [\n      configs.casinoPlayRealBtnSize,\n      configs.casinoNameSize,\n      computedConfigs.layoutType\n    ]\n  );\n\n  if (\n    SpringConfigs.USER_PERSONALIZATION_ENABLED &&\n    !favoriteProviders?.length &&\n    !data.length\n  ) {\n    return null;\n  }\n\n  const dataLength = SpringConfigs.USER_PERSONALIZATION_ENABLED\n    ? favoriteProviders?.length + data.length\n    : data.length;\n\n  if (!dataLength) {\n    return null;\n  }\n\n  return (\n    <>\n      <div\n        className={cc([\n          'x-casinoGamesByCategories',\n          {\n            'x-casinoGamesByCategories__carousel': isLoadMoreButtonSlider,\n            'x-casinoGamesByCategories__carousel-mobile': isMobile()\n          },\n          gamesByCategoryClasses.aspectRatio,\n          gamesByCategoryClasses.arrows\n        ])}\n      >\n        {computedConfigs.categoryNameVisible || category.id === 'favorite' ? (\n          <div\n            className={cc([\n              'x-casinoGamesByCategories__categoryName',\n              {\n                'x-casinoGamesByCategories__categoryName--small': isMobile(),\n                'x-casinoGamesByCategories__categoryName--alternativeTitle':\n                  isAlternativeTitle\n              }\n            ])}\n            data-testid={`${category?.name?.toLowerCase()}`}\n          >\n            {computedConfigs.categoryNameVisible && createCategoryTitle()}\n            {category.id === 'favorite' ? (\n              <div\n                className={cc([\n                  'x-casinoGamesByCategories__categoryName__clearAll',\n                  {\n                    'x-casinoGamesByCategories__categoryName__clearAll--mobile':\n                      isMobile()\n                  }\n                ])}\n                onClick={() => {\n                  dispatch(clearAllFavorite('casino'));\n                }}\n                style={\n                  SpringConfigs.IS_RTL\n                    ? { marginRight: 'auto' }\n                    : { marginLeft: 'auto' }\n                }\n              >\n                {t('casino.clearAll')} ({category.gamesCount})\n              </div>\n            ) : (\n              viewAllEnabled && (\n                <div\n                  className={cc([\n                    'x-casinoGamesByCategories__categoryName__viewAll',\n                    {\n                      'x-casinoGamesByCategories__categoryName__viewAll--small':\n                        isMobile()\n                    }\n                  ])}\n                  onClick={onViewAll}\n                >\n                  {t('casino.viewAll')} ({category.gamesCount})\n                </div>\n              )\n            )}\n          </div>\n        ) : null}\n        {/* render games with CAROUSEL */}\n        {drawGamesWithCarousel && (\n          <CasinoGamesCarousel\n            loadMoreFunctionalityAvailable={loadMoreFunctionalityAvailable}\n            data={data}\n            CasinoGameCard={CasinoGameCard}\n            viewAllEnabled={viewAllEnabled}\n            onViewAll={onViewAll}\n          />\n        )}\n        {/* render games with LAZY LOAD */}\n        {isLoadMoreButtonLazyLoad && (\n          <GamesLazyLoad\n            gamesCount={category.gamesCount}\n            data={data}\n            loadMoreContainerStyles={loadMoreContainerStyles}\n            loadMoreFunctionalityAvailable={loadMoreFunctionalityAvailable}\n            CasinoGameCard={CasinoGameCard}\n          />\n        )}\n        {/* render games with LOAD MORE */}\n        {drawGamesFallback && (\n          <div\n            className={loadMoreContainerStyles.className}\n            style={loadMoreContainerStyles.style}\n          >\n            {data.map(game => (\n              <Fragment key={game.id}>\n                <CasinoGameCard game={game} />\n              </Fragment>\n            ))}\n          </div>\n        )}\n      </div>\n      {loadMoreButtonAvailable && (\n        <Suspense fallback={null}>\n          <CasinoLoadMoreButton />\n        </Suspense>\n      )}\n    </>\n  );\n};\n\nexport const GamesByCategory = memo(_GamesByCategory);\n","import { useQueryClient as useQueryClientRQ } from '@tanstack/react-query';\n\nexport const useQueryClient = () => {\n  const queryClient = useQueryClientRQ();\n\n  return { queryClient };\n};\n","import { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\n\nexport const checkIsSelectedCategoryFavorites = (\n  selectedCategory: string\n): boolean => {\n  return selectedCategory === CUSTOM_CATEGORIES.favorite.id;\n};\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport {\n  CASINO_GAME_TEMPLATE,\n  decentralizedGameCategoriesMapper,\n  gameMapper\n} from 'utils/casino/maps';\nimport {\n  CUSTOM_CATEGORIES,\n  CUSTOM_CATEGORY_IDS\n} from 'utils/constants/casino/custom-categories';\nimport { ECasinoQueryKey } from 'utils/constants/store/query-keys';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport type {\n  DecentralizedCasinoGamesData,\n  IGetCasinoGamesResponse,\n  TNewCasinoData,\n  TNewCasinoFailedData\n} from 'interfaces/new-casino';\nimport {\n  DecentralizedCasinoGame,\n  ENewCasinoFailedDataMessage,\n  ENewCasinoGamesFetchingParamsKey,\n  NewCasinoGame,\n  TNewCasinoDataByAllGroup\n} from 'interfaces/new-casino';\nimport { useCombineFavoriteGames } from './useCombineFavoriteGames';\nimport { useSelectedCategory } from './useSelectedCategory';\nimport {\n  CASINO_PROVIDER_CRASH_GAMES,\n  useCasinoOnlinePlayers\n} from 'newhooks/casino/useCasinoOnlinePlayers';\nimport { useQueryClient } from 'newhooks/generic/useQueryClient';\nimport { useCasinoGamesConditionalsValues } from '../providers/CasinoGamesConditionalsProvider';\nimport {\n  CasinoGamesLoadMoreBtnType,\n  useCasinoGamesConfigsValues\n} from '../providers/CasinoGamesConfigsContext';\nimport { CasinoGamesConditionalsActionType } from '../state/conditionals-reducer';\nimport { checkBackendAnomaly } from '../utils/check-backend-anomaly';\nimport { checkIsSelectedCategoryFavorites } from '../utils/check-selected-category';\nimport type { AxiosResponse } from 'axios';\n\nexport type UseGamesCombinedDataProps = {\n  data: AxiosResponse<IGetCasinoGamesResponse> | undefined;\n  paramsWithoutPaginationStringified: string;\n};\n\ntype TCasinoGamesCombinedDataPartition = Partial<\n  Omit<\n    AxiosResponse<Exclude<IGetCasinoGamesResponse, TNewCasinoFailedData>>,\n    'data'\n  >\n> & {\n  data: {\n    status?: string;\n    games: Record<\n      string,\n      {\n        count: number;\n        games: NewCasinoGame[];\n      }\n    >;\n  };\n};\n\nexport type TCasinoGamesCombinedData = {\n  queryKey?: string;\n  data?: TCasinoGamesCombinedDataPartition;\n};\n\nconst isGamesGroupedByCategory = (\n  data: IGetCasinoGamesResponse\n): data is TNewCasinoDataByAllGroup => {\n  return !Array.isArray(data as TNewCasinoDataByAllGroup);\n};\n\nconst isGamesGroupedById = (\n  data: IGetCasinoGamesResponse\n): data is TNewCasinoData => {\n  return (data as TNewCasinoData).total_count !== undefined;\n};\n\nconst isGamesDecentralized = (\n  data: IGetCasinoGamesResponse\n): data is DecentralizedCasinoGamesData => {\n  return typeof (data as DecentralizedCasinoGamesData).count === 'number';\n};\n\nconst generateCategoryAllSelectorKey = (providers: string | undefined) => {\n  return `${CUSTOM_CATEGORIES.all.id}-${providers}`;\n};\n\nconst setUniqueGames = (games: NewCasinoGame[]) => {\n  const uniqueGamesIds: string[] = [];\n  const uniqueGames: NewCasinoGame[] = [];\n\n  const crashGamesIds: number[] = [];\n\n  games.forEach(game => {\n    if (!uniqueGamesIds.includes(game.id)) {\n      uniqueGamesIds.push(game.id);\n      uniqueGames.push(game);\n\n      if (game.categories.includes(CASINO_PROVIDER_CRASH_GAMES)) {\n        crashGamesIds.push(+game.extearnal_game_id);\n      }\n    }\n  });\n\n  return {\n    uniqueGames,\n    crashGamesIds\n  };\n};\n\nexport const useGamesCombinedData = ({\n  data: _data,\n  paramsWithoutPaginationStringified\n}: UseGamesCombinedDataProps) => {\n  const { configs, computedConfigs } = useCasinoGamesConfigsValues();\n  const { dispatchConditionals } = useCasinoGamesConditionalsValues();\n  const { queryClient } = useQueryClient();\n\n  const { updateCrashGamesIds } = useCasinoOnlinePlayers();\n\n  const [combinedData, setCombinedData] = useState<TCasinoGamesCombinedData>(\n    {}\n  );\n\n  useCombineFavoriteGames({ setCombinedData });\n\n  // to prevent unnecessary re-renders\n  const paramsWithoutPaginationStringifiedRef = useRef(\n    paramsWithoutPaginationStringified\n  );\n\n  const _setUniqueGames = (games: NewCasinoGame[]) => {\n    const { crashGamesIds, uniqueGames } = setUniqueGames(games);\n\n    updateCrashGamesIds(crashGamesIds);\n\n    return uniqueGames;\n  };\n\n  // layout effect is used to set data to empty object when specific conditions are not met\n  useLayoutEffect(() => {\n    if (SpringConfigs.MOCKED_DATA) {\n      return;\n    }\n\n    if (checkIsSelectedCategoryFavorites(selectedCategoryRef.current)) {\n      return;\n    }\n\n    paramsWithoutPaginationStringifiedRef.current =\n      paramsWithoutPaginationStringified;\n\n    const queryKey = [\n      ECasinoQueryKey.CasinoGames,\n      configs.moduleId,\n      paramsWithoutPaginationStringified,\n      0 // offset is 0 for ensuring first page is cached\n    ];\n\n    const cache = queryClient.getQueryCache();\n    const cachedData = cache.findAll({\n      queryKey,\n      exact: true,\n      fetchStatus: 'idle' // to ensure cache is present and currently not being updated\n    });\n\n    const parsedParams = JSON.parse(paramsWithoutPaginationStringified);\n\n    // check for parsedParams length is because react query has an in-between case where it has only one parameter\n    // in that case there is no fetch for the data and query is decided to be a miss\n    if (\n      !cachedData.length ||\n      (Object.keys(parsedParams).length < 2 &&\n        ![CUSTOM_CATEGORIES.special.id].includes(selectedCategoryRef.current))\n    ) {\n      setCombinedData({});\n    }\n  }, [paramsWithoutPaginationStringified]);\n\n  // to write filter for custom categories;\n  const { selectedCategory } = useSelectedCategory({ configs });\n  const selectedCategoryRef = useRef(selectedCategory);\n\n  useEffect(() => {\n    selectedCategoryRef.current = selectedCategory;\n  }, [selectedCategory]);\n\n  useEffect(() => {\n    if (SpringConfigs.MOCKED_DATA) {\n      return;\n    }\n\n    if (!_data) {\n      return;\n    }\n\n    if (checkBackendAnomaly(_data)) {\n      const data = _data as AxiosResponse<TNewCasinoFailedData>;\n\n      if (data.data.message === ENewCasinoFailedDataMessage.TimeoutError) {\n        dispatchConditionals({\n          type: CasinoGamesConditionalsActionType.SET,\n          payload: {\n            emptyResults: true,\n            queryLoading: undefined,\n            loading: undefined\n          }\n        });\n      }\n\n      return;\n    }\n\n    const data = _data as AxiosResponse<\n      Exclude<IGetCasinoGamesResponse, TNewCasinoFailedData>\n    >;\n\n    if (checkIsSelectedCategoryFavorites(selectedCategoryRef.current)) {\n      return;\n    }\n\n    // when fetching direct games without grouping by categories and no games are returned\n    // (slider type games for example)\n    if (\n      [ENewCasinoGamesFetchingParamsKey.Id].includes(data.config.params.by_key)\n    ) {\n      const gamesData = data.data;\n\n      if (\n        computedConfigs.loadMoreButtonType ===\n          CasinoGamesLoadMoreBtnType.SLIDER &&\n        isGamesGroupedById(gamesData) &&\n        gamesData.games.length === 0\n      ) {\n        return;\n      }\n    }\n\n    const isCustomCategory = CUSTOM_CATEGORY_IDS.includes(\n      selectedCategoryRef.current\n    );\n\n    const isCustomCategoryAll =\n      selectedCategoryRef.current === CUSTOM_CATEGORIES.all.id;\n\n    const queryKey = isCustomCategory\n      ? selectedCategoryRef.current\n      : paramsWithoutPaginationStringifiedRef.current;\n\n    const isDecentralizedEndpoint =\n      SpringConfigs.DECENTRALIZED_CASINO_URL &&\n      data.config.url?.includes(SpringConfigs.DECENTRALIZED_CASINO_URL);\n\n    const gamesData = data.data;\n\n    if (isDecentralizedEndpoint) {\n      setCombinedData(prevCombinedData => {\n        const categoryId: string = isCustomCategory\n          ? isCustomCategoryAll\n            ? generateCategoryAllSelectorKey(data.config.params.provider)\n            : selectedCategoryRef.current\n          : isGamesDecentralized(gamesData)\n          ? gamesData.games?.[0]?.categoryId || ''\n          : '';\n\n        const mappedGames = (\n          isGamesDecentralized(gamesData) ? gamesData.games : []\n        ).map((game: DecentralizedCasinoGame) => {\n          return gameMapper({\n            ...CASINO_GAME_TEMPLATE,\n            extearnal_game_id: game.externalGameId.toString(),\n            types: {\n              realMode: 0,\n              funMode: 0\n            },\n            icon_1: game.icon1,\n            icon_2: game.icon2,\n            icon_3: game.icon3,\n            provider: 'ALL',\n            provider_badge: null,\n            provider_title: 'ALL',\n            show_as_provider: 'ALL',\n            cats: game.categories.map(decentralizedGameCategoriesMapper)\n          });\n        });\n\n        if (prevCombinedData.queryKey !== queryKey) {\n          return {\n            queryKey: queryKey,\n            data: {\n              ...data,\n              data: {\n                status: gamesData.status,\n                games: {\n                  [categoryId]: {\n                    count: isGamesDecentralized(gamesData)\n                      ? gamesData.count\n                      : 0,\n                    games: _setUniqueGames(mappedGames)\n                  }\n                }\n              }\n            }\n          };\n        }\n\n        return {\n          queryKey: queryKey,\n          data: {\n            ...data,\n            data: {\n              status: gamesData.status,\n              games: {\n                [categoryId]: {\n                  count: isGamesDecentralized(gamesData) ? gamesData.count : 0,\n                  games: _setUniqueGames([\n                    ...(prevCombinedData.data?.data?.games?.[categoryId]\n                      ?.games || []),\n                    ...(mappedGames || [])\n                  ])\n                }\n              }\n            }\n          }\n        };\n      });\n\n      return;\n    }\n\n    // when fetching direct games without grouping by categories\n    if (\n      [ENewCasinoGamesFetchingParamsKey.Id].includes(data.config.params.by_key)\n    ) {\n      setCombinedData(prevCombinedData => {\n        const categoryId: string = isCustomCategory\n          ? isCustomCategoryAll\n            ? generateCategoryAllSelectorKey(data.config.params.provider)\n            : selectedCategoryRef.current\n          : isGamesGroupedById(gamesData)\n          ? configs.groupAllByCategories\n            ? gamesData.games?.[0]?.cats?.[0]?.id || ''\n            : CUSTOM_CATEGORIES.all.id\n          : '';\n\n        if (prevCombinedData.queryKey !== queryKey) {\n          return {\n            queryKey: queryKey,\n            data: {\n              ...data,\n              data: {\n                status: gamesData.status,\n                games: {\n                  [categoryId]: {\n                    count: Number(\n                      (isGamesGroupedById(gamesData)\n                        ? gamesData\n                        : { total_count: '' }\n                      ).total_count\n                    ),\n                    games: _setUniqueGames(\n                      (isGamesGroupedById(gamesData)\n                        ? gamesData.games\n                        : []\n                      ).map(gameMapper)\n                    )\n                  }\n                }\n              }\n            }\n          };\n        }\n\n        return {\n          queryKey: queryKey,\n          data: {\n            ...data,\n            data: {\n              status: gamesData.status,\n              games: {\n                ...(configs.groupAllByCategories\n                  ? prevCombinedData.data?.data?.games || {}\n                  : {}),\n                [categoryId]: {\n                  count: Number(\n                    (isGamesGroupedById(gamesData)\n                      ? gamesData\n                      : { total_count: '' }\n                    ).total_count\n                  ),\n                  games: _setUniqueGames([\n                    ...(prevCombinedData.data?.data?.games?.[categoryId]\n                      ?.games || []),\n                    ...(isGamesGroupedById(gamesData)\n                      ? gamesData.games\n                      : []\n                    ).map(gameMapper)\n                  ])\n                }\n              }\n            }\n          }\n        };\n      });\n\n      return;\n    }\n\n    // when fetching games with grouping by categories\n    setCombinedData(prevCombinedData => {\n      if (prevCombinedData.queryKey !== queryKey) {\n        const mappedGames: TCasinoGamesCombinedDataPartition['data']['games'] =\n          {};\n\n        Object.entries(\n          isGamesGroupedByCategory(gamesData) ? gamesData.games : {}\n        ).map(([categoryId, games]) => {\n          mappedGames[categoryId] = {\n            count: Number(games.count),\n            games: _setUniqueGames(games.games.map(gameMapper))\n          };\n        });\n\n        return {\n          queryKey: queryKey,\n          data: {\n            ...data,\n            data: {\n              status: gamesData.status,\n              games: mappedGames\n            }\n          }\n        };\n      }\n\n      const allGames: TCasinoGamesCombinedDataPartition['data']['games'] =\n        prevCombinedData.data?.data?.games || {};\n\n      const mergedGames = Object.keys(allGames).reduce((acc, categoryId) => {\n        const games = allGames[categoryId];\n        acc[categoryId] = {\n          count: Number(\n            isGamesGroupedByCategory(gamesData)\n              ? gamesData?.games?.[categoryId]?.count || games.count\n              : games.count\n          ),\n          games: _setUniqueGames([\n            ...(games.games || []),\n            ...(isGamesGroupedByCategory(gamesData)\n              ? gamesData.games?.[categoryId]?.games || []\n              : []\n            ).map(gameMapper)\n          ])\n        };\n\n        return acc;\n      }, {} as TCasinoGamesCombinedDataPartition['data']['games']);\n\n      return {\n        queryKey: queryKey,\n        data: {\n          ...data,\n          data: {\n            status: gamesData.status,\n            games: mergedGames\n          }\n        }\n      };\n    });\n  }, [_data]);\n\n  return { combinedData, setCombinedData };\n};\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useQuery } from '@tanstack/react-query';\nimport { DEBOUNCE_DELAY } from 'utils/constants/app/magic-numbers-app';\nimport { ECasinoQueryKey } from 'utils/constants/store/query-keys';\nimport { CommandNames } from 'utils/constants/swarm/swarm-command-names';\nimport {\n  CrashGamesDataResults,\n  CrashGamesResponse,\n  CrashGamesResponseResultItem\n} from 'interfaces/casino-data';\nimport { swarmCommand } from 'services/get-swarm-data';\nimport {\n  setOnlinePlayersCrashGamesIds,\n  setOnlinePlayesCrashGamesData\n} from 'store/actions';\nimport { getOnlinePlayersCrashGamesIds } from 'store/selectors/casino-data';\n\nexport const CASINO_PROVIDER_CRASH_GAMES = '406';\n\nconst CASINO_CRASH_RESULTS_COUNT = 10;\n\nexport const useCasinoOnlinePlayers = (): {\n  updateCrashGamesIds: (ids: Array<number>) => void;\n} => {\n  const dispatch = useDispatch();\n\n  const crashGamesIds = useSelector(getOnlinePlayersCrashGamesIds);\n\n  const crashGamesEffect = () => {\n    if (crashGamesIds.length) {\n      swarmCommand(\n        CommandNames.GET_PROVIDER_CRASH_GAMES,\n        { game_ids: crashGamesIds },\n        (data: CrashGamesResponse) => {\n          if (data.result === 0 && !data.details.HasError) {\n            const games: CrashGamesDataResults = {};\n\n            data.details.Result.forEach(\n              (game: CrashGamesResponseResultItem) => {\n                games[game.GameId] = {\n                  onlinePlayerCount: game.OnlinePlayersCount,\n                  results: game.Results.slice(-CASINO_CRASH_RESULTS_COUNT)\n                };\n              }\n            );\n\n            dispatch(setOnlinePlayesCrashGamesData(games));\n          }\n        }\n      );\n    }\n\n    return () => {\n      // This is useEffect or useQuery.queryFn return function.\n    };\n  };\n\n  useEffect(crashGamesEffect, [crashGamesIds.length]);\n  useQuery({\n    queryKey: [ECasinoQueryKey.CasinoCrashGames],\n    queryFn: crashGamesEffect,\n    refetchOnWindowFocus: true,\n    refetchInterval: DEBOUNCE_DELAY._20000\n  });\n\n  return {\n    updateCrashGamesIds: (ids: Array<number>) => {\n      dispatch(\n        setOnlinePlayersCrashGamesIds(\n          [...new Set([...ids, ...crashGamesIds])].sort()\n        )\n      );\n    }\n  };\n};\n","import { useEffect, useLayoutEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { gameMapper } from 'utils/casino/maps';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport { NewCasinoGame, NewCasinoGameBackend } from 'interfaces/new-casino';\nimport { useSelectedCategory } from './useSelectedCategory';\nimport { getFavoriteCasinoGames } from 'store/selectors/fav-data';\nimport { getIsLoggedIn } from 'store/selectors/user-data';\nimport { useCasinoGamesConfigsValues } from '../providers/CasinoGamesConfigsContext';\nimport type { TCasinoGamesCombinedData } from './useGamesCombinedData';\n\ntype UseCombineFavoriteGamesProps = {\n  setCombinedData: (\n    value:\n      | ((prevState: TCasinoGamesCombinedData) => TCasinoGamesCombinedData)\n      | TCasinoGamesCombinedData\n  ) => void;\n};\n\nexport const useCombineFavoriteGames = ({\n  setCombinedData\n}: UseCombineFavoriteGamesProps) => {\n  const isLoggedIn = useSelector(getIsLoggedIn);\n  const { configs } = useCasinoGamesConfigsValues();\n  const favoriteGames: (NewCasinoGame | NewCasinoGameBackend)[] | undefined =\n    useSelector(getFavoriteCasinoGames);\n\n  const { selectedCategory } = useSelectedCategory({ configs });\n\n  useLayoutEffect(() => {\n    if (selectedCategory !== CUSTOM_CATEGORIES.favorite.id) {\n      return;\n    }\n\n    if (!isLoggedIn) {\n      return;\n    }\n\n    setCombinedData(prevData => {\n      if (prevData.queryKey !== 'favorite') {\n        return {\n          queryKey: CUSTOM_CATEGORIES.favorite.id,\n          data: undefined\n        };\n      } else {\n        return prevData;\n      }\n    });\n  }, [isLoggedIn]);\n\n  useEffect(() => {\n    if (selectedCategory !== CUSTOM_CATEGORIES.favorite.id) {\n      return;\n    }\n\n    if (!favoriteGames) {\n      return;\n    }\n\n    setCombinedData({\n      queryKey: CUSTOM_CATEGORIES.favorite.id,\n      data: {\n        data: {\n          status: '200',\n          games: {\n            [CUSTOM_CATEGORIES.favorite.id]: {\n              count: favoriteGames.length,\n              games: favoriteGames.map(gameMapper)\n            }\n          }\n        }\n      }\n    });\n  }, [selectedCategory, favoriteGames]);\n};\n","import { AxiosResponse } from 'axios';\nimport type { IGetCasinoGamesResponse } from 'interfaces/new-casino';\n\nexport const checkBackendAnomaly = (\n  data: AxiosResponse<IGetCasinoGamesResponse>\n) => {\n  return data.data.status === -1;\n};\n","import { Fragment, memo, Suspense, useEffect, useMemo, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { leftSideBarCasinoMain } from 'utils/casino/casino';\nimport { CUSTOM_CATEGORIES } from 'utils/constants/casino/custom-categories';\nimport { CUSTOM_PROVIDERS } from 'utils/constants/casino/custom-providers';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { lazy } from 'utils/generic/lazy';\nimport { isMobile } from 'utils/is-mobile';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport { EmptyCasinoGamesResult } from './__partials/components/EmptyCasinoGamesResult';\nimport { GamesByCategory } from './__partials/components/GamesByCategory';\nimport { CasinoGamesByCategorySkeleton } from './__partials/components/GamesByCategory/Skeleton';\nimport { useGamesCombinedData } from './__partials/hooks/useGamesCombinedData';\nimport { useGamesOrder } from './__partials/hooks/useGamesOrder';\nimport { useGamesQuery } from './__partials/hooks/useGamesQuery';\nimport { useSelectedCategory } from './__partials/hooks/useSelectedCategory';\nimport { useCasinoGamesConditionalsValues } from './__partials/providers/CasinoGamesConditionalsProvider';\nimport { useCasinoGamesConfigsValues } from './__partials/providers/CasinoGamesConfigsContext';\nimport { useCasinoGamesFetchDisabledValues } from './__partials/providers/CasinoGamesFetchDisabledContext';\nimport { useCasinoGamesFetchParamsValues } from './__partials/providers/CasinoGamesFetchParamsContext';\nimport { CasinoGamesConditionalsActionType } from './__partials/state/conditionals-reducer';\nimport { LazyLoad } from 'components/Shared/LazyLoad';\nimport { setGamesConfigs } from 'store/actions/new-casino';\nimport { getFavoriteProviders } from 'store/selectors/fav-data';\nimport { useCategories } from '../Categories/__partials/hooks/useCategories';\nimport './index.less';\n\nconst { MockInitializer } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"CasinoGamesMockInitializer\" */ './__partials/components/MockInitializer'\n    )\n);\n\nconst { FavoriteProviders } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"my-casino-providers\" */ './__partials/components/FavoriteProviders'\n    )\n);\n\nconst LOAD_COUNT_DESKTOP = 5;\nconst LAZY_LOAD_INITIAL_COUNT_MOBILE = 3;\nconst LAZY_LOAD_INITIAL_COUNT = 5;\n\nconst _CasinoGamesContent = () => {\n  const { configs } = useCasinoGamesConfigsValues();\n  const { fetchParams } = useCasinoGamesFetchParamsValues();\n  const { isFetchDisabled } = useCasinoGamesFetchDisabledValues();\n  const dispatch = useDispatch();\n  const containerRef = useRef(null);\n  const { selectedCategory } = useSelectedCategory({ configs });\n\n  const categories = useCategories(leftSideBarCasinoMain());\n  const isFavoriteCategory = selectedCategory === CUSTOM_CATEGORIES.favorite.id;\n  const { conditionals, dispatchConditionals } =\n    useCasinoGamesConditionalsValues();\n\n  const favoriteProviders = useSelector(getFavoriteProviders);\n  const {\n    data,\n    paramsWithoutPaginationStringified,\n    isLoading: isQueryLoading\n  } = useGamesQuery({\n    configs: configs,\n    params: fetchParams,\n    isFetchDisabled: isFetchDisabled\n  });\n\n  const { combinedData, setCombinedData } = useGamesCombinedData({\n    data,\n    paramsWithoutPaginationStringified\n  });\n\n  // setting loading state for load more functionality\n  useEffect(() => {\n    dispatchConditionals({\n      type: CasinoGamesConditionalsActionType.SET,\n      payload: {\n        queryLoading: isQueryLoading\n      }\n    });\n  }, [isQueryLoading]);\n\n  useEffect(() => {\n    dispatch(setGamesConfigs(configs));\n  }, [configs]);\n\n  const unorderedGames = useMemo(() => {\n    if (!combinedData.data?.data?.games) {\n      return null;\n    }\n\n    return Object.entries(combinedData.data.data.games)\n      .map(([id, _games]) => {\n        const providerIdsConfig = configs.providerIds;\n        const filteredGames =\n          providerIdsConfig && providerIdsConfig !== CUSTOM_PROVIDERS.all.name\n            ? _games.games?.filter((game: NewCasinoGame) =>\n                providerIdsConfig.includes(game.provider)\n              )\n            : _games.games;\n\n        if (!filteredGames?.length) {\n          return null;\n        }\n\n        return {\n          id,\n          count: _games.count,\n          games: filteredGames,\n          categoryName: _games.games?.[0]?.cats?.[0]?.title || ''\n        };\n      })\n      .filter(Boolean);\n  }, [combinedData]);\n\n  const { orderedGames: games } = useGamesOrder({ games: unorderedGames });\n  const isDisableProviders = configs.favorite?.disableProviders;\n\n  const gamesData = useMemo(() => {\n    if (games?.length) {\n      const orderMap = new Map(\n        categories?.map((value, index) => {\n          return [value.id, index];\n        })\n      );\n\n      const sortedGames = games.sort((a, b) => {\n        const indexA = orderMap.has(a?.id || '')\n          ? orderMap.get(a?.id || '') || Infinity\n          : Infinity;\n\n        const indexB = orderMap.has(b?.id || '')\n          ? orderMap.get(b?.id || '') || Infinity\n          : Infinity;\n\n        return indexA - indexB;\n      });\n\n      return configs.categoriesLength\n        ? sortedGames.slice(0, configs.categoriesLength)\n        : sortedGames;\n    }\n\n    return [];\n  }, [games, configs.categoriesLength]);\n\n  const isEmptyResults = useMemo(() => {\n    if (conditionals.emptyResults) {\n      return conditionals.emptyResults;\n    }\n\n    if (\n      SpringConfigs.USER_PERSONALIZATION_ENABLED &&\n      isFavoriteCategory &&\n      !isDisableProviders\n    ) {\n      if (\n        games === undefined ||\n        games === null ||\n        favoriteProviders === undefined ||\n        favoriteProviders === null\n      ) {\n        return false;\n      }\n\n      return !games?.length && !favoriteProviders?.length;\n    }\n\n    return games ? games?.length === 0 : false;\n  }, [\n    conditionals.emptyResults,\n    favoriteProviders?.length,\n    games,\n    isFavoriteCategory,\n    isDisableProviders\n  ]);\n\n  const isExternalLoading =\n    combinedData.data?.data?.games &&\n    Object.keys(combinedData.data?.data?.games)[0] === '';\n\n  const isLoading = SpringConfigs.MOCKED_DATA\n    ? false\n    : conditionals.loading || !combinedData.data || isExternalLoading;\n\n  const favProvidersEnabledSetting =\n    isFavoriteCategory &&\n    SpringConfigs.USER_PERSONALIZATION_ENABLED &&\n    !configs.favorite?.disableProviders;\n\n  const favProvidersEnabled =\n    favoriteProviders?.length && favProvidersEnabledSetting;\n\n  if (isEmptyResults) {\n    return <EmptyCasinoGamesResult />;\n  }\n\n  if (isLoading) {\n    return (\n      <CasinoGamesByCategorySkeleton\n        favProvidersEnabled={favProvidersEnabledSetting || false}\n      />\n    );\n  }\n\n  return (\n    <div ref={containerRef} style={{ width: '100%' }}>\n      {SpringConfigs.MOCKED_DATA && (\n        <Suspense>\n          <MockInitializer setCombinedData={setCombinedData} />\n        </Suspense>\n      )}\n      {!SpringConfigs.MOCKED_DATA &&\n      SpringConfigs.USER_PERSONALIZATION_ENABLED &&\n      favProvidersEnabled ? (\n        <Suspense\n          fallback={\n            <CasinoGamesByCategorySkeleton\n              favProvidersEnabled={favProvidersEnabled || false}\n            />\n          }\n        >\n          <FavoriteProviders showTitle={configs.showCategoryName} />\n        </Suspense>\n      ) : null}\n      <LazyLoad\n        initialCount={\n          configs.groupAllByCategories\n            ? Infinity\n            : isMobile()\n            ? LAZY_LOAD_INITIAL_COUNT_MOBILE\n            : LAZY_LOAD_INITIAL_COUNT\n        }\n        loadCount={isMobile() ? 1 : LOAD_COUNT_DESKTOP}\n        data={gamesData}\n        renderer={(categoryGames: {\n          id: string;\n          count: string;\n          games: NewCasinoGame[];\n          categoryName: string;\n        }) => (\n          <Fragment key={categoryGames.id}>\n            <GamesByCategory\n              category={{\n                id: categoryGames.id,\n                name: categoryGames.categoryName,\n                gamesCount: Number(categoryGames.count)\n              }}\n              data={categoryGames.games}\n              parentRef={containerRef}\n            />\n          </Fragment>\n        )}\n      />\n    </div>\n  );\n};\n\nexport const CasinoGamesContent = memo(_CasinoGamesContent);\n","import { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useQuery } from '@tanstack/react-query';\nimport { DEBOUNCE_DELAY } from 'utils/constants/app/magic-numbers-app';\nimport {\n  CUSTOM_CATEGORIES,\n  CUSTOM_CATEGORY_IDS_WITHOUT_PROVIDERS\n} from 'utils/constants/casino/custom-categories';\nimport { ECasinoQueryKey } from 'utils/constants/store/query-keys';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { showToastError } from 'utils/generic/show-toast-error';\nimport {\n  NewCasinoGamesConfigs,\n  NewCasinoGamesFetchingParams\n} from 'interfaces/new-casino';\nimport {\n  getCasinoGames,\n  getPromotedCasinoGames\n} from 'services/casino/casino-fetch-games-query';\nimport { useSelectedCategory } from './useSelectedCategory';\nimport { useDebounce } from 'hooks/useDebounce';\nimport { setEnhancedParams } from 'store/actions/new-casino';\nimport {\n  getCanRequestCategoriesNestedData,\n  getCanRequestProvidersNestedData\n} from 'store/selectors/new-casino';\nimport { getInitialFetchParams } from '../constants/fetch-params';\n\ntype UseGamesQueryProps = {\n  configs: Partial<NewCasinoGamesConfigs>;\n  params: Partial<NewCasinoGamesFetchingParams>;\n  isFetchDisabled?: boolean;\n};\n\nconst MAX_CASINO_GAMES_QUERY_KEY_LENGTH = 3;\n\nexport const useGamesQuery = ({\n  configs,\n  params,\n  isFetchDisabled: isFetchDisabledFromOuterScope\n}: UseGamesQueryProps) => {\n  const categoriesFetched = useSelector(getCanRequestCategoriesNestedData);\n  const providersFetched = useSelector(getCanRequestProvidersNestedData);\n  const { selectedCategory } = useSelectedCategory({ configs });\n  const dispatch = useDispatch();\n  // ATTENTION: this array is also used for getting cache in useGamesCombinedData\n  const [casinoGamesQueryKey, setCasinoGamesQueryKey] = useState(() => [\n    ECasinoQueryKey.CasinoGames as string,\n    configs.moduleId\n  ]);\n\n  const enhancedParams: Partial<NewCasinoGamesFetchingParams> = {\n    ...getInitialFetchParams(configs),\n    ...params\n  };\n\n  const paramsWithoutPagination = {\n    ...enhancedParams,\n    offset: undefined,\n    limit: undefined\n  };\n\n  const offset = enhancedParams.offset || 0;\n\n  const fetchEnabledBinding = useMemo(() => {\n    // check possibility for request data from CMS in case of binding with other elements to keep requests' right order\n\n    const isCategoryWithoutProvider =\n      CUSTOM_CATEGORY_IDS_WITHOUT_PROVIDERS.includes(selectedCategory);\n\n    // when bound to \"categories\" and \"providers\" elements\n    if (configs.bindWithCategories && configs.bindWithProviders) {\n      return (\n        categoriesFetched && (providersFetched || isCategoryWithoutProvider)\n      );\n    }\n\n    //when bound to \"categories\" element only\n    if (configs.bindWithCategories) {\n      return categoriesFetched;\n    }\n\n    //when bound to \"providers\" element only\n    if (configs.bindWithProviders) {\n      return providersFetched || isCategoryWithoutProvider;\n    }\n\n    //when not bound to any element\n    return true;\n  }, [\n    configs.bindWithCategories,\n    configs.bindWithProviders,\n    categoriesFetched,\n    providersFetched,\n    selectedCategory\n  ]);\n\n  const fetchEnabledByQueryKey = useMemo(() => {\n    if (configs.skipQueryKeysCheck) {\n      return true;\n    }\n\n    // if query keys are less than 3, it means that there is no fetch for the data and query is decided to be a miss\n    if (casinoGamesQueryKey.length < MAX_CASINO_GAMES_QUERY_KEY_LENGTH) {\n      return false;\n    }\n\n    if (\n      [CUSTOM_CATEGORIES.special.id, CUSTOM_CATEGORIES.specialLive.id].includes(\n        selectedCategory\n      )\n    ) {\n      return true;\n    }\n\n    const parsedParams = JSON.parse(casinoGamesQueryKey[2] as string);\n\n    // check for parsedParams length is because react query has an in-between case where it has only one parameter\n    // in that case there is no fetch for the data and query is decided to be a miss\n    return Object.keys(parsedParams).length >= 2;\n  }, [casinoGamesQueryKey, selectedCategory]);\n\n  const fetchEnabledByPagination = Boolean(\n    enhancedParams.offset !== undefined || enhancedParams.limit !== undefined\n  );\n\n  const isFetchEnabled =\n    !SpringConfigs.MOCKED_DATA &&\n    !isFetchDisabledFromOuterScope &&\n    fetchEnabledBinding &&\n    fetchEnabledByQueryKey &&\n    fetchEnabledByPagination;\n\n  const paramsWithoutPaginationStringified = JSON.stringify(\n    paramsWithoutPagination,\n    null\n  );\n\n  // ATTENTION: setCasinoGamesQueryKey is also used for getting cache in useGamesCombinedData. Modify it carefully\n  const { isDebouncing } = useDebounce(\n    () => {\n      setCasinoGamesQueryKey([\n        ECasinoQueryKey.CasinoGames,\n        configs.moduleId,\n        paramsWithoutPaginationStringified,\n        offset\n      ]);\n    },\n    DEBOUNCE_DELAY._10,\n    [paramsWithoutPaginationStringified, offset, configs.moduleId]\n  );\n\n  const isPromotedCategory = [\n    CUSTOM_CATEGORIES.special.id,\n    CUSTOM_CATEGORIES.specialLive.id\n  ].includes(selectedCategory);\n\n  const getGames = isPromotedCategory ? getPromotedCasinoGames : getCasinoGames;\n\n  const { data, error, isLoading } = useQuery({\n    queryKey: casinoGamesQueryKey,\n    queryFn: () => getGames(enhancedParams),\n    retry: false,\n    enabled: isFetchEnabled\n  });\n\n  useEffect(() => {\n    dispatch(setEnhancedParams(enhancedParams));\n  }, [JSON.stringify(enhancedParams)]);\n\n  useEffect(() => {\n    if (!error) {\n      return;\n    }\n\n    showToastError(String(error));\n  }, [error]);\n\n  return {\n    params,\n    data,\n    error,\n    isLoading,\n    isFetchEnabled,\n    isDebouncing,\n    paramsWithoutPaginationStringified\n  };\n};\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { NewCasinoGame } from 'interfaces/new-casino';\nimport {\n  getCasinoOriginalCategories,\n  getCasinoOriginalCategoriesSet,\n  getCasinoOriginalCategoriesSetLeftSideBar\n} from 'store/selectors/new-casino';\nimport { useCasinoGamesConfigsValues } from '../providers/CasinoGamesConfigsContext';\n\ntype TUseGamesOrderProps = {\n  games:\n    | null\n    | (null | {\n        count: number;\n        games: NewCasinoGame[];\n        id: string;\n        categoryName: string;\n      })[];\n};\n\nexport const useGamesOrder = ({ games }: TUseGamesOrderProps) => {\n  const { computedConfigs } = useCasinoGamesConfigsValues();\n\n  const originalCategories = useSelector(getCasinoOriginalCategories);\n  const originalCategoriesSet = useSelector(getCasinoOriginalCategoriesSet);\n  const leftSideBarOriginalCategoriesSet = useSelector(\n    getCasinoOriginalCategoriesSetLeftSideBar\n  );\n\n  const categoriesSet = useMemo(() => {\n    return (\n      (computedConfigs.leftSideBarAvailable\n        ? leftSideBarOriginalCategoriesSet\n        : originalCategoriesSet) ?? []\n    );\n  }, [\n    computedConfigs.leftSideBarAvailable,\n    originalCategoriesSet,\n    leftSideBarOriginalCategoriesSet\n  ]);\n\n  const originalCategoriesSortArray = useMemo(() => {\n    if (categoriesSet.length === 0) {\n      return originalCategories?.map(category => category.id) || [];\n    } else {\n      return categoriesSet;\n    }\n  }, [originalCategories, categoriesSet]);\n\n  const orderedGames = useMemo(\n    () =>\n      games?.sort((categoryGamesA, categoryGamesB) => {\n        // sorting category games by actual categories order\n        const categoryAIndex = originalCategoriesSortArray.indexOf(\n          categoryGamesA?.id || ''\n        );\n\n        const categoryBIndex = originalCategoriesSortArray.indexOf(\n          categoryGamesB?.id || ''\n        );\n\n        return categoryAIndex - categoryBIndex;\n      }) || null,\n    [games, originalCategoriesSortArray]\n  );\n\n  return { orderedGames };\n};\n","import { FC, Suspense, useMemo, useReducer, useState } from 'react';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { lazy } from 'utils/generic/lazy';\nimport { getInitialFetchParams } from './__partials/constants/fetch-params';\nimport { useSelectedCategory } from './__partials/hooks/useSelectedCategory';\nimport { CasinoGamesConditionalsProvider } from './__partials/providers/CasinoGamesConditionalsProvider';\nimport {\n  CasinoGamesComputedConfigs,\n  CasinoGamesConfigs,\n  CasinoGamesConfigsProvider\n} from './__partials/providers/CasinoGamesConfigsContext';\nimport { CasinoGamesFetchDisabledProvider } from './__partials/providers/CasinoGamesFetchDisabledContext';\nimport { CasinoGamesFetchParamsProvider } from './__partials/providers/CasinoGamesFetchParamsContext';\nimport { casinoGamesConditionalsReducer } from './__partials/state/conditionals-reducer';\nimport { casinoGamesFetchingParamsReducer } from './__partials/state/reducer';\nimport {\n  computeCasinoGamesArrowsEnabled,\n  computeCasinoGamesCategoryNameVisible,\n  computeCasinoGamesCountForSliderSkeleton,\n  computeCasinoGamesLayoutType,\n  computeCasinoGamesLimit,\n  computeCasinoGamesLoadMoreButtonEnabled,\n  computeCasinoGamesPerRow,\n  computeCasinoGamesRows,\n  computeCasinoLoadMoreButtonType,\n  computeLeftSideBarCasinoAvailable\n} from './__partials/utils/compute-configs';\nimport { CasinoGamesContent } from './GamesContent';\nimport { useOptions } from '../hooks/useOptions';\n\nconst { FetchParamsUpdaterCategory } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterCategory\" */ './__partials/fetch-updaters/FetchParamsUpdaterCategory'\n    )\n);\n\nconst { FetchParamsUpdaterProvider } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterProvider\" */ './__partials/fetch-updaters/FetchParamsUpdaterProvider'\n    )\n);\n\nconst { FetchParamsUpdaterLimit } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterLimit\" */ './__partials/fetch-updaters/FetchParamsUpdaterLimit'\n    )\n);\n\nconst { FetchParamsUpdaterOffset } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterOffset\" */ './__partials/fetch-updaters/FetchParamsUpdaterOffset'\n    )\n);\n\nconst { FetchParamsUpdaterByKey } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterByKey\" */ './__partials/fetch-updaters/FetchParamsUpdaterByKey'\n    )\n);\n\nconst { FetchParamsUpdaterLastPlayedGames } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterLastPlayedGames\" */ './__partials/fetch-updaters/FetchParamsUpdaterLastPlayedGames'\n    )\n);\n\nconst { FetchParamsUpdaterSuggestedGames } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterSuggestedGames\" */ './__partials/fetch-updaters/FetchParamsUpdaterSuggestedGames'\n    )\n);\n\nconst { FetchParamsUpdaterFavoriteGames } = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"FetchParamsUpdaterFavoriteGames\" */ './__partials/fetch-updaters/FetchParamsUpdaterFavoriteGames'\n    )\n);\n\nexport const CasinoGames: FC<{ configs: Partial<CasinoGamesConfigs> }> = ({\n  configs\n}) => {\n  useOptions({ shouldFetch: configs?.isFirstCasinoElement });\n  const { selectedCategory } = useSelectedCategory({ configs });\n\n  const [isFetchDisabled, setIsFetchDisabled] = useState(false);\n  // useReducer type issue from react types\n  // @ts-ignore\n  const [fetchParams, dispatchFetchParams] = useReducer(\n    casinoGamesFetchingParamsReducer,\n    getInitialFetchParams(configs)\n  );\n\n  // useReducer type issue from react types\n  // @ts-ignore\n  const [conditionals, dispatchConditionals] = useReducer(\n    casinoGamesConditionalsReducer,\n    {}\n  );\n\n  const computedConfigs = useMemo<CasinoGamesComputedConfigs>(() => {\n    const loadMoreButtonEnabled = computeCasinoGamesLoadMoreButtonEnabled(\n      configs,\n      selectedCategory\n    );\n\n    const loadMoreButtonType = computeCasinoLoadMoreButtonType(configs);\n    const gamesPerRow = computeCasinoGamesPerRow(configs);\n    const gamesRows = computeCasinoGamesRows(configs);\n    const gamesCountForSkeleton =\n      computeCasinoGamesCountForSliderSkeleton(configs);\n\n    const gamesLimit = computeCasinoGamesLimit(configs);\n    const arrowsEnabled = computeCasinoGamesArrowsEnabled(configs);\n    const leftSideBarAvailable = computeLeftSideBarCasinoAvailable();\n    const layoutType = computeCasinoGamesLayoutType(configs);\n    const nextSlideOnHover = configs.nextSlideOnHover;\n\n    const categoryNameVisible = computeCasinoGamesCategoryNameVisible(\n      configs,\n      selectedCategory\n    );\n\n    return {\n      loadMoreButtonEnabled,\n      loadMoreButtonType,\n      gamesPerRow,\n      gamesRows,\n      gamesLimit,\n      arrowsEnabled,\n      categoryNameVisible,\n      leftSideBarAvailable,\n      gamesCountForSkeleton,\n      layoutType,\n      nextSlideOnHover\n    };\n  }, [configs, selectedCategory]);\n\n  const contextProviderConfigsValue = {\n    configs,\n    computedConfigs\n  };\n\n  const contextProviderFetchDisabledValue = {\n    isFetchDisabled,\n    setIsFetchDisabled\n  };\n\n  const contextProviderFetchParamsValue = {\n    fetchParams,\n    dispatchFetchParams\n  };\n\n  return (\n    <CasinoGamesConfigsProvider value={contextProviderConfigsValue}>\n      <CasinoGamesFetchDisabledProvider\n        value={contextProviderFetchDisabledValue}\n      >\n        <CasinoGamesFetchParamsProvider value={contextProviderFetchParamsValue}>\n          <CasinoGamesConditionalsProvider\n            value={{ conditionals, dispatchConditionals }}\n          >\n            {!SpringConfigs.MOCKED_DATA && (\n              <Suspense>\n                <FetchParamsUpdaterOffset />\n                <FetchParamsUpdaterLimit />\n                <FetchParamsUpdaterCategory />\n                <FetchParamsUpdaterProvider />\n                <FetchParamsUpdaterByKey />\n                <FetchParamsUpdaterLastPlayedGames />\n                <FetchParamsUpdaterSuggestedGames />\n                <FetchParamsUpdaterFavoriteGames />\n              </Suspense>\n            )}\n            <CasinoGamesContent />\n          </CasinoGamesConditionalsProvider>\n        </CasinoGamesFetchParamsProvider>\n      </CasinoGamesFetchDisabledProvider>\n    </CasinoGamesConfigsProvider>\n  );\n};\n","import { useEffect, useState } from 'react';\n\nexport const useInView = (\n  element: HTMLElement | Element | null | undefined,\n  configs?: {\n    options?: IntersectionObserverInit;\n    destructOnFirstIntersect?: boolean;\n  }\n): boolean => {\n  const [inView, setInView] = useState(false);\n\n  useEffect(() => {\n    if (!element) {\n      return;\n    }\n\n    const callback = ([entry]: IntersectionObserverEntry[]) => {\n      if (configs?.destructOnFirstIntersect && entry.isIntersecting) {\n        observer.unobserve(element);\n        observer.disconnect();\n      }\n\n      setInView(prev => {\n        if (prev === entry.isIntersecting) {\n          return prev;\n        }\n\n        return entry.isIntersecting;\n      });\n    };\n\n    const observer = new IntersectionObserver(callback, configs?.options);\n\n    observer.observe(element);\n\n    return () => {\n      if (!element) {\n        return;\n      }\n\n      observer.unobserve(element);\n      observer.disconnect();\n    };\n  }, [element, configs?.options, configs?.destructOnFirstIntersect]);\n\n  return inView;\n};\n","import axios, { AxiosResponse } from 'axios';\nimport { CasinoCommandNames } from 'utils/constants/casino/casino-command-names';\nimport { CASINO_LANG_EXCEPTIONS } from 'utils/constants/languages/language-format';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { GLOBALS } from 'utils/generic/global-variables';\nimport { isMobile } from 'utils/is-mobile';\nimport {\n  IGetCasinoGamesResponse,\n  NewCasinoGamesFetchingParams\n} from 'interfaces/new-casino';\n\nconst lang = SpringConfigs.CURRENT_LANGUAGE;\n\nconst fetchLang =\n  GLOBALS.languageConfigs.casinoLangPrefix ||\n  CASINO_LANG_EXCEPTIONS[lang] ||\n  CASINO_LANG_EXCEPTIONS[lang.slice(0, 2)] ||\n  SpringConfigs.LANGUAGE_PREFIX;\n\nconst defaultParams: Partial<NewCasinoGamesFetchingParams> = {\n  partner_id: SpringConfigs.PARTNER_ID,\n  is_mobile: Number(isMobile()),\n  lang: fetchLang,\n  use_webp: Number(SpringConfigs.IS_WEBP_SUPPORTED),\n  offset: 0,\n  country: SpringConfigs.CURRENT_COUNTRY_CODE\n};\n\nexport const getCasinoGames = async <T = IGetCasinoGamesResponse>(\n  _params: Partial<NewCasinoGamesFetchingParams>\n) => {\n  const url = SpringConfigs.DECENTRALIZED_CASINO_URL\n    ? `${SpringConfigs.DECENTRALIZED_CASINO_URL}${CasinoCommandNames.GET_DECENTRALIZED_GAMES}`\n    : `${SpringConfigs.CASINO_URL}/${CasinoCommandNames.GET_GAMES}`;\n\n  const params = SpringConfigs.DECENTRALIZED_CASINO_URL\n    ? {\n        partnerId: SpringConfigs.DECENTRALIZED_CASINO_PARTNER_ID,\n        lang: defaultParams.lang,\n        categoryId: _params.category?.includes(',')\n          ? undefined\n          : _params.category,\n        offset: _params.offset || 0,\n        limit: _params.limit || SpringConfigs.CASINO_GAMES_FETCH_COUNT\n      }\n    : { ...defaultParams, ..._params, _all_categories: undefined };\n\n  return await axios.get<T, AxiosResponse<T>>(url, { params });\n};\n\nexport const getPromotedCasinoGames = async <T = IGetCasinoGamesResponse>(\n  _params: Partial<NewCasinoGamesFetchingParams>\n) => {\n  const url = `${SpringConfigs.CASINO_URL}/${CasinoCommandNames.GET_PROMOTED_GAMES}`;\n\n  const params = { ...defaultParams, ..._params };\n\n  return await axios.get<T, AxiosResponse<T>>(url, { params });\n};\n"],"names":["FavoriteCasinoProviderCardSkeleton","_jsxs","className","children","_jsx","Skeleton","active","title","width","style","height","margin","paragraph","cc","SpringConfigs","IS_RTL","PersonalizedGameCard","_ref","game","games","onCheck","useContext","PersonalizedGamesContext","selected","length","find","item","id","isMobile","onClick","src","CASINO_HIGH_QUALITY_PICTURES","icon_3","icon_1","icon_2","VERSION","alt","name","loading","provider_title","Checkbox","checked","createContext","PersonalizedGamesProvider","value","Provider","CASINO_GAMES_SLIDER_LIMIT_MULTIPLIER","useSelectedCategory","_routeMatch$params","configs","location","useLocation","routeMatch","useSbRouteMatch","mountPoint","pathname","selectedCategory","bindWithCategories","groupAllByCategories","params","category","CUSTOM_CATEGORIES","all","categoryIds","CasinoGamesConditionalsContext","conditionals","dispatchConditionals","CasinoGamesConditionalsProvider","memo","props","useCasinoGamesConditionalsValues","CasinoGamesFetchDisabledContext","isFetchDisabled","setIsFetchDisabled","CasinoGamesFetchDisabledProvider","useCasinoGamesFetchDisabledValues","CasinoGamesFetchParamsContext","fetchParams","dispatchFetchParams","CasinoGamesFetchParamsProvider","useCasinoGamesFetchParamsValues","CasinoGamesConditionalsActionType","casinoGamesConditionalsReducer","state","action","type","payload","SET","RESET","CasinoGamesFetchingParamsActionType","casinoGamesFetchingParamsReducer","CasinoGamesDefaultConstants","LOAD_MORE_TYPE","CasinoGamesLoadMoreBtnType","BUTTON","GAMES_PER_ROW","GAMES_ROWS","CASINO_GAMES_LIMIT","LOAD_MORE_BUTTON_ENABLED","ARROWS_ENABLED","CATEGORY_NAME_VISIBLE","INITIAL_FETCH_PARAMS_STATE","by_key","ENewCasinoGamesFetchingParamsKey","Category","external_id","undefined","provider","INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_ALL_CATEGORY","Id","_fake_category","INITIAL_FETCH_PARAMS_STATE_FOR_SKIP_QUERY_KEYS_CHECK_LIVE_CASINO_CATEGORY","LIVE_CASINO_CATEGORY","INITIAL_FETCH_PARAMS_BY_SKIP_CATEGORY","getInitialFetchParams","skipQueryKeysCheck","computeCasinoLoadMoreButtonType","mobileCustomSettings","mobileLoadMoreType","loadMoreType","computeCasinoGamesPerRow","mobileGamesPerRow","gamesPerRow","computeCasinoGamesRows","mobileGamesRows","gamesRows","computeCasinoGamesLimit","mobileCasinoGamesLimit","casinoGamesLimit","EmptyCasinoGamesResult","useCasinoGamesConfigsValues","t","useTranslation","isFavoriteCategory","favorite","isLastPlayedCategory","lastPlayed","EmptyCasinoGames","USER_PERSONALIZATION_ENABLED","gameText","SeeAllGames","onViewAll","slidesPerView","window","innerWidth","useGamesLoadMore","computedConfigs","handleLoadMore","useCallback","offset","limit","queryLoading","gamesLimit","loadMoreButtonType","SLIDER","Math","min","CASINO_GAMES_FETCH_MAX_COUNT","CasinoGamesByCategorySkeleton","favProvidersEnabled","gamesByCategoryClasses","aspectRatio","toString","replace","sliderSkeletonGridTemplate","useMemo","gridTemplateRows","gridTemplateColumns","ceil","gamesCountForSkeleton","CategoryNameSkeleton","categoryNameVisible","FavoritePerRowMobile","FavoritePerRow","Array","from","v","i","map","createArray","key","CasinoGameCardSkeleton","SwiperSlider","lazy","_CasinoGamesCarousel","data","loadMoreFunctionalityAvailable","CasinoGameCard","viewAllEnabled","observableReference","setObservableReference","useState","scrollableReference","useRef","inView","useInView","destructOnFirstIntersect","options","threshold","observableIndexDiff","showArrows","arrowsEnabled","loadMoreGames","debouncedLoadMoreGames","callback","delay","arguments","timeoutDuration","DURATION_300","deps","ref","debounceId","RidGenerator","useEffect","current","debounce","func","_ref$current","call","useDebouncedCallback","DEBOUNCE_DELAY","_300","scrollableElement","loadMoreCalled","handleScroll","totalScrollWidth","scrollWidth","scrollLeft","clientWidth","addEventListener","removeEventListener","drawableData","res","divideArray","array","itemLength","itemsCount","ans","temp","push","a","group","groupIndex","dataArray","index","Suspense","fallback","bodyArrows","activeSlide","disableSwiping","alwaysShowArrows","spaceBetween","slideOnHover","nextSlideOnHover","fetchOnProgress","point","drawableTabs","CasinoGamesCarousel","GamesLazyLoad","_ref2","loadMoreContainerStyles","triggerCard","setTriggerCard","observer","IntersectionObserver","entry","isIntersecting","unobserve","target","disconnect","observe","_Fragment","elem","Loading","CasinoLoadMoreButton","namedLazy","_GamesByCategory","_configs$favorite","_customCategory$categ","_category$name","parentRef","favoriteProviders","useSelector","getFavoriteProviders","dispatch","useDispatch","history","useHistory","isLoadMoreButtonSlider","isLoadMoreButtonLazyLoad","LAZY_LOAD","customCategory","isSelected","CUSTOM_CATEGORY_IDS_WITHOUT_PROVIDERS","includes","CUSTOM_CATEGORIES_ARRAY","_customCategory","isPromotedCategory","special","specialLive","loadMoreButtonEnabled","gamesCount","loadMoreButtonAvailable","drawGamesWithCarousel","drawGamesFallback","arrows","isAlternativeTitle","useAlternativeTitle","isFavoriteMultiView","overflow","redirectPathToCasino","PAGE_URLS","casino","shouldRedirectToCasino","shouldRedirect","redirectPathToLiveCasino","shouldRedirectToLiveCasino","redirectPath","href","CASINO_MOUNT_PATH","_parentRef$current","scrollIntoView","search","layoutType","CasinoGamesLayoutType","CLASSIC","CasinoGameCardComponent","casinoPlayRealBtnSize","casinoNameSize","toLowerCase","createCategoryTitle","_customCategory$categ2","clearAllFavorite","marginRight","marginLeft","Fragment","GamesByCategory","checkIsSelectedCategoryFavorites","isGamesGroupedByCategory","isArray","isGamesGroupedById","total_count","isGamesDecentralized","count","generateCategoryAllSelectorKey","providers","useGamesCombinedData","_data","paramsWithoutPaginationStringified","queryClient","useQueryClientRQ","updateCrashGamesIds","useCasinoOnlinePlayers","crashGamesIds","getOnlinePlayersCrashGamesIds","crashGamesEffect","swarmCommand","CommandNames","GET_PROVIDER_CRASH_GAMES","game_ids","result","details","HasError","Result","forEach","GameId","onlinePlayerCount","OnlinePlayersCount","results","Results","slice","setOnlinePlayesCrashGamesData","useQuery","queryKey","ECasinoQueryKey","CasinoCrashGames","queryFn","refetchOnWindowFocus","refetchInterval","_20000","ids","setOnlinePlayersCrashGamesIds","Set","sort","combinedData","setCombinedData","isLoggedIn","getIsLoggedIn","favoriteGames","getFavoriteCasinoGames","useLayoutEffect","prevData","status","gameMapper","useCombineFavoriteGames","paramsWithoutPaginationStringifiedRef","_setUniqueGames","uniqueGames","uniqueGamesIds","categories","extearnal_game_id","setUniqueGames","MOCKED_DATA","selectedCategoryRef","CasinoGames","moduleId","cachedData","getQueryCache","findAll","exact","fetchStatus","parsedParams","JSON","parse","Object","keys","_data$config$url","checkBackendAnomaly","message","ENewCasinoFailedDataMessage","TimeoutError","emptyResults","config","gamesData","isCustomCategory","CUSTOM_CATEGORY_IDS","isCustomCategoryAll","isDecentralizedEndpoint","DECENTRALIZED_CASINO_URL","url","prevCombinedData","_gamesData$games","_gamesData$games$","_prevCombinedData$dat","_prevCombinedData$dat2","_prevCombinedData$dat3","_prevCombinedData$dat4","categoryId","mappedGames","CASINO_GAME_TEMPLATE","externalGameId","types","realMode","funMode","icon1","icon2","icon3","provider_badge","show_as_provider","cats","decentralizedGameCategoriesMapper","_gamesData$games2","_gamesData$games2$","_gamesData$games2$$ca","_gamesData$games2$$ca2","_prevCombinedData$dat5","_prevCombinedData$dat6","_prevCombinedData$dat7","_prevCombinedData$dat8","_prevCombinedData$dat9","_prevCombinedData$dat10","Number","_prevCombinedData$dat11","_prevCombinedData$dat12","entries","allGames","mergedGames","reduce","acc","_gamesData$games3","_gamesData$games3$cat","_gamesData$games4","_gamesData$games4$cat","MockInitializer","FavoriteProviders","_CasinoGamesContent","_combinedData$data2","_combinedData$data2$d","_combinedData$data3","_combinedData$data3$d","_configs$favorite2","containerRef","useCategories","leftSideBarCasinoMain","isLoading","isQueryLoading","isFetchDisabledFromOuterScope","categoriesFetched","getCanRequestCategoriesNestedData","providersFetched","getCanRequestProvidersNestedData","casinoGamesQueryKey","setCasinoGamesQueryKey","enhancedParams","paramsWithoutPagination","fetchEnabledBinding","isCategoryWithoutProvider","bindWithProviders","fetchEnabledByQueryKey","fetchEnabledByPagination","Boolean","isFetchEnabled","stringify","isDebouncing","useDebounce","_10","getGames","getPromotedCasinoGames","getCasinoGames","error","retry","enabled","setEnhancedParams","showToastError","String","useGamesQuery","setGamesConfigs","unorderedGames","_combinedData$data","_combinedData$data$da","_games$games","_games$games2","_games$games2$","_games$games2$$cats","_games$games2$$cats$","_games","providerIdsConfig","providerIds","filteredGames","CUSTOM_PROVIDERS","filter","categoryName","orderedGames","originalCategories","getCasinoOriginalCategories","originalCategoriesSet","getCasinoOriginalCategoriesSet","leftSideBarOriginalCategoriesSet","getCasinoOriginalCategoriesSetLeftSideBar","categoriesSet","leftSideBarAvailable","originalCategoriesSortArray","categoryGamesA","categoryGamesB","indexOf","useGamesOrder","isDisableProviders","disableProviders","orderMap","Map","sortedGames","b","has","get","Infinity","categoriesLength","isEmptyResults","isExternalLoading","favProvidersEnabledSetting","showTitle","showCategoryName","LazyLoad","initialCount","loadCount","renderer","categoryGames","CasinoGamesContent","FetchParamsUpdaterCategory","FetchParamsUpdaterProvider","FetchParamsUpdaterLimit","FetchParamsUpdaterOffset","FetchParamsUpdaterByKey","FetchParamsUpdaterLastPlayedGames","FetchParamsUpdaterSuggestedGames","FetchParamsUpdaterFavoriteGames","useOptions","shouldFetch","isFirstCasinoElement","useReducer","computeCasinoGamesLoadMoreButtonEnabled","mobileShowLoadMoreBtn","showLoadMoreBtn","computeCasinoGamesCountForSliderSkeleton","mobileShowArrow","showArrowForMobile","computeCasinoGamesArrowsEnabled","computeLeftSideBarCasinoAvailable","matchCasinoUrl","RegExp","match","LEFT_SIDE_BAR","LEFT_SIDE_BAR_CASINO","_configs$layoutType","computeCasinoGamesLayoutType","computeCasinoGamesCategoryNameVisible","contextProviderConfigsValue","contextProviderFetchDisabledValue","contextProviderFetchParamsValue","CasinoGamesConfigsProvider","element","setInView","prev","lang","CURRENT_LANGUAGE","fetchLang","GLOBALS","languageConfigs","casinoLangPrefix","CASINO_LANG_EXCEPTIONS","LANGUAGE_PREFIX","defaultParams","partner_id","PARTNER_ID","is_mobile","use_webp","IS_WEBP_SUPPORTED","country","CURRENT_COUNTRY_CODE","async","_params$category","CasinoCommandNames","GET_DECENTRALIZED_GAMES","CASINO_URL","GET_GAMES","partnerId","DECENTRALIZED_CASINO_PARTNER_ID","_params","CASINO_GAMES_FETCH_COUNT","_all_categories","axios","GET_PROMOTED_GAMES"],"sourceRoot":""}