@oxyhq/services 5.17.18 → 5.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/lib/commonjs/core/mixins/OxyServices.features.js +372 -0
- package/lib/commonjs/core/mixins/OxyServices.features.js.map +1 -0
- package/lib/commonjs/core/mixins/index.js +3 -2
- package/lib/commonjs/core/mixins/index.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedItem.js +11 -1
- package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
- package/lib/commonjs/ui/components/SettingRow.js +17 -4
- package/lib/commonjs/ui/components/SettingRow.js.map +1 -1
- package/lib/commonjs/ui/components/feedback/FormInput.js +72 -0
- package/lib/commonjs/ui/components/feedback/FormInput.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +33 -0
- package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/constants.js +59 -0
- package/lib/commonjs/ui/components/feedback/constants.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js +262 -0
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/index.js +54 -0
- package/lib/commonjs/ui/components/feedback/index.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/types.js +6 -0
- package/lib/commonjs/ui/components/feedback/types.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/useFeedbackForm.js +52 -0
- package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -0
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +282 -0
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -0
- package/lib/commonjs/ui/components/modals/index.js +14 -0
- package/lib/commonjs/ui/components/modals/index.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +309 -0
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +79 -0
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +108 -0
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +79 -0
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +176 -0
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/constants.js +53 -0
- package/lib/commonjs/ui/components/payment/constants.js.map +1 -0
- package/lib/commonjs/ui/components/payment/index.js +80 -0
- package/lib/commonjs/ui/components/payment/index.js.map +1 -0
- package/lib/commonjs/ui/components/payment/paymentStyles.js +409 -0
- package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -0
- package/lib/commonjs/ui/components/payment/types.js +6 -0
- package/lib/commonjs/ui/components/payment/types.js.map +1 -0
- package/lib/commonjs/ui/hooks/index.js +26 -0
- package/lib/commonjs/ui/hooks/index.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAsyncAction.js +95 -0
- package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -0
- package/lib/commonjs/ui/hooks/useSettingToggle.js +126 -0
- package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -0
- package/lib/commonjs/ui/navigation/routes.js +1 -0
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +4 -2
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +33 -30
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FAQScreen.js +315 -0
- package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/FeedbackScreen.js +73 -590
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js +8 -7
- package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +67 -1395
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +13 -5
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +16 -10
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +23 -11
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.features.js +369 -0
- package/lib/module/core/mixins/OxyServices.features.js.map +1 -0
- package/lib/module/core/mixins/index.js +3 -2
- package/lib/module/core/mixins/index.js.map +1 -1
- package/lib/module/ui/components/GroupedItem.js +11 -1
- package/lib/module/ui/components/GroupedItem.js.map +1 -1
- package/lib/module/ui/components/SettingRow.js +17 -4
- package/lib/module/ui/components/SettingRow.js.map +1 -1
- package/lib/module/ui/components/feedback/FormInput.js +67 -0
- package/lib/module/ui/components/feedback/FormInput.js.map +1 -0
- package/lib/module/ui/components/feedback/ProgressIndicator.js +28 -0
- package/lib/module/ui/components/feedback/ProgressIndicator.js.map +1 -0
- package/lib/module/ui/components/feedback/constants.js +55 -0
- package/lib/module/ui/components/feedback/constants.js.map +1 -0
- package/lib/module/ui/components/feedback/feedbackStyles.js +257 -0
- package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -0
- package/lib/module/ui/components/feedback/index.js +8 -0
- package/lib/module/ui/components/feedback/index.js.map +1 -0
- package/lib/module/ui/components/feedback/types.js +4 -0
- package/lib/module/ui/components/feedback/types.js.map +1 -0
- package/lib/module/ui/components/feedback/useFeedbackForm.js +47 -0
- package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -0
- package/lib/module/ui/components/modals/DeleteAccountModal.js +276 -0
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -0
- package/lib/module/ui/components/modals/index.js +4 -0
- package/lib/module/ui/components/modals/index.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +303 -0
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentMethodStep.js +73 -0
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentReviewStep.js +102 -0
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +73 -0
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +170 -0
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -0
- package/lib/module/ui/components/payment/constants.js +47 -0
- package/lib/module/ui/components/payment/constants.js.map +1 -0
- package/lib/module/ui/components/payment/index.js +10 -0
- package/lib/module/ui/components/payment/index.js.map +1 -0
- package/lib/module/ui/components/payment/paymentStyles.js +404 -0
- package/lib/module/ui/components/payment/paymentStyles.js.map +1 -0
- package/lib/module/ui/components/payment/types.js +4 -0
- package/lib/module/ui/components/payment/types.js.map +1 -0
- package/lib/module/ui/hooks/index.js +2 -0
- package/lib/module/ui/hooks/index.js.map +1 -1
- package/lib/module/ui/hooks/useAsyncAction.js +89 -0
- package/lib/module/ui/hooks/useAsyncAction.js.map +1 -0
- package/lib/module/ui/hooks/useSettingToggle.js +120 -0
- package/lib/module/ui/hooks/useSettingToggle.js.map +1 -0
- package/lib/module/ui/navigation/routes.js +1 -0
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +4 -2
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +33 -30
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/FAQScreen.js +310 -0
- package/lib/module/ui/screens/FAQScreen.js.map +1 -0
- package/lib/module/ui/screens/FeedbackScreen.js +64 -581
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js +8 -7
- package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +67 -1397
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +13 -5
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js +16 -10
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js +23 -11
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.features.d.ts +229 -0
- package/lib/typescript/core/mixins/OxyServices.features.d.ts.map +1 -0
- package/lib/typescript/core/mixins/index.d.ts +71 -1
- package/lib/typescript/core/mixins/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/GroupedItem.d.ts +5 -1
- package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
- package/lib/typescript/ui/components/SettingRow.d.ts +6 -0
- package/lib/typescript/ui/components/SettingRow.d.ts.map +1 -1
- package/lib/typescript/ui/components/feedback/FormInput.d.ts +20 -0
- package/lib/typescript/ui/components/feedback/FormInput.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts +11 -0
- package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/constants.d.ts +5 -0
- package/lib/typescript/ui/components/feedback/constants.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts +280 -0
- package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/index.d.ts +7 -0
- package/lib/typescript/ui/components/feedback/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/types.d.ts +46 -0
- package/lib/typescript/ui/components/feedback/types.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts +9 -0
- package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts.map +1 -0
- package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts +19 -0
- package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts.map +1 -0
- package/lib/typescript/ui/components/modals/index.d.ts +2 -0
- package/lib/typescript/ui/components/modals/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts +21 -0
- package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts +14 -0
- package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts +16 -0
- package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts +10 -0
- package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts +15 -0
- package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/constants.d.ts +7 -0
- package/lib/typescript/ui/components/payment/constants.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/index.d.ts +9 -0
- package/lib/typescript/ui/components/payment/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/paymentStyles.d.ts +396 -0
- package/lib/typescript/ui/components/payment/paymentStyles.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/types.d.ts +40 -0
- package/lib/typescript/ui/components/payment/types.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/index.d.ts +2 -0
- package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useAsyncAction.d.ts +51 -0
- package/lib/typescript/ui/hooks/useAsyncAction.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useSettingToggle.d.ts +55 -0
- package/lib/typescript/ui/hooks/useSettingToggle.d.ts.map +1 -0
- package/lib/typescript/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/FAQScreen.d.ts +5 -0
- package/lib/typescript/ui/screens/FAQScreen.d.ts.map +1 -0
- package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +3 -15
- package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/mixins/OxyServices.features.ts +428 -0
- package/src/core/mixins/index.ts +20 -17
- package/src/ui/components/GroupedItem.tsx +19 -1
- package/src/ui/components/SettingRow.tsx +26 -4
- package/src/ui/components/feedback/FormInput.tsx +84 -0
- package/src/ui/components/feedback/ProgressIndicator.tsx +35 -0
- package/src/ui/components/feedback/constants.ts +22 -0
- package/src/ui/components/feedback/feedbackStyles.ts +247 -0
- package/src/ui/components/feedback/index.ts +6 -0
- package/src/ui/components/feedback/types.ts +52 -0
- package/src/ui/components/feedback/useFeedbackForm.ts +44 -0
- package/src/ui/components/modals/DeleteAccountModal.tsx +294 -0
- package/src/ui/components/modals/index.ts +1 -0
- package/src/ui/components/payment/PaymentDetailsStep.tsx +222 -0
- package/src/ui/components/payment/PaymentMethodStep.tsx +89 -0
- package/src/ui/components/payment/PaymentReviewStep.tsx +126 -0
- package/src/ui/components/payment/PaymentSuccessStep.tsx +71 -0
- package/src/ui/components/payment/PaymentSummaryStep.tsx +159 -0
- package/src/ui/components/payment/constants.ts +39 -0
- package/src/ui/components/payment/index.ts +9 -0
- package/src/ui/components/payment/paymentStyles.ts +397 -0
- package/src/ui/components/payment/types.ts +45 -0
- package/src/ui/hooks/index.ts +3 -1
- package/src/ui/hooks/useAsyncAction.ts +129 -0
- package/src/ui/hooks/useSettingToggle.ts +147 -0
- package/src/ui/navigation/routes.ts +2 -0
- package/src/ui/screens/AccountCenterScreen.tsx +2 -2
- package/src/ui/screens/AccountOverviewScreen.tsx +35 -37
- package/src/ui/screens/FAQScreen.tsx +332 -0
- package/src/ui/screens/FeedbackScreen.tsx +91 -626
- package/src/ui/screens/HelpSupportScreen.tsx +7 -5
- package/src/ui/screens/PaymentGatewayScreen.tsx +96 -1275
- package/src/ui/screens/ProfileScreen.tsx +11 -6
- package/src/ui/screens/SavesCollectionsScreen.tsx +19 -10
- package/src/ui/screens/karma/KarmaCenterScreen.tsx +10 -10
|
@@ -14,515 +14,15 @@ var _version = require("../../constants/version");
|
|
|
14
14
|
var _components = require("../components");
|
|
15
15
|
var _useI18n = require("../hooks/useI18n");
|
|
16
16
|
var _OxyContext = require("../context/OxyContext");
|
|
17
|
-
var
|
|
17
|
+
var _feedback = require("../components/feedback");
|
|
18
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
19
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
20
|
-
// Types for better type safety
|
|
21
|
-
|
|
22
|
-
// Constants
|
|
23
|
-
const FEEDBACK_TYPES = [{
|
|
24
|
-
id: 'bug',
|
|
25
|
-
label: 'Bug Report',
|
|
26
|
-
icon: 'bug',
|
|
27
|
-
color: '#FF3B30',
|
|
28
|
-
description: 'Report a problem or issue'
|
|
29
|
-
}, {
|
|
30
|
-
id: 'feature',
|
|
31
|
-
label: 'Feature Request',
|
|
32
|
-
icon: 'bulb',
|
|
33
|
-
color: '#007AFF',
|
|
34
|
-
description: 'Suggest a new feature'
|
|
35
|
-
}, {
|
|
36
|
-
id: 'general',
|
|
37
|
-
label: 'General Feedback',
|
|
38
|
-
icon: 'chatbubble',
|
|
39
|
-
color: '#34C759',
|
|
40
|
-
description: 'Share your thoughts'
|
|
41
|
-
}, {
|
|
42
|
-
id: 'support',
|
|
43
|
-
label: 'Support Request',
|
|
44
|
-
icon: 'help-circle',
|
|
45
|
-
color: '#FF9500',
|
|
46
|
-
description: 'Get help with something'
|
|
47
|
-
}];
|
|
48
|
-
const PRIORITY_LEVELS = [{
|
|
49
|
-
id: 'low',
|
|
50
|
-
label: 'Low',
|
|
51
|
-
icon: 'arrow-down',
|
|
52
|
-
color: '#34C759'
|
|
53
|
-
}, {
|
|
54
|
-
id: 'medium',
|
|
55
|
-
label: 'Medium',
|
|
56
|
-
icon: 'remove',
|
|
57
|
-
color: '#FF9500'
|
|
58
|
-
}, {
|
|
59
|
-
id: 'high',
|
|
60
|
-
label: 'High',
|
|
61
|
-
icon: 'arrow-up',
|
|
62
|
-
color: '#FF3B30'
|
|
63
|
-
}, {
|
|
64
|
-
id: 'critical',
|
|
65
|
-
label: 'Critical',
|
|
66
|
-
icon: 'warning',
|
|
67
|
-
color: '#FF0000'
|
|
68
|
-
}];
|
|
69
|
-
const CATEGORIES = {
|
|
70
|
-
bug: ['UI/UX', 'Performance', 'Authentication', 'File Management', 'Billing', 'Other'],
|
|
71
|
-
feature: ['User Interface', 'File Management', 'Security', 'Performance', 'Integration', 'Other'],
|
|
72
|
-
general: ['User Experience', 'Design', 'Performance', 'Documentation', 'Other'],
|
|
73
|
-
support: ['Account Issues', 'Billing', 'Technical Problems', 'Feature Questions', 'Other']
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
// Styles factory function
|
|
77
|
-
const createStyles = (colors, theme) => _reactNative.StyleSheet.create({
|
|
78
|
-
container: {
|
|
79
|
-
flex: 1
|
|
80
|
-
},
|
|
81
|
-
fullBleed: {
|
|
82
|
-
width: '100%',
|
|
83
|
-
alignSelf: 'stretch'
|
|
84
|
-
},
|
|
85
|
-
scrollContent: {
|
|
86
|
-
flexGrow: 1,
|
|
87
|
-
..._spacing.screenContentStyle
|
|
88
|
-
},
|
|
89
|
-
stepContainer: {
|
|
90
|
-
flex: 1,
|
|
91
|
-
justifyContent: 'flex-start',
|
|
92
|
-
alignItems: 'flex-start'
|
|
93
|
-
},
|
|
94
|
-
modernHeader: {
|
|
95
|
-
alignItems: 'flex-start',
|
|
96
|
-
width: '100%',
|
|
97
|
-
marginBottom: 24
|
|
98
|
-
},
|
|
99
|
-
modernTitle: {
|
|
100
|
-
fontFamily: _reactNative.Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
|
|
101
|
-
fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
|
|
102
|
-
fontSize: 42,
|
|
103
|
-
lineHeight: 48,
|
|
104
|
-
marginBottom: 12,
|
|
105
|
-
textAlign: 'left',
|
|
106
|
-
letterSpacing: -1
|
|
107
|
-
},
|
|
108
|
-
modernSubtitle: {
|
|
109
|
-
fontSize: 18,
|
|
110
|
-
lineHeight: 24,
|
|
111
|
-
textAlign: 'left',
|
|
112
|
-
opacity: 0.8,
|
|
113
|
-
marginBottom: 24
|
|
114
|
-
},
|
|
115
|
-
stepTitle: {
|
|
116
|
-
fontFamily: _reactNative.Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
|
|
117
|
-
fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
|
|
118
|
-
fontSize: 42,
|
|
119
|
-
lineHeight: 48,
|
|
120
|
-
marginBottom: 12,
|
|
121
|
-
textAlign: 'left',
|
|
122
|
-
letterSpacing: -1
|
|
123
|
-
},
|
|
124
|
-
inputContainer: {
|
|
125
|
-
width: '100%',
|
|
126
|
-
marginBottom: 24
|
|
127
|
-
},
|
|
128
|
-
premiumInputWrapper: {
|
|
129
|
-
flexDirection: 'row',
|
|
130
|
-
alignItems: 'center',
|
|
131
|
-
height: 56,
|
|
132
|
-
borderRadius: 16,
|
|
133
|
-
paddingHorizontal: 20,
|
|
134
|
-
borderWidth: 2,
|
|
135
|
-
backgroundColor: colors.inputBackground
|
|
136
|
-
},
|
|
137
|
-
textAreaWrapper: {
|
|
138
|
-
flexDirection: 'column',
|
|
139
|
-
alignItems: 'flex-start',
|
|
140
|
-
minHeight: 120,
|
|
141
|
-
borderRadius: 16,
|
|
142
|
-
paddingHorizontal: 20,
|
|
143
|
-
paddingVertical: 16,
|
|
144
|
-
borderWidth: 2,
|
|
145
|
-
backgroundColor: colors.inputBackground
|
|
146
|
-
},
|
|
147
|
-
inputIcon: {
|
|
148
|
-
marginRight: 12
|
|
149
|
-
},
|
|
150
|
-
inputContent: {
|
|
151
|
-
flex: 1
|
|
152
|
-
},
|
|
153
|
-
modernLabel: {
|
|
154
|
-
fontSize: 12,
|
|
155
|
-
fontWeight: '500',
|
|
156
|
-
marginBottom: 2
|
|
157
|
-
},
|
|
158
|
-
modernInput: {
|
|
159
|
-
flex: 1,
|
|
160
|
-
fontSize: 16,
|
|
161
|
-
height: '100%'
|
|
162
|
-
},
|
|
163
|
-
textArea: {
|
|
164
|
-
flex: 1,
|
|
165
|
-
fontSize: 16,
|
|
166
|
-
textAlignVertical: 'top',
|
|
167
|
-
minHeight: 80
|
|
168
|
-
},
|
|
169
|
-
typeGrid: {
|
|
170
|
-
flexDirection: 'row',
|
|
171
|
-
flexWrap: 'wrap',
|
|
172
|
-
gap: 12,
|
|
173
|
-
marginBottom: 24
|
|
174
|
-
},
|
|
175
|
-
typeCard: {
|
|
176
|
-
width: (_reactNative.Dimensions.get('window').width - 72) / 2,
|
|
177
|
-
padding: 20,
|
|
178
|
-
borderRadius: 16,
|
|
179
|
-
borderWidth: 2,
|
|
180
|
-
alignItems: 'center',
|
|
181
|
-
justifyContent: 'center',
|
|
182
|
-
minHeight: 120
|
|
183
|
-
},
|
|
184
|
-
typeIcon: {
|
|
185
|
-
marginBottom: 12
|
|
186
|
-
},
|
|
187
|
-
typeLabel: {
|
|
188
|
-
fontSize: 16,
|
|
189
|
-
fontWeight: '600',
|
|
190
|
-
textAlign: 'center',
|
|
191
|
-
marginBottom: 4
|
|
192
|
-
},
|
|
193
|
-
typeDescription: {
|
|
194
|
-
fontSize: 12,
|
|
195
|
-
textAlign: 'center',
|
|
196
|
-
opacity: 0.8
|
|
197
|
-
},
|
|
198
|
-
priorityContainer: {
|
|
199
|
-
flexDirection: 'row',
|
|
200
|
-
justifyContent: 'space-between',
|
|
201
|
-
marginBottom: 24
|
|
202
|
-
},
|
|
203
|
-
priorityButton: {
|
|
204
|
-
flex: 1,
|
|
205
|
-
padding: 16,
|
|
206
|
-
borderRadius: 12,
|
|
207
|
-
borderWidth: 2,
|
|
208
|
-
alignItems: 'center',
|
|
209
|
-
marginHorizontal: 4
|
|
210
|
-
},
|
|
211
|
-
priorityLabel: {
|
|
212
|
-
fontSize: 12,
|
|
213
|
-
fontWeight: '600',
|
|
214
|
-
marginTop: 4
|
|
215
|
-
},
|
|
216
|
-
categoryContainer: {
|
|
217
|
-
marginBottom: 24
|
|
218
|
-
},
|
|
219
|
-
categoryButton: {
|
|
220
|
-
flexDirection: 'row',
|
|
221
|
-
alignItems: 'center',
|
|
222
|
-
paddingVertical: 12,
|
|
223
|
-
paddingHorizontal: 16,
|
|
224
|
-
borderRadius: 12,
|
|
225
|
-
borderWidth: 1,
|
|
226
|
-
marginBottom: 8
|
|
227
|
-
},
|
|
228
|
-
categoryText: {
|
|
229
|
-
fontSize: 16,
|
|
230
|
-
marginLeft: 12
|
|
231
|
-
},
|
|
232
|
-
checkboxContainer: {
|
|
233
|
-
flexDirection: 'row',
|
|
234
|
-
alignItems: 'center',
|
|
235
|
-
marginBottom: 24
|
|
236
|
-
},
|
|
237
|
-
checkbox: {
|
|
238
|
-
width: 24,
|
|
239
|
-
height: 24,
|
|
240
|
-
borderRadius: 6,
|
|
241
|
-
borderWidth: 2,
|
|
242
|
-
marginRight: 12,
|
|
243
|
-
alignItems: 'center',
|
|
244
|
-
justifyContent: 'center'
|
|
245
|
-
},
|
|
246
|
-
checkboxText: {
|
|
247
|
-
fontSize: 16,
|
|
248
|
-
flex: 1
|
|
249
|
-
},
|
|
250
|
-
button: {
|
|
251
|
-
flexDirection: 'row',
|
|
252
|
-
alignItems: 'center',
|
|
253
|
-
justifyContent: 'center',
|
|
254
|
-
paddingVertical: 18,
|
|
255
|
-
paddingHorizontal: 32,
|
|
256
|
-
borderRadius: 16,
|
|
257
|
-
marginVertical: 8,
|
|
258
|
-
gap: 8,
|
|
259
|
-
width: '100%',
|
|
260
|
-
..._reactNative.Platform.select({
|
|
261
|
-
web: {
|
|
262
|
-
boxShadow: '0 4px 8px rgba(0,0,0,0.3)'
|
|
263
|
-
},
|
|
264
|
-
default: {
|
|
265
|
-
shadowOffset: {
|
|
266
|
-
width: 0,
|
|
267
|
-
height: 4
|
|
268
|
-
},
|
|
269
|
-
shadowOpacity: 0.3,
|
|
270
|
-
shadowRadius: 8,
|
|
271
|
-
elevation: 6
|
|
272
|
-
}
|
|
273
|
-
})
|
|
274
|
-
},
|
|
275
|
-
buttonText: {
|
|
276
|
-
color: '#FFFFFF',
|
|
277
|
-
fontSize: 16,
|
|
278
|
-
fontWeight: '600',
|
|
279
|
-
letterSpacing: 0.5
|
|
280
|
-
},
|
|
281
|
-
navigationButtons: {
|
|
282
|
-
flexDirection: 'row',
|
|
283
|
-
justifyContent: 'center',
|
|
284
|
-
marginTop: 16,
|
|
285
|
-
marginBottom: 8,
|
|
286
|
-
width: '100%',
|
|
287
|
-
gap: 8
|
|
288
|
-
},
|
|
289
|
-
navButton: {
|
|
290
|
-
flexDirection: 'row',
|
|
291
|
-
alignItems: 'center',
|
|
292
|
-
paddingVertical: 6,
|
|
293
|
-
paddingHorizontal: 12,
|
|
294
|
-
gap: 6,
|
|
295
|
-
minWidth: 70,
|
|
296
|
-
borderWidth: 1,
|
|
297
|
-
..._reactNative.Platform.select({
|
|
298
|
-
web: {
|
|
299
|
-
boxShadow: '0 2px 4px rgba(0,0,0,0.1)'
|
|
300
|
-
},
|
|
301
|
-
default: {
|
|
302
|
-
shadowOffset: {
|
|
303
|
-
width: 0,
|
|
304
|
-
height: 2
|
|
305
|
-
},
|
|
306
|
-
shadowOpacity: 0.1,
|
|
307
|
-
shadowRadius: 4,
|
|
308
|
-
elevation: 2
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
},
|
|
312
|
-
backButton: {
|
|
313
|
-
backgroundColor: 'transparent',
|
|
314
|
-
borderTopLeftRadius: 35,
|
|
315
|
-
borderBottomLeftRadius: 35,
|
|
316
|
-
borderTopRightRadius: 12,
|
|
317
|
-
borderBottomRightRadius: 12
|
|
318
|
-
},
|
|
319
|
-
nextButton: {
|
|
320
|
-
backgroundColor: 'transparent',
|
|
321
|
-
borderTopRightRadius: 35,
|
|
322
|
-
borderBottomRightRadius: 35,
|
|
323
|
-
borderTopLeftRadius: 12,
|
|
324
|
-
borderBottomLeftRadius: 12
|
|
325
|
-
},
|
|
326
|
-
navButtonText: {
|
|
327
|
-
fontSize: 13,
|
|
328
|
-
fontWeight: '500'
|
|
329
|
-
},
|
|
330
|
-
progressContainer: {
|
|
331
|
-
flexDirection: 'row',
|
|
332
|
-
justifyContent: 'center',
|
|
333
|
-
marginBottom: 20,
|
|
334
|
-
marginTop: 8
|
|
335
|
-
},
|
|
336
|
-
progressDot: {
|
|
337
|
-
height: 10,
|
|
338
|
-
width: 10,
|
|
339
|
-
borderRadius: 5,
|
|
340
|
-
marginHorizontal: 6,
|
|
341
|
-
borderWidth: 2,
|
|
342
|
-
borderColor: '#fff',
|
|
343
|
-
..._reactNative.Platform.select({
|
|
344
|
-
web: {
|
|
345
|
-
boxShadow: '0 1px 2px rgba(0,0,0,0.08)'
|
|
346
|
-
},
|
|
347
|
-
default: {
|
|
348
|
-
shadowColor: colors.primary,
|
|
349
|
-
shadowOpacity: 0.08,
|
|
350
|
-
shadowOffset: {
|
|
351
|
-
width: 0,
|
|
352
|
-
height: 1
|
|
353
|
-
},
|
|
354
|
-
shadowRadius: 2,
|
|
355
|
-
elevation: 1
|
|
356
|
-
}
|
|
357
|
-
})
|
|
358
|
-
},
|
|
359
|
-
summaryContainer: {
|
|
360
|
-
padding: 0,
|
|
361
|
-
marginBottom: 24,
|
|
362
|
-
width: '100%'
|
|
363
|
-
},
|
|
364
|
-
summaryRow: {
|
|
365
|
-
flexDirection: 'row',
|
|
366
|
-
marginBottom: 10
|
|
367
|
-
},
|
|
368
|
-
summaryLabel: {
|
|
369
|
-
fontSize: 15,
|
|
370
|
-
width: 90
|
|
371
|
-
},
|
|
372
|
-
summaryValue: {
|
|
373
|
-
fontSize: 15,
|
|
374
|
-
fontWeight: '600',
|
|
375
|
-
flex: 1
|
|
376
|
-
},
|
|
377
|
-
successContainer: {
|
|
378
|
-
alignItems: 'center',
|
|
379
|
-
justifyContent: 'center',
|
|
380
|
-
padding: 40
|
|
381
|
-
},
|
|
382
|
-
successIcon: {
|
|
383
|
-
marginBottom: 24
|
|
384
|
-
},
|
|
385
|
-
successTitle: {
|
|
386
|
-
fontSize: 24,
|
|
387
|
-
fontWeight: 'bold',
|
|
388
|
-
marginBottom: 12,
|
|
389
|
-
textAlign: 'center'
|
|
390
|
-
},
|
|
391
|
-
successMessage: {
|
|
392
|
-
fontSize: 16,
|
|
393
|
-
textAlign: 'center',
|
|
394
|
-
opacity: 0.8,
|
|
395
|
-
marginBottom: 24
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
|
|
399
|
-
// Custom hooks for better separation of concerns
|
|
400
|
-
const useFeedbackForm = () => {
|
|
401
|
-
const [feedbackData, setFeedbackData] = (0, _react.useState)({
|
|
402
|
-
type: 'general',
|
|
403
|
-
title: '',
|
|
404
|
-
description: '',
|
|
405
|
-
priority: 'medium',
|
|
406
|
-
category: '',
|
|
407
|
-
contactEmail: '',
|
|
408
|
-
systemInfo: true
|
|
409
|
-
});
|
|
410
|
-
const [feedbackState, setFeedbackState] = (0, _react.useState)({
|
|
411
|
-
status: 'idle',
|
|
412
|
-
message: ''
|
|
413
|
-
});
|
|
414
|
-
const updateField = (0, _react.useCallback)((field, value) => {
|
|
415
|
-
setFeedbackData(prev => ({
|
|
416
|
-
...prev,
|
|
417
|
-
[field]: value
|
|
418
|
-
}));
|
|
419
|
-
}, []);
|
|
420
|
-
const resetForm = (0, _react.useCallback)(() => {
|
|
421
|
-
setFeedbackData({
|
|
422
|
-
type: 'general',
|
|
423
|
-
title: '',
|
|
424
|
-
description: '',
|
|
425
|
-
priority: 'medium',
|
|
426
|
-
category: '',
|
|
427
|
-
contactEmail: '',
|
|
428
|
-
systemInfo: true
|
|
429
|
-
});
|
|
430
|
-
setFeedbackState({
|
|
431
|
-
status: 'idle',
|
|
432
|
-
message: ''
|
|
433
|
-
});
|
|
434
|
-
}, []);
|
|
435
|
-
return {
|
|
436
|
-
feedbackData,
|
|
437
|
-
feedbackState,
|
|
438
|
-
setFeedbackState,
|
|
439
|
-
updateField,
|
|
440
|
-
resetForm
|
|
441
|
-
};
|
|
442
|
-
};
|
|
443
|
-
|
|
444
|
-
// Reusable components
|
|
445
|
-
const FormInput = /*#__PURE__*/_react.default.memo(({
|
|
446
|
-
icon,
|
|
447
|
-
label,
|
|
448
|
-
value,
|
|
449
|
-
onChangeText,
|
|
450
|
-
placeholder,
|
|
451
|
-
multiline = false,
|
|
452
|
-
numberOfLines = 1,
|
|
453
|
-
testID,
|
|
454
|
-
colors,
|
|
455
|
-
styles,
|
|
456
|
-
borderColor
|
|
457
|
-
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
458
|
-
style: styles.inputContainer,
|
|
459
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
460
|
-
style: [multiline ? styles.textAreaWrapper : styles.premiumInputWrapper, {
|
|
461
|
-
borderColor: borderColor || colors.border,
|
|
462
|
-
backgroundColor: colors.inputBackground,
|
|
463
|
-
shadowColor: colors.primary,
|
|
464
|
-
shadowOffset: {
|
|
465
|
-
width: 0,
|
|
466
|
-
height: 4
|
|
467
|
-
},
|
|
468
|
-
shadowOpacity: 0.1,
|
|
469
|
-
shadowRadius: 12,
|
|
470
|
-
elevation: 3
|
|
471
|
-
}],
|
|
472
|
-
children: [!multiline && /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
473
|
-
name: icon,
|
|
474
|
-
size: 22,
|
|
475
|
-
color: colors.secondaryText,
|
|
476
|
-
style: styles.inputIcon
|
|
477
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
478
|
-
style: styles.inputContent,
|
|
479
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
480
|
-
style: [styles.modernLabel, {
|
|
481
|
-
color: colors.secondaryText
|
|
482
|
-
}],
|
|
483
|
-
children: label
|
|
484
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
485
|
-
style: [multiline ? styles.textArea : styles.modernInput, {
|
|
486
|
-
color: colors.text
|
|
487
|
-
}],
|
|
488
|
-
value: value,
|
|
489
|
-
onChangeText: onChangeText,
|
|
490
|
-
placeholder: placeholder,
|
|
491
|
-
placeholderTextColor: colors.secondaryText + '60',
|
|
492
|
-
multiline: multiline,
|
|
493
|
-
numberOfLines: multiline ? numberOfLines : undefined,
|
|
494
|
-
testID: testID
|
|
495
|
-
})]
|
|
496
|
-
})]
|
|
497
|
-
})
|
|
498
|
-
}));
|
|
499
|
-
const ProgressIndicator = /*#__PURE__*/_react.default.memo(({
|
|
500
|
-
currentStep,
|
|
501
|
-
totalSteps,
|
|
502
|
-
colors,
|
|
503
|
-
styles
|
|
504
|
-
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
505
|
-
style: styles.progressContainer,
|
|
506
|
-
children: Array.from({
|
|
507
|
-
length: totalSteps
|
|
508
|
-
}, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
509
|
-
style: [styles.progressDot, currentStep === index ? {
|
|
510
|
-
backgroundColor: colors.primary,
|
|
511
|
-
width: 24
|
|
512
|
-
} : {
|
|
513
|
-
backgroundColor: colors.border
|
|
514
|
-
}]
|
|
515
|
-
}, index))
|
|
516
|
-
}));
|
|
517
|
-
|
|
518
|
-
// Main component
|
|
519
20
|
const FeedbackScreen = ({
|
|
520
21
|
navigate,
|
|
521
22
|
goBack,
|
|
522
23
|
onClose,
|
|
523
24
|
theme
|
|
524
25
|
}) => {
|
|
525
|
-
// Use useOxy() hook for OxyContext values
|
|
526
26
|
const {
|
|
527
27
|
user,
|
|
528
28
|
oxyServices
|
|
@@ -532,28 +32,18 @@ const FeedbackScreen = ({
|
|
|
532
32
|
const {
|
|
533
33
|
t
|
|
534
34
|
} = (0, _useI18n.useI18n)();
|
|
535
|
-
|
|
536
|
-
// Form state
|
|
537
35
|
const {
|
|
538
36
|
feedbackData,
|
|
539
37
|
feedbackState,
|
|
540
38
|
setFeedbackState,
|
|
541
39
|
updateField,
|
|
542
40
|
resetForm
|
|
543
|
-
} = useFeedbackForm();
|
|
544
|
-
|
|
545
|
-
// UI state
|
|
41
|
+
} = (0, _feedback.useFeedbackForm)();
|
|
546
42
|
const [currentStep, setCurrentStep] = (0, _react.useState)(0);
|
|
547
43
|
const [errorMessage, setErrorMessage] = (0, _react.useState)('');
|
|
548
|
-
|
|
549
|
-
// Animation refs
|
|
550
44
|
const fadeAnim = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
|
|
551
45
|
const slideAnim = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
552
|
-
|
|
553
|
-
// Memoized styles
|
|
554
|
-
const styles = (0, _react.useMemo)(() => createStyles(colors, normalizedTheme), [colors, normalizedTheme]);
|
|
555
|
-
|
|
556
|
-
// Animation functions
|
|
46
|
+
const styles = (0, _react.useMemo)(() => (0, _feedback.createFeedbackStyles)(colors), [colors]);
|
|
557
47
|
const animateTransition = (0, _react.useCallback)(nextStep => {
|
|
558
48
|
_reactNative.Animated.timing(fadeAnim, {
|
|
559
49
|
toValue: 0,
|
|
@@ -583,8 +73,6 @@ const FeedbackScreen = ({
|
|
|
583
73
|
animateTransition(currentStep - 1);
|
|
584
74
|
}
|
|
585
75
|
}, [currentStep, animateTransition]);
|
|
586
|
-
|
|
587
|
-
// Form validation helpers
|
|
588
76
|
const isTypeStepValid = (0, _react.useCallback)(() => {
|
|
589
77
|
return feedbackData.type && feedbackData.category;
|
|
590
78
|
}, [feedbackData.type, feedbackData.category]);
|
|
@@ -594,8 +82,6 @@ const FeedbackScreen = ({
|
|
|
594
82
|
const isContactStepValid = (0, _react.useCallback)(() => {
|
|
595
83
|
return feedbackData.contactEmail.trim() || user?.email;
|
|
596
84
|
}, [feedbackData.contactEmail, user?.email]);
|
|
597
|
-
|
|
598
|
-
// Submit feedback handler
|
|
599
85
|
const handleSubmitFeedback = (0, _react.useCallback)(async () => {
|
|
600
86
|
if (!isTypeStepValid() || !isDetailsStepValid() || !isContactStepValid()) {
|
|
601
87
|
_sonner.toast.error(t('feedback.toasts.fillRequired') || 'Please fill in all required fields');
|
|
@@ -607,8 +93,6 @@ const FeedbackScreen = ({
|
|
|
607
93
|
message: ''
|
|
608
94
|
});
|
|
609
95
|
setErrorMessage('');
|
|
610
|
-
|
|
611
|
-
// Prepare feedback data
|
|
612
96
|
const feedbackPayload = {
|
|
613
97
|
type: feedbackData.type,
|
|
614
98
|
title: feedbackData.title,
|
|
@@ -625,19 +109,12 @@ const FeedbackScreen = ({
|
|
|
625
109
|
timestamp: new Date().toISOString()
|
|
626
110
|
} : undefined
|
|
627
111
|
};
|
|
628
|
-
|
|
629
|
-
// TODO: Implement actual API integration
|
|
630
|
-
// Replace setTimeout simulation with actual API call: await oxyServices.submitFeedback(feedbackPayload)
|
|
631
|
-
// Currently simulates API call with setTimeout for development/testing purposes
|
|
632
|
-
await new Promise(resolve => setTimeout(resolve, 2000)); // Simulate API call
|
|
633
|
-
|
|
112
|
+
await oxyServices.submitFeedback(feedbackPayload);
|
|
634
113
|
setFeedbackState({
|
|
635
114
|
status: 'success',
|
|
636
115
|
message: t('feedback.toasts.submitSuccess') || 'Feedback submitted successfully!'
|
|
637
116
|
});
|
|
638
117
|
_sonner.toast.success(t('feedback.toasts.thanks') || 'Thank you for your feedback!');
|
|
639
|
-
|
|
640
|
-
// Reset form after success
|
|
641
118
|
setTimeout(() => {
|
|
642
119
|
resetForm();
|
|
643
120
|
setCurrentStep(0);
|
|
@@ -649,11 +126,8 @@ const FeedbackScreen = ({
|
|
|
649
126
|
});
|
|
650
127
|
_sonner.toast.error(error.message || t('feedback.toasts.submitFailed') || 'Failed to submit feedback');
|
|
651
128
|
}
|
|
652
|
-
}, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm]);
|
|
653
|
-
|
|
654
|
-
// Step components
|
|
655
|
-
// Memoized grouped section items
|
|
656
|
-
const feedbackTypeItems = (0, _react.useMemo)(() => FEEDBACK_TYPES.map(type => ({
|
|
129
|
+
}, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
|
|
130
|
+
const feedbackTypeItems = (0, _react.useMemo)(() => _feedback.FEEDBACK_TYPES.map(type => ({
|
|
657
131
|
id: type.id,
|
|
658
132
|
icon: type.icon,
|
|
659
133
|
iconColor: type.color,
|
|
@@ -668,7 +142,7 @@ const FeedbackScreen = ({
|
|
|
668
142
|
multiRow: true,
|
|
669
143
|
dense: true
|
|
670
144
|
})), [feedbackData.type, updateField]);
|
|
671
|
-
const categoryItems = (0, _react.useMemo)(() => feedbackData.type ? (CATEGORIES[feedbackData.type] || []).map(cat => ({
|
|
145
|
+
const categoryItems = (0, _react.useMemo)(() => feedbackData.type ? (_feedback.CATEGORIES[feedbackData.type] || []).map(cat => ({
|
|
672
146
|
id: cat,
|
|
673
147
|
icon: feedbackData.category === cat ? 'check-circle' : 'ellipse-outline',
|
|
674
148
|
iconColor: feedbackData.category === cat ? colors.primary : colors.secondaryText,
|
|
@@ -678,7 +152,7 @@ const FeedbackScreen = ({
|
|
|
678
152
|
showChevron: false,
|
|
679
153
|
dense: true
|
|
680
154
|
})) : [], [feedbackData.type, feedbackData.category, colors.primary, colors.secondaryText, updateField]);
|
|
681
|
-
const priorityItems = (0, _react.useMemo)(() => PRIORITY_LEVELS.map(p => ({
|
|
155
|
+
const priorityItems = (0, _react.useMemo)(() => _feedback.PRIORITY_LEVELS.map(p => ({
|
|
682
156
|
id: p.id,
|
|
683
157
|
icon: p.icon,
|
|
684
158
|
iconColor: p.color,
|
|
@@ -688,7 +162,7 @@ const FeedbackScreen = ({
|
|
|
688
162
|
showChevron: false,
|
|
689
163
|
dense: true
|
|
690
164
|
})), [feedbackData.priority, updateField]);
|
|
691
|
-
const renderTypeStep = (
|
|
165
|
+
const renderTypeStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
692
166
|
style: [styles.stepContainer, {
|
|
693
167
|
opacity: fadeAnim,
|
|
694
168
|
transform: [{
|
|
@@ -733,13 +207,11 @@ const FeedbackScreen = ({
|
|
|
733
207
|
style: [styles.navButton, {
|
|
734
208
|
backgroundColor: 'transparent',
|
|
735
209
|
borderColor: colors.border,
|
|
736
|
-
|
|
737
|
-
borderTopLeftRadius: 35,
|
|
738
|
-
borderBottomLeftRadius: 35,
|
|
739
|
-
borderTopRightRadius: 35,
|
|
740
|
-
borderBottomRightRadius: 35
|
|
210
|
+
borderRadius: 35
|
|
741
211
|
}],
|
|
742
212
|
onPress: goBack,
|
|
213
|
+
accessibilityRole: "button",
|
|
214
|
+
accessibilityLabel: "Go back",
|
|
743
215
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
744
216
|
name: "arrow-back",
|
|
745
217
|
size: 16,
|
|
@@ -754,14 +226,12 @@ const FeedbackScreen = ({
|
|
|
754
226
|
style: [styles.navButton, {
|
|
755
227
|
backgroundColor: colors.primary,
|
|
756
228
|
borderColor: colors.primary,
|
|
757
|
-
|
|
758
|
-
borderTopLeftRadius: 35,
|
|
759
|
-
borderBottomLeftRadius: 35,
|
|
760
|
-
borderTopRightRadius: 35,
|
|
761
|
-
borderBottomRightRadius: 35
|
|
229
|
+
borderRadius: 35
|
|
762
230
|
}],
|
|
763
231
|
onPress: nextStep,
|
|
764
232
|
disabled: !isTypeStepValid(),
|
|
233
|
+
accessibilityRole: "button",
|
|
234
|
+
accessibilityLabel: "Continue to next step",
|
|
765
235
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
766
236
|
style: [styles.navButtonText, {
|
|
767
237
|
color: '#FFFFFF'
|
|
@@ -774,8 +244,8 @@ const FeedbackScreen = ({
|
|
|
774
244
|
})]
|
|
775
245
|
})]
|
|
776
246
|
})]
|
|
777
|
-
})
|
|
778
|
-
const renderDetailsStep = (
|
|
247
|
+
});
|
|
248
|
+
const renderDetailsStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
779
249
|
style: [styles.stepContainer, {
|
|
780
250
|
opacity: fadeAnim,
|
|
781
251
|
transform: [{
|
|
@@ -795,7 +265,7 @@ const FeedbackScreen = ({
|
|
|
795
265
|
}],
|
|
796
266
|
children: t('feedback.details.subtitle') || 'Provide details about your feedback'
|
|
797
267
|
})]
|
|
798
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(FormInput, {
|
|
268
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_feedback.FormInput, {
|
|
799
269
|
icon: "create-outline",
|
|
800
270
|
label: t('feedback.fields.title.label') || 'Title',
|
|
801
271
|
value: feedbackData.title,
|
|
@@ -806,8 +276,10 @@ const FeedbackScreen = ({
|
|
|
806
276
|
placeholder: t('feedback.fields.title.placeholder') || 'Brief summary of your feedback',
|
|
807
277
|
testID: "feedback-title-input",
|
|
808
278
|
colors: colors,
|
|
809
|
-
styles: styles
|
|
810
|
-
|
|
279
|
+
styles: styles,
|
|
280
|
+
accessibilityLabel: "Feedback title",
|
|
281
|
+
accessibilityHint: "Enter a brief summary of your feedback"
|
|
282
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_feedback.FormInput, {
|
|
811
283
|
icon: "document-text-outline",
|
|
812
284
|
label: t('feedback.fields.description.label') || 'Description',
|
|
813
285
|
value: feedbackData.description,
|
|
@@ -820,7 +292,9 @@ const FeedbackScreen = ({
|
|
|
820
292
|
numberOfLines: 6,
|
|
821
293
|
testID: "feedback-description-input",
|
|
822
294
|
colors: colors,
|
|
823
|
-
styles: styles
|
|
295
|
+
styles: styles,
|
|
296
|
+
accessibilityLabel: "Feedback description",
|
|
297
|
+
accessibilityHint: "Provide detailed information about your feedback"
|
|
824
298
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
825
299
|
style: {
|
|
826
300
|
marginBottom: 24
|
|
@@ -841,10 +315,11 @@ const FeedbackScreen = ({
|
|
|
841
315
|
style: styles.navigationButtons,
|
|
842
316
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
843
317
|
style: [styles.navButton, styles.backButton, {
|
|
844
|
-
borderColor: colors.border
|
|
845
|
-
shadowColor: colors.border
|
|
318
|
+
borderColor: colors.border
|
|
846
319
|
}],
|
|
847
320
|
onPress: prevStep,
|
|
321
|
+
accessibilityRole: "button",
|
|
322
|
+
accessibilityLabel: "Go back",
|
|
848
323
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
849
324
|
name: "arrow-back",
|
|
850
325
|
size: 16,
|
|
@@ -858,11 +333,12 @@ const FeedbackScreen = ({
|
|
|
858
333
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
859
334
|
style: [styles.navButton, styles.nextButton, {
|
|
860
335
|
backgroundColor: colors.primary,
|
|
861
|
-
borderColor: colors.primary
|
|
862
|
-
shadowColor: colors.primary
|
|
336
|
+
borderColor: colors.primary
|
|
863
337
|
}],
|
|
864
338
|
onPress: nextStep,
|
|
865
339
|
disabled: !isDetailsStepValid(),
|
|
340
|
+
accessibilityRole: "button",
|
|
341
|
+
accessibilityLabel: "Continue to next step",
|
|
866
342
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
867
343
|
style: [styles.navButtonText, {
|
|
868
344
|
color: '#FFFFFF'
|
|
@@ -875,8 +351,8 @@ const FeedbackScreen = ({
|
|
|
875
351
|
})]
|
|
876
352
|
})]
|
|
877
353
|
})]
|
|
878
|
-
})
|
|
879
|
-
const renderContactStep = (
|
|
354
|
+
});
|
|
355
|
+
const renderContactStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
880
356
|
style: [styles.stepContainer, {
|
|
881
357
|
opacity: fadeAnim,
|
|
882
358
|
transform: [{
|
|
@@ -896,7 +372,7 @@ const FeedbackScreen = ({
|
|
|
896
372
|
}],
|
|
897
373
|
children: t('feedback.contact.subtitle') || 'Help us get back to you'
|
|
898
374
|
})]
|
|
899
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(FormInput, {
|
|
375
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_feedback.FormInput, {
|
|
900
376
|
icon: "mail-outline",
|
|
901
377
|
label: t('feedback.fields.email.label') || 'Email Address',
|
|
902
378
|
value: feedbackData.contactEmail,
|
|
@@ -907,7 +383,9 @@ const FeedbackScreen = ({
|
|
|
907
383
|
placeholder: user?.email || t('feedback.fields.email.placeholder') || 'Enter your email address',
|
|
908
384
|
testID: "feedback-email-input",
|
|
909
385
|
colors: colors,
|
|
910
|
-
styles: styles
|
|
386
|
+
styles: styles,
|
|
387
|
+
accessibilityLabel: "Email address",
|
|
388
|
+
accessibilityHint: "Enter your email so we can respond"
|
|
911
389
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
912
390
|
style: styles.checkboxContainer,
|
|
913
391
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
@@ -916,6 +394,11 @@ const FeedbackScreen = ({
|
|
|
916
394
|
backgroundColor: feedbackData.systemInfo ? colors.primary : 'transparent'
|
|
917
395
|
}],
|
|
918
396
|
onPress: () => updateField('systemInfo', !feedbackData.systemInfo),
|
|
397
|
+
accessibilityRole: "checkbox",
|
|
398
|
+
accessibilityState: {
|
|
399
|
+
checked: feedbackData.systemInfo
|
|
400
|
+
},
|
|
401
|
+
accessibilityLabel: "Include system information",
|
|
919
402
|
children: feedbackData.systemInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
920
403
|
name: "checkmark",
|
|
921
404
|
size: 16,
|
|
@@ -931,10 +414,11 @@ const FeedbackScreen = ({
|
|
|
931
414
|
style: styles.navigationButtons,
|
|
932
415
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
933
416
|
style: [styles.navButton, styles.backButton, {
|
|
934
|
-
borderColor: colors.border
|
|
935
|
-
shadowColor: colors.border
|
|
417
|
+
borderColor: colors.border
|
|
936
418
|
}],
|
|
937
419
|
onPress: prevStep,
|
|
420
|
+
accessibilityRole: "button",
|
|
421
|
+
accessibilityLabel: "Go back",
|
|
938
422
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
939
423
|
name: "arrow-back",
|
|
940
424
|
size: 16,
|
|
@@ -948,11 +432,12 @@ const FeedbackScreen = ({
|
|
|
948
432
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
949
433
|
style: [styles.navButton, styles.nextButton, {
|
|
950
434
|
backgroundColor: colors.primary,
|
|
951
|
-
borderColor: colors.primary
|
|
952
|
-
shadowColor: colors.primary
|
|
435
|
+
borderColor: colors.primary
|
|
953
436
|
}],
|
|
954
437
|
onPress: nextStep,
|
|
955
438
|
disabled: !isContactStepValid(),
|
|
439
|
+
accessibilityRole: "button",
|
|
440
|
+
accessibilityLabel: "Continue to summary",
|
|
956
441
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
957
442
|
style: [styles.navButtonText, {
|
|
958
443
|
color: '#FFFFFF'
|
|
@@ -965,8 +450,8 @@ const FeedbackScreen = ({
|
|
|
965
450
|
})]
|
|
966
451
|
})]
|
|
967
452
|
})]
|
|
968
|
-
})
|
|
969
|
-
const renderSummaryStep = (
|
|
453
|
+
});
|
|
454
|
+
const renderSummaryStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
970
455
|
style: [styles.stepContainer, {
|
|
971
456
|
opacity: fadeAnim,
|
|
972
457
|
transform: [{
|
|
@@ -994,12 +479,12 @@ const FeedbackScreen = ({
|
|
|
994
479
|
style: [styles.summaryLabel, {
|
|
995
480
|
color: colors.secondaryText
|
|
996
481
|
}],
|
|
997
|
-
children:
|
|
482
|
+
children: "Type:"
|
|
998
483
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
999
484
|
style: [styles.summaryValue, {
|
|
1000
485
|
color: colors.text
|
|
1001
486
|
}],
|
|
1002
|
-
children: FEEDBACK_TYPES.find(t => t.id === feedbackData.type)?.label
|
|
487
|
+
children: _feedback.FEEDBACK_TYPES.find(t => t.id === feedbackData.type)?.label
|
|
1003
488
|
})]
|
|
1004
489
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1005
490
|
style: styles.summaryRow,
|
|
@@ -1007,7 +492,7 @@ const FeedbackScreen = ({
|
|
|
1007
492
|
style: [styles.summaryLabel, {
|
|
1008
493
|
color: colors.secondaryText
|
|
1009
494
|
}],
|
|
1010
|
-
children:
|
|
495
|
+
children: "Category:"
|
|
1011
496
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1012
497
|
style: [styles.summaryValue, {
|
|
1013
498
|
color: colors.text
|
|
@@ -1020,12 +505,12 @@ const FeedbackScreen = ({
|
|
|
1020
505
|
style: [styles.summaryLabel, {
|
|
1021
506
|
color: colors.secondaryText
|
|
1022
507
|
}],
|
|
1023
|
-
children:
|
|
508
|
+
children: "Priority:"
|
|
1024
509
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1025
510
|
style: [styles.summaryValue, {
|
|
1026
511
|
color: colors.text
|
|
1027
512
|
}],
|
|
1028
|
-
children: PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label
|
|
513
|
+
children: _feedback.PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label
|
|
1029
514
|
})]
|
|
1030
515
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1031
516
|
style: styles.summaryRow,
|
|
@@ -1033,7 +518,7 @@ const FeedbackScreen = ({
|
|
|
1033
518
|
style: [styles.summaryLabel, {
|
|
1034
519
|
color: colors.secondaryText
|
|
1035
520
|
}],
|
|
1036
|
-
children:
|
|
521
|
+
children: "Title:"
|
|
1037
522
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1038
523
|
style: [styles.summaryValue, {
|
|
1039
524
|
color: colors.text
|
|
@@ -1046,7 +531,7 @@ const FeedbackScreen = ({
|
|
|
1046
531
|
style: [styles.summaryLabel, {
|
|
1047
532
|
color: colors.secondaryText
|
|
1048
533
|
}],
|
|
1049
|
-
children:
|
|
534
|
+
children: "Contact:"
|
|
1050
535
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1051
536
|
style: [styles.summaryValue, {
|
|
1052
537
|
color: colors.text
|
|
@@ -1061,6 +546,8 @@ const FeedbackScreen = ({
|
|
|
1061
546
|
onPress: handleSubmitFeedback,
|
|
1062
547
|
disabled: feedbackState.status === 'submitting',
|
|
1063
548
|
testID: "submit-feedback-button",
|
|
549
|
+
accessibilityRole: "button",
|
|
550
|
+
accessibilityLabel: "Submit feedback",
|
|
1064
551
|
children: feedbackState.status === 'submitting' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
1065
552
|
color: "#FFFFFF",
|
|
1066
553
|
size: "small"
|
|
@@ -1080,13 +567,11 @@ const FeedbackScreen = ({
|
|
|
1080
567
|
style: [styles.navButton, {
|
|
1081
568
|
backgroundColor: 'transparent',
|
|
1082
569
|
borderColor: colors.border,
|
|
1083
|
-
|
|
1084
|
-
borderTopLeftRadius: 35,
|
|
1085
|
-
borderBottomLeftRadius: 35,
|
|
1086
|
-
borderTopRightRadius: 35,
|
|
1087
|
-
borderBottomRightRadius: 35
|
|
570
|
+
borderRadius: 35
|
|
1088
571
|
}],
|
|
1089
572
|
onPress: prevStep,
|
|
573
|
+
accessibilityRole: "button",
|
|
574
|
+
accessibilityLabel: "Go back",
|
|
1090
575
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1091
576
|
name: "arrow-back",
|
|
1092
577
|
size: 16,
|
|
@@ -1099,8 +584,8 @@ const FeedbackScreen = ({
|
|
|
1099
584
|
})]
|
|
1100
585
|
})
|
|
1101
586
|
})]
|
|
1102
|
-
})
|
|
1103
|
-
const renderSuccessStep = (
|
|
587
|
+
});
|
|
588
|
+
const renderSuccessStep = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
1104
589
|
style: [styles.stepContainer, {
|
|
1105
590
|
opacity: fadeAnim,
|
|
1106
591
|
transform: [{
|
|
@@ -1111,14 +596,14 @@ const FeedbackScreen = ({
|
|
|
1111
596
|
style: styles.successContainer,
|
|
1112
597
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1113
598
|
style: [styles.successIcon, {
|
|
1114
|
-
backgroundColor: colors.success + '20',
|
|
599
|
+
backgroundColor: (colors.success || '#34C759') + '20',
|
|
1115
600
|
padding: 24,
|
|
1116
601
|
borderRadius: 50
|
|
1117
602
|
}],
|
|
1118
603
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1119
604
|
name: "checkmark-circle",
|
|
1120
605
|
size: 48,
|
|
1121
|
-
color: colors.success
|
|
606
|
+
color: colors.success || '#34C759'
|
|
1122
607
|
})
|
|
1123
608
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1124
609
|
style: [styles.successTitle, {
|
|
@@ -1138,19 +623,17 @@ const FeedbackScreen = ({
|
|
|
1138
623
|
resetForm();
|
|
1139
624
|
setCurrentStep(0);
|
|
1140
625
|
},
|
|
626
|
+
accessibilityRole: "button",
|
|
627
|
+
accessibilityLabel: "Submit another feedback",
|
|
1141
628
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1142
629
|
style: styles.buttonText,
|
|
1143
630
|
children: t('feedback.actions.submitAnother') || 'Submit Another'
|
|
1144
631
|
})
|
|
1145
632
|
})]
|
|
1146
633
|
})
|
|
1147
|
-
})
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
const renderCurrentStep = (0, _react.useCallback)(() => {
|
|
1151
|
-
if (feedbackState.status === 'success') {
|
|
1152
|
-
return renderSuccessStep();
|
|
1153
|
-
}
|
|
634
|
+
});
|
|
635
|
+
const renderCurrentStep = () => {
|
|
636
|
+
if (feedbackState.status === 'success') return renderSuccessStep();
|
|
1154
637
|
switch (currentStep) {
|
|
1155
638
|
case 0:
|
|
1156
639
|
return renderTypeStep();
|
|
@@ -1163,7 +646,7 @@ const FeedbackScreen = ({
|
|
|
1163
646
|
default:
|
|
1164
647
|
return renderTypeStep();
|
|
1165
648
|
}
|
|
1166
|
-
}
|
|
649
|
+
};
|
|
1167
650
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.KeyboardAvoidingView, {
|
|
1168
651
|
style: [styles.container, {
|
|
1169
652
|
backgroundColor: theme === 'dark' ? colors.background : '#F7F9FC'
|
|
@@ -1178,7 +661,7 @@ const FeedbackScreen = ({
|
|
|
1178
661
|
}],
|
|
1179
662
|
showsVerticalScrollIndicator: false,
|
|
1180
663
|
keyboardShouldPersistTaps: "handled",
|
|
1181
|
-
children: [feedbackState.status !== 'success' && /*#__PURE__*/(0, _jsxRuntime.jsx)(ProgressIndicator, {
|
|
664
|
+
children: [feedbackState.status !== 'success' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_feedback.ProgressIndicator, {
|
|
1182
665
|
currentStep: currentStep,
|
|
1183
666
|
totalSteps: 4,
|
|
1184
667
|
colors: colors,
|