@umituz/react-native-settings 4.17.33 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-settings",
3
- "version": "4.17.33",
3
+ "version": "4.18.0",
4
4
  "description": "Complete settings hub for React Native apps - consolidated package with settings, about, legal, appearance, feedback, FAQs, and rating",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
package/src/index.ts CHANGED
@@ -63,8 +63,6 @@ export type {
63
63
  export type {
64
64
  SettingsConfig,
65
65
  CustomSettingsSection,
66
- SubscriptionConfig,
67
- SubscriptionSettingsItemConfig,
68
66
  } from './presentation/screens/types';
69
67
 
70
68
  // =============================================================================
@@ -88,9 +86,6 @@ export type { StorageClearSettingProps } from './presentation/components/Storage
88
86
  export { DevSettingsSection } from './presentation/components/DevSettingsSection';
89
87
  export type { DevSettingsProps } from './presentation/components/DevSettingsSection';
90
88
 
91
- export { SubscriptionSettingsItem } from './presentation/screens/components/sections/SubscriptionSettingsItem';
92
- export type { SubscriptionSettingsItemProps } from './presentation/screens/components/sections/SubscriptionSettingsItem';
93
-
94
89
  // =============================================================================
95
90
  // DOMAIN EXPORTS - Consolidated Features
96
91
  // =============================================================================
@@ -26,7 +26,6 @@ interface SettingsContentProps {
26
26
  legal: boolean;
27
27
  disclaimer: boolean;
28
28
  userProfile: boolean;
29
- subscription: boolean;
30
29
  feedback: boolean;
31
30
  rating: boolean;
32
31
  faqs: boolean;
@@ -65,7 +64,6 @@ export const SettingsContent: React.FC<SettingsContentProps> = ({
65
64
  features.about ||
66
65
  features.legal ||
67
66
  features.disclaimer ||
68
- features.subscription ||
69
67
  features.feedback ||
70
68
  features.rating ||
71
69
  features.faqs ||
@@ -3,7 +3,6 @@ import { AppearanceSection } from "../../../../domains/appearance/presentation/c
3
3
  import { LanguageSection } from "@umituz/react-native-localization";
4
4
  import { NotificationsSection } from "@umituz/react-native-notifications";
5
5
  import { useLocalization } from "@umituz/react-native-localization";
6
- import { SubscriptionSettingsItem } from "./SubscriptionSettingsItem";
7
6
  import type { NormalizedConfig } from "../../utils/normalizeConfig";
8
7
 
9
8
  interface FeatureSettingsSectionProps {
@@ -12,7 +11,6 @@ interface FeatureSettingsSectionProps {
12
11
  appearance: boolean;
13
12
  language: boolean;
14
13
  notifications: boolean;
15
- subscription: boolean;
16
14
  };
17
15
  }
18
16
 
@@ -56,13 +54,6 @@ export const FeatureSettingsSection: React.FC<FeatureSettingsSectionProps> = ({
56
54
  }}
57
55
  />
58
56
  )}
59
-
60
- {features.subscription && normalizedConfig.subscription.config?.settingsItem && (
61
- <SubscriptionSettingsItem
62
- config={normalizedConfig.subscription.config.settingsItem}
63
- sectionTitle={t("settings.subscription.title")}
64
- />
65
- )}
66
57
  </>
67
58
  );
68
59
  };
@@ -55,7 +55,6 @@ export function useFeatureDetection(
55
55
  legal,
56
56
  disclaimer,
57
57
  userProfile,
58
- subscription,
59
58
  feedback,
60
59
  rating,
61
60
  faqs,
@@ -108,10 +107,6 @@ export function useFeatureDetection(
108
107
  disclaimer.config?.route || "Disclaimer",
109
108
  ))),
110
109
  userProfile: userProfile.enabled,
111
- subscription:
112
- subscription.enabled &&
113
- (subscription.config?.settingsItem !== undefined ||
114
- subscription.config?.sectionConfig !== undefined),
115
110
  feedback: feedback.enabled,
116
111
  rating: rating.enabled,
117
112
  faqs: faqs.enabled,
@@ -149,63 +149,6 @@ export interface UserProfileConfig {
149
149
  accountSettingsRoute?: string;
150
150
  }
151
151
 
