From 0a5bdaaa7fa97edfeaa6918a552fc4f1be62a4db Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Fri, 1 Aug 2025 11:19:22 +0500 Subject: [PATCH] mobile: add plan preview in settings --- apps/mobile/app/hooks/use-feature-manager.ts | 54 +++--- .../app/screens/settings/settings-data.tsx | 5 +- .../{subscription.js => subscription.jsx} | 11 +- .../{user-section.js => user-section.jsx} | 163 ++++++++++++------ 4 files changed, 152 insertions(+), 81 deletions(-) rename apps/mobile/app/screens/settings/{subscription.js => subscription.jsx} (95%) rename apps/mobile/app/screens/settings/{user-section.js => user-section.jsx} (69%) diff --git a/apps/mobile/app/hooks/use-feature-manager.ts b/apps/mobile/app/hooks/use-feature-manager.ts index b0859c7dc..df05567d4 100644 --- a/apps/mobile/app/hooks/use-feature-manager.ts +++ b/apps/mobile/app/hooks/use-feature-manager.ts @@ -21,7 +21,8 @@ export default function useFeatureManager() { "defaultNotebookAndTag", "defaultSidebarTab", "customToolbarPreset", - "disableTrashCleanup" + "disableTrashCleanup", + "fullOfflineMode" ]); const user = useUserStore((state) => state.user); @@ -55,33 +56,42 @@ export default function useFeatureManager() { useDragState.getState().setPreset("default"); } + if (!features.fullOfflineMode.isAllowed) { + SettingsService.setProperty("offlineMode", false); + } + if (!features.defaultNotebookAndTag.isAllowed) { db.settings.setDefaultNotebook(undefined); db.settings.setDefaultTag(undefined); } + const isAppLocked = useUserStore.getState().appLocked; + let unsub: () => void; + + if (isAppLocked) { + unsub = useUserStore.subscribe((state) => { + if (!state.appLocked && !features?.appLock?.isAllowed) { + unsub(); + SettingsService.setProperty("appLockEnabled", false); + setTimeout(() => { + presentDialog({ + title: "App Lock Disabled", + paragraph: features?.appLock?.error, + positiveText: strings.upgrade(), + negativeText: strings.cancel(), + positivePress: async () => { + eSendEvent(eCloseSimpleDialog); + Navigation.navigate("PayWall", { + context: "logged-in" + }); + } + }); + }, 1000); + } + }); + } - const unsub = useUserStore.subscribe((state) => { - if (!state.appLocked && !features?.appLock?.isAllowed) { - unsub(); - SettingsService.setProperty("appLockEnabled", false); - setTimeout(() => { - presentDialog({ - title: "App Lock Disabled", - paragraph: features?.appLock?.error, - positiveText: strings.upgrade(), - negativeText: strings.cancel(), - positivePress: async () => { - eSendEvent(eCloseSimpleDialog); - Navigation.navigate("PayWall", { - context: "logged-in" - }); - } - }); - }, 1000); - } - }); return () => { - unsub(); + unsub?.(); }; }, [features]); diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx index 82812d9c9..bc7ff4583 100644 --- a/apps/mobile/app/screens/settings/settings-data.tsx +++ b/apps/mobile/app/screens/settings/settings-data.tsx @@ -81,14 +81,15 @@ export const settingsGroups: SettingSection[] = [ hidden: (current) => !current, name: (current) => { const user = (current as User) || useUserStore.getState().user; - if (!user) return strings.subscribeToPro(); + if (!user) return strings.upgradePlan(); const isBasic = user.subscription?.type === SUBSCRIPTION_STATUS.BASIC; const isTrial = user.subscription?.type === SUBSCRIPTION_STATUS.TRIAL; return isBasic || !user.subscription?.type - ? strings.subscribeToPro() + ? strings.upgradePlan() : isTrial ? strings.trialStarted() : strings.subDetails(); + ``; }, type: "component", component: "subscription", diff --git a/apps/mobile/app/screens/settings/subscription.js b/apps/mobile/app/screens/settings/subscription.jsx similarity index 95% rename from apps/mobile/app/screens/settings/subscription.js rename to apps/mobile/app/screens/settings/subscription.jsx index 51c24a574..8205b3efd 100644 --- a/apps/mobile/app/screens/settings/subscription.js +++ b/apps/mobile/app/screens/settings/subscription.jsx @@ -21,7 +21,6 @@ import { strings } from "@notesnook/intl"; import React from "react"; import { Linking, Platform, View } from "react-native"; import Config from "react-native-config"; -import { Button } from "../../components/ui/button"; import { usePricing } from "../../hooks/use-pricing"; import { eSendEvent, @@ -32,8 +31,6 @@ import PremiumService from "../../services/premium"; import { useUserStore } from "../../stores/use-user-store"; import { SUBSCRIPTION_STATUS } from "../../utils/constants"; import { eOpenPremiumDialog } from "../../utils/events"; -import { AppFontSize } from "../../utils/size"; -import { DefaultAppStyles } from "../../utils/styles"; export const Subscription = () => { const user = useUserStore((state) => state.user); const monthlyPlan = usePricing("monthly"); @@ -95,7 +92,7 @@ export const Subscription = () => { return ( - {isNotPro ? ( + {/* {isNotPro ? (