@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,164 @@
|
|
|
1
|
+
export interface FAQItem {
|
|
2
|
+
id: number;
|
|
3
|
+
question: string;
|
|
4
|
+
answer: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const faqData: FAQItem[] = [
|
|
8
|
+
// Q1. What are NSL Points?
|
|
9
|
+
{
|
|
10
|
+
id: 1,
|
|
11
|
+
question: "What are NSL Points?",
|
|
12
|
+
answer: "NSL Points are digital reward points you earn as part of your organization's rewards and recognition program. These can be redeemed on the Propel platform for a wide range of brand vouchers and products.",
|
|
13
|
+
},
|
|
14
|
+
// Q2. Do NSL Points expire?
|
|
15
|
+
{
|
|
16
|
+
id: 2,
|
|
17
|
+
question: "Do NSL Points expire?",
|
|
18
|
+
answer: "Yes. NSL Points are typically valid for 1 year from the date of credit, unless specified differently by your organization.",
|
|
19
|
+
},
|
|
20
|
+
// Q3. I haven't received the points I expected. What should I do?
|
|
21
|
+
{
|
|
22
|
+
id: 3,
|
|
23
|
+
question: "I haven't received the points I expected. What should I do?",
|
|
24
|
+
answer: "Please contact your Program Administrator or raise a support ticket through your dashboard to get this resolved.",
|
|
25
|
+
},
|
|
26
|
+
// Q4. Can I transfer or gift my NSL Points to another user?
|
|
27
|
+
{
|
|
28
|
+
id: 4,
|
|
29
|
+
question: "Can I transfer or gift my NSL Points to another user?",
|
|
30
|
+
answer: "No. NSL Points are non-transferable and can be used only by the account holder to whom they are credited.",
|
|
31
|
+
},
|
|
32
|
+
// Q5. Can I convert NSL Points to cash?
|
|
33
|
+
{
|
|
34
|
+
id: 5,
|
|
35
|
+
question: "Can I convert NSL Points to cash?",
|
|
36
|
+
answer: "No. NSL Points cannot be encashed and are valid only for redemption on the platform.",
|
|
37
|
+
},
|
|
38
|
+
// Q6. How do I redeem my NSL Points?
|
|
39
|
+
{
|
|
40
|
+
id: 6,
|
|
41
|
+
question: "How do I redeem my NSL Points?",
|
|
42
|
+
answer: "1. Open the NSL Gold Club App and go to 'Redeem'\n2. Browse the available categories (e.g., E-Gift Vouchers)\n3. Select the item, enter quantity, and provide shipping details (if needed)\n4. Select NSL Points as payment method\n5. Confirm your order",
|
|
43
|
+
},
|
|
44
|
+
// Q7. What are the available redemption options?
|
|
45
|
+
{
|
|
46
|
+
id: 7,
|
|
47
|
+
question: "What are the available redemption options?",
|
|
48
|
+
answer: "You can redeem NSL Points for:\n• E-Gift Vouchers from brands like Amazon, Myntra, Flipkart, etc.",
|
|
49
|
+
},
|
|
50
|
+
// Q8. Can I make part-payment using both NSL Points and another payment method?
|
|
51
|
+
{
|
|
52
|
+
id: 8,
|
|
53
|
+
question: "Can I make part-payment using both NSL Points and another payment method?",
|
|
54
|
+
answer: "No. Orders must be paid entirely using NSL Points. Combining with other payment methods like UPI, Netbanking, or Cards is not supported.",
|
|
55
|
+
},
|
|
56
|
+
// Q9. Can my organization restrict certain brands from redemption?
|
|
57
|
+
{
|
|
58
|
+
id: 9,
|
|
59
|
+
question: "Can my organization restrict certain brands from redemption?",
|
|
60
|
+
answer: "Yes. Your organization may choose to restrict or promote specific categories or brands. Only approved items will be visible to you.",
|
|
61
|
+
},
|
|
62
|
+
// Q10. Can I cancel my order after placing it?
|
|
63
|
+
{
|
|
64
|
+
id: 10,
|
|
65
|
+
question: "Can I cancel my order after placing it?",
|
|
66
|
+
answer: "Orders can be cancelled only if they are still in 'Pending' status. Once processed or completed, orders cannot be cancelled.",
|
|
67
|
+
},
|
|
68
|
+
// Q11. I redeemed points for the wrong product. Can I change it?
|
|
69
|
+
{
|
|
70
|
+
id: 11,
|
|
71
|
+
question: "I redeemed points for the wrong product. Can I change it?",
|
|
72
|
+
answer: "No. Once an order is confirmed, it cannot be modified or exchanged. Please review your order carefully before confirming.",
|
|
73
|
+
},
|
|
74
|
+
// Q12. I redeemed for an e-voucher but haven't received it yet. What should I do?
|
|
75
|
+
{
|
|
76
|
+
id: 12,
|
|
77
|
+
question: "I redeemed for an e-voucher but haven't received it yet. What should I do?",
|
|
78
|
+
answer: "E-vouchers are usually delivered within minutes to your registered email and also appear in 'My Orders'. If not received within 24 hours, contact support.",
|
|
79
|
+
},
|
|
80
|
+
// Q13. I applied a voucher code but it didn't work. What should I do?
|
|
81
|
+
{
|
|
82
|
+
id: 13,
|
|
83
|
+
question: "I applied a voucher code but it didn't work. What should I do?",
|
|
84
|
+
answer: "1. Check the expiry date and applicable platform/category\n2. If the issue persists, contact support via email/call/WhatsApp",
|
|
85
|
+
},
|
|
86
|
+
// Q14. What is the refund policy for cancelled orders?
|
|
87
|
+
{
|
|
88
|
+
id: 14,
|
|
89
|
+
question: "What is the refund policy for cancelled orders?",
|
|
90
|
+
answer: "If your cancellation request is accepted, the redeemed NSL Points will be refunded back to your account.",
|
|
91
|
+
},
|
|
92
|
+
// Q15. How can I track my order status?
|
|
93
|
+
{
|
|
94
|
+
id: 15,
|
|
95
|
+
question: "How can I track my order status?",
|
|
96
|
+
answer: "Go to 'My Orders' in the NSL Gold Club App to view live order status, voucher codes, and download options.",
|
|
97
|
+
},
|
|
98
|
+
// Q16. Can I see the full history of my past redemptions?
|
|
99
|
+
{
|
|
100
|
+
id: 16,
|
|
101
|
+
question: "Can I see the full history of my past redemptions?",
|
|
102
|
+
answer: "Yes. Your complete redemption history, including order details and status, is available under 'My Orders'.",
|
|
103
|
+
},
|
|
104
|
+
// Q17. Will I get a GST invoice or tax receipt for my redemption?
|
|
105
|
+
{
|
|
106
|
+
id: 17,
|
|
107
|
+
question: "Will I get a GST invoice or tax receipt for my redemption?",
|
|
108
|
+
answer: "No. GST invoices are not issued for point-based redemptions.",
|
|
109
|
+
},
|
|
110
|
+
// Q18. I can't log in to my account. What should I do?
|
|
111
|
+
{
|
|
112
|
+
id: 18,
|
|
113
|
+
question: "I can't log in to my account. What should I do?",
|
|
114
|
+
answer: "Make sure you're using the correct mobile number registered with your organization. If the issue persists, contact support.",
|
|
115
|
+
},
|
|
116
|
+
// Q19. How can I update my mobile number or email ID?
|
|
117
|
+
{
|
|
118
|
+
id: 19,
|
|
119
|
+
question: "How can I update my mobile number or email ID?",
|
|
120
|
+
answer: "Please reach out to your NSL Program Administrator or contact our support team to update your contact details.",
|
|
121
|
+
},
|
|
122
|
+
// Q20. Can I delete my account or data from the system?
|
|
123
|
+
{
|
|
124
|
+
id: 20,
|
|
125
|
+
question: "Can I delete my account or data from the system?",
|
|
126
|
+
answer: "Yes, but only through your organization's administrator. Please raise a request with them.",
|
|
127
|
+
},
|
|
128
|
+
// Q21. Are my personal details secure on the platform?
|
|
129
|
+
{
|
|
130
|
+
id: 21,
|
|
131
|
+
question: "Are my personal details secure on the platform?",
|
|
132
|
+
answer: "Yes. Your data is protected with enterprise-grade security protocols and is used only for program-related activities.",
|
|
133
|
+
},
|
|
134
|
+
// Q22. Can I have multiple accounts on the platform?
|
|
135
|
+
{
|
|
136
|
+
id: 22,
|
|
137
|
+
question: "Can I have multiple accounts on the platform?",
|
|
138
|
+
answer: "No. Each user can have only one registered account linked to their organization profile.",
|
|
139
|
+
},
|
|
140
|
+
// Q23. How can I contact Propel Support?
|
|
141
|
+
{
|
|
142
|
+
id: 23,
|
|
143
|
+
question: "How can I contact Propel Support?",
|
|
144
|
+
answer: "Email: team@zaggle.in\nCall: 1860-500-3748 (Mon–Fri, 10 AM–7 PM)\nWhatsApp: +91 83677 23456 (Mon–Fri, 10 AM–7 PM)",
|
|
145
|
+
},
|
|
146
|
+
// Q24. What information should I share when contacting support?
|
|
147
|
+
{
|
|
148
|
+
id: 24,
|
|
149
|
+
question: "What information should I share when contacting support?",
|
|
150
|
+
answer: "Please include:\n• Your registered mobile number\n• Order ID (if related to a redemption)\n• Description or screenshot of the issue",
|
|
151
|
+
},
|
|
152
|
+
// Q25. Where can I find announcements or policy updates related to NSL Points?
|
|
153
|
+
{
|
|
154
|
+
id: 25,
|
|
155
|
+
question: "Where can I find announcements or policy updates related to NSL Points?",
|
|
156
|
+
answer: "All important updates are shared via email, app notifications, or through your organization's internal communication.",
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
export const HARDWARE_BACK_PRESS = "hardwareBackPress";
|
|
161
|
+
|
|
162
|
+
export const FAQS = "FAQ's"
|
|
163
|
+
|
|
164
|
+
export const All_FAQs = "All FAQ's"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import React, {useState } from "react";
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Text,
|
|
5
|
+
ScrollView,
|
|
6
|
+
TouchableOpacity,
|
|
7
|
+
} from "react-native";
|
|
8
|
+
import styles from "./styles";
|
|
9
|
+
import { CustomImage } from "../../../src-app/components";
|
|
10
|
+
import Images from "../../../src-app/constants/Images";
|
|
11
|
+
import MobileHeader from "../../../src-app/components/MobileHeader";
|
|
12
|
+
import { RouteProp, useRoute } from "@react-navigation/native";
|
|
13
|
+
import { AppStackParamList } from "../../../src-app/types/navigation";
|
|
14
|
+
import { All_FAQs, faqData, FAQS} from "./Faq.constants";
|
|
15
|
+
import { ROUTES } from "../../../src-app/constants/Routes";
|
|
16
|
+
import { handleCustomGoBack } from "../../../src-app/utils/navigationUtils";
|
|
17
|
+
import { useHardwareBack } from "../../../src-app/utils/useHardwareBack";
|
|
18
|
+
|
|
19
|
+
interface FAQProps {
|
|
20
|
+
navigation?: any;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type FAQRouteProp = RouteProp<AppStackParamList, "FAQ">;
|
|
24
|
+
|
|
25
|
+
const FAQ: React.FC<FAQProps> = ({ navigation }) => {
|
|
26
|
+
const route = useRoute<FAQRouteProp>();
|
|
27
|
+
const [expandedItems, setExpandedItems] = useState<number[]>([1]);
|
|
28
|
+
|
|
29
|
+
const toggleExpanded = (itemId: number) => {
|
|
30
|
+
setExpandedItems((prev) => {
|
|
31
|
+
if (prev.includes(itemId)) {
|
|
32
|
+
return prev.filter((id) => id !== itemId);
|
|
33
|
+
} else {
|
|
34
|
+
return [...prev, itemId];
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const handleGoBack = () =>
|
|
40
|
+
handleCustomGoBack(navigation, route, {
|
|
41
|
+
map: {
|
|
42
|
+
[ROUTES.FAQ]: ROUTES.PROFILE,
|
|
43
|
+
[ROUTES.PROFILE]: ROUTES.DASHBOARD,
|
|
44
|
+
},
|
|
45
|
+
fallback: ROUTES.DASHBOARD,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
useHardwareBack(handleGoBack)
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<View style={styles.container}>
|
|
52
|
+
<MobileHeader
|
|
53
|
+
title={FAQS}
|
|
54
|
+
showBack
|
|
55
|
+
onBack={() => handleGoBack()}
|
|
56
|
+
/>
|
|
57
|
+
|
|
58
|
+
<ScrollView style={styles.content} showsVerticalScrollIndicator={false}>
|
|
59
|
+
|
|
60
|
+
<Text style={styles.sectionTitle}>{All_FAQs}</Text>
|
|
61
|
+
|
|
62
|
+
<View style={styles.faqContainer}>
|
|
63
|
+
{faqData.map((item) => {
|
|
64
|
+
const isExpanded = expandedItems.includes(item?.id);
|
|
65
|
+
return (
|
|
66
|
+
<View key={item?.id} style={styles.faqItem}>
|
|
67
|
+
<TouchableOpacity
|
|
68
|
+
activeOpacity={0.7}
|
|
69
|
+
style={[
|
|
70
|
+
styles.faqHeader,
|
|
71
|
+
isExpanded && styles.expandedHeader,
|
|
72
|
+
]}
|
|
73
|
+
onPress={() => toggleExpanded(item?.id)}
|
|
74
|
+
>
|
|
75
|
+
<Text style={styles.faqQuestion}>{item?.question}</Text>
|
|
76
|
+
<View style={styles.iconContainer}>
|
|
77
|
+
{isExpanded ? (
|
|
78
|
+
<CustomImage
|
|
79
|
+
source={Images?.minusIcon}
|
|
80
|
+
imgStyle={styles.icon}
|
|
81
|
+
/>
|
|
82
|
+
) : (
|
|
83
|
+
<CustomImage
|
|
84
|
+
source={Images?.plusIcon}
|
|
85
|
+
imgStyle={styles.icon}
|
|
86
|
+
/>
|
|
87
|
+
)}
|
|
88
|
+
</View>
|
|
89
|
+
</TouchableOpacity>
|
|
90
|
+
|
|
91
|
+
{isExpanded && (
|
|
92
|
+
<View style={styles.faqAnswerContainer}>
|
|
93
|
+
<View style={styles.separator} />
|
|
94
|
+
<Text style={styles.faqAnswer}>{item?.answer}</Text>
|
|
95
|
+
</View>
|
|
96
|
+
)}
|
|
97
|
+
</View>
|
|
98
|
+
);
|
|
99
|
+
})}
|
|
100
|
+
</View>
|
|
101
|
+
|
|
102
|
+
<View style={styles.contactContainer}>
|
|
103
|
+
<Text style={styles.contactTitle}>FAQ'S</Text>
|
|
104
|
+
<Text style={styles.contactText}>
|
|
105
|
+
If your questions doesn't figure here, just ask us at
|
|
106
|
+
</Text>
|
|
107
|
+
<Text style={styles.contactEmail}>team@zaggle.in</Text>
|
|
108
|
+
</View>
|
|
109
|
+
</ScrollView>
|
|
110
|
+
</View>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export default FAQ;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import FontFamily from '../../../src-app/constants/Fonts';
|
|
3
|
+
|
|
4
|
+
const styles = StyleSheet.create({
|
|
5
|
+
container: {
|
|
6
|
+
flex: 1,
|
|
7
|
+
backgroundColor: '#FFFFFF',
|
|
8
|
+
},
|
|
9
|
+
header: {
|
|
10
|
+
height: 110,
|
|
11
|
+
backgroundColor: '#FFFFFF',
|
|
12
|
+
flexDirection: 'row',
|
|
13
|
+
alignItems: 'center',
|
|
14
|
+
paddingTop: 54,
|
|
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: '#1F2937',
|
|
27
|
+
flex: 1,
|
|
28
|
+
textAlign: 'center',
|
|
29
|
+
marginRight: 32,
|
|
30
|
+
},
|
|
31
|
+
content: {
|
|
32
|
+
flex: 1,
|
|
33
|
+
padding: 20,
|
|
34
|
+
},
|
|
35
|
+
sectionTitle: {
|
|
36
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
37
|
+
fontSize: 14,
|
|
38
|
+
fontWeight: '400',
|
|
39
|
+
color: '#1F2937',
|
|
40
|
+
marginBottom: 13,
|
|
41
|
+
},
|
|
42
|
+
faqContainer: {
|
|
43
|
+
gap: 14,
|
|
44
|
+
marginBottom: 100,
|
|
45
|
+
},
|
|
46
|
+
faqItem: {
|
|
47
|
+
borderRadius: 12,
|
|
48
|
+
borderWidth: 1,
|
|
49
|
+
borderColor: '#D1D5DB',
|
|
50
|
+
backgroundColor: '#FFFFFF',
|
|
51
|
+
overflow: 'hidden',
|
|
52
|
+
},
|
|
53
|
+
faqHeader: {
|
|
54
|
+
flexDirection: 'row',
|
|
55
|
+
justifyContent: 'space-between',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
paddingHorizontal: 12,
|
|
58
|
+
paddingVertical: 16,
|
|
59
|
+
minHeight: 50,
|
|
60
|
+
},
|
|
61
|
+
expandedHeader: {
|
|
62
|
+
paddingBottom: 0,
|
|
63
|
+
},
|
|
64
|
+
faqQuestion: {
|
|
65
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
66
|
+
fontSize: 14,
|
|
67
|
+
fontWeight: '400',
|
|
68
|
+
color: '#1F2937',
|
|
69
|
+
lineHeight: 18,
|
|
70
|
+
letterSpacing: -0.165,
|
|
71
|
+
flex: 1,
|
|
72
|
+
marginRight: 12,
|
|
73
|
+
},
|
|
74
|
+
iconContainer: {
|
|
75
|
+
width: 16,
|
|
76
|
+
height: 16,
|
|
77
|
+
justifyContent: 'center',
|
|
78
|
+
alignItems: 'center',
|
|
79
|
+
},
|
|
80
|
+
faqAnswerContainer: {
|
|
81
|
+
paddingHorizontal: 12,
|
|
82
|
+
paddingBottom: 16,
|
|
83
|
+
},
|
|
84
|
+
separator: {
|
|
85
|
+
height: 1,
|
|
86
|
+
backgroundColor: '#D1D5DB',
|
|
87
|
+
marginBottom: 12,
|
|
88
|
+
marginTop: 12,
|
|
89
|
+
},
|
|
90
|
+
faqAnswer: {
|
|
91
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
92
|
+
fontSize: 14,
|
|
93
|
+
fontWeight: '400',
|
|
94
|
+
color: '#6B7280',
|
|
95
|
+
lineHeight: 21,
|
|
96
|
+
letterSpacing: -0.165,
|
|
97
|
+
},
|
|
98
|
+
icon: {
|
|
99
|
+
height: 24,
|
|
100
|
+
width: 24,
|
|
101
|
+
},
|
|
102
|
+
contactContainer: {
|
|
103
|
+
alignItems: 'center',
|
|
104
|
+
marginTop: 20,
|
|
105
|
+
marginBottom: 40,
|
|
106
|
+
},
|
|
107
|
+
contactTitle: {
|
|
108
|
+
fontFamily: FontFamily.LEXEND_BOLD,
|
|
109
|
+
fontSize: 16,
|
|
110
|
+
fontWeight: '700',
|
|
111
|
+
color: '#1F2937',
|
|
112
|
+
marginBottom: 8,
|
|
113
|
+
},
|
|
114
|
+
contactText: {
|
|
115
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
116
|
+
fontSize: 14,
|
|
117
|
+
fontWeight: '400',
|
|
118
|
+
color: '#6B7280',
|
|
119
|
+
textAlign: 'center',
|
|
120
|
+
marginBottom: 4,
|
|
121
|
+
},
|
|
122
|
+
contactEmail: {
|
|
123
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
124
|
+
fontSize: 14,
|
|
125
|
+
fontWeight: '400',
|
|
126
|
+
color: '#3B82F6',
|
|
127
|
+
textAlign: 'center',
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
export default styles;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Text,
|
|
5
|
+
ScrollView,
|
|
6
|
+
TouchableOpacity,
|
|
7
|
+
Linking,
|
|
8
|
+
} from 'react-native';
|
|
9
|
+
import styles from './styles';
|
|
10
|
+
import { CustomImage } from '../../../src-app/components';
|
|
11
|
+
import Images from '../../../src-app/constants/Images';
|
|
12
|
+
import {
|
|
13
|
+
HELP_CENTER_TITLE,
|
|
14
|
+
HELP_CALL_TITLE,
|
|
15
|
+
HELP_CALL_SUBTITLE,
|
|
16
|
+
HELP_CHAT_TITLE,
|
|
17
|
+
HELP_CHAT_SUBTITLE,
|
|
18
|
+
HELP_MAIL_TITLE,
|
|
19
|
+
HELP_MAIL_SUBTITLE,
|
|
20
|
+
HELP_NOTE_TITLE,
|
|
21
|
+
HELP_NOTE_TEXT,
|
|
22
|
+
} from '../../../src-app/constants/Messages';
|
|
23
|
+
|
|
24
|
+
const Help: React.FC = () => {
|
|
25
|
+
const handleCallPress = () => {
|
|
26
|
+
Linking.openURL('tel:18605003748');
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const handleChatPress = () => {
|
|
30
|
+
Linking.openURL('https://wa.me/+918367723456');
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const handleMailPress = () => {
|
|
34
|
+
Linking.openURL('mailto:team@zaggle.in');
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<View style={styles.container}>
|
|
39
|
+
{/* Header */}
|
|
40
|
+
<View style={styles.header}>
|
|
41
|
+
<Text style={styles.headerTitle}>{HELP_CENTER_TITLE}</Text>
|
|
42
|
+
</View>
|
|
43
|
+
|
|
44
|
+
<ScrollView style={styles.content} showsVerticalScrollIndicator={false}>
|
|
45
|
+
{/* Contact Options */}
|
|
46
|
+
<View style={styles.contactSection}>
|
|
47
|
+
{/* Call Option */}
|
|
48
|
+
<TouchableOpacity
|
|
49
|
+
style={styles.contactItem}
|
|
50
|
+
onPress={handleCallPress}
|
|
51
|
+
>
|
|
52
|
+
<View style={styles.contactInfo}>
|
|
53
|
+
<CustomImage source={Images.call} imgStyle={styles.icon} />
|
|
54
|
+
|
|
55
|
+
<View style={styles.contactText}>
|
|
56
|
+
<Text style={styles.contactTitle}>{HELP_CALL_TITLE}</Text>
|
|
57
|
+
<Text style={styles.contactSubtitle}>
|
|
58
|
+
{HELP_CALL_SUBTITLE}
|
|
59
|
+
</Text>
|
|
60
|
+
</View>
|
|
61
|
+
</View>
|
|
62
|
+
<CustomImage
|
|
63
|
+
source={Images.arrowright}
|
|
64
|
+
imgStyle={styles.rightIcon}
|
|
65
|
+
/>
|
|
66
|
+
</TouchableOpacity>
|
|
67
|
+
|
|
68
|
+
<View style={styles.separator} />
|
|
69
|
+
|
|
70
|
+
{/* Chat Option */}
|
|
71
|
+
<TouchableOpacity
|
|
72
|
+
style={styles.contactItem}
|
|
73
|
+
onPress={handleChatPress}
|
|
74
|
+
>
|
|
75
|
+
<View style={styles.contactInfo}>
|
|
76
|
+
<CustomImage source={Images.chat} imgStyle={styles.icon} />
|
|
77
|
+
<View style={styles.contactText}>
|
|
78
|
+
<Text style={styles.contactTitle}>{HELP_CHAT_TITLE}</Text>
|
|
79
|
+
<Text style={styles.contactSubtitle}>
|
|
80
|
+
{HELP_CHAT_SUBTITLE}
|
|
81
|
+
</Text>
|
|
82
|
+
</View>
|
|
83
|
+
</View>
|
|
84
|
+
<CustomImage
|
|
85
|
+
source={Images.arrowright}
|
|
86
|
+
imgStyle={styles.rightIcon}
|
|
87
|
+
/>
|
|
88
|
+
</TouchableOpacity>
|
|
89
|
+
|
|
90
|
+
<View style={styles.separator} />
|
|
91
|
+
|
|
92
|
+
{/* Mail Option */}
|
|
93
|
+
<TouchableOpacity
|
|
94
|
+
style={styles.contactItem}
|
|
95
|
+
onPress={handleMailPress}
|
|
96
|
+
>
|
|
97
|
+
<View style={styles.contactInfo}>
|
|
98
|
+
<CustomImage source={Images.email} imgStyle={styles.icon} />
|
|
99
|
+
<View style={styles.contactText}>
|
|
100
|
+
<Text style={styles.contactTitle}>{HELP_MAIL_TITLE}</Text>
|
|
101
|
+
<Text style={styles.contactSubtitle}>
|
|
102
|
+
{HELP_MAIL_SUBTITLE}
|
|
103
|
+
</Text>
|
|
104
|
+
</View>
|
|
105
|
+
</View>
|
|
106
|
+
<CustomImage
|
|
107
|
+
source={Images.arrowright}
|
|
108
|
+
imgStyle={styles.rightIcon}
|
|
109
|
+
/>
|
|
110
|
+
</TouchableOpacity>
|
|
111
|
+
|
|
112
|
+
<View style={styles.separator} />
|
|
113
|
+
</View>
|
|
114
|
+
|
|
115
|
+
{/* Note Section */}
|
|
116
|
+
<View style={styles.noteSection}>
|
|
117
|
+
<Text style={styles.noteTitle}>{HELP_NOTE_TITLE}</Text>
|
|
118
|
+
<View style={styles.bulletRow}>
|
|
119
|
+
<Text style={styles.bulletSymbol}>•</Text>
|
|
120
|
+
<Text style={styles.noteText}>{HELP_NOTE_TEXT}</Text>
|
|
121
|
+
</View>
|
|
122
|
+
</View>
|
|
123
|
+
</ScrollView>
|
|
124
|
+
</View>
|
|
125
|
+
);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export default Help;
|
|
@@ -0,0 +1,121 @@
|
|
|
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: 118,
|
|
12
|
+
backgroundColor: colors.background,
|
|
13
|
+
justifyContent: 'flex-end',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
paddingBottom: 18,
|
|
16
|
+
paddingTop: 54,
|
|
17
|
+
},
|
|
18
|
+
headerTitle: {
|
|
19
|
+
fontFamily: FontFamily.LEXEND_SEMIBOLD,
|
|
20
|
+
fontSize: 18,
|
|
21
|
+
fontWeight: '600',
|
|
22
|
+
color: colors.timeText,
|
|
23
|
+
lineHeight: 28,
|
|
24
|
+
},
|
|
25
|
+
content: {
|
|
26
|
+
flex: 1,
|
|
27
|
+
paddingHorizontal: 32,
|
|
28
|
+
},
|
|
29
|
+
contactSection: {
|
|
30
|
+
marginTop: 12,
|
|
31
|
+
width: 329,
|
|
32
|
+
},
|
|
33
|
+
contactItem: {
|
|
34
|
+
flexDirection: 'row',
|
|
35
|
+
justifyContent: 'space-between',
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
paddingVertical: 16,
|
|
38
|
+
width:'100%'
|
|
39
|
+
},
|
|
40
|
+
contactInfo: {
|
|
41
|
+
flexDirection: 'row',
|
|
42
|
+
alignItems: 'center',
|
|
43
|
+
flex:1,
|
|
44
|
+
gap: 12,
|
|
45
|
+
},
|
|
46
|
+
contactText: {
|
|
47
|
+
flexDirection: 'column',
|
|
48
|
+
justifyContent: 'center',
|
|
49
|
+
alignItems: 'flex-start',
|
|
50
|
+
gap: 4,
|
|
51
|
+
},
|
|
52
|
+
contactTitle: {
|
|
53
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
54
|
+
fontSize: 14,
|
|
55
|
+
fontWeight: '400',
|
|
56
|
+
color: colors.pointsValue,
|
|
57
|
+
lineHeight: 14,
|
|
58
|
+
},
|
|
59
|
+
contactSubtitle: {
|
|
60
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
61
|
+
fontSize: 12,
|
|
62
|
+
fontWeight: '400',
|
|
63
|
+
color: colors.onSurfaceVariant,
|
|
64
|
+
lineHeight: 15,
|
|
65
|
+
},
|
|
66
|
+
separator: {
|
|
67
|
+
width: 329,
|
|
68
|
+
height: 1.2,
|
|
69
|
+
backgroundColor: colors.variantBackground,
|
|
70
|
+
},
|
|
71
|
+
noteSection: {
|
|
72
|
+
marginTop: 28,
|
|
73
|
+
marginHorizontal: -12,
|
|
74
|
+
padding: 16,
|
|
75
|
+
borderRadius: 12,
|
|
76
|
+
backgroundColor: colors.surfaceVariant,
|
|
77
|
+
gap: 8,
|
|
78
|
+
},
|
|
79
|
+
noteTitle: {
|
|
80
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
81
|
+
fontSize: 12,
|
|
82
|
+
fontWeight: '400',
|
|
83
|
+
color: colors.black,
|
|
84
|
+
lineHeight: 12,
|
|
85
|
+
},
|
|
86
|
+
bulletRow: {
|
|
87
|
+
flexDirection: 'row',
|
|
88
|
+
alignItems: 'flex-start',
|
|
89
|
+
marginTop: 3,
|
|
90
|
+
},
|
|
91
|
+
bulletSymbol: {
|
|
92
|
+
fontSize: 16,
|
|
93
|
+
lineHeight: 18,
|
|
94
|
+
marginRight: 6,
|
|
95
|
+
color: colors.onSurfaceVariant,
|
|
96
|
+
includeFontPadding: false,
|
|
97
|
+
textAlignVertical: 'center',
|
|
98
|
+
},
|
|
99
|
+
noteText: {
|
|
100
|
+
flex: 1,
|
|
101
|
+
fontFamily: FontFamily.LEXEND_REGULAR,
|
|
102
|
+
fontSize: 12,
|
|
103
|
+
fontWeight: '400',
|
|
104
|
+
color: colors.onSurfaceVariant,
|
|
105
|
+
lineHeight: 18,
|
|
106
|
+
letterSpacing: -0.165,
|
|
107
|
+
marginBottom: 5,
|
|
108
|
+
},
|
|
109
|
+
icon: {
|
|
110
|
+
height: 20,
|
|
111
|
+
width: 20,
|
|
112
|
+
resizeMode:'contain'
|
|
113
|
+
},
|
|
114
|
+
rightIcon: {
|
|
115
|
+
height: 10,
|
|
116
|
+
width: 10,
|
|
117
|
+
resizeMode:'contain'
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export default styles;
|