From d9f3434d30f9aad7f645340f07839fc760c140b6 Mon Sep 17 00:00:00 2001
From: Lautaro Petaccio <1120791+LautaroPetaccio@users.noreply.github.com>
Date: Mon, 8 Apr 2024 14:47:58 -0300
Subject: [PATCH] feat: Add new rarity (#2211)
* feat: Add new exotic rarity
* fix: Casting
* feat: Add new rarity badge component
* fix: Update UI and dapps
---
indexer/schema.graphql | 1 +
webapp/package-lock.json | 81 ++++++-------------
webapp/package.json | 8 +-
.../AssetCard/EmoteTags/EmoteTags.tsx | 8 +-
.../AssetCard/WearableTags/WearableTags.tsx | 5 +-
.../AssetPage/EmoteDetail/EmoteDetail.tsx | 6 +-
.../AssetPage/ItemDetail/ItemDetail.tsx | 4 +-
.../WearableDetail/WearableDetail.tsx | 6 +-
.../RankingItemRow/RankingItemRow.tsx | 18 +----
.../RankingsTable/RankingsTable.container.ts | 2 +
.../RankingsTable/RankingsTable.tsx | 15 ++--
.../RankingsTable/RankingsTable.types.ts | 3 +-
.../RarityBadge/RarityBadge.container.ts | 22 -----
.../RarityBadge/RarityBadge.module.css | 26 ------
.../components/RarityBadge/RarityBadge.tsx | 31 -------
.../RarityBadge/RarityBadge.types.ts | 14 ----
webapp/src/components/RarityBadge/index.ts | 3 -
webapp/src/modules/features/selectors.ts | 7 ++
webapp/src/modules/features/types.ts | 3 +-
.../src/modules/translation/locales/en.json | 10 +--
.../src/modules/translation/locales/es.json | 10 +--
.../src/modules/translation/locales/zh.json | 10 +--
22 files changed, 71 insertions(+), 222 deletions(-)
delete mode 100644 webapp/src/components/RarityBadge/RarityBadge.container.ts
delete mode 100644 webapp/src/components/RarityBadge/RarityBadge.module.css
delete mode 100644 webapp/src/components/RarityBadge/RarityBadge.tsx
delete mode 100644 webapp/src/components/RarityBadge/RarityBadge.types.ts
delete mode 100644 webapp/src/components/RarityBadge/index.ts
diff --git a/indexer/schema.graphql b/indexer/schema.graphql
index 8811a55795..8b331abd24 100644
--- a/indexer/schema.graphql
+++ b/indexer/schema.graphql
@@ -249,6 +249,7 @@ enum WearableRarity @entity {
legendary
mythic
unique
+ exotic
}
enum WearableBodyShape @entity {
diff --git a/webapp/package-lock.json b/webapp/package-lock.json
index f5896b81ba..3fa5a5c313 100644
--- a/webapp/package-lock.json
+++ b/webapp/package-lock.json
@@ -12,7 +12,7 @@
"@0xsquid/squid-types": "^0.1.29",
"@covalenthq/client-sdk": "^0.6.4",
"@dcl/crypto": "^3.0.0",
- "@dcl/schemas": "^11.1.0",
+ "@dcl/schemas": "^11.4.0",
"@dcl/single-sign-on-client": "^0.1.0",
"@dcl/ui-env": "^1.5.0",
"@ethersproject/providers": "^5.6.2",
@@ -25,11 +25,11 @@
"date-fns": "^2.23.0",
"dcl-catalyst-client": "^21.6.0",
"dcl-catalyst-commons": "^9.0.1",
- "decentraland-connect": "^6.2.0",
+ "decentraland-connect": "^6.3.1",
"decentraland-crypto-fetch": "^1.0.3",
- "decentraland-dapps": "^19.3.2",
+ "decentraland-dapps": "^19.5.2",
"decentraland-transactions": "^2.3.2",
- "decentraland-ui": "^5.13.2",
+ "decentraland-ui": "^5.17.1",
"ethers": "^5.6.8",
"graphql": "^14.7.0",
"history": "^4.10.1",
@@ -1731,9 +1731,9 @@
"integrity": "sha512-Cg+MoIOn+BYmQV2q8zSFnNYY+GldlnUazwBnfgrq3i66ZxOaZ65h01btd8OUtSAlfWG4VTNIOHDjtKqmuwJNBg=="
},
"node_modules/@dcl/schemas": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-11.1.0.tgz",
- "integrity": "sha512-qDEqUW2+RBxPOQaqd/8LtFL/2Rtifpve1aAEMmYsq5z0JdAXEX+S6vCyx+pp1kkskNqnVm1+s9iYKy+M8qoQsQ==",
+ "version": "11.4.0",
+ "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-11.4.0.tgz",
+ "integrity": "sha512-pCMENllY9vcl4HS1ta/TpVqjWUov/oa9xab+Ki1iMur48nE5+xXfa7+laCPhWLOKSZEkC59i5S6zQGTSWFPYew==",
"dependencies": {
"ajv": "^8.11.0",
"ajv-errors": "^3.0.0",
@@ -7016,9 +7016,9 @@
}
},
"node_modules/@wert-io/widget-initializer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@wert-io/widget-initializer/-/widget-initializer-5.2.0.tgz",
- "integrity": "sha512-Rs9XLeFtvWtZGg9kOVvMZ+PpRxFconMFox6fGQO9psET1B29bBNO6sifOeNzxQ5pMVVbLiK2ZQD5w194sqrB3A=="
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@wert-io/widget-initializer/-/widget-initializer-6.1.1.tgz",
+ "integrity": "sha512-QSiW/jvnFTaTOSAFzFVp1wBjgkKBCulvQS5a4u8OAo1F2tIq7A8Xzue/I7t+73I7EGauIN06crtevX5Gz3BJJw=="
},
"node_modules/abab": {
"version": "2.0.6",
@@ -9112,11 +9112,11 @@
}
},
"node_modules/decentraland-connect": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/decentraland-connect/-/decentraland-connect-6.2.0.tgz",
- "integrity": "sha512-+YEIPbz8+9DzhjvXlvSqW9eGULept0S06GZA10+vWnLMk1X02qrSYA09d8am8NxsEEoqJ4bZx4Jdsq8lJYPj1g==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/decentraland-connect/-/decentraland-connect-6.3.1.tgz",
+ "integrity": "sha512-RMlUkAOZvLo4Glb9kGPHp1bT4jOH2hO0YrzAt/Lz9ekkdj6m9gwAZKz7oM6cLCRgsGYK/DbQjp+SuLaOLw+H2A==",
"dependencies": {
- "@dcl/schemas": "^10.2.0",
+ "@dcl/schemas": "^11.4.0",
"@dcl/single-sign-on-client": "^0.1.0",
"@magic-ext/oauth": "^15.5.0",
"@walletconnect/ethereum-provider": "^2.9.2",
@@ -9136,16 +9136,6 @@
"resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz",
"integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw=="
},
- "node_modules/decentraland-connect/node_modules/@dcl/schemas": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-10.4.0.tgz",
- "integrity": "sha512-gd69ProYNRxU4YqY7hruLlWdtfHfAuBdn10LIg0kPayvIraBX78emulVFy47r7qDRiqscRn6+1KLyIfMkXEBdA==",
- "dependencies": {
- "ajv": "^8.11.0",
- "ajv-errors": "^3.0.0",
- "ajv-keywords": "^5.1.0"
- }
- },
"node_modules/decentraland-connect/node_modules/@noble/curves": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz",
@@ -9244,28 +9234,28 @@
}
},
"node_modules/decentraland-dapps": {
- "version": "19.3.2",
- "resolved": "https://registry.npmjs.org/decentraland-dapps/-/decentraland-dapps-19.3.2.tgz",
- "integrity": "sha512-0F1e6iuKDO4Jkw7zsLKaKGmkucsr9onnlRmFYBb3tNBD9KlQtyugGr+cVuv2gH2k/n38HRTGl+aoiXj9/7mhwA==",
+ "version": "19.5.2",
+ "resolved": "https://registry.npmjs.org/decentraland-dapps/-/decentraland-dapps-19.5.2.tgz",
+ "integrity": "sha512-CuMRtUgtc/LaZVtOAXFkIuRIeBx6IeBuCRSN/LOQdNT2A2MT9fZELu54Fx8T3RGc4al6HHiKqyYlXUoshuitAQ==",
"dependencies": {
"@0xsequence/multicall": "^0.25.1",
"@0xsequence/relayer": "^0.25.1",
"@dcl/crypto": "^3.3.1",
- "@dcl/schemas": "^10.2.0",
+ "@dcl/schemas": "^11.4.0",
"@dcl/single-sign-on-client": "^0.1.0",
"@dcl/ui-env": "^1.5.0",
"@transak/transak-sdk": "^1.0.31",
"@types/flat": "0.0.28",
"@types/segment-analytics": "^0.0.38",
"@well-known-components/fetch-component": "^2.0.1",
- "@wert-io/widget-initializer": "^5.2.0",
+ "@wert-io/widget-initializer": "^6.1.1",
"axios": "^0.21.1",
"date-fns": "^1.29.0",
"dcl-catalyst-client": "^21.1.0",
- "decentraland-connect": "^6.2.0",
+ "decentraland-connect": "^6.3.1",
"decentraland-crypto-fetch": "^2.0.1",
"decentraland-transactions": "^2.3.2",
- "decentraland-ui": "^5.14.0",
+ "decentraland-ui": "^5.17.1",
"ethers": "^5.6.8",
"events": "^3.3.0",
"flat": "^5.0.2",
@@ -9290,16 +9280,6 @@
"redux-saga": "^1.1.3"
}
},
- "node_modules/decentraland-dapps/node_modules/@dcl/schemas": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-10.4.0.tgz",
- "integrity": "sha512-gd69ProYNRxU4YqY7hruLlWdtfHfAuBdn10LIg0kPayvIraBX78emulVFy47r7qDRiqscRn6+1KLyIfMkXEBdA==",
- "dependencies": {
- "ajv": "^8.11.0",
- "ajv-errors": "^3.0.0",
- "ajv-keywords": "^5.1.0"
- }
- },
"node_modules/decentraland-dapps/node_modules/@formatjs/intl": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz",
@@ -9411,11 +9391,11 @@
}
},
"node_modules/decentraland-ui": {
- "version": "5.14.0",
- "resolved": "https://registry.npmjs.org/decentraland-ui/-/decentraland-ui-5.14.0.tgz",
- "integrity": "sha512-+8UVamZOPteLe4BfharVecb48IrWAH4ff/PPm6dlmv7rcQqWFx7ALm1kcNrwWxE1Skeg2uUxWz8o0UsOLRePhg==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/decentraland-ui/-/decentraland-ui-5.17.1.tgz",
+ "integrity": "sha512-AnRW5wU2z4f2bkHOnHiT1yDurHn8oLOkSLw/Do+hFu0SKpJG7ZyfZCW5QHYquBq65nLwCRStC0CyN9N3CncmiQ==",
"dependencies": {
- "@dcl/schemas": "^10.2.0",
+ "@dcl/schemas": "^11.4.0",
"@dcl/ui-env": "^1.4.0",
"balloon-css": "^0.5.0",
"classnames": "^2.3.2",
@@ -9424,6 +9404,7 @@
"ethereum-blockies": "^0.1.1",
"events": "^3.3.0",
"fp-future": "^1.0.1",
+ "mitt": "^3.0.1",
"parallax-js": "^3.1.0",
"react": "^16.8.0 || ^17.0.0",
"react-dom": "^16.8.0 || ^17.0.0",
@@ -9451,16 +9432,6 @@
}
}
},
- "node_modules/decentraland-ui/node_modules/@dcl/schemas": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-10.4.0.tgz",
- "integrity": "sha512-gd69ProYNRxU4YqY7hruLlWdtfHfAuBdn10LIg0kPayvIraBX78emulVFy47r7qDRiqscRn6+1KLyIfMkXEBdA==",
- "dependencies": {
- "ajv": "^8.11.0",
- "ajv-errors": "^3.0.0",
- "ajv-keywords": "^5.1.0"
- }
- },
"node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
diff --git a/webapp/package.json b/webapp/package.json
index cfdf454bd4..b52b82cdfd 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -7,7 +7,7 @@
"@0xsquid/squid-types": "^0.1.29",
"@covalenthq/client-sdk": "^0.6.4",
"@dcl/crypto": "^3.0.0",
- "@dcl/schemas": "^11.1.0",
+ "@dcl/schemas": "^11.4.0",
"@dcl/single-sign-on-client": "^0.1.0",
"@dcl/ui-env": "^1.5.0",
"@ethersproject/providers": "^5.6.2",
@@ -20,11 +20,11 @@
"date-fns": "^2.23.0",
"dcl-catalyst-client": "^21.6.0",
"dcl-catalyst-commons": "^9.0.1",
- "decentraland-connect": "^6.2.0",
+ "decentraland-connect": "^6.3.1",
"decentraland-crypto-fetch": "^1.0.3",
- "decentraland-dapps": "^19.3.2",
+ "decentraland-dapps": "^19.5.2",
"decentraland-transactions": "^2.3.2",
- "decentraland-ui": "^5.13.2",
+ "decentraland-ui": "^5.17.1",
"ethers": "^5.6.8",
"graphql": "^14.7.0",
"history": "^4.10.1",
diff --git a/webapp/src/components/AssetCard/EmoteTags/EmoteTags.tsx b/webapp/src/components/AssetCard/EmoteTags/EmoteTags.tsx
index 739f05997a..a658977db8 100644
--- a/webapp/src/components/AssetCard/EmoteTags/EmoteTags.tsx
+++ b/webapp/src/components/AssetCard/EmoteTags/EmoteTags.tsx
@@ -1,10 +1,8 @@
import classNames from 'classnames'
-import { NFTCategory } from '@dcl/schemas'
+import { RarityBadge } from 'decentraland-dapps/dist/containers/RarityBadge'
import { T } from 'decentraland-dapps/dist/modules/translation/utils'
import { Popup } from 'decentraland-ui'
import soundSrc from '../../../images/emotes/sound.svg'
-import { AssetType } from '../../../modules/asset/types'
-import RarityBadge from '../../RarityBadge'
import { Props } from './EmoteTags.types'
import styles from './EmoteTags.module.css'
@@ -15,9 +13,7 @@ const EmoteTags = (props: Props) => {
return (
- {rarity ? (
-
- ) : null}
+ {rarity ?
: null}
{loop !== undefined ? (
{
return (
-
+
{!isCatalogItem(asset) &&
}
{!isCatalogItem(asset) && (
diff --git a/webapp/src/components/AssetPage/EmoteDetail/EmoteDetail.tsx b/webapp/src/components/AssetPage/EmoteDetail/EmoteDetail.tsx
index cca4356046..8e5b02d1b8 100644
--- a/webapp/src/components/AssetPage/EmoteDetail/EmoteDetail.tsx
+++ b/webapp/src/components/AssetPage/EmoteDetail/EmoteDetail.tsx
@@ -1,12 +1,12 @@
import React, { useMemo, useState } from 'react'
-import { EmotePlayMode, NFTCategory, OrderSortBy } from '@dcl/schemas'
+import { EmotePlayMode, OrderSortBy } from '@dcl/schemas'
+import { RarityBadge } from 'decentraland-dapps/dist/containers/RarityBadge'
import { t } from 'decentraland-dapps/dist/modules/translation/utils'
import { AssetType } from '../../../modules/asset/types'
import { locations } from '../../../modules/routing/locations'
import { Section } from '../../../modules/vendor/decentraland'
import { AssetImage } from '../../AssetImage'
import CampaignBadge from '../../Campaign/CampaignBadge'
-import RarityBadge from '../../RarityBadge'
import TableContainer from '../../Table/TableContainer'
import { BidsTable } from '../BidsTable'
import { BuyNFTBox } from '../BuyNFTBox'
@@ -90,7 +90,7 @@ const EmoteDetail = ({ nft }: Props) => {
-
+
{
-
+
{category && (
{
-
+
{wearable.isSmart ?
: null}
diff --git a/webapp/src/components/RankingsTable/RankingItemRow/RankingItemRow.tsx b/webapp/src/components/RankingsTable/RankingItemRow/RankingItemRow.tsx
index 86c16b23ab..8a4d82f309 100644
--- a/webapp/src/components/RankingsTable/RankingItemRow/RankingItemRow.tsx
+++ b/webapp/src/components/RankingsTable/RankingItemRow/RankingItemRow.tsx
@@ -1,6 +1,7 @@
import React, { useState } from 'react'
import { Link } from 'react-router-dom'
-import { Item, NFTCategory } from '@dcl/schemas'
+import { Item } from '@dcl/schemas'
+import { RarityBadge } from 'decentraland-dapps/dist/containers/RarityBadge'
import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils'
import { t, T } from 'decentraland-dapps/dist/modules/translation/utils'
import { Loader, Mana, Mobile, NotMobile, Table } from 'decentraland-ui'
@@ -14,7 +15,6 @@ import { AssetImage } from '../../AssetImage'
import { AssetProvider } from '../../AssetProvider'
import { LinkedProfile } from '../../LinkedProfile'
import { ManaToFiat } from '../../ManaToFiat'
-import RarityBadge from '../../RarityBadge'
import { Props } from './RankingItemRow.types'
import './RankingItemRow.css'
@@ -58,13 +58,7 @@ const RankingItemRow = ({ entity }: Props) => {
{item ? (
-
+
) : null}
@@ -151,11 +145,7 @@ const RankingItemRow = ({ entity }: Props) => {
: t(`emote.category.${item.data.emote!.category}`)
: null}
-
- {item ? (
-
- ) : null}
-
+
{item ? : null}
{item ? entity.sales : null}
{item ? (
diff --git a/webapp/src/components/RankingsTable/RankingsTable.container.ts b/webapp/src/components/RankingsTable/RankingsTable.container.ts
index d02ea7dfce..ed5f554f6f 100644
--- a/webapp/src/components/RankingsTable/RankingsTable.container.ts
+++ b/webapp/src/components/RankingsTable/RankingsTable.container.ts
@@ -2,6 +2,7 @@ import { connect } from 'react-redux'
import { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'
import { fetchRankingsRequest, FETCH_RANKINGS_REQUEST } from '../../modules/analytics/actions'
import { getRankingsData, getLoading } from '../../modules/analytics/selectors'
+import { getIsExoticRarityEnabled } from '../../modules/features/selectors'
import { RootState } from '../../modules/reducer'
import RankingsTable from './RankingsTable'
import { MapStateProps, MapDispatch, MapDispatchProps } from './RankingsTable.types'
@@ -10,6 +11,7 @@ const mapState = (state: RootState): MapStateProps => {
const data = getRankingsData(state)
return {
data,
+ isExoticRarityEnabled: getIsExoticRarityEnabled(state),
isLoading: isLoadingType(getLoading(state), FETCH_RANKINGS_REQUEST)
}
}
diff --git a/webapp/src/components/RankingsTable/RankingsTable.tsx b/webapp/src/components/RankingsTable/RankingsTable.tsx
index e1a1e81e16..0b420fcecb 100644
--- a/webapp/src/components/RankingsTable/RankingsTable.tsx
+++ b/webapp/src/components/RankingsTable/RankingsTable.tsx
@@ -30,7 +30,7 @@ const INITIAL_FILTERS = {
const TABS_PREFIX = '#rankings-'
const RankingsTable = (props: Props) => {
- const { isLoading, onFetchRankings, data } = props
+ const { isLoading, isExoticRarityEnabled, onFetchRankings, data } = props
const history = useHistory()
const location = useLocation()
@@ -94,7 +94,6 @@ const RankingsTable = (props: Props) => {
{(currentEntity === RankingEntities.WEARABLES || currentEntity === RankingEntities.EMOTES) && (
<>
{
onChange={registerHandleFilterChange('category')}
/>
({
- value: rarity as string,
- text: rarity === ALL_FILTER ? t('home_page.analytics.rankings.all_rarities') : t(`rarity.${convertToOutputString(rarity)}`)
- }))}
+ options={[ALL_FILTER, ...Rarity.getRarities()]
+ .filter(rarity => isExoticRarityEnabled || (rarity as Rarity) !== Rarity.EXOTIC)
+ .map(rarity => ({
+ value: rarity,
+ text:
+ rarity === ALL_FILTER ? t('home_page.analytics.rankings.all_rarities') : t(`rarity.${convertToOutputString(rarity)}`)
+ }))}
onChange={registerHandleFilterChange('rarity')}
/>
>
diff --git a/webapp/src/components/RankingsTable/RankingsTable.types.ts b/webapp/src/components/RankingsTable/RankingsTable.types.ts
index f0211cd67d..64702b1345 100644
--- a/webapp/src/components/RankingsTable/RankingsTable.types.ts
+++ b/webapp/src/components/RankingsTable/RankingsTable.types.ts
@@ -5,9 +5,10 @@ import { RankingEntity } from '../../modules/analytics/types'
export type Props = {
data: RankingEntity[] | null
isLoading: boolean
+ isExoticRarityEnabled: boolean
onFetchRankings: typeof fetchRankingsRequest
}
-export type MapStateProps = Pick
+export type MapStateProps = Pick
export type MapDispatchProps = Pick
export type MapDispatch = Dispatch
diff --git a/webapp/src/components/RarityBadge/RarityBadge.container.ts b/webapp/src/components/RarityBadge/RarityBadge.container.ts
deleted file mode 100644
index db55c6ab19..0000000000
--- a/webapp/src/components/RarityBadge/RarityBadge.container.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { connect } from 'react-redux'
-import { push } from 'connected-react-router'
-import { Dispatch } from 'redux'
-import { locations } from '../../modules/routing/locations'
-import { getSectionFromCategory } from '../../modules/routing/search'
-import RarityBadge from './RarityBadge'
-import { MapDispatchProps, OwnProps } from './RarityBadge.types'
-
-const mapDispatch = (dispatch: Dispatch, { rarity, category, assetType }: OwnProps): MapDispatchProps => ({
- onClick: () =>
- dispatch(
- push(
- locations.browse({
- assetType: assetType,
- section: getSectionFromCategory(category),
- rarities: [rarity]
- })
- )
- )
-})
-
-export default connect(null, mapDispatch)(RarityBadge)
diff --git a/webapp/src/components/RarityBadge/RarityBadge.module.css b/webapp/src/components/RarityBadge/RarityBadge.module.css
deleted file mode 100644
index d0eecff0a0..0000000000
--- a/webapp/src/components/RarityBadge/RarityBadge.module.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.badge {
- display: inline-flex;
- align-items: center;
- text-transform: uppercase;
- border-radius: 5px;
- cursor: pointer;
-}
-
-.medium {
- padding: 4px 12px;
-}
-.medium .text {
- font-size: 15px;
-}
-
-.small {
- padding: 3px 6px;
- height: 24px;
-}
-.small .text {
- font-size: 13px;
-}
-
-.text {
- color: var(--text);
-}
diff --git a/webapp/src/components/RarityBadge/RarityBadge.tsx b/webapp/src/components/RarityBadge/RarityBadge.tsx
deleted file mode 100644
index 65239f702f..0000000000
--- a/webapp/src/components/RarityBadge/RarityBadge.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react'
-import classnames from 'classnames'
-import { Rarity } from '@dcl/schemas'
-import { t } from 'decentraland-dapps/dist/modules/translation/utils'
-import { Popup } from 'decentraland-ui'
-import { Props } from './RarityBadge.types'
-import styles from './RarityBadge.module.css'
-
-const RarityBadge = ({ rarity, size, withTooltip, onClick }: Props) => {
- const trigger = (
-
- {t(`rarity.${rarity}`)}
-
- )
-
- return withTooltip ? : trigger
-}
-
-RarityBadge.defaultProps = {
- size: 'medium',
- withTooltip: true
-}
-
-export default React.memo(RarityBadge)
diff --git a/webapp/src/components/RarityBadge/RarityBadge.types.ts b/webapp/src/components/RarityBadge/RarityBadge.types.ts
deleted file mode 100644
index ddfe3fc032..0000000000
--- a/webapp/src/components/RarityBadge/RarityBadge.types.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { NFTCategory, Rarity } from '@dcl/schemas'
-import { AssetType } from '../../modules/asset/types'
-
-export type Props = {
- rarity: Rarity
- assetType: AssetType
- category: NFTCategory
- size: 'medium' | 'small'
- withTooltip: boolean
- onClick: () => void
-}
-
-export type MapDispatchProps = Pick
-export type OwnProps = Pick
diff --git a/webapp/src/components/RarityBadge/index.ts b/webapp/src/components/RarityBadge/index.ts
deleted file mode 100644
index cd9ca9bbf9..0000000000
--- a/webapp/src/components/RarityBadge/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import RarityBadge from './RarityBadge.container'
-
-export default RarityBadge
diff --git a/webapp/src/modules/features/selectors.ts b/webapp/src/modules/features/selectors.ts
index 1938a122c9..0b3e5a2e19 100644
--- a/webapp/src/modules/features/selectors.ts
+++ b/webapp/src/modules/features/selectors.ts
@@ -76,3 +76,10 @@ export const getIsLandCrossChainEnabled = (state: RootState) => {
}
return false
}
+
+export const getIsExoticRarityEnabled = (state: RootState) => {
+ if (hasLoadedInitialFlags(state)) {
+ return getIsFeatureEnabled(state, ApplicationName.DAPPS, FeatureName.EXOTIC_RARITY)
+ }
+ return false
+}
diff --git a/webapp/src/modules/features/types.ts b/webapp/src/modules/features/types.ts
index 295d94bbe5..6bdf0c1106 100644
--- a/webapp/src/modules/features/types.ts
+++ b/webapp/src/modules/features/types.ts
@@ -7,5 +7,6 @@ export enum FeatureName {
SMART_WEARABLES_FTU = 'smart-wearables-ftu',
MARKETPLACE_SERVER = 'marketplace-server',
CHAIN_SELECTOR = 'chain-selector',
- CROSS_CHAIN_LANDS = 'cross-chain-lands'
+ CROSS_CHAIN_LANDS = 'cross-chain-lands',
+ EXOTIC_RARITY = 'exotic-rarity'
}
diff --git a/webapp/src/modules/translation/locales/en.json b/webapp/src/modules/translation/locales/en.json
index 834ddc1a0c..145a6b5712 100644
--- a/webapp/src/modules/translation/locales/en.json
+++ b/webapp/src/modules/translation/locales/en.json
@@ -692,21 +692,13 @@
"rarity": {
"unique": "Unique",
"mythic": "Mythic",
+ "exotic": "Exotic",
"legendary": "Legendary",
"epic": "Epic",
"rare": "Rare",
"uncommon": "Uncommon",
"common": "Common"
},
- "rarity_description": {
- "unique": "Grail-like: One-of-a-kind",
- "mythic": "For the lucky few: max 10",
- "legendary": "Limited supply: max 100",
- "epic": "Max supply: 1000",
- "rare": "Max supply: 5000",
- "uncommon": "Max supply: 10,000",
- "common": "Max supply: 100,000"
- },
"wearable": {
"category": {
"body_shape": "Body Shape",
diff --git a/webapp/src/modules/translation/locales/es.json b/webapp/src/modules/translation/locales/es.json
index d8c0407441..a7dc02db88 100644
--- a/webapp/src/modules/translation/locales/es.json
+++ b/webapp/src/modules/translation/locales/es.json
@@ -680,21 +680,13 @@
"rarity": {
"unique": "Único",
"mythic": "Mítico",
+ "exotic": "Exótico",
"legendary": "Legendario",
"epic": "Épico",
"rare": "Raro",
"uncommon": "Poco común",
"common": "Común"
},
- "rarity_tooltip": {
- "unique": "Único en su tipo: uno solo en existencia",
- "mythic": "Para algunos pocos: máximo 10",
- "legendary": "Edición limitada: máximo 100",
- "epic": "Suministro máximo: 1000",
- "rare": "Suministro máximo: 5000",
- "uncommon": "Suministro máximo: 10.000",
- "common": "Suministro máximo: 100.000"
- },
"wearable": {
"category": {
"body_shape": "Cuerpo",
diff --git a/webapp/src/modules/translation/locales/zh.json b/webapp/src/modules/translation/locales/zh.json
index 68c58fbaf1..493fc00031 100644
--- a/webapp/src/modules/translation/locales/zh.json
+++ b/webapp/src/modules/translation/locales/zh.json
@@ -683,21 +683,13 @@
"rarity": {
"unique": "独特",
"mythic": "神话",
+ "exotic": "异国情调",
"legendary": "传奇",
"epic": "史诗",
"rare": "稀有",
"uncommon": "罕见",
"common": "常见"
},
- "rarity_tooltip": {
- "unique": "像圣杯一样:独一无二",
- "mythic": "给幸运的人:最多10个",
- "legendary": "限量供应:最多100个",
- "epic": "最大供应量:1000个",
- "rare": "最大供应量:5000个",
- "uncommon": "最大供应量:10,000个",
- "common": "最大供应量:100,000个"
- },
"wearable": {
"category": {
"body_shape": "身材",