{"version":3,"file":"static/chunks/98980.9ab7eadc6a108841.js","mappings":"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","sources":["webpack://_N_E/../../packages/common/src/api/coins/queries/useCoins/service.ts","webpack://_N_E/../../packages/common/src/api/coins/queries/useCoins/index.ts","webpack://_N_E/../../packages/common/src/api/coins/queryKeys.ts","webpack://_N_E/../../packages/common/src/components/Drawer/index.tsx","webpack://_N_E/../../packages/common/src/components/TransWithDefault/index.tsx","webpack://_N_E/../../packages/common/src/components/Drawer/styles.module.scss"],"sourcesContent":["import {\n Coin,\n PaginatedRequest,\n PaginatedResponse,\n} from '@starsoft/common/models';\nimport { QueryFunctionContext } from '@tanstack/react-query';\nimport { UseCoinsQueryKey } from './props';\nimport { AxiosInstance, AxiosResponse } from 'axios';\nimport { getCookie } from 'cookies-next';\nimport { CoinID, CookiesKey } from '@starsoft/common/enums';\nimport { OriginId, OriginIdType } from '@starsoft/common/models/origin/id';\n\nexport async function fetchCoins(\n { pageParam = 1, queryKey }: QueryFunctionContext,\n axiosInstance: AxiosInstance,\n): Promise> {\n const { limit }: PaginatedRequest = queryKey[1];\n\n const response: AxiosResponse> =\n await axiosInstance.get>('/coins', {\n params: {\n page: pageParam,\n limit,\n },\n });\n\n return response.data;\n}\n","import { CookiesKey } from '@starsoft/common/enums';\nimport {\n useAxiosInstance,\n useInfiniteQueryCallbacks,\n useInfiniteQueryReset,\n} from '@starsoft/common/hooks';\nimport {\n Coin,\n CoinType,\n GenericError,\n PaginatedResponse,\n} from '@starsoft/common/models';\nimport { useInfiniteQuery } from '@starsoft/common/services/query-client';\nimport { InfiniteData } from '@tanstack/react-query';\nimport { AxiosError, AxiosInstance } from 'axios';\nimport { getCookie } from 'cookies-next';\nimport { useMemo } from 'react';\nimport { CoinsQueryKey } from '../../queryKeys';\nimport { UseCoinsQueryKey } from './props';\nimport { fetchCoins } from './service';\n\n/**\n * Custom hook to fetch paginated coin data.\n *\n * This hook utilizes the `useInfiniteQuery` from React Query to fetch and manage\n * paginated data for coins. It handles the query key, pagination, and data formatting.\n *\n * @returns {Object} - Returns an object containing the query state and functions.\n * @returns {Coin[]} return.coins - The fetched and formatted paginated coin data.\n * @returns {Object} return.infinityQuery - Contains additional query state and functions.\n */\nexport function useCoins() {\n const originId = getCookie(CookiesKey.OriginId);\n // Define the query key for caching and refetching purposes\n const queryKey: UseCoinsQueryKey = [\n CoinsQueryKey.Primary,\n {\n limit: 50, // Limit the number of coins per page\n originId,\n },\n ];\n\n // Get functions to handle pagination\n const { getNextPageParam, getPreviousPageParam } =\n useInfiniteQueryCallbacks();\n\n // Reset the infinite query state\n useInfiniteQueryReset(queryKey);\n\n // Get an Axios instance for making HTTP requests\n const axiosInstance: AxiosInstance = useAxiosInstance();\n\n // Use the useInfiniteQuery hook to fetch paginated coin data\n const { data, ...infinityQuery } = useInfiniteQuery<\n PaginatedResponse,\n AxiosError,\n InfiniteData>,\n UseCoinsQueryKey\n >({\n queryKey,\n initialPageParam: 1, // Start fetching from the first page\n queryFn: queryContext => fetchCoins(queryContext, axiosInstance), // Function to fetch data\n getNextPageParam, // Function to get the next page parameter\n getPreviousPageParam, // Function to get the previous page parameter\n staleTime: 5 * 1000, // Data is considered fresh for 5 seconds\n });\n\n // Memoize the flattened array of coin data from all pages\n const formattedData: Coin[] = useMemo(\n () => data?.pages?.flatMap(page => page?.data),\n [data],\n );\n\n const cryptoCoins: Coin[] = useMemo(() => {\n if (!formattedData) {\n return [];\n }\n\n return formattedData.filter(coin => coin.type === CoinType.Crypto);\n }, [formattedData]);\n\n const fiatCoins: Coin[] = useMemo(() => {\n if (!formattedData) {\n return [];\n }\n\n return formattedData.filter(coin => coin.type === CoinType.Fiat);\n }, [formattedData]);\n\n // Return the query state and functions\n return {\n ...infinityQuery,\n cryptoCoins,\n fiatCoins,\n coins: formattedData, // The fetched and formatted paginated coin data\n };\n}\n","export enum CoinsQueryKey {\n Primary = 'coins/',\n ById = 'coins/:id',\n}\n","/**\n * Imports required for the Drawer component\n */\nimport { PropsWithChildren, Ref } from 'react';\nimport { DrawerProps } from './props';\nimport styles from './styles.module.scss';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { containerVariants, overlayVariant } from './variants';\nimport { useClickOutside } from '@starsoft/common/hooks';\n\n/**\n * Drawer Component\n * A sliding drawer component with animation and click outside handling\n *\n * @param {Object} props - The component props\n * @param {Function} props.onClose - Function called when drawer should close\n * @param {boolean} props.open - Whether the drawer is open\n * @param {ReactNode} props.children - Child elements to render inside drawer\n * @param {boolean} props.isDisabled - Whether the drawer is disabled\n * @param {boolean} props.absolute - Whether to use absolute positioning\n * @param {string} props.className - Additional CSS classes\n * @returns {JSX.Element | null} Rendered drawer component or null if closed/disabled\n */\nexport function Drawer({\n onClose,\n open,\n children,\n isDisabled,\n absolute,\n className = '',\n}: PropsWithChildren) {\n // Hook to handle clicks outside the drawer\n const ref = useClickOutside({\n open,\n onClickOutside: onClose,\n });\n\n return (\n \n {open && !isDisabled && (\n <>\n \n\n }\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n variants={containerVariants}\n >\n {children}\n \n \n )}\n \n );\n}\n","import { useSettingsStore } from '@starsoft/common/hooks/useSettingsStore';\nimport { CommonSettings } from '@starsoft/common/interfaces';\nimport { Trans as ITrans } from '@starsoft/common/interfaces/trans';\nimport { ComponentType } from 'react';\n\n/**\n * TransWithDefault Component\n * This component is responsible for rendering a translation component with default fallback.\n * It utilizes the settings store to determine the appropriate translation component to use.\n *\n * @param {ITrans} props - The properties for the component.\n * @param {object} props.components - Custom components to be used within the translation text.\n * @param {string} props.i18nKey - The internationalization key for the translation.\n * @param {object} props.values - The values to be interpolated in the translation string.\n *\n * @returns {JSX.Element} The rendered translation component with provided components and props.\n *\n * @example\n * // Usage example:\n * , br:
}}\n * i18nKey=\"example_key\"\n * values={{ name: 'John' }}\n * />\n */\nexport function TransWithDefault({ components, ...props }: ITrans) {\n const { state } = useSettingsStore();\n const settings: CommonSettings = state.settings;\n const Trans: ComponentType = settings.translationComponents.Trans;\n\n // Render the Trans component with provided components and props\n return (\n ,\n br:
,\n p:

