{"version":3,"file":"CollectionsCard-BzV2osb-.js","sources":["../../src/schemas/collections.schema.ts","../../src/components/Items/CollectionsCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client'\n\nimport { itemFilters } from './explore.schema'\nimport { CollectionWithTotal, TokenBase, TotalOfItems } from './types'\n\n// Collection by Id\nexport type GetCollectionById = {\n collection: CollectionWithTotal\n}\n\nexport const QUERY_GET_COLLECTION_BY_ID = gql`\n query GetCollectionById($id: String!) {\n collection: collection_by_pk(id: $id) {\n id\n flagged\n name\n symbol\n decimals\n collectionType: collection_type\n createdAt: created_at\n createdAtBlock: created_at_block\n creator: creator_id\n total: tokens_aggregate(\n where: {\n _and: [\n ${itemFilters}\n ]\n }\n ) {\n agg: aggregate {\n count\n }\n }\n }\n }\n`\n\n// Collection Items\n\nexport type GetCollectionItems = {\n token: TokenBase[]\n} & TotalOfItems\n\nexport const QUERY_GET_COLLECTION_ITEMS = gql`\n query GetCollectionItems(\n $search: token_bool_exp!, \n $queryId: String!, \n $limit: Int, \n $offset: Int,\n $filter: token_bool_exp!,\n $order: token_order_by!\n ) {\n token(\n where: {\n _and: [\n ${itemFilters}\n { collection: { id: { _eq: $queryId } } }\n $search\n $filter\n ]\n }\n order_by: [\n $order,\n { native_id: asc }]\n limit: $limit\n offset: $offset\n ) {\n id\n nativeId: native_id\n creator: creator_id\n uri\n amount\n metadata\n createdAt: created_at\n createdAtBlock: created_at_block\n }\n total: token_aggregate(\n where: {\n _and: [\n ${itemFilters}\n { collection: { id: { _eq: $queryId } } }\n $search\n ]\n }\n ) {\n agg: aggregate {\n count\n }\n }\n }\n`\n\nexport interface GetSuggestedCollectionItems {\n token: {\n id: string\n nativeId: string\n metadata: any\n }[]\n}\n\nexport const QUERY_GET_SUGGESTED_COLLECTION_ITEMS = gql`\n query GetSuggestedCollectionItems($search: token_bool_exp!, $queryId: String!) {\n token: token(\n where: {\n _and: [\n ${itemFilters}\n { collection: { id: { _eq: $queryId } } }\n $search\n ]\n }\n order_by: { transfers_aggregate: { count: desc } }\n ) {\n id\n nativeId: native_id\n metadata\n }\n }\n`\n\n// Collection Thumbnail\n\nexport type GetCollectionThumbnail = {\n token: TokenBase[]\n}\n\nexport const QUERY_GET_COLLECTION_THUMBNAIL = gql`\n query GetCollectionThumbnailQuery($id: String!) {\n token(\n where: {\n _and: [\n { collection: { id: { _eq: $id } } }\n { flagged: { _eq: false } }\n { metadata: { _is_null: false } }\n ]\n }\n order_by: { native_id: asc }\n limit: 1\n ) {\n id\n nativeId: native_id\n creator: creator_id\n uri\n amount\n metadata\n createdAt: created_at\n createdAtBlock: created_at_block\n }\n }\n`\n\n// Get multiple Collections by their IDs (Featured Collections)\n\nexport type GetCollectionsByIds = {\n collection: CollectionWithTotal[]\n}\n\nexport const QUERY_GET_COLLECTIONS_BY_IDS = gql`\n query GetCollectionsByIds($ids: [String!]!) {\n collection(where: { id: { _in: $ids } }) {\n id\n name\n symbol\n decimals\n collectionType: collection_type\n createdAt: created_at\n createdAtBlock: created_at_block\n creator: creator_id\n total: tokens_aggregate {\n agg: aggregate {\n count\n }\n }\n }\n }\n`\n","import { useQuery } from '@apollo/client'\nimport { Stack, Text, Title, useMantineTheme } from '@mantine/core'\nimport { useMediaQuery } from '@mantine/hooks'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport placeholderImageOnLoad from '@/assets/webp_converted/imageOnload.webp'\nimport UserDetails from '@/components/Details/UserDetails/UserDetails'\nimport classes from '@/components/Items/ItemsCard.module.css'\nimport { ImageCrop } from '@/components/MediaWrappers/ImageCrop'\nimport { CONTRACT_STUDIO_TEMPLATE_ADDRESS } from '@/constants/blockchain'\nimport useSpaceRegistry from '@/hooks/useSpaceRegistry'\nimport {\n GetCollectionThumbnail,\n QUERY_GET_COLLECTION_THUMBNAIL,\n} from '@/schemas/collections.schema'\nimport { CollectionWithTotal } from '@/schemas/types'\nimport { formatValueToSuffix, shortenHash } from '@/utils/utils'\n\nexport interface CollectionsCardProps {\n collection: CollectionWithTotal\n parentRef?: React.RefObject | React.RefObject\n showCreator?: boolean\n showType?: boolean\n dynamic?: boolean\n}\n\nconst CollectionsCard: React.FC = ({\n collection,\n parentRef,\n showCreator = true,\n showType = true,\n dynamic = true,\n}) => {\n const { t } = useTranslation()\n const theme = useMantineTheme()\n const navigate = useNavigate()\n const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`)\n const isNotFullScreenDesktop = useMediaQuery(`(max-width: ${theme.breakpoints.lg})`)\n\n const defaultWidth = 294\n // if we want width to be defined by parent, we set it to 100%, otherwise we use defaultWidth\n const itemCardWidth = parentRef ? '100%' : defaultWidth\n\n // Total items in collection\n const collectionTotalItems = useMemo(() => collection.total.agg.count, [collection])\n const generateDynamicStack = useCallback(() => {\n if (!dynamic) return ''\n const maxShadows = Math.min(collectionTotalItems, isNotFullScreenDesktop ? 6 : 10)\n const maxOffset = isNotFullScreenDesktop ? 15 : 30\n const stepSize = maxOffset / maxShadows\n const shadows = []\n\n for (let i = 1; i <= maxShadows; i++) {\n const offset = i * stepSize\n shadows.push(\n `${offset}px -${offset}px 0 -2px var(--mantine-color-background2-0)`,\n `${offset}px -${offset}px var(--mantine-color-profileOutline-0)`\n )\n }\n\n return shadows.join(', ')\n }, [collectionTotalItems, dynamic, isNotFullScreenDesktop])\n\n const variables = useMemo(\n () => ({\n id: collection.id.toLowerCase(),\n }),\n [collection]\n )\n const { error, data } = useQuery(QUERY_GET_COLLECTION_THUMBNAIL, {\n variables,\n })\n\n const firstItemFromCollection = useMemo(\n () => (data && data.token.length > 0 ? data.token[0] : undefined),\n [data]\n )\n\n // Collection name\n const collectionName = useMemo(() => {\n // Studio artwork hardcoded\n if (collection.id.toLowerCase() === CONTRACT_STUDIO_TEMPLATE_ADDRESS.toLowerCase()) {\n return 'Artwork Template'\n }\n // Return fetched collection name if available\n if (collection.name) {\n return collection.name\n }\n // Fallback to collection id (address)\n return shortenHash(collection.id)\n }, [collection])\n\n const { spacesMetadata } = useSpaceRegistry()\n\n const collectionThumbnail = useMemo(\n () =>\n collection.id.toLowerCase() === CONTRACT_STUDIO_TEMPLATE_ADDRESS.toLowerCase()\n ? spacesMetadata[1]?.metadataInfo?.icon\n : firstItemFromCollection?.metadata?.image ||\n firstItemFromCollection?.metadata?.image_data ||\n '',\n [collection, firstItemFromCollection]\n )\n\n const collectionCropInfo = useMemo(\n () =>\n collection.id.toLowerCase() === CONTRACT_STUDIO_TEMPLATE_ADDRESS.toLowerCase()\n ? undefined\n : firstItemFromCollection?.metadata?.cropInfo,\n [collection, firstItemFromCollection]\n )\n\n const handleNavigation = useCallback(() => {\n if (collection && !error) {\n navigate(`/collection/${collection.id}`)\n }\n }, [collection, error])\n\n const [isHovered, setIsHovered] = useState(false)\n\n return (\n setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {!error ? (\n <>\n \n {firstItemFromCollection && collectionThumbnail ? (\n \n ) : (\n \n )}\n {((isHovered && dynamic) || isMobile) && (\n \n \n \n {formatValueToSuffix(collectionTotalItems, 4, 0)}{' '}\n {collectionTotalItems === 1 ? 'Item' : 'Items'}\n \n \n \n )}\n \n {firstItemFromCollection && (\n \n {showCreator && (\n <>\n {collection.creator ? (\n \n ) : (\n \n {t('components.items.unknownCreator', 'Unknown Creator')}\n \n )}\n \n )}\n \n \n {collectionName}\n \n {showType && collection.collectionType && (\n \n {collection.collectionType}\n \n )}\n \n \n )}\n \n ) : (\n // \n <>\n )}\n \n )\n}\n\nexport default CollectionsCard\n"],"names":["QUERY_GET_COLLECTION_BY_ID","gql","itemFilters","QUERY_GET_COLLECTION_ITEMS","QUERY_GET_SUGGESTED_COLLECTION_ITEMS","QUERY_GET_COLLECTION_THUMBNAIL","QUERY_GET_COLLECTIONS_BY_IDS","CollectionsCard","collection","parentRef","showCreator","showType","dynamic","t","useTranslation","theme","useMantineTheme","navigate","useNavigate","isMobile","useMediaQuery","isNotFullScreenDesktop","itemCardWidth","collectionTotalItems","useMemo","generateDynamicStack","useCallback","maxShadows","stepSize","shadows","i","offset","variables","error","data","useQuery","firstItemFromCollection","collectionName","CONTRACT_STUDIO_TEMPLATE_ADDRESS","shortenHash","spacesMetadata","useSpaceRegistry","collectionThumbnail","_b","_a","_c","_d","collectionCropInfo","handleNavigation","isHovered","setIsHovered","useState","jsx","Stack","classes","Fragment","jsxs","ImageCrop","placeholderImageOnLoad","Title","formatValueToSuffix","UserDetails","Text"],"mappings":"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"}