152
- /**
153
- * Subscription Settings Item Config
154
- * Simplified config for settings list item display
155
- */
156
- export interface SubscriptionSettingsItemConfig {
157
- title: string;
158
- description?: string;
159
- isPremium: boolean;
160
- statusLabel: string;
161
- icon?: string;
162
- onPress?: () => void;
163
- }
164
-
165
- /**
166
- * Subscription Settings Configuration
167
- * App must provide all data via props (no internal fetch)
168
- */
169
- export interface SubscriptionConfig {
170
- /** Show subscription section */
171
- enabled?: FeatureVisibility;
172
- /** Settings item configuration (for settings list display) */
173
- settingsItem?: SubscriptionSettingsItemConfig;
174
- /** Detail section configuration (for detail screen) */
175
- sectionConfig?: {
176
- statusType: "active" | "expired" | "none" | "canceled";
177
- isPremium: boolean;
178
- expirationDate?: string | null;
179
- purchaseDate?: string | null;
180
- isLifetime?: boolean;
181
- daysRemaining?: number | null;
182
- willRenew?: boolean;
183
- credits?: Array<{
184
- id: string;
185
- label: string;
186
- current: number;
187
- total: number;
188
- }>;
189
- translations: {
190
- title: string;
191
- statusLabel: string;
192
- expiresLabel: string;
193
- purchasedLabel: string;
194
- creditsTitle?: string;
195
- remainingLabel?: string;
196
- manageButton?: string;
197
- upgradeButton?: string;
198
- lifetimeLabel?: string;
199
- statusActive?: string;
200
- statusExpired?: string;
201
- statusFree?: string;
202
- statusCanceled?: string;
203
- };
204
- onManageSubscription?: () => void;
205
- onUpgrade?: () => void;
206
- };
207
- }
208
-
209
152
  import type { FeedbackType } from "../../../domains/feedback/domain/entities/FeedbackEntity";
210
153
 
211
154
  /**
@@ -12,7 +12,6 @@ import type {
12
12
  LegalConfig,
13
13
  DisclaimerConfig,
14
14
  UserProfileConfig,
15
- SubscriptionConfig,
16
15
  FeedbackConfig,
17
16
  RatingConfig,
18
17
  FAQConfig,
@@ -93,13 +92,6 @@ export interface SettingsConfig {
93
92
  */
94
93
  userProfile?: boolean | UserProfileConfig;
95
94
 
