@propel-nsl/propel-react-native-sdk 1.0.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/assets/fonts/Lexend-Black.ttf +0 -0
- package/assets/fonts/Lexend-Bold.ttf +0 -0
- package/assets/fonts/Lexend-ExtraBold.ttf +0 -0
- package/assets/fonts/Lexend-ExtraLight.ttf +0 -0
- package/assets/fonts/Lexend-Light.ttf +0 -0
- package/assets/fonts/Lexend-Medium.ttf +0 -0
- package/assets/fonts/Lexend-Regular.ttf +0 -0
- package/assets/fonts/Lexend-SemiBold.ttf +0 -0
- package/assets/fonts/Lexend-Thin.ttf +0 -0
- package/assets/images/HomeGoods.png +0 -0
- package/assets/images/accessories.png +0 -0
- package/assets/images/amazon.png +0 -0
- package/assets/images/apnaClubLogo.png +0 -0
- package/assets/images/apparel.png +0 -0
- package/assets/images/backgroundblue.png +0 -0
- package/assets/images/bannerCard.png +0 -0
- package/assets/images/bottomWave.png +0 -0
- package/assets/images/coin_1_1.png +0 -0
- package/assets/images/flipkart.png +0 -0
- package/assets/images/frame_1171278967.png +0 -0
- package/assets/images/gift.png +0 -0
- package/assets/images/herobanner.png +0 -0
- package/assets/images/hinduPencilsLogo.png +0 -0
- package/assets/images/icons/addwhiteicon.png +0 -0
- package/assets/images/icons/arrow-back.png +0 -0
- package/assets/images/icons/arrowgreen.png +0 -0
- package/assets/images/icons/arrowred.png +0 -0
- package/assets/images/icons/arrowright.png +0 -0
- package/assets/images/icons/arrowup.png +0 -0
- package/assets/images/icons/blackarrowdown.png +0 -0
- package/assets/images/icons/blackarrowup.png +0 -0
- package/assets/images/icons/blackcross.png +0 -0
- package/assets/images/icons/call.png +0 -0
- package/assets/images/icons/camera.png +0 -0
- package/assets/images/icons/cart.png +0 -0
- package/assets/images/icons/chat.png +0 -0
- package/assets/images/icons/circleblack.png +0 -0
- package/assets/images/icons/copy.png +0 -0
- package/assets/images/icons/cross.png +0 -0
- package/assets/images/icons/delete.png +0 -0
- package/assets/images/icons/delivery.png +0 -0
- package/assets/images/icons/eVoucher.png +0 -0
- package/assets/images/icons/editIcon.png +0 -0
- package/assets/images/icons/email.png +0 -0
- package/assets/images/icons/eye.png +0 -0
- package/assets/images/icons/faq.png +0 -0
- package/assets/images/icons/filtericon.png +0 -0
- package/assets/images/icons/greyDownArrow.png +0 -0
- package/assets/images/icons/help.png +0 -0
- package/assets/images/icons/home.png +0 -0
- package/assets/images/icons/homeinactive.png +0 -0
- package/assets/images/icons/i_blackicon.png +0 -0
- package/assets/images/icons/i_icon.png +0 -0
- package/assets/images/icons/location.png +0 -0
- package/assets/images/icons/logout.png +0 -0
- package/assets/images/icons/minus.png +0 -0
- package/assets/images/icons/myOrders.png +0 -0
- package/assets/images/icons/orders.png +0 -0
- package/assets/images/icons/pencillogo.png +0 -0
- package/assets/images/icons/pending.png +0 -0
- package/assets/images/icons/plus.png +0 -0
- package/assets/images/icons/redCross.png +0 -0
- package/assets/images/icons/redCrossicon.png +0 -0
- package/assets/images/icons/redWarningicon.png +0 -0
- package/assets/images/icons/redeem.png +0 -0
- package/assets/images/icons/redeemactive.png +0 -0
- package/assets/images/icons/redemptionHistory.png +0 -0
- package/assets/images/icons/redhelpicon.png +0 -0
- package/assets/images/icons/search.png +0 -0
- package/assets/images/icons/stopwatch.png +0 -0
- package/assets/images/icons/successTick.gif +0 -0
- package/assets/images/icons/tick.png +0 -0
- package/assets/images/icons/tnc.png +0 -0
- package/assets/images/icons/user.png +0 -0
- package/assets/images/icons/userredicon.png +0 -0
- package/assets/images/icons/wavecorner.png +0 -0
- package/assets/images/logo.png +0 -0
- package/assets/images/myntra_copy.png +0 -0
- package/assets/images/nike.png +0 -0
- package/assets/images/oq3p0u0_1.png +0 -0
- package/assets/images/profileicon.png +0 -0
- package/assets/images/topWave.png +0 -0
- package/assets/images/zagglePropelLogo.png +0 -0
- package/index.ts +23 -0
- package/lib/index.ts +25 -0
- package/package.json +70 -0
- package/src/PropelSDKScreen.tsx +98 -0
- package/src/SDKApp.tsx +540 -0
- package/src/bridge/SDKBridge.ts +104 -0
- package/src/bridge/index.ts +3 -0
- package/src/components/SDKBackHandler.tsx +187 -0
- package/src/components/SDKProfile.tsx +87 -0
- package/src/components/SDKProfileWrapper.tsx +51 -0
- package/src/constants.ts +10 -0
- package/src/contexts/SDKContext.tsx +72 -0
- package/src/hooks/useSDKBackNavigation.ts +61 -0
- package/src/navigation/SDKMainTabNavigator.tsx +315 -0
- package/src/navigation/SDKNavigator.tsx +41 -0
- package/src/redux/store.ts +32 -0
- package/src/screens/Dashboard/index.tsx +531 -0
- package/src/screens/Dashboard/styles.ts +512 -0
- package/src/screens/DeliveryAddress/index.tsx +221 -0
- package/src/screens/DeliveryAddress/styles.ts +122 -0
- package/src/screens/E-Vouchers/index.tsx +157 -0
- package/src/screens/E-Vouchers/styles.ts +106 -0
- package/src/screens/Faq/Faq.constants.ts +164 -0
- package/src/screens/Faq/index.tsx +114 -0
- package/src/screens/Faq/styles.ts +131 -0
- package/src/screens/Help/index.tsx +128 -0
- package/src/screens/Help/styles.ts +121 -0
- package/src/screens/Login/index.tsx +215 -0
- package/src/screens/Login/styles.ts +134 -0
- package/src/screens/MyCart/MyCart.constants.ts +13 -0
- package/src/screens/MyCart/index.tsx +318 -0
- package/src/screens/MyCart/styles.ts +249 -0
- package/src/screens/MyOrders/index.tsx +87 -0
- package/src/screens/MyOrders/styles.ts +281 -0
- package/src/screens/MyProfile/index.tsx +72 -0
- package/src/screens/MyProfile/styles.ts +47 -0
- package/src/screens/NewDeliveryAddress/index.tsx +360 -0
- package/src/screens/NewDeliveryAddress/styles.ts +68 -0
- package/src/screens/Onboarding/index.tsx +57 -0
- package/src/screens/Onboarding/styles.ts +60 -0
- package/src/screens/OrdersDetails/index.tsx +333 -0
- package/src/screens/OrdersDetails/styles.ts +262 -0
- package/src/screens/OtpVerification/index.tsx +283 -0
- package/src/screens/OtpVerification/styles.ts +197 -0
- package/src/screens/PaymentMethod/index.tsx +389 -0
- package/src/screens/PaymentMethod/styles.ts +246 -0
- package/src/screens/PointsLog/index.tsx +286 -0
- package/src/screens/PointsLog/styles.ts +156 -0
- package/src/screens/ProductDetails/index.tsx +682 -0
- package/src/screens/ProductDetails/styles.ts +372 -0
- package/src/screens/Profile/index.tsx +368 -0
- package/src/screens/Profile/styles.ts +158 -0
- package/src/screens/RedemptionHistory/RedemptionHistory.constants.ts +4 -0
- package/src/screens/RedemptionHistory/index.tsx +304 -0
- package/src/screens/RedemptionHistory/styles.ts +84 -0
- package/src/screens/Reedem/index.tsx +345 -0
- package/src/screens/Reedem/styles.ts +269 -0
- package/src/screens/TnC/TnC.constants.ts +169 -0
- package/src/screens/TnC/index.tsx +83 -0
- package/src/screens/TnC/styles.ts +88 -0
- package/src/screens/TransactionSuccessful/index.tsx +77 -0
- package/src/screens/TransactionSuccessful/styles.ts +77 -0
- package/src/screens/Verification/index.tsx +58 -0
- package/src/screens/Verification/styles.ts +74 -0
- package/src/screens/index.ts +23 -0
- package/src/types/index.ts +46 -0
- package/src-app/components/AmountBreakDownModal/index.tsx +86 -0
- package/src-app/components/AmountBreakDownModal/styles.ts +110 -0
- package/src-app/components/BottomNavIcons.tsx +125 -0
- package/src-app/components/Button.tsx +120 -0
- package/src-app/components/Card.tsx +47 -0
- package/src-app/components/ConfirmPopup/ConfirmPopup.constants.ts +25 -0
- package/src-app/components/ConfirmPopup/index.tsx +48 -0
- package/src-app/components/ConfirmPopup/styles.ts +167 -0
- package/src-app/components/CustomButton/index.tsx +67 -0
- package/src-app/components/CustomButton/styles.ts +44 -0
- package/src-app/components/CustomCard/index.tsx +221 -0
- package/src-app/components/CustomCard/styles.ts +184 -0
- package/src-app/components/CustomError/index.tsx +54 -0
- package/src-app/components/CustomError/styles.ts +41 -0
- package/src-app/components/CustomImage/index.tsx +37 -0
- package/src-app/components/CustomImage/styles.ts +5 -0
- package/src-app/components/CustomLoader/index.tsx +45 -0
- package/src-app/components/CustomLoader/styles.ts +35 -0
- package/src-app/components/CustomMessagePopUp/index.tsx +51 -0
- package/src-app/components/CustomMessagePopUp/styles.ts +74 -0
- package/src-app/components/CustomProductCard/index.tsx +13 -0
- package/src-app/components/CustomProductCard/styles.ts +5 -0
- package/src-app/components/FilterModal.tsx +372 -0
- package/src-app/components/Footer/index.tsx +23 -0
- package/src-app/components/Footer/styles.ts +37 -0
- package/src-app/components/Icon.tsx +80 -0
- package/src-app/components/Logout/index.tsx +82 -0
- package/src-app/components/Logout/styles.ts +116 -0
- package/src-app/components/MobileHeader.tsx +141 -0
- package/src-app/components/NoDataFound/index.tsx +18 -0
- package/src-app/components/NoDataFound/styles.ts +26 -0
- package/src-app/components/OTPModal.tsx +747 -0
- package/src-app/components/ProfileField.tsx +47 -0
- package/src-app/components/QuantityModal/index.tsx +113 -0
- package/src-app/components/QuantityModal/styles.ts +84 -0
- package/src-app/components/TabBarIcons.tsx +110 -0
- package/src-app/components/TextInput.tsx +79 -0
- package/src-app/components/ToastConfig.tsx +60 -0
- package/src-app/components/index.ts +18 -0
- package/src-app/config/env.ts +22 -0
- package/src-app/constants/Fonts.ts +12 -0
- package/src-app/constants/Formatter.ts +39 -0
- package/src-app/constants/HtmlSanitization.ts +46 -0
- package/src-app/constants/Images.ts +81 -0
- package/src-app/constants/Labels.ts +8 -0
- package/src-app/constants/Messages.ts +108 -0
- package/src-app/constants/Routes.ts +17 -0
- package/src-app/constants/Scaling.ts +5 -0
- package/src-app/constants/Text.ts +8 -0
- package/src-app/constants/offSets.ts +18 -0
- package/src-app/hooks/useAppDispatch.ts +4 -0
- package/src-app/hooks/useAppSelector.ts +4 -0
- package/src-app/hooks/useBackHandler.ts +47 -0
- package/src-app/hooks/useScreenBackHandler.ts +91 -0
- package/src-app/navigation/AppNavigator.tsx +34 -0
- package/src-app/navigation/MainTabNavigator.tsx +294 -0
- package/src-app/redux/authSaga.ts +605 -0
- package/src-app/redux/authSlice.ts +754 -0
- package/src-app/redux/rootSaga.ts +6 -0
- package/src-app/redux/store.ts +25 -0
- package/src-app/services/api.ts +14 -0
- package/src-app/services/endpoints.ts +33 -0
- package/src-app/services/index.ts +574 -0
- package/src-app/services/sdkCredentials.ts +44 -0
- package/src-app/styles/colors.ts +85 -0
- package/src-app/styles/shared.ts +112 -0
- package/src-app/types/authTypes.ts +155 -0
- package/src-app/types/navigation.ts +99 -0
- package/src-app/utils/Validation.ts +48 -0
- package/src-app/utils/filterPins.ts +29 -0
- package/src-app/utils/navigationUtils.ts +43 -0
- package/src-app/utils/useHardwareBack.ts +21 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export const termsList: string[] = [
|
|
2
|
+
"SDK Terms and Conditions – NSL Points Redemption",
|
|
3
|
+
"",
|
|
4
|
+
"1. Introduction",
|
|
5
|
+
"",
|
|
6
|
+
"These Terms and Conditions ('Terms') govern the use of the redemption Software Development Kit ('SDK') provided by Zaggle / Propel Platform ('Service Provider') and embedded within the NSL Gold Club Mobile Application ('Host Application') operated by Nuziveedu Seeds Limited ('NSL').",
|
|
7
|
+
"",
|
|
8
|
+
"By accessing or using the redemption services through the Host Application, users agree to be bound by these Terms.",
|
|
9
|
+
"",
|
|
10
|
+
"2. Scope of Service",
|
|
11
|
+
"",
|
|
12
|
+
"The SDK enables eligible users of NSL Gold Club App to:",
|
|
13
|
+
"• View NSL Points balance",
|
|
14
|
+
"• Redeem NSL Points for eligible rewards",
|
|
15
|
+
"• Access redemption catalog including digital vouchers and other approved rewards",
|
|
16
|
+
"• Track redemption transactions and history",
|
|
17
|
+
"",
|
|
18
|
+
"The SDK does not provide direct monetary services or cash payouts.",
|
|
19
|
+
"",
|
|
20
|
+
"3. Eligibility",
|
|
21
|
+
"",
|
|
22
|
+
"Users must:",
|
|
23
|
+
"• Be authorized members of NSL Gold Club Program",
|
|
24
|
+
"• Have valid and active account credentials",
|
|
25
|
+
"• Have points credited by NSL under its internal reward program",
|
|
26
|
+
"",
|
|
27
|
+
"The Service Provider does not determine eligibility for point allocation.",
|
|
28
|
+
"",
|
|
29
|
+
"4. NSL Points Usage Policy",
|
|
30
|
+
"",
|
|
31
|
+
"4.1 Nature of Points",
|
|
32
|
+
"• NSL Points are promotional reward points.",
|
|
33
|
+
"• Points have no cash value.",
|
|
34
|
+
"• Points cannot be converted to cash, bank transfer, or financial instruments.",
|
|
35
|
+
"",
|
|
36
|
+
"4.2 Transferability",
|
|
37
|
+
"• Points are non-transferable.",
|
|
38
|
+
"• Points can only be used by the account holder.",
|
|
39
|
+
"",
|
|
40
|
+
"4.3 Expiry",
|
|
41
|
+
"• Points are valid for 12 months from credit date, unless otherwise specified by NSL.",
|
|
42
|
+
"",
|
|
43
|
+
"5. Redemption Rules",
|
|
44
|
+
"",
|
|
45
|
+
"• Redemptions must be completed using available NSL Points balance.",
|
|
46
|
+
"• Partial payments using other payment methods are not supported.",
|
|
47
|
+
"• Once confirmed, redemption orders cannot be modified.",
|
|
48
|
+
"• Cancellation is allowed only if order status is Pending.",
|
|
49
|
+
"",
|
|
50
|
+
"6. Rewards and Voucher Fulfilment",
|
|
51
|
+
"",
|
|
52
|
+
"• E-vouchers are typically delivered within minutes but may take up to 24 hours.",
|
|
53
|
+
"• Service Provider is not responsible for:",
|
|
54
|
+
" o Brand partner outages",
|
|
55
|
+
" o Email delivery delays outside platform control",
|
|
56
|
+
" o Incorrect email or mobile details provided by user",
|
|
57
|
+
"",
|
|
58
|
+
"Use of brand vouchers is governed by respective brand terms.",
|
|
59
|
+
"",
|
|
60
|
+
"7. Refunds and Reversals",
|
|
61
|
+
"",
|
|
62
|
+
"Points will be refunded only if:",
|
|
63
|
+
"• Order cancellation is approved, OR",
|
|
64
|
+
"• Order fails due to system or partner failure",
|
|
65
|
+
"",
|
|
66
|
+
"Refund timelines may vary based on system processing.",
|
|
67
|
+
"",
|
|
68
|
+
"8. Restrictions",
|
|
69
|
+
"",
|
|
70
|
+
"Users shall not:",
|
|
71
|
+
"• Attempt fraud, manipulation, or misuse of points",
|
|
72
|
+
"• Create multiple accounts",
|
|
73
|
+
"• Use automation, bots, or reverse engineering on SDK services",
|
|
74
|
+
"• Use services for unlawful purposes under Indian law",
|
|
75
|
+
"",
|
|
76
|
+
"Violation may lead to suspension.",
|
|
77
|
+
"",
|
|
78
|
+
"9. Data Privacy and Security",
|
|
79
|
+
"",
|
|
80
|
+
"User data is processed in accordance with:",
|
|
81
|
+
"• Information Technology Act, 2000 (India)",
|
|
82
|
+
"• Applicable Indian Data Protection laws (including DPDP Act when applicable)",
|
|
83
|
+
"",
|
|
84
|
+
"Data collected may include:",
|
|
85
|
+
"• Mobile number",
|
|
86
|
+
"• Email ID",
|
|
87
|
+
"• Transaction data",
|
|
88
|
+
"• Device metadata (for security and fraud prevention)",
|
|
89
|
+
"",
|
|
90
|
+
"Data is used only for:",
|
|
91
|
+
"• Program operations",
|
|
92
|
+
"• Transaction processing",
|
|
93
|
+
"• Compliance and fraud monitoring",
|
|
94
|
+
"",
|
|
95
|
+
"10. Third Party Services",
|
|
96
|
+
"",
|
|
97
|
+
"The SDK integrates third-party vendors such as voucher providers and logistics partners.",
|
|
98
|
+
"",
|
|
99
|
+
"Service Provider is not responsible for:",
|
|
100
|
+
"• Third party service downtime",
|
|
101
|
+
"• Brand redemption policy changes",
|
|
102
|
+
"• Voucher usage restrictions imposed by brands",
|
|
103
|
+
"",
|
|
104
|
+
"11. Intellectual Property",
|
|
105
|
+
"",
|
|
106
|
+
"All SDK components including:",
|
|
107
|
+
"• APIs",
|
|
108
|
+
"• Redemption catalog structure",
|
|
109
|
+
"• Technology architecture",
|
|
110
|
+
"• Documentation",
|
|
111
|
+
"",
|
|
112
|
+
"are intellectual property of the Service Provider.",
|
|
113
|
+
"",
|
|
114
|
+
"Host Application or Users may not copy, modify, or redistribute SDK components.",
|
|
115
|
+
"",
|
|
116
|
+
"12. Limitation of Liability",
|
|
117
|
+
"",
|
|
118
|
+
"To the maximum extent permitted under Indian law:",
|
|
119
|
+
"",
|
|
120
|
+
"Service Provider shall not be liable for:",
|
|
121
|
+
"• Indirect or consequential damages",
|
|
122
|
+
"• Loss of opportunity or business",
|
|
123
|
+
"• Brand partner service failures",
|
|
124
|
+
"• User device compatibility issues",
|
|
125
|
+
"• Network or telecom failures",
|
|
126
|
+
"",
|
|
127
|
+
"Total liability shall not exceed value of disputed redemption transaction.",
|
|
128
|
+
"",
|
|
129
|
+
"13. Service Availability",
|
|
130
|
+
"",
|
|
131
|
+
"While high uptime is targeted, service may be unavailable due to:",
|
|
132
|
+
"• Scheduled maintenance",
|
|
133
|
+
"• Force majeure events",
|
|
134
|
+
"• Third party outages",
|
|
135
|
+
"• Regulatory requirements",
|
|
136
|
+
"",
|
|
137
|
+
"14. Suspension or Termination",
|
|
138
|
+
"",
|
|
139
|
+
"Access may be suspended if:",
|
|
140
|
+
"• Fraud suspected",
|
|
141
|
+
"• Terms violation",
|
|
142
|
+
"• NSL program termination",
|
|
143
|
+
"• Regulatory or legal orders",
|
|
144
|
+
"",
|
|
145
|
+
"15. Changes to Terms",
|
|
146
|
+
"",
|
|
147
|
+
"Terms may be updated periodically.",
|
|
148
|
+
"",
|
|
149
|
+
"Updates will be communicated via:",
|
|
150
|
+
"• App notifications",
|
|
151
|
+
"• Email",
|
|
152
|
+
"• In-app banners",
|
|
153
|
+
"",
|
|
154
|
+
"Continued usage implies acceptance.",
|
|
155
|
+
"",
|
|
156
|
+
"16. Contact and Support",
|
|
157
|
+
"",
|
|
158
|
+
"Support Channels:",
|
|
159
|
+
"• Email: team@zaggle.in",
|
|
160
|
+
"• Call: 1860-500-3748 (Mon–Fri, 10 AM – 7 PM IST)",
|
|
161
|
+
"• WhatsApp: +91 83677 23456 (Mon–Fri, 10 AM – 7 PM IST)",
|
|
162
|
+
"",
|
|
163
|
+
"17. Disclaimer",
|
|
164
|
+
"",
|
|
165
|
+
"The SDK is provided on 'as-is' and 'as-available' basis without warranties of uninterrupted service or error-free performance."
|
|
166
|
+
];
|
|
167
|
+
|
|
168
|
+
export const TermsandConditions = "Terms and Conditions";
|
|
169
|
+
export const HARDWARE_BACK_PRESS = "hardwareBackPress";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, ScrollView } from 'react-native';
|
|
3
|
+
import styles from './styles';
|
|
4
|
+
import { RouteProp, useRoute } from '@react-navigation/native';
|
|
5
|
+
import { AppStackParamList } from '../../../src-app/types/navigation';
|
|
6
|
+
import { CustomImage } from '../../../src-app/components';
|
|
7
|
+
import Images from '../../../src-app/constants/Images';
|
|
8
|
+
import MobileHeader from '../../../src-app/components/MobileHeader';
|
|
9
|
+
import { handleCustomGoBack } from '../../../src-app/utils/navigationUtils';
|
|
10
|
+
import { ROUTES } from '../../../src-app/constants/Routes';
|
|
11
|
+
import { useHardwareBack } from '../../../src-app/utils/useHardwareBack';
|
|
12
|
+
import { TermsandConditions, termsList } from './TnC.constants';
|
|
13
|
+
|
|
14
|
+
interface TnCProps {
|
|
15
|
+
navigation?: any;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type TnCRouteProp = RouteProp<AppStackParamList, 'TnC'>;
|
|
19
|
+
|
|
20
|
+
const TnC: React.FC<TnCProps> = ({ navigation }) => {
|
|
21
|
+
const route = useRoute<TnCRouteProp>();
|
|
22
|
+
|
|
23
|
+
const handleGoBack = () =>
|
|
24
|
+
handleCustomGoBack(navigation, route, {
|
|
25
|
+
map: {
|
|
26
|
+
[ROUTES.TnC]: ROUTES.PROFILE,
|
|
27
|
+
[ROUTES.PROFILE]: ROUTES.DASHBOARD,
|
|
28
|
+
},
|
|
29
|
+
fallback: ROUTES.DASHBOARD,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
useHardwareBack(handleGoBack)
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<View style={styles.container}>
|
|
36
|
+
<MobileHeader
|
|
37
|
+
title={TermsandConditions}
|
|
38
|
+
showBack
|
|
39
|
+
onBack={handleGoBack}
|
|
40
|
+
disableSafeAreaPadding={true}
|
|
41
|
+
/>
|
|
42
|
+
<View style={styles.content}>
|
|
43
|
+
<View style={styles.contentContainer}>
|
|
44
|
+
<ScrollView
|
|
45
|
+
style={styles.scrollContainer}
|
|
46
|
+
showsVerticalScrollIndicator={false}
|
|
47
|
+
>
|
|
48
|
+
{termsList.map((item, index) => {
|
|
49
|
+
if (!item.trim()) {
|
|
50
|
+
return <View key={index} style={{ height: 6 }} />;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const isBullet = item.trim().startsWith('•');
|
|
54
|
+
const text = isBullet ? item.replace(/^•\s*/, '') : item;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<View
|
|
58
|
+
key={index}
|
|
59
|
+
style={isBullet ? styles.bulletRow : styles.normalRow}
|
|
60
|
+
>
|
|
61
|
+
{isBullet && (
|
|
62
|
+
<Text style={styles.bulletSymbol}>•</Text>
|
|
63
|
+
)}
|
|
64
|
+
<Text
|
|
65
|
+
style={[
|
|
66
|
+
styles.termsText,
|
|
67
|
+
!isBullet && styles.normalText,
|
|
68
|
+
]}
|
|
69
|
+
>
|
|
70
|
+
{text}
|
|
71
|
+
</Text>
|
|
72
|
+
</View>
|
|
73
|
+
);
|
|
74
|
+
})}
|
|
75
|
+
|
|
76
|
+
</ScrollView>
|
|
77
|
+
</View>
|
|
78
|
+
</View>
|
|
79
|
+
</View>
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export default TnC;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import FontFamily from '../../../src-app/constants/Fonts';
|
|
3
|
+
import { colors } from '../../../src-app/styles/colors';
|
|
4
|
+
|
|
5
|
+
const styles = StyleSheet.create({
|
|
6
|
+
container: {
|
|
7
|
+
flex: 1,
|
|
8
|
+
backgroundColor: colors.background,
|
|
9
|
+
},
|
|
10
|
+
header: {
|
|
11
|
+
height: 110,
|
|
12
|
+
backgroundColor: colors.background,
|
|
13
|
+
flexDirection: 'row',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
paddingHorizontal: 20,
|
|
16
|
+
paddingBottom: 16,
|
|
17
|
+
},
|
|
18
|
+
backButton: {
|
|
19
|
+
padding: 8,
|
|
20
|
+
marginRight: 8,
|
|
21
|
+
},
|
|
22
|
+
headerTitle: {
|
|
23
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
24
|
+
fontSize: 18,
|
|
25
|
+
fontWeight: '400',
|
|
26
|
+
color: colors.black,
|
|
27
|
+
flex: 1,
|
|
28
|
+
textAlign: 'center',
|
|
29
|
+
marginRight: 32,
|
|
30
|
+
},
|
|
31
|
+
content: {
|
|
32
|
+
flex: 1,
|
|
33
|
+
paddingBottom: 32,
|
|
34
|
+
padding: 20,
|
|
35
|
+
},
|
|
36
|
+
contentContainer: {
|
|
37
|
+
flex: 1,
|
|
38
|
+
borderRadius: 12,
|
|
39
|
+
borderWidth: 1,
|
|
40
|
+
borderColor: colors.variantBorder,
|
|
41
|
+
backgroundColor: colors.background,
|
|
42
|
+
paddingTop: 16,
|
|
43
|
+
paddingHorizontal: 12,
|
|
44
|
+
paddingBottom: 12,
|
|
45
|
+
},
|
|
46
|
+
logo: {
|
|
47
|
+
width: 140,
|
|
48
|
+
height: 42,
|
|
49
|
+
alignSelf: 'center',
|
|
50
|
+
marginBottom: 24,
|
|
51
|
+
resizeMode: 'contain',
|
|
52
|
+
},
|
|
53
|
+
scrollContainer: {
|
|
54
|
+
flex: 1,
|
|
55
|
+
},
|
|
56
|
+
bulletRow: {
|
|
57
|
+
flexDirection: 'row',
|
|
58
|
+
alignItems:'flex-start',
|
|
59
|
+
marginTop: 3,
|
|
60
|
+
},
|
|
61
|
+
bulletSymbol: {
|
|
62
|
+
fontSize: 16,
|
|
63
|
+
lineHeight: 18,
|
|
64
|
+
marginRight: 6,
|
|
65
|
+
color: colors.onSurfaceVariant,
|
|
66
|
+
includeFontPadding: false,
|
|
67
|
+
textAlignVertical: 'center',
|
|
68
|
+
},
|
|
69
|
+
termsText: {
|
|
70
|
+
flex: 1,
|
|
71
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
72
|
+
fontSize: 12,
|
|
73
|
+
fontWeight: '400',
|
|
74
|
+
color: colors.onSurfaceVariant,
|
|
75
|
+
lineHeight: 18,
|
|
76
|
+
paddingRight:4,
|
|
77
|
+
marginBottom: 5,
|
|
78
|
+
},
|
|
79
|
+
normalRow: {
|
|
80
|
+
marginTop: 6,
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
normalText: {
|
|
84
|
+
marginLeft: 0,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
export default styles;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text } from 'react-native';
|
|
3
|
+
import { StackNavigationProp } from '@react-navigation/stack';
|
|
4
|
+
import { RouteProp } from '@react-navigation/native';
|
|
5
|
+
import { AppStackParamList } from '../../../src-app/types/navigation';
|
|
6
|
+
import MobileHeader from '../../../src-app/components/MobileHeader';
|
|
7
|
+
import styles from './styles';
|
|
8
|
+
import { CustomButton, CustomImage } from '../../../src-app/components';
|
|
9
|
+
import Images from '../../../src-app/constants/Images';
|
|
10
|
+
import { useRoute, CommonActions } from '@react-navigation/native';
|
|
11
|
+
import { useAppDispatch } from '../../../src-app/hooks/useAppDispatch';
|
|
12
|
+
import { dashboardInfoRequest } from '../../../src-app/redux/authSlice';
|
|
13
|
+
|
|
14
|
+
type TransactionSuccessfulNavigationProp = StackNavigationProp<
|
|
15
|
+
AppStackParamList,
|
|
16
|
+
'TransactionSuccessful'
|
|
17
|
+
>;
|
|
18
|
+
|
|
19
|
+
type TransactionSuccessfulRouteProp = RouteProp<
|
|
20
|
+
AppStackParamList,
|
|
21
|
+
'TransactionSuccessful'
|
|
22
|
+
>;
|
|
23
|
+
|
|
24
|
+
interface Props {
|
|
25
|
+
navigation: TransactionSuccessfulNavigationProp;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const TransactionSuccessful: React.FC<Props> = ({ navigation }) => {
|
|
29
|
+
const route = useRoute<TransactionSuccessfulRouteProp>();
|
|
30
|
+
const dispatch = useAppDispatch();
|
|
31
|
+
const item = route.params?.item;
|
|
32
|
+
const points = item || 0;
|
|
33
|
+
|
|
34
|
+
const handleDone = () => {
|
|
35
|
+
dispatch(dashboardInfoRequest({}));
|
|
36
|
+
navigation.dispatch(
|
|
37
|
+
CommonActions.reset({
|
|
38
|
+
index: 0,
|
|
39
|
+
routes: [
|
|
40
|
+
{
|
|
41
|
+
name: 'DashboardTab',
|
|
42
|
+
state: {
|
|
43
|
+
routes: [{ name: 'Dashboard' }],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
})
|
|
48
|
+
);
|
|
49
|
+
console.log("inside function");
|
|
50
|
+
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<View style={styles.container}>
|
|
55
|
+
<MobileHeader />
|
|
56
|
+
|
|
57
|
+
<View style={styles.backgroundContainer}>
|
|
58
|
+
<View style={styles.gradientOverlay} />
|
|
59
|
+
|
|
60
|
+
<View style={styles.contentContainer}>
|
|
61
|
+
<CustomImage source={Images.successTick} imgStyle={styles.icon} />
|
|
62
|
+
|
|
63
|
+
<Text style={styles.title}>{points} Points</Text>
|
|
64
|
+
<Text style={styles.subtitle}>Transaction Successful</Text>
|
|
65
|
+
</View>
|
|
66
|
+
<CustomButton
|
|
67
|
+
title="Done"
|
|
68
|
+
onPress={handleDone}
|
|
69
|
+
disabled={false}
|
|
70
|
+
customButtonContainerStyle={styles.customButtonContainer}
|
|
71
|
+
/>
|
|
72
|
+
</View>
|
|
73
|
+
</View>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export default TransactionSuccessful;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { spacing, typography } from '../../../src-app/styles/shared';
|
|
3
|
+
import FontFamily from '../../../src-app/constants/Fonts';
|
|
4
|
+
import { colors } from '../../../src-app/styles/colors';
|
|
5
|
+
|
|
6
|
+
const styles = StyleSheet.create({
|
|
7
|
+
container: {
|
|
8
|
+
flex: 1,
|
|
9
|
+
backgroundColor: colors.background,
|
|
10
|
+
},
|
|
11
|
+
backgroundContainer: {
|
|
12
|
+
flex: 1,
|
|
13
|
+
position: 'relative',
|
|
14
|
+
backgroundColor: colors.background,
|
|
15
|
+
},
|
|
16
|
+
gradientOverlay: {
|
|
17
|
+
position: 'absolute',
|
|
18
|
+
top: 0,
|
|
19
|
+
left: 0,
|
|
20
|
+
right: 0,
|
|
21
|
+
bottom: 0,
|
|
22
|
+
backgroundColor: 'rgba(255, 255, 255, 0.9)',
|
|
23
|
+
},
|
|
24
|
+
contentContainer: {
|
|
25
|
+
flex: 1,
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
paddingHorizontal: spacing.xl,
|
|
29
|
+
},
|
|
30
|
+
successIcon: {
|
|
31
|
+
marginBottom: spacing.xl,
|
|
32
|
+
backgroundColor: 'white',
|
|
33
|
+
borderRadius: 50,
|
|
34
|
+
padding: spacing.sm,
|
|
35
|
+
elevation: 4,
|
|
36
|
+
shadowColor: colors.shadow,
|
|
37
|
+
shadowOffset: {
|
|
38
|
+
width: 0,
|
|
39
|
+
height: 2,
|
|
40
|
+
},
|
|
41
|
+
shadowOpacity: 0.1,
|
|
42
|
+
shadowRadius: 8,
|
|
43
|
+
},
|
|
44
|
+
title: {
|
|
45
|
+
...typography.h1,
|
|
46
|
+
color: colors.onSurface,
|
|
47
|
+
textAlign: 'center',
|
|
48
|
+
marginBottom: spacing.md,
|
|
49
|
+
fontWeight: '600',
|
|
50
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
51
|
+
},
|
|
52
|
+
subtitle: {
|
|
53
|
+
...typography.caption,
|
|
54
|
+
color: colors.success,
|
|
55
|
+
textAlign: 'center',
|
|
56
|
+
fontWeight: '500',
|
|
57
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
58
|
+
},
|
|
59
|
+
bottomBlur: {
|
|
60
|
+
position: 'absolute',
|
|
61
|
+
bottom: 0,
|
|
62
|
+
left: 0,
|
|
63
|
+
right: 0,
|
|
64
|
+
height: 200,
|
|
65
|
+
backgroundColor: 'rgba(244, 244, 244, 0.6)',
|
|
66
|
+
},
|
|
67
|
+
icon: {
|
|
68
|
+
height: 99,
|
|
69
|
+
width: 99,
|
|
70
|
+
resizeMode: 'contain',
|
|
71
|
+
},
|
|
72
|
+
customButtonContainer: {
|
|
73
|
+
paddingHorizontal: 20,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export default styles;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { View, Text } from 'react-native';
|
|
3
|
+
import { StackNavigationProp } from '@react-navigation/stack';
|
|
4
|
+
import { RootStackParamList } from '../../../src-app/types/navigation';
|
|
5
|
+
import MobileHeader from '../../../src-app/components/MobileHeader';
|
|
6
|
+
import Icon from '../../../src-app/components/Icon';
|
|
7
|
+
import styles from './styles';
|
|
8
|
+
import { CustomImage } from '../../../src-app/components';
|
|
9
|
+
import Images from '../../../src-app/constants/Images';
|
|
10
|
+
import { CommonActions } from '@react-navigation/native';
|
|
11
|
+
|
|
12
|
+
type VerificationNavigationProp = StackNavigationProp<
|
|
13
|
+
RootStackParamList,
|
|
14
|
+
'VerificationComplete'
|
|
15
|
+
>;
|
|
16
|
+
|
|
17
|
+
interface Props {
|
|
18
|
+
navigation: VerificationNavigationProp;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const Verification: React.FC<Props> = ({ navigation }) => {
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
// Auto redirect to dashboard after 3 seconds
|
|
24
|
+
const timer = setTimeout(() => {
|
|
25
|
+
navigation.dispatch(
|
|
26
|
+
CommonActions.reset({
|
|
27
|
+
index: 0,
|
|
28
|
+
routes: [{ name: 'MainTabs' }],
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
}, 3000);
|
|
32
|
+
|
|
33
|
+
return () => clearTimeout(timer);
|
|
34
|
+
}, [navigation]);
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<View style={styles.container}>
|
|
38
|
+
<MobileHeader />
|
|
39
|
+
|
|
40
|
+
{/* Background with gradient overlay */}
|
|
41
|
+
<View style={styles.backgroundContainer}>
|
|
42
|
+
<View style={styles.gradientOverlay} />
|
|
43
|
+
|
|
44
|
+
{/* Success content */}
|
|
45
|
+
<View style={styles.contentContainer}>
|
|
46
|
+
{/* Success icon */}
|
|
47
|
+
<CustomImage source={Images.successTick} imgStyle={styles.icon} />
|
|
48
|
+
|
|
49
|
+
{/* Success message */}
|
|
50
|
+
<Text style={styles.title}>Verification completed</Text>
|
|
51
|
+
<Text style={styles.subtitle}>You are all set, ready to go!</Text>
|
|
52
|
+
</View>
|
|
53
|
+
</View>
|
|
54
|
+
</View>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default Verification;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { spacing, typography } from '../../../src-app/styles/shared';
|
|
3
|
+
import FontFamily from '../../../src-app/constants/Fonts';
|
|
4
|
+
import { colors } from '../../../src-app/styles/colors';
|
|
5
|
+
|
|
6
|
+
const styles = StyleSheet.create({
|
|
7
|
+
container: {
|
|
8
|
+
flex: 1,
|
|
9
|
+
backgroundColor: colors.background,
|
|
10
|
+
},
|
|
11
|
+
backgroundContainer: {
|
|
12
|
+
flex: 1,
|
|
13
|
+
position: 'relative',
|
|
14
|
+
backgroundColor: colors.background,
|
|
15
|
+
},
|
|
16
|
+
gradientOverlay: {
|
|
17
|
+
position: 'absolute',
|
|
18
|
+
top: 0,
|
|
19
|
+
left: 0,
|
|
20
|
+
right: 0,
|
|
21
|
+
bottom: 0,
|
|
22
|
+
backgroundColor: 'rgba(255, 255, 255, 0.9)',
|
|
23
|
+
},
|
|
24
|
+
contentContainer: {
|
|
25
|
+
flex: 1,
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
paddingHorizontal: spacing.xl,
|
|
29
|
+
},
|
|
30
|
+
successIcon: {
|
|
31
|
+
marginBottom: spacing.xl,
|
|
32
|
+
backgroundColor: 'white',
|
|
33
|
+
borderRadius: 50,
|
|
34
|
+
padding: spacing.sm,
|
|
35
|
+
elevation: 4,
|
|
36
|
+
shadowColor: colors.shadow,
|
|
37
|
+
shadowOffset: {
|
|
38
|
+
width: 0,
|
|
39
|
+
height: 2,
|
|
40
|
+
},
|
|
41
|
+
shadowOpacity: 0.1,
|
|
42
|
+
shadowRadius: 8,
|
|
43
|
+
},
|
|
44
|
+
title: {
|
|
45
|
+
...typography.h1,
|
|
46
|
+
color: colors.onSurface,
|
|
47
|
+
textAlign: 'center',
|
|
48
|
+
marginBottom: spacing.md,
|
|
49
|
+
fontWeight: '600',
|
|
50
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
51
|
+
},
|
|
52
|
+
subtitle: {
|
|
53
|
+
...typography.caption,
|
|
54
|
+
color: colors.success,
|
|
55
|
+
textAlign: 'center',
|
|
56
|
+
fontWeight: '500',
|
|
57
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
58
|
+
},
|
|
59
|
+
bottomBlur: {
|
|
60
|
+
position: 'absolute',
|
|
61
|
+
bottom: 0,
|
|
62
|
+
left: 0,
|
|
63
|
+
right: 0,
|
|
64
|
+
height: 200,
|
|
65
|
+
backgroundColor: 'rgba(244, 244, 244, 0.6)',
|
|
66
|
+
},
|
|
67
|
+
icon:{
|
|
68
|
+
height:99,
|
|
69
|
+
width:99,
|
|
70
|
+
resizeMode:'contain'
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export default styles;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { default as ProductDetail } from './ProductDetails';
|
|
2
|
+
export { default as Profile } from './Profile';
|
|
3
|
+
export { default as RedemptionHistory } from './RedemptionHistory';
|
|
4
|
+
export { default as Redeem } from './Reedem';
|
|
5
|
+
export { default as TnC } from './TnC';
|
|
6
|
+
export { default as Verification } from './Verification';
|
|
7
|
+
export { default as Login } from './Login';
|
|
8
|
+
export { default as Dashboard } from './Dashboard';
|
|
9
|
+
export { default as FAQ } from './Faq';
|
|
10
|
+
export { default as Help } from './Help';
|
|
11
|
+
export { default as MyOrders } from './MyOrders';
|
|
12
|
+
export { default as Onboarding } from './Onboarding';
|
|
13
|
+
export { default as OrdersDetails } from './OrdersDetails';
|
|
14
|
+
export { default as OTPVerification } from './OtpVerification';
|
|
15
|
+
export { default as PointsLog } from './PointsLog';
|
|
16
|
+
export { default as MyProfile } from './MyProfile';
|
|
17
|
+
export { default as MyEVouchers } from './E-Vouchers';
|
|
18
|
+
export { default as MyCart } from './MyCart';
|
|
19
|
+
export { default as DeliveryAddress } from './DeliveryAddress';
|
|
20
|
+
export { default as NewDeliveryAddress } from './NewDeliveryAddress';
|
|
21
|
+
export { default as PaymentMethod } from './PaymentMethod';
|
|
22
|
+
export { default as TransactionSuccessful } from './TransactionSuccessful';
|
|
23
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface SDKParams {
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
userId?: string;
|
|
9
|
+
userToken?: string;
|
|
10
|
+
authToken?: string;
|
|
11
|
+
authId?: string;
|
|
12
|
+
userName?: string;
|
|
13
|
+
userMobile?: string;
|
|
14
|
+
userEmail?: string;
|
|
15
|
+
deviceId?: string;
|
|
16
|
+
clientName?: string;
|
|
17
|
+
clientVersion?: string;
|
|
18
|
+
theme?: SDKTheme;
|
|
19
|
+
environment?: 'development' | 'staging' | 'production';
|
|
20
|
+
[key: string]: any; // Allow additional custom params
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SDKTheme {
|
|
24
|
+
primaryColor?: string;
|
|
25
|
+
secondaryColor?: string;
|
|
26
|
+
backgroundColor?: string;
|
|
27
|
+
textColor?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface SDKResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
data?: any;
|
|
33
|
+
message?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface SDKError {
|
|
37
|
+
code: string;
|
|
38
|
+
message: string;
|
|
39
|
+
details?: any;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface SDKEvent {
|
|
43
|
+
type: string;
|
|
44
|
+
payload?: any;
|
|
45
|
+
}
|
|
46
|
+
|