,\n ul:

    ,\n li:
  • ,\n ...components,\n }}\n {...props}\n />\n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"overlay\":\"styles_overlay__Cv8_E\",\"overlay--absolute\":\"styles_overlay--absolute__6QRCH\",\"container\":\"styles_container__mduiG\",\"container--absolute\":\"styles_container--absolute__i4ldS\",\"skeleton-animation\":\"styles_skeleton-animation__uQsox\"};"],"names":["fetchCoins","param","axiosInstance","pageParam","queryKey","limit","response","get","params","page","data","useCoins","originId","getCookie","CookiesKey","OriginId","CoinsQueryKey","Primary","getNextPageParam","getPreviousPageParam","useInfiniteQueryCallbacks","useInfiniteQueryReset","useAxiosInstance","infinityQuery","useInfiniteQuery","initialPageParam","queryFn","queryContext","staleTime","formattedData","useMemo","pages","flatMap","cryptoCoins","filter","coin","type","CoinType","Crypto","fiatCoins","Fiat","coins","Drawer","onClose","open","children","isDisabled","absolute","className","ref","useClickOutside","onClickOutside","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","AnimatePresence","jsxs","Fragment","motion","div","styles","concat","initial","animate","exit","variants","overlayVariant","containerVariants","TransWithDefault","components","props","state","useSettingsStore","Trans","settings","translationComponents","strong","br","p","ul","li","module","exports"],"sourceRoot":""}