From bbda4c4ab92be210902d31b865e91ec16ccf620f Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 14:55:34 -0600 Subject: [PATCH 01/18] Adding basic component for new login feature modal --- .../LoggedInFeature/LoggedInFeature.js | 59 +++++++++++++++++++ src/components/LoggedInFeature/index.js | 1 + .../Navigation/Navigation.component.js | 19 +++--- 3 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/components/LoggedInFeature/LoggedInFeature.js create mode 100644 src/components/LoggedInFeature/index.js diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js new file mode 100644 index 000000000..ee9705f7d --- /dev/null +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -0,0 +1,59 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { isLogged } from '../App/App.selectors'; + +function LoggedInFeature({ + children, + isLogged, + isInFreeCountry + // isOnTrialPeriod, + // isSubscribed, + // showPremiumRequired, + // lastUpdated +}) { + const captured = event => { + if (isLogged && isInFreeCountry) { + return; + } + // event.stopPropagation(); + // event.preventDefault(); + + console.log('show modal'); + // if (isUpdateSubscriberStatusNeeded(lastUpdated)) { + // const requestOrigin = 'Function: captured - Component: PremiumFeature'; + // updateIsSubscribed(requestOrigin); + // updateIsInFreeCountry(); + // updateIsOnTrialPeriod(); + // } + + // if (isInFreeCountry || isSubscribed || isOnTrialPeriod) return; + // event.stopPropagation(); + // event.preventDefault(); + // showPremiumRequired(); + }; + return ( + <> +
logged in feature{children}
+ + ); +} + +const mapStateToProps = state => ({ + isLogged: isLogged(state), + isOnTrialPeriod: state.subscription.isOnTrialPeriod, + isSubscribed: state.subscription.isSubscribed, + isInFreeCountry: state.subscription.isInFreeCountry, + lastUpdated: state.subscription.lastUpdated +}); + +const mapDispatchToProps = { + // showPremiumRequired, + // updateIsSubscribed, + // updateSubscription, + // updateIsInFreeCountry +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(LoggedInFeature); diff --git a/src/components/LoggedInFeature/index.js b/src/components/LoggedInFeature/index.js new file mode 100644 index 000000000..3dd06d38a --- /dev/null +++ b/src/components/LoggedInFeature/index.js @@ -0,0 +1 @@ +export { default } from './LoggedInFeature'; diff --git a/src/components/Settings/Navigation/Navigation.component.js b/src/components/Settings/Navigation/Navigation.component.js index 33e64ec4c..a0d5dc481 100644 --- a/src/components/Settings/Navigation/Navigation.component.js +++ b/src/components/Settings/Navigation/Navigation.component.js @@ -18,6 +18,7 @@ import { NAVIGATION_BUTTONS_STYLES } from './Navigation.constants'; import './Navigation.css'; import ResetToursItem from '../../UI/ResetToursItem'; import PremiumFeature from '../../PremiumFeature'; +import LoggedInFeature from '../../LoggedInFeature'; const propTypes = { /** @@ -310,14 +311,16 @@ class Navigation extends React.Component { } /> - - - + + + + + From 7813986c2369107e570f564cd286e58a3e00aadb Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 15:15:07 -0600 Subject: [PATCH 02/18] Showing new modal --- src/components/App/App.component.js | 2 + .../LoggedInFeature/LoggedInFeature.js | 6 +- .../LoggedInFeature/LoginRequiredModal.js | 56 +++++++++++++++++++ .../SubscriptionProvider.actions.js | 18 +++++- .../SubscriptionProvider.constants.js | 2 + .../SubscriptionProvider.reducer.js | 26 ++++++++- 6 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 src/components/LoggedInFeature/LoginRequiredModal.js diff --git a/src/components/App/App.component.js b/src/components/App/App.component.js index 13a31818b..23713903f 100644 --- a/src/components/App/App.component.js +++ b/src/components/App/App.component.js @@ -16,6 +16,7 @@ import Settings from '../Settings'; import WelcomeScreen from '../WelcomeScreen'; import Analytics from '../Analytics'; import './App.css'; +import LoginRequiredModal from '../LoggedInFeature/LoginRequiredModal'; export class App extends Component { static propTypes = { @@ -90,6 +91,7 @@ export class App extends Component { + ); } diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js index ee9705f7d..ad4b42e32 100644 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -1,11 +1,13 @@ import React from 'react'; import { connect } from 'react-redux'; import { isLogged } from '../App/App.selectors'; +import { showLoginRequired } from '../../providers/SubscriptionProvider/SubscriptionProvider.actions'; function LoggedInFeature({ children, isLogged, - isInFreeCountry + isInFreeCountry, + showLoginRequired // isOnTrialPeriod, // isSubscribed, // showPremiumRequired, @@ -19,6 +21,7 @@ function LoggedInFeature({ // event.preventDefault(); console.log('show modal'); + showLoginRequired(); // if (isUpdateSubscriberStatusNeeded(lastUpdated)) { // const requestOrigin = 'Function: captured - Component: PremiumFeature'; // updateIsSubscribed(requestOrigin); @@ -47,6 +50,7 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = { + showLoginRequired // showPremiumRequired, // updateIsSubscribed, // updateSubscription, diff --git a/src/components/LoggedInFeature/LoginRequiredModal.js b/src/components/LoggedInFeature/LoginRequiredModal.js new file mode 100644 index 000000000..db4d7d4be --- /dev/null +++ b/src/components/LoggedInFeature/LoginRequiredModal.js @@ -0,0 +1,56 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { hideLoginRequired } from '../../providers/SubscriptionProvider/SubscriptionProvider.actions'; +import { Dialog } from '@material-ui/core'; +import { Link } from 'react-router-dom'; + +import Button from '@material-ui/core/Button'; + +import WarningIcon from '@material-ui/icons/Warning'; +import DialogContent from '@material-ui/core/DialogContent'; +import { Typography } from '@material-ui/core'; + +function LoginRequiredModal({ hideLoginRequired, loginRequiredModalState }) { + const { open } = loginRequiredModalState; + + return ( + + + + {'dialogText.tittle'} + + Login required + + + + + ); +} + +const mapStateToProps = ({ subscription: { loginRequiredModalState } }) => ({ + loginRequiredModalState +}); + +const mapDispatchToProps = { + hideLoginRequired +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(LoginRequiredModal); diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js b/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js index 6344cf5f5..99d9984f8 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js @@ -11,7 +11,9 @@ import { CANCELLED, IN_GRACE_PERIOD, EXPIRED, - PROCCESING + PROCCESING, + SHOW_LOGIN_REQUIRED, + HIDE_LOGIN_REQUIRED } from './SubscriptionProvider.constants'; import API from '../../api'; import { isLogged } from '../../components/App/App.selectors'; @@ -302,3 +304,17 @@ export function hidePremiumRequired() { type: HIDE_PREMIUM_REQUIRED }; } + +export function showLoginRequired() { + // { showTryPeriodFinishedMessages } = { showTryPeriodFinishedMessages: false } + return { + type: SHOW_LOGIN_REQUIRED + // showTryPeriodFinishedMessages + }; +} + +export function hideLoginRequired() { + return { + type: HIDE_LOGIN_REQUIRED + }; +} diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.constants.js b/src/providers/SubscriptionProvider/SubscriptionProvider.constants.js index b1cb6d185..73a000254 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.constants.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.constants.js @@ -6,6 +6,8 @@ export const SHOW_PREMIUM_REQUIRED = 'cboard/subscription/SHOW_PREMIUM_REQUIRED'; export const HIDE_PREMIUM_REQUIRED = 'cboard/subscription/HIDE_PREMIUM_REQUIRED'; +export const SHOW_LOGIN_REQUIRED = 'cboard/subscription/SHOW_LOGIN_REQUIRED'; +export const HIDE_LOGIN_REQUIRED = 'cboard/subscription/HIDE_LOGIN_REQUIRED'; export const NOT_SUBSCRIBED = 'not_subscribed'; export const PROCCESING = 'proccesing'; diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js index e75d3d58f..a7aed48df 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js @@ -4,7 +4,9 @@ import { UPDATE_SUBSCRIPTION_ERROR, SHOW_PREMIUM_REQUIRED, HIDE_PREMIUM_REQUIRED, - NOT_SUBSCRIBED + NOT_SUBSCRIBED, + SHOW_LOGIN_REQUIRED, + HIDE_LOGIN_REQUIRED } from './SubscriptionProvider.constants'; import { LOGOUT, @@ -27,6 +29,10 @@ const initialState = { open: false, showTryPeriodFinishedMessages: false }, + loginRequiredModalState: { + open: false + // showTryPeriodFinishedMessages: false + }, ownedProduct: '', products: [ { @@ -96,6 +102,24 @@ function subscriptionProviderReducer(state = initialState, action) { state.premiumRequiredModalState.showTryPeriodFinishedMessages } }; + + case SHOW_LOGIN_REQUIRED: + return { + ...state, + loginRequiredModalState: { + open: true + // showTryPeriodFinishedMessages: action.showTryPeriodFinishedMessages + } + }; + case HIDE_LOGIN_REQUIRED: + return { + ...state, + loginRequiredModalState: { + open: false + // showTryPeriodFinishedMessages: + // state.premiumRequiredModalState.showTryPeriodFinishedMessages + } + }; default: return state; } From 00219bd8b4d0f515464eab53fae9e7643b3f5c16 Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 15:29:52 -0600 Subject: [PATCH 03/18] Adding styles and international messages --- .../LoggedInFeature/LoggedInFeature.js | 24 ++--------------- .../LoggedInFeature/LoginRequiredModal.js | 18 ++++++++----- .../LoginRequiredModal.messages.js | 17 ++++++++++++ .../LoginRequiredModal.module.css | 26 +++++++++++++++++++ 4 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 src/components/LoggedInFeature/LoginRequiredModal.messages.js create mode 100644 src/components/LoggedInFeature/LoginRequiredModal.module.css diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js index ad4b42e32..e11b8782b 100644 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -8,31 +8,15 @@ function LoggedInFeature({ isLogged, isInFreeCountry, showLoginRequired - // isOnTrialPeriod, - // isSubscribed, - // showPremiumRequired, - // lastUpdated }) { const captured = event => { if (isLogged && isInFreeCountry) { return; } - // event.stopPropagation(); - // event.preventDefault(); - console.log('show modal'); + event.stopPropagation(); + event.preventDefault(); showLoginRequired(); - // if (isUpdateSubscriberStatusNeeded(lastUpdated)) { - // const requestOrigin = 'Function: captured - Component: PremiumFeature'; - // updateIsSubscribed(requestOrigin); - // updateIsInFreeCountry(); - // updateIsOnTrialPeriod(); - // } - - // if (isInFreeCountry || isSubscribed || isOnTrialPeriod) return; - // event.stopPropagation(); - // event.preventDefault(); - // showPremiumRequired(); }; return ( <> @@ -51,10 +35,6 @@ const mapStateToProps = state => ({ const mapDispatchToProps = { showLoginRequired - // showPremiumRequired, - // updateIsSubscribed, - // updateSubscription, - // updateIsInFreeCountry }; export default connect( diff --git a/src/components/LoggedInFeature/LoginRequiredModal.js b/src/components/LoggedInFeature/LoginRequiredModal.js index db4d7d4be..94b55be64 100644 --- a/src/components/LoggedInFeature/LoginRequiredModal.js +++ b/src/components/LoggedInFeature/LoginRequiredModal.js @@ -10,6 +10,11 @@ import WarningIcon from '@material-ui/icons/Warning'; import DialogContent from '@material-ui/core/DialogContent'; import { Typography } from '@material-ui/core'; +import messages from './LoginRequiredModal.messages'; +import { FormattedMessage } from 'react-intl'; + +import style from './LoginRequiredModal.module.css'; + function LoginRequiredModal({ hideLoginRequired, loginRequiredModalState }) { const { open } = loginRequiredModalState; @@ -20,11 +25,13 @@ function LoginRequiredModal({ hideLoginRequired, loginRequiredModalState }) { maxWidth="md" aria-labelledby="dialog" > - + - {'dialogText.tittle'} - - Login required + + + + + diff --git a/src/components/LoggedInFeature/LoginRequiredModal.messages.js b/src/components/LoggedInFeature/LoginRequiredModal.messages.js new file mode 100644 index 000000000..27101e381 --- /dev/null +++ b/src/components/LoggedInFeature/LoginRequiredModal.messages.js @@ -0,0 +1,17 @@ +import { defineMessages } from 'react-intl'; + +export default defineMessages({ + featureBlockedTitle: { + id: 'cboard.components.LoginRequiredModal.featureBlockedTitle', + defaultMessage: 'This feature is blocked' + }, + featureBlockedText: { + id: 'cboard.components.LoginRequiredModal.featureBlockedText', + defaultMessage: + 'Cboard disabled this feature. To continue using it please sign up or login' + }, + loginSignupNow: { + id: 'cboard.components.PremiumFeature.loginSignupNow', + defaultMessage: 'Login or Sign Up now' + } +}); diff --git a/src/components/LoggedInFeature/LoginRequiredModal.module.css b/src/components/LoggedInFeature/LoginRequiredModal.module.css new file mode 100644 index 000000000..b1a2e2d0e --- /dev/null +++ b/src/components/LoggedInFeature/LoginRequiredModal.module.css @@ -0,0 +1,26 @@ +.content { + display: flex; + flex-direction: column; + align-content: center; + justify-content: center; + align-items: center; + text-align: center; + margin: 2em 3em; +} + +.dialogText { + padding-bottom: 1em; +} + +@media (max-width: 480px), (max-height: 400px) { + .content { + margin: 2em 1em; + } + + .content h3 { + font-size: 2em; + } + .content h6 { + font-size: 1.2em; + } +} From c3d70cece4d61b8688e79a0c2a0ac7c98b975b3b Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 15:31:37 -0600 Subject: [PATCH 04/18] Cleaning code --- src/components/LoggedInFeature/LoggedInFeature.js | 3 +-- .../SubscriptionProvider/SubscriptionProvider.actions.js | 2 -- .../SubscriptionProvider/SubscriptionProvider.reducer.js | 3 --- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js index e11b8782b..1090f0e5c 100644 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -13,14 +13,13 @@ function LoggedInFeature({ if (isLogged && isInFreeCountry) { return; } - console.log('show modal'); event.stopPropagation(); event.preventDefault(); showLoginRequired(); }; return ( <> -
logged in feature{children}
+
{children}
); } diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js b/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js index 99d9984f8..685d8ec0d 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.actions.js @@ -306,10 +306,8 @@ export function hidePremiumRequired() { } export function showLoginRequired() { - // { showTryPeriodFinishedMessages } = { showTryPeriodFinishedMessages: false } return { type: SHOW_LOGIN_REQUIRED - // showTryPeriodFinishedMessages }; } diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js index a7aed48df..1101b7789 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js @@ -108,7 +108,6 @@ function subscriptionProviderReducer(state = initialState, action) { ...state, loginRequiredModalState: { open: true - // showTryPeriodFinishedMessages: action.showTryPeriodFinishedMessages } }; case HIDE_LOGIN_REQUIRED: @@ -116,8 +115,6 @@ function subscriptionProviderReducer(state = initialState, action) { ...state, loginRequiredModalState: { open: false - // showTryPeriodFinishedMessages: - // state.premiumRequiredModalState.showTryPeriodFinishedMessages } }; default: From f68d1ad39d3d14ad6b6d4f14d2a7b8524149df4c Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 15:36:05 -0600 Subject: [PATCH 05/18] More code cleaning --- src/components/LoggedInFeature/LoggedInFeature.js | 5 +---- .../SubscriptionProvider/SubscriptionProvider.reducer.js | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js index 1090f0e5c..f29cbc75a 100644 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -26,10 +26,7 @@ function LoggedInFeature({ const mapStateToProps = state => ({ isLogged: isLogged(state), - isOnTrialPeriod: state.subscription.isOnTrialPeriod, - isSubscribed: state.subscription.isSubscribed, - isInFreeCountry: state.subscription.isInFreeCountry, - lastUpdated: state.subscription.lastUpdated + isInFreeCountry: state.subscription.isInFreeCountry }); const mapDispatchToProps = { diff --git a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js index 1101b7789..73cca5310 100644 --- a/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js +++ b/src/providers/SubscriptionProvider/SubscriptionProvider.reducer.js @@ -31,7 +31,6 @@ const initialState = { }, loginRequiredModalState: { open: false - // showTryPeriodFinishedMessages: false }, ownedProduct: '', products: [ From b28d78a12f17f6979de74a213c7d8f4f793b7f3c Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 15:46:59 -0600 Subject: [PATCH 06/18] Disabling feature on logout --- src/components/Account/Login/Login.actions.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/Account/Login/Login.actions.js b/src/components/Account/Login/Login.actions.js index 94417c2f5..a52d574b3 100644 --- a/src/components/Account/Login/Login.actions.js +++ b/src/components/Account/Login/Login.actions.js @@ -10,7 +10,8 @@ import { disableTour, setUnloggedUserLocation, updateUnloggedUserLocation, - enableAllTours + enableAllTours, + updateNavigationSettings } from '../../App/App.actions'; import { getVoiceURI } from '../../../i18n'; import { isCordova, isElectron } from '../../../cordova-util'; @@ -50,6 +51,7 @@ export function logout() { return async dispatch => { dispatch(setUnloggedUserLocation(null)); dispatch(updateUnloggedUserLocation()); + dispatch(updateNavigationSettings({ improvePhraseActive: false })); dispatch(logoutSuccess()); }; } From af1459237e62a039cf311fbc264b9af8aae0c4aa Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 11 Dec 2023 16:16:18 -0600 Subject: [PATCH 07/18] Fixing rule --- .../LoggedInFeature/LoggedInFeature.js | 9 ++++----- .../Settings/Navigation/Navigation.component.js | 16 ++++++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js index f29cbc75a..a654d84dc 100644 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ b/src/components/LoggedInFeature/LoggedInFeature.js @@ -10,12 +10,11 @@ function LoggedInFeature({ showLoginRequired }) { const captured = event => { - if (isLogged && isInFreeCountry) { - return; + if (!isLogged && isInFreeCountry) { + event.stopPropagation(); + event.preventDefault(); + showLoginRequired(); } - event.stopPropagation(); - event.preventDefault(); - showLoginRequired(); }; return ( <> diff --git a/src/components/Settings/Navigation/Navigation.component.js b/src/components/Settings/Navigation/Navigation.component.js index a0d5dc481..b94ad8311 100644 --- a/src/components/Settings/Navigation/Navigation.component.js +++ b/src/components/Settings/Navigation/Navigation.component.js @@ -312,14 +312,14 @@ class Navigation extends React.Component { /> - - - + {/* */} + + {/* */} From a9fdb6106ed3d79fb83529734dc6195435310faf Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Fri, 15 Dec 2023 10:57:29 -0600 Subject: [PATCH 08/18] Should this be part of the logout? --- src/components/Account/Login/Login.actions.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Account/Login/Login.actions.js b/src/components/Account/Login/Login.actions.js index a52d574b3..3df61782c 100644 --- a/src/components/Account/Login/Login.actions.js +++ b/src/components/Account/Login/Login.actions.js @@ -49,9 +49,12 @@ export function logout() { console.error(err); } return async dispatch => { + dispatch(updateNavigationSettings({ improvePhraseActive: false })); + try { + await API.updateSettings({ navigation: { improvePhraseActive: false } }); + } catch (e) {} dispatch(setUnloggedUserLocation(null)); dispatch(updateUnloggedUserLocation()); - dispatch(updateNavigationSettings({ improvePhraseActive: false })); dispatch(logoutSuccess()); }; } From e233ae25c6fe11019708f9fd3b58ab16e7ae06a5 Mon Sep 17 00:00:00 2001 From: tomivm Date: Mon, 18 Dec 2023 11:34:04 -0300 Subject: [PATCH 09/18] Add optional prop to PremiumFeature to require log in for free countries --- .../PremiumFeature/PremiumFeature.js | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/PremiumFeature/PremiumFeature.js b/src/components/PremiumFeature/PremiumFeature.js index ed5c92bdb..37da99f2b 100644 --- a/src/components/PremiumFeature/PremiumFeature.js +++ b/src/components/PremiumFeature/PremiumFeature.js @@ -5,8 +5,10 @@ import { updateIsSubscribed, updateSubscription, updateIsOnTrialPeriod, - showPremiumRequired + showPremiumRequired, + showLoginRequired } from '../../providers/SubscriptionProvider/SubscriptionProvider.actions'; +import { isLogged } from '../App/App.selectors'; function isUpdateSubscriberStatusNeeded(lastUpdated) { if (!lastUpdated) return true; @@ -22,8 +24,11 @@ function PremiumFeature({ isOnTrialPeriod, isSubscribed, isInFreeCountry, + isLogged, showPremiumRequired, - lastUpdated + showLoginRequired, + lastUpdated, + isLogginRequired = false }) { const captured = event => { if (isUpdateSubscriberStatusNeeded(lastUpdated)) { @@ -33,6 +38,13 @@ function PremiumFeature({ updateIsOnTrialPeriod(); } + if (isLogginRequired && !isLogged && isInFreeCountry) { + event.stopPropagation(); + event.preventDefault(); + showLoginRequired(); + return; + } + if (isInFreeCountry || isSubscribed || isOnTrialPeriod) return; event.stopPropagation(); event.preventDefault(); @@ -47,6 +59,7 @@ function PremiumFeature({ } const mapStateToProps = state => ({ + isLogged: isLogged(state), isOnTrialPeriod: state.subscription.isOnTrialPeriod, isSubscribed: state.subscription.isSubscribed, isInFreeCountry: state.subscription.isInFreeCountry, @@ -57,7 +70,8 @@ const mapDispatchToProps = { showPremiumRequired, updateIsSubscribed, updateSubscription, - updateIsInFreeCountry + updateIsInFreeCountry, + showLoginRequired }; export default connect( From 47c24cb57df1cf6d79e7713fcc67e4444608a94c Mon Sep 17 00:00:00 2001 From: tomivm Date: Mon, 18 Dec 2023 11:35:36 -0300 Subject: [PATCH 10/18] Require log in to enable the Improve Phrase feature --- src/components/Settings/Navigation/Navigation.component.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/Settings/Navigation/Navigation.component.js b/src/components/Settings/Navigation/Navigation.component.js index b94ad8311..365bca237 100644 --- a/src/components/Settings/Navigation/Navigation.component.js +++ b/src/components/Settings/Navigation/Navigation.component.js @@ -18,7 +18,6 @@ import { NAVIGATION_BUTTONS_STYLES } from './Navigation.constants'; import './Navigation.css'; import ResetToursItem from '../../UI/ResetToursItem'; import PremiumFeature from '../../PremiumFeature'; -import LoggedInFeature from '../../LoggedInFeature'; const propTypes = { /** @@ -311,16 +310,14 @@ class Navigation extends React.Component { } /> - - {/* */} + - {/* */} - + From 85f3c639045a2aa172842d8a3a2fe6c0b9e25330 Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 13:25:58 -0600 Subject: [PATCH 11/18] Removing call to API on logout --- src/components/Account/Login/Login.actions.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/Account/Login/Login.actions.js b/src/components/Account/Login/Login.actions.js index 3df61782c..cf96125bf 100644 --- a/src/components/Account/Login/Login.actions.js +++ b/src/components/Account/Login/Login.actions.js @@ -50,9 +50,6 @@ export function logout() { } return async dispatch => { dispatch(updateNavigationSettings({ improvePhraseActive: false })); - try { - await API.updateSettings({ navigation: { improvePhraseActive: false } }); - } catch (e) {} dispatch(setUnloggedUserLocation(null)); dispatch(updateUnloggedUserLocation()); dispatch(logoutSuccess()); From af692f87470ace51e0ca52639098d309a288ab12 Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 13:28:18 -0600 Subject: [PATCH 12/18] Change dialog text --- src/components/LoggedInFeature/LoginRequiredModal.messages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/LoggedInFeature/LoginRequiredModal.messages.js b/src/components/LoggedInFeature/LoginRequiredModal.messages.js index 27101e381..69899c67b 100644 --- a/src/components/LoggedInFeature/LoginRequiredModal.messages.js +++ b/src/components/LoggedInFeature/LoginRequiredModal.messages.js @@ -8,7 +8,7 @@ export default defineMessages({ featureBlockedText: { id: 'cboard.components.LoginRequiredModal.featureBlockedText', defaultMessage: - 'Cboard disabled this feature. To continue using it please sign up or login' + 'This feature is disabled for unlogged users. To continue using it please sign up or login' }, loginSignupNow: { id: 'cboard.components.PremiumFeature.loginSignupNow', From bf4e7ca93377a4d9215a017a4e2373f2cabcfc75 Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 13:32:30 -0600 Subject: [PATCH 13/18] Removing component --- .../LoggedInFeature/LoggedInFeature.js | 38 ------------------- src/components/LoggedInFeature/index.js | 1 - 2 files changed, 39 deletions(-) delete mode 100644 src/components/LoggedInFeature/LoggedInFeature.js delete mode 100644 src/components/LoggedInFeature/index.js diff --git a/src/components/LoggedInFeature/LoggedInFeature.js b/src/components/LoggedInFeature/LoggedInFeature.js deleted file mode 100644 index a654d84dc..000000000 --- a/src/components/LoggedInFeature/LoggedInFeature.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { isLogged } from '../App/App.selectors'; -import { showLoginRequired } from '../../providers/SubscriptionProvider/SubscriptionProvider.actions'; - -function LoggedInFeature({ - children, - isLogged, - isInFreeCountry, - showLoginRequired -}) { - const captured = event => { - if (!isLogged && isInFreeCountry) { - event.stopPropagation(); - event.preventDefault(); - showLoginRequired(); - } - }; - return ( - <> -
{children}
- - ); -} - -const mapStateToProps = state => ({ - isLogged: isLogged(state), - isInFreeCountry: state.subscription.isInFreeCountry -}); - -const mapDispatchToProps = { - showLoginRequired -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(LoggedInFeature); diff --git a/src/components/LoggedInFeature/index.js b/src/components/LoggedInFeature/index.js deleted file mode 100644 index 3dd06d38a..000000000 --- a/src/components/LoggedInFeature/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './LoggedInFeature'; From 78bcd35120f811daaa4b3e6e2e98aeebe0aaf30a Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 13:32:40 -0600 Subject: [PATCH 14/18] Renaming prop --- src/components/PremiumFeature/PremiumFeature.js | 4 ++-- src/components/Settings/Navigation/Navigation.component.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/PremiumFeature/PremiumFeature.js b/src/components/PremiumFeature/PremiumFeature.js index 37da99f2b..005b46cbe 100644 --- a/src/components/PremiumFeature/PremiumFeature.js +++ b/src/components/PremiumFeature/PremiumFeature.js @@ -28,7 +28,7 @@ function PremiumFeature({ showPremiumRequired, showLoginRequired, lastUpdated, - isLogginRequired = false + isLoginRequired = false }) { const captured = event => { if (isUpdateSubscriberStatusNeeded(lastUpdated)) { @@ -38,7 +38,7 @@ function PremiumFeature({ updateIsOnTrialPeriod(); } - if (isLogginRequired && !isLogged && isInFreeCountry) { + if (isLoginRequired && !isLogged && isInFreeCountry) { event.stopPropagation(); event.preventDefault(); showLoginRequired(); diff --git a/src/components/Settings/Navigation/Navigation.component.js b/src/components/Settings/Navigation/Navigation.component.js index 365bca237..a184ca1c8 100644 --- a/src/components/Settings/Navigation/Navigation.component.js +++ b/src/components/Settings/Navigation/Navigation.component.js @@ -310,7 +310,7 @@ class Navigation extends React.Component { } /> - + Date: Mon, 18 Dec 2023 13:37:01 -0600 Subject: [PATCH 15/18] Using anonymous instead --- src/components/LoggedInFeature/LoginRequiredModal.messages.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/LoggedInFeature/LoginRequiredModal.messages.js b/src/components/LoggedInFeature/LoginRequiredModal.messages.js index 69899c67b..ae34d49c1 100644 --- a/src/components/LoggedInFeature/LoginRequiredModal.messages.js +++ b/src/components/LoggedInFeature/LoginRequiredModal.messages.js @@ -7,8 +7,10 @@ export default defineMessages({ }, featureBlockedText: { id: 'cboard.components.LoginRequiredModal.featureBlockedText', + // Refer to un-logged in users as "anonymous users". + // https://english.stackexchange.com/questions/251800/a-word-for-a-non-logged-in-user defaultMessage: - 'This feature is disabled for unlogged users. To continue using it please sign up or login' + 'This feature is disabled for anonymous users. To continue using it please sign up or login' }, loginSignupNow: { id: 'cboard.components.PremiumFeature.loginSignupNow', From b7c0f91285922646745b211bb31b8778fcef8d4f Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 13:41:41 -0600 Subject: [PATCH 16/18] Change title of modal --- src/components/LoggedInFeature/LoginRequiredModal.messages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/LoggedInFeature/LoginRequiredModal.messages.js b/src/components/LoggedInFeature/LoginRequiredModal.messages.js index ae34d49c1..7e6ea413f 100644 --- a/src/components/LoggedInFeature/LoginRequiredModal.messages.js +++ b/src/components/LoggedInFeature/LoginRequiredModal.messages.js @@ -3,7 +3,7 @@ import { defineMessages } from 'react-intl'; export default defineMessages({ featureBlockedTitle: { id: 'cboard.components.LoginRequiredModal.featureBlockedTitle', - defaultMessage: 'This feature is blocked' + defaultMessage: 'Login or Sign Up to use this feature' }, featureBlockedText: { id: 'cboard.components.LoginRequiredModal.featureBlockedText', From 909329735ba1560c0934a9ad4523d51f8021f3fa Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 14:10:55 -0600 Subject: [PATCH 17/18] Updating cboard.json and fixing invalid key name --- .../LoggedInFeature/LoginRequiredModal.messages.js | 2 +- src/translations/src/cboard.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/LoggedInFeature/LoginRequiredModal.messages.js b/src/components/LoggedInFeature/LoginRequiredModal.messages.js index 7e6ea413f..f413d7b11 100644 --- a/src/components/LoggedInFeature/LoginRequiredModal.messages.js +++ b/src/components/LoggedInFeature/LoginRequiredModal.messages.js @@ -13,7 +13,7 @@ export default defineMessages({ 'This feature is disabled for anonymous users. To continue using it please sign up or login' }, loginSignupNow: { - id: 'cboard.components.PremiumFeature.loginSignupNow', + id: 'cboard.components.LoginRequiredModal.loginSignupNow', defaultMessage: 'Login or Sign Up now' } }); diff --git a/src/translations/src/cboard.json b/src/translations/src/cboard.json index e06cd7731..472dbb92d 100644 --- a/src/translations/src/cboard.json +++ b/src/translations/src/cboard.json @@ -22,6 +22,11 @@ "cboard.components.Login.password": "Password", "cboard.components.Login.cancel": "Cancel", "cboard.components.Login.forgotPassword": "Forgot password?", + + "cboard.components.LoginRequiredModal.featureBlockedTitle": "Login or Sign Up to use this feature", + "cboard.components.LoginRequiredModal.featureBlockedText": "This feature is disabled for anonymous users. To continue using it please sign up or login", + "cboard.components.LoginRequiredModal.loginSignupNow": "Login or Sign Up now", + "cboard.components.SignUp.signUp": "Sign Up", "cboard.components.SignUp.name": "Name", "cboard.components.SignUp.email": "Email", From aba03bb7adb87700fe67d9abb9573bacb7438ff8 Mon Sep 17 00:00:00 2001 From: Maxi Capodacqua Date: Mon, 18 Dec 2023 14:16:39 -0600 Subject: [PATCH 18/18] Removing extra lines --- src/translations/src/cboard.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/translations/src/cboard.json b/src/translations/src/cboard.json index be559de88..82b01ea3b 100644 --- a/src/translations/src/cboard.json +++ b/src/translations/src/cboard.json @@ -22,11 +22,9 @@ "cboard.components.Login.password": "Password", "cboard.components.Login.cancel": "Cancel", "cboard.components.Login.forgotPassword": "Forgot password?", - "cboard.components.LoginRequiredModal.featureBlockedTitle": "Login or Sign Up to use this feature", "cboard.components.LoginRequiredModal.featureBlockedText": "This feature is disabled for anonymous users. To continue using it please sign up or login", "cboard.components.LoginRequiredModal.loginSignupNow": "Login or Sign Up now", - "cboard.components.SignUp.signUp": "Sign Up", "cboard.components.SignUp.name": "Name", "cboard.components.SignUp.email": "Email",