From c158dd6585f23c443e9c29eabd3741b92b58da4b Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Fri, 26 Nov 2021 11:45:23 +0500 Subject: [PATCH 01/13] fix error when rendering items in premium dialog --- apps/mobile/src/components/Announcements/functions.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/mobile/src/components/Announcements/functions.js b/apps/mobile/src/components/Announcements/functions.js index 7ad010b12..45bd4fdbd 100644 --- a/apps/mobile/src/components/Announcements/functions.js +++ b/apps/mobile/src/components/Announcements/functions.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Fragment } from 'react'; import {View} from 'react-native'; import {allowedPlatforms} from '../../provider/stores'; import {ProFeatures} from '../ResultDialog/pro-features'; @@ -47,6 +47,7 @@ const renderItems = { title: Title, description: Description, body: Body, + text:Body, image: Photo, list: List, subheading: SubHeading, @@ -55,7 +56,7 @@ const renderItems = { }; export const renderItem = ({item, index, color,inline}) => { - const Item = renderItems[item.type]; + const Item = renderItems[item.type] || Fragment return ; }; From faa8f3068b3c2d194fcabc944fe88122cd2e616f Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Fri, 26 Nov 2021 12:32:04 +0500 Subject: [PATCH 02/13] fix platform specific items are not filtered --- apps/mobile/src/components/Announcements/announcement.js | 2 +- apps/mobile/src/components/Announcements/index.js | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/mobile/src/components/Announcements/announcement.js b/apps/mobile/src/components/Announcements/announcement.js index 378597431..b86fb0950 100644 --- a/apps/mobile/src/components/Announcements/announcement.js +++ b/apps/mobile/src/components/Announcements/announcement.js @@ -49,7 +49,7 @@ export const Announcement = ({color}) => { marginTop: 15 }} data={announcement?.body.filter(item => - allowedOnPlatform(item.platform) + allowedOnPlatform(item.platforms) )} renderItem={({item, index}) => renderItem({item: item, index: index, color: colors[color],inline:true}) diff --git a/apps/mobile/src/components/Announcements/index.js b/apps/mobile/src/components/Announcements/index.js index 4ccf4c705..fcea04618 100644 --- a/apps/mobile/src/components/Announcements/index.js +++ b/apps/mobile/src/components/Announcements/index.js @@ -8,7 +8,7 @@ import { eOpenAnnouncementDialog } from '../../utils/Events'; import BaseDialog from '../Dialog/base-dialog'; -import {renderItem} from './functions'; +import {allowedOnPlatform, renderItem} from './functions'; export const AnnouncementDialog = () => { const [state] = useTracked(); @@ -28,13 +28,12 @@ export const AnnouncementDialog = () => { const open = data => { setInfo(data); - console.log(info); setVisible(true); }; const close = () => { if (visible) { - remove(info.id); + remove(info.id); setInfo(null); setVisible(false); } @@ -57,7 +56,9 @@ export const AnnouncementDialog = () => { style={{ width: '100%' }} - data={info?.body} + data={info?.body.filter(item => + allowedOnPlatform(item.platforms) + )} renderItem={renderItem} /> From 5586ec51297ed5766294788871ff1294b6574932 Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Fri, 26 Nov 2021 12:50:16 +0500 Subject: [PATCH 03/13] ensure that products are loaded always --- .../src/components/Premium/pricingplans.js | 19 ++++++++++++++++--- apps/mobile/src/services/PremiumService.js | 5 ++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/mobile/src/components/Premium/pricingplans.js b/apps/mobile/src/components/Premium/pricingplans.js index 38c8d7711..ce4130c24 100644 --- a/apps/mobile/src/components/Premium/pricingplans.js +++ b/apps/mobile/src/components/Premium/pricingplans.js @@ -51,10 +51,12 @@ export const PricingPlans = ({ const [products, setProducts] = useState([]); const [offers, setOffers] = useState(null); const [buying, setBuying] = useState(false); + const [loading, setLoading] = useState(false); const getSkus = async () => { try { - let products = PremiumService.getProducts(); + setLoading(true); + let products = await PremiumService.getProducts(); if (products.length > 0) { let offers = { monthly: products.find( @@ -70,13 +72,14 @@ export const PricingPlans = ({ } setProducts(products); } + setLoading(false); } catch (e) { + setLoading(false); console.log('error getting sku', e); } }; const getPromo = async productId => { - await sleep(500); let products = PremiumService.getProducts(); let product = products.find(p => p.productId === productId); if (!product) return; @@ -140,7 +143,17 @@ export const PricingPlans = ({ } }; - return ( + return loading ? ( + + + + ) : ( Date: Sat, 27 Nov 2021 11:20:04 +0500 Subject: [PATCH 04/13] fix ux for announcements for logged out users --- .../src/components/Announcements/cta.js | 43 +++-- .../src/components/Announcements/index.js | 14 +- apps/mobile/src/components/AppLoader/index.js | 19 ++- .../src/components/Dialog/BaseDialog.js | 3 +- apps/mobile/src/components/Dialog/index.js | 19 ++- .../src/components/Premium/component.js | 36 +++-- .../src/components/Premium/pricingplans.js | 149 +++++++++++------- .../src/components/SimpleList/header.js | 30 ++-- apps/mobile/src/provider/stores.ts | 21 +-- apps/mobile/src/services/PremiumService.js | 23 +-- 10 files changed, 205 insertions(+), 152 deletions(-) diff --git a/apps/mobile/src/components/Announcements/cta.js b/apps/mobile/src/components/Announcements/cta.js index bd2a10900..d7fa4e8d2 100644 --- a/apps/mobile/src/components/Announcements/cta.js +++ b/apps/mobile/src/components/Announcements/cta.js @@ -1,22 +1,21 @@ import React from 'react'; -import { View } from 'react-native'; -import { useTracked } from '../../provider'; -import { eSendEvent, presentSheet } from '../../services/EventManager'; -import { eCloseAnnouncementDialog, eOpenPremiumDialog } from '../../utils/Events'; -import { openLinkInBrowser } from '../../utils/functions'; -import { SIZE } from '../../utils/SizeUtils'; -import { sleep } from '../../utils/TimeUtils'; +import {View} from 'react-native'; +import {useTracked} from '../../provider'; +import {eSendEvent, presentSheet} from '../../services/EventManager'; +import {eCloseAnnouncementDialog} from '../../utils/Events'; +import {openLinkInBrowser} from '../../utils/functions'; +import {SIZE} from '../../utils/SizeUtils'; +import {sleep} from '../../utils/TimeUtils'; import SettingsBackupAndRestore from '../../views/Settings/backup-restore'; -import { Button } from '../Button'; -import { allowedOnPlatform, getStyle } from './functions'; +import {Button} from '../Button'; +import GeneralSheet from '../GeneralSheet'; +import {PricingPlans} from '../Premium/pricing-plans'; +import {allowedOnPlatform, getStyle} from './functions'; -export const Cta = ({actions, style = {}, color,inline}) => { +export const Cta = ({actions, style = {}, color, inline}) => { const [state] = useTracked(); const colors = state.colors; - let buttons = - actions.filter(item => - allowedOnPlatform(item.platforms) - ) || []; + let buttons = actions.filter(item => allowedOnPlatform(item.platforms)) || []; const onPress = async item => { if (!inline) { @@ -28,9 +27,18 @@ export const Cta = ({actions, style = {}, color,inline}) => { await openLinkInBrowser(item.data, colors); } catch (e) {} } else if (item.type === 'promo') { - eSendEvent(eOpenPremiumDialog, { - promoCode: item.data, - text: item.title + presentSheet({ + component: ( + + ), + noIcon: true, + noProgress: true }); } else if (item.type === 'backup') { presentSheet({ @@ -48,6 +56,7 @@ export const Cta = ({actions, style = {}, color,inline}) => { paddingHorizontal: 12, ...getStyle(style) }}> + {buttons.length > 0 && buttons.slice(0, 1).map(item => (