diff --git a/src/components/Banners/HomePageBanner/HomePageBanner.tsx b/src/components/Banners/HomePageBanner/HomePageBanner.tsx index 6ee5346e1..f665de9f5 100644 --- a/src/components/Banners/HomePageBanner/HomePageBanner.tsx +++ b/src/components/Banners/HomePageBanner/HomePageBanner.tsx @@ -1,13 +1,28 @@ import * as React from 'react' - import { Responsive } from 'decentraland-ui' import { T, t } from 'decentraland-dapps/dist/modules/translation/utils' +import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils' +import { Campaign } from 'modules/analytics/campaigns' import Banner from 'components/Banner' import { Props } from './HomePageBanner.types' import './HomePageBanner.css' export default class HomePageBanner extends React.PureComponent { + handleHomePageClick = () => { + const analytics = getAnalytics() + analytics.track('HomePage CTA', { + campaign: Campaign.DAPPER + }) + } + + handleMobilePageClick = () => { + const analytics = getAnalytics() + analytics.track('MobilePage CTA', { + campaign: Campaign.DAPPER + }) + } + render() { const { className } = this.props @@ -33,7 +48,7 @@ export default class HomePageBanner extends React.PureComponent { values={{ br:
, cta: ( - + {t('banners.dapper_homepage_cta')} ) @@ -50,7 +65,12 @@ export default class HomePageBanner extends React.PureComponent { br:
, cta: ( - + {t('banners.mobile_dapper_hompage_cta')} ) diff --git a/src/components/HomePage/PromoBanner/PromoBanner.tsx b/src/components/HomePage/PromoBanner/PromoBanner.tsx index eb6f7a7ae..30228cb4a 100644 --- a/src/components/HomePage/PromoBanner/PromoBanner.tsx +++ b/src/components/HomePage/PromoBanner/PromoBanner.tsx @@ -1,12 +1,22 @@ import React from 'react' import { Button } from 'decentraland-ui' import { t } from 'decentraland-dapps/dist/modules/translation/utils' +import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils' +import { Campaign } from 'modules/analytics/campaigns' import { Props } from './PromoBanner.types' import './PromoBanner.css' export default class PromoBanner extends React.PureComponent { + handleCTAClick = () => { + const analytics = getAnalytics() + analytics.track('HomePage Promo CTA', { + campaign: Campaign.DAPPER + }) + window.open('https://dap.pr/dclinstallp') + } + render() { return (
@@ -14,7 +24,7 @@ export default class PromoBanner extends React.PureComponent {
{t('banners.promo_title')}
{t('banners.promo_subtitle')}
-
diff --git a/src/components/SideBar/AssetPackList/AssetPackList.css b/src/components/SideBar/AssetPackList/AssetPackList.css index ae95d5529..c4eb411c6 100644 --- a/src/components/SideBar/AssetPackList/AssetPackList.css +++ b/src/components/SideBar/AssetPackList/AssetPackList.css @@ -14,6 +14,7 @@ padding: 16px 20px; cursor: pointer; line-height: 24px; + user-select: none; } .AssetPackList .promo .highlight { diff --git a/src/components/SideBar/AssetPackList/AssetPackList.tsx b/src/components/SideBar/AssetPackList/AssetPackList.tsx index cb67535ff..81da7ba67 100644 --- a/src/components/SideBar/AssetPackList/AssetPackList.tsx +++ b/src/components/SideBar/AssetPackList/AssetPackList.tsx @@ -1,5 +1,7 @@ import React from 'react' import { T, t } from 'decentraland-dapps/dist/modules/translation/utils' +import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils' +import { Campaign } from 'modules/analytics/campaigns' import SidebarCard from '../SidebarCard' import { Props } from './AssetPackList.types' @@ -7,6 +9,10 @@ import './AssetPackList.css' export default class AssetPackList extends React.PureComponent { handlePromoClick = () => { + const analytics = getAnalytics() + analytics.track('Item catalog Dapper CTA', { + campaign: Campaign.DAPPER + }) window.open('https://dap.pr/dclinstallp') } diff --git a/src/components/SideBar/ItemDrawer/ItemDrawer.css b/src/components/SideBar/ItemDrawer/ItemDrawer.css index a63fcec39..5c26514d1 100644 --- a/src/components/SideBar/ItemDrawer/ItemDrawer.css +++ b/src/components/SideBar/ItemDrawer/ItemDrawer.css @@ -7,3 +7,11 @@ overflow-y: auto; position: relative; } + +.ItemDrawer .disclaimer { + color: rgba(var(--bluish-steel-raw), 0.64); + text-align: center; + width: calc(var(--sidebar-width) - 32px); + display: block; + margin-top: 10px; +} diff --git a/src/components/SideBar/ItemDrawer/ItemDrawer.tsx b/src/components/SideBar/ItemDrawer/ItemDrawer.tsx index a3711959a..489316c6a 100644 --- a/src/components/SideBar/ItemDrawer/ItemDrawer.tsx +++ b/src/components/SideBar/ItemDrawer/ItemDrawer.tsx @@ -1,6 +1,7 @@ import * as React from 'react' import { Loader } from 'decentraland-ui' +import { T } from 'decentraland-dapps/dist/modules/translation/utils' import { COLLECTIBLE_ASSET_PACK_ID } from 'modules/ui/sidebar/utils' import SidebarHeader from '../SidebarHeader' import SidebarSearch from '../SidebarSearch' @@ -48,12 +49,19 @@ export default class ItemDrawer extends React.PureComponent { } render() { + const { selectedAssetPack, isLoadingAssets, isConnected } = this.props + const isViewingCollectibles = selectedAssetPack && selectedAssetPack.id === COLLECTIBLE_ASSET_PACK_ID && isConnected && !isLoadingAssets return (
{this.renderList()} + {isViewingCollectibles && ( + + }} /> + + )}
) diff --git a/src/modules/analytics/campaigns.ts b/src/modules/analytics/campaigns.ts new file mode 100644 index 000000000..7ad139fca --- /dev/null +++ b/src/modules/analytics/campaigns.ts @@ -0,0 +1,3 @@ +export const Campaign = { + DAPPER: 'dapper' +} diff --git a/src/modules/analytics/sagas.ts b/src/modules/analytics/sagas.ts index bb0ae4c0e..335b5fad7 100644 --- a/src/modules/analytics/sagas.ts +++ b/src/modules/analytics/sagas.ts @@ -1,5 +1,6 @@ import { takeLatest, select } from 'redux-saga/effects' import { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils' +import { ConnectWalletSuccessAction, CONNECT_WALLET_SUCCESS } from 'decentraland-dapps/dist/modules/wallet/actions' import { OPEN_EDITOR, OpenEditorAction, TOGGLE_SNAP_TO_GRID, ToggleSnapToGridAction } from 'modules/editor/actions' import { getCurrentProject, getProject } from 'modules/project/selectors' @@ -28,6 +29,7 @@ export function* segmentSaga() { yield takeLatest(SUBMIT_PROJECT_SUCCESS, handleSubmitProject) yield takeLatest(TOGGLE_SNAP_TO_GRID, handleToggleSnapToGrid) yield takeLatest(UPDATE_TRANSFORM, handleUpdateTransfrom) + yield takeLatest(CONNECT_WALLET_SUCCESS, handleConnectWallet) } const track = (event: string, params: any) => getAnalytics().track(event, params) @@ -91,3 +93,19 @@ function* handleUpdateTransfrom(_: UpdateTransfromAction) { track('Update item', { projectId: project.id }) } + +function handleConnectWallet(action: ConnectWalletSuccessAction) { + const ethereum = (window as any)['ethereum'] + + let provider = null + + if (ethereum) { + if (ethereum.isMetaMask) { + provider = 'metamask' + } else if (ethereum.isDapper) { + provider = 'dapper' + } + } + + track('Connect wallet', { address: action.payload.wallet.address, provider }) +} diff --git a/src/modules/common/store.ts b/src/modules/common/store.ts index 8d0510360..a839bd820 100644 --- a/src/modules/common/store.ts +++ b/src/modules/common/store.ts @@ -2,7 +2,7 @@ import { createStore, compose, applyMiddleware } from 'redux' import { routerMiddleware } from 'connected-react-router' import createSagasMiddleware from 'redux-saga' import { createLogger } from 'redux-logger' -import createHistory from 'history/createBrowserHistory' +import { createBrowserHistory } from 'history' import { env } from 'decentraland-commons' import { createStorageMiddleware } from 'decentraland-dapps/dist/modules/storage/middleware' @@ -22,7 +22,7 @@ import { rootSaga } from './sagas' // @ts-ignore: Dev tools const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose -const history = createHistory() +const history = createBrowserHistory() const rootReducer = createRootReducer(history) const historyMiddleware = routerMiddleware(history) diff --git a/src/modules/translation/languages/en.json b/src/modules/translation/languages/en.json index 16188fd08..ccc2925e4 100644 --- a/src/modules/translation/languages/en.json +++ b/src/modules/translation/languages/en.json @@ -17,11 +17,11 @@ "dapper_assetpack_banner": "Get Dapper wallet and a free {cat} for your scene!", "dapper_homepage": "Place a picture of your CryptoKitty in your scene!{br}Don't have a CryptoKitty? Make a Dapper wallet and get a free {cta}.", "dapper_homepage_cta": "Purrstige Cat", + "mobile_dapper_homepage": "Learn about our latest feature:{br}{cta}", + "mobile_dapper_hompage_cta": "Picture Frames + Dapper", "promo_cta": "Install Dapper", "promo_subtitle": "Complete the look by displaying your CryptoKitty in your scene. Don't have a CryptoKitty? Make a Dapper wallet and get a free, unique Purrstige Cat.", - "promo_title": "You’re looking Dapper today!", - "mobile_dapper_homepage": "Learn about our latest feature:{br}{cta}", - "mobile_dapper_hompage_cta": "Picture Frames + Dapper" + "promo_title": "You’re looking Dapper today!" }, "contest": { "banner": { @@ -112,6 +112,7 @@ "upload_manually": "Upload Manually" }, "itemdrawer": { + "collectible_disclaimer": "Don’t see all of your crypto-collectibles?{br}We are adding support for more soon!", "empty_ground": "No Ground", "no_results": "No results", "results": "Results", diff --git a/src/modules/translation/languages/es.json b/src/modules/translation/languages/es.json index 90b980629..d0316f93b 100644 --- a/src/modules/translation/languages/es.json +++ b/src/modules/translation/languages/es.json @@ -114,6 +114,7 @@ "upload_manually": "Súbelas manualmente" }, "itemdrawer": { + "collectible_disclaimer": "¿No ves todos tus coleccionables?{br}¡Agregaremos más próximamente!", "empty_ground": "Sin piso", "no_results": "Sin resultados", "search": "Buscar objetos", diff --git a/src/modules/translation/languages/ko.json b/src/modules/translation/languages/ko.json index b005d2f55..a277ecc3c 100644 --- a/src/modules/translation/languages/ko.json +++ b/src/modules/translation/languages/ko.json @@ -115,6 +115,7 @@ "upload_manually": "직접 업로드" }, "itemdrawer": { + "collectible_disclaimer": "보유하고 계신 모든 크립토-콜렉티블이 보이지 않나요?{br}곧 지원 내역을 추가할 예정입니다!", "empty_ground": "땅이 없습니다", "no_results": "아이템을 찾을 수 없습니다", "search": "아이템 검색", diff --git a/src/modules/translation/languages/zh.json b/src/modules/translation/languages/zh.json index 99adf2511..e838655a1 100644 --- a/src/modules/translation/languages/zh.json +++ b/src/modules/translation/languages/zh.json @@ -115,6 +115,7 @@ "upload_manually": "手动上传" }, "itemdrawer": { + "collectible_disclaimer": "没看到你所有的加密收藏品?{br}我们很快就会加入支持!", "empty_ground": "末设置地面", "no_results": "没找到", "search": "搜索",