96
- /**
97
- * Subscription/Premium settings
98
- * App must provide all data via sectionConfig
99
- * @default false
100
- */
101
- subscription?: FeatureVisibility | SubscriptionConfig;
102
-
103
95
  /**
104
96
  * Feedback settings
105
97
  * @default 'auto'
@@ -12,8 +12,6 @@ export type {
12
12
  LegalConfig,
13
13
  DisclaimerConfig,
14
14
  UserProfileConfig,
15
- SubscriptionConfig,
16
- SubscriptionSettingsItemConfig,
17
15
  FeedbackConfig,
18
16
  RatingConfig,
19
17
  FAQConfig,
@@ -12,7 +12,6 @@ import type {
12
12
  LegalConfig,
13
13
  DisclaimerConfig,
14
14
  UserProfileConfig,
15
- SubscriptionConfig,
16
15
  FeedbackConfig,
17
16
  RatingConfig,
18
17
  FAQConfig,
@@ -48,10 +47,6 @@ export interface NormalizedConfig {
48
47
  enabled: boolean;
49
48
  config?: UserProfileConfig;
50
49
  };
51
- subscription: {
52
- enabled: boolean;
53
- config?: SubscriptionConfig;
54
- };
55
50
  feedback: {
56
51
  enabled: boolean;
57
52
  config?: FeedbackConfig;
@@ -105,10 +100,8 @@ export function normalizeSettingsConfig(
105
100
  legal: normalizeConfigValue(config?.legal, "auto"),
106
101
  disclaimer: normalizeConfigValue(config?.disclaimer, false),
107
102
  userProfile: normalizeConfigValue(config?.userProfile, false),
108
- subscription: normalizeConfigValue(config?.subscription, false),
109
103
  feedback: normalizeConfigValue(config?.feedback, false),
110
104
  rating: normalizeConfigValue(config?.rating, false),
111
105
  faqs: normalizeConfigValue(config?.faqs, false),
112
106
  };
113
107
  }
114
-
@@ -1,157 +0,0 @@
1
- /**
2
- * Subscription Settings Item
3
- * Settings-style item for subscription/premium status display
4
- * Follows same visual pattern as other settings items
5
- */
6
-
7
- import React from "react";
8
- import { View, Pressable, StyleSheet } from "react-native";
9
- import {
10
- useResponsiveDesignTokens,
11
- AtomicIcon,
12
- AtomicText,
13
- } from "@umituz/react-native-design-system";
14
-
15
- export interface SubscriptionSettingsItemConfig {
16
- title: string;
17
- description?: string;
18
- isPremium: boolean;
19
- statusLabel: string;
20
- icon?: string;
21
- onPress?: () => void;
22
- }
23
-
24
- export interface SubscriptionSettingsItemProps {
25
- config: SubscriptionSettingsItemConfig;
26
- sectionTitle?: string;
27
- }
28
-
29
- export const SubscriptionSettingsItem: React.FC<SubscriptionSettingsItemProps> = ({
30
- config,
31
- sectionTitle,
32
- }) => {
33
- const tokens = useResponsiveDesignTokens();
34
- const colors = tokens.colors;
35
-
36
- const { title, description, isPremium, statusLabel, icon, onPress } = config;
37
- const displaySectionTitle = sectionTitle || title;
38
-
39
- if (!title) return null;
40
-
41
- return (
42
- <View style={[styles.sectionContainer, { backgroundColor: colors.surface }]}>
43
- {!!displaySectionTitle && (
44
- <View style={styles.headerContainer}>
45
- <AtomicText type="titleMedium" color="primary">
46
- {displaySectionTitle}
47
- </AtomicText>
48
- </View>
49
- )}
50
- <Pressable
51
- style={({ pressed }) => [
52
- styles.itemContainer,
53
- { backgroundColor: pressed ? `${colors.primary}08` : "transparent" },
54
- ]}
55
- onPress={onPress}
56
- >
57
- <View style={styles.content}>
58
- <View
59
- style={[
60
- styles.iconContainer,
61
- { backgroundColor: isPremium ? `${colors.primary}15` : `${colors.textTertiary}15` },
62
- ]}
63
- >
64
- <AtomicIcon
65
- name={icon || "diamond"}
66
- size="lg"
67
- color={isPremium ? "primary" : "secondary"}
68
- />
69
- </View>
70
- <View style={styles.textContainer}>
71
- <View style={styles.titleRow}>
72
- <AtomicText
73
- type="bodyLarge"
74
- color="primary"
75
- numberOfLines={1}
76
- style={styles.title}
77
- >
78
- {title}
79
- </AtomicText>
80
- <View
81
- style={[
82
- styles.statusBadge,
83
- { backgroundColor: isPremium ? colors.success : colors.textTertiary },
84
- ]}
85
- >
86
- <AtomicText type="labelSmall" style={styles.statusText}>
87
- {statusLabel}
88
- </AtomicText>
89
- </View>
90
- </View>
91
- {!!description && (
92
- <AtomicText type="bodyMedium" color="secondary" numberOfLines={2}>
93
- {description}
94
- </AtomicText>
95
- )}
96
- </View>
97
- <AtomicIcon name="chevron-forward" size="md" color="secondary" />
98
- </View>
99
- </Pressable>
100
- </View>
101
- );
102
- };
103
-
104
- const styles = StyleSheet.create({
105
- sectionContainer: {
106
- marginBottom: 16,
107
- borderRadius: 12,
108
- overflow: "hidden",
109
- },
110
- headerContainer: {
111
- paddingHorizontal: 16,
112
- paddingTop: 16,
113
- paddingBottom: 8,
114
- },
115
- itemContainer: {
116
- flexDirection: "row",
117
- alignItems: "center",
118
- paddingHorizontal: 16,
119
- paddingVertical: 16,
120
- minHeight: 72,
121
- },
122
- content: {
123
- flex: 1,
124
- flexDirection: "row",
125
- alignItems: "center",
126
- },
127
- iconContainer: {
128
- width: 48,
129
- height: 48,
130
- borderRadius: 12,
131
- justifyContent: "center",
132
- alignItems: "center",
133
- marginRight: 16,
134
- },
135
- textContainer: {
136
- flex: 1,
137
- marginRight: 8,
138
- },
139
- titleRow: {
140
- flexDirection: "row",
141
- alignItems: "center",
142
- marginBottom: 4,
143
- },
144
- title: {
145
- flex: 1,
146
- },
147
- statusBadge: {
148
- paddingHorizontal: 8,
149
- paddingVertical: 2,
150
- borderRadius: 4,
151
- marginLeft: 8,
152
- },
153
- statusText: {
154
- color: "#FFFFFF",
155
- fontWeight: "600",
156
- },
157
- });