From 45373f655f68fdd0b320cde175b6108454ad4731 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Sat, 17 Jul 2021 20:32:22 +0530 Subject: Removed Franz paid plans features: - serviceLimit - planSelection - trialStatusBar and other Franz features that were for different tiers of subscription. --- src/actions/index.js | 6 - src/actions/payment.js | 12 - src/actions/user.js | 4 - src/api/PaymentApi.js | 14 - src/api/UserApi.js | 4 - src/api/index.js | 2 - src/api/server/ServerApi.js | 41 - src/assets/themeInfo.json | 2 +- src/components/TrialActivationInfoBar.js | 94 - src/components/auth/Pricing.js | 270 -- src/components/layout/AppLayout.js | 10 - .../services/content/ServiceRestricted.js | 78 - src/components/services/content/Services.js | 5 +- .../settings/account/AccountDashboard.js | 147 +- .../settings/navigation/SettingsNavigation.js | 16 +- .../settings/recipes/RecipesDashboard.js | 58 +- .../settings/services/EditServiceForm.js | 124 +- .../settings/services/ServicesDashboard.js | 2 - .../settings/settings/EditSettingsForm.js | 29 +- src/components/settings/team/TeamDashboard.js | 39 +- src/components/subscription/SubscriptionForm.js | 78 - src/components/subscription/SubscriptionPopup.js | 84 - src/components/subscription/TrialForm.js | 115 - src/components/ui/ActivateTrialButton/index.js | 107 - src/components/ui/FeatureList.js | 81 +- src/components/ui/PremiumFeatureContainer/index.js | 101 - .../ui/PremiumFeatureContainer/styles.js | 34 - src/components/ui/UpgradeButton/index.js | 83 - src/config.js | 31 - src/containers/auth/PricingScreen.js | 83 - src/containers/auth/SetupAssistantScreen.js | 9 +- src/containers/auth/SignupScreen.js | 11 +- src/containers/layout/AppLayoutContainer.js | 5 - src/containers/settings/AccountScreen.js | 20 +- src/containers/settings/EditServiceScreen.js | 3 - src/containers/settings/EditSettingsScreen.js | 6 +- src/containers/settings/RecipesScreen.js | 4 - src/containers/settings/TeamScreen.js | 3 - .../subscription/SubscriptionFormScreen.js | 99 - .../subscription/SubscriptionPopupScreen.js | 41 - src/environment.js | 1 - src/features/communityRecipes/index.js | 19 - src/features/communityRecipes/store.js | 4 +- src/features/delayApp/Component.js | 120 - src/features/delayApp/constants.js | 6 - src/features/delayApp/index.js | 80 - src/features/delayApp/styles.js | 22 - src/features/planSelection/actions.js | 9 - src/features/planSelection/api.js | 26 - src/features/planSelection/components/PlanItem.js | 215 -- .../planSelection/components/PlanSelection.js | 269 -- .../containers/PlanSelectionScreen.js | 120 - src/features/planSelection/index.js | 28 - src/features/planSelection/store.js | 68 - .../serviceLimit/components/LimitReachedInfobox.js | 75 - src/features/serviceLimit/index.js | 31 - src/features/serviceLimit/store.js | 42 - src/features/serviceProxy/index.js | 2 - src/features/shareFranz/Component.js | 4 +- src/features/shareFranz/index.js | 13 +- src/features/spellchecker/index.js | 27 - src/features/todos/components/TodosWebview.js | 20 - src/features/todos/store.js | 3 +- src/features/trialStatusBar/actions.js | 13 - .../trialStatusBar/components/ProgressBar.js | 45 - .../trialStatusBar/components/TrialStatusBar.js | 135 - .../containers/TrialStatusBarScreen.js | 112 - src/features/trialStatusBar/index.js | 30 - src/features/trialStatusBar/store.js | 72 - .../workspaces/components/WorkspaceDrawer.js | 141 +- .../workspaces/components/WorkspacesDashboard.js | 129 +- src/features/workspaces/store.js | 47 +- src/helpers/plan-helpers.js | 53 - src/i18n/globalMessages.js | 4 - src/i18n/locales/ar.json | 7 - src/i18n/locales/bg.json | 7 - src/i18n/locales/ca.json | 7 - src/i18n/locales/de.json | 23 - src/i18n/locales/defaultMessages.json | 3166 ++++++-------------- src/i18n/locales/el.json | 23 - src/i18n/locales/en-US.json | 87 - src/i18n/locales/es.json | 7 - src/i18n/locales/et.json | 7 - src/i18n/locales/fa.json | 7 - src/i18n/locales/fi.json | 7 - src/i18n/locales/fil.json | 7 - src/i18n/locales/fr.json | 7 - src/i18n/locales/ga.json | 7 - src/i18n/locales/he.json | 7 - src/i18n/locales/hi.json | 7 - src/i18n/locales/it.json | 7 - src/i18n/locales/ja.json | 7 - src/i18n/locales/ka.json | 7 - src/i18n/locales/kk.json | 7 - src/i18n/locales/ko.json | 7 - src/i18n/locales/pt.json | 23 - src/i18n/locales/ro.json | 23 - .../src/components/TrialActivationInfoBar.json | 15 - src/i18n/messages/src/components/auth/Pricing.json | 171 -- .../messages/src/components/layout/AppLayout.json | 16 +- .../settings/account/AccountDashboard.json | 138 +- .../settings/navigation/SettingsNavigation.json | 32 +- .../settings/recipes/RecipesDashboard.json | 56 +- .../settings/services/EditServiceForm.json | 130 +- .../settings/services/ServicesDashboard.json | 36 +- .../settings/settings/EditSettingsForm.json | 128 +- .../components/settings/team/TeamDashboard.json | 41 +- .../components/subscription/SubscriptionForm.json | 54 - .../components/subscription/SubscriptionPopup.json | 28 - .../src/components/subscription/TrialForm.json | 93 - .../components/ui/ActivateTrialButton/index.json | 93 - .../messages/src/components/ui/FeatureList.json | 109 +- .../ui/PremiumFeatureContainer/index.json | 15 - .../src/components/ui/UpgradeButton/index.json | 15 - .../src/containers/settings/EditServiceScreen.json | 76 +- .../containers/settings/EditSettingsScreen.json | 180 +- .../messages/src/features/delayApp/Component.json | 67 - .../planSelection/components/PlanItem.json | 41 - .../planSelection/components/PlanSelection.json | 158 - .../planSelection/components/PlanTeaser.json | 28 - .../containers/PlanSelectionScreen.json | 54 - .../components/AnnouncementScreen.json | 15 - .../components/LimitReachedInfobox.json | 28 - .../src/features/shareFranz/Component.json | 4 +- .../trialStatusBar/components/TrialStatusBar.json | 41 - .../containers/TrialStatusBarScreen.json | 54 - .../workspaces/components/WorkspaceDrawer.json | 50 +- .../workspaces/components/WorkspacesDashboard.json | 32 +- src/i18n/messages/src/helpers/plan-helpers.json | 54 - src/i18n/messages/src/helpers/pricing-helpers.json | 80 - src/i18n/messages/src/i18n/globalMessages.json | 13 - src/internal-server | 2 +- src/lib/Menu.js | 24 +- src/lib/TouchBar.js | 4 - src/models/Plan.js | 17 - src/models/Service.js | 5 - src/models/User.js | 3 - src/routes.js | 4 - src/stores/FeaturesStore.js | 18 - src/stores/PaymentStore.js | 68 - src/stores/ServicesStore.js | 34 - src/stores/UserStore.js | 65 +- src/stores/index.js | 6 - src/styles/badge.scss | 6 +- src/styles/main.scss | 4 +- src/styles/settings.scss | 24 +- src/styles/subscription-popup.scss | 18 - src/styles/subscription.scss | 49 - 148 files changed, 1538 insertions(+), 8362 deletions(-) delete mode 100644 src/actions/payment.js delete mode 100644 src/api/PaymentApi.js delete mode 100644 src/components/TrialActivationInfoBar.js delete mode 100644 src/components/auth/Pricing.js delete mode 100644 src/components/services/content/ServiceRestricted.js delete mode 100644 src/components/subscription/SubscriptionForm.js delete mode 100644 src/components/subscription/SubscriptionPopup.js delete mode 100644 src/components/subscription/TrialForm.js delete mode 100644 src/components/ui/ActivateTrialButton/index.js delete mode 100644 src/components/ui/PremiumFeatureContainer/index.js delete mode 100644 src/components/ui/PremiumFeatureContainer/styles.js delete mode 100644 src/components/ui/UpgradeButton/index.js delete mode 100644 src/containers/auth/PricingScreen.js delete mode 100644 src/containers/subscription/SubscriptionFormScreen.js delete mode 100644 src/containers/subscription/SubscriptionPopupScreen.js delete mode 100644 src/features/delayApp/Component.js delete mode 100644 src/features/delayApp/constants.js delete mode 100644 src/features/delayApp/index.js delete mode 100644 src/features/delayApp/styles.js delete mode 100644 src/features/planSelection/actions.js delete mode 100644 src/features/planSelection/api.js delete mode 100644 src/features/planSelection/components/PlanItem.js delete mode 100644 src/features/planSelection/components/PlanSelection.js delete mode 100644 src/features/planSelection/containers/PlanSelectionScreen.js delete mode 100644 src/features/planSelection/index.js delete mode 100644 src/features/planSelection/store.js delete mode 100644 src/features/serviceLimit/components/LimitReachedInfobox.js delete mode 100644 src/features/serviceLimit/index.js delete mode 100644 src/features/serviceLimit/store.js delete mode 100644 src/features/spellchecker/index.js delete mode 100644 src/features/trialStatusBar/actions.js delete mode 100644 src/features/trialStatusBar/components/ProgressBar.js delete mode 100644 src/features/trialStatusBar/components/TrialStatusBar.js delete mode 100644 src/features/trialStatusBar/containers/TrialStatusBarScreen.js delete mode 100644 src/features/trialStatusBar/index.js delete mode 100644 src/features/trialStatusBar/store.js delete mode 100644 src/helpers/plan-helpers.js delete mode 100644 src/i18n/messages/src/components/TrialActivationInfoBar.json delete mode 100644 src/i18n/messages/src/components/auth/Pricing.json delete mode 100644 src/i18n/messages/src/components/subscription/SubscriptionForm.json delete mode 100644 src/i18n/messages/src/components/subscription/SubscriptionPopup.json delete mode 100644 src/i18n/messages/src/components/subscription/TrialForm.json delete mode 100644 src/i18n/messages/src/components/ui/ActivateTrialButton/index.json delete mode 100644 src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json delete mode 100644 src/i18n/messages/src/components/ui/UpgradeButton/index.json delete mode 100644 src/i18n/messages/src/features/delayApp/Component.json delete mode 100644 src/i18n/messages/src/features/planSelection/components/PlanItem.json delete mode 100644 src/i18n/messages/src/features/planSelection/components/PlanSelection.json delete mode 100644 src/i18n/messages/src/features/planSelection/components/PlanTeaser.json delete mode 100644 src/i18n/messages/src/features/planSelection/containers/PlanSelectionScreen.json delete mode 100644 src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json delete mode 100644 src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json delete mode 100644 src/i18n/messages/src/features/trialStatusBar/components/TrialStatusBar.json delete mode 100644 src/i18n/messages/src/features/trialStatusBar/containers/TrialStatusBarScreen.json delete mode 100644 src/i18n/messages/src/helpers/plan-helpers.json delete mode 100644 src/i18n/messages/src/helpers/pricing-helpers.json delete mode 100644 src/models/Plan.js delete mode 100644 src/stores/PaymentStore.js delete mode 100644 src/styles/subscription-popup.scss delete mode 100644 src/styles/subscription.scss (limited to 'src') diff --git a/src/actions/index.js b/src/actions/index.js index 6f32732b9..ed8283d6c 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -7,15 +7,12 @@ import recipePreview from './recipePreview'; import ui from './ui'; import app from './app'; import user from './user'; -import payment from './payment'; import news from './news'; import settings from './settings'; import requests from './requests'; import announcements from '../features/announcements/actions'; import workspaces from '../features/workspaces/actions'; import todos from '../features/todos/actions'; -import planSelection from '../features/planSelection/actions'; -import trialStatusBar from '../features/trialStatusBar/actions'; const actions = { service, @@ -24,7 +21,6 @@ const actions = { ui, app, user, - payment, news, settings, requests, @@ -35,6 +31,4 @@ export default Object.assign( { announcements }, { workspaces }, { todos }, - { planSelection }, - { trialStatusBar }, ); diff --git a/src/actions/payment.js b/src/actions/payment.js deleted file mode 100644 index f61faf197..000000000 --- a/src/actions/payment.js +++ /dev/null @@ -1,12 +0,0 @@ -import PropTypes from 'prop-types'; - -export default { - createHostedPage: { - planId: PropTypes.string.isRequired, - }, - upgradeAccount: { - planId: PropTypes.string.isRequired, - onCloseWindow: PropTypes.func, - }, - createDashboardUrl: {}, -}; diff --git a/src/actions/user.js b/src/actions/user.js index 7061a367a..20d27ee53 100644 --- a/src/actions/user.js +++ b/src/actions/user.js @@ -13,15 +13,11 @@ export default { password: PropTypes.string.isRequired, accountType: PropTypes.string, company: PropTypes.string, - plan: PropTypes.string, currency: PropTypes.string, }, retrievePassword: { email: PropTypes.string.isRequired, }, - activateTrial: { - planId: PropTypes.string.isRequired, - }, invite: { invites: PropTypes.array.isRequired, }, diff --git a/src/api/PaymentApi.js b/src/api/PaymentApi.js deleted file mode 100644 index 7325151e9..000000000 --- a/src/api/PaymentApi.js +++ /dev/null @@ -1,14 +0,0 @@ -export default class PaymentApi { - constructor(server, local) { - this.server = server; - this.local = local; - } - - plans() { - return this.server.getPlans(); - } - - getHostedPage(planId) { - return this.server.getHostedPage(planId); - } -} diff --git a/src/api/UserApi.js b/src/api/UserApi.js index 8ba8cd1e9..edfb88988 100644 --- a/src/api/UserApi.js +++ b/src/api/UserApi.js @@ -25,10 +25,6 @@ export default class UserApi { return this.server.retrievePassword(email); } - activateTrial(data) { - return this.server.activateTrial(data); - } - invite(data) { return this.server.inviteUser(data); } diff --git a/src/api/index.js b/src/api/index.js index 3c87cc087..ed6c13488 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -4,7 +4,6 @@ import RecipePreviewsApi from './RecipePreviewsApi'; import RecipesApi from './RecipesApi'; import UserApi from './UserApi'; import LocalApi from './LocalApi'; -import PaymentApi from './PaymentApi'; import NewsApi from './NewsApi'; import FeaturesApi from './FeaturesApi'; @@ -16,6 +15,5 @@ export default (server, local) => ({ features: new FeaturesApi(server, local), user: new UserApi(server, local), local: new LocalApi(server, local), - payment: new PaymentApi(server, local), news: new NewsApi(server, local), }); diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js index c63aa7dda..78a98e544 100644 --- a/src/api/server/ServerApi.js +++ b/src/api/server/ServerApi.js @@ -6,7 +6,6 @@ import { app, require as remoteRequire } from '@electron/remote'; import ServiceModel from '../../models/Service'; import RecipePreviewModel from '../../models/RecipePreview'; import RecipeModel from '../../models/Recipe'; -import PlanModel from '../../models/Plan'; import NewsModel from '../../models/News'; import UserModel from '../../models/User'; import OrderModel from '../../models/Order'; @@ -73,20 +72,6 @@ export default class ServerApi { return u.token; } - async activateTrial(data) { - const request = await sendAuthRequest(`${apiBase()}/payment/trial`, { - method: 'POST', - body: JSON.stringify(data), - }); - if (!request.ok) { - throw request; - } - const trial = await request.json(); - - debug('ServerApi::activateTrial resolves', trial); - return true; - } - async inviteUser(data) { const request = await sendAuthRequest(`${apiBase()}/invite`, { method: 'POST', @@ -427,32 +412,6 @@ export default class ServerApi { } } - // Payment - async getPlans() { - const request = await sendAuthRequest(`${apiBase()}/payment/plans`); - if (!request.ok) throw request; - const data = await request.json(); - const plan = new PlanModel(data); - debug('ServerApi::getPlans resolves', plan); - return plan; - } - - async getHostedPage(planId) { - const request = await sendAuthRequest(`${apiBase()}/payment/init`, { - method: 'POST', - body: JSON.stringify({ - planId, - }), - }); - if (!request.ok) { - throw request; - } - const data = await request.json(); - - debug('ServerApi::getHostedPage resolves', data); - return data; - } - // News async getLatestNews() { const url = `${apiBase(true)}/news?platform=${osPlatform}&arch=${osArch}&version=${app.getVersion()}`; diff --git a/src/assets/themeInfo.json b/src/assets/themeInfo.json index 0791cf459..54e833789 100644 --- a/src/assets/themeInfo.json +++ b/src/assets/themeInfo.json @@ -1 +1 @@ -{"color":".theme__dark .app .sidebar .sidebar__button.is-muted, .theme__dark .app .sidebar .sidebar__button.is-active, .sidebar .sidebar__button.is-muted, .sidebar .sidebar__button.is-active, .tab-item.is-active, .settings .account .invoices .invoices__action button, .settings-navigation .settings-navigation__link.is-active .badge, a.link, button.link, .auth .welcome .button:hover, .auth .welcome .button__inverted, .franz-form .franz-form__radio.is-selected, .theme__dark .franz-form__button.franz-form__button--inverted, .franz-form__button.franz-form__button--inverted","border-color":".theme__dark .settings .premium-info, .franz-form .franz-form__radio.is-selected","background":".settings .settings__header, .settings .settings__close, .settings-navigation .settings-navigation__link.is-active, a.button, button.button, .auth, .info-bar, .info-bar.info-bar--primary, .infobox.infobox--primary, .theme__dark .badge.badge--primary, .theme__dark .badge.badge--premium, .badge.badge--primary, .badge.badge--premium, .content-tabs .content-tabs__tabs .content-tabs__item.is-active, #electron-app-title-bar .toolbar-dropdown:not(.open) > .toolbar-button > button:hover, #electron-app-title-bar .list-item.selected .menu-item, #electron-app-title-bar .list-item.selected:focus .menu-item, .theme__dark .quick-switch .active, .franz-form .franz-form__toggle-wrapper .franz-form__toggle.is-active .franz-form__toggle-button, .theme__dark .franz-form__button, .franz-form__button, .ferdi__fab, .franz-form .franz-form__slider-wrapper .slider::-webkit-slider-thumb","border-right-color":".settings .settings__header .separator"} \ No newline at end of file +{"color":".theme__dark .app .sidebar .sidebar__button.is-muted, .theme__dark .app .sidebar .sidebar__button.is-active, .sidebar .sidebar__button.is-muted, .sidebar .sidebar__button.is-active, .tab-item.is-active, .settings .account .invoices .invoices__action button, .settings-navigation .settings-navigation__link.is-active .badge, a.link, button.link, .auth .welcome .button:hover, .auth .welcome .button__inverted, .franz-form .franz-form__radio.is-selected, .theme__dark .franz-form__button.franz-form__button--inverted, .franz-form__button.franz-form__button--inverted","border-color":".theme__dark .settings, .franz-form .franz-form__radio.is-selected","background":".settings .settings__header, .settings .settings__close, .settings-navigation .settings-navigation__link.is-active, a.button, button.button, .auth, .info-bar, .info-bar.info-bar--primary, .infobox.infobox--primary, .theme__dark .badge.badge--primary, .theme__dark, .badge.badge--primary, .content-tabs .content-tabs__tabs .content-tabs__item.is-active, #electron-app-title-bar .toolbar-dropdown:not(.open) > .toolbar-button > button:hover, #electron-app-title-bar .list-item.selected .menu-item, #electron-app-title-bar .list-item.selected:focus .menu-item, .theme__dark .quick-switch .active, .franz-form .franz-form__toggle-wrapper .franz-form__toggle.is-active .franz-form__toggle-button, .theme__dark .franz-form__button, .franz-form__button, .ferdi__fab, .franz-form .franz-form__slider-wrapper .slider::-webkit-slider-thumb","border-right-color":".settings .settings__header .separator"} diff --git a/src/components/TrialActivationInfoBar.js b/src/components/TrialActivationInfoBar.js deleted file mode 100644 index 77ab97565..000000000 --- a/src/components/TrialActivationInfoBar.js +++ /dev/null @@ -1,94 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { defineMessages, intlShape } from 'react-intl'; -import ms from 'ms'; -import injectSheet from 'react-jss'; -import classnames from 'classnames'; - -import InfoBar from './ui/InfoBar'; - -const messages = defineMessages({ - message: { - id: 'infobar.trialActivated', - defaultMessage: '!!!Your trial was successfully activated. Happy messaging!', - }, -}); - -const styles = { - notification: { - height: 'auto', - position: 'absolute', - top: -50, - transition: 'top 0.3s', - zIndex: 500, - width: 'calc(100% - 300px)', - }, - show: { - top: 0, - }, -}; - -@injectSheet(styles) -class TrialActivationInfoBar extends Component { - static propTypes = { - // eslint-disable-next-line - classes: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - state = { - showing: false, - removed: false, - } - - componentDidMount() { - setTimeout(() => { - this.setState({ - showing: true, - }); - }, 0); - - setTimeout(() => { - this.setState({ - showing: false, - }); - }, ms('6s')); - - setTimeout(() => { - this.setState({ - removed: true, - }); - }, ms('7s')); - } - - render() { - const { classes } = this.props; - const { showing, removed } = this.state; - const { intl } = this.context; - - if (removed) return null; - - return ( -
- - - {intl.formatMessage(messages.message)} - -
- ); - } -} - -export default TrialActivationInfoBar; diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js deleted file mode 100644 index 2fcabe54d..000000000 --- a/src/components/auth/Pricing.js +++ /dev/null @@ -1,270 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import injectSheet from 'react-jss'; -import { H2, Loader } from '@meetfranz/ui'; -import classnames from 'classnames'; - -import { Button } from '@meetfranz/forms'; -import { FeatureItem } from '../ui/FeatureItem'; -import { FeatureList } from '../ui/FeatureList'; - -const messages = defineMessages({ - headline: { - id: 'pricing.trial.headline.pro', - defaultMessage: '!!!Hi {name}, welcome to Franz', - }, - specialTreat: { - id: 'pricing.trial.intro.specialTreat', - defaultMessage: '!!!We have a special treat for you.', - }, - tryPro: { - id: 'pricing.trial.intro.tryPro', - defaultMessage: '!!!Enjoy the full Franz Professional experience completely free for 14 days.', - }, - happyMessaging: { - id: 'pricing.trial.intro.happyMessaging', - defaultMessage: '!!!Happy messaging,', - }, - noStringsAttachedHeadline: { - id: 'pricing.trial.terms.headline', - defaultMessage: '!!!No strings attached', - }, - noCreditCard: { - id: 'pricing.trial.terms.noCreditCard', - defaultMessage: '!!!No credit card required', - }, - automaticTrialEnd: { - id: 'pricing.trial.terms.automaticTrialEnd', - defaultMessage: '!!!Your free trial ends automatically after 14 days', - }, - trialWorth: { - id: 'pricing.trial.terms.trialWorth', - defaultMessage: '!!!Free trial (normally {currency}{price} per month)', - }, - activationError: { - id: 'pricing.trial.error', - defaultMessage: '!!!Sorry, we could not activate your trial!', - }, - ctaAccept: { - id: 'pricing.trial.cta.accept', - defaultMessage: '!!!Start my 14-day Franz Professional Trial ', - }, - ctaStart: { - id: 'pricing.trial.cta.start', - defaultMessage: '!!!Start using Franz', - }, - ctaSkip: { - id: 'pricing.trial.cta.skip', - defaultMessage: '!!!Continue to Ferdi', - }, - featuresHeadline: { - id: 'pricing.trial.features.headline', - defaultMessage: '!!!Franz Professional includes:', - }, -}); - -const styles = theme => ({ - root: { - width: '500px !important', - textAlign: 'center', - padding: 20, - zIndex: 100, - - '& h1': { - }, - }, - container: { - position: 'relative', - marginLeft: -150, - }, - welcomeOffer: { - textAlign: 'center', - fontWeight: 'bold', - marginBottom: '6 !important', - }, - keyTerms: { - textAlign: 'center', - }, - content: { - position: 'relative', - zIndex: 20, - }, - featureContainer: { - width: 300, - position: 'absolute', - left: 'calc(100% / 2 + 250px)', - marginTop: 20, - background: theme.signup.pricing.feature.background, - height: 'auto', - padding: 20, - borderTopRightRadius: theme.borderRadius, - borderBottomRightRadius: theme.borderRadius, - zIndex: 10, - }, - featureItem: { - borderBottom: [1, 'solid', theme.signup.pricing.feature.border], - }, - cta: { - marginTop: 40, - width: '100%', - }, - skipLink: { - textAlign: 'center', - marginTop: 10, - }, - error: { - margin: [20, 0, 0], - color: theme.styleTypes.danger.accent, - }, - priceContainer: { - display: 'flex', - justifyContent: 'space-evenly', - margin: [10, 0, 15], - }, - price: { - '& sup': { - verticalAlign: 14, - fontSize: 20, - }, - }, - figure: { - fontSize: 40, - }, - regularPrice: { - position: 'relative', - - '&:before': { - content: '" "', - position: 'absolute', - width: '130%', - height: 1, - top: 14, - left: -12, - borderBottom: [3, 'solid', 'red'], - transform: 'rotateZ(-20deg)', - }, - }, -}); - -export default @injectSheet(styles) @observer class Signup extends Component { - static propTypes = { - onSubmit: PropTypes.func.isRequired, - isLoadingRequiredData: PropTypes.bool.isRequired, - isActivatingTrial: PropTypes.bool.isRequired, - trialActivationError: PropTypes.bool.isRequired, - canSkipTrial: PropTypes.bool.isRequired, - classes: PropTypes.object.isRequired, - currency: PropTypes.string.isRequired, - price: PropTypes.number.isRequired, - name: PropTypes.string.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { - onSubmit, - isLoadingRequiredData, - isActivatingTrial, - trialActivationError, - canSkipTrial, - classes, - currency, - price, - name, - } = this.props; - const { intl } = this.context; - - const [intPart, fractionPart] = (price).toString().split('.'); - - return ( - <> -
-
- {isLoadingRequiredData ? : ( - - )} -

{intl.formatMessage(messages.headline, { name })}

-
-

- {intl.formatMessage(messages.specialTreat)} -
-

-

- {intl.formatMessage(messages.tryPro)} -
-

-

- {intl.formatMessage(messages.happyMessaging)} -

-

- Stefan Malzner -

-
-
-

- - {currency} - {intPart} - - {fractionPart} -

-

- - {currency} - 0 - - 00 -

-
-
-

- {intl.formatMessage(messages.noStringsAttachedHeadline)} -

-
    - - - -
-
- {trialActivationError && ( -

{intl.formatMessage(messages.activationError)}

- )} -
-
-

- {intl.formatMessage(messages.featuresHeadline)} -

- -
- - ); - } -} diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index a60270a6f..7e4d0e53e 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js @@ -19,10 +19,7 @@ import { isWindows } from '../../environment'; import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; import { workspaceStore } from '../../features/workspaces'; import AppUpdateInfoBar from '../AppUpdateInfoBar'; -import TrialActivationInfoBar from '../TrialActivationInfoBar'; import Todos from '../../features/todos/containers/TodosScreen'; -import PlanSelection from '../../features/planSelection/containers/PlanSelectionScreen'; -import TrialStatusBar from '../../features/trialStatusBar/containers/TrialStatusBarScreen'; function createMarkup(HTMLString) { return { __html: HTMLString }; @@ -79,7 +76,6 @@ class AppLayout extends Component { areRequiredRequestsSuccessful: PropTypes.bool.isRequired, retryRequiredRequests: PropTypes.func.isRequired, areRequiredRequestsLoading: PropTypes.bool.isRequired, - hasActivatedTrial: PropTypes.bool.isRequired, }; state = { @@ -115,7 +111,6 @@ class AppLayout extends Component { areRequiredRequestsSuccessful, retryRequiredRequests, areRequiredRequestsLoading, - hasActivatedTrial, } = this.props; const { intl } = this.context; @@ -148,9 +143,6 @@ class AppLayout extends Component { /> ))} - {hasActivatedTrial && ( - - )} {!areRequiredRequestsSuccessful && showRequiredRequestsError && ( {services} {children} - - ); diff --git a/src/components/services/content/ServiceRestricted.js b/src/components/services/content/ServiceRestricted.js deleted file mode 100644 index 4b8d926aa..000000000 --- a/src/components/services/content/ServiceRestricted.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; - -import { serviceLimitStore } from '../../../features/serviceLimit'; -import Button from '../../ui/Button'; -import { RESTRICTION_TYPES } from '../../../models/Service'; - -const messages = defineMessages({ - headlineServiceLimit: { - id: 'service.restrictedHandler.serviceLimit.headline', - defaultMessage: '!!!You have reached your service limit.', - }, - textServiceLimit: { - id: 'service.restrictedHandler.serviceLimit.text', - defaultMessage: '!!!Please upgrade your account to use more than {count} services.', - }, - headlineCustomUrl: { - id: 'service.restrictedHandler.customUrl.headline', - defaultMessage: '!!!Franz Professional Plan required', - }, - textCustomUrl: { - id: 'service.restrictedHandler.customUrl.text', - defaultMessage: '!!!Please upgrade to the Franz Professional plan to use custom urls & self hosted services.', - }, - action: { - id: 'service.restrictedHandler.action', - defaultMessage: '!!!Upgrade Account', - }, -}); - -export default @observer class ServiceRestricted extends Component { - static propTypes = { - name: PropTypes.string.isRequired, - upgrade: PropTypes.func.isRequired, - type: PropTypes.number.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - countdownInterval = null; - - countdownIntervalTimeout = 1000; - - render() { - const { - name, - upgrade, - type, - } = this.props; - const { intl } = this.context; - - return ( -
- {type === RESTRICTION_TYPES.SERVICE_LIMIT && ( - <> -

{intl.formatMessage(messages.headlineServiceLimit)}

-

{intl.formatMessage(messages.textServiceLimit, { count: serviceLimitStore.serviceLimit })}

- - )} - {type === RESTRICTION_TYPES.CUSTOM_URL && ( - <> -

{intl.formatMessage(messages.headlineCustomUrl)}

-

{intl.formatMessage(messages.textCustomUrl)}

- - )} -
- ); - } -} diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index caa3cf9aa..6e46a60d2 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js @@ -54,7 +54,6 @@ export default @injectSheet(styles) @inject('actions') @observer class Services openSettings: PropTypes.func.isRequired, update: PropTypes.func.isRequired, userHasCompletedSignup: PropTypes.bool.isRequired, - hasActivatedTrial: PropTypes.bool.isRequired, classes: PropTypes.object.isRequired, actions: PropTypes.object.isRequired, isSpellcheckerEnabled: PropTypes.bool.isRequired, @@ -109,7 +108,6 @@ export default @injectSheet(styles) @inject('actions') @observer class Services openSettings, update, userHasCompletedSignup, - hasActivatedTrial, classes, isSpellcheckerEnabled, } = this.props; @@ -123,7 +121,7 @@ export default @injectSheet(styles) @inject('actions') @observer class Services return (
- {(userHasCompletedSignup || hasActivatedTrial) && ( + {userHasCompletedSignup && (
openSettings({ path: 'user' })} isSpellcheckerEnabled={isSpellcheckerEnabled} /> ))} diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 68d88e218..d3d75a979 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js @@ -3,14 +3,11 @@ import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; import ReactTooltip from 'react-tooltip'; -import { ProBadge, H1, H2 } from '@meetfranz/ui'; -import moment from 'moment'; +import { H1, H2 } from '@meetfranz/ui'; import Loader from '../../ui/Loader'; import Button from '../../ui/Button'; import Infobox from '../../ui/Infobox'; -import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; -import { i18nPlanName } from '../../../helpers/plan-helpers'; import { LOCAL_SERVER, LIVE_FRANZ_API } from '../../../config'; const messages = defineMessages({ @@ -30,18 +27,6 @@ const messages = defineMessages({ id: 'settings.account.manageSubscription.label', defaultMessage: '!!!Manage your subscription', }, - upgradeAccountToPro: { - id: 'settings.account.upgradeToPro.label', - defaultMessage: '!!!Upgrade to Franz Professional', - }, - accountTypeBasic: { - id: 'settings.account.accountType.basic', - defaultMessage: '!!!Basic Account', - }, - accountTypePremium: { - id: 'settings.account.accountType.premium', - defaultMessage: '!!!Premium Supporter Account', - }, accountEditButton: { id: 'settings.account.account.editButton', defaultMessage: '!!!Edit Account', @@ -76,23 +61,10 @@ const messages = defineMessages({ defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', }, - trial: { - id: 'settings.account.trial', - defaultMessage: '!!!Free Trial', - }, yourLicense: { id: 'settings.account.yourLicense', defaultMessage: '!!!Your Franz License:', }, - trialEndsIn: { - id: 'settings.account.trialEndsIn', - defaultMessage: '!!!Your free trial ends in {duration}.', - }, - trialUpdateBillingInformation: { - id: 'settings.account.trialUpdateBillingInfo', - defaultMessage: - '!!!Please update your billing info to continue using {license} after your trial period.', - }, accountUnavailable: { id: 'settings.account.accountUnavailable', defaultMessage: 'Account is unavailable', @@ -107,8 +79,6 @@ const messages = defineMessages({ class AccountDashboard extends Component { static propTypes = { user: MobxPropTypes.observableObject.isRequired, - isPremiumOverrideUser: PropTypes.bool.isRequired, - isProUser: PropTypes.bool.isRequired, isLoading: PropTypes.bool.isRequired, userInfoRequestFailed: PropTypes.bool.isRequired, retryUserInfoRequest: PropTypes.func.isRequired, @@ -116,10 +86,7 @@ class AccountDashboard extends Component { isLoadingDeleteAccount: PropTypes.bool.isRequired, isDeleteAccountSuccessful: PropTypes.bool.isRequired, openEditAccount: PropTypes.func.isRequired, - openBilling: PropTypes.func.isRequired, - upgradeToPro: PropTypes.func.isRequired, openInvoices: PropTypes.func.isRequired, - onCloseSubscriptionWindow: PropTypes.func.isRequired, server: PropTypes.string.isRequired, }; @@ -130,8 +97,6 @@ class AccountDashboard extends Component { render() { const { user, - isPremiumOverrideUser, - isProUser, isLoading, userInfoRequestFailed, retryUserInfoRequest, @@ -139,20 +104,11 @@ class AccountDashboard extends Component { isLoadingDeleteAccount, isDeleteAccountSuccessful, openEditAccount, - openBilling, - upgradeToPro, openInvoices, - onCloseSubscriptionWindow, server, } = this.props; const { intl } = this.context; - let planName = ''; - - if (user.team && user.team.plan) { - planName = i18nPlanName(user.team.plan, intl); - } - const isUsingWithoutAccount = server === LOCAL_SERVER; const isUsingFranzServer = server === LIVE_FRANZ_API; @@ -210,96 +166,38 @@ class AccountDashboard extends Component {

{`${user.firstname} ${user.lastname}`} - {user.isPremium && ( - <> - {' '} - - - )}

{user.organization && `${user.organization}, `} {user.email}

- {user.isPremium && ( -
-
- )} +
+
- {!user.isPremium && ( -
- {user.isPremium && user.isSubscriptionOwner && isUsingFranzServer && ( + {user.isSubscriptionOwner && isUsingFranzServer && (

{intl.formatMessage(messages.yourLicense)}

Franz - {' '} - {isPremiumOverrideUser ? 'Premium' : planName} - {user.team.isTrial && ( - <> - {' – '} - {intl.formatMessage(messages.trial)} - - )}

- {user.team.isTrial && ( - <> -
-

- {intl.formatMessage(messages.trialEndsIn, { - duration: moment - .duration( - moment().diff(user.team.trialEnd), - ) - .humanize(), - })} -

-

- {intl.formatMessage( - messages.trialUpdateBillingInformation, - { - license: planName, - }, - )} -

- - )} - {!isProUser && ( -
-
- )}
-
)} - {!user.isPremium && ( -
-
- -
-
- )} )} diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js index cebab2f12..02cae6b69 100644 --- a/src/components/settings/navigation/SettingsNavigation.js +++ b/src/components/settings/navigation/SettingsNavigation.js @@ -2,7 +2,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, intlShape } from 'react-intl'; import { inject, observer } from 'mobx-react'; -import { ProBadge } from '@meetfranz/ui'; import { RouterStore } from 'mobx-react-router'; import { LOCAL_SERVER, LIVE_FERDI_API, LIVE_FRANZ_API } from '../../../config'; @@ -11,7 +10,6 @@ import { workspaceStore } from '../../../features/workspaces'; import UIStore from '../../../stores/UIStore'; import SettingsStore from '../../../stores/SettingsStore'; import UserStore from '../../../stores/UserStore'; -import { serviceLimitStore } from '../../../features/serviceLimit'; const messages = defineMessages({ availableServices: { @@ -98,8 +96,6 @@ export default @inject('stores', 'actions') @observer class SettingsNavigation e render() { const { serviceCount, workspaceCount, stores } = this.props; - const { isDarkThemeActive } = stores.ui; - const { router, user } = stores; const { intl } = this.context; const isLoggedIn = Boolean(localStorage.getItem('authToken')); const isUsingWithoutAccount = stores.settings.app.server === LOCAL_SERVER; @@ -124,9 +120,6 @@ export default @inject('stores', 'actions') @observer class SettingsNavigation e {' '} {serviceCount} - {serviceLimitStore.serviceLimit !== 0 && ( - `/${serviceLimitStore.serviceLimit}` - )} {workspaceStore.isFeatureEnabled ? ( @@ -138,11 +131,7 @@ export default @inject('stores', 'actions') @observer class SettingsNavigation e > {intl.formatMessage(messages.yourWorkspaces)} {' '} - {workspaceStore.isPremiumUpgradeRequired ? ( - - ) : ( - {workspaceCount} - )} + {workspaceCount} ) : null} {!isUsingWithoutAccount && ( @@ -163,9 +152,6 @@ export default @inject('stores', 'actions') @observer class SettingsNavigation e disabled={!isLoggedIn} > {intl.formatMessage(messages.team)} - {!user.data.isPremium && ( - - )} )}

{intl.formatMessage(messages.headline)}

-
{serviceStatus.length > 0 && serviceStatus.includes('created') && ( @@ -223,9 +218,6 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com <>

{intl.formatMessage(messages.headlineCustomRecipes)} - {!isCommunityRecipesIncludedInCurrentPlan && ( - - )}

@@ -251,37 +243,33 @@ export default @injectSheet(styles) @observer class RecipesDashboard extends Com

)} - 0) && !isCommunityRecipesIncludedInCurrentPlan} - > - {recipeFilter === 'dev' && communityRecipes.length > 0 && ( -

{intl.formatMessage(messages.headlineCommunityRecipes)}

- )} -
- {hasLoadedRecipes && recipes.length === 0 && recipeFilter !== 'dev' && ( -
- - - + {recipeFilter === 'dev' && communityRecipes.length > 0 && ( +

{intl.formatMessage(messages.headlineCommunityRecipes)}

+ )} +
+ {hasLoadedRecipes && recipes.length === 0 && recipeFilter !== 'dev' && ( +
+ + + -

{intl.formatMessage(messages.nothingFound)}

+

{intl.formatMessage(messages.nothingFound)}

- isLoggedIn && showAddServiceInterface({ recipeId: customWebsiteRecipe.id })} - /> -
- )} - {communityRecipes.map(recipe => ( isLoggedIn && showAddServiceInterface({ recipeId: recipe.id })} + key={customWebsiteRecipe.id} + recipe={customWebsiteRecipe} + onClick={() => isLoggedIn && showAddServiceInterface({ recipeId: customWebsiteRecipe.id })} /> - ))} -
- +
+ )} + {communityRecipes.map(recipe => ( + isLoggedIn && showAddServiceInterface({ recipeId: recipe.id })} + /> + ))} +
{recipeFilter === 'dev' && devRecipes.length > 0 && (

{intl.formatMessage(messages.headlineDevRecipes)}

diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index 513c75eed..0f7c29de5 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js @@ -6,7 +6,6 @@ import { defineMessages, intlShape } from 'react-intl'; import normalizeUrl from 'normalize-url'; import Form from '../../../lib/Form'; -import User from '../../../models/User'; import Recipe from '../../../models/Recipe'; import Service from '../../../models/Service'; import Tabs, { TabItem } from '../../ui/Tabs'; @@ -17,9 +16,6 @@ import Button from '../../ui/Button'; import ImageUpload from '../../ui/ImageUpload'; import Select from '../../ui/Select'; -import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; -import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox'; -import { serviceLimitStore } from '../../../features/serviceLimit'; import { isMac } from '../../../environment'; import globalMessages from '../../../i18n/globalMessages'; @@ -80,14 +76,6 @@ const messages = defineMessages({ id: 'settings.service.form.customUrlValidationError', defaultMessage: '!!!Could not validate custom {name} server.', }, - customUrlPremiumInfo: { - id: 'settings.service.form.customUrlPremiumInfo', - defaultMessage: '!!!To add self hosted services, you need a Ferdi Premium Supporter Account.', - }, - customUrlUpgradeAccount: { - id: 'settings.service.form.customUrlUpgradeAccount', - defaultMessage: '!!!Upgrade your account', - }, indirectMessageInfo: { id: 'settings.service.form.indirectMessageInfo', defaultMessage: '!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...', @@ -149,7 +137,6 @@ export default @observer class EditServiceForm extends Component { return null; }, - user: PropTypes.instanceOf(User).isRequired, action: PropTypes.string.isRequired, form: PropTypes.instanceOf(Form).isRequired, onSubmit: PropTypes.func.isRequired, @@ -158,8 +145,6 @@ export default @observer class EditServiceForm extends Component { isSaving: PropTypes.bool.isRequired, isDeleting: PropTypes.bool.isRequired, isProxyFeatureEnabled: PropTypes.bool.isRequired, - isServiceProxyIncludedInCurrentPlan: PropTypes.bool.isRequired, - isSpellcheckerIncludedInCurrentPlan: PropTypes.bool.isRequired, isHibernationFeatureActive: PropTypes.bool.isRequired, }; @@ -217,15 +202,12 @@ export default @observer class EditServiceForm extends Component { recipe, service, action, - user, form, isSaving, isDeleting, onDelete, openRecipeFile, isProxyFeatureEnabled, - isServiceProxyIncludedInCurrentPlan, - isSpellcheckerIncludedInCurrentPlan, isHibernationFeatureActive, } = this.props; const { intl } = this.context; @@ -285,7 +267,6 @@ export default @observer class EditServiceForm extends Component { )}
-
this.submit(e)} id="form">
@@ -311,24 +292,11 @@ export default @observer class EditServiceForm extends Component { )} {recipe.hasCustomUrl && ( - {user.isPremium || recipe.author.find(a => a.email === user.email) ? ( - <> - - {form.error === 'url-validation-error' && ( -

- {intl.formatMessage(messages.customUrlValidationError, { name: recipe.name })} -

- )} - - ) : ( -
-

{intl.formatMessage(messages.customUrlPremiumInfo)}

-

- - {intl.formatMessage(messages.customUrlUpgradeAccount)} - -

-
+ + {form.error === 'url-validation-error' && ( +

+ {intl.formatMessage(messages.customUrlValidationError, { name: recipe.name })} +

)}
)} @@ -403,56 +371,46 @@ export default @observer class EditServiceForm extends Component {
{!isMac && ( - -
- +
)} {isProxyFeatureEnabled && ( - -
-

- {intl.formatMessage(messages.headlineProxy)} - beta -

- - {form.$('proxy.isEnabled').value && ( - <> -
-
- - -
+
+

+ {intl.formatMessage(messages.headlineProxy)} + beta +

+ + {form.$('proxy.isEnabled').value && ( + <> +
+
+ +
-
-
- - -
+
+
+
+ +
-

- - {intl.formatMessage(messages.proxyRestartInfo)} -

-

- - {intl.formatMessage(messages.proxyInfo)} -

- - )} -
- +
+

+ + {intl.formatMessage(messages.proxyRestartInfo)} +

+

+ + {intl.formatMessage(messages.proxyInfo)} +

+ + )} +
)}
@@ -512,7 +470,7 @@ export default @observer class EditServiceForm extends Component { type="submit" label={intl.formatMessage(messages.saveService)} htmlForm="form" - disabled={action !== 'edit' && ((form.isPristine && requiresUserInput) || serviceLimitStore.userHasReachedServiceLimit)} + disabled={action !== 'edit' && (form.isPristine && requiresUserInput)} /> )}
diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js index a0f05fd20..a05af5da0 100644 --- a/src/components/settings/services/ServicesDashboard.js +++ b/src/components/settings/services/ServicesDashboard.js @@ -10,7 +10,6 @@ import Loader from '../../ui/Loader'; import FAB from '../../ui/FAB'; import ServiceItem from './ServiceItem'; import Appear from '../../ui/effects/Appear'; -import LimitReachedInfobox from '../../../features/serviceLimit/components/LimitReachedInfobox'; const messages = defineMessages({ headline: { @@ -93,7 +92,6 @@ export default @observer class ServicesDashboard extends Component {

{intl.formatMessage(messages.headline)}

-
{(services.length !== 0 || searchNeedle) && !isLoading && ( - - <> - - {!isMac && form.$('enableSpellchecking').value && ( - + )} + {isMac && form.$('enableSpellchecking').value && ( +

{intl.formatMessage(messages.spellCheckerLanguageInfo)}

+ )} +

{intl.formatMessage(messages.contentHeadline)}

- {!isProUser && ( - {intl.formatMessage(globalMessages.proRequired)} - )}

{intl.formatMessage(messages.intro)}

{intl.formatMessage(messages.copy)}

- Franz for Teams + Ferdi for Teams
- {!isProUser ? ( - - ) : ( -
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js deleted file mode 100644 index ec486e5d0..000000000 --- a/src/components/subscription/SubscriptionForm.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import injectSheet from 'react-jss'; - -import { H3, H2 } from '@meetfranz/ui'; - -import { Button } from '@meetfranz/forms'; -import { FeatureList } from '../ui/FeatureList'; - -const messages = defineMessages({ - submitButtonLabel: { - id: 'subscription.cta.choosePlan', - defaultMessage: '!!!Choose your plan', - }, - teaserHeadline: { - id: 'settings.account.headlineUpgradeAccount', - defaultMessage: '!!!Upgrade your account and get the full Franz experience', - }, - teaserText: { - id: 'subscription.teaser.intro', - defaultMessage: '!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!', - }, - includedFeatures: { - id: 'subscription.teaser.includedFeatures', - defaultMessage: '!!!Paid Franz Plans include:', - }, -}); - -const styles = () => ({ - activateTrialButton: { - margin: [40, 'auto', 50], - display: 'flex', - }, -}); - -export default @injectSheet(styles) @observer class SubscriptionForm extends Component { - static propTypes = { - selectPlan: PropTypes.func.isRequired, - isActivatingTrial: PropTypes.bool.isRequired, - classes: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { - isActivatingTrial, - selectPlan, - classes, - } = this.props; - const { intl } = this.context; - - return ( - <> -

{intl.formatMessage(messages.teaserHeadline)}

-

{intl.formatMessage(messages.teaserText)}

-
-
- ); - } -} diff --git a/src/components/subscription/TrialForm.js b/src/components/subscription/TrialForm.js deleted file mode 100644 index d61b779ed..000000000 --- a/src/components/subscription/TrialForm.js +++ /dev/null @@ -1,115 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import injectSheet from 'react-jss'; - -import { H3, H2 } from '@meetfranz/ui'; - -import { Button } from '@meetfranz/forms'; -import { FeatureList } from '../ui/FeatureList'; -import { FeatureItem } from '../ui/FeatureItem'; - -const messages = defineMessages({ - submitButtonLabel: { - id: 'subscription.cta.activateTrial', - defaultMessage: '!!!Yes, start the free Franz Professional trial', - }, - allOptionsButton: { - id: 'subscription.cta.allOptions', - defaultMessage: '!!!See all options', - }, - teaserHeadline: { - id: 'settings.account.headlineTrialUpgrade', - defaultMessage: '!!!Get the free 14 day Franz Professional Trial', - }, - includedFeatures: { - id: 'subscription.includedProFeatures', - defaultMessage: '!!!The Franz Professional Plan includes:', - }, - noStringsAttachedHeadline: { - id: 'pricing.trial.terms.headline', - defaultMessage: '!!!No strings attached', - }, - noCreditCard: { - id: 'pricing.trial.terms.noCreditCard', - defaultMessage: '!!!No credit card required', - }, - automaticTrialEnd: { - id: 'pricing.trial.terms.automaticTrialEnd', - defaultMessage: '!!!Your free trial ends automatically after 14 days', - }, -}); - -const styles = theme => ({ - activateTrialButton: { - margin: [40, 'auto', 10], - display: 'flex', - }, - allOptionsButton: { - margin: [0, 0, 40], - background: 'none', - border: 'none', - color: theme.colorText, - }, - keyTerms: { - marginTop: 20, - }, -}); - -export default @injectSheet(styles) @observer class TrialForm extends Component { - static propTypes = { - activateTrial: PropTypes.func.isRequired, - isActivatingTrial: PropTypes.bool.isRequired, - showAllOptions: PropTypes.func.isRequired, - classes: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { - isActivatingTrial, - activateTrial, - showAllOptions, - classes, - } = this.props; - const { intl } = this.context; - - return ( - <> -

{intl.formatMessage(messages.teaserHeadline)}

-

- {intl.formatMessage(messages.noStringsAttachedHeadline)} -

-
    - - -
- - -
-
- {children} -
-
- ) : children; - } -} - -PremiumFeatureContainer.wrappedComponent.propTypes = { - children: oneOrManyChildElements.isRequired, - stores: PropTypes.shape({ - user: PropTypes.instanceOf(UserStore).isRequired, - features: PropTypes.instanceOf(FeaturesStore).isRequired, - }).isRequired, - actions: PropTypes.shape({ - ui: PropTypes.instanceOf(UIStore).isRequired, - }).isRequired, -}; - -export default PremiumFeatureContainer; diff --git a/src/components/ui/PremiumFeatureContainer/styles.js b/src/components/ui/PremiumFeatureContainer/styles.js deleted file mode 100644 index 41881e044..000000000 --- a/src/components/ui/PremiumFeatureContainer/styles.js +++ /dev/null @@ -1,34 +0,0 @@ -export default theme => ({ - container: { - background: theme.colorSubscriptionContainerBackground, - border: theme.colorSubscriptionContainerBorder, - margin: [0, 0, 20, -20], - padding: 20, - 'border-radius': theme.borderRadius, - pointerEvents: 'none', - height: 'auto', - }, - titleContainer: { - display: 'flex', - }, - title: { - 'font-weight': 'bold', - color: theme.colorSubscriptionContainerTitle, - }, - actionButton: { - background: theme.colorSubscriptionContainerActionButtonBackground, - color: theme.colorSubscriptionContainerActionButtonColor, - 'margin-left': 'auto', - 'border-radius': theme.borderRadiusSmall, - padding: [4, 8], - 'font-size': 12, - pointerEvents: 'initial', - }, - content: { - opacity: 0.5, - 'margin-top': 20, - '& > :last-child': { - 'margin-bottom': 0, - }, - }, -}); diff --git a/src/components/ui/UpgradeButton/index.js b/src/components/ui/UpgradeButton/index.js deleted file mode 100644 index eade46cfd..000000000 --- a/src/components/ui/UpgradeButton/index.js +++ /dev/null @@ -1,83 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { inject, observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; - -import { Button } from '@meetfranz/forms'; - -import UserStore from '../../../stores/UserStore'; -import ActivateTrialButton from '../ActivateTrialButton'; -import UIStore from '../../../stores/UIStore'; - -const messages = defineMessages({ - upgradeToPro: { - id: 'global.upgradeButton.upgradeToPro', - defaultMessage: '!!!Upgrade to Franz Professional', - }, -}); - -@inject('stores', 'actions') @observer -class UpgradeButton extends Component { - static propTypes = { - // eslint-disable-next-line - classes: PropTypes.object.isRequired, - className: PropTypes.string, - gaEventInfo: PropTypes.shape({ - category: PropTypes.string.isRequired, - event: PropTypes.string.isRequired, - label: PropTypes.string, - }), - requiresPro: PropTypes.bool, - }; - - static defaultProps = { - className: '', - gaEventInfo: null, - requiresPro: false, - } - - static contextTypes = { - intl: intlShape, - }; - - handleCTAClick() { - const { actions } = this.props; - - actions.ui.openSettings({ path: 'user' }); - } - - render() { - const { stores, requiresPro } = this.props; - const { intl } = this.context; - - const { isPremium, isPersonal } = stores.user; - - if (isPremium && isPersonal && requiresPro) { - return ( -
- ); - } -} - -DelayApp.wrappedComponent.propTypes = { - stores: PropTypes.shape({ - user: PropTypes.instanceOf(UserStore).isRequired, - features: PropTypes.instanceOf(FeatureStore).isRequired, - }).isRequired, - actions: PropTypes.shape({ - ui: PropTypes.instanceOf(UIStore).isRequired, - user: PropTypes.instanceOf(UserStore).isRequired, - }).isRequired, -}; diff --git a/src/features/delayApp/constants.js b/src/features/delayApp/constants.js deleted file mode 100644 index 72cc4246e..000000000 --- a/src/features/delayApp/constants.js +++ /dev/null @@ -1,6 +0,0 @@ -import { DEFAULT_FEATURES_CONFIG } from '../../config'; - -export const config = { - delayOffset: DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.delayOffset, - delayDuration: DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait, -}; diff --git a/src/features/delayApp/index.js b/src/features/delayApp/index.js deleted file mode 100644 index f0c2bdc82..000000000 --- a/src/features/delayApp/index.js +++ /dev/null @@ -1,80 +0,0 @@ -import { autorun, observable, reaction } from 'mobx'; -import moment from 'moment'; -import DelayAppComponent from './Component'; -import { config } from './constants'; -import { DEFAULT_FEATURES_CONFIG } from '../../config'; -import { getUserWorkspacesRequest } from '../workspaces/api'; - -const debug = require('debug')('Ferdi:feature:delayApp'); - -export const state = observable({ - isDelayAppScreenVisible: DEFAULT_FEATURES_CONFIG.needToWaitToProceed, -}); - -function setVisibility(value) { - Object.assign(state, { - isDelayAppScreenVisible: value, - }); -} - -export default function init(stores) { - debug('Initializing `delayApp` feature'); - - let shownAfterLaunch = false; - let timeLastDelay = moment(); - - window.ferdi.features.delayApp = { - state, - }; - - reaction( - () => ( - stores.user.isLoggedIn - && stores.services.allServicesRequest.wasExecuted - && getUserWorkspacesRequest.wasExecuted - && stores.features.features.needToWaitToProceed - && !stores.user.data.isPremium - ), - (isEnabled) => { - if (isEnabled) { - debug('Enabling `delayApp` feature'); - - const { needToWaitToProceedConfig: globalConfig } = stores.features.features; - - config.delayOffset = globalConfig.delayOffset !== undefined ? globalConfig.delayOffset : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.delayOffset; - config.delayDuration = globalConfig.wait !== undefined ? globalConfig.wait : DEFAULT_FEATURES_CONFIG.needToWaitToProceedConfig.wait; - - autorun(() => { - const { isAnnouncementShown } = stores.announcements; - if (stores.services.allDisplayed.length === 0 || isAnnouncementShown) { - shownAfterLaunch = true; - setVisibility(false); - return; - } - - const diff = moment().diff(timeLastDelay); - const itsTimeToWait = diff >= config.delayOffset; - if (!isAnnouncementShown && ((stores.app.isFocused && itsTimeToWait) || !shownAfterLaunch)) { - debug(`App will be delayed for ${config.delayDuration / 1000}s`); - - setVisibility(true); - - setTimeout(() => { - debug('Resetting app delay'); - - shownAfterLaunch = true; - timeLastDelay = moment(); - setVisibility(false); - }, config.delayDuration + 1000); // timer needs to be able to hit 0 - } else { - setVisibility(false); - } - }); - } else { - setVisibility(false); - } - }, - ); -} - -export const Component = DelayAppComponent; diff --git a/src/features/delayApp/styles.js b/src/features/delayApp/styles.js deleted file mode 100644 index 69c3c7a27..000000000 --- a/src/features/delayApp/styles.js +++ /dev/null @@ -1,22 +0,0 @@ -export default theme => ({ - container: { - background: theme.colorBackground, - top: 0, - width: '100%', - display: 'flex', - 'flex-direction': 'column', - 'align-items': 'center', - 'justify-content': 'center', - 'z-index': 150, - }, - headline: { - color: theme.colorHeadline, - margin: [25, 0, 40], - 'max-width': 500, - 'text-align': 'center', - 'line-height': '1.3em', - }, - button: { - margin: [40, 0, 20], - }, -}); diff --git a/src/features/planSelection/actions.js b/src/features/planSelection/actions.js deleted file mode 100644 index 83f58bfd7..000000000 --- a/src/features/planSelection/actions.js +++ /dev/null @@ -1,9 +0,0 @@ -import PropTypes from 'prop-types'; -import { createActionsFromDefinitions } from '../../actions/lib/actions'; - -export const planSelectionActions = createActionsFromDefinitions({ - downgradeAccount: {}, - hideOverlay: {}, -}, PropTypes.checkPropTypes); - -export default planSelectionActions; diff --git a/src/features/planSelection/api.js b/src/features/planSelection/api.js deleted file mode 100644 index 16bf9ff2d..000000000 --- a/src/features/planSelection/api.js +++ /dev/null @@ -1,26 +0,0 @@ -import { sendAuthRequest } from '../../api/utils/auth'; -import Request from '../../stores/lib/Request'; -import apiBase from '../../api/apiBase'; - -const debug = require('debug')('Ferdi:feature:planSelection:api'); - -export const planSelectionApi = { - downgrade: async () => { - const url = `${apiBase()}/payment/downgrade`; - const options = { - method: 'PUT', - }; - debug('downgrade UPDATE', url, options); - const result = await sendAuthRequest(url, options); - debug('downgrade RESULT', result); - if (!result.ok) throw result; - - return result.ok; - }, -}; - -export const downgradeUserRequest = new Request(planSelectionApi, 'downgrade'); - -export const resetApiRequests = () => { - downgradeUserRequest.reset(); -}; diff --git a/src/features/planSelection/components/PlanItem.js b/src/features/planSelection/components/PlanItem.js deleted file mode 100644 index e90532dec..000000000 --- a/src/features/planSelection/components/PlanItem.js +++ /dev/null @@ -1,215 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import injectSheet from 'react-jss'; -import classnames from 'classnames'; -import color from 'color'; - -import { H2 } from '@meetfranz/ui'; - -import { Button } from '@meetfranz/forms'; -import { mdiArrowRight } from '@mdi/js'; - -const messages = defineMessages({ - perMonth: { - id: 'subscription.interval.perMonth', - defaultMessage: '!!!per month', - }, - perMonthPerUser: { - id: 'subscription.interval.perMonthPerUser', - defaultMessage: '!!!per month & user', - }, - bestValue: { - id: 'subscription.bestValue', - defaultMessage: '!!!Best value', - }, -}); - -const styles = theme => ({ - root: { - display: 'flex', - flexDirection: 'column', - borderRadius: theme.borderRadius, - flex: 1, - color: theme.styleTypes.primary.accent, - overflow: 'hidden', - textAlign: 'center', - - '& h2': { - textAlign: 'center', - marginBottom: 10, - fontSize: 30, - color: theme.styleTypes.primary.contrast, - }, - }, - currency: { - fontSize: 35, - }, - priceWrapper: { - height: 50, - marginBottom: 0, - marginTop: ({ text }) => (!text ? 15 : 0), - }, - price: { - fontSize: 50, - - '& sup': { - fontSize: 20, - verticalAlign: 20, - }, - }, - text: { - marginBottom: 'auto', - }, - cta: { - background: theme.styleTypes.primary.accent, - color: theme.styleTypes.primary.contrast, - margin: [30, 'auto', 0, 'auto'], - }, - divider: { - width: 40, - border: 0, - borderTop: [1, 'solid', theme.styleTypes.primary.contrast], - margin: [15, 'auto', 20], - }, - header: { - padding: 20, - background: color(theme.styleTypes.primary.accent).darken(0.25).hex(), - color: theme.styleTypes.primary.contrast, - position: 'relative', - height: 'auto', - }, - content: { - padding: [10, 20, 20], - background: '#EFEFEF', - display: 'flex', - flexDirection: 'column', - justifyContent: 'space-between', - }, - simpleCTA: { - background: 'none', - color: theme.styleTypes.primary.accent, - - '& svg': { - fill: theme.styleTypes.primary.accent, - }, - }, - bestValue: { - background: theme.styleTypes.success.accent, - color: theme.styleTypes.success.contrast, - right: -66, - top: -40, - height: 'auto', - position: 'absolute', - transform: 'rotateZ(45deg)', - textAlign: 'center', - padding: [5, 50], - transformOrigin: 'left bottom', - fontSize: 12, - boxShadow: '0 2px 6px rgba(0,0,0,0.15)', - }, -}); - -export default @observer @injectSheet(styles) class PlanItem extends Component { - static propTypes = { - name: PropTypes.string.isRequired, - text: PropTypes.string.isRequired, - price: PropTypes.number.isRequired, - currency: PropTypes.string.isRequired, - upgrade: PropTypes.func.isRequired, - ctaLabel: PropTypes.string.isRequired, - simpleCTA: PropTypes.bool, - perUser: PropTypes.bool, - classes: PropTypes.object.isRequired, - bestValue: PropTypes.bool, - className: PropTypes.string, - children: PropTypes.element, - }; - - static defaultProps = { - simpleCTA: false, - perUser: false, - children: null, - bestValue: false, - className: '', - } - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { - name, - text, - price, - currency, - classes, - upgrade, - ctaLabel, - simpleCTA, - perUser, - bestValue, - className, - children, - } = this.props; - const { intl } = this.context; - - const priceParts = `${price}`.split('.'); - - return ( -
-
- {bestValue && ( -
- {intl.formatMessage(messages.bestValue)} -
- )} -

{name}

- {text && ( - <> -

- {text} -

-
- - )} -

- {currency} - - {priceParts[0]} - {priceParts[1]} - -

-

- {intl.formatMessage(perUser ? messages.perMonthPerUser : messages.perMonth)} -

-
- -
- {children} - -
- -
- ); - } -} diff --git a/src/features/planSelection/components/PlanSelection.js b/src/features/planSelection/components/PlanSelection.js deleted file mode 100644 index 819a9df5b..000000000 --- a/src/features/planSelection/components/PlanSelection.js +++ /dev/null @@ -1,269 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import injectSheet from 'react-jss'; -import { defineMessages, intlShape } from 'react-intl'; -import { H1, H2, Icon } from '@meetfranz/ui'; -import color from 'color'; - -import { mdiArrowRight } from '@mdi/js'; -import PlanItem from './PlanItem'; -import { i18nPlanName } from '../../../helpers/plan-helpers'; -import { DEV_API_FRANZ_WEBSITE, PLANS } from '../../../config'; -import { FeatureList } from '../../../components/ui/FeatureList'; -import Appear from '../../../components/ui/effects/Appear'; - -const messages = defineMessages({ - welcome: { - id: 'feature.planSelection.fullscreen.welcome', - defaultMessage: '!!!Are you ready to choose, {name}', - }, - subheadline: { - id: 'feature.planSelection.fullscreen.subheadline', - defaultMessage: '!!!It\'s time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.', - }, - textFree: { - id: 'feature.planSelection.free.text', - defaultMessage: '!!!Basic functionality', - }, - textPersonal: { - id: 'feature.planSelection.personal.text', - defaultMessage: '!!!More services, no waiting - ideal for personal use.', - }, - textProfessional: { - id: 'feature.planSelection.pro.text', - defaultMessage: '!!!Unlimited services and professional features for you - and your team.', - }, - ctaStayOnFree: { - id: 'feature.planSelection.cta.stayOnFree', - defaultMessage: '!!!Stay on Free', - }, - ctaDowngradeFree: { - id: 'feature.planSelection.cta.ctaDowngradeFree', - defaultMessage: '!!!Downgrade to Free', - }, - actionTrial: { - id: 'feature.planSelection.cta.trial', - defaultMessage: '!!!Start my free 14-days Trial', - }, - shortActionPersonal: { - id: 'feature.planSelection.cta.upgradePersonal', - defaultMessage: '!!!Choose Personal', - }, - shortActionPro: { - id: 'feature.planSelection.cta.upgradePro', - defaultMessage: '!!!Choose Professional', - }, - fullFeatureList: { - id: 'feature.planSelection.fullFeatureList', - defaultMessage: '!!!Complete comparison of all plans', - }, - pricesBasedOnAnnualPayment: { - id: 'feature.planSelection.pricesBasedOnAnnualPayment', - defaultMessage: '!!!All prices based on yearly payment', - }, -}); - -const styles = theme => ({ - root: { - background: theme.colorModalOverlayBackground, - width: '100%', - height: '100%', - position: 'absolute', - top: 0, - left: 0, - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - zIndex: 999999, - overflowY: 'scroll', - }, - container: { - // width: '80%', - height: 'auto', - // background: theme.styleTypes.primary.accent, - // padding: 40, - borderRadius: theme.borderRadius, - maxWidth: 1000, - - '& h1, & h2': { - textAlign: 'center', - color: theme.styleTypes.primary.contrast, - }, - }, - plans: { - display: 'flex', - margin: [40, 0, 0], - height: 'auto', - - '& > div': { - margin: [0, 15], - flex: 1, - height: 'auto', - background: theme.styleTypes.primary.contrast, - boxShadow: [0, 2, 30, color('#000').alpha(0.1).rgb().string()], - }, - }, - headline: { - fontSize: 40, - }, - subheadline: { - maxWidth: 660, - fontSize: 22, - lineHeight: 1.1, - margin: [0, 'auto'], - }, - featureList: { - '& li': { - borderBottom: [1, 'solid', '#CECECE'], - }, - }, - footer: { - display: 'flex', - color: theme.styleTypes.primary.contrast, - marginTop: 20, - padding: [0, 15], - }, - fullFeatureList: { - marginRight: 'auto', - textAlign: 'center', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - color: `${theme.styleTypes.primary.contrast} !important`, - - '& svg': { - marginRight: 5, - }, - }, - scrollContainer: { - border: '1px solid red', - overflow: 'scroll-x', - }, - featuredPlan: { - transform: ({ isPersonalPlanAvailable }) => (isPersonalPlanAvailable ? 'scale(1.05)' : null), - }, - disclaimer: { - textAlign: 'right', - margin: [10, 15, 0, 0], - }, -}); - -@injectSheet(styles) @observer -class PlanSelection extends Component { - static propTypes = { - classes: PropTypes.object.isRequired, - firstname: PropTypes.string.isRequired, - plans: PropTypes.object.isRequired, - currency: PropTypes.string.isRequired, - subscriptionExpired: PropTypes.bool.isRequired, - upgradeAccount: PropTypes.func.isRequired, - stayOnFree: PropTypes.func.isRequired, - hadSubscription: PropTypes.bool.isRequired, - isPersonalPlanAvailable: PropTypes.bool, - }; - - static defaultProps = { - isPersonalPlanAvailable: true, - } - - static contextTypes = { - intl: intlShape, - }; - - componentDidMount() { - } - - render() { - const { - classes, - firstname, - plans, - currency, - subscriptionExpired, - upgradeAccount, - stayOnFree, - hadSubscription, - isPersonalPlanAvailable, - } = this.props; - - const { intl } = this.context; - - return ( - -
- - ); - } -} - -export default PlanSelection; diff --git a/src/features/planSelection/containers/PlanSelectionScreen.js b/src/features/planSelection/containers/PlanSelectionScreen.js deleted file mode 100644 index 594829c01..000000000 --- a/src/features/planSelection/containers/PlanSelectionScreen.js +++ /dev/null @@ -1,120 +0,0 @@ -import React, { Component } from 'react'; -import { observer, inject } from 'mobx-react'; -import PropTypes from 'prop-types'; -import { dialog, app } from '@electron/remote'; -import { defineMessages, intlShape } from 'react-intl'; - -import FeaturesStore from '../../../stores/FeaturesStore'; -import UserStore from '../../../stores/UserStore'; -import PlanSelection from '../components/PlanSelection'; -import ErrorBoundary from '../../../components/util/ErrorBoundary'; -import { planSelectionStore } from '..'; -import PaymentStore from '../../../stores/PaymentStore'; - -const messages = defineMessages({ - dialogTitle: { - id: 'feature.planSelection.fullscreen.dialog.title', - defaultMessage: '!!!Downgrade your Franz Plan', - }, - dialogMessage: { - id: 'feature.planSelection.fullscreen.dialog.message', - defaultMessage: '!!!You\'re about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.', - }, - dialogCTADowngrade: { - id: 'feature.planSelection.fullscreen.dialog.cta.downgrade', - defaultMessage: '!!!Downgrade to Free', - }, - dialogCTAUpgrade: { - id: 'feature.planSelection.fullscreen.dialog.cta.upgrade', - defaultMessage: '!!!Choose Personal', - }, -}); - -@inject('stores', 'actions') @observer -class PlanSelectionScreen extends Component { - static contextTypes = { - intl: intlShape, - }; - - upgradeAccount(planId) { - const { upgradeAccount } = this.props.actions.payment; - - upgradeAccount({ - planId, - }); - } - - render() { - if (!planSelectionStore || !planSelectionStore.isFeatureActive || !planSelectionStore.showPlanSelectionOverlay) { - return null; - } - - const { intl } = this.context; - - const { user, features } = this.props.stores; - const { isPersonalPlanAvailable, pricingConfig } = features.features; - const { plans, currency } = pricingConfig; - const { activateTrial } = this.props.actions.user; - const { downgradeAccount, hideOverlay } = this.props.actions.planSelection; - - return ( - - { - if (user.data.hadSubscription) { - this.upgradeAccount(planId); - } else { - activateTrial({ - planId, - }); - } - }} - stayOnFree={() => { - const selection = dialog.showMessageBoxSync(app.mainWindow, { - type: 'question', - message: intl.formatMessage(messages.dialogTitle), - detail: intl.formatMessage(messages.dialogMessage, { - currency, - price: plans.personal.yearly.price, - }), - buttons: [ - intl.formatMessage(messages.dialogCTADowngrade), - intl.formatMessage(messages.dialogCTAUpgrade), - ], - }); - - if (selection === 0) { - downgradeAccount(); - hideOverlay(); - } else { - this.upgradeAccount(plans.personal.yearly.id); - } - }} - subscriptionExpired={user.team && user.team.state === 'expired' && !user.team.userHasDowngraded} - hadSubscription={user.data.hadSubscription} - isPersonalPlanAvailable={isPersonalPlanAvailable} - /> - - ); - } -} - -export default PlanSelectionScreen; - -PlanSelectionScreen.wrappedComponent.propTypes = { - stores: PropTypes.shape({ - features: PropTypes.instanceOf(FeaturesStore).isRequired, - user: PropTypes.instanceOf(UserStore).isRequired, - }).isRequired, - actions: PropTypes.shape({ - payment: PropTypes.instanceOf(PaymentStore), - planSelection: PropTypes.shape({ - downgradeAccount: PropTypes.func.isRequired, - hideOverlay: PropTypes.func.isRequired, - }), - user: PropTypes.instanceOf(UserStore).isRequired, - }).isRequired, -}; diff --git a/src/features/planSelection/index.js b/src/features/planSelection/index.js deleted file mode 100644 index b96ad6d8f..000000000 --- a/src/features/planSelection/index.js +++ /dev/null @@ -1,28 +0,0 @@ -import { reaction } from 'mobx'; -import PlanSelectionStore from './store'; - -const debug = require('debug')('Ferdi:feature:planSelection'); - -export const planSelectionStore = new PlanSelectionStore(); - -export default function initPlanSelection(stores, actions) { - stores.planSelection = planSelectionStore; - const { features } = stores; - - // Toggle planSelection feature - reaction( - () => features.features.isPlanSelectionEnabled, - (isEnabled) => { - if (isEnabled) { - debug('Initializing `planSelection` feature'); - planSelectionStore.start(stores, actions); - } else if (planSelectionStore.isFeatureActive) { - debug('Disabling `planSelection` feature'); - planSelectionStore.stop(); - } - }, - { - fireImmediately: true, - }, - ); -} diff --git a/src/features/planSelection/store.js b/src/features/planSelection/store.js deleted file mode 100644 index de8fc7584..000000000 --- a/src/features/planSelection/store.js +++ /dev/null @@ -1,68 +0,0 @@ -import { - action, - observable, - computed, -} from 'mobx'; - -import { planSelectionActions } from './actions'; -import { FeatureStore } from '../utils/FeatureStore'; -import { createActionBindings } from '../utils/ActionBinding'; -import { downgradeUserRequest } from './api'; - -const debug = require('debug')('Ferdi:feature:planSelection:store'); - -export default class PlanSelectionStore extends FeatureStore { - @observable isFeatureEnabled = false; - - @observable isFeatureActive = false; - - @observable hideOverlay = false; - - @computed get showPlanSelectionOverlay() { - const { team, isPremium } = this.stores.user; - if (team && !this.hideOverlay && !isPremium) { - return team.state === 'expired' && !team.userHasDowngraded; - } - - return false; - } - - // ========== PUBLIC API ========= // - - @action start(stores, actions, api) { - debug('PlanSelectionStore::start'); - this.stores = stores; - this.actions = actions; - this.api = api; - - // ACTIONS - - this._registerActions(createActionBindings([ - [planSelectionActions.downgradeAccount, this._downgradeAccount], - [planSelectionActions.hideOverlay, this._hideOverlay], - ])); - - this.isFeatureActive = true; - } - - @action stop() { - super.stop(); - debug('PlanSelectionStore::stop'); - this.isFeatureActive = false; - } - - // ========== PRIVATE METHODS ========= // - - // Actions - @action _downgradeAccount = () => { - downgradeUserRequest.execute(); - } - - @action _hideOverlay = () => { - this.hideOverlay = true; - } - - @action _showOverlay = () => { - this.hideOverlay = false; - } -} diff --git a/src/features/serviceLimit/components/LimitReachedInfobox.js b/src/features/serviceLimit/components/LimitReachedInfobox.js deleted file mode 100644 index 424c92990..000000000 --- a/src/features/serviceLimit/components/LimitReachedInfobox.js +++ /dev/null @@ -1,75 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { inject, observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import injectSheet from 'react-jss'; -import { Infobox } from '@meetfranz/ui'; - -const messages = defineMessages({ - limitReached: { - id: 'feature.serviceLimit.limitReached', - defaultMessage: '!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.', - }, - action: { - id: 'premiumFeature.button.upgradeAccount', - defaultMessage: '!!!Upgrade account', - }, -}); - -const styles = theme => ({ - container: { - height: 'auto', - background: theme.styleTypes.warning.accent, - color: theme.styleTypes.warning.contrast, - borderRadius: 0, - marginBottom: 0, - - '& > div': { - marginBottom: 0, - }, - - '& button': { - color: theme.styleTypes.primary.contrast, - }, - }, -}); - -@inject('stores', 'actions') @injectSheet(styles) @observer -class LimitReachedInfobox extends Component { - static propTypes = { - classes: PropTypes.object.isRequired, - stores: PropTypes.object.isRequired, - actions: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { classes, stores, actions } = this.props; - const { intl } = this.context; - - const { - serviceLimit, - } = stores; - - if (!serviceLimit.userHasReachedServiceLimit) return null; - - return ( - { - actions.ui.openSettings({ path: 'user' }); - }} - > - {intl.formatMessage(messages.limitReached, { amount: serviceLimit.serviceCount, limit: serviceLimit.serviceLimit })} - - ); - } -} - -export default LimitReachedInfobox; diff --git a/src/features/serviceLimit/index.js b/src/features/serviceLimit/index.js deleted file mode 100644 index f867e3d87..000000000 --- a/src/features/serviceLimit/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import { reaction } from 'mobx'; -import { ServiceLimitStore } from './store'; - -const debug = require('debug')('Ferdi:feature:serviceLimit'); - -let store = null; - -export const serviceLimitStore = new ServiceLimitStore(); - -export default function initServiceLimit(stores, actions) { - const { features } = stores; - - // Toggle serviceLimit feature - reaction( - () => ( - features.features.isServiceLimitEnabled - ), - (isEnabled) => { - if (isEnabled) { - debug('Initializing `serviceLimit` feature'); - store = serviceLimitStore.start(stores, actions); - } else if (store) { - debug('Disabling `serviceLimit` feature'); - serviceLimitStore.stop(); - } - }, - { - fireImmediately: true, - }, - ); -} diff --git a/src/features/serviceLimit/store.js b/src/features/serviceLimit/store.js deleted file mode 100644 index b1e55a1fc..000000000 --- a/src/features/serviceLimit/store.js +++ /dev/null @@ -1,42 +0,0 @@ -import { computed, observable } from 'mobx'; -import { FeatureStore } from '../utils/FeatureStore'; -import { DEFAULT_SERVICE_LIMIT } from '../../config'; - -const debug = require('debug')('Ferdi:feature:serviceLimit:store'); - -export class ServiceLimitStore extends FeatureStore { - @observable isServiceLimitEnabled = false; - - start(stores, actions) { - debug('start'); - this.stores = stores; - this.actions = actions; - - this.isServiceLimitEnabled = false; - } - - stop() { - super.stop(); - - this.isServiceLimitEnabled = false; - } - - @computed get userHasReachedServiceLimit() { - return false; - // if (!this.isServiceLimitEnabled) return false; - - // return this.serviceLimit !== 0 && this.serviceCount >= this.serviceLimit; - } - - @computed get serviceLimit() { - if (!this.isServiceLimitEnabled || this.stores.features.features.serviceLimitCount === 0) return 0; - - return this.stores.features.features.serviceLimitCount || DEFAULT_SERVICE_LIMIT; - } - - @computed get serviceCount() { - return this.stores.services.all.length; - } -} - -export default ServiceLimitStore; diff --git a/src/features/serviceProxy/index.js b/src/features/serviceProxy/index.js index f74f5f0b2..eb7116651 100644 --- a/src/features/serviceProxy/index.js +++ b/src/features/serviceProxy/index.js @@ -5,7 +5,6 @@ const debug = require('debug')('Ferdi:feature:serviceProxy'); export const config = observable({ isEnabled: true, - isPremium: true, }); export default function init(stores) { @@ -13,7 +12,6 @@ export default function init(stores) { autorun(() => { config.isEnabled = true; - config.isIncludedInCurrentPlan = true; const services = stores.services.enabled; const proxySettings = stores.settings.proxy; diff --git a/src/features/shareFranz/Component.js b/src/features/shareFranz/Component.js index f7f8dc41c..b66375453 100644 --- a/src/features/shareFranz/Component.js +++ b/src/features/shareFranz/Component.js @@ -36,11 +36,11 @@ const messages = defineMessages({ }, shareTextEmail: { id: 'feature.shareFranz.shareText.email', - defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com', + defaultMessage: '!!! I\'ve added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com', }, shareTextTwitter: { id: 'feature.shareFranz.shareText.twitter', - defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger', + defaultMessage: '!!! I\'ve added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger', }, }); diff --git a/src/features/shareFranz/index.js b/src/features/shareFranz/index.js index 34475f674..9add0f65e 100644 --- a/src/features/shareFranz/index.js +++ b/src/features/shareFranz/index.js @@ -1,8 +1,6 @@ import { reaction } from 'mobx'; import ms from 'ms'; import { state as ModalState } from './store'; -import { state as delayAppState } from '../delayApp'; -import { planSelectionStore } from '../planSelection'; export { default as Component } from './Component'; @@ -19,21 +17,14 @@ export default function initialize(stores) { function showModal() { debug('Would have showed share window'); - - // state.isModalVisible = true; } reaction( () => stores.user.isLoggedIn, () => { setTimeout(() => { - if (stores.settings.stats.appStarts % 50 === 0 && !planSelectionStore.showPlanSelectionOverlay) { - if (delayAppState.isDelayAppScreenVisible) { - debug('Delaying share modal by 5 minutes'); - setTimeout(() => showModal(), ms('5m')); - } else { - showModal(); - } + if (stores.settings.stats.appStarts % 50 === 0) { + showModal(); } }, ms('2s')); }, diff --git a/src/features/spellchecker/index.js b/src/features/spellchecker/index.js deleted file mode 100644 index 6a393e250..000000000 --- a/src/features/spellchecker/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import { autorun, observable } from 'mobx'; - -import { DEFAULT_FEATURES_CONFIG } from '../../config'; - -const debug = require('debug')('Ferdi:feature:spellchecker'); - -export const config = observable({ - isIncludedInCurrentPlan: DEFAULT_FEATURES_CONFIG.isSpellcheckerIncludedInCurrentPlan, -}); - -export default function init() { - debug('Initializing `spellchecker` feature'); - - autorun(() => { - // const { isSpellcheckerIncludedInCurrentPlan } = stores.features.features; - - // config.isIncludedInCurrentPlan = isSpellcheckerIncludedInCurrentPlan !== undefined ? isSpellcheckerIncludedInCurrentPlan : DEFAULT_FEATURES_CONFIG.isSpellcheckerIncludedInCurrentPlan; - - // if (!stores.user.data.isPremium && config.isIncludedInCurrentPlan && stores.settings.app.enableSpellchecking) { - // debug('Override settings.spellcheckerEnabled flag to false'); - - // Object.assign(stores.settings.app, { - // enableSpellchecking: false, - // }); - // } - }); -} diff --git a/src/features/todos/components/TodosWebview.js b/src/features/todos/components/TodosWebview.js index ca8460f94..2dc30cdf2 100644 --- a/src/features/todos/components/TodosWebview.js +++ b/src/features/todos/components/TodosWebview.js @@ -35,26 +35,6 @@ const styles = (theme) => ({ zIndex: 400, background: theme.todos.dragIndicator.background, }, - premiumContainer: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - alignItems: 'center', - width: '80%', - maxWidth: 300, - margin: [0, 'auto'], - textAlign: 'center', - }, - premiumIcon: { - marginBottom: 40, - background: theme.styleTypes.primary.accent, - fill: theme.styleTypes.primary.contrast, - padding: 10, - borderRadius: 10, - }, - premiumCTA: { - marginTop: 40, - }, isTodosServiceActive: { width: 'calc(100% - 368px)', position: 'absolute', diff --git a/src/features/todos/store.js b/src/features/todos/store.js index 429507927..abaec677f 100644 --- a/src/features/todos/store.js +++ b/src/features/todos/store.js @@ -20,7 +20,6 @@ import { FeatureStore } from '../utils/FeatureStore'; import { createReactions } from '../../stores/lib/Reaction'; import { createActionBindings } from '../utils/ActionBinding'; import { IPC, TODOS_ROUTES } from './constants'; -import { state as delayAppState } from '../delayApp'; import UserAgent from '../../models/UserAgent'; const debug = require('debug')('Ferdi:feature:todos:store'); @@ -46,7 +45,7 @@ export default class TodoStore extends FeatureStore { @computed get isTodosPanelForceHidden() { const { isAnnouncementShown } = this.stores.announcements; - return delayAppState.isDelayAppScreenVisible || !this.isFeatureEnabledByUser || isAnnouncementShown; + return !this.isFeatureEnabledByUser || isAnnouncementShown; } @computed get isTodosPanelVisible() { diff --git a/src/features/trialStatusBar/actions.js b/src/features/trialStatusBar/actions.js deleted file mode 100644 index 38df76458..000000000 --- a/src/features/trialStatusBar/actions.js +++ /dev/null @@ -1,13 +0,0 @@ -import PropTypes from 'prop-types'; -import { createActionsFromDefinitions } from '../../actions/lib/actions'; - -export const trialStatusBarActions = createActionsFromDefinitions({ - upgradeAccount: { - planId: PropTypes.string.isRequired, - onCloseWindow: PropTypes.func.isRequired, - }, - downgradeAccount: {}, - hideOverlay: {}, -}, PropTypes.checkPropTypes); - -export default trialStatusBarActions; diff --git a/src/features/trialStatusBar/components/ProgressBar.js b/src/features/trialStatusBar/components/ProgressBar.js deleted file mode 100644 index 41b74d396..000000000 --- a/src/features/trialStatusBar/components/ProgressBar.js +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import injectSheet from 'react-jss'; - -const styles = theme => ({ - root: { - background: theme.trialStatusBar.progressBar.background, - width: '25%', - maxWidth: 200, - height: 8, - display: 'flex', - alignItems: 'center', - borderRadius: theme.borderRadius, - overflow: 'hidden', - }, - progress: { - background: theme.trialStatusBar.progressBar.progressIndicator, - width: ({ percent }) => `${percent}%`, - height: '100%', - }, -}); - -@injectSheet(styles) @observer -class ProgressBar extends Component { - static propTypes = { - classes: PropTypes.object.isRequired, - }; - - render() { - const { - classes, - } = this.props; - - return ( -
-
-
- ); - } -} - -export default ProgressBar; diff --git a/src/features/trialStatusBar/components/TrialStatusBar.js b/src/features/trialStatusBar/components/TrialStatusBar.js deleted file mode 100644 index b8fe4acc9..000000000 --- a/src/features/trialStatusBar/components/TrialStatusBar.js +++ /dev/null @@ -1,135 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { observer } from 'mobx-react'; -import injectSheet from 'react-jss'; -import { defineMessages, intlShape } from 'react-intl'; -import { Icon } from '@meetfranz/ui'; -import { mdiArrowRight, mdiWindowClose } from '@mdi/js'; -import classnames from 'classnames'; - -import ProgressBar from './ProgressBar'; - -const messages = defineMessages({ - restTime: { - id: 'feature.trialStatusBar.restTime', - defaultMessage: '!!!Your Free Franz {plan} Trial ends in {time}.', - }, - expired: { - id: 'feature.trialStatusBar.expired', - defaultMessage: '!!!Your free Franz {plan} Trial has expired, please upgrade your account.', - }, - cta: { - id: 'feature.trialStatusBar.cta', - defaultMessage: '!!!Upgrade now', - }, -}); - -const styles = theme => ({ - root: { - background: theme.trialStatusBar.bar.background, - width: '100%', - height: 25, - order: 10, - display: 'flex', - alignItems: 'center', - fontSize: 12, - padding: [0, 10], - justifyContent: 'flex-end', - }, - ended: { - background: theme.styleTypes.warning.accent, - color: theme.styleTypes.warning.contrast, - }, - message: { - marginLeft: 20, - }, - action: { - marginLeft: 20, - fontSize: 12, - color: theme.colorText, - textDecoration: 'underline', - display: 'flex', - - '& svg': { - margin: [1, 2, 0, 0], - }, - }, -}); - -@injectSheet(styles) @observer -class TrialStatusBar extends Component { - static propTypes = { - planName: PropTypes.string.isRequired, - percent: PropTypes.number.isRequired, - upgradeAccount: PropTypes.func.isRequired, - hideOverlay: PropTypes.func.isRequired, - trialEnd: PropTypes.string.isRequired, - hasEnded: PropTypes.bool.isRequired, - classes: PropTypes.object.isRequired, - }; - - static contextTypes = { - intl: intlShape, - }; - - render() { - const { - planName, - percent, - upgradeAccount, - hideOverlay, - trialEnd, - hasEnded, - classes, - } = this.props; - - const { intl } = this.context; - - return ( -
- - {' '} - - {!hasEnded ? ( - intl.formatMessage(messages.restTime, { - plan: planName, - time: trialEnd, - }) - ) : ( - intl.formatMessage(messages.expired, { - plan: planName, - }) - )} - - - -
- ); - } -} - -export default TrialStatusBar; diff --git a/src/features/trialStatusBar/containers/TrialStatusBarScreen.js b/src/features/trialStatusBar/containers/TrialStatusBarScreen.js deleted file mode 100644 index e0f5ab5f2..000000000 --- a/src/features/trialStatusBar/containers/TrialStatusBarScreen.js +++ /dev/null @@ -1,112 +0,0 @@ -import React, { Component } from 'react'; -import { observer, inject } from 'mobx-react'; -import PropTypes from 'prop-types'; -import ms from 'ms'; -import { intlShape } from 'react-intl'; - -import FeaturesStore from '../../../stores/FeaturesStore'; -import UserStore from '../../../stores/UserStore'; -import TrialStatusBar from '../components/TrialStatusBar'; -import ErrorBoundary from '../../../components/util/ErrorBoundary'; -import { trialStatusBarStore } from '..'; -import { i18nPlanName } from '../../../helpers/plan-helpers'; -import PaymentStore from '../../../stores/PaymentStore'; - -@inject('stores', 'actions') -@observer -class TrialStatusBarScreen extends Component { - static contextTypes = { - intl: intlShape, - }; - - state = { - showOverlay: true, - percent: 0, - restTime: '', - hasEnded: false, - }; - - percentInterval = null; - - componentDidMount() { - this.percentInterval = setInterval(() => { - this.calculateRestTime(); - }, ms('1m')); - - this.calculateRestTime(); - } - - componentWillUnmount() { - clearInterval(this.percentInterval); - } - - calculateRestTime() { - const { trialEndTime } = trialStatusBarStore; - const percent = ( - Math.abs(100 - Math.abs(trialEndTime.asMilliseconds()) * 100) / ms('14d') - ).toFixed(2); - const restTime = trialEndTime.humanize(); - const hasEnded = trialEndTime.asMilliseconds() > 0; - - this.setState({ - percent, - restTime, - hasEnded, - }); - } - - hideOverlay() { - this.setState({ - showOverlay: false, - }); - } - - render() { - const { intl } = this.context; - - const { - showOverlay, percent, restTime, hasEnded, - } = this.state; - - if ( - !trialStatusBarStore - || !trialStatusBarStore.isFeatureActive - || !showOverlay - || !trialStatusBarStore.showTrialStatusBarOverlay - ) { - return null; - } - - const { user } = this.props.stores; - const { upgradeAccount } = this.props.actions.payment; - - const planName = i18nPlanName(user.team.plan, intl); - - return ( - - upgradeAccount({ - planId: user.team.plan, - })} - hideOverlay={() => this.hideOverlay()} - hasEnded={hasEnded} - /> - - ); - } -} - -export default TrialStatusBarScreen; - -TrialStatusBarScreen.wrappedComponent.propTypes = { - stores: PropTypes.shape({ - features: PropTypes.instanceOf(FeaturesStore).isRequired, - user: PropTypes.instanceOf(UserStore).isRequired, - }).isRequired, - actions: PropTypes.shape({ - payment: PropTypes.instanceOf(PaymentStore), - }).isRequired, -}; diff --git a/src/features/trialStatusBar/index.js b/src/features/trialStatusBar/index.js deleted file mode 100644 index 987b5c04e..000000000 --- a/src/features/trialStatusBar/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import { reaction } from 'mobx'; -import TrialStatusBarStore from './store'; - -const debug = require('debug')('Ferdi:feature:trialStatusBar'); - -export const GA_CATEGORY_TRIAL_STATUS_BAR = 'trialStatusBar'; - -export const trialStatusBarStore = new TrialStatusBarStore(); - -export default function initTrialStatusBar(stores, actions) { - stores.trialStatusBar = trialStatusBarStore; - const { features } = stores; - - // Toggle trialStatusBar feature - reaction( - () => features.features.isTrialStatusBarEnabled, - (isEnabled) => { - if (isEnabled) { - debug('Initializing `trialStatusBar` feature'); - trialStatusBarStore.start(stores, actions); - } else if (trialStatusBarStore.isFeatureActive) { - debug('Disabling `trialStatusBar` feature'); - trialStatusBarStore.stop(); - } - }, - { - fireImmediately: true, - }, - ); -} diff --git a/src/features/trialStatusBar/store.js b/src/features/trialStatusBar/store.js deleted file mode 100644 index 858a08238..000000000 --- a/src/features/trialStatusBar/store.js +++ /dev/null @@ -1,72 +0,0 @@ -import { - action, - observable, - computed, -} from 'mobx'; -import moment from 'moment'; - -import { trialStatusBarActions } from './actions'; -import { FeatureStore } from '../utils/FeatureStore'; -import { createActionBindings } from '../utils/ActionBinding'; - -const debug = require('debug')('Ferdi:feature:trialStatusBar:store'); - -export default class TrialStatusBarStore extends FeatureStore { - @observable isFeatureActive = false; - - @observable isFeatureEnabled = false; - - @computed get showTrialStatusBarOverlay() { - if (this.isFeatureActive) { - const { team } = this.stores.user; - if (team && !this.hideOverlay) { - return team.state !== 'expired' && team.isTrial; - } - } - - return false; - } - - @computed get trialEndTime() { - if (this.isFeatureActive) { - const { team } = this.stores.user; - - if (team && !this.hideOverlay) { - return moment.duration(moment().diff(team.trialEnd)); - } - } - - return moment.duration(); - } - - // ========== PUBLIC API ========= // - - @action start(stores, actions, api) { - debug('TrialStatusBarStore::start'); - this.stores = stores; - this.actions = actions; - this.api = api; - - // ACTIONS - - this._registerActions(createActionBindings([ - [trialStatusBarActions.hideOverlay, this._hideOverlay], - ])); - - this.isFeatureActive = true; - } - - @action stop() { - super.stop(); - debug('TrialStatusBarStore::stop'); - this.isFeatureActive = false; - } - - // ========== PRIVATE METHODS ========= // - - // Actions - - @action _hideOverlay = () => { - this.hideOverlay = true; - } -} diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js index bf7016e2f..3ddc9cf16 100644 --- a/src/features/workspaces/components/WorkspaceDrawer.js +++ b/src/features/workspaces/components/WorkspaceDrawer.js @@ -2,12 +2,11 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; -import { defineMessages, FormattedHTMLMessage, intlShape } from 'react-intl'; -import { H1, Icon, ProBadge } from '@meetfranz/ui'; -import { Button } from '@meetfranz/forms/lib'; +import { defineMessages, intlShape } from 'react-intl'; +import { H1, Icon } from '@meetfranz/ui'; import ReactTooltip from 'react-tooltip'; -import { mdiPlusBox, mdiSettings, mdiStar } from '@mdi/js'; +import { mdiPlusBox, mdiSettings } from '@mdi/js'; import WorkspaceDrawerItem from './WorkspaceDrawerItem'; import { workspaceActions } from '../actions'; import { workspaceStore } from '../index'; @@ -29,22 +28,10 @@ const messages = defineMessages({ id: 'workspaceDrawer.workspaceFeatureInfo', defaultMessage: '!!!Info about workspace feature', }, - premiumCtaButtonLabel: { - id: 'workspaceDrawer.premiumCtaButtonLabel', - defaultMessage: '!!!Create your first workspace', - }, - reactivatePremiumAccount: { - id: 'workspaceDrawer.reactivatePremiumAccountLabel', - defaultMessage: '!!!Reactivate premium account', - }, addNewWorkspaceLabel: { id: 'workspaceDrawer.addNewWorkspaceLabel', defaultMessage: '!!!add new workspace', }, - premiumFeatureBadge: { - id: 'workspaceDrawer.proFeatureBadge', - defaultMessage: '!!!Premium feature', - }, }); const styles = theme => ({ @@ -60,9 +47,6 @@ const styles = theme => ({ marginBottom: '25px', marginLeft: theme.workspaces.drawer.padding, }, - headlineProBadge: { - marginRight: 15, - }, workspacesSettingsButton: { float: 'right', marginRight: theme.workspaces.drawer.padding, @@ -78,16 +62,6 @@ const styles = theme => ({ height: 'auto', overflowY: 'auto', }, - premiumAnnouncement: { - padding: '20px', - paddingTop: '0', - height: 'auto', - }, - premiumCtaButton: { - marginTop: '20px', - width: '100%', - color: 'white !important', - }, addNewWorkspaceLabel: { height: 'auto', color: theme.workspaces.drawer.buttons.color, @@ -116,7 +90,6 @@ class WorkspaceDrawer extends Component { static propTypes = { classes: PropTypes.object.isRequired, getServicesForWorkspace: PropTypes.func.isRequired, - onUpgradeAccountClick: PropTypes.func.isRequired, }; static contextTypes = { @@ -131,7 +104,6 @@ class WorkspaceDrawer extends Component { const { classes, getServicesForWorkspace, - onUpgradeAccountClick, } = this.props; const { intl } = this.context; const { @@ -144,14 +116,6 @@ class WorkspaceDrawer extends Component { return (

- {workspaceStore.isPremiumUpgradeRequired && ( - - - - )} {intl.formatMessage(messages.headline)}

- {workspaceStore.isPremiumUpgradeRequired ? ( -
- - {workspaceStore.userHasWorkspaces ? ( -
- ) : ( -
+
+ { + workspaceActions.deactivate(); + workspaceActions.toggleWorkspaceDrawer(); + }} + services={getServicesForWorkspace(null)} + isActive={actualWorkspace == null} + shortcutIndex={0} + /> + {workspaces.map((workspace, index) => ( { - workspaceActions.deactivate(); + if (actualWorkspace === workspace) return; + workspaceActions.activate({ workspace }); workspaceActions.toggleWorkspaceDrawer(); }} - services={getServicesForWorkspace(null)} - isActive={actualWorkspace == null} - shortcutIndex={0} + onContextMenuEditClick={() => workspaceActions.edit({ workspace })} + services={getServicesForWorkspace(workspace)} + shortcutIndex={index + 1} /> - {workspaces.map((workspace, index) => ( - { - if (actualWorkspace === workspace) return; - workspaceActions.activate({ workspace }); - workspaceActions.toggleWorkspaceDrawer(); - }} - onContextMenuEditClick={() => workspaceActions.edit({ workspace })} - services={getServicesForWorkspace(workspace)} - shortcutIndex={index + 1} - /> - ))} -
{ - workspaceActions.openWorkspaceSettings(); - }} - > - - - {intl.formatMessage(messages.addNewWorkspaceLabel)} - -
+ ))} +
{ + workspaceActions.openWorkspaceSettings(); + }} + > + + + {intl.formatMessage(messages.addNewWorkspaceLabel)} +
- )} +
); diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js index cfaacd56e..0c2588c42 100644 --- a/src/features/workspaces/components/WorkspacesDashboard.js +++ b/src/features/workspaces/components/WorkspacesDashboard.js @@ -1,9 +1,9 @@ -import React, { Component, Fragment } from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; import injectSheet from 'react-jss'; -import { Infobox, Badge } from '@meetfranz/ui'; +import { Infobox } from '@meetfranz/ui'; import { mdiCheckboxMarkedCircleOutline } from '@mdi/js'; import Loader from '../../../components/ui/Loader'; @@ -11,10 +11,7 @@ import WorkspaceItem from './WorkspaceItem'; import CreateWorkspaceForm from './CreateWorkspaceForm'; import Request from '../../../stores/lib/Request'; import Appear from '../../../components/ui/effects/Appear'; -import { workspaceStore } from '../index'; import UIStore from '../../../stores/UIStore'; -import globalMessages from '../../../i18n/globalMessages'; -import UpgradeButton from '../../../components/ui/UpgradeButton'; const messages = defineMessages({ headline: { @@ -64,12 +61,6 @@ const styles = () => ({ appear: { height: 'auto', }, - premiumAnnouncement: { - height: 'auto', - }, - premiumAnnouncementContainer: { - display: 'flex', - }, announcementHeadline: { marginBottom: 0, }, @@ -78,12 +69,6 @@ const styles = () => ({ margin: [-8, 0, 0, 20], alignSelf: 'center', }, - upgradeCTA: { - margin: [40, 'auto'], - }, - proRequired: { - margin: [10, 0, 40], - }, }); @inject('stores') @injectSheet(styles) @observer @@ -152,77 +137,53 @@ class WorkspacesDashboard extends Component { )} - {workspaceStore.isPremiumUpgradeRequired && ( -
- -

{intl.formatMessage(messages.workspaceFeatureHeadline)}

- {intl.formatMessage(globalMessages.proRequired)} -
-
-

{intl.formatMessage(messages.workspaceFeatureInfo)}

- -
- -
-
- )} - - {!workspaceStore.isPremiumUpgradeRequired && ( + {/* ===== Create workspace form ===== */} +
+ +
+ {getUserWorkspacesRequest.isExecuting ? ( + + ) : ( <> - {/* ===== Create workspace form ===== */} -
- -
- {getUserWorkspacesRequest.isExecuting ? ( - + {/* ===== Workspace could not be loaded error ===== */} + {getUserWorkspacesRequest.error ? ( + + {intl.formatMessage(messages.workspacesRequestFailed)} + ) : ( <> - {/* ===== Workspace could not be loaded error ===== */} - {getUserWorkspacesRequest.error ? ( - - {intl.formatMessage(messages.workspacesRequestFailed)} - + {workspaces.length === 0 ? ( +
+ {/* ===== Workspaces empty state ===== */} +

+ + + + {intl.formatMessage(messages.noServicesAdded)} +

+
) : ( - <> - {workspaces.length === 0 ? ( -
- {/* ===== Workspaces empty state ===== */} -

- - - - {intl.formatMessage(messages.noServicesAdded)} -

-
- ) : ( - - {/* ===== Workspaces list ===== */} - - {workspaces.map(workspace => ( - onWorkspaceClick(w)} - /> - ))} - -
- )} - + + {/* ===== Workspaces list ===== */} + + {workspaces.map(workspace => ( + onWorkspaceClick(w)} + /> + ))} + +
)} )} diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js index 632f3c299..8c73516bc 100644 --- a/src/features/workspaces/store.js +++ b/src/features/workspaces/store.js @@ -22,10 +22,6 @@ export default class WorkspacesStore extends FeatureStore { @observable isFeatureActive = false; - @observable isPremiumFeature = false; - - @observable isPremiumUpgradeRequired = false; - @observable activeWorkspace = null; @observable nextWorkspace = null; @@ -58,7 +54,6 @@ export default class WorkspacesStore extends FeatureStore { @computed get isUserAllowedToUseFeature() { return true; - // return !this.isPremiumUpgradeRequired; } @computed get isAnyWorkspaceActive() { @@ -69,16 +64,8 @@ export default class WorkspacesStore extends FeatureStore { _wasDrawerOpenBeforeSettingsRoute = null; - _freeUserActions = []; - - _premiumUserActions = []; - _allActions = []; - _freeUserReactions = []; - - _premiumUserReactions = []; - _allReactions = []; // ========== PUBLIC API ========= // @@ -90,11 +77,9 @@ export default class WorkspacesStore extends FeatureStore { // ACTIONS - this._freeUserActions = createActionBindings([ + this._allActions = createActionBindings([ [workspaceActions.toggleWorkspaceDrawer, this._toggleWorkspaceDrawer], [workspaceActions.openWorkspaceSettings, this._openWorkspaceSettings], - ]); - this._premiumUserActions = createActionBindings([ [workspaceActions.edit, this._edit], [workspaceActions.create, this._create], [workspaceActions.delete, this._delete], @@ -106,27 +91,18 @@ export default class WorkspacesStore extends FeatureStore { this._toggleKeepAllWorkspacesLoadedSetting, ], ]); - this._allActions = this._freeUserActions.concat(this._premiumUserActions); this._registerActions(this._allActions); // REACTIONS - this._freeUserReactions = createReactions([ - this._disablePremiumFeatures, + this._allReactions = createReactions([ this._openDrawerWithSettingsReaction, this._setFeatureEnabledReaction, - this._setIsPremiumFeatureReaction, this._cleanupInvalidServiceReferences, - ]); - this._premiumUserReactions = createReactions([ this._setActiveServiceOnWorkspaceSwitchReaction, this._activateLastUsedWorkspaceReaction, this._setWorkspaceBeingEditedReaction, ]); - this._allReactions = this._freeUserReactions.concat( - this._premiumUserReactions, - ); - this._registerReactions(this._allReactions); getUserWorkspacesRequest.execute(); @@ -273,13 +249,6 @@ export default class WorkspacesStore extends FeatureStore { this.isFeatureEnabled = isWorkspaceEnabled; }; - _setIsPremiumFeatureReaction = () => { - // const { features } = this.stores; - // const { isWorkspaceIncludedInCurrentPlan } = features.features; - // this.isPremiumFeature = !isWorkspaceIncludedInCurrentPlan; - // this.isPremiumUpgradeRequired = !isWorkspaceIncludedInCurrentPlan; - }; - _setWorkspaceBeingEditedReaction = () => { const { pathname } = this.stores.router.location; const match = matchRoute('/settings/workspaces/edit/:id', pathname); @@ -357,16 +326,4 @@ export default class WorkspacesStore extends FeatureStore { }); }); }; - - _disablePremiumFeatures = () => { - if (!this.isUserAllowedToUseFeature) { - debug('_disablePremiumFeatures'); - this._stopActions(this._premiumUserActions); - this._stopReactions(this._premiumUserReactions); - this.reset(); - } else { - this._startActions(this._premiumUserActions); - this._startReactions(this._premiumUserReactions); - } - }; } diff --git a/src/helpers/plan-helpers.js b/src/helpers/plan-helpers.js deleted file mode 100644 index b474f8bbd..000000000 --- a/src/helpers/plan-helpers.js +++ /dev/null @@ -1,53 +0,0 @@ -import { defineMessages } from 'react-intl'; -import { PLANS_MAPPING, PLANS } from '../config'; - -const messages = defineMessages({ - [PLANS.PRO]: { - id: 'pricing.plan.pro', - defaultMessage: '!!!Professional', - }, - [PLANS.PERSONAL]: { - id: 'pricing.plan.personal', - defaultMessage: '!!!Personal', - }, - [PLANS.FREE]: { - id: 'pricing.plan.free', - defaultMessage: '!!!Free', - }, - [PLANS.LEGACY]: { - id: 'pricing.plan.legacy', - defaultMessage: '!!!Premium', - }, -}); - -export function cleanupPlanId(id) { - return id.replace(/(.*)-x[0-9]/, '$1'); -} - -export function i18nPlanName(planId, intl) { - if (!planId) { - throw new Error('planId is required'); - } - - if (!intl) { - throw new Error('intl context is required'); - } - - const id = cleanupPlanId(planId); - - const plan = PLANS_MAPPING[id]; - - return intl.formatMessage(messages[plan]); -} - -export function getPlan(planId) { - if (!planId) { - throw new Error('planId is required'); - } - - const id = cleanupPlanId(planId); - - const plan = PLANS_MAPPING[id]; - - return plan; -} diff --git a/src/i18n/globalMessages.js b/src/i18n/globalMessages.js index 190417536..cc219957a 100644 --- a/src/i18n/globalMessages.js +++ b/src/i18n/globalMessages.js @@ -33,8 +33,4 @@ export default defineMessages({ id: 'global.userAgentHelp', defaultMessage: "!!!Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", }, - proRequired: { - id: 'global.franzProRequired', - defaultMessage: '!!!Franz Professional Required', - }, }); diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json index e2af263a5..ef9e3ecee 100644 --- a/src/i18n/locales/ar.json +++ b/src/i18n/locales/ar.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "أوه لا! فقد فردي الاتصال بـ.", "feature.announcements.changelog.headline": "تغيرات في فريدي {version}", "feature.debugger.title": "نشر معلومات تصحيح الأخطاء", - "feature.delayApp.headline": "رجاء قيم بشراء رخصة الدعم لبرنامج فريدي للتخلص من وقت الانتظار", - "feature.delayApp.text": "فريدي سوف يستكمل خلال {seconds} ثانية.", - "feature.delayApp.trial.action": "أجل, أريد الحصول على 14 يوم تجريبي مجاني من برنامج فريدي بروفشنال", - "feature.delayApp.trial.actionShort": "تفعيل الفتره التجريبية لرنامج فريدي بروفشنال", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "الحصول على ترخيص الدعم لفردي", - "feature.delayApp.upgrade.actionShort": "ترقية الحساب", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "إلغاء", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", diff --git a/src/i18n/locales/bg.json b/src/i18n/locales/bg.json index a2a28c856..188ad3922 100644 --- a/src/i18n/locales/bg.json +++ b/src/i18n/locales/bg.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", - "feature.delayApp.headline": "Upgrade your Ferdi plan to skip the wait", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14-days trial and skip the wait", - "feature.delayApp.upgrade.action": "Upgrade Ferdi", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", "feature.planSelection.cta.stayOnFree": "Stay on Free", "feature.planSelection.cta.trial": "Start my free 14-days Trial", diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json index 561fe3c4c..2cdc3e136 100644 --- a/src/i18n/locales/ca.json +++ b/src/i18n/locales/ca.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Oh no! Ferdi ha perdut la connexió a {name}.", "feature.announcements.changelog.headline": "Canvis en Ferdi {version}", "feature.debugger.title": "Registra la informació de depuració", - "feature.delayApp.headline": "Si us plau, compra una llicència de suport per a Ferdi per saltar l'espera", - "feature.delayApp.text": "Ferdi continuarà en {seconds} segons", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Aconsegueix una llicència de suport per a Ferdi", - "feature.delayApp.upgrade.actionShort": "Millorar el teu compte", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "Cancel·la", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 6f76f74ea..0d2e55ae2 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -12,33 +12,10 @@ "connectionLostBanner.message": "Oh nein! Ferdi hat die Verbindung zu {name} verloren.", "feature.announcements.changelog.headline": "Was ist neu in Ferdi {version}", "feature.debugger.title": "Debug-Informationen veröffentlichen", - "feature.delayApp.headline": "Bitte kaufe eine Ferdi Supporter Lizenz, um das Warten zu überspringen", - "feature.delayApp.text": "In {seconds} Sekunden geht's weiter!", - "feature.delayApp.trial.action": "Ja, ich möchte Ferdi Professional 14 Tage gratis testen", - "feature.delayApp.trial.actionShort": "Aktiviere die kostenlose Ferdi Professional Testlizenz", - "feature.delayApp.trial.headline": "Hol dir die kostenlose Ferdi Professional Testlizenz und es geht ohne Warten weiter", - "feature.delayApp.upgrade.action": "Hol dir Ferdi Premium", - "feature.delayApp.upgrade.actionShort": "Account erweitern", "feature.nightlyBuilds.activate": "Aktivieren", "feature.nightlyBuilds.cancel": "Abbrechen", "feature.nightlyBuilds.info": "Nightly builds sind experimentelle Versionen von Ferdi die unfertige Funktionen enthalten kann. Nightly builds werden hauptsächlich von Entwicklern genutzt um neu entwickelte Features zu testen und zu sehen wie sie sich in der finalen Version verhalten. Wenn du nicht genau weisst was du tust, empfehlen wir dir Nightly Builds nicht zu aktivieren.", "feature.nightlyBuilds.title": "Nightly Builds", - "feature.planSelection.cta.ctaDowngradeFree": "Auf kostenlosen Plan herunterstufen", - "feature.planSelection.cta.stayOnFree": "Auf kostenlosem Plan bleiben", - "feature.planSelection.cta.trial": "Starte meine 14-Tage Testversion", - "feature.planSelection.cta.upgradePersonal": "Personal Plan wählen", - "feature.planSelection.cta.upgradePro": "Professional Plan wählen", - "feature.planSelection.free.text": "Einfache Funktionalität", - "feature.planSelection.fullFeatureList": "Kompletter Vergleich aller Pläne", - "feature.planSelection.fullscreen.dialog.cta.downgrade": "Auf kostenlosen Plan herunterstufen", - "feature.planSelection.fullscreen.dialog.cta.upgrade": "Personal Plan wählen", - "feature.planSelection.fullscreen.dialog.message": "Du bist dabei, auf ein kostenloses Konto herunterzustufen. Bist du sicher? Klicke stattdessen hier, um mehr Dienste und Funktionen für nur {currency}{price} pro Monat zu erhalten.", - "feature.planSelection.fullscreen.dialog.title": "Deinen Ferdi Plan herunterstufen", - "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Ferdi works best on our Personal and Professional plans. Please have a look and choose the best one for you.", - "feature.planSelection.fullscreen.welcome": "Bist du bereit zu wählen, {name}", - "feature.planSelection.personal.text": "Weitere Dienste, keine Wartezeiten - ideal für den persönlichen Gebrauch.", - "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment", - "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", "feature.publishDebugInfo.error": "Beim Veröffentlichen der Debug-Informationen ist ein Fehler aufgetreten. Bitte versuche es später noch einmal oder sehe dir die Konsole für weitere Informationen an.", "feature.publishDebugInfo.info": "Die Veröffentlichung deiner Debug-Informationen hilft uns, Probleme und Fehler in Ferdi zu finden. Indem du deine Debug-Informationen veröffentlichst, akzeptierst du die Datenschutzbestimmungen und Nutzungsbedingungen vom Ferdi Debugger", "feature.publishDebugInfo.privacy": "Datenschutzrichtlinien", diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index 370a6fb92..37e065d28 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json @@ -658,180 +658,6 @@ ], "path": "src/components/auth/Password.json" }, - { - "descriptors": [ - { - "defaultMessage": "!!!Hi {name}, welcome to Franz", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.headline.pro", - "start": { - "column": 12, - "line": 14 - } - }, - { - "defaultMessage": "!!!We have a special treat for you.", - "end": { - "column": 3, - "line": 21 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.intro.specialTreat", - "start": { - "column": 16, - "line": 18 - } - }, - { - "defaultMessage": "!!!Enjoy the full Franz Professional experience completely free for 14 days.", - "end": { - "column": 3, - "line": 25 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.intro.tryPro", - "start": { - "column": 10, - "line": 22 - } - }, - { - "defaultMessage": "!!!Happy messaging,", - "end": { - "column": 3, - "line": 29 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.intro.happyMessaging", - "start": { - "column": 18, - "line": 26 - } - }, - { - "defaultMessage": "!!!No strings attached", - "end": { - "column": 3, - "line": 33 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.terms.headline", - "start": { - "column": 29, - "line": 30 - } - }, - { - "defaultMessage": "!!!No credit card required", - "end": { - "column": 3, - "line": 37 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.terms.noCreditCard", - "start": { - "column": 16, - "line": 34 - } - }, - { - "defaultMessage": "!!!Your free trial ends automatically after 14 days", - "end": { - "column": 3, - "line": 41 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.terms.automaticTrialEnd", - "start": { - "column": 21, - "line": 38 - } - }, - { - "defaultMessage": "!!!Free trial (normally {currency}{price} per month)", - "end": { - "column": 3, - "line": 45 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.terms.trialWorth", - "start": { - "column": 14, - "line": 42 - } - }, - { - "defaultMessage": "!!!Sorry, we could not activate your trial!", - "end": { - "column": 3, - "line": 49 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.error", - "start": { - "column": 19, - "line": 46 - } - }, - { - "defaultMessage": "!!!Start my 14-day Franz Professional Trial", - "end": { - "column": 3, - "line": 53 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.cta.accept", - "start": { - "column": 13, - "line": 50 - } - }, - { - "defaultMessage": "!!!Start using Franz", - "end": { - "column": 3, - "line": 57 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.cta.start", - "start": { - "column": 12, - "line": 54 - } - }, - { - "defaultMessage": "!!!Continue to Ferdi", - "end": { - "column": 3, - "line": 61 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.cta.skip", - "start": { - "column": 11, - "line": 58 - } - }, - { - "defaultMessage": "!!!Franz Professional includes:", - "end": { - "column": 3, - "line": 65 - }, - "file": "src/components/auth/Pricing.js", - "id": "pricing.trial.features.headline", - "start": { - "column": 20, - "line": 62 - } - } - ], - "path": "src/components/auth/Pricing.json" - }, { "descriptors": [ { @@ -1209,52 +1035,52 @@ "defaultMessage": "!!!Your services have been updated.", "end": { "column": 3, - "line": 35 + "line": 32 }, "file": "src/components/layout/AppLayout.js", "id": "infobar.servicesUpdated", "start": { "column": 19, - "line": 32 + "line": 29 } }, { "defaultMessage": "!!!Reload services", "end": { "column": 3, - "line": 39 + "line": 36 }, "file": "src/components/layout/AppLayout.js", "id": "infobar.buttonReloadServices", "start": { "column": 24, - "line": 36 + "line": 33 } }, { "defaultMessage": "!!!Could not load services and user information", "end": { "column": 3, - "line": 43 + "line": 40 }, "file": "src/components/layout/AppLayout.js", "id": "infobar.requiredRequestsFailed", "start": { "column": 26, - "line": 40 + "line": 37 } }, { "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "end": { "column": 3, - "line": 47 + "line": 44 }, "file": "src/components/layout/AppLayout.js", "id": "infobar.authRequestFailed", "start": { "column": 21, - "line": 44 + "line": 41 } } ], @@ -2075,273 +1901,195 @@ "defaultMessage": "!!!Account", "end": { "column": 3, - "line": 20 + "line": 17 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.headline", "start": { "column": 12, - "line": 17 + "line": 14 } }, { "defaultMessage": "!!!Your Subscription", "end": { "column": 3, - "line": 24 + "line": 21 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.headlineSubscription", "start": { "column": 24, - "line": 21 + "line": 18 } }, { "defaultMessage": "!!Danger Zone", "end": { "column": 3, - "line": 28 + "line": 25 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.headlineDangerZone", "start": { "column": 22, - "line": 25 + "line": 22 } }, { "defaultMessage": "!!!Manage your subscription", "end": { "column": 3, - "line": 32 + "line": 29 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.manageSubscription.label", "start": { "column": 33, - "line": 29 - } - }, - { - "defaultMessage": "!!!Upgrade to Franz Professional", - "end": { - "column": 3, - "line": 36 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.upgradeToPro.label", - "start": { - "column": 23, - "line": 33 - } - }, - { - "defaultMessage": "!!!Basic Account", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.accountType.basic", - "start": { - "column": 20, - "line": 37 - } - }, - { - "defaultMessage": "!!!Premium Supporter Account", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.accountType.premium", - "start": { - "column": 22, - "line": 41 + "line": 26 } }, { "defaultMessage": "!!!Edit Account", "end": { "column": 3, - "line": 48 + "line": 33 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.account.editButton", "start": { "column": 21, - "line": 45 + "line": 30 } }, { "defaultMessage": "!!Invoices", "end": { "column": 3, - "line": 52 + "line": 37 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.headlineInvoices", "start": { "column": 18, - "line": 49 + "line": 34 } }, { "defaultMessage": "!!!Download", "end": { "column": 3, - "line": 56 + "line": 41 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.invoiceDownload", "start": { "column": 19, - "line": 53 + "line": 38 } }, { "defaultMessage": "!!!Could not load user information", "end": { "column": 3, - "line": 60 + "line": 45 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.userInfoRequestFailed", "start": { "column": 25, - "line": 57 + "line": 42 } }, { "defaultMessage": "!!!Try again", "end": { "column": 3, - "line": 64 + "line": 49 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.tryReloadUserInfoRequest", "start": { "column": 28, - "line": 61 + "line": 46 } }, { "defaultMessage": "!!!Delete account", "end": { "column": 3, - "line": 68 + "line": 53 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.deleteAccount", "start": { "column": 17, - "line": 65 + "line": 50 } }, { "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "end": { "column": 3, - "line": 73 + "line": 58 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.deleteInfo", "start": { "column": 14, - "line": 69 + "line": 54 } }, { "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "end": { "column": 3, - "line": 78 + "line": 63 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.deleteEmailSent", "start": { "column": 19, - "line": 74 - } - }, - { - "defaultMessage": "!!!Free Trial", - "end": { - "column": 3, - "line": 82 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.trial", - "start": { - "column": 9, - "line": 79 + "line": 59 } }, { "defaultMessage": "!!!Your Franz License:", "end": { "column": 3, - "line": 86 + "line": 67 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.yourLicense", "start": { "column": 15, - "line": 83 + "line": 64 } }, { - "defaultMessage": "!!!Your free trial ends in {duration}.", + "defaultMessage": "Account is unavailable", "end": { "column": 3, - "line": 90 + "line": 71 }, "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.trialEndsIn", + "id": "settings.account.accountUnavailable", "start": { - "column": 15, - "line": 87 + "column": 22, + "line": 68 } }, { - "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", + "defaultMessage": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", "end": { "column": 3, - "line": 95 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.trialUpdateBillingInfo", - "start": { - "column": 33, - "line": 91 - } - }, - { - "defaultMessage": "Account is unavailable", - "end": { - "column": 3, - "line": 99 - }, - "file": "src/components/settings/account/AccountDashboard.js", - "id": "settings.account.accountUnavailable", - "start": { - "column": 22, - "line": 96 - } - }, - { - "defaultMessage": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", - "end": { - "column": 3, - "line": 103 + "line": 75 }, "file": "src/components/settings/account/AccountDashboard.js", "id": "settings.account.accountUnavailableInfo", "start": { "column": 26, - "line": 100 + "line": 72 } } ], @@ -2353,104 +2101,104 @@ "defaultMessage": "!!!Available services", "end": { "column": 3, - "line": 20 + "line": 18 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.availableServices", "start": { "column": 21, - "line": 17 + "line": 15 } }, { "defaultMessage": "!!!Your services", "end": { "column": 3, - "line": 24 + "line": 22 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.yourServices", "start": { "column": 16, - "line": 21 + "line": 19 } }, { "defaultMessage": "!!!Your workspaces", "end": { "column": 3, - "line": 28 + "line": 26 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.yourWorkspaces", "start": { "column": 18, - "line": 25 + "line": 23 } }, { "defaultMessage": "!!!Account", "end": { "column": 3, - "line": 32 + "line": 30 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.account", "start": { "column": 11, - "line": 29 + "line": 27 } }, { "defaultMessage": "!!!Manage Team", "end": { "column": 3, - "line": 36 + "line": 34 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.team", "start": { "column": 8, - "line": 33 + "line": 31 } }, { "defaultMessage": "!!!Settings", "end": { "column": 3, - "line": 40 + "line": 38 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.settings", "start": { "column": 12, - "line": 37 + "line": 35 } }, { "defaultMessage": "!!!About Ferdi", "end": { "column": 3, - "line": 44 + "line": 42 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.supportFerdi", "start": { "column": 16, - "line": 41 + "line": 39 } }, { "defaultMessage": "!!!Logout", "end": { "column": 3, - "line": 48 + "line": 46 }, "file": "src/components/settings/navigation/SettingsNavigation.js", "id": "settings.navigation.logout", "start": { "column": 10, - "line": 45 + "line": 43 } } ], @@ -2462,182 +2210,182 @@ "defaultMessage": "!!!Available Services", "end": { "column": 3, - "line": 24 + "line": 22 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.headline", "start": { "column": 12, - "line": 21 + "line": 19 } }, { "defaultMessage": "!!!Search service", "end": { "column": 3, - "line": 28 + "line": 26 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.searchService", "start": { "column": 17, - "line": 25 + "line": 23 } }, { "defaultMessage": "!!!Most popular", "end": { "column": 3, - "line": 32 + "line": 30 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.mostPopular", "start": { "column": 22, - "line": 29 + "line": 27 } }, { "defaultMessage": "!!!All services", "end": { "column": 3, - "line": 36 + "line": 34 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.all", "start": { "column": 14, - "line": 33 + "line": 31 } }, { "defaultMessage": "!!!Custom Services", "end": { "column": 3, - "line": 40 + "line": 38 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.custom", "start": { "column": 17, - "line": 37 + "line": 35 } }, { "defaultMessage": "!!!Sorry, but no service matched your search term - but you can still probably add it using the \"Custom Website\" option. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", "end": { "column": 3, - "line": 44 + "line": 42 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.nothingFound", "start": { "column": 16, - "line": 41 + "line": 39 } }, { "defaultMessage": "!!!Service successfully added", "end": { "column": 3, - "line": 48 + "line": 46 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.servicesSuccessfulAddedInfo", "start": { "column": 31, - "line": 45 + "line": 43 } }, { "defaultMessage": "!!!Missing a service?", "end": { "column": 3, - "line": 52 + "line": 50 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.missingService", "start": { "column": 18, - "line": 49 + "line": 47 } }, { "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", "end": { "column": 3, - "line": 56 + "line": 54 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.intro", "start": { "column": 21, - "line": 53 + "line": 51 } }, { "defaultMessage": "!!!Open directory", "end": { "column": 3, - "line": 60 + "line": 58 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.openFolder", "start": { "column": 14, - "line": 57 + "line": 55 } }, { "defaultMessage": "!!!Developer Documentation", "end": { "column": 3, - "line": 64 + "line": 62 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.openDevDocs", "start": { "column": 15, - "line": 61 + "line": 59 } }, { "defaultMessage": "!!!Custom 3rd Party Recipes", "end": { "column": 3, - "line": 68 + "line": 66 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.headline.customRecipes", "start": { "column": 25, - "line": 65 + "line": 63 } }, { "defaultMessage": "!!!Community 3rd Party Recipes", "end": { "column": 3, - "line": 72 + "line": 70 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.headline.communityRecipes", "start": { "column": 28, - "line": 69 + "line": 67 } }, { "defaultMessage": "!!!Your Development Service Recipes", "end": { "column": 3, - "line": 76 + "line": 74 }, "file": "src/components/settings/recipes/RecipesDashboard.js", "id": "settings.recipes.customService.headline.devRecipes", "start": { "column": 22, - "line": 73 + "line": 71 } } ], @@ -2649,364 +2397,338 @@ "defaultMessage": "!!!Save service", "end": { "column": 3, - "line": 30 + "line": 26 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.saveButton", "start": { "column": 15, - "line": 27 + "line": 23 } }, { "defaultMessage": "!!!Delete Service", "end": { "column": 3, - "line": 34 + "line": 30 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.deleteButton", "start": { "column": 17, - "line": 31 + "line": 27 } }, { "defaultMessage": "!!!Open darkmode.css", "end": { "column": 3, - "line": 38 + "line": 34 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.openDarkmodeCss", "start": { "column": 19, - "line": 35 + "line": 31 } }, { "defaultMessage": "!!!Open user.css", "end": { "column": 3, - "line": 42 + "line": 38 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.openUserCss", "start": { "column": 15, - "line": 39 + "line": 35 } }, { "defaultMessage": "!!!Open user.js", "end": { "column": 3, - "line": 46 + "line": 42 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.openUserJs", "start": { "column": 14, - "line": 43 + "line": 39 } }, { "defaultMessage": "!!!Your user files will be inserted into the webpage so you can customize services in any way you like. User files are only stored locally and are not transferred to other computers using the same account.", "end": { "column": 3, - "line": 50 + "line": 46 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.recipeFileInfo", "start": { "column": 18, - "line": 47 + "line": 43 } }, { "defaultMessage": "!!!Available services", "end": { "column": 3, - "line": 54 + "line": 50 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.availableServices", "start": { "column": 21, - "line": 51 + "line": 47 } }, { "defaultMessage": "!!!Your services", "end": { "column": 3, - "line": 58 + "line": 54 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.yourServices", "start": { "column": 16, - "line": 55 + "line": 51 } }, { "defaultMessage": "!!!Add {name}", "end": { "column": 3, - "line": 62 + "line": 58 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.addServiceHeadline", "start": { "column": 22, - "line": 59 + "line": 55 } }, { "defaultMessage": "!!!Edit {name}", "end": { "column": 3, - "line": 66 + "line": 62 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.editServiceHeadline", "start": { "column": 23, - "line": 63 + "line": 59 } }, { "defaultMessage": "!!!Hosted", "end": { "column": 3, - "line": 70 + "line": 66 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.tabHosted", "start": { "column": 13, - "line": 67 + "line": 63 } }, { "defaultMessage": "!!!Self hosted ⭐️", "end": { "column": 3, - "line": 74 + "line": 70 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.tabOnPremise", "start": { "column": 16, - "line": 71 + "line": 67 } }, { "defaultMessage": "!!!Use the hosted {name} service.", "end": { "column": 3, - "line": 78 + "line": 74 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.useHostedService", "start": { "column": 20, - "line": 75 + "line": 71 } }, { "defaultMessage": "!!!Could not validate custom {name} server.", "end": { "column": 3, - "line": 82 + "line": 78 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.customUrlValidationError", "start": { "column": 28, - "line": 79 - } - }, - { - "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", - "end": { - "column": 3, - "line": 86 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.customUrlPremiumInfo", - "start": { - "column": 24, - "line": 83 - } - }, - { - "defaultMessage": "!!!Upgrade your account", - "end": { - "column": 3, - "line": 90 - }, - "file": "src/components/settings/services/EditServiceForm.js", - "id": "settings.service.form.customUrlUpgradeAccount", - "start": { - "column": 27, - "line": 87 + "line": 75 } }, { "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", "end": { "column": 3, - "line": 94 + "line": 82 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.indirectMessageInfo", "start": { "column": 23, - "line": 91 + "line": 79 } }, { "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", "end": { "column": 3, - "line": 98 + "line": 86 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.isMutedInfo", "start": { "column": 15, - "line": 95 + "line": 83 } }, { "defaultMessage": "!!!When enabled, a service will be shut down after a period of time to save system resources.", "end": { "column": 3, - "line": 102 + "line": 90 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.isHibernatedEnabledInfo", "start": { "column": 28, - "line": 99 + "line": 87 } }, { "defaultMessage": "!!!Notifications", "end": { "column": 3, - "line": 106 + "line": 94 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.headlineNotifications", "start": { "column": 25, - "line": 103 + "line": 91 } }, { "defaultMessage": "!!!Unread message badges", "end": { "column": 3, - "line": 110 + "line": 98 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.headlineBadges", "start": { "column": 18, - "line": 107 + "line": 95 } }, { "defaultMessage": "!!!General", "end": { "column": 3, - "line": 114 + "line": 102 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.headlineGeneral", "start": { "column": 19, - "line": 111 + "line": 99 } }, { "defaultMessage": "!!!Dark Reader Settings", "end": { "column": 3, - "line": 118 + "line": 106 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.headlineDarkReaderSettings", "start": { "column": 30, - "line": 115 + "line": 103 } }, { "defaultMessage": "!!!Delete", "end": { "column": 3, - "line": 122 + "line": 110 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.iconDelete", "start": { "column": 14, - "line": 119 + "line": 107 } }, { "defaultMessage": "!!!Drop your image, or click here", "end": { "column": 3, - "line": 126 + "line": 114 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.iconUpload", "start": { "column": 14, - "line": 123 + "line": 111 } }, { "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", "end": { "column": 3, - "line": 130 + "line": 118 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.proxy.headline", "start": { "column": 17, - "line": 127 + "line": 115 } }, { "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", "end": { "column": 3, - "line": 134 + "line": 122 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.proxy.restartInfo", "start": { "column": 20, - "line": 131 + "line": 119 } }, { "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", "end": { "column": 3, - "line": 138 + "line": 126 }, "file": "src/components/settings/services/EditServiceForm.js", "id": "settings.service.form.proxy.info", "start": { "column": 13, - "line": 135 + "line": 123 } } ], @@ -3119,117 +2841,117 @@ "defaultMessage": "!!!Your services", "end": { "column": 3, - "line": 19 + "line": 18 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.headline", "start": { "column": 12, - "line": 16 + "line": 15 } }, { "defaultMessage": "!!!Search service", "end": { "column": 3, - "line": 23 + "line": 22 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.searchService", "start": { "column": 17, - "line": 20 + "line": 19 } }, { "defaultMessage": "!!!Start by adding a service.", "end": { "column": 3, - "line": 27 + "line": 26 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.noServicesAdded", "start": { "column": 19, - "line": 24 + "line": 23 } }, { "defaultMessage": "!!!Sorry, but no service matched your search term. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", "end": { "column": 3, - "line": 31 + "line": 30 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.recipes.nothingFound", "start": { "column": 18, - "line": 28 + "line": 27 } }, { "defaultMessage": "!!!Discover services", "end": { "column": 3, - "line": 35 + "line": 34 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.discoverServices", "start": { "column": 20, - "line": 32 + "line": 31 } }, { "defaultMessage": "!!!Could not load your services", "end": { "column": 3, - "line": 39 + "line": 38 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.servicesRequestFailed", "start": { "column": 25, - "line": 36 + "line": 35 } }, { "defaultMessage": "!!!Try again", "end": { "column": 3, - "line": 43 + "line": 42 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.account.tryReloadServices", "start": { "column": 21, - "line": 40 + "line": 39 } }, { "defaultMessage": "!!!Your changes have been saved", "end": { "column": 3, - "line": 47 + "line": 46 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.updatedInfo", "start": { "column": 15, - "line": 44 + "line": 43 } }, { "defaultMessage": "!!!Service has been deleted", "end": { "column": 3, - "line": 51 + "line": 50 }, "file": "src/components/settings/services/ServicesDashboard.js", "id": "settings.services.deletedInfo", "start": { "column": 15, - "line": 48 + "line": 47 } } ], @@ -3241,416 +2963,416 @@ "defaultMessage": "!!!Settings", "end": { "column": 3, - "line": 27 + "line": 26 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headline", "start": { "column": 12, - "line": 24 + "line": 23 } }, { "defaultMessage": "!!!General", "end": { "column": 3, - "line": 31 + "line": 30 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineGeneral", "start": { "column": 19, - "line": 28 + "line": 27 } }, { "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.", "end": { "column": 3, - "line": 35 + "line": 34 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.sentryInfo", "start": { "column": 14, - "line": 32 + "line": 31 } }, { "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", "end": { "column": 3, - "line": 39 + "line": 38 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.hibernateInfo", "start": { "column": 17, - "line": 36 + "line": 35 } }, { "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", "end": { "column": 3, - "line": 43 + "line": 42 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.inactivityLockInfo", "start": { "column": 22, - "line": 40 + "line": 39 } }, { "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", "end": { "column": 3, - "line": 47 + "line": 46 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.todoServerInfo", "start": { "column": 18, - "line": 44 + "line": 43 } }, { "defaultMessage": "!!!Password", "end": { "column": 3, - "line": 51 + "line": 50 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.lockedPassword", "start": { "column": 18, - "line": 48 + "line": 47 } }, { "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "end": { "column": 3, - "line": 55 + "line": 54 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.lockedPasswordInfo", "start": { "column": 22, - "line": 52 + "line": 51 } }, { "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.", "end": { "column": 3, - "line": 59 + "line": 58 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.lockInfo", "start": { "column": 12, - "line": 56 + "line": 55 } }, { "defaultMessage": "!!!Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", "end": { "column": 3, - "line": 63 + "line": 62 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.scheduledDNDTimeInfo", "start": { "column": 24, - "line": 60 + "line": 59 } }, { "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", "end": { "column": 3, - "line": 67 + "line": 66 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.scheduledDNDInfo", "start": { "column": 20, - "line": 64 + "line": 63 } }, { "defaultMessage": "!!!Language", "end": { "column": 3, - "line": 71 + "line": 70 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineLanguage", "start": { "column": 20, - "line": 68 + "line": 67 } }, { "defaultMessage": "!!!Updates", "end": { "column": 3, - "line": 75 + "line": 74 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineUpdates", "start": { "column": 19, - "line": 72 + "line": 71 } }, { "defaultMessage": "!!!Appearance", "end": { "column": 3, - "line": 79 + "line": 78 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineAppearance", "start": { "column": 22, - "line": 76 + "line": 75 } }, { "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", "end": { "column": 3, - "line": 83 + "line": 82 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.universalDarkModeInfo", "start": { "column": 25, - "line": 80 + "line": 79 } }, { "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "end": { "column": 3, - "line": 87 + "line": 86 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.accentColorInfo", "start": { "column": 19, - "line": 84 + "line": 83 } }, { "defaultMessage": "!!!Privacy", "end": { "column": 3, - "line": 91 + "line": 90 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlinePrivacy", "start": { "column": 19, - "line": 88 + "line": 87 } }, { "defaultMessage": "!!!Advanced", "end": { "column": 3, - "line": 95 + "line": 94 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineAdvanced", "start": { "column": 20, - "line": 92 + "line": 91 } }, { "defaultMessage": "!!!Help us to translate Ferdi into your language.", "end": { "column": 3, - "line": 99 + "line": 98 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.translationHelp", "start": { "column": 19, - "line": 96 + "line": 95 } }, { "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", "end": { "column": 3, - "line": 103 + "line": 102 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.spellCheckerLanguageInfo", "start": { "column": 28, - "line": 100 + "line": 99 } }, { "defaultMessage": "!!!Cache", "end": { "column": 3, - "line": 107 + "line": 106 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.subheadlineCache", "start": { "column": 20, - "line": 104 + "line": 103 } }, { "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", "end": { "column": 3, - "line": 111 + "line": 110 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.cacheInfo", "start": { "column": 13, - "line": 108 + "line": 107 } }, { "defaultMessage": "!!!Couldn't clear all cache", "end": { "column": 3, - "line": 115 + "line": 114 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.cacheNotCleared", "start": { "column": 19, - "line": 112 + "line": 111 } }, { "defaultMessage": "!!!Clear cache", "end": { "column": 3, - "line": 119 + "line": 118 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonClearAllCache", "start": { "column": 23, - "line": 116 + "line": 115 } }, { "defaultMessage": "!!!Check for updates", "end": { "column": 3, - "line": 123 + "line": 122 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonSearchForUpdate", "start": { "column": 25, - "line": 120 + "line": 119 } }, { "defaultMessage": "!!!Restart & install update", "end": { "column": 3, - "line": 127 + "line": 126 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonInstallUpdate", "start": { "column": 23, - "line": 124 + "line": 123 } }, { "defaultMessage": "!!!Is searching for update", "end": { "column": 3, - "line": 131 + "line": 130 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusSearching", "start": { "column": 25, - "line": 128 + "line": 127 } }, { "defaultMessage": "!!!Update available, downloading...", "end": { "column": 3, - "line": 135 + "line": 134 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusAvailable", "start": { "column": 25, - "line": 132 + "line": 131 } }, { "defaultMessage": "!!!You are using the latest version of Ferdi", "end": { "column": 3, - "line": 139 + "line": 138 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusUpToDate", "start": { "column": 24, - "line": 136 + "line": 135 } }, { "defaultMessage": "!!!Current version:", "end": { "column": 3, - "line": 143 + "line": 142 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.currentVersion", "start": { "column": 18, - "line": 140 + "line": 139 } }, { "defaultMessage": "!!!Changes require restart", "end": { "column": 3, - "line": 147 + "line": 146 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.restartRequired", "start": { "column": 22, - "line": 144 + "line": 143 } }, { "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", "end": { "column": 3, - "line": 151 + "line": 150 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.languageDisclaimer", "start": { "column": 22, - "line": 148 + "line": 147 } } ], @@ -3880,104 +3602,91 @@ "defaultMessage": "!!!Team", "end": { "column": 3, - "line": 21 + "line": 18 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.headline", "start": { "column": 12, - "line": 18 + "line": 15 } }, { "defaultMessage": "!!!Franz Team Management", "end": { "column": 3, - "line": 25 + "line": 22 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.contentHeadline", "start": { "column": 19, - "line": 22 + "line": 19 } }, { "defaultMessage": "!!!Your are currently using Franz Servers, which is why you have access to Team Management.", "end": { "column": 3, - "line": 29 + "line": 26 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.intro", "start": { "column": 9, - "line": 26 + "line": 23 } }, { "defaultMessage": "!!!Franz's Team Management allows you to manage Franz Subscriptions for multiple users. Please keep in mind that having a Franz Premium subscription will give you no advantages in using Ferdi: The only reason you still have access to Team Management is so you can manage your legacy Franz Teams and so that you don't loose any functionality in managing your account.", "end": { "column": 3, - "line": 33 + "line": 30 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.copy", "start": { "column": 8, - "line": 30 + "line": 27 } }, { "defaultMessage": "!!!Manage your Team on meetfranz.com", "end": { "column": 3, - "line": 37 + "line": 34 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.manageAction", "start": { "column": 16, - "line": 34 - } - }, - { - "defaultMessage": "!!!Upgrade your Account", - "end": { - "column": 3, - "line": 41 - }, - "file": "src/components/settings/team/TeamDashboard.js", - "id": "settings.team.upgradeAction", - "start": { - "column": 17, - "line": 38 + "line": 31 } }, { "defaultMessage": "!!!Teams are unavailable", "end": { "column": 3, - "line": 45 + "line": 38 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.teamsUnavailable", "start": { "column": 20, - "line": 42 + "line": 35 } }, { "defaultMessage": "!!!Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.", "end": { "column": 3, - "line": 49 + "line": 42 }, "file": "src/components/settings/team/TeamDashboard.js", "id": "settings.team.teamsUnavailableInfo", "start": { "column": 24, - "line": 46 + "line": 39 } } ], @@ -4069,2072 +3778,1310 @@ { "descriptors": [ { - "defaultMessage": "!!!Choose your plan", + "defaultMessage": "!!!Choose from more than 70 Services", "end": { "column": 3, - "line": 16 + "line": 11 }, - "file": "src/components/subscription/SubscriptionForm.js", - "id": "subscription.cta.choosePlan", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.recipes", "start": { - "column": 21, - "line": 13 + "column": 20, + "line": 8 } }, { - "defaultMessage": "!!!Upgrade your account and get the full Franz experience", + "defaultMessage": "!!!Account Synchronisation", "end": { "column": 3, - "line": 20 + "line": 15 }, - "file": "src/components/subscription/SubscriptionForm.js", - "id": "settings.account.headlineUpgradeAccount", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.accountSync", "start": { - "column": 18, - "line": 17 + "column": 15, + "line": 12 } }, { - "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", + "defaultMessage": "!!!Desktop Notifications", "end": { "column": 3, - "line": 24 + "line": 19 }, - "file": "src/components/subscription/SubscriptionForm.js", - "id": "subscription.teaser.intro", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.desktopNotifications", "start": { - "column": 14, - "line": 21 + "column": 24, + "line": 16 } }, { - "defaultMessage": "!!!Paid Franz Plans include:", + "defaultMessage": "!!!Add unlimited services", "end": { "column": 3, - "line": 28 + "line": 23 }, - "file": "src/components/subscription/SubscriptionForm.js", - "id": "subscription.teaser.includedFeatures", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.unlimitedServices", "start": { - "column": 20, - "line": 25 + "column": 21, + "line": 20 } - } - ], - "path": "src/components/subscription/SubscriptionForm.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Cancel", + "defaultMessage": "!!!Spellchecker support", "end": { "column": 3, - "line": 14 + "line": 27 }, - "file": "src/components/subscription/SubscriptionPopup.js", - "id": "subscriptionPopup.buttonCancel", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.spellchecker", "start": { "column": 16, - "line": 11 + "line": 24 } }, { - "defaultMessage": "!!!Done", + "defaultMessage": "!!!Workspaces", "end": { "column": 3, - "line": 18 + "line": 31 }, - "file": "src/components/subscription/SubscriptionPopup.js", - "id": "subscriptionPopup.buttonDone", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.workspaces", "start": { "column": 14, - "line": 15 + "line": 28 } - } - ], - "path": "src/components/subscription/SubscriptionPopup.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Yes, start the free Franz Professional trial", + "defaultMessage": "!!!Add Custom Websites", "end": { "column": 3, - "line": 17 + "line": 35 }, - "file": "src/components/subscription/TrialForm.js", - "id": "subscription.cta.activateTrial", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.customWebsites", "start": { - "column": 21, - "line": 14 + "column": 18, + "line": 32 } }, { - "defaultMessage": "!!!See all options", + "defaultMessage": "!!!On-premise & other Hosted Services", "end": { "column": 3, - "line": 21 + "line": 39 }, - "file": "src/components/subscription/TrialForm.js", - "id": "subscription.cta.allOptions", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.onPremise", "start": { - "column": 20, - "line": 18 + "column": 13, + "line": 36 } }, { - "defaultMessage": "!!!Get the free 14 day Franz Professional Trial", + "defaultMessage": "!!!Install 3rd party services", "end": { "column": 3, - "line": 25 + "line": 43 }, - "file": "src/components/subscription/TrialForm.js", - "id": "settings.account.headlineTrialUpgrade", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.thirdPartyServices", "start": { - "column": 18, - "line": 22 + "column": 22, + "line": 40 } }, { - "defaultMessage": "!!!The Franz Professional Plan includes:", + "defaultMessage": "!!!Service Proxies", "end": { "column": 3, - "line": 29 + "line": 47 }, - "file": "src/components/subscription/TrialForm.js", - "id": "subscription.includedProFeatures", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.serviceProxies", "start": { - "column": 20, - "line": 26 + "column": 18, + "line": 44 } }, { - "defaultMessage": "!!!No strings attached", + "defaultMessage": "!!!Team Management", "end": { "column": 3, - "line": 33 + "line": 51 }, - "file": "src/components/subscription/TrialForm.js", - "id": "pricing.trial.terms.headline", + "file": "src/components/ui/FeatureList.js", + "id": "pricing.features.teamManagement", "start": { - "column": 29, - "line": 30 + "column": 18, + "line": 48 } - }, + } + ], + "path": "src/components/ui/FeatureList.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!No credit card required", + "defaultMessage": "!!!Hide", "end": { "column": 3, - "line": 37 + "line": 15 }, - "file": "src/components/subscription/TrialForm.js", - "id": "pricing.trial.terms.noCreditCard", + "file": "src/components/ui/InfoBar.js", + "id": "infobar.hide", "start": { - "column": 16, - "line": 34 + "column": 8, + "line": 12 } - }, + } + ], + "path": "src/components/ui/InfoBar.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!Your free trial ends automatically after 14 days", + "defaultMessage": "!!!Dismiss", "end": { "column": 3, - "line": 41 + "line": 12 }, - "file": "src/components/subscription/TrialForm.js", - "id": "pricing.trial.terms.automaticTrialEnd", + "file": "src/components/ui/Infobox.js", + "id": "infobox.dismiss", "start": { - "column": 21, - "line": 38 + "column": 11, + "line": 9 } } ], - "path": "src/components/subscription/TrialForm.json" + "path": "src/components/ui/Infobox.json" }, { "descriptors": [ { - "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!", + "defaultMessage": "!!!Password toggle", "end": { "column": 3, "line": 14 }, - "file": "src/components/TrialActivationInfoBar.js", - "id": "infobar.trialActivated", + "file": "src/components/ui/Input.js", + "id": "settings.app.form.passwordToggle", "start": { - "column": 11, + "column": 18, "line": 11 } } ], - "path": "src/components/TrialActivationInfoBar.json" + "path": "src/components/ui/Input.json" }, { "descriptors": [ { - "defaultMessage": "!!!Get a Franz Supporter License", + "defaultMessage": "!!!Loading {service}", "end": { "column": 3, - "line": 16 + "line": 14 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "feature.delayApp.upgrade.action", + "file": "src/components/ui/WebviewLoader/index.js", + "id": "service.webviewLoader.loading", "start": { - "column": 10, - "line": 13 + "column": 11, + "line": 11 } - }, + } + ], + "path": "src/components/ui/WebviewLoader/index.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", + "defaultMessage": "!!!Something went wrong.", "end": { "column": 3, - "line": 20 + "line": 14 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "feature.delayApp.trial.action", + "file": "src/components/util/ErrorBoundary/index.js", + "id": "app.errorHandler.headline", "start": { - "column": 15, - "line": 17 + "column": 12, + "line": 11 } }, { - "defaultMessage": "!!!Upgrade account", + "defaultMessage": "!!!Reload", "end": { "column": 3, - "line": 24 + "line": 18 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "feature.delayApp.upgrade.actionShort", + "file": "src/components/util/ErrorBoundary/index.js", + "id": "app.errorHandler.action", "start": { - "column": 15, - "line": 21 + "column": 10, + "line": 15 } - }, + } + ], + "path": "src/components/util/ErrorBoundary/index.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!Activate the free Franz Professional trial", + "defaultMessage": "!!!Name", "end": { "column": 3, - "line": 28 + "line": 31 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "feature.delayApp.trial.actionShort", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.name", "start": { - "column": 20, - "line": 25 + "column": 8, + "line": 28 } }, { - "defaultMessage": "!!!No strings attached", + "defaultMessage": "!!!Enable service", "end": { "column": 3, - "line": 32 + "line": 35 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "pricing.trial.terms.headline", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableService", "start": { - "column": 29, - "line": 29 + "column": 17, + "line": 32 } }, { - "defaultMessage": "!!!No credit card required", + "defaultMessage": "!!!Enable hibernation", "end": { "column": 3, - "line": 36 + "line": 39 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "pricing.trial.terms.noCreditCard", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableHibernation", "start": { - "column": 16, - "line": 33 + "column": 21, + "line": 36 } }, { - "defaultMessage": "!!!Your free trial ends automatically after 14 days", + "defaultMessage": "!!!Enable Notifications", "end": { "column": 3, - "line": 40 + "line": 43 }, - "file": "src/components/ui/ActivateTrialButton/index.js", - "id": "pricing.trial.terms.automaticTrialEnd", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableNotification", "start": { - "column": 21, - "line": 37 + "column": 22, + "line": 40 } - } - ], - "path": "src/components/ui/ActivateTrialButton/index.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Choose from more than 70 Services", + "defaultMessage": "!!!Show unread message badges", "end": { "column": 3, - "line": 12 + "line": 47 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.recipes", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableBadge", "start": { - "column": 20, - "line": 9 + "column": 15, + "line": 44 } }, { - "defaultMessage": "!!!Account Synchronisation", + "defaultMessage": "!!!Enable audio", "end": { "column": 3, - "line": 16 + "line": 51 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.accountSync", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableAudio", "start": { "column": 15, - "line": 13 + "line": 48 } }, { - "defaultMessage": "!!!Desktop Notifications", + "defaultMessage": "!!!Team", "end": { "column": 3, - "line": 20 + "line": 55 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.desktopNotifications", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.team", "start": { - "column": 24, - "line": 17 + "column": 8, + "line": 52 } }, { - "defaultMessage": "!!!Add unlimited services", + "defaultMessage": "!!!Service URL", "end": { "column": 3, - "line": 24 + "line": 59 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.unlimitedServices", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.customUrl", "start": { - "column": 21, - "line": 21 + "column": 13, + "line": 56 } }, { - "defaultMessage": "!!!Add up to 3 services", + "defaultMessage": "!!!Show message badge for all new messages", "end": { "column": 3, - "line": 28 + "line": 63 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.upToThreeServices", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.indirectMessages", "start": { - "column": 21, - "line": 25 + "column": 20, + "line": 60 } }, { - "defaultMessage": "!!!Add up to 6 services", + "defaultMessage": "!!!Custom icon", "end": { "column": 3, - "line": 32 + "line": 67 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.upToSixServices", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.icon", "start": { - "column": 19, - "line": 29 + "column": 8, + "line": 64 } }, { - "defaultMessage": "!!!Spellchecker support", + "defaultMessage": "!!!Enable Dark Mode", "end": { "column": 3, - "line": 36 + "line": 71 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.spellchecker", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.enableDarkMode", "start": { - "column": 16, - "line": 33 + "column": 18, + "line": 68 } }, { - "defaultMessage": "!!!Workspaces", + "defaultMessage": "!!!Dark Reader Brightness", "end": { "column": 3, - "line": 40 + "line": 75 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.workspaces", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.darkReaderBrightness", "start": { - "column": 14, - "line": 37 + "column": 24, + "line": 72 } }, { - "defaultMessage": "!!!Add Custom Websites", + "defaultMessage": "!!!Dark Reader Contrast", "end": { "column": 3, - "line": 44 + "line": 79 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.customWebsites", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.darkReaderContrast", "start": { - "column": 18, - "line": 41 + "column": 22, + "line": 76 } }, { - "defaultMessage": "!!!On-premise & other Hosted Services", + "defaultMessage": "!!!Dark Reader Sepia", "end": { "column": 3, - "line": 48 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.onPremise", - "start": { - "column": 13, - "line": 45 - } - }, - { - "defaultMessage": "!!!Install 3rd party services", - "end": { - "column": 3, - "line": 52 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.thirdPartyServices", - "start": { - "column": 22, - "line": 49 - } - }, - { - "defaultMessage": "!!!Service Proxies", - "end": { - "column": 3, - "line": 56 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.serviceProxies", - "start": { - "column": 18, - "line": 53 - } - }, - { - "defaultMessage": "!!!Team Management", - "end": { - "column": 3, - "line": 60 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.teamManagement", - "start": { - "column": 18, - "line": 57 - } - }, - { - "defaultMessage": "!!!No Waiting Screens", - "end": { - "column": 3, - "line": 64 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.appDelays", - "start": { - "column": 13, - "line": 61 - } - }, - { - "defaultMessage": "!!!Forever ad-free", - "end": { - "column": 3, - "line": 68 - }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.adFree", - "start": { - "column": 10, - "line": 65 - } - }, - { - "defaultMessage": "!!!Occasional Waiting Screens", - "end": { - "column": 3, - "line": 72 + "line": 83 }, - "file": "src/components/ui/FeatureList.js", - "id": "pricing.features.appDelaysEnabled", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.darkReaderSepia", "start": { "column": 19, - "line": 69 - } - } - ], - "path": "src/components/ui/FeatureList.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Hide", - "end": { - "column": 3, - "line": 15 - }, - "file": "src/components/ui/InfoBar.js", - "id": "infobar.hide", - "start": { - "column": 8, - "line": 12 - } - } - ], - "path": "src/components/ui/InfoBar.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Dismiss", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/components/ui/Infobox.js", - "id": "infobox.dismiss", - "start": { - "column": 11, - "line": 9 - } - } - ], - "path": "src/components/ui/Infobox.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Password toggle", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/ui/Input.js", - "id": "settings.app.form.passwordToggle", - "start": { - "column": 18, - "line": 11 - } - } - ], - "path": "src/components/ui/Input.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Upgrade account", - "end": { - "column": 3, - "line": 19 - }, - "file": "src/components/ui/PremiumFeatureContainer/index.js", - "id": "premiumFeature.button.upgradeAccount", - "start": { - "column": 10, - "line": 16 - } - } - ], - "path": "src/components/ui/PremiumFeatureContainer/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Upgrade to Franz Professional", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/components/ui/UpgradeButton/index.js", - "id": "global.upgradeButton.upgradeToPro", - "start": { - "column": 16, - "line": 13 - } - } - ], - "path": "src/components/ui/UpgradeButton/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Loading {service}", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/ui/WebviewLoader/index.js", - "id": "service.webviewLoader.loading", - "start": { - "column": 11, - "line": 11 - } - } - ], - "path": "src/components/ui/WebviewLoader/index.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Something went wrong.", - "end": { - "column": 3, - "line": 14 - }, - "file": "src/components/util/ErrorBoundary/index.js", - "id": "app.errorHandler.headline", - "start": { - "column": 12, - "line": 11 + "line": 80 } }, { - "defaultMessage": "!!!Reload", + "defaultMessage": "!!!Use Proxy", "end": { "column": 3, - "line": 18 + "line": 87 }, - "file": "src/components/util/ErrorBoundary/index.js", - "id": "app.errorHandler.action", + "file": "src/containers/settings/EditServiceScreen.js", + "id": "settings.service.form.proxy.isEnabled", "start": { - "column": 10, - "line": 15 + "column": 15, + "line": 84 } - } - ], - "path": "src/components/util/ErrorBoundary/index.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Name", + "defaultMessage": "!!!Proxy Host/IP", "end": { "column": 3, - "line": 32 + "line": 91 }, "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.name", + "id": "settings.service.form.proxy.host", "start": { - "column": 8, - "line": 29 + "column": 13, + "line": 88 } }, { - "defaultMessage": "!!!Enable service", + "defaultMessage": "!!!Port", "end": { "column": 3, - "line": 36 + "line": 95 }, "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableService", + "id": "settings.service.form.proxy.port", "start": { - "column": 17, - "line": 33 + "column": 13, + "line": 92 } }, { - "defaultMessage": "!!!Enable hibernation", + "defaultMessage": "!!!User", "end": { "column": 3, - "line": 40 + "line": 99 }, "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableHibernation", + "id": "settings.service.form.proxy.user", "start": { - "column": 21, - "line": 37 + "column": 13, + "line": 96 } }, { - "defaultMessage": "!!!Enable Notifications", + "defaultMessage": "!!!Password", "end": { "column": 3, - "line": 44 + "line": 103 }, "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableNotification", - "start": { - "column": 22, - "line": 41 - } - }, - { - "defaultMessage": "!!!Show unread message badges", - "end": { - "column": 3, - "line": 48 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableBadge", - "start": { - "column": 15, - "line": 45 - } - }, - { - "defaultMessage": "!!!Enable audio", - "end": { - "column": 3, - "line": 52 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableAudio", - "start": { - "column": 15, - "line": 49 - } - }, - { - "defaultMessage": "!!!Team", - "end": { - "column": 3, - "line": 56 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.team", - "start": { - "column": 8, - "line": 53 - } - }, - { - "defaultMessage": "!!!Service URL", - "end": { - "column": 3, - "line": 60 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.customUrl", - "start": { - "column": 13, - "line": 57 - } - }, - { - "defaultMessage": "!!!Show message badge for all new messages", - "end": { - "column": 3, - "line": 64 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.indirectMessages", - "start": { - "column": 20, - "line": 61 - } - }, - { - "defaultMessage": "!!!Custom icon", - "end": { - "column": 3, - "line": 68 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.icon", - "start": { - "column": 8, - "line": 65 - } - }, - { - "defaultMessage": "!!!Enable Dark Mode", - "end": { - "column": 3, - "line": 72 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.enableDarkMode", - "start": { - "column": 18, - "line": 69 - } - }, - { - "defaultMessage": "!!!Dark Reader Brightness", - "end": { - "column": 3, - "line": 76 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderBrightness", - "start": { - "column": 24, - "line": 73 - } - }, - { - "defaultMessage": "!!!Dark Reader Contrast", - "end": { - "column": 3, - "line": 80 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderContrast", - "start": { - "column": 22, - "line": 77 - } - }, - { - "defaultMessage": "!!!Dark Reader Sepia", - "end": { - "column": 3, - "line": 84 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.darkReaderSepia", - "start": { - "column": 19, - "line": 81 - } - }, - { - "defaultMessage": "!!!Use Proxy", - "end": { - "column": 3, - "line": 88 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.isEnabled", - "start": { - "column": 15, - "line": 85 - } - }, - { - "defaultMessage": "!!!Proxy Host/IP", - "end": { - "column": 3, - "line": 92 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.host", - "start": { - "column": 13, - "line": 89 - } - }, - { - "defaultMessage": "!!!Port", - "end": { - "column": 3, - "line": 96 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.port", - "start": { - "column": 13, - "line": 93 - } - }, - { - "defaultMessage": "!!!User", - "end": { - "column": 3, - "line": 100 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.user", - "start": { - "column": 13, - "line": 97 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 104 - }, - "file": "src/containers/settings/EditServiceScreen.js", - "id": "settings.service.form.proxy.password", - "start": { - "column": 17, - "line": 101 - } - } - ], - "path": "src/containers/settings/EditServiceScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Launch Ferdi on start", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.autoLaunchOnStart", - "start": { - "column": 21, - "line": 31 - } - }, - { - "defaultMessage": "!!!Open in background", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.autoLaunchInBackground", - "start": { - "column": 26, - "line": 35 - } - }, - { - "defaultMessage": "!!!Keep Ferdi in background when closing the window", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.runInBackground", - "start": { - "column": 19, - "line": 39 - } - }, - { - "defaultMessage": "!!!Start minimized", - "end": { - "column": 3, - "line": 46 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.startMinimized", - "start": { - "column": 18, - "line": 43 - } - }, - { - "defaultMessage": "!!!Always show Ferdi in System Tray", - "end": { - "column": 3, - "line": 50 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableSystemTray", - "start": { - "column": 20, - "line": 47 - } - }, - { - "defaultMessage": "!!!Always show Ferdi in Menu Bar", - "end": { - "column": 3, - "line": 54 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableMenuBar", + "id": "settings.service.form.proxy.password", "start": { "column": 17, - "line": 51 - } - }, - { - "defaultMessage": "!!!Reload Ferdi after system resume", - "end": { - "column": 3, - "line": 58 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.reloadAfterResume", - "start": { - "column": 21, - "line": 55 - } - }, - { - "defaultMessage": "!!!Minimize Ferdi to system tray", - "end": { - "column": 3, - "line": 62 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.minimizeToSystemTray", - "start": { - "column": 24, - "line": 59 - } - }, - { - "defaultMessage": "!!!Close Ferdi to system tray", - "end": { - "column": 3, - "line": 66 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.closeToSystemTray", - "start": { - "column": 21, - "line": 63 - } - }, - { - "defaultMessage": "!!!Don't show message content in notifications", - "end": { - "column": 3, - "line": 70 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.privateNotifications", - "start": { - "column": 24, - "line": 67 - } - }, - { - "defaultMessage": "!!!Don't show notifications for clipboard events", - "end": { - "column": 3, - "line": 74 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.clipboardNotifications", - "start": { - "column": 26, - "line": 71 - } - }, - { - "defaultMessage": "!!!Notify TaskBar/Dock on new message", - "end": { - "column": 3, - "line": 78 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.notifyTaskBarOnMessage", - "start": { - "column": 26, - "line": 75 - } - }, - { - "defaultMessage": "!!!Navigation bar behaviour", - "end": { - "column": 3, - "line": 82 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.navigationBarBehaviour", - "start": { - "column": 26, - "line": 79 - } - }, - { - "defaultMessage": "!!!Search engine", - "end": { - "column": 3, - "line": 86 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.searchEngine", - "start": { - "column": 16, - "line": 83 - } - }, - { - "defaultMessage": "!!!Send telemetry data", - "end": { - "column": 3, - "line": 90 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.sentry", - "start": { - "column": 10, - "line": 87 - } - }, - { - "defaultMessage": "!!!Enable service hibernation", - "end": { - "column": 3, - "line": 94 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.hibernate", - "start": { - "column": 13, - "line": 91 - } - }, - { - "defaultMessage": "!!!Keep services in hibernation on startup", - "end": { - "column": 3, - "line": 98 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.hibernateOnStartup", - "start": { - "column": 22, - "line": 95 - } - }, - { - "defaultMessage": "!!!Hibernation strategy", - "end": { - "column": 3, - "line": 102 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.hibernationStrategy", - "start": { - "column": 23, - "line": 99 - } - }, - { - "defaultMessage": "!!!Todo Server", - "end": { - "column": 3, - "line": 106 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.predefinedTodoServer", - "start": { - "column": 24, - "line": 103 - } - }, - { - "defaultMessage": "!!!Custom TodoServer", - "end": { - "column": 3, - "line": 110 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.customTodoServer", - "start": { - "column": 20, - "line": 107 - } - }, - { - "defaultMessage": "!!!Enable Password Lock", - "end": { - "column": 3, - "line": 114 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableLock", - "start": { - "column": 14, - "line": 111 - } - }, - { - "defaultMessage": "!!!Password", - "end": { - "column": 3, - "line": 118 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.lockPassword", - "start": { - "column": 16, - "line": 115 - } - }, - { - "defaultMessage": "!!!Allow using Touch ID to unlock", - "end": { - "column": 3, - "line": 122 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.useTouchIdToUnlock", - "start": { - "column": 22, - "line": 119 - } - }, - { - "defaultMessage": "!!!Lock after inactivity", - "end": { - "column": 3, - "line": 126 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.inactivityLock", - "start": { - "column": 18, - "line": 123 - } - }, - { - "defaultMessage": "!!!Enable scheduled Do-not-Disturb", - "end": { - "column": 3, - "line": 130 - }, - "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDEnabled", - "start": { - "column": 23, - "line": 127 + "line": 100 } - }, + } + ], + "path": "src/containers/settings/EditServiceScreen.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!From", + "defaultMessage": "!!!Launch Ferdi on start", "end": { "column": 3, - "line": 134 + "line": 33 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDStart", + "id": "settings.app.form.autoLaunchOnStart", "start": { "column": 21, - "line": 131 + "line": 30 } }, { - "defaultMessage": "!!!To", + "defaultMessage": "!!!Open in background", "end": { "column": 3, - "line": 138 + "line": 37 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.scheduledDNDEnd", + "id": "settings.app.form.autoLaunchInBackground", "start": { - "column": 19, - "line": 135 + "column": 26, + "line": 34 } }, { - "defaultMessage": "!!!Language", + "defaultMessage": "!!!Keep Ferdi in background when closing the window", "end": { "column": 3, - "line": 142 + "line": 41 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.language", + "id": "settings.app.form.runInBackground", "start": { - "column": 12, - "line": 139 + "column": 19, + "line": 38 } }, { - "defaultMessage": "!!!Dark Mode", + "defaultMessage": "!!!Start minimized", "end": { "column": 3, - "line": 146 + "line": 45 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.darkMode", + "id": "settings.app.form.startMinimized", "start": { - "column": 12, - "line": 143 + "column": 18, + "line": 42 } }, { - "defaultMessage": "!!!Synchronize dark mode with my OS's dark mode setting", + "defaultMessage": "!!!Always show Ferdi in System Tray", "end": { "column": 3, - "line": 150 + "line": 49 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.adaptableDarkMode", + "id": "settings.app.form.enableSystemTray", "start": { - "column": 21, - "line": 147 + "column": 20, + "line": 46 } }, { - "defaultMessage": "!!!Enable universal Dark Mode", + "defaultMessage": "!!!Always show Ferdi in Menu Bar", "end": { "column": 3, - "line": 154 + "line": 53 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.universalDarkMode", + "id": "settings.app.form.enableMenuBar", "start": { - "column": 21, - "line": 151 + "column": 17, + "line": 50 } }, { - "defaultMessage": "!!!Sidebar width", + "defaultMessage": "!!!Reload Ferdi after system resume", "end": { "column": 3, - "line": 158 + "line": 57 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.serviceRibbonWidth", + "id": "settings.app.form.reloadAfterResume", "start": { - "column": 22, - "line": 155 + "column": 21, + "line": 54 } }, { - "defaultMessage": "!!!Service icon size", + "defaultMessage": "!!!Minimize Ferdi to system tray", "end": { "column": 3, - "line": 162 + "line": 61 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.iconSize", + "id": "settings.app.form.minimizeToSystemTray", "start": { - "column": 12, - "line": 159 + "column": 24, + "line": 58 } }, { - "defaultMessage": "!!!Use vertical style", + "defaultMessage": "!!!Close Ferdi to system tray", "end": { "column": 3, - "line": 166 + "line": 65 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.useVerticalStyle", + "id": "settings.app.form.closeToSystemTray", "start": { - "column": 20, - "line": 163 + "column": 21, + "line": 62 } }, { - "defaultMessage": "!!!Always show workspace drawer", + "defaultMessage": "!!!Don't show message content in notifications", "end": { "column": 3, - "line": 170 + "line": 69 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.alwaysShowWorkspaces", + "id": "settings.app.form.privateNotifications", "start": { "column": 24, - "line": 167 + "line": 66 } }, { - "defaultMessage": "!!!Accent color", + "defaultMessage": "!!!Don't show notifications for clipboard events", "end": { "column": 3, - "line": 174 + "line": 73 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.accentColor", + "id": "settings.app.form.clipboardNotifications", "start": { - "column": 15, - "line": 171 + "column": 26, + "line": 70 } }, { - "defaultMessage": "!!!Display disabled services tabs", + "defaultMessage": "!!!Notify TaskBar/Dock on new message", "end": { "column": 3, - "line": 178 + "line": 77 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showDisabledServices", + "id": "settings.app.form.notifyTaskBarOnMessage", "start": { - "column": 24, - "line": 175 + "column": 26, + "line": 74 } }, { - "defaultMessage": "!!!Show unread message badge when notifications are disabled", + "defaultMessage": "!!!Navigation bar behaviour", "end": { "column": 3, - "line": 182 + "line": 81 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showMessagesBadgesWhenMuted", + "id": "settings.app.form.navigationBarBehaviour", "start": { - "column": 29, - "line": 179 + "column": 26, + "line": 78 } }, { - "defaultMessage": "!!!Show draggable area on window", + "defaultMessage": "!!!Search engine", "end": { "column": 3, - "line": 186 + "line": 85 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.showDragArea", + "id": "settings.app.form.searchEngine", "start": { "column": 16, - "line": 183 + "line": 82 } }, { - "defaultMessage": "!!!Enable spell checking", + "defaultMessage": "!!!Send telemetry data", "end": { "column": 3, - "line": 190 + "line": 89 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableSpellchecking", + "id": "settings.app.form.sentry", "start": { - "column": 23, - "line": 187 + "column": 10, + "line": 86 } }, { - "defaultMessage": "!!!Enable GPU Acceleration", + "defaultMessage": "!!!Enable service hibernation", "end": { "column": 3, - "line": 194 + "line": 93 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableGPUAcceleration", + "id": "settings.app.form.hibernate", "start": { - "column": 25, - "line": 191 + "column": 13, + "line": 90 } }, { - "defaultMessage": "!!!Include beta versions", + "defaultMessage": "!!!Keep services in hibernation on startup", "end": { "column": 3, - "line": 198 + "line": 97 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.beta", + "id": "settings.app.form.hibernateOnStartup", "start": { - "column": 8, - "line": 195 + "column": 22, + "line": 94 } }, { - "defaultMessage": "!!!Enable updates", + "defaultMessage": "!!!Hibernation strategy", "end": { "column": 3, - "line": 202 + "line": 101 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.automaticUpdates", + "id": "settings.app.form.hibernationStrategy", "start": { - "column": 20, - "line": 199 + "column": 23, + "line": 98 } }, { - "defaultMessage": "!!!Enable Franz Todos", + "defaultMessage": "!!!Todo Server", "end": { "column": 3, - "line": 206 + "line": 105 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.enableTodos", + "id": "settings.app.form.predefinedTodoServer", "start": { - "column": 15, - "line": 203 + "column": 24, + "line": 102 } }, { - "defaultMessage": "!!!Keep all workspaces loaded", + "defaultMessage": "!!!Custom TodoServer", "end": { "column": 3, - "line": 210 + "line": 109 }, "file": "src/containers/settings/EditSettingsScreen.js", - "id": "settings.app.form.keepAllWorkspacesLoaded", - "start": { - "column": 27, - "line": 207 - } - } - ], - "path": "src/containers/settings/EditSettingsScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Firstname", - "end": { - "column": 3, - "line": 17 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.firstname", + "id": "settings.app.form.customTodoServer", "start": { - "column": 13, - "line": 14 + "column": 20, + "line": 106 } }, { - "defaultMessage": "!!!Lastname", + "defaultMessage": "!!!Enable Password Lock", "end": { "column": 3, - "line": 21 + "line": 113 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.lastname", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.enableLock", "start": { - "column": 12, - "line": 18 + "column": 14, + "line": 110 } }, { - "defaultMessage": "!!!Email", + "defaultMessage": "!!!Password", "end": { "column": 3, - "line": 25 + "line": 117 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.email", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.lockPassword", "start": { - "column": 9, - "line": 22 + "column": 16, + "line": 114 } }, { - "defaultMessage": "!!!Account type", + "defaultMessage": "!!!Allow using Touch ID to unlock", "end": { "column": 3, - "line": 29 + "line": 121 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.label", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.useTouchIdToUnlock", "start": { - "column": 20, - "line": 26 + "column": 22, + "line": 118 } }, { - "defaultMessage": "!!!Individual", + "defaultMessage": "!!!Lock after inactivity", "end": { "column": 3, - "line": 33 - }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.individual", + "line": 125 + }, + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.inactivityLock", "start": { - "column": 25, - "line": 30 + "column": 18, + "line": 122 } }, { - "defaultMessage": "!!!Non-Profit", + "defaultMessage": "!!!Enable scheduled Do-not-Disturb", "end": { "column": 3, - "line": 37 + "line": 129 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.non-profit", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDEnabled", "start": { - "column": 24, - "line": 34 + "column": 23, + "line": 126 } }, { - "defaultMessage": "!!!Company", + "defaultMessage": "!!!From", "end": { "column": 3, - "line": 41 + "line": 133 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.accountType.company", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDStart", "start": { - "column": 22, - "line": 38 + "column": 21, + "line": 130 } }, { - "defaultMessage": "!!!Current password", + "defaultMessage": "!!!To", "end": { "column": 3, - "line": 45 + "line": 137 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.currentPassword", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDEnd", "start": { "column": 19, - "line": 42 + "line": 134 } }, { - "defaultMessage": "!!!New password", + "defaultMessage": "!!!Language", "end": { "column": 3, - "line": 49 + "line": 141 }, - "file": "src/containers/settings/EditUserScreen.js", - "id": "settings.user.form.newPassword", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.language", "start": { - "column": 15, - "line": 46 + "column": 12, + "line": 138 } - } - ], - "path": "src/containers/settings/EditUserScreen.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Changes in Ferdi {version}", + "defaultMessage": "!!!Dark Mode", "end": { "column": 3, - "line": 23 + "line": 145 }, - "file": "src/features/announcements/components/AnnouncementScreen.js", - "id": "feature.announcements.changelog.headline", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.darkMode", "start": { "column": 12, - "line": 20 + "line": 142 } - } - ], - "path": "src/features/announcements/components/AnnouncementScreen.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Publish debugging information", + "defaultMessage": "!!!Synchronize dark mode with my OS's dark mode setting", "end": { "column": 3, - "line": 19 + "line": 149 }, - "file": "src/features/debugger/Component.js", - "id": "feature.debugger.title", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.adaptableDarkMode", "start": { - "column": 9, - "line": 16 + "column": 21, + "line": 146 } - } - ], - "path": "src/features/debugger/Component.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Please purchase license to skip waiting", + "defaultMessage": "!!!Enable universal Dark Mode", "end": { "column": 3, - "line": 19 + "line": 153 }, - "file": "src/features/delayApp/Component.js", - "id": "feature.delayApp.headline", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.universalDarkMode", "start": { - "column": 12, - "line": 16 + "column": 21, + "line": 150 } }, { - "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", + "defaultMessage": "!!!Sidebar width", "end": { "column": 3, - "line": 23 + "line": 157 }, - "file": "src/features/delayApp/Component.js", - "id": "feature.delayApp.trial.headline", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.serviceRibbonWidth", "start": { - "column": 17, - "line": 20 + "column": 22, + "line": 154 } }, { - "defaultMessage": "!!!Upgrade Franz", + "defaultMessage": "!!!Service icon size", "end": { "column": 3, - "line": 27 + "line": 161 }, - "file": "src/features/delayApp/Component.js", - "id": "feature.delayApp.upgrade.action", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.iconSize", "start": { - "column": 10, - "line": 24 + "column": 12, + "line": 158 } }, { - "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", + "defaultMessage": "!!!Use vertical style", "end": { "column": 3, - "line": 31 + "line": 165 }, - "file": "src/features/delayApp/Component.js", - "id": "feature.delayApp.trial.action", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.useVerticalStyle", "start": { - "column": 15, - "line": 28 + "column": 20, + "line": 162 } }, { - "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", + "defaultMessage": "!!!Always show workspace drawer", "end": { "column": 3, - "line": 35 + "line": 169 }, - "file": "src/features/delayApp/Component.js", - "id": "feature.delayApp.text", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.alwaysShowWorkspaces", "start": { - "column": 8, - "line": 32 + "column": 24, + "line": 166 } - } - ], - "path": "src/features/delayApp/Component.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Nightly Builds", + "defaultMessage": "!!!Accent color", "end": { "column": 3, - "line": 19 + "line": 173 }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.title", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.accentColor", "start": { - "column": 9, - "line": 16 + "column": 15, + "line": 170 } }, { - "defaultMessage": "!!!Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", + "defaultMessage": "!!!Display disabled services tabs", "end": { "column": 3, - "line": 23 + "line": 177 }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.info", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.showDisabledServices", "start": { - "column": 8, - "line": 20 + "column": 24, + "line": 174 } }, { - "defaultMessage": "!!!Activate", + "defaultMessage": "!!!Show unread message badge when notifications are disabled", "end": { "column": 3, - "line": 27 + "line": 181 }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.activate", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.showMessagesBadgesWhenMuted", "start": { - "column": 12, - "line": 24 + "column": 29, + "line": 178 } }, { - "defaultMessage": "!!!Cancel", + "defaultMessage": "!!!Show draggable area on window", "end": { "column": 3, - "line": 31 + "line": 185 }, - "file": "src/features/nightlyBuilds/Component.js", - "id": "feature.nightlyBuilds.cancel", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.showDragArea", "start": { - "column": 10, - "line": 28 + "column": 16, + "line": 182 } - } - ], - "path": "src/features/nightlyBuilds/Component.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!per month", + "defaultMessage": "!!!Enable spell checking", "end": { "column": 3, - "line": 18 + "line": 189 }, - "file": "src/features/planSelection/components/PlanItem.js", - "id": "subscription.interval.perMonth", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.enableSpellchecking", "start": { - "column": 12, - "line": 15 + "column": 23, + "line": 186 } }, { - "defaultMessage": "!!!per month & user", + "defaultMessage": "!!!Enable GPU Acceleration", "end": { "column": 3, - "line": 22 + "line": 193 }, - "file": "src/features/planSelection/components/PlanItem.js", - "id": "subscription.interval.perMonthPerUser", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.enableGPUAcceleration", "start": { - "column": 19, - "line": 19 + "column": 25, + "line": 190 } }, { - "defaultMessage": "!!!Best value", + "defaultMessage": "!!!Include beta versions", "end": { "column": 3, - "line": 26 + "line": 197 }, - "file": "src/features/planSelection/components/PlanItem.js", - "id": "subscription.bestValue", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.beta", "start": { - "column": 13, - "line": 23 + "column": 8, + "line": 194 } - } - ], - "path": "src/features/planSelection/components/PlanItem.json" - }, - { - "descriptors": [ + }, { - "defaultMessage": "!!!Are you ready to choose, {name}", + "defaultMessage": "!!!Enable updates", "end": { "column": 3, - "line": 20 + "line": 201 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.fullscreen.welcome", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.automaticUpdates", "start": { - "column": 11, - "line": 17 + "column": 20, + "line": 198 } }, { - "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", + "defaultMessage": "!!!Enable Franz Todos", "end": { "column": 3, - "line": 24 + "line": 205 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.fullscreen.subheadline", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.enableTodos", "start": { "column": 15, - "line": 21 + "line": 202 } }, { - "defaultMessage": "!!!Basic functionality", + "defaultMessage": "!!!Keep all workspaces loaded", "end": { "column": 3, - "line": 28 + "line": 209 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.free.text", + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.keepAllWorkspacesLoaded", "start": { - "column": 12, - "line": 25 + "column": 27, + "line": 206 } - }, + } + ], + "path": "src/containers/settings/EditSettingsScreen.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!More services, no waiting - ideal for personal use.", + "defaultMessage": "!!!Firstname", "end": { "column": 3, - "line": 32 + "line": 17 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.personal.text", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.firstname", "start": { - "column": 16, - "line": 29 + "column": 13, + "line": 14 } }, { - "defaultMessage": "!!!Unlimited services and professional features for you - and your team.", + "defaultMessage": "!!!Lastname", "end": { "column": 3, - "line": 36 + "line": 21 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.pro.text", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.lastname", "start": { - "column": 20, - "line": 33 + "column": 12, + "line": 18 } }, { - "defaultMessage": "!!!Stay on Free", + "defaultMessage": "!!!Email", "end": { "column": 3, - "line": 40 + "line": 25 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.cta.stayOnFree", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.email", "start": { - "column": 17, - "line": 37 + "column": 9, + "line": 22 } }, { - "defaultMessage": "!!!Downgrade to Free", + "defaultMessage": "!!!Account type", "end": { "column": 3, - "line": 44 + "line": 29 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.cta.ctaDowngradeFree", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.accountType.label", "start": { "column": 20, - "line": 41 + "line": 26 } }, { - "defaultMessage": "!!!Start my free 14-days Trial", + "defaultMessage": "!!!Individual", "end": { "column": 3, - "line": 48 + "line": 33 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.cta.trial", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.accountType.individual", "start": { - "column": 15, - "line": 45 + "column": 25, + "line": 30 } }, { - "defaultMessage": "!!!Choose Personal", + "defaultMessage": "!!!Non-Profit", "end": { "column": 3, - "line": 52 + "line": 37 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.cta.upgradePersonal", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.accountType.non-profit", "start": { - "column": 23, - "line": 49 + "column": 24, + "line": 34 } }, { - "defaultMessage": "!!!Choose Professional", + "defaultMessage": "!!!Company", "end": { "column": 3, - "line": 56 + "line": 41 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.cta.upgradePro", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.accountType.company", "start": { - "column": 18, - "line": 53 + "column": 22, + "line": 38 } }, { - "defaultMessage": "!!!Complete comparison of all plans", + "defaultMessage": "!!!Current password", "end": { "column": 3, - "line": 60 + "line": 45 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.fullFeatureList", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.currentPassword", "start": { "column": 19, - "line": 57 + "line": 42 } }, { - "defaultMessage": "!!!All prices based on yearly payment", + "defaultMessage": "!!!New password", "end": { "column": 3, - "line": 64 + "line": 49 }, - "file": "src/features/planSelection/components/PlanSelection.js", - "id": "feature.planSelection.pricesBasedOnAnnualPayment", + "file": "src/containers/settings/EditUserScreen.js", + "id": "settings.user.form.newPassword", "start": { - "column": 30, - "line": 61 + "column": 15, + "line": 46 } } ], - "path": "src/features/planSelection/components/PlanSelection.json" + "path": "src/containers/settings/EditUserScreen.json" }, { "descriptors": [ { - "defaultMessage": "!!!per {interval}", + "defaultMessage": "!!!Changes in Ferdi {version}", "end": { "column": 3, - "line": 19 + "line": 23 }, - "file": "src/features/planSelection/components/PlanTeaser.js", - "id": "subscription.interval.per", + "file": "src/features/announcements/components/AnnouncementScreen.js", + "id": "feature.announcements.changelog.headline", "start": { - "column": 7, - "line": 16 + "column": 12, + "line": 20 } - }, + } + ], + "path": "src/features/announcements/components/AnnouncementScreen.json" + }, + { + "descriptors": [ { - "defaultMessage": "!!!Upgrade Account", + "defaultMessage": "!!!Publish debugging information", "end": { "column": 3, - "line": 23 + "line": 19 }, - "file": "src/features/planSelection/components/PlanTeaser.js", - "id": "subscription.planItem.upgradeAccount", + "file": "src/features/debugger/Component.js", + "id": "feature.debugger.title", "start": { - "column": 7, - "line": 20 + "column": 9, + "line": 16 } } ], - "path": "src/features/planSelection/components/PlanTeaser.json" + "path": "src/features/debugger/Component.json" }, { "descriptors": [ { - "defaultMessage": "!!!Downgrade your Franz Plan", + "defaultMessage": "!!!Nightly Builds", "end": { "column": 3, - "line": 18 + "line": 19 }, - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "id": "feature.planSelection.fullscreen.dialog.title", + "file": "src/features/nightlyBuilds/Component.js", + "id": "feature.nightlyBuilds.title", "start": { - "column": 15, - "line": 15 + "column": 9, + "line": 16 } }, { - "defaultMessage": "!!!You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", + "defaultMessage": "!!!Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", "end": { "column": 3, - "line": 22 + "line": 23 }, - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "id": "feature.planSelection.fullscreen.dialog.message", + "file": "src/features/nightlyBuilds/Component.js", + "id": "feature.nightlyBuilds.info", "start": { - "column": 17, - "line": 19 + "column": 8, + "line": 20 } }, { - "defaultMessage": "!!!Downgrade to Free", + "defaultMessage": "!!!Activate", "end": { "column": 3, - "line": 26 + "line": 27 }, - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "id": "feature.planSelection.fullscreen.dialog.cta.downgrade", + "file": "src/features/nightlyBuilds/Component.js", + "id": "feature.nightlyBuilds.activate", "start": { - "column": 22, - "line": 23 + "column": 12, + "line": 24 } }, { - "defaultMessage": "!!!Choose Personal", + "defaultMessage": "!!!Cancel", "end": { "column": 3, - "line": 30 + "line": 31 }, - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "id": "feature.planSelection.fullscreen.dialog.cta.upgrade", + "file": "src/features/nightlyBuilds/Component.js", + "id": "feature.nightlyBuilds.cancel", "start": { - "column": 20, - "line": 27 + "column": 10, + "line": 28 } } ], - "path": "src/features/planSelection/containers/PlanSelectionScreen.json" + "path": "src/features/nightlyBuilds/Component.json" }, { "descriptors": [ @@ -6346,55 +5293,6 @@ ], "path": "src/features/recipeConnectionLost/components/WebControls.json" }, - { - "descriptors": [ - { - "defaultMessage": "!!!Changes in Franz {version}", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/features/serviceLimit/components/AnnouncementScreen.js", - "id": "feature.announcements.changelog.headline", - "start": { - "column": 12, - "line": 20 - } - } - ], - "path": "src/features/serviceLimit/components/AnnouncementScreen.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", - "id": "feature.serviceLimit.limitReached", - "start": { - "column": 16, - "line": 9 - } - }, - { - "defaultMessage": "!!!Upgrade account", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", - "id": "premiumFeature.button.upgradeAccount", - "start": { - "column": 10, - "line": 13 - } - } - ], - "path": "src/features/serviceLimit/components/LimitReachedInfobox.json" - }, { "descriptors": [ { @@ -6455,186 +5353,85 @@ "column": 3, "line": 36 }, - "file": "src/features/shareFranz/Component.js", - "id": "feature.shareFranz.action.twitter", - "start": { - "column": 18, - "line": 33 - } - }, - { - "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", - "end": { - "column": 3, - "line": 40 - }, - "file": "src/features/shareFranz/Component.js", - "id": "feature.shareFranz.shareText.email", - "start": { - "column": 18, - "line": 37 - } - }, - { - "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", - "end": { - "column": 3, - "line": 44 - }, - "file": "src/features/shareFranz/Component.js", - "id": "feature.shareFranz.shareText.twitter", - "start": { - "column": 20, - "line": 41 - } - } - ], - "path": "src/features/shareFranz/Component.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Franz Todos are available to premium users now!", - "end": { - "column": 3, - "line": 34 - }, - "file": "src/features/todos/components/TodosWebview.js", - "id": "feature.todos.premium.info", - "start": { - "column": 15, - "line": 31 - } - }, - { - "defaultMessage": "!!!Upgrade Account", - "end": { - "column": 3, - "line": 38 - }, - "file": "src/features/todos/components/TodosWebview.js", - "id": "feature.todos.premium.upgrade", - "start": { - "column": 14, - "line": 35 - } - }, - { - "defaultMessage": "!!!Everyone else will have to wait a little longer.", - "end": { - "column": 3, - "line": 42 - }, - "file": "src/features/todos/components/TodosWebview.js", - "id": "feature.todos.premium.rollout", - "start": { - "column": 15, - "line": 39 - } - } - ], - "path": "src/features/todos/components/TodosWebview.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Your Free Franz {plan} Trial ends in {time}.", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "id": "feature.trialStatusBar.restTime", + "file": "src/features/shareFranz/Component.js", + "id": "feature.shareFranz.action.twitter", "start": { - "column": 12, - "line": 13 + "column": 18, + "line": 33 } }, { - "defaultMessage": "!!!Your free Franz {plan} Trial has expired, please upgrade your account.", + "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", "end": { "column": 3, - "line": 20 + "line": 40 }, - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "id": "feature.trialStatusBar.expired", + "file": "src/features/shareFranz/Component.js", + "id": "feature.shareFranz.shareText.email", "start": { - "column": 11, - "line": 17 + "column": 18, + "line": 37 } }, { - "defaultMessage": "!!!Upgrade now", + "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", "end": { "column": 3, - "line": 24 + "line": 44 }, - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "id": "feature.trialStatusBar.cta", + "file": "src/features/shareFranz/Component.js", + "id": "feature.shareFranz.shareText.twitter", "start": { - "column": 7, - "line": 21 + "column": 20, + "line": 41 } } ], - "path": "src/features/trialStatusBar/components/TrialStatusBar.json" + "path": "src/features/shareFranz/Component.json" }, { "descriptors": [ { - "defaultMessage": "!!!Downgrade your Franz Plan", + "defaultMessage": "!!!Franz Todos are available to premium users now!", "end": { "column": 3, - "line": 19 + "line": 34 }, - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "id": "feature.trialStatusBar.fullscreen.dialog.title", + "file": "src/features/todos/components/TodosWebview.js", + "id": "feature.todos.premium.info", "start": { "column": 15, - "line": 16 - } - }, - { - "defaultMessage": "!!!You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "end": { - "column": 3, - "line": 23 - }, - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "id": "feature.trialStatusBar.fullscreen.dialog.message", - "start": { - "column": 17, - "line": 20 + "line": 31 } }, { - "defaultMessage": "!!!Downgrade to Free", + "defaultMessage": "!!!Upgrade Account", "end": { "column": 3, - "line": 27 + "line": 38 }, - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "id": "feature.trialStatusBar.fullscreen.dialog.cta.downgrade", + "file": "src/features/todos/components/TodosWebview.js", + "id": "feature.todos.premium.upgrade", "start": { - "column": 22, - "line": 24 + "column": 14, + "line": 35 } }, { - "defaultMessage": "!!!Choose Personal", + "defaultMessage": "!!!Everyone else will have to wait a little longer.", "end": { "column": 3, - "line": 31 + "line": 42 }, - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "id": "feature.trialStatusBar.fullscreen.dialog.cta.upgrade", + "file": "src/features/todos/components/TodosWebview.js", + "id": "feature.todos.premium.rollout", "start": { - "column": 20, - "line": 28 + "column": 15, + "line": 39 } } ], - "path": "src/features/trialStatusBar/containers/TrialStatusBarScreen.json" + "path": "src/features/todos/components/TodosWebview.json" }, { "descriptors": [ @@ -6865,104 +5662,78 @@ "defaultMessage": "!!!Workspaces", "end": { "column": 3, - "line": 19 + "line": 18 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.headline", "start": { "column": 12, - "line": 16 + "line": 15 } }, { "defaultMessage": "!!!All services", "end": { "column": 3, - "line": 23 + "line": 22 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.allServices", "start": { "column": 15, - "line": 20 + "line": 19 } }, { "defaultMessage": "!!!Workspaces settings", "end": { "column": 3, - "line": 27 + "line": 26 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.workspacesSettingsTooltip", "start": { "column": 29, - "line": 24 + "line": 23 } }, { "defaultMessage": "!!!Info about workspace feature", "end": { "column": 3, - "line": 31 + "line": 30 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.workspaceFeatureInfo", "start": { "column": 24, - "line": 28 - } - }, - { - "defaultMessage": "!!!Create your first workspace", - "end": { - "column": 3, - "line": 35 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.premiumCtaButtonLabel", - "start": { - "column": 25, - "line": 32 - } - }, - { - "defaultMessage": "!!!Reactivate premium account", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "id": "workspaceDrawer.reactivatePremiumAccountLabel", - "start": { - "column": 28, - "line": 36 + "line": 27 } }, { "defaultMessage": "!!!add new workspace", "end": { "column": 3, - "line": 43 + "line": 34 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.addNewWorkspaceLabel", "start": { "column": 24, - "line": 40 + "line": 31 } }, { "defaultMessage": "!!!Premium feature", "end": { "column": 3, - "line": 47 + "line": 38 }, "file": "src/features/workspaces/components/WorkspaceDrawer.js", "id": "workspaceDrawer.proFeatureBadge", "start": { "column": 23, - "line": 44 + "line": 35 } } ], @@ -7005,104 +5776,104 @@ "defaultMessage": "!!!Your workspaces", "end": { "column": 3, - "line": 23 + "line": 20 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.headline", "start": { "column": 12, - "line": 20 + "line": 17 } }, { "defaultMessage": "!!!You haven't created any workspaces yet.", "end": { "column": 3, - "line": 27 + "line": 24 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.noWorkspacesAdded", "start": { "column": 19, - "line": 24 + "line": 21 } }, { "defaultMessage": "!!!Could not load your workspaces", "end": { "column": 3, - "line": 31 + "line": 28 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.workspacesRequestFailed", "start": { "column": 27, - "line": 28 + "line": 25 } }, { "defaultMessage": "!!!Try again", "end": { "column": 3, - "line": 35 + "line": 32 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.tryReloadWorkspaces", "start": { "column": 23, - "line": 32 + "line": 29 } }, { "defaultMessage": "!!!Your changes have been saved", "end": { "column": 3, - "line": 39 + "line": 36 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.updatedInfo", "start": { "column": 15, - "line": 36 + "line": 33 } }, { "defaultMessage": "!!!Workspace has been deleted", "end": { "column": 3, - "line": 43 + "line": 40 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.deletedInfo", "start": { "column": 15, - "line": 40 + "line": 37 } }, { "defaultMessage": "!!!Info about workspace feature", "end": { "column": 3, - "line": 47 + "line": 44 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.workspaceFeatureInfo", "start": { "column": 24, - "line": 44 + "line": 41 } }, { "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", "end": { "column": 3, - "line": 51 + "line": 48 }, "file": "src/features/workspaces/components/WorkspacesDashboard.js", "id": "settings.workspaces.workspaceFeatureHeadline", "start": { "column": 28, - "line": 48 + "line": 45 } } ], @@ -7126,146 +5897,6 @@ ], "path": "src/features/workspaces/components/WorkspaceSwitchingIndicator.json" }, - { - "descriptors": [ - { - "defaultMessage": "!!!Professional", - "end": { - "column": 3, - "line": 8 - }, - "file": "src/helpers/plan-helpers.js", - "id": "pricing.plan.pro", - "start": { - "column": 15, - "line": 5 - } - }, - { - "defaultMessage": "!!!Personal", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/helpers/plan-helpers.js", - "id": "pricing.plan.personal", - "start": { - "column": 20, - "line": 9 - } - }, - { - "defaultMessage": "!!!Free", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/helpers/plan-helpers.js", - "id": "pricing.plan.free", - "start": { - "column": 16, - "line": 13 - } - }, - { - "defaultMessage": "!!!Premium", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/helpers/plan-helpers.js", - "id": "pricing.plan.legacy", - "start": { - "column": 18, - "line": 17 - } - } - ], - "path": "src/helpers/plan-helpers.json" - }, - { - "descriptors": [ - { - "defaultMessage": "!!!Franz Professional Yearly", - "end": { - "column": 3, - "line": 8 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.pro-yearly", - "start": { - "column": 22, - "line": 5 - } - }, - { - "defaultMessage": "!!!Franz Professional Monthly", - "end": { - "column": 3, - "line": 12 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.pro-monthly", - "start": { - "column": 23, - "line": 9 - } - }, - { - "defaultMessage": "!!!Franz Personal Yearly", - "end": { - "column": 3, - "line": 16 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.personal-yearly", - "start": { - "column": 27, - "line": 13 - } - }, - { - "defaultMessage": "!!!Franz Personal Monthly", - "end": { - "column": 3, - "line": 20 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.personal-monthly", - "start": { - "column": 28, - "line": 17 - } - }, - { - "defaultMessage": "!!!Franz Free", - "end": { - "column": 3, - "line": 24 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.free", - "start": { - "column": 16, - "line": 21 - } - }, - { - "defaultMessage": "!!!Franz Premium", - "end": { - "column": 3, - "line": 28 - }, - "file": "src/helpers/pricing-helpers.js", - "id": "pricing.plan.legacy", - "start": { - "column": 18, - "line": 25 - } - } - ], - "path": "src/helpers/pricing-helpers.json" - }, { "descriptors": [ { @@ -7441,19 +6072,6 @@ "column": 17, "line": 32 } - }, - { - "defaultMessage": "!!!Franz Professional Required", - "end": { - "column": 3, - "line": 39 - }, - "file": "src/i18n/globalMessages.js", - "id": "global.franzProRequired", - "start": { - "column": 15, - "line": 36 - } } ], "path": "src/i18n/globalMessages.json" diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json index b2a6f5d2d..d77b90b24 100644 --- a/src/i18n/locales/el.json +++ b/src/i18n/locales/el.json @@ -12,33 +12,10 @@ "connectionLostBanner.message": "Ωχ όχι! Ο Ferdi έχασε την επικοινωνία με το", "feature.announcements.changelog.headline": "Αλλαγές σχετικά με το Ferdi", "feature.debugger.title": "Εγγραφή πληροφοριών εντοπισμού σφαλμάτων", - "feature.delayApp.headline": "Παρακαλούμε αγοράστε μία άδεια Ferdi για να παραλείψετε την αναμονή", - "feature.delayApp.text": "Ferdi θα συνεχίσει σε {seconds} δευτερόλεπτα.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Αγοράστε μία άδεια Ferdi", - "feature.delayApp.upgrade.actionShort": "Αναβαθμίστε τον λογαριασμό σας ", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "Ακύρωση", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", "feature.nightlyBuilds.title": "Nightly Builds", - "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", - "feature.planSelection.cta.stayOnFree": "Stay on Free", - "feature.planSelection.cta.trial": "Start my free 14-days Trial", - "feature.planSelection.cta.upgradePersonal": "Choose Personal", - "feature.planSelection.cta.upgradePro": "Choose Professional", - "feature.planSelection.free.text": "Basic functionality", - "feature.planSelection.fullFeatureList": "Complete comparison of all plans", - "feature.planSelection.fullscreen.dialog.cta.downgrade": "Downgrade to Free", - "feature.planSelection.fullscreen.dialog.cta.upgrade": "Choose Personal", - "feature.planSelection.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "feature.planSelection.fullscreen.dialog.title": "Downgrade your Ferdi Plan", - "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Ferdi works best on our Personal and Professional plans. Please have a look and choose the best one for you.", - "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}", - "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", - "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment", - "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", "feature.publishDebugInfo.privacy": "Privacy policy", diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index ab2be014b..003fee163 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -12,33 +12,10 @@ "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", "feature.debugger.title": "Publish debugging information", - "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "Cancel", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", "feature.nightlyBuilds.title": "Nightly Builds", - "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", - "feature.planSelection.cta.stayOnFree": "Stay on Free", - "feature.planSelection.cta.trial": "Start my free 14-days Trial", - "feature.planSelection.cta.upgradePersonal": "Choose Personal", - "feature.planSelection.cta.upgradePro": "Choose Professional", - "feature.planSelection.free.text": "Basic functionality", - "feature.planSelection.fullFeatureList": "Complete comparison of all plans", - "feature.planSelection.fullscreen.dialog.cta.downgrade": "Downgrade to Free", - "feature.planSelection.fullscreen.dialog.cta.upgrade": "Choose Personal", - "feature.planSelection.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "feature.planSelection.fullscreen.dialog.title": "Downgrade your Ferdi Plan", - "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Ferdi works best on our Personal and Professional plans. Please have a look and choose the best one for you.", - "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}", - "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", - "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment", - "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", "feature.publishDebugInfo.privacy": "Privacy policy", @@ -49,7 +26,6 @@ "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", "feature.quickSwitch.search": "Search...", "feature.quickSwitch.title": "QuickSwitch", - "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", "feature.shareFranz.action.email": "Send as email", "feature.shareFranz.action.facebook": "Share on Facebook", "feature.shareFranz.action.twitter": "Share on Twitter", @@ -60,21 +36,12 @@ "feature.todos.premium.info": "Ferdi Todos are available to premium users now!", "feature.todos.premium.rollout": "Everyone else will have to wait a little longer.", "feature.todos.premium.upgrade": "Upgrade Account", - "feature.trialStatusBar.cta": "Upgrade now", - "feature.trialStatusBar.expired": "Your free Ferdi {plan} Trial has expired, please upgrade your account.", - "feature.trialStatusBar.fullscreen.dialog.cta.downgrade": "Downgrade to Free", - "feature.trialStatusBar.fullscreen.dialog.cta.upgrade": "Choose Personal", - "feature.trialStatusBar.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "feature.trialStatusBar.fullscreen.dialog.title": "Downgrade your Ferdi Plan", - "feature.trialStatusBar.restTime": "Your Free Ferdi {plan} Trial ends in {time}.", "global.api.unhealthy": "Can't connect to Ferdi online services", - "global.franzProRequired": "Ferdi Professional Required", "global.notConnectedToTheInternet": "You are not connected to the internet.", "global.spellchecker.useDefault": "Use System Default ({default})", "global.spellchecking.autodetect": "Detect language automatically", "global.spellchecking.autodetect.short": "Automatic", "global.spellchecking.language": "Spell checking language", - "global.upgradeButton.upgradeToPro": "Upgrade to Ferdi Professional", "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", "global.userAgentPref": "User Agent", "import.headline": "Import your Ferdi 4 services", @@ -88,7 +55,6 @@ "infobar.hide": "Hide", "infobar.requiredRequestsFailed": "Could not load services and user information", "infobar.servicesUpdated": "Your services have been updated.", - "infobar.trialActivated": "Your trial was successfully activated. Happy messaging!", "infobar.updateAvailable": "A new update for Ferdi is available.", "infobox.dismiss": "Dismiss", "invite.email.label": "Email address", @@ -194,11 +160,7 @@ "password.noUser": "No user with that email address was found", "password.submit.label": "Submit", "password.successInfo": "Please check your email", - "premiumFeature.button.upgradeAccount": "Upgrade account", "pricing.features.accountSync": "Account Synchronisation", - "pricing.features.adFree": "Forever ad-free", - "pricing.features.appDelays": "No Waiting Screens", - "pricing.features.appDelaysEnabled": "Occasional Waiting Screens", "pricing.features.customWebsites": "Add Custom Websites", "pricing.features.desktopNotifications": "Desktop Notifications", "pricing.features.onPremise": "On-premise & other Hosted Services", @@ -208,30 +170,7 @@ "pricing.features.teamManagement": "Team Management", "pricing.features.thirdPartyServices": "Install 3rd party services", "pricing.features.unlimitedServices": "Add unlimited services", - "pricing.features.upToSixServices": "Add up to 6 services", - "pricing.features.upToThreeServices": "Add up to 3 services", "pricing.features.workspaces": "Workspaces", - "pricing.plan.free": "Ferdi Free", - "pricing.plan.legacy": "Ferdi Premium", - "pricing.plan.personal": "Ferdi Personal", - "pricing.plan.personal-monthly": "Ferdi Personal Monthly", - "pricing.plan.personal-yearly": "Ferdi Personal Yearly", - "pricing.plan.pro": "Ferdi Professional", - "pricing.plan.pro-monthly": "Ferdi Professional Monthly", - "pricing.plan.pro-yearly": "Ferdi Professional Yearly", - "pricing.trial.cta.accept": "Yes, upgrade my account to Ferdi Professional", - "pricing.trial.cta.skip": "Continue to Ferdi", - "pricing.trial.cta.start": "Start using Ferdi", - "pricing.trial.error": "Sorry, we could not activate your trial!", - "pricing.trial.features.headline": "Ferdi Professional includes:", - "pricing.trial.headline.pro": "Hi {name}, welcome to Ferdi", - "pricing.trial.intro.happyMessaging": "Happy messaging,", - "pricing.trial.intro.specialTreat": "We have a special treat for you.", - "pricing.trial.intro.tryPro": "Enjoy the full Ferdi Professional experience completely free for 14 days.", - "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days", - "pricing.trial.terms.headline": "No strings attached", - "pricing.trial.terms.noCreditCard": "No credit card required", - "pricing.trial.terms.trialWorth": "Free trial (normally {currency}{price} per month)", "service.crashHandler.action": "Reload {name}", "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", "service.crashHandler.headline": "Oh no!", @@ -255,8 +194,6 @@ "services.serverless": "Use Ferdi without an Account", "services.welcome": "Welcome to Ferdi", "settings.account.account.editButton": "Edit account", - "settings.account.accountType.basic": "Basic Account", - "settings.account.accountType.premium": "Premium Supporter Account", "settings.account.accountUnavailable": "Account is unavailable", "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", "settings.account.buttonSave": "Update profile", @@ -270,17 +207,11 @@ "settings.account.headlinePassword": "Change password", "settings.account.headlineProfile": "Update profile", "settings.account.headlineSubscription": "Your subscription", - "settings.account.headlineTrialUpgrade": "Get the free 14 day Ferdi Professional Trial", - "settings.account.headlineUpgradeAccount": "Upgrade your account & get the full Ferdi experience", "settings.account.invoiceDownload": "Download", "settings.account.manageSubscription.label": "Manage your subscription", "settings.account.successInfo": "Your changes have been saved", - "settings.account.trial": "Free Trial", - "settings.account.trialEndsIn": "Your free trial ends in {duration}.", - "settings.account.trialUpdateBillingInfo": "Please update your billing info to continue using {license} after your trial period.", "settings.account.tryReloadServices": "Try again", "settings.account.tryReloadUserInfoRequest": "Try again", - "settings.account.upgradeToPro.label": "Upgrade to Ferdi Professional", "settings.account.userInfoRequestFailed": "Could not load user information", "settings.account.yourLicense": "Your Ferdi License", "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", @@ -391,8 +322,6 @@ "settings.service.form.addServiceHeadline": "Add {name}", "settings.service.form.availableServices": "Available services", "settings.service.form.customUrl": "Custom server", - "settings.service.form.customUrlPremiumInfo": "To add self hosted services, you need a Ferdi Premium Supporter Account.", - "settings.service.form.customUrlUpgradeAccount": "Upgrade your account", "settings.service.form.customUrlValidationError": "Could not validate custom {name} server.", "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", "settings.service.form.darkReaderContrast": "Dark Reader Contrast", @@ -466,7 +395,6 @@ "settings.team.manageAction": "Manage your Team on meetfranz.com", "settings.team.teamsUnavailable": "Teams are unavailable", "settings.team.teamsUnavailableInfo": "Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.", - "settings.team.upgradeAction": "Upgrade your Account", "settings.user.form.accountType.company": "Company", "settings.user.form.accountType.individual": "Individual", "settings.user.form.accountType.label": "Account type", @@ -516,19 +444,6 @@ "signup.link.login": "Already have an account, sign in?", "signup.password.label": "Password", "signup.submit.label": "Create account", - "subscription.bestValue": "Best value", - "subscription.cta.activateTrial": "Yes, start the free Ferdi Professional trial", - "subscription.cta.allOptions": "See all options", - "subscription.cta.choosePlan": "Choose your plan", - "subscription.includedProFeatures": "The Ferdi Professional Plan includes:", - "subscription.interval.per": "per {interval}", - "subscription.interval.perMonth": "per month", - "subscription.interval.perMonthPerUser": "per month & user", - "subscription.planItem.upgradeAccount": "Upgrade Account", - "subscription.teaser.includedFeatures": "Paid Ferdi Plans include:", - "subscription.teaser.intro": "Ferdi 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", - "subscriptionPopup.buttonCancel": "Cancel", - "subscriptionPopup.buttonDone": "Done", "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", "tabs.item.deleteService": "Delete service", "tabs.item.disableAudio": "Disable audio", @@ -556,9 +471,7 @@ "workspaceDrawer.headline": "Workspaces", "workspaceDrawer.item.contextMenuEdit": "edit", "workspaceDrawer.item.noServicesAddedYet": "No services added yet", - "workspaceDrawer.premiumCtaButtonLabel": "Create your first workspace", "workspaceDrawer.proFeatureBadge": "Premium feature", - "workspaceDrawer.reactivatePremiumAccountLabel": "Reactivate premium account", "workspaceDrawer.workspaceFeatureInfo": "

Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.

You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.

", "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Switching to" diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 6959a3a78..9226eedf2 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "¡Oh no! Ferdi perdió la conexión con {name}.", "feature.announcements.changelog.headline": "Cambios en Ferdi {version}", "feature.debugger.title": "Publica la información de depuración", - "feature.delayApp.headline": "Por favor compra una Licencia de Soporte de Ferdi para evitar la espera", - "feature.delayApp.text": "Ferdi continuará en {seconds} segundos.", - "feature.delayApp.trial.action": "Si! Quiero probar Ferdi Profesional por 14 días, gratis!", - "feature.delayApp.trial.actionShort": "Activar el período de prueba de Ferdi Profesional", - "feature.delayApp.trial.headline": "Empieza el periodo de prueba de Ferdi Profesional por 14 días y cruza la linea.", - "feature.delayApp.upgrade.action": "Consigue una Licencia de Soporte de Ferdi", - "feature.delayApp.upgrade.actionShort": "Consigue una mejora para tu cuenta", "feature.nightlyBuilds.activate": "Activar", "feature.nightlyBuilds.cancel": "Cancelar", "feature.nightlyBuilds.info": "Las \"Nightly builds\" son versiones altamente experimentales de Ferdi que pueden contener características sin pulir o sin completar. Estas versiones son utilizadas principalmente por los desarrolladores para probar sus nuevas características desarrolladas y cómo se comportarán en la versión final. Si no sabe lo que está haciendo, le sugerimos que no active las estas versiones.", diff --git a/src/i18n/locales/et.json b/src/i18n/locales/et.json index 6709db455..386fffd29 100644 --- a/src/i18n/locales/et.json +++ b/src/i18n/locales/et.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "Mis juhtus?", "connectionLostBanner.message": "Oh ei! Ferdi kaotas ühenduse {name} teenusega.", "feature.announcements.changelog.headline": "Ferdi {versiooni} uuendused", - "feature.delayApp.headline": "Uuendage oma Ferdi'i tellimust, et ootamine vahele jätta", - "feature.delayApp.text": "Ferdi jätkab {seconds} sekundi pärast.", - "feature.delayApp.trial.action": "Jah, ma tahan Ferdi Professionali tasuta 14-päevast proovitellimust", - "feature.delayApp.trial.actionShort": "Aktiveerige tasuta Ferdi Professionali proovitellimus", - "feature.delayApp.trial.headline": "Hankige tasuta Ferdi Professionali 14-päevane proovitellimus ja saate ootamise vahele jätta", - "feature.delayApp.upgrade.action": "Uuendage Ferdi'it", - "feature.delayApp.upgrade.actionShort": "Uuendage oma kontot", "feature.planSelection.cta.ctaDowngradeFree": "Minge tagasi tasuta tellimusele", "feature.planSelection.cta.stayOnFree": "Jää tasuta tellimuse juurde", "feature.planSelection.cta.trial": "Alustage minu tasuta 14-päevast proovitellimust", diff --git a/src/i18n/locales/fa.json b/src/i18n/locales/fa.json index a57caeb47..f7d62e9ed 100644 --- a/src/i18n/locales/fa.json +++ b/src/i18n/locales/fa.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "تغییرات فرَنز {version}", - "feature.delayApp.headline": "Upgrade your Ferdi plan to skip the wait", - "feature.delayApp.text": "فرَنز بعد از {seconds} ثانیه ادامه میده.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14-days trial and skip the wait", - "feature.delayApp.upgrade.action": "Upgrade Ferdi", - "feature.delayApp.upgrade.actionShort": "ارتقای حساب", "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", "feature.planSelection.cta.stayOnFree": "Stay on Free", "feature.planSelection.cta.trial": "Start my free 14-days Trial", diff --git a/src/i18n/locales/fi.json b/src/i18n/locales/fi.json index 5b74d709b..10d75c6a8 100644 --- a/src/i18n/locales/fi.json +++ b/src/i18n/locales/fi.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Voi ei! Ferdi menetti yhteyden {name}.", "feature.announcements.changelog.headline": "Muutoksia Ferdissä {version}", "feature.debugger.title": "Julkaise virheraportti", - "feature.delayApp.headline": "Ole hyvä ja osta Ferdin Tukijalisenssi, jotta vältyt odottamiselta", - "feature.delayApp.text": "Ferdi jatkaa {seconds} sekunnin kuluttua.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Hanki Ferdi Supporter License", - "feature.delayApp.upgrade.actionShort": "Päivitä tili", "feature.nightlyBuilds.activate": "Aktivoi", "feature.nightlyBuilds.cancel": "Peruuta", "feature.nightlyBuilds.info": "Uusimmat versiot ovat Ferdin kokeellisia versioita, jotka voivat sisältää viimeistelemättömiä tai keskeneräisiä ominaisuuksia. Näitä uusimpia versioita käyttävät pääasiassa kehittäjät testaamaan uusia ominaisuuksia ja miten ne toimivat lopullisessa versiossa. Jos et tiedä mitä olet tekemässä, suosittelemme ettet aktivoi uusimpia versioita.", diff --git a/src/i18n/locales/fil.json b/src/i18n/locales/fil.json index 5588d982d..348ed9382 100644 --- a/src/i18n/locales/fil.json +++ b/src/i18n/locales/fil.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", - "feature.delayApp.headline": "Upgrade your Ferdi plan to skip the wait", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14-days trial and skip the wait", - "feature.delayApp.upgrade.action": "Upgrade Ferdi", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", "feature.planSelection.cta.stayOnFree": "Stay on Free", "feature.planSelection.cta.trial": "Start my free 14-days Trial", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index e3d3051ec..7e5840bdb 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Oh non ! Ferdi a perdu la connexion avec {name}.", "feature.announcements.changelog.headline": "Les nouveaux changements dans Ferdi {version}", "feature.debugger.title": "Publier les informations de débogage", - "feature.delayApp.headline": "Achetez la licence Ferdi pour ne plus avoir de temps d'attente", - "feature.delayApp.text": "Ferdi s'ouvrira dans {seconds} secondes.", - "feature.delayApp.trial.action": "Oui, je veux les 14 jours d'essai gratuits de Ferdi Professionnel", - "feature.delayApp.trial.actionShort": "Activer l'essai gratuit de Ferdi Professionnel", - "feature.delayApp.trial.headline": "Prendre l'essai gratuit de 14 jours de Ferdi Professionnel et esquiver la ligne", - "feature.delayApp.upgrade.action": "Acheter une license Ferdi", - "feature.delayApp.upgrade.actionShort": "Mettre à niveau le compte", "feature.nightlyBuilds.activate": "Activer", "feature.nightlyBuilds.cancel": "Annuler", "feature.nightlyBuilds.info": "Les versions de développement sont des versions expérimentales de Ferdi qui peuvent contenir des fonctionnalités non optimisées ou incomplètes. Ces versions de développement sont principalement utilisés par les développeurs pour tester leurs nouvelles fonctionnalités et leurs performances. Si vous ne savez pas ce que vous faites, nous vous suggérons de ne pas activer les versions de développement.", diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json index 7c93c8a63..7c1915ca3 100644 --- a/src/i18n/locales/ga.json +++ b/src/i18n/locales/ga.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", "feature.debugger.title": "Publish debugging information", - "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "Cealaigh", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json index 08879783a..67d9ceaf0 100644 --- a/src/i18n/locales/he.json +++ b/src/i18n/locales/he.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "הו לא! פרדי איבד את החיבור ל {name}.", "feature.announcements.changelog.headline": "שינויים בגרסת פרדי מספר {version}", "feature.debugger.title": "פרסם את פרטי ניפוי השגיאות", - "feature.delayApp.headline": "אנא קנה את גרסת התומכים כדי לדלג על ההמתנה", - "feature.delayApp.text": "פרדי ימשיך בעוד {seconds} שניות.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "קבל רישיון תומכים של פרדי", - "feature.delayApp.upgrade.actionShort": "שדרג חשבון", "feature.nightlyBuilds.activate": "הפעל", "feature.nightlyBuilds.cancel": "בטל", "feature.nightlyBuilds.info": "גרסאות נייטלי הם גרסאות נסיוניות ביותר של פרדי, העשויות להכיל פיצ'רים בלתי גמורים. גרסאות אלה מיועדות בעיקר לשימוש מפתחים על מנת לנסות את הפיצ'רים החדשים הנמצאים בפיתוח - לפני הכנסתם לגרסה הסופית. אם אתה לא יודע מה אתה עושה, אנו ממליצים שלא תפעיל את האופציה הזאת.", diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json index 2372494e5..333871fbd 100644 --- a/src/i18n/locales/hi.json +++ b/src/i18n/locales/hi.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "फ्रांज़ के संस्करण {version} में बदलाव:", - "feature.delayApp.headline": "Upgrade your Ferdi plan to skip the wait", - "feature.delayApp.text": "फ्रांज़ {seconds} सेकंड में जारी रहेगा।", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14-days trial and skip the wait", - "feature.delayApp.upgrade.action": "Upgrade Ferdi", - "feature.delayApp.upgrade.actionShort": "खाते का उन्नयन करें", "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", "feature.planSelection.cta.stayOnFree": "Stay on Free", "feature.planSelection.cta.trial": "Start my free 14-days Trial", diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 2e7d6f61c..5ca0e84e4 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Oh no! Ferdi ha perso la connessione con {name}.", "feature.announcements.changelog.headline": "Modifiche in Ferdi {version}", "feature.debugger.title": "Pubblica informazioni di debug", - "feature.delayApp.headline": "Per favore, compra una Licenza Supporter di Ferdi per saltare l'attesa", - "feature.delayApp.text": "Ferdi continuerà tra {seconds} secondi.", - "feature.delayApp.trial.action": "Sì, voglio la prova gratuita di 14 giorni di Ferdi Professional", - "feature.delayApp.trial.actionShort": "Attiva la prova gratuita di Ferdi Professional", - "feature.delayApp.trial.headline": "Ottieni la prova gratuita per 14 giorni di Ferdi Professional e salta la coda", - "feature.delayApp.upgrade.action": "Ricevi una Licenza Supporter di Ferdi", - "feature.delayApp.upgrade.actionShort": "Effettua l'upgrade del tuo account", "feature.nightlyBuilds.activate": "Attivato", "feature.nightlyBuilds.cancel": "Annulla", "feature.nightlyBuilds.info": "Le 'Nightly Builds' sono versioni sperimentali di Ferdi che possono contenere funzionalità incomplete o non perfettamente funzionanti. Queste versioni sono principalmente usate dagli sviluppatori per effettuare dei test sulle nuove caratteristiche e verificare come si integrano nella versione finale di Ferdi. Se non sei sicuro di quello che stai facendo, ti consigliamo di non attivare le 'Nightly Builds'.", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 0aeac2891..4efb26d5e 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "{name}への接続が切断されました。", "feature.announcements.changelog.headline": "Ferdi {version}の変更点", "feature.debugger.title": "デバッグ情報の記録", - "feature.delayApp.headline": "Ferdiをすぐに起動するには、Ferdi サポーターライセンスを購入してください。", - "feature.delayApp.text": "Ferdiは{seconds}秒後に起動します。", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Ferdiサポーターライセンスを購入する", - "feature.delayApp.upgrade.actionShort": "アカウントをアップグレード", "feature.nightlyBuilds.activate": "有効化", "feature.nightlyBuilds.cancel": "キャンセル", "feature.nightlyBuilds.info": "Nightlyビルドは未検証や未完成の機能が含まれる非常に実験的なバージョンです。このバージョンは、主に新機能のテストや最新ビルドでの検証を行う開発者が使用するものです。これを理解していない方は、Nightlyビルドを有効化しないことをおすすめします。", diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json index 70305c358..dcecd8581 100644 --- a/src/i18n/locales/ka.json +++ b/src/i18n/locales/ka.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", "feature.debugger.title": "Publish debugging information", - "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.nightlyBuilds.activate": "Activate", "feature.nightlyBuilds.cancel": "გაუქმება", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", diff --git a/src/i18n/locales/kk.json b/src/i18n/locales/kk.json index 09bb10fb2..77873d921 100644 --- a/src/i18n/locales/kk.json +++ b/src/i18n/locales/kk.json @@ -5,13 +5,6 @@ "connectionLostBanner.informationLink": "What happened?", "connectionLostBanner.message": "Oh no! Ferdi lost the connection to {name}.", "feature.announcements.changelog.headline": "Changes in Ferdi {version}", - "feature.delayApp.headline": "Upgrade your Ferdi plan to skip the wait", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14-days trial and skip the wait", - "feature.delayApp.upgrade.action": "Upgrade Ferdi", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", "feature.planSelection.cta.stayOnFree": "Stay on Free", "feature.planSelection.cta.trial": "Start my free 14-days Trial", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index af6171e3d..4f3cbcef3 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -12,13 +12,6 @@ "connectionLostBanner.message": "오 저런! Ferdi가 {name} 과 연결이 끊겼습니다.", "feature.announcements.changelog.headline": "Ferdi {version} 변경점", "feature.debugger.title": "디버깅 정보 공개", - "feature.delayApp.headline": "Ferdi Supporter License를 구매하여 대기시간을 스킵하세요.", - "feature.delayApp.text": "Ferdi가 {seconds} 초 안에 재개합니다.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Ferdi Supporter License 얻기", - "feature.delayApp.upgrade.actionShort": "계정 업그레이드", "feature.nightlyBuilds.activate": "활성화", "feature.nightlyBuilds.cancel": "취소", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 07c6df438..7235f04b9 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -12,33 +12,10 @@ "connectionLostBanner.message": "Oh não! O Ferdi perdeu a ligação com {name}.", "feature.announcements.changelog.headline": "Alterações no Ferdi {version}", "feature.debugger.title": "Publicar informações de depuração", - "feature.delayApp.headline": "Por favor, adquira uma licença de apoiante Ferdi para não ficar à espera", - "feature.delayApp.text": "Ferdi continuará em {seconds} segundos.", - "feature.delayApp.trial.action": "Sim, eu quero o período de testes gratuito de 14 dias do Ferdi Professional", - "feature.delayApp.trial.actionShort": "Ativar período de testes gratuito do Ferdi Professional", - "feature.delayApp.trial.headline": "Empieza el periodo de prueba de Ferdi Profesional por 14 días y cruza la linea.", - "feature.delayApp.upgrade.action": "Adquira uma licença de suporte Ferdi", - "feature.delayApp.upgrade.actionShort": "Faça upgrade da conta", "feature.nightlyBuilds.activate": "Activar", "feature.nightlyBuilds.cancel": "Cancelar", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", "feature.nightlyBuilds.title": "Nightly Builds", - "feature.planSelection.cta.ctaDowngradeFree": "Despromover para Gratuito", - "feature.planSelection.cta.stayOnFree": "Continuar em Gratuito", - "feature.planSelection.cta.trial": "Iniciar meu teste grátis de 14 dias", - "feature.planSelection.cta.upgradePersonal": "Escolha Pessoal", - "feature.planSelection.cta.upgradePro": "Escolha Profissional", - "feature.planSelection.free.text": "Funcionalidade básica", - "feature.planSelection.fullFeatureList": "Comparação completa de todos os planos", - "feature.planSelection.fullscreen.dialog.cta.downgrade": "Despromover para Gratuito", - "feature.planSelection.fullscreen.dialog.cta.upgrade": "Escolha Pessoal", - "feature.planSelection.fullscreen.dialog.message": "Você está prestes a fazer a despromoção para nossa conta gratuita. Você tem certeza? Clique aqui para obter mais serviços e funcionalidade por apenas {currency}{price} por mês.", - "feature.planSelection.fullscreen.dialog.title": "Despromover o seu Plano Ferdi", - "feature.planSelection.fullscreen.subheadline": "Agora tem de fazer uma escolha. O Ferdi trabalha melhor em nossos planos pessoais e profissionais. Por favor, compare estes planos e escolha o que melhor se adapta a si.", - "feature.planSelection.fullscreen.welcome": "Está prestes a escolher, {name}", - "feature.planSelection.personal.text": "Mais serviços, sem espera - ideal para uso pessoal.", - "feature.planSelection.pricesBasedOnAnnualPayment": "Todos os preços são baseados no pagamento anual", - "feature.planSelection.pro.text": "Serviços ilimitados e recursos profissionais para si - e para a sua equipa.", "feature.publishDebugInfo.error": "Houve um erro ao tentar publicar as informações de depuração. Por favor, tente novamente mais tarde ou visualize a consola para mais informações.", "feature.publishDebugInfo.info": "Publicar as suas informações de depuração ajuda-nos a encontrar problemas e erros no Ferdi. Ao publicar as suas informações de depuração, aceita a política de privacidade e termos de serviço do depurador Ferdi", "feature.publishDebugInfo.privacy": "Política de Privacidade", diff --git a/src/i18n/locales/ro.json b/src/i18n/locales/ro.json index b210f3316..bb1005426 100644 --- a/src/i18n/locales/ro.json +++ b/src/i18n/locales/ro.json @@ -12,33 +12,10 @@ "connectionLostBanner.message": "Oh nu! Ferdi a pierdut conexiunea cu {name}.", "feature.announcements.changelog.headline": "Modificări în Ferdi {version}", "feature.debugger.title": "Publish debugging information", - "feature.delayApp.headline": "Please purchase a Ferdi Supporter License to skip waiting", - "feature.delayApp.text": "Ferdi will continue in {seconds} seconds.", - "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Ferdi Professional", - "feature.delayApp.trial.actionShort": "Activate the free Ferdi Professional trial", - "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", - "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License", - "feature.delayApp.upgrade.actionShort": "Upgrade account", "feature.nightlyBuilds.activate": "Activare", "feature.nightlyBuilds.cancel": "Cancel", "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", "feature.nightlyBuilds.title": "Nightly Builds", - "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", - "feature.planSelection.cta.stayOnFree": "Stay on Free", - "feature.planSelection.cta.trial": "Start my free 14-days Trial", - "feature.planSelection.cta.upgradePersonal": "Choose Personal", - "feature.planSelection.cta.upgradePro": "Choose Professional", - "feature.planSelection.free.text": "Basic functionality", - "feature.planSelection.fullFeatureList": "Complete comparison of all plans", - "feature.planSelection.fullscreen.dialog.cta.downgrade": "Downgrade to Free", - "feature.planSelection.fullscreen.dialog.cta.upgrade": "Choose Personal", - "feature.planSelection.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "feature.planSelection.fullscreen.dialog.title": "Downgrade your Ferdi Plan", - "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Ferdi works best on our Personal and Professional plans. Please have a look and choose the best one for you.", - "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}", - "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", - "feature.planSelection.pricesBasedOnAnnualPayment": "All prices based on yearly payment", - "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", "feature.publishDebugInfo.privacy": "Politică de confidențialitate", diff --git a/src/i18n/messages/src/components/TrialActivationInfoBar.json b/src/i18n/messages/src/components/TrialActivationInfoBar.json deleted file mode 100644 index 65dd964a6..000000000 --- a/src/i18n/messages/src/components/TrialActivationInfoBar.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "infobar.trialActivated", - "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!", - "file": "src/components/TrialActivationInfoBar.js", - "start": { - "line": 11, - "column": 11 - }, - "end": { - "line": 14, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/auth/Pricing.json b/src/i18n/messages/src/components/auth/Pricing.json deleted file mode 100644 index b5b7d72a8..000000000 --- a/src/i18n/messages/src/components/auth/Pricing.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "id": "pricing.trial.headline.pro", - "defaultMessage": "!!!Hi {name}, welcome to Franz", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 14, - "column": 12 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "pricing.trial.intro.specialTreat", - "defaultMessage": "!!!We have a special treat for you.", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 18, - "column": 16 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "pricing.trial.intro.tryPro", - "defaultMessage": "!!!Enjoy the full Franz Professional experience completely free for 14 days.", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 22, - "column": 10 - }, - "end": { - "line": 25, - "column": 3 - } - }, - { - "id": "pricing.trial.intro.happyMessaging", - "defaultMessage": "!!!Happy messaging,", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 26, - "column": 18 - }, - "end": { - "line": 29, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.headline", - "defaultMessage": "!!!No strings attached", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 30, - "column": 29 - }, - "end": { - "line": 33, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.noCreditCard", - "defaultMessage": "!!!No credit card required", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 34, - "column": 16 - }, - "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.automaticTrialEnd", - "defaultMessage": "!!!Your free trial ends automatically after 14 days", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 38, - "column": 21 - }, - "end": { - "line": 41, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.trialWorth", - "defaultMessage": "!!!Free trial (normally {currency}{price} per month)", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 42, - "column": 14 - }, - "end": { - "line": 45, - "column": 3 - } - }, - { - "id": "pricing.trial.error", - "defaultMessage": "!!!Sorry, we could not activate your trial!", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 46, - "column": 19 - }, - "end": { - "line": 49, - "column": 3 - } - }, - { - "id": "pricing.trial.cta.accept", - "defaultMessage": "!!!Start my 14-day Franz Professional Trial", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 50, - "column": 13 - }, - "end": { - "line": 53, - "column": 3 - } - }, - { - "id": "pricing.trial.cta.start", - "defaultMessage": "!!!Start using Franz", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 54, - "column": 12 - }, - "end": { - "line": 57, - "column": 3 - } - }, - { - "id": "pricing.trial.cta.skip", - "defaultMessage": "!!!Continue to Ferdi", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 58, - "column": 11 - }, - "end": { - "line": 61, - "column": 3 - } - }, - { - "id": "pricing.trial.features.headline", - "defaultMessage": "!!!Franz Professional includes:", - "file": "src/components/auth/Pricing.js", - "start": { - "line": 62, - "column": 20 - }, - "end": { - "line": 65, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json index 554758f82..d14c30077 100644 --- a/src/i18n/messages/src/components/layout/AppLayout.json +++ b/src/i18n/messages/src/components/layout/AppLayout.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Your services have been updated.", "file": "src/components/layout/AppLayout.js", "start": { - "line": 32, + "line": 29, "column": 19 }, "end": { - "line": 35, + "line": 32, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Reload services", "file": "src/components/layout/AppLayout.js", "start": { - "line": 36, + "line": 33, "column": 24 }, "end": { - "line": 39, + "line": 36, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Could not load services and user information", "file": "src/components/layout/AppLayout.js", "start": { - "line": 40, + "line": 37, "column": 26 }, "end": { - "line": 43, + "line": 40, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", "file": "src/components/layout/AppLayout.js", "start": { - "line": 44, + "line": 41, "column": 21 }, "end": { - "line": 47, + "line": 44, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json index f0bb087d6..f5b75fc25 100644 --- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json +++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Account", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 17, + "line": 14, "column": 12 }, "end": { - "line": 20, + "line": 17, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Your Subscription", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 21, + "line": 18, "column": 24 }, "end": { - "line": 24, + "line": 21, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!Danger Zone", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 25, + "line": 22, "column": 22 }, "end": { - "line": 28, + "line": 25, "column": 3 } }, @@ -43,50 +43,11 @@ "defaultMessage": "!!!Manage your subscription", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 29, + "line": 26, "column": 33 }, "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "settings.account.upgradeToPro.label", - "defaultMessage": "!!!Upgrade to Franz Professional", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 33, - "column": 23 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "settings.account.accountType.basic", - "defaultMessage": "!!!Basic Account", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 37, - "column": 20 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "settings.account.accountType.premium", - "defaultMessage": "!!!Premium Supporter Account", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 41, - "column": 22 - }, - "end": { - "line": 44, + "line": 29, "column": 3 } }, @@ -95,11 +56,11 @@ "defaultMessage": "!!!Edit Account", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 45, + "line": 30, "column": 21 }, "end": { - "line": 48, + "line": 33, "column": 3 } }, @@ -108,11 +69,11 @@ "defaultMessage": "!!Invoices", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 49, + "line": 34, "column": 18 }, "end": { - "line": 52, + "line": 37, "column": 3 } }, @@ -121,11 +82,11 @@ "defaultMessage": "!!!Download", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 53, + "line": 38, "column": 19 }, "end": { - "line": 56, + "line": 41, "column": 3 } }, @@ -134,11 +95,11 @@ "defaultMessage": "!!!Could not load user information", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 57, + "line": 42, "column": 25 }, "end": { - "line": 60, + "line": 45, "column": 3 } }, @@ -147,11 +108,11 @@ "defaultMessage": "!!!Try again", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 61, + "line": 46, "column": 28 }, "end": { - "line": 64, + "line": 49, "column": 3 } }, @@ -160,11 +121,11 @@ "defaultMessage": "!!!Delete account", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 65, + "line": 50, "column": 17 }, "end": { - "line": 68, + "line": 53, "column": 3 } }, @@ -173,11 +134,11 @@ "defaultMessage": "!!!If you don't need your Ferdi account any longer, you can delete your account and all related data here.", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 69, + "line": 54, "column": 14 }, "end": { - "line": 73, + "line": 58, "column": 3 } }, @@ -186,24 +147,11 @@ "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 74, + "line": 59, "column": 19 }, "end": { - "line": 78, - "column": 3 - } - }, - { - "id": "settings.account.trial", - "defaultMessage": "!!!Free Trial", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 79, - "column": 9 - }, - "end": { - "line": 82, + "line": 63, "column": 3 } }, @@ -212,37 +160,11 @@ "defaultMessage": "!!!Your Franz License:", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 83, - "column": 15 - }, - "end": { - "line": 86, - "column": 3 - } - }, - { - "id": "settings.account.trialEndsIn", - "defaultMessage": "!!!Your free trial ends in {duration}.", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 87, + "line": 64, "column": 15 }, "end": { - "line": 90, - "column": 3 - } - }, - { - "id": "settings.account.trialUpdateBillingInfo", - "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", - "file": "src/components/settings/account/AccountDashboard.js", - "start": { - "line": 91, - "column": 33 - }, - "end": { - "line": 95, + "line": 67, "column": 3 } }, @@ -251,11 +173,11 @@ "defaultMessage": "Account is unavailable", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 96, + "line": 68, "column": 22 }, "end": { - "line": 99, + "line": 71, "column": 3 } }, @@ -264,11 +186,11 @@ "defaultMessage": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", "file": "src/components/settings/account/AccountDashboard.js", "start": { - "line": 100, + "line": 72, "column": 26 }, "end": { - "line": 103, + "line": 75, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json index d7906fa7d..705b7cee3 100644 --- a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json +++ b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Available services", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 17, + "line": 15, "column": 21 }, "end": { - "line": 20, + "line": 18, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Your services", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 21, + "line": 19, "column": 16 }, "end": { - "line": 24, + "line": 22, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Your workspaces", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 25, + "line": 23, "column": 18 }, "end": { - "line": 28, + "line": 26, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Account", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 29, + "line": 27, "column": 11 }, "end": { - "line": 32, + "line": 30, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Manage Team", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 33, + "line": 31, "column": 8 }, "end": { - "line": 36, + "line": 34, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Settings", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 37, + "line": 35, "column": 12 }, "end": { - "line": 40, + "line": 38, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!About Ferdi", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 41, + "line": 39, "column": 16 }, "end": { - "line": 44, + "line": 42, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Logout", "file": "src/components/settings/navigation/SettingsNavigation.js", "start": { - "line": 45, + "line": 43, "column": 10 }, "end": { - "line": 48, + "line": 46, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json b/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json index bbb55c7a0..ce7bb2c9d 100644 --- a/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json +++ b/src/i18n/messages/src/components/settings/recipes/RecipesDashboard.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Available Services", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 21, + "line": 19, "column": 12 }, "end": { - "line": 24, + "line": 22, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Search service", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 25, + "line": 23, "column": 17 }, "end": { - "line": 28, + "line": 26, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Most popular", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 29, + "line": 27, "column": 22 }, "end": { - "line": 32, + "line": 30, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!All services", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 33, + "line": 31, "column": 14 }, "end": { - "line": 36, + "line": 34, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Custom Services", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 37, + "line": 35, "column": 17 }, "end": { - "line": 40, + "line": 38, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Sorry, but no service matched your search term - but you can still probably add it using the \"Custom Website\" option. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 41, + "line": 39, "column": 16 }, "end": { - "line": 44, + "line": 42, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Service successfully added", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 45, + "line": 43, "column": 31 }, "end": { - "line": 48, + "line": 46, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Missing a service?", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 49, + "line": 47, "column": 18 }, "end": { - "line": 52, + "line": 50, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!To add a custom service, copy the recipe folder into:", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 53, + "line": 51, "column": 21 }, "end": { - "line": 56, + "line": 54, "column": 3 } }, @@ -121,11 +121,11 @@ "defaultMessage": "!!!Open directory", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 57, + "line": 55, "column": 14 }, "end": { - "line": 60, + "line": 58, "column": 3 } }, @@ -134,11 +134,11 @@ "defaultMessage": "!!!Developer Documentation", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 61, + "line": 59, "column": 15 }, "end": { - "line": 64, + "line": 62, "column": 3 } }, @@ -147,11 +147,11 @@ "defaultMessage": "!!!Custom 3rd Party Recipes", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 65, + "line": 63, "column": 25 }, "end": { - "line": 68, + "line": 66, "column": 3 } }, @@ -160,11 +160,11 @@ "defaultMessage": "!!!Community 3rd Party Recipes", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 69, + "line": 67, "column": 28 }, "end": { - "line": 72, + "line": 70, "column": 3 } }, @@ -173,11 +173,11 @@ "defaultMessage": "!!!Your Development Service Recipes", "file": "src/components/settings/recipes/RecipesDashboard.js", "start": { - "line": 73, + "line": 71, "column": 22 }, "end": { - "line": 76, + "line": 74, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/services/EditServiceForm.json b/src/i18n/messages/src/components/settings/services/EditServiceForm.json index 0aee52148..d7830f198 100644 --- a/src/i18n/messages/src/components/settings/services/EditServiceForm.json +++ b/src/i18n/messages/src/components/settings/services/EditServiceForm.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Save service", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 27, + "line": 23, "column": 15 }, "end": { - "line": 30, + "line": 26, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Delete Service", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 31, + "line": 27, "column": 17 }, "end": { - "line": 34, + "line": 30, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Open darkmode.css", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 35, + "line": 31, "column": 19 }, "end": { - "line": 38, + "line": 34, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Open user.css", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 39, + "line": 35, "column": 15 }, "end": { - "line": 42, + "line": 38, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Open user.js", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 43, + "line": 39, "column": 14 }, "end": { - "line": 46, + "line": 42, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Your user files will be inserted into the webpage so you can customize services in any way you like. User files are only stored locally and are not transferred to other computers using the same account.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 47, + "line": 43, "column": 18 }, "end": { - "line": 50, + "line": 46, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Available services", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 51, + "line": 47, "column": 21 }, "end": { - "line": 54, + "line": 50, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Your services", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 55, + "line": 51, "column": 16 }, "end": { - "line": 58, + "line": 54, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!Add {name}", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 59, + "line": 55, "column": 22 }, "end": { - "line": 62, + "line": 58, "column": 3 } }, @@ -121,11 +121,11 @@ "defaultMessage": "!!!Edit {name}", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 63, + "line": 59, "column": 23 }, "end": { - "line": 66, + "line": 62, "column": 3 } }, @@ -134,11 +134,11 @@ "defaultMessage": "!!!Hosted", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 67, + "line": 63, "column": 13 }, "end": { - "line": 70, + "line": 66, "column": 3 } }, @@ -147,11 +147,11 @@ "defaultMessage": "!!!Self hosted ⭐️", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 71, + "line": 67, "column": 16 }, "end": { - "line": 74, + "line": 70, "column": 3 } }, @@ -160,11 +160,11 @@ "defaultMessage": "!!!Use the hosted {name} service.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 75, + "line": 71, "column": 20 }, "end": { - "line": 78, + "line": 74, "column": 3 } }, @@ -173,37 +173,11 @@ "defaultMessage": "!!!Could not validate custom {name} server.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 79, + "line": 75, "column": 28 }, "end": { - "line": 82, - "column": 3 - } - }, - { - "id": "settings.service.form.customUrlPremiumInfo", - "defaultMessage": "!!!To add self hosted services, you need a Ferdi Premium Supporter Account.", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 83, - "column": 24 - }, - "end": { - "line": 86, - "column": 3 - } - }, - { - "id": "settings.service.form.customUrlUpgradeAccount", - "defaultMessage": "!!!Upgrade your account", - "file": "src/components/settings/services/EditServiceForm.js", - "start": { - "line": 87, - "column": 27 - }, - "end": { - "line": 90, + "line": 78, "column": 3 } }, @@ -212,11 +186,11 @@ "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 91, + "line": 79, "column": 23 }, "end": { - "line": 94, + "line": 82, "column": 3 } }, @@ -225,11 +199,11 @@ "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 95, + "line": 83, "column": 15 }, "end": { - "line": 98, + "line": 86, "column": 3 } }, @@ -238,11 +212,11 @@ "defaultMessage": "!!!When enabled, a service will be shut down after a period of time to save system resources.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 99, + "line": 87, "column": 28 }, "end": { - "line": 102, + "line": 90, "column": 3 } }, @@ -251,11 +225,11 @@ "defaultMessage": "!!!Notifications", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 103, + "line": 91, "column": 25 }, "end": { - "line": 106, + "line": 94, "column": 3 } }, @@ -264,11 +238,11 @@ "defaultMessage": "!!!Unread message badges", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 107, + "line": 95, "column": 18 }, "end": { - "line": 110, + "line": 98, "column": 3 } }, @@ -277,11 +251,11 @@ "defaultMessage": "!!!General", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 111, + "line": 99, "column": 19 }, "end": { - "line": 114, + "line": 102, "column": 3 } }, @@ -290,11 +264,11 @@ "defaultMessage": "!!!Dark Reader Settings", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 115, + "line": 103, "column": 30 }, "end": { - "line": 118, + "line": 106, "column": 3 } }, @@ -303,11 +277,11 @@ "defaultMessage": "!!!Delete", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 119, + "line": 107, "column": 14 }, "end": { - "line": 122, + "line": 110, "column": 3 } }, @@ -316,11 +290,11 @@ "defaultMessage": "!!!Drop your image, or click here", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 123, + "line": 111, "column": 14 }, "end": { - "line": 126, + "line": 114, "column": 3 } }, @@ -329,11 +303,11 @@ "defaultMessage": "!!!HTTP/HTTPS Proxy Settings", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 127, + "line": 115, "column": 17 }, "end": { - "line": 130, + "line": 118, "column": 3 } }, @@ -342,11 +316,11 @@ "defaultMessage": "!!!Please restart Ferdi after changing proxy Settings.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 131, + "line": 119, "column": 20 }, "end": { - "line": 134, + "line": 122, "column": 3 } }, @@ -355,11 +329,11 @@ "defaultMessage": "!!!Proxy settings will not be synchronized with the Ferdi servers.", "file": "src/components/settings/services/EditServiceForm.js", "start": { - "line": 135, + "line": 123, "column": 13 }, "end": { - "line": 138, + "line": 126, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json b/src/i18n/messages/src/components/settings/services/ServicesDashboard.json index fed05111e..7e7c5d67e 100644 --- a/src/i18n/messages/src/components/settings/services/ServicesDashboard.json +++ b/src/i18n/messages/src/components/settings/services/ServicesDashboard.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Your services", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 16, + "line": 15, "column": 12 }, "end": { - "line": 19, + "line": 18, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Search service", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 20, + "line": 19, "column": 17 }, "end": { - "line": 23, + "line": 22, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Start by adding a service.", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 24, + "line": 23, "column": 19 }, "end": { - "line": 27, + "line": 26, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Sorry, but no service matched your search term. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 28, + "line": 27, "column": 18 }, "end": { - "line": 31, + "line": 30, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Discover services", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 32, + "line": 31, "column": 20 }, "end": { - "line": 35, + "line": 34, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Could not load your services", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 36, + "line": 35, "column": 25 }, "end": { - "line": 39, + "line": 38, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Try again", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 40, + "line": 39, "column": 21 }, "end": { - "line": 43, + "line": 42, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Your changes have been saved", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 44, + "line": 43, "column": 15 }, "end": { - "line": 47, + "line": 46, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!Service has been deleted", "file": "src/components/settings/services/ServicesDashboard.js", "start": { - "line": 48, + "line": 47, "column": 15 }, "end": { - "line": 51, + "line": 50, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json index a1e8c714e..c96a1de22 100644 --- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json +++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Settings", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 24, + "line": 23, "column": 12 }, "end": { - "line": 27, + "line": 26, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!General", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 28, + "line": 27, "column": 19 }, "end": { - "line": 31, + "line": 30, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 32, + "line": 31, "column": 14 }, "end": { - "line": 35, + "line": 34, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 36, + "line": 35, "column": 17 }, "end": { - "line": 39, + "line": 38, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 40, + "line": 39, "column": 22 }, "end": { - "line": 43, + "line": 42, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 44, + "line": 43, "column": 18 }, "end": { - "line": 47, + "line": 46, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Password", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 48, + "line": 47, "column": 18 }, "end": { - "line": 51, + "line": 50, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 52, + "line": 51, "column": 22 }, "end": { - "line": 55, + "line": 54, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 56, + "line": 55, "column": 12 }, "end": { - "line": 59, + "line": 58, "column": 3 } }, @@ -121,11 +121,11 @@ "defaultMessage": "!!!Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 60, + "line": 59, "column": 24 }, "end": { - "line": 63, + "line": 62, "column": 3 } }, @@ -134,11 +134,11 @@ "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 64, + "line": 63, "column": 20 }, "end": { - "line": 67, + "line": 66, "column": 3 } }, @@ -147,11 +147,11 @@ "defaultMessage": "!!!Language", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 68, + "line": 67, "column": 20 }, "end": { - "line": 71, + "line": 70, "column": 3 } }, @@ -160,11 +160,11 @@ "defaultMessage": "!!!Updates", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 72, + "line": 71, "column": 19 }, "end": { - "line": 75, + "line": 74, "column": 3 } }, @@ -173,11 +173,11 @@ "defaultMessage": "!!!Appearance", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 76, + "line": 75, "column": 22 }, "end": { - "line": 79, + "line": 78, "column": 3 } }, @@ -186,11 +186,11 @@ "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 80, + "line": 79, "column": 25 }, "end": { - "line": 83, + "line": 82, "column": 3 } }, @@ -199,11 +199,11 @@ "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 84, + "line": 83, "column": 19 }, "end": { - "line": 87, + "line": 86, "column": 3 } }, @@ -212,11 +212,11 @@ "defaultMessage": "!!!Privacy", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 88, + "line": 87, "column": 19 }, "end": { - "line": 91, + "line": 90, "column": 3 } }, @@ -225,11 +225,11 @@ "defaultMessage": "!!!Advanced", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 92, + "line": 91, "column": 20 }, "end": { - "line": 95, + "line": 94, "column": 3 } }, @@ -238,11 +238,11 @@ "defaultMessage": "!!!Help us to translate Ferdi into your language.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 96, + "line": 95, "column": 19 }, "end": { - "line": 99, + "line": 98, "column": 3 } }, @@ -251,11 +251,11 @@ "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 100, + "line": 99, "column": 28 }, "end": { - "line": 103, + "line": 102, "column": 3 } }, @@ -264,11 +264,11 @@ "defaultMessage": "!!!Cache", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 104, + "line": 103, "column": 20 }, "end": { - "line": 107, + "line": 106, "column": 3 } }, @@ -277,11 +277,11 @@ "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 108, + "line": 107, "column": 13 }, "end": { - "line": 111, + "line": 110, "column": 3 } }, @@ -290,11 +290,11 @@ "defaultMessage": "!!!Couldn't clear all cache", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 112, + "line": 111, "column": 19 }, "end": { - "line": 115, + "line": 114, "column": 3 } }, @@ -303,11 +303,11 @@ "defaultMessage": "!!!Clear cache", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 116, + "line": 115, "column": 23 }, "end": { - "line": 119, + "line": 118, "column": 3 } }, @@ -316,11 +316,11 @@ "defaultMessage": "!!!Check for updates", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 120, + "line": 119, "column": 25 }, "end": { - "line": 123, + "line": 122, "column": 3 } }, @@ -329,11 +329,11 @@ "defaultMessage": "!!!Restart & install update", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 124, + "line": 123, "column": 23 }, "end": { - "line": 127, + "line": 126, "column": 3 } }, @@ -342,11 +342,11 @@ "defaultMessage": "!!!Is searching for update", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 128, + "line": 127, "column": 25 }, "end": { - "line": 131, + "line": 130, "column": 3 } }, @@ -355,11 +355,11 @@ "defaultMessage": "!!!Update available, downloading...", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 132, + "line": 131, "column": 25 }, "end": { - "line": 135, + "line": 134, "column": 3 } }, @@ -368,11 +368,11 @@ "defaultMessage": "!!!You are using the latest version of Ferdi", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 136, + "line": 135, "column": 24 }, "end": { - "line": 139, + "line": 138, "column": 3 } }, @@ -381,11 +381,11 @@ "defaultMessage": "!!!Current version:", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 140, + "line": 139, "column": 18 }, "end": { - "line": 143, + "line": 142, "column": 3 } }, @@ -394,11 +394,11 @@ "defaultMessage": "!!!Changes require restart", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 144, + "line": 143, "column": 22 }, "end": { - "line": 147, + "line": 146, "column": 3 } }, @@ -407,11 +407,11 @@ "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 148, + "line": 147, "column": 22 }, "end": { - "line": 151, + "line": 150, "column": 3 } } diff --git a/src/i18n/messages/src/components/settings/team/TeamDashboard.json b/src/i18n/messages/src/components/settings/team/TeamDashboard.json index 0a3b818a7..ac42ad98a 100644 --- a/src/i18n/messages/src/components/settings/team/TeamDashboard.json +++ b/src/i18n/messages/src/components/settings/team/TeamDashboard.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Team", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 18, + "line": 15, "column": 12 }, "end": { - "line": 21, + "line": 18, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Franz Team Management", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 22, + "line": 19, "column": 19 }, "end": { - "line": 25, + "line": 22, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Your are currently using Franz Servers, which is why you have access to Team Management.", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 26, + "line": 23, "column": 9 }, "end": { - "line": 29, + "line": 26, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Franz's Team Management allows you to manage Franz Subscriptions for multiple users. Please keep in mind that having a Franz Premium subscription will give you no advantages in using Ferdi: The only reason you still have access to Team Management is so you can manage your legacy Franz Teams and so that you don't loose any functionality in managing your account.", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 30, + "line": 27, "column": 8 }, "end": { - "line": 33, + "line": 30, "column": 3 } }, @@ -56,24 +56,11 @@ "defaultMessage": "!!!Manage your Team on meetfranz.com", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 34, + "line": 31, "column": 16 }, "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "settings.team.upgradeAction", - "defaultMessage": "!!!Upgrade your Account", - "file": "src/components/settings/team/TeamDashboard.js", - "start": { - "line": 38, - "column": 17 - }, - "end": { - "line": 41, + "line": 34, "column": 3 } }, @@ -82,11 +69,11 @@ "defaultMessage": "!!!Teams are unavailable", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 42, + "line": 35, "column": 20 }, "end": { - "line": 45, + "line": 38, "column": 3 } }, @@ -95,11 +82,11 @@ "defaultMessage": "!!!Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.", "file": "src/components/settings/team/TeamDashboard.js", "start": { - "line": 46, + "line": 39, "column": 24 }, "end": { - "line": 49, + "line": 42, "column": 3 } } diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json deleted file mode 100644 index 6d235254e..000000000 --- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "subscription.cta.choosePlan", - "defaultMessage": "!!!Choose your plan", - "file": "src/components/subscription/SubscriptionForm.js", - "start": { - "line": 13, - "column": 21 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "settings.account.headlineUpgradeAccount", - "defaultMessage": "!!!Upgrade your account and get the full Franz experience", - "file": "src/components/subscription/SubscriptionForm.js", - "start": { - "line": 17, - "column": 18 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "subscription.teaser.intro", - "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!", - "file": "src/components/subscription/SubscriptionForm.js", - "start": { - "line": 21, - "column": 14 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "subscription.teaser.includedFeatures", - "defaultMessage": "!!!Paid Franz Plans include:", - "file": "src/components/subscription/SubscriptionForm.js", - "start": { - "line": 25, - "column": 20 - }, - "end": { - "line": 28, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/subscription/SubscriptionPopup.json b/src/i18n/messages/src/components/subscription/SubscriptionPopup.json deleted file mode 100644 index c06da7531..000000000 --- a/src/i18n/messages/src/components/subscription/SubscriptionPopup.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "subscriptionPopup.buttonCancel", - "defaultMessage": "!!!Cancel", - "file": "src/components/subscription/SubscriptionPopup.js", - "start": { - "line": 11, - "column": 16 - }, - "end": { - "line": 14, - "column": 3 - } - }, - { - "id": "subscriptionPopup.buttonDone", - "defaultMessage": "!!!Done", - "file": "src/components/subscription/SubscriptionPopup.js", - "start": { - "line": 15, - "column": 14 - }, - "end": { - "line": 18, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/subscription/TrialForm.json b/src/i18n/messages/src/components/subscription/TrialForm.json deleted file mode 100644 index 8b387ba36..000000000 --- a/src/i18n/messages/src/components/subscription/TrialForm.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "subscription.cta.activateTrial", - "defaultMessage": "!!!Yes, start the free Franz Professional trial", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 14, - "column": 21 - }, - "end": { - "line": 17, - "column": 3 - } - }, - { - "id": "subscription.cta.allOptions", - "defaultMessage": "!!!See all options", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 18, - "column": 20 - }, - "end": { - "line": 21, - "column": 3 - } - }, - { - "id": "settings.account.headlineTrialUpgrade", - "defaultMessage": "!!!Get the free 14 day Franz Professional Trial", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 22, - "column": 18 - }, - "end": { - "line": 25, - "column": 3 - } - }, - { - "id": "subscription.includedProFeatures", - "defaultMessage": "!!!The Franz Professional Plan includes:", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 26, - "column": 20 - }, - "end": { - "line": 29, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.headline", - "defaultMessage": "!!!No strings attached", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 30, - "column": 29 - }, - "end": { - "line": 33, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.noCreditCard", - "defaultMessage": "!!!No credit card required", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 34, - "column": 16 - }, - "end": { - "line": 37, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.automaticTrialEnd", - "defaultMessage": "!!!Your free trial ends automatically after 14 days", - "file": "src/components/subscription/TrialForm.js", - "start": { - "line": 38, - "column": 21 - }, - "end": { - "line": 41, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json b/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json deleted file mode 100644 index fd969da78..000000000 --- a/src/i18n/messages/src/components/ui/ActivateTrialButton/index.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "id": "feature.delayApp.upgrade.action", - "defaultMessage": "!!!Get a Franz Supporter License", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "feature.delayApp.trial.action", - "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 17, - "column": 15 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "feature.delayApp.upgrade.actionShort", - "defaultMessage": "!!!Upgrade account", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 21, - "column": 15 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "feature.delayApp.trial.actionShort", - "defaultMessage": "!!!Activate the free Franz Professional trial", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 25, - "column": 20 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.headline", - "defaultMessage": "!!!No strings attached", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 29, - "column": 29 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.noCreditCard", - "defaultMessage": "!!!No credit card required", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 33, - "column": 16 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "pricing.trial.terms.automaticTrialEnd", - "defaultMessage": "!!!Your free trial ends automatically after 14 days", - "file": "src/components/ui/ActivateTrialButton/index.js", - "start": { - "line": 37, - "column": 21 - }, - "end": { - "line": 40, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/FeatureList.json b/src/i18n/messages/src/components/ui/FeatureList.json index 8d1dc4360..eb4bc483b 100644 --- a/src/i18n/messages/src/components/ui/FeatureList.json +++ b/src/i18n/messages/src/components/ui/FeatureList.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Choose from more than 70 Services", "file": "src/components/ui/FeatureList.js", "start": { - "line": 9, + "line": 8, "column": 20 }, "end": { - "line": 12, + "line": 11, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Account Synchronisation", "file": "src/components/ui/FeatureList.js", "start": { - "line": 13, + "line": 12, "column": 15 }, "end": { - "line": 16, + "line": 15, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Desktop Notifications", "file": "src/components/ui/FeatureList.js", "start": { - "line": 17, + "line": 16, "column": 24 }, "end": { - "line": 20, + "line": 19, "column": 3 } }, @@ -43,37 +43,11 @@ "defaultMessage": "!!!Add unlimited services", "file": "src/components/ui/FeatureList.js", "start": { - "line": 21, + "line": 20, "column": 21 }, "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "pricing.features.upToThreeServices", - "defaultMessage": "!!!Add up to 3 services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 25, - "column": 21 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "pricing.features.upToSixServices", - "defaultMessage": "!!!Add up to 6 services", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 29, - "column": 19 - }, - "end": { - "line": 32, + "line": 23, "column": 3 } }, @@ -82,11 +56,11 @@ "defaultMessage": "!!!Spellchecker support", "file": "src/components/ui/FeatureList.js", "start": { - "line": 33, + "line": 24, "column": 16 }, "end": { - "line": 36, + "line": 27, "column": 3 } }, @@ -95,11 +69,11 @@ "defaultMessage": "!!!Workspaces", "file": "src/components/ui/FeatureList.js", "start": { - "line": 37, + "line": 28, "column": 14 }, "end": { - "line": 40, + "line": 31, "column": 3 } }, @@ -108,11 +82,11 @@ "defaultMessage": "!!!Add Custom Websites", "file": "src/components/ui/FeatureList.js", "start": { - "line": 41, + "line": 32, "column": 18 }, "end": { - "line": 44, + "line": 35, "column": 3 } }, @@ -121,11 +95,11 @@ "defaultMessage": "!!!On-premise & other Hosted Services", "file": "src/components/ui/FeatureList.js", "start": { - "line": 45, + "line": 36, "column": 13 }, "end": { - "line": 48, + "line": 39, "column": 3 } }, @@ -134,11 +108,11 @@ "defaultMessage": "!!!Install 3rd party services", "file": "src/components/ui/FeatureList.js", "start": { - "line": 49, + "line": 40, "column": 22 }, "end": { - "line": 52, + "line": 43, "column": 3 } }, @@ -147,11 +121,11 @@ "defaultMessage": "!!!Service Proxies", "file": "src/components/ui/FeatureList.js", "start": { - "line": 53, + "line": 44, "column": 18 }, "end": { - "line": 56, + "line": 47, "column": 3 } }, @@ -160,50 +134,11 @@ "defaultMessage": "!!!Team Management", "file": "src/components/ui/FeatureList.js", "start": { - "line": 57, + "line": 48, "column": 18 }, "end": { - "line": 60, - "column": 3 - } - }, - { - "id": "pricing.features.appDelays", - "defaultMessage": "!!!No Waiting Screens", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 61, - "column": 13 - }, - "end": { - "line": 64, - "column": 3 - } - }, - { - "id": "pricing.features.adFree", - "defaultMessage": "!!!Forever ad-free", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 65, - "column": 10 - }, - "end": { - "line": 68, - "column": 3 - } - }, - { - "id": "pricing.features.appDelaysEnabled", - "defaultMessage": "!!!Occasional Waiting Screens", - "file": "src/components/ui/FeatureList.js", - "start": { - "line": 69, - "column": 19 - }, - "end": { - "line": 72, + "line": 51, "column": 3 } } diff --git a/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json b/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json deleted file mode 100644 index 0cde4cee5..000000000 --- a/src/i18n/messages/src/components/ui/PremiumFeatureContainer/index.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "premiumFeature.button.upgradeAccount", - "defaultMessage": "!!!Upgrade account", - "file": "src/components/ui/PremiumFeatureContainer/index.js", - "start": { - "line": 16, - "column": 10 - }, - "end": { - "line": 19, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/components/ui/UpgradeButton/index.json b/src/i18n/messages/src/components/ui/UpgradeButton/index.json deleted file mode 100644 index 28e44cb66..000000000 --- a/src/i18n/messages/src/components/ui/UpgradeButton/index.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "global.upgradeButton.upgradeToPro", - "defaultMessage": "!!!Upgrade to Franz Professional", - "file": "src/components/ui/UpgradeButton/index.js", - "start": { - "line": 13, - "column": 16 - }, - "end": { - "line": 16, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/containers/settings/EditServiceScreen.json b/src/i18n/messages/src/containers/settings/EditServiceScreen.json index ad97781c4..6744a9ff3 100644 --- a/src/i18n/messages/src/containers/settings/EditServiceScreen.json +++ b/src/i18n/messages/src/containers/settings/EditServiceScreen.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Name", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 29, + "line": 28, "column": 8 }, "end": { - "line": 32, + "line": 31, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Enable service", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 33, + "line": 32, "column": 17 }, "end": { - "line": 36, + "line": 35, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Enable hibernation", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 37, + "line": 36, "column": 21 }, "end": { - "line": 40, + "line": 39, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Enable Notifications", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 41, + "line": 40, "column": 22 }, "end": { - "line": 44, + "line": 43, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Show unread message badges", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 45, + "line": 44, "column": 15 }, "end": { - "line": 48, + "line": 47, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Enable audio", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 49, + "line": 48, "column": 15 }, "end": { - "line": 52, + "line": 51, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Team", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 53, + "line": 52, "column": 8 }, "end": { - "line": 56, + "line": 55, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Service URL", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 57, + "line": 56, "column": 13 }, "end": { - "line": 60, + "line": 59, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!Show message badge for all new messages", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 61, + "line": 60, "column": 20 }, "end": { - "line": 64, + "line": 63, "column": 3 } }, @@ -121,11 +121,11 @@ "defaultMessage": "!!!Custom icon", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 65, + "line": 64, "column": 8 }, "end": { - "line": 68, + "line": 67, "column": 3 } }, @@ -134,11 +134,11 @@ "defaultMessage": "!!!Enable Dark Mode", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 69, + "line": 68, "column": 18 }, "end": { - "line": 72, + "line": 71, "column": 3 } }, @@ -147,11 +147,11 @@ "defaultMessage": "!!!Dark Reader Brightness", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 73, + "line": 72, "column": 24 }, "end": { - "line": 76, + "line": 75, "column": 3 } }, @@ -160,11 +160,11 @@ "defaultMessage": "!!!Dark Reader Contrast", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 77, + "line": 76, "column": 22 }, "end": { - "line": 80, + "line": 79, "column": 3 } }, @@ -173,11 +173,11 @@ "defaultMessage": "!!!Dark Reader Sepia", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 81, + "line": 80, "column": 19 }, "end": { - "line": 84, + "line": 83, "column": 3 } }, @@ -186,11 +186,11 @@ "defaultMessage": "!!!Use Proxy", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 85, + "line": 84, "column": 15 }, "end": { - "line": 88, + "line": 87, "column": 3 } }, @@ -199,11 +199,11 @@ "defaultMessage": "!!!Proxy Host/IP", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 89, + "line": 88, "column": 13 }, "end": { - "line": 92, + "line": 91, "column": 3 } }, @@ -212,11 +212,11 @@ "defaultMessage": "!!!Port", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 93, + "line": 92, "column": 13 }, "end": { - "line": 96, + "line": 95, "column": 3 } }, @@ -225,11 +225,11 @@ "defaultMessage": "!!!User", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 97, + "line": 96, "column": 13 }, "end": { - "line": 100, + "line": 99, "column": 3 } }, @@ -238,11 +238,11 @@ "defaultMessage": "!!!Password", "file": "src/containers/settings/EditServiceScreen.js", "start": { - "line": 101, + "line": 100, "column": 17 }, "end": { - "line": 104, + "line": 103, "column": 3 } } diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json index cd5462b59..5c15933e4 100644 --- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json +++ b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Launch Ferdi on start", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 31, + "line": 30, "column": 21 }, "end": { - "line": 34, + "line": 33, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!Open in background", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 35, + "line": 34, "column": 26 }, "end": { - "line": 38, + "line": 37, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Keep Ferdi in background when closing the window", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 39, + "line": 38, "column": 19 }, "end": { - "line": 42, + "line": 41, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Start minimized", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 43, + "line": 42, "column": 18 }, "end": { - "line": 46, + "line": 45, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Always show Ferdi in System Tray", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 47, + "line": 46, "column": 20 }, "end": { - "line": 50, + "line": 49, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Always show Ferdi in Menu Bar", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 51, + "line": 50, "column": 17 }, "end": { - "line": 54, + "line": 53, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Reload Ferdi after system resume", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 55, + "line": 54, "column": 21 }, "end": { - "line": 58, + "line": 57, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Minimize Ferdi to system tray", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 59, + "line": 58, "column": 24 }, "end": { - "line": 62, + "line": 61, "column": 3 } }, @@ -108,11 +108,11 @@ "defaultMessage": "!!!Close Ferdi to system tray", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 63, + "line": 62, "column": 21 }, "end": { - "line": 66, + "line": 65, "column": 3 } }, @@ -121,11 +121,11 @@ "defaultMessage": "!!!Don't show message content in notifications", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 67, + "line": 66, "column": 24 }, "end": { - "line": 70, + "line": 69, "column": 3 } }, @@ -134,11 +134,11 @@ "defaultMessage": "!!!Don't show notifications for clipboard events", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 71, + "line": 70, "column": 26 }, "end": { - "line": 74, + "line": 73, "column": 3 } }, @@ -147,11 +147,11 @@ "defaultMessage": "!!!Notify TaskBar/Dock on new message", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 75, + "line": 74, "column": 26 }, "end": { - "line": 78, + "line": 77, "column": 3 } }, @@ -160,11 +160,11 @@ "defaultMessage": "!!!Navigation bar behaviour", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 79, + "line": 78, "column": 26 }, "end": { - "line": 82, + "line": 81, "column": 3 } }, @@ -173,11 +173,11 @@ "defaultMessage": "!!!Search engine", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 83, + "line": 82, "column": 16 }, "end": { - "line": 86, + "line": 85, "column": 3 } }, @@ -186,11 +186,11 @@ "defaultMessage": "!!!Send telemetry data", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 87, + "line": 86, "column": 10 }, "end": { - "line": 90, + "line": 89, "column": 3 } }, @@ -199,11 +199,11 @@ "defaultMessage": "!!!Enable service hibernation", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 91, + "line": 90, "column": 13 }, "end": { - "line": 94, + "line": 93, "column": 3 } }, @@ -212,11 +212,11 @@ "defaultMessage": "!!!Keep services in hibernation on startup", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 95, + "line": 94, "column": 22 }, "end": { - "line": 98, + "line": 97, "column": 3 } }, @@ -225,11 +225,11 @@ "defaultMessage": "!!!Hibernation strategy", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 99, + "line": 98, "column": 23 }, "end": { - "line": 102, + "line": 101, "column": 3 } }, @@ -238,11 +238,11 @@ "defaultMessage": "!!!Todo Server", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 103, + "line": 102, "column": 24 }, "end": { - "line": 106, + "line": 105, "column": 3 } }, @@ -251,11 +251,11 @@ "defaultMessage": "!!!Custom TodoServer", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 107, + "line": 106, "column": 20 }, "end": { - "line": 110, + "line": 109, "column": 3 } }, @@ -264,11 +264,11 @@ "defaultMessage": "!!!Enable Password Lock", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 111, + "line": 110, "column": 14 }, "end": { - "line": 114, + "line": 113, "column": 3 } }, @@ -277,11 +277,11 @@ "defaultMessage": "!!!Password", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 115, + "line": 114, "column": 16 }, "end": { - "line": 118, + "line": 117, "column": 3 } }, @@ -290,11 +290,11 @@ "defaultMessage": "!!!Allow using Touch ID to unlock", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 119, + "line": 118, "column": 22 }, "end": { - "line": 122, + "line": 121, "column": 3 } }, @@ -303,11 +303,11 @@ "defaultMessage": "!!!Lock after inactivity", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 123, + "line": 122, "column": 18 }, "end": { - "line": 126, + "line": 125, "column": 3 } }, @@ -316,11 +316,11 @@ "defaultMessage": "!!!Enable scheduled Do-not-Disturb", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 127, + "line": 126, "column": 23 }, "end": { - "line": 130, + "line": 129, "column": 3 } }, @@ -329,11 +329,11 @@ "defaultMessage": "!!!From", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 131, + "line": 130, "column": 21 }, "end": { - "line": 134, + "line": 133, "column": 3 } }, @@ -342,11 +342,11 @@ "defaultMessage": "!!!To", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 135, + "line": 134, "column": 19 }, "end": { - "line": 138, + "line": 137, "column": 3 } }, @@ -355,11 +355,11 @@ "defaultMessage": "!!!Language", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 139, + "line": 138, "column": 12 }, "end": { - "line": 142, + "line": 141, "column": 3 } }, @@ -368,11 +368,11 @@ "defaultMessage": "!!!Dark Mode", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 143, + "line": 142, "column": 12 }, "end": { - "line": 146, + "line": 145, "column": 3 } }, @@ -381,11 +381,11 @@ "defaultMessage": "!!!Synchronize dark mode with my OS's dark mode setting", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 147, + "line": 146, "column": 21 }, "end": { - "line": 150, + "line": 149, "column": 3 } }, @@ -394,11 +394,11 @@ "defaultMessage": "!!!Enable universal Dark Mode", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 151, + "line": 150, "column": 21 }, "end": { - "line": 154, + "line": 153, "column": 3 } }, @@ -407,11 +407,11 @@ "defaultMessage": "!!!Sidebar width", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 155, + "line": 154, "column": 22 }, "end": { - "line": 158, + "line": 157, "column": 3 } }, @@ -420,11 +420,11 @@ "defaultMessage": "!!!Service icon size", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 159, + "line": 158, "column": 12 }, "end": { - "line": 162, + "line": 161, "column": 3 } }, @@ -433,11 +433,11 @@ "defaultMessage": "!!!Use vertical style", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 163, + "line": 162, "column": 20 }, "end": { - "line": 166, + "line": 165, "column": 3 } }, @@ -446,11 +446,11 @@ "defaultMessage": "!!!Always show workspace drawer", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 167, + "line": 166, "column": 24 }, "end": { - "line": 170, + "line": 169, "column": 3 } }, @@ -459,11 +459,11 @@ "defaultMessage": "!!!Accent color", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 171, + "line": 170, "column": 15 }, "end": { - "line": 174, + "line": 173, "column": 3 } }, @@ -472,11 +472,11 @@ "defaultMessage": "!!!Display disabled services tabs", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 175, + "line": 174, "column": 24 }, "end": { - "line": 178, + "line": 177, "column": 3 } }, @@ -485,11 +485,11 @@ "defaultMessage": "!!!Show unread message badge when notifications are disabled", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 179, + "line": 178, "column": 29 }, "end": { - "line": 182, + "line": 181, "column": 3 } }, @@ -498,11 +498,11 @@ "defaultMessage": "!!!Show draggable area on window", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 183, + "line": 182, "column": 16 }, "end": { - "line": 186, + "line": 185, "column": 3 } }, @@ -511,11 +511,11 @@ "defaultMessage": "!!!Enable spell checking", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 187, + "line": 186, "column": 23 }, "end": { - "line": 190, + "line": 189, "column": 3 } }, @@ -524,11 +524,11 @@ "defaultMessage": "!!!Enable GPU Acceleration", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 191, + "line": 190, "column": 25 }, "end": { - "line": 194, + "line": 193, "column": 3 } }, @@ -537,11 +537,11 @@ "defaultMessage": "!!!Include beta versions", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 195, + "line": 194, "column": 8 }, "end": { - "line": 198, + "line": 197, "column": 3 } }, @@ -550,11 +550,11 @@ "defaultMessage": "!!!Enable updates", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 199, + "line": 198, "column": 20 }, "end": { - "line": 202, + "line": 201, "column": 3 } }, @@ -563,11 +563,11 @@ "defaultMessage": "!!!Enable Franz Todos", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 203, + "line": 202, "column": 15 }, "end": { - "line": 206, + "line": 205, "column": 3 } }, @@ -576,11 +576,11 @@ "defaultMessage": "!!!Keep all workspaces loaded", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 207, + "line": 206, "column": 27 }, "end": { - "line": 210, + "line": 209, "column": 3 } } diff --git a/src/i18n/messages/src/features/delayApp/Component.json b/src/i18n/messages/src/features/delayApp/Component.json deleted file mode 100644 index 7ec0e69a0..000000000 --- a/src/i18n/messages/src/features/delayApp/Component.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "id": "feature.delayApp.headline", - "defaultMessage": "!!!Please purchase license to skip waiting", - "file": "src/features/delayApp/Component.js", - "start": { - "line": 16, - "column": 12 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "feature.delayApp.trial.headline", - "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", - "file": "src/features/delayApp/Component.js", - "start": { - "line": 20, - "column": 17 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "feature.delayApp.upgrade.action", - "defaultMessage": "!!!Upgrade Franz", - "file": "src/features/delayApp/Component.js", - "start": { - "line": 24, - "column": 10 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "feature.delayApp.trial.action", - "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", - "file": "src/features/delayApp/Component.js", - "start": { - "line": 28, - "column": 15 - }, - "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "feature.delayApp.text", - "defaultMessage": "!!!Ferdi will continue in {seconds} seconds.", - "file": "src/features/delayApp/Component.js", - "start": { - "line": 32, - "column": 8 - }, - "end": { - "line": 35, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/planSelection/components/PlanItem.json b/src/i18n/messages/src/features/planSelection/components/PlanItem.json deleted file mode 100644 index 5a94f32ee..000000000 --- a/src/i18n/messages/src/features/planSelection/components/PlanItem.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "subscription.interval.perMonth", - "defaultMessage": "!!!per month", - "file": "src/features/planSelection/components/PlanItem.js", - "start": { - "line": 15, - "column": 12 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "subscription.interval.perMonthPerUser", - "defaultMessage": "!!!per month & user", - "file": "src/features/planSelection/components/PlanItem.js", - "start": { - "line": 19, - "column": 19 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "subscription.bestValue", - "defaultMessage": "!!!Best value", - "file": "src/features/planSelection/components/PlanItem.js", - "start": { - "line": 23, - "column": 13 - }, - "end": { - "line": 26, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json b/src/i18n/messages/src/features/planSelection/components/PlanSelection.json deleted file mode 100644 index ed354146e..000000000 --- a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json +++ /dev/null @@ -1,158 +0,0 @@ -[ - { - "id": "feature.planSelection.fullscreen.welcome", - "defaultMessage": "!!!Are you ready to choose, {name}", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 17, - "column": 11 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "feature.planSelection.fullscreen.subheadline", - "defaultMessage": "!!!It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 21, - "column": 15 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "feature.planSelection.free.text", - "defaultMessage": "!!!Basic functionality", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 25, - "column": 12 - }, - "end": { - "line": 28, - "column": 3 - } - }, - { - "id": "feature.planSelection.personal.text", - "defaultMessage": "!!!More services, no waiting - ideal for personal use.", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 29, - "column": 16 - }, - "end": { - "line": 32, - "column": 3 - } - }, - { - "id": "feature.planSelection.pro.text", - "defaultMessage": "!!!Unlimited services and professional features for you - and your team.", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 33, - "column": 20 - }, - "end": { - "line": 36, - "column": 3 - } - }, - { - "id": "feature.planSelection.cta.stayOnFree", - "defaultMessage": "!!!Stay on Free", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 37, - "column": 17 - }, - "end": { - "line": 40, - "column": 3 - } - }, - { - "id": "feature.planSelection.cta.ctaDowngradeFree", - "defaultMessage": "!!!Downgrade to Free", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 41, - "column": 20 - }, - "end": { - "line": 44, - "column": 3 - } - }, - { - "id": "feature.planSelection.cta.trial", - "defaultMessage": "!!!Start my free 14-days Trial", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 45, - "column": 15 - }, - "end": { - "line": 48, - "column": 3 - } - }, - { - "id": "feature.planSelection.cta.upgradePersonal", - "defaultMessage": "!!!Choose Personal", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 49, - "column": 23 - }, - "end": { - "line": 52, - "column": 3 - } - }, - { - "id": "feature.planSelection.cta.upgradePro", - "defaultMessage": "!!!Choose Professional", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 53, - "column": 18 - }, - "end": { - "line": 56, - "column": 3 - } - }, - { - "id": "feature.planSelection.fullFeatureList", - "defaultMessage": "!!!Complete comparison of all plans", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 57, - "column": 19 - }, - "end": { - "line": 60, - "column": 3 - } - }, - { - "id": "feature.planSelection.pricesBasedOnAnnualPayment", - "defaultMessage": "!!!All prices based on yearly payment", - "file": "src/features/planSelection/components/PlanSelection.js", - "start": { - "line": 61, - "column": 30 - }, - "end": { - "line": 64, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/planSelection/components/PlanTeaser.json b/src/i18n/messages/src/features/planSelection/components/PlanTeaser.json deleted file mode 100644 index 015304a2e..000000000 --- a/src/i18n/messages/src/features/planSelection/components/PlanTeaser.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "subscription.interval.per", - "defaultMessage": "!!!per {interval}", - "file": "src/features/planSelection/components/PlanTeaser.js", - "start": { - "line": 16, - "column": 7 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "subscription.planItem.upgradeAccount", - "defaultMessage": "!!!Upgrade Account", - "file": "src/features/planSelection/components/PlanTeaser.js", - "start": { - "line": 20, - "column": 7 - }, - "end": { - "line": 23, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/planSelection/containers/PlanSelectionScreen.json b/src/i18n/messages/src/features/planSelection/containers/PlanSelectionScreen.json deleted file mode 100644 index 40e08c233..000000000 --- a/src/i18n/messages/src/features/planSelection/containers/PlanSelectionScreen.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "feature.planSelection.fullscreen.dialog.title", - "defaultMessage": "!!!Downgrade your Franz Plan", - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "start": { - "line": 15, - "column": 15 - }, - "end": { - "line": 18, - "column": 3 - } - }, - { - "id": "feature.planSelection.fullscreen.dialog.message", - "defaultMessage": "!!!You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "start": { - "line": 19, - "column": 17 - }, - "end": { - "line": 22, - "column": 3 - } - }, - { - "id": "feature.planSelection.fullscreen.dialog.cta.downgrade", - "defaultMessage": "!!!Downgrade to Free", - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "start": { - "line": 23, - "column": 22 - }, - "end": { - "line": 26, - "column": 3 - } - }, - { - "id": "feature.planSelection.fullscreen.dialog.cta.upgrade", - "defaultMessage": "!!!Choose Personal", - "file": "src/features/planSelection/containers/PlanSelectionScreen.js", - "start": { - "line": 27, - "column": 20 - }, - "end": { - "line": 30, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json b/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json deleted file mode 100644 index e6e3cef99..000000000 --- a/src/i18n/messages/src/features/serviceLimit/components/AnnouncementScreen.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "id": "feature.announcements.changelog.headline", - "defaultMessage": "!!!Changes in Franz {version}", - "file": "src/features/serviceLimit/components/AnnouncementScreen.js", - "start": { - "line": 20, - "column": 12 - }, - "end": { - "line": 23, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json b/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json deleted file mode 100644 index e35ad8dd8..000000000 --- a/src/i18n/messages/src/features/serviceLimit/components/LimitReachedInfobox.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "id": "feature.serviceLimit.limitReached", - "defaultMessage": "!!!You have added {amount} of {limit} services. Please upgrade your account to add more services.", - "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", - "start": { - "line": 9, - "column": 16 - }, - "end": { - "line": 12, - "column": 3 - } - }, - { - "id": "premiumFeature.button.upgradeAccount", - "defaultMessage": "!!!Upgrade account", - "file": "src/features/serviceLimit/components/LimitReachedInfobox.js", - "start": { - "line": 13, - "column": 10 - }, - "end": { - "line": 16, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/shareFranz/Component.json b/src/i18n/messages/src/features/shareFranz/Component.json index 402865ec5..428bd5fbc 100644 --- a/src/i18n/messages/src/features/shareFranz/Component.json +++ b/src/i18n/messages/src/features/shareFranz/Component.json @@ -66,7 +66,7 @@ }, { "id": "feature.shareFranz.shareText.email", - "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", + "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", "file": "src/features/shareFranz/Component.js", "start": { "line": 37, @@ -79,7 +79,7 @@ }, { "id": "feature.shareFranz.shareText.twitter", - "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", + "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", "file": "src/features/shareFranz/Component.js", "start": { "line": 41, diff --git a/src/i18n/messages/src/features/trialStatusBar/components/TrialStatusBar.json b/src/i18n/messages/src/features/trialStatusBar/components/TrialStatusBar.json deleted file mode 100644 index bf211a016..000000000 --- a/src/i18n/messages/src/features/trialStatusBar/components/TrialStatusBar.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "id": "feature.trialStatusBar.restTime", - "defaultMessage": "!!!Your Free Franz {plan} Trial ends in {time}.", - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "start": { - "line": 13, - "column": 12 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "feature.trialStatusBar.expired", - "defaultMessage": "!!!Your free Franz {plan} Trial has expired, please upgrade your account.", - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "start": { - "line": 17, - "column": 11 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "feature.trialStatusBar.cta", - "defaultMessage": "!!!Upgrade now", - "file": "src/features/trialStatusBar/components/TrialStatusBar.js", - "start": { - "line": 21, - "column": 7 - }, - "end": { - "line": 24, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/trialStatusBar/containers/TrialStatusBarScreen.json b/src/i18n/messages/src/features/trialStatusBar/containers/TrialStatusBarScreen.json deleted file mode 100644 index 306cd0fee..000000000 --- a/src/i18n/messages/src/features/trialStatusBar/containers/TrialStatusBarScreen.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "feature.trialStatusBar.fullscreen.dialog.title", - "defaultMessage": "!!!Downgrade your Franz Plan", - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "start": { - "line": 16, - "column": 15 - }, - "end": { - "line": 19, - "column": 3 - } - }, - { - "id": "feature.trialStatusBar.fullscreen.dialog.message", - "defaultMessage": "!!!You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "start": { - "line": 20, - "column": 17 - }, - "end": { - "line": 23, - "column": 3 - } - }, - { - "id": "feature.trialStatusBar.fullscreen.dialog.cta.downgrade", - "defaultMessage": "!!!Downgrade to Free", - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "start": { - "line": 24, - "column": 22 - }, - "end": { - "line": 27, - "column": 3 - } - }, - { - "id": "feature.trialStatusBar.fullscreen.dialog.cta.upgrade", - "defaultMessage": "!!!Choose Personal", - "file": "src/features/trialStatusBar/containers/TrialStatusBarScreen.js", - "start": { - "line": 28, - "column": 20 - }, - "end": { - "line": 31, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json index 9f0935620..0c7ff2bc8 100644 --- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json +++ b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Workspaces", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 16, + "line": 15, "column": 12 }, "end": { - "line": 19, + "line": 18, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!All services", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 20, + "line": 19, "column": 15 }, "end": { - "line": 23, + "line": 22, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Workspaces settings", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 24, + "line": 23, "column": 29 }, "end": { - "line": 27, + "line": 26, "column": 3 } }, @@ -43,37 +43,11 @@ "defaultMessage": "!!!Info about workspace feature", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 28, + "line": 27, "column": 24 }, "end": { - "line": 31, - "column": 3 - } - }, - { - "id": "workspaceDrawer.premiumCtaButtonLabel", - "defaultMessage": "!!!Create your first workspace", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 32, - "column": 25 - }, - "end": { - "line": 35, - "column": 3 - } - }, - { - "id": "workspaceDrawer.reactivatePremiumAccountLabel", - "defaultMessage": "!!!Reactivate premium account", - "file": "src/features/workspaces/components/WorkspaceDrawer.js", - "start": { - "line": 36, - "column": 28 - }, - "end": { - "line": 39, + "line": 30, "column": 3 } }, @@ -82,11 +56,11 @@ "defaultMessage": "!!!add new workspace", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 40, + "line": 31, "column": 24 }, "end": { - "line": 43, + "line": 34, "column": 3 } }, @@ -95,11 +69,11 @@ "defaultMessage": "!!!Premium feature", "file": "src/features/workspaces/components/WorkspaceDrawer.js", "start": { - "line": 44, + "line": 35, "column": 23 }, "end": { - "line": 47, + "line": 38, "column": 3 } } diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json b/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json index d67bc492d..39c9c30fb 100644 --- a/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json +++ b/src/i18n/messages/src/features/workspaces/components/WorkspacesDashboard.json @@ -4,11 +4,11 @@ "defaultMessage": "!!!Your workspaces", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 20, + "line": 17, "column": 12 }, "end": { - "line": 23, + "line": 20, "column": 3 } }, @@ -17,11 +17,11 @@ "defaultMessage": "!!!You haven't created any workspaces yet.", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 24, + "line": 21, "column": 19 }, "end": { - "line": 27, + "line": 24, "column": 3 } }, @@ -30,11 +30,11 @@ "defaultMessage": "!!!Could not load your workspaces", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 28, + "line": 25, "column": 27 }, "end": { - "line": 31, + "line": 28, "column": 3 } }, @@ -43,11 +43,11 @@ "defaultMessage": "!!!Try again", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 32, + "line": 29, "column": 23 }, "end": { - "line": 35, + "line": 32, "column": 3 } }, @@ -56,11 +56,11 @@ "defaultMessage": "!!!Your changes have been saved", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 36, + "line": 33, "column": 15 }, "end": { - "line": 39, + "line": 36, "column": 3 } }, @@ -69,11 +69,11 @@ "defaultMessage": "!!!Workspace has been deleted", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 40, + "line": 37, "column": 15 }, "end": { - "line": 43, + "line": 40, "column": 3 } }, @@ -82,11 +82,11 @@ "defaultMessage": "!!!Info about workspace feature", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 44, + "line": 41, "column": 24 }, "end": { - "line": 47, + "line": 44, "column": 3 } }, @@ -95,11 +95,11 @@ "defaultMessage": "!!!Less is More: Introducing Ferdi Workspaces", "file": "src/features/workspaces/components/WorkspacesDashboard.js", "start": { - "line": 48, + "line": 45, "column": 28 }, "end": { - "line": 51, + "line": 48, "column": 3 } } diff --git a/src/i18n/messages/src/helpers/plan-helpers.json b/src/i18n/messages/src/helpers/plan-helpers.json deleted file mode 100644 index 3f3e7e85d..000000000 --- a/src/i18n/messages/src/helpers/plan-helpers.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "id": "pricing.plan.pro", - "defaultMessage": "!!!Professional", - "file": "src/helpers/plan-helpers.js", - "start": { - "line": 5, - "column": 15 - }, - "end": { - "line": 8, - "column": 3 - } - }, - { - "id": "pricing.plan.personal", - "defaultMessage": "!!!Personal", - "file": "src/helpers/plan-helpers.js", - "start": { - "line": 9, - "column": 20 - }, - "end": { - "line": 12, - "column": 3 - } - }, - { - "id": "pricing.plan.free", - "defaultMessage": "!!!Free", - "file": "src/helpers/plan-helpers.js", - "start": { - "line": 13, - "column": 16 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "pricing.plan.legacy", - "defaultMessage": "!!!Premium", - "file": "src/helpers/plan-helpers.js", - "start": { - "line": 17, - "column": 18 - }, - "end": { - "line": 20, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/helpers/pricing-helpers.json b/src/i18n/messages/src/helpers/pricing-helpers.json deleted file mode 100644 index 4030a3e3b..000000000 --- a/src/i18n/messages/src/helpers/pricing-helpers.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "id": "pricing.plan.pro-yearly", - "defaultMessage": "!!!Franz Professional Yearly", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 5, - "column": 22 - }, - "end": { - "line": 8, - "column": 3 - } - }, - { - "id": "pricing.plan.pro-monthly", - "defaultMessage": "!!!Franz Professional Monthly", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 9, - "column": 23 - }, - "end": { - "line": 12, - "column": 3 - } - }, - { - "id": "pricing.plan.personal-yearly", - "defaultMessage": "!!!Franz Personal Yearly", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 13, - "column": 27 - }, - "end": { - "line": 16, - "column": 3 - } - }, - { - "id": "pricing.plan.personal-monthly", - "defaultMessage": "!!!Franz Personal Monthly", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 17, - "column": 28 - }, - "end": { - "line": 20, - "column": 3 - } - }, - { - "id": "pricing.plan.free", - "defaultMessage": "!!!Franz Free", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 21, - "column": 16 - }, - "end": { - "line": 24, - "column": 3 - } - }, - { - "id": "pricing.plan.legacy", - "defaultMessage": "!!!Franz Premium", - "file": "src/helpers/pricing-helpers.js", - "start": { - "line": 25, - "column": 18 - }, - "end": { - "line": 28, - "column": 3 - } - } -] \ No newline at end of file diff --git a/src/i18n/messages/src/i18n/globalMessages.json b/src/i18n/messages/src/i18n/globalMessages.json index 5778a3389..ed2bfa092 100644 --- a/src/i18n/messages/src/i18n/globalMessages.json +++ b/src/i18n/messages/src/i18n/globalMessages.json @@ -102,18 +102,5 @@ "line": 35, "column": 3 } - }, - { - "id": "global.franzProRequired", - "defaultMessage": "!!!Franz Professional Required", - "file": "src/i18n/globalMessages.js", - "start": { - "line": 36, - "column": 15 - }, - "end": { - "line": 39, - "column": 3 - } } ] \ No newline at end of file diff --git a/src/internal-server b/src/internal-server index 2e15f753b..4c0a56310 160000 --- a/src/internal-server +++ b/src/internal-server @@ -1 +1 @@ -Subproject commit 2e15f753b79491df2cad5e436e00c8cf44faf5ca +Subproject commit 4c0a563108e7dc38daae45ccb6c80c3e26832664 diff --git a/src/lib/Menu.js b/src/lib/Menu.js index c60536f0c..756b256fb 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -831,8 +831,8 @@ export default class FranzMenu { // need to clone object so we don't modify computed (cached) object const serviceTpl = Object.assign([], this.serviceTpl()); - // Don't initialize when window.franz is undefined or when we are on a payment window route - if (window.ferdi === undefined || this.stores.router.location.pathname.startsWith('/payment/')) { + // Don't initialize when window.ferdi is undefined + if (window.ferdi === undefined) { console.log('skipping menu init'); return; } @@ -1219,17 +1219,15 @@ export default class FranzMenu { }); // Workspace items - if (this.stores.user.isPremium) { - workspaces.forEach((workspace, i) => menu.push({ - label: workspace.name, - accelerator: i < 9 ? `${cmdKey}+Alt+${i + 1}` : null, - type: 'radio', - checked: activeWorkspace ? workspace.id === activeWorkspace.id : false, - click: () => { - workspaceActions.activate({ workspace }); - }, - })); - } + workspaces.forEach((workspace, i) => menu.push({ + label: workspace.name, + accelerator: i < 9 ? `${cmdKey}+Alt+${i + 1}` : null, + type: 'radio', + checked: activeWorkspace ? workspace.id === activeWorkspace.id : false, + click: () => { + workspaceActions.activate({ workspace }); + }, + })); return menu; } diff --git a/src/lib/TouchBar.js b/src/lib/TouchBar.js index 781cd0895..3397afdb2 100644 --- a/src/lib/TouchBar.js +++ b/src/lib/TouchBar.js @@ -23,10 +23,6 @@ export default class FranzTouchBar { _build() { const currentWindow = getCurrentWindow(); - if (this.stores.router.location.pathname.startsWith('/payment/')) { - return; - } - if (this.stores.user.isLoggedIn) { const { TouchBarButton, TouchBarSpacer } = TouchBar; diff --git a/src/models/Plan.js b/src/models/Plan.js deleted file mode 100644 index 3dedf0d5e..000000000 --- a/src/models/Plan.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -export default class Plan { - month = { - id: '', - price: 0, - } - - year = { - id: '', - price: 0, - } - - constructor(data) { - Object.assign(this, data); - } -} diff --git a/src/models/Service.js b/src/models/Service.js index 5656295da..397950787 100644 --- a/src/models/Service.js +++ b/src/models/Service.js @@ -10,11 +10,6 @@ import UserAgent from './UserAgent'; const debug = require('debug')('Ferdi:Service'); -export const RESTRICTION_TYPES = { - SERVICE_LIMIT: 0, - CUSTOM_URL: 1, -}; - export default class Service { id = ''; diff --git a/src/models/User.js b/src/models/User.js index 74a39926b..d864dde0c 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -24,8 +24,6 @@ export default class User { @observable hadSubscription = false; - @observable isPremium = true; - @observable beta = false; @observable donor = {}; @@ -49,7 +47,6 @@ export default class User { this.lastname = data.lastname || this.lastname; this.organization = data.organization || this.organization; this.accountType = data.accountType || this.accountType; - this.isPremium = true; this.beta = data.beta || this.beta; this.donor = data.donor || this.donor; this.isDonor = data.isDonor || this.isDonor; diff --git a/src/routes.js b/src/routes.js index 5017ed837..d67ccee13 100644 --- a/src/routes.js +++ b/src/routes.js @@ -23,11 +23,9 @@ import PasswordScreen from './containers/auth/PasswordScreen'; import ChangeServerScreen from './containers/auth/ChangeServerScreen'; import SignupScreen from './containers/auth/SignupScreen'; import ImportScreen from './containers/auth/ImportScreen'; -import PricingScreen from './containers/auth/PricingScreen'; import SetupAssistentScreen from './containers/auth/SetupAssistantScreen'; import InviteScreen from './containers/auth/InviteScreen'; import AuthLayoutContainer from './containers/auth/AuthLayoutContainer'; -import SubscriptionPopupScreen from './containers/subscription/SubscriptionPopupScreen'; import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen'; import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen'; import { WORKSPACES_ROUTES } from './features/workspaces/constants'; @@ -79,7 +77,6 @@ export default @inject('stores', 'actions') @observer class Routes extends Compo - @@ -87,7 +84,6 @@ export default @inject('stores', 'actions') @observer class Routes extends Compo - ); diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js index 2fee9bdda..ac623c258 100644 --- a/src/stores/FeaturesStore.js +++ b/src/stores/FeaturesStore.js @@ -1,15 +1,12 @@ import { computed, observable, - reaction, runInAction, } from 'mobx'; import Store from './lib/Store'; import CachedRequest from './lib/CachedRequest'; -import delayApp from '../features/delayApp'; -import spellchecker from '../features/spellchecker'; import serviceProxy from '../features/serviceProxy'; import basicAuth from '../features/basicAuth'; import workspaces from '../features/workspaces'; @@ -19,12 +16,9 @@ import publishDebugInfo from '../features/publishDebugInfo'; import shareFranz from '../features/shareFranz'; import announcements from '../features/announcements'; import settingsWS from '../features/settingsWS'; -import serviceLimit from '../features/serviceLimit'; import communityRecipes from '../features/communityRecipes'; import todos from '../features/todos'; import appearance from '../features/appearance'; -import planSelection from '../features/planSelection'; -import trialStatusBar from '../features/trialStatusBar'; import { DEFAULT_FEATURES_CONFIG } from '../config'; @@ -43,13 +37,6 @@ export default class FeaturesStore extends Store { await this.featuresRequest._promise; setTimeout(this._setupFeatures.bind(this), 1); - - // single key reaction - reaction(() => this.stores.user.data.isPremium, () => { - if (this.stores.user.isLoggedIn) { - this.featuresRequest.invalidate({ immediately: true }); - } - }); } @computed get anonymousFeatures() { @@ -80,8 +67,6 @@ export default class FeaturesStore extends Store { } _setupFeatures() { - delayApp(this.stores, this.actions); - spellchecker(this.stores, this.actions); serviceProxy(this.stores, this.actions); basicAuth(this.stores, this.actions); workspaces(this.stores, this.actions); @@ -91,11 +76,8 @@ export default class FeaturesStore extends Store { shareFranz(this.stores, this.actions); announcements(this.stores, this.actions); settingsWS(this.stores, this.actions); - serviceLimit(this.stores, this.actions); communityRecipes(this.stores, this.actions); todos(this.stores, this.actions); appearance(this.stores, this.actions); - planSelection(this.stores, this.actions); - trialStatusBar(this.stores, this.actions); } } diff --git a/src/stores/PaymentStore.js b/src/stores/PaymentStore.js deleted file mode 100644 index 05bb5b3d0..000000000 --- a/src/stores/PaymentStore.js +++ /dev/null @@ -1,68 +0,0 @@ -import { action, observable, computed } from 'mobx'; -import { BrowserWindow, getCurrentWindow } from '@electron/remote'; - -import Store from './lib/Store'; -import CachedRequest from './lib/CachedRequest'; -import Request from './lib/Request'; - -export default class PaymentStore extends Store { - @observable plansRequest = new CachedRequest(this.api.payment, 'plans'); - - @observable createHostedPageRequest = new Request(this.api.payment, 'getHostedPage'); - - constructor(...args) { - super(...args); - - this.actions.payment.createHostedPage.listen(this._createHostedPage.bind(this)); - this.actions.payment.upgradeAccount.listen(this._upgradeAccount.bind(this)); - } - - @computed get plan() { - if (this.plansRequest.isError) { - return {}; - } - return this.plansRequest.execute().result || {}; - } - - @action _createHostedPage({ planId }) { - const request = this.createHostedPageRequest.execute(planId); - - return request; - } - - @action _upgradeAccount({ planId, onCloseWindow = () => null }) { - let hostedPageURL = this.stores.features.features.subscribeURL; - - const parsedUrl = new URL(hostedPageURL); - const params = new URLSearchParams(parsedUrl.search.slice(1)); - - params.set('plan', planId); - - hostedPageURL = this.stores.user.getAuthURL(`${parsedUrl.origin}${parsedUrl.pathname}?${params.toString()}`); - - const win = new BrowserWindow({ - parent: getCurrentWindow(), - modal: true, - title: '🔒 Upgrade Your Franz Account', - width: 800, - height: window.innerHeight - 100, - maxWidth: 800, - minWidth: 600, - autoHideMenuBar: true, - webPreferences: { - nodeIntegration: true, - webviewTag: true, - enableRemoteModule: true, - contextIsolation: false, - }, - }); - win.loadURL(`file://${__dirname}/../index.html#/payment/${encodeURIComponent(hostedPageURL)}`); - - win.on('closed', () => { - this.stores.user.getUserInfoRequest.invalidate({ immediately: true }); - this.stores.features.featuresRequest.invalidate({ immediately: true }); - - onCloseWindow(); - }); - } -} diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index 9b69cb7c6..9521f8493 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js @@ -18,8 +18,6 @@ import { matchRoute } from '../helpers/routing-helpers'; import { isInTimeframe } from '../helpers/schedule-helpers'; import { getRecipeDirectory, getDevRecipeDirectory } from '../helpers/recipe-helpers'; import { workspaceStore } from '../features/workspaces'; -import { serviceLimitStore } from '../features/serviceLimit'; -import { RESTRICTION_TYPES } from '../models/Service'; import { KEEP_WS_LOADED_USID } from '../config'; import { SPELLCHECKER_LOCALES } from '../i18n/languages'; @@ -94,7 +92,6 @@ export default class ServicesStore extends Store { this._saveActiveService.bind(this), this._logoutReaction.bind(this), this._handleMuteSettings.bind(this), - this._restrictServiceAccess.bind(this), this._checkForActiveService.bind(this), ]); @@ -297,8 +294,6 @@ export default class ServicesStore extends Store { async _createService({ recipeId, serviceData, redirect = true, skipCleanup = false, }) { - if (serviceLimitStore.userHasReachedServiceLimit) return; - if (!this.stores.recipes.isInstalled(recipeId)) { debug(`Recipe "${recipeId}" is not installed, installing recipe`); await this.stores.recipes._install({ recipeId }); @@ -961,35 +956,6 @@ export default class ServicesStore extends Store { return serviceData; } - _restrictServiceAccess() { - const { features } = this.stores.features; - const { userHasReachedServiceLimit, serviceLimit } = this.stores.serviceLimit; - - this.all.map((service, index) => { - if (userHasReachedServiceLimit) { - service.isServiceAccessRestricted = index >= serviceLimit; - - if (service.isServiceAccessRestricted) { - service.restrictionType = RESTRICTION_TYPES.SERVICE_LIMIT; - - debug('Restricting access to server due to service limit'); - } - } - - if (service.isUsingCustomUrl) { - service.isServiceAccessRestricted = !features.isCustomUrlIncludedInCurrentPlan; - - if (service.isServiceAccessRestricted) { - service.restrictionType = RESTRICTION_TYPES.CUSTOM_URL; - - debug('Restricting access to server due to custom url'); - } - } - - return service; - }); - } - _checkForActiveService() { if (!this.stores.router.location || this.stores.router.location.pathname.includes('auth/signup')) { return; diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js index 7947e5a27..8a525c2ef 100644 --- a/src/stores/UserStore.js +++ b/src/stores/UserStore.js @@ -2,16 +2,13 @@ import { observable, computed, action } from 'mobx'; import moment from 'moment'; import jwt from 'jsonwebtoken'; import localStorage from 'mobx-localstorage'; -import ms from 'ms'; import { session } from '@electron/remote'; import { isDevMode } from '../environment'; import Store from './lib/Store'; import Request from './lib/Request'; import CachedRequest from './lib/CachedRequest'; -import { sleep } from '../helpers/async-helpers'; -import { getPlan } from '../helpers/plan-helpers'; -import { PLANS, TODOS_PARTITION_ID } from '../config'; +import { TODOS_PARTITION_ID } from '../config'; const debug = require('debug')('Ferdi:UserStore'); @@ -27,8 +24,6 @@ export default class UserStore extends Store { SIGNUP_ROUTE = `${this.BASE_ROUTE}/signup`; - PRICING_ROUTE = `${this.BASE_ROUTE}/signup/pricing`; - SETUP_ROUTE = `${this.BASE_ROUTE}/signup/setup`; IMPORT_ROUTE = `${this.BASE_ROUTE}/signup/import`; @@ -45,8 +40,6 @@ export default class UserStore extends Store { @observable passwordRequest = new Request(this.api.user, 'password'); - @observable activateTrialRequest = new Request(this.api.user, 'activateTrial'); - @observable inviteRequest = new Request(this.api.user, 'invite'); @observable getUserInfoRequest = new CachedRequest(this.api.user, 'getInfo'); @@ -71,8 +64,6 @@ export default class UserStore extends Store { @observable hasCompletedSignup = false; - @observable hasActivatedTrial = false; - @observable userData = {}; @observable actionStatus = []; @@ -93,7 +84,6 @@ export default class UserStore extends Store { this.actions.user.retrievePassword.listen(this._retrievePassword.bind(this)); this.actions.user.logout.listen(this._logout.bind(this)); this.actions.user.signup.listen(this._signup.bind(this)); - this.actions.user.activateTrial.listen(this._activateTrial.bind(this)); this.actions.user.invite.listen(this._invite.bind(this)); this.actions.user.update.listen(this._update.bind(this)); this.actions.user.resetStatus.listen(this._resetStatus.bind(this)); @@ -104,7 +94,6 @@ export default class UserStore extends Store { this.registerReactions([ this._requireAuthenticatedUser.bind(this), this._getUserData.bind(this), - this._resetTrialActivationState.bind(this), ]); } @@ -126,10 +115,6 @@ export default class UserStore extends Store { return this.SIGNUP_ROUTE; } - get pricingRoute() { - return this.PRICING_ROUTE; - } - get setupRoute() { return this.SETUP_ROUTE; } @@ -172,31 +157,6 @@ export default class UserStore extends Store { return this.data.team || null; } - @computed get isPremium() { - return true; - } - - @computed get isPremiumOverride() { - return ((!this.team || !this.team.plan) && this.isPremium) || (this.team && this.team.state === 'expired' && this.isPremium); - } - - @computed get isPersonal() { - if (!this.team || !this.team.plan) return false; - const plan = getPlan(this.team.plan); - - return plan === PLANS.PERSONAL; - } - - @computed get isPro() { - return true; - // if (this.isPremiumOverride) return true; - - // if (!this.team || (!this.team.plan || this.team.state === 'expired')) return false; - // const plan = getPlan(this.team.plan); - - // return plan === PLANS.PRO || plan === PLANS.LEGACY; - } - @computed get legacyServices() { return this.getLegacyServicesRequest.execute() || {}; } @@ -244,21 +204,6 @@ export default class UserStore extends Store { this.actionStatus = request.result.status || []; } - @action async _activateTrial({ planId }) { - debug('activate trial', planId); - - this.activateTrialRequest.execute({ - plan: planId, - }); - - await this.activateTrialRequest._promise; - - this.hasActivatedTrial = true; - - this.stores.features.featuresRequest.invalidate({ immediately: true }); - this.stores.user.getUserInfoRequest.invalidate({ immediately: true }); - } - @action async _invite({ invites }) { const data = invites.filter(invite => invite.email !== ''); @@ -386,14 +331,6 @@ export default class UserStore extends Store { } } - async _resetTrialActivationState() { - if (this.hasActivatedTrial) { - await sleep(ms('12s')); - - this.hasActivatedTrial = false; - } - } - // Helpers _parseToken(authToken) { try { diff --git a/src/stores/index.js b/src/stores/index.js index 4eeef7982..b6e481e8a 100644 --- a/src/stores/index.js +++ b/src/stores/index.js @@ -6,16 +6,13 @@ import ServicesStore from './ServicesStore'; import RecipesStore from './RecipesStore'; import RecipePreviewsStore from './RecipePreviewsStore'; import UIStore from './UIStore'; -import PaymentStore from './PaymentStore'; import NewsStore from './NewsStore'; import RequestStore from './RequestStore'; import GlobalErrorStore from './GlobalErrorStore'; import { workspaceStore } from '../features/workspaces'; import { announcementsStore } from '../features/announcements'; -import { serviceLimitStore } from '../features/serviceLimit'; import { communityRecipesStore } from '../features/communityRecipes'; import { todosStore } from '../features/todos'; -import { planSelectionStore } from '../features/planSelection'; export default (api, actions, router) => { const stores = {}; @@ -29,16 +26,13 @@ export default (api, actions, router) => { recipes: new RecipesStore(stores, api, actions), recipePreviews: new RecipePreviewsStore(stores, api, actions), ui: new UIStore(stores, api, actions), - payment: new PaymentStore(stores, api, actions), news: new NewsStore(stores, api, actions), requests: new RequestStore(stores, api, actions), globalError: new GlobalErrorStore(stores, api, actions), workspaces: workspaceStore, announcements: announcementsStore, - serviceLimit: serviceLimitStore, communityRecipes: communityRecipesStore, todos: todosStore, - planSelection: planSelectionStore, }); // Initialize all stores Object.keys(stores).forEach((name) => { diff --git a/src/styles/badge.scss b/src/styles/badge.scss index 69879de31..1f58b8089 100644 --- a/src/styles/badge.scss +++ b/src/styles/badge.scss @@ -5,8 +5,7 @@ border-radius: $theme-border-radius-small; color: $dark-theme-gray-lightest; - &.badge--primary, - &.badge--premium { + &.badge--primary { background: $theme-brand-primary; color: $dark-theme-gray-lightest; } @@ -21,8 +20,7 @@ padding: 5px 10px; letter-spacing: 0; - &.badge--primary, - &.badge--premium { + &.badge--primary { background: $theme-brand-primary; color: #FFF; } diff --git a/src/styles/main.scss b/src/styles/main.scss index c57dc6fcd..6909d2051 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -25,8 +25,6 @@ $mdi-font-path: '../node_modules/mdi/fonts'; @import './animations.scss'; @import './infobox.scss'; @import './badge.scss'; -@import './subscription.scss'; -@import './subscription-popup.scss'; @import './content-tabs.scss'; @import './invite.scss'; @import './title-bar.scss'; @@ -40,4 +38,4 @@ $mdi-font-path: '../node_modules/mdi/fonts'; @import './searchInput.scss'; @import './select.scss'; @import './image-upload.scss'; -@import './slider.scss'; \ No newline at end of file +@import './slider.scss'; diff --git a/src/styles/settings.scss b/src/styles/settings.scss index a25759f48..5d4e81a4f 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss @@ -57,12 +57,6 @@ .account__box { background: $dark-theme-gray-darker; } } - .premium-info { - background: $dark-theme-gray-darker; - border-width: 2px; - border-style: solid; - border-color: $theme-brand-primary; - } .legal { color: $theme-gray-light; } } @@ -378,16 +372,6 @@ .badge { margin-left: 10px; } } - .badge--premium { - margin-left: 1px; - position: relative; - top: -3px; - padding-top: 4px; - color: #FFF; - border-radius: 3px; - } - - .manage-user-links { margin-top: 20px; display: flex; @@ -428,13 +412,7 @@ img { width: 40px; } } - .premium-info { - background: lighten($theme-brand-primary, 40%); - border-radius: $theme-border-radius; - padding: 20px; - } - - .content-tabs .premium-info { + .content-tabs { background: none; padding: 0; } diff --git a/src/styles/subscription-popup.scss b/src/styles/subscription-popup.scss deleted file mode 100644 index 14e05e65d..000000000 --- a/src/styles/subscription-popup.scss +++ /dev/null @@ -1,18 +0,0 @@ -.subscription-popup { - height: 100%; - - &__content { height: calc(100% - 60px); } - &__webview { - height: 100%; - background: #FFF; - } - - &__toolbar { - background: $theme-gray-lightest; - border-top: 1px solid $theme-gray-lighter; - display: flex; - height: 60px; - justify-content: space-between; - padding: 10px; - } -} diff --git a/src/styles/subscription.scss b/src/styles/subscription.scss deleted file mode 100644 index 70fb41cde..000000000 --- a/src/styles/subscription.scss +++ /dev/null @@ -1,49 +0,0 @@ -.subscription { - .subscription__premium-features { - margin: 10px 0; - - li { - align-items: center; - display: flex; - height: 30px; - - &:before { - content: "👍"; - margin-right: 10px; - } - - .badge { margin-left: 10px; } - } - } - - .subscription__premium-info { margin: 15px 0 25px; } -} - -.paymentTiers .franz-form__radio-wrapper { - flex-flow: wrap; - - .franz-form__radio { - flex: initial; - margin-right: 2%; - width: 32%; - - &:nth-child(3) { margin-right: 0; } - - &:nth-child(4) { - margin-right: 0; - margin-top: 2%; - width: 100%; - } - } -} - -.settings .paymentTiers .franz-form__radio-wrapper .franz-form__radio { - width: 49%; - - &:nth-child(2) { margin-right: 0; } - - &:nth-child(3) { - margin-top: 2%; - width: 100%; - } -} -- cgit v1.2.3-54-g00ecf