@oxyhq/services
Version:
674 lines (673 loc) • 27.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _index = require("../styles/index.js");
var _themeUtils = require("../utils/themeUtils.js");
var _vectorIcons = require("@expo/vector-icons");
var _sonner = require("../../lib/sonner");
var _core = require("@oxyhq/core");
var _index2 = require("../components/index.js");
var _useI18n = require("../hooks/useI18n.js");
var _OxyContext = require("../context/OxyContext.js");
var _index3 = require("../components/feedback/index.js");
var _jsxRuntime = require("react/jsx-runtime");
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); }
const FeedbackScreen = ({
navigate,
goBack,
onClose,
theme
}) => {
const {
user,
oxyServices
} = (0, _OxyContext.useOxy)();
const normalizedTheme = (0, _themeUtils.normalizeTheme)(theme);
const colors = (0, _index.useThemeColors)(normalizedTheme);
const {
t
} = (0, _useI18n.useI18n)();
const {
feedbackData,
feedbackState,
setFeedbackState,
updateField,
resetForm
} = (0, _index3.useFeedbackForm)();
const [currentStep, setCurrentStep] = (0, _react.useState)(0);
const [errorMessage, setErrorMessage] = (0, _react.useState)('');
const fadeAnim = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
const slideAnim = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
const styles = (0, _react.useMemo)(() => (0, _index3.createFeedbackStyles)(colors), [colors]);
const animateTransition = (0, _react.useCallback)(nextStep => {
_reactNative.Animated.timing(fadeAnim, {
toValue: 0,
duration: 250,
useNativeDriver: _reactNative.Platform.OS !== 'web'
}).start(() => {
setCurrentStep(nextStep);
slideAnim.setValue(-100);
_reactNative.Animated.parallel([_reactNative.Animated.timing(fadeAnim, {
toValue: 1,
duration: 250,
useNativeDriver: _reactNative.Platform.OS !== 'web'
}), _reactNative.Animated.timing(slideAnim, {
toValue: 0,
duration: 300,
useNativeDriver: _reactNative.Platform.OS !== 'web'
})]).start();
});
}, [fadeAnim, slideAnim]);
const nextStep = (0, _react.useCallback)(() => {
if (currentStep < 3) {
animateTransition(currentStep + 1);
}
}, [currentStep, animateTransition]);
const prevStep = (0, _react.useCallback)(() => {
if (currentStep > 0) {
animateTransition(currentStep - 1);
}
}, [currentStep, animateTransition]);
const isTypeStepValid = (0, _react.useCallback)(() => {
return feedbackData.type && feedbackData.category;
}, [feedbackData.type, feedbackData.category]);
const isDetailsStepValid = (0, _react.useCallback)(() => {
return feedbackData.title.trim() && feedbackData.description.trim();
}, [feedbackData.title, feedbackData.description]);
const isContactStepValid = (0, _react.useCallback)(() => {
return feedbackData.contactEmail.trim() || user?.email;
}, [feedbackData.contactEmail, user?.email]);
const handleSubmitFeedback = (0, _react.useCallback)(async () => {
if (!isTypeStepValid() || !isDetailsStepValid() || !isContactStepValid()) {
_sonner.toast.error(t('feedback.toasts.fillRequired') || 'Please fill in all required fields');
return;
}
try {
setFeedbackState({
status: 'submitting',
message: ''
});
setErrorMessage('');
const feedbackPayload = {
type: feedbackData.type,
title: feedbackData.title,
description: feedbackData.description,
priority: feedbackData.priority,
category: feedbackData.category,
contactEmail: feedbackData.contactEmail || user?.email,
systemInfo: feedbackData.systemInfo ? {
platform: _reactNative.Platform.OS,
version: _reactNative.Platform.Version?.toString() || 'Unknown',
appVersion: _core.packageInfo.version,
userId: user?.id,
username: user?.username,
timestamp: new Date().toISOString()
} : undefined
};
await oxyServices.submitFeedback(feedbackPayload);
setFeedbackState({
status: 'success',
message: t('feedback.toasts.submitSuccess') || 'Feedback submitted successfully!'
});
_sonner.toast.success(t('feedback.toasts.thanks') || 'Thank you for your feedback!');
setTimeout(() => {
resetForm();
setCurrentStep(0);
}, 3000);
} catch (error) {
setFeedbackState({
status: 'error',
message: error.message || t('feedback.toasts.submitFailed') || 'Failed to submit feedback'
});
_sonner.toast.error(error.message || t('feedback.toasts.submitFailed') || 'Failed to submit feedback');
}
}, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
const feedbackTypeItems = (0, _react.useMemo)(() => _index3.FEEDBACK_TYPES.map(type => ({
id: type.id,
icon: type.icon,
iconColor: type.color,
title: type.label,
subtitle: type.description,
onPress: () => {
updateField('type', type.id);
updateField('category', '');
},
selected: feedbackData.type === type.id,
showChevron: false,
multiRow: true,
dense: true
})), [feedbackData.type, updateField]);
const categoryItems = (0, _react.useMemo)(() => feedbackData.type ? (_index3.CATEGORIES[feedbackData.type] || []).map(cat => ({
id: cat,
icon: feedbackData.category === cat ? 'check-circle' : 'ellipse-outline',
iconColor: feedbackData.category === cat ? colors.primary : colors.secondaryText,
title: cat,
onPress: () => updateField('category', cat),
selected: feedbackData.category === cat,
showChevron: false,
dense: true
})) : [], [feedbackData.type, feedbackData.category, colors.primary, colors.secondaryText, updateField]);
const priorityItems = (0, _react.useMemo)(() => _index3.PRIORITY_LEVELS.map(p => ({
id: p.id,
icon: p.icon,
iconColor: p.color,
title: p.label,
onPress: () => updateField('priority', p.id),
selected: feedbackData.priority === p.id,
showChevron: false,
dense: true
})), [feedbackData.priority, updateField]);
const renderTypeStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
style: [styles.stepContainer, {
opacity: fadeAnim,
transform: [{
translateX: slideAnim
}]
}],
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.modernHeader,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.stepTitle, {
color: colors.text
}],
children: t('feedback.type.title') || 'What type of feedback?'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernSubtitle, {
color: colors.secondaryText
}],
children: t('feedback.type.subtitle') || 'Choose the category that best describes your feedback'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: styles.fullBleed,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.GroupedSection, {
items: feedbackTypeItems
})
}), feedbackData.type && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.categoryContainer,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernLabel, {
color: colors.secondaryText,
marginBottom: 8
}],
children: t('feedback.category.label') || 'Category'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: styles.fullBleed,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.GroupedSection, {
items: categoryItems
})
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.navigationButtons,
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, {
backgroundColor: 'transparent',
borderColor: colors.border,
borderRadius: 35
}],
onPress: goBack,
accessibilityRole: "button",
accessibilityLabel: "Go back",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-back",
size: 16,
color: colors.text
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: colors.text
}],
children: t('common.actions.back') || 'Back'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, {
backgroundColor: colors.primary,
borderColor: colors.primary,
borderRadius: 35
}],
onPress: nextStep,
disabled: !isTypeStepValid(),
accessibilityRole: "button",
accessibilityLabel: "Continue to next step",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: '#FFFFFF'
}],
children: t('common.actions.next') || 'Next'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-forward",
size: 16,
color: "#FFFFFF"
})]
})]
})]
});
const renderDetailsStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
style: [styles.stepContainer, {
opacity: fadeAnim,
transform: [{
translateX: slideAnim
}]
}],
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.modernHeader,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.stepTitle, {
color: colors.text
}],
children: t('feedback.details.title') || 'Tell us more'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernSubtitle, {
color: colors.secondaryText
}],
children: t('feedback.details.subtitle') || 'Provide details about your feedback'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.FormInput, {
icon: "create-outline",
label: t('feedback.fields.title.label') || 'Title',
value: feedbackData.title,
onChangeText: text => {
updateField('title', text);
setErrorMessage('');
},
placeholder: t('feedback.fields.title.placeholder') || 'Brief summary of your feedback',
testID: "feedback-title-input",
colors: colors,
styles: styles,
accessibilityLabel: "Feedback title",
accessibilityHint: "Enter a brief summary of your feedback"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.FormInput, {
icon: "document-text-outline",
label: t('feedback.fields.description.label') || 'Description',
value: feedbackData.description,
onChangeText: text => {
updateField('description', text);
setErrorMessage('');
},
placeholder: t('feedback.fields.description.placeholder') || 'Please provide detailed information...',
multiline: true,
numberOfLines: 6,
testID: "feedback-description-input",
colors: colors,
styles: styles,
accessibilityLabel: "Feedback description",
accessibilityHint: "Provide detailed information about your feedback"
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: {
marginBottom: 24
},
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernLabel, {
color: colors.secondaryText,
marginBottom: 8
}],
children: t('feedback.priority.label') || 'Priority Level'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: styles.fullBleed,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.GroupedSection, {
items: priorityItems
})
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.navigationButtons,
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, styles.backButton, {
borderColor: colors.border
}],
onPress: prevStep,
accessibilityRole: "button",
accessibilityLabel: "Go back",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-back",
size: 16,
color: colors.text
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: colors.text
}],
children: t('common.actions.back') || 'Back'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, styles.nextButton, {
backgroundColor: colors.primary,
borderColor: colors.primary
}],
onPress: nextStep,
disabled: !isDetailsStepValid(),
accessibilityRole: "button",
accessibilityLabel: "Continue to next step",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: '#FFFFFF'
}],
children: t('common.actions.next') || 'Next'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-forward",
size: 16,
color: "#FFFFFF"
})]
})]
})]
});
const renderContactStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
style: [styles.stepContainer, {
opacity: fadeAnim,
transform: [{
translateX: slideAnim
}]
}],
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.modernHeader,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.stepTitle, {
color: colors.text
}],
children: t('feedback.contact.title') || 'Contact Information'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernSubtitle, {
color: colors.secondaryText
}],
children: t('feedback.contact.subtitle') || 'Help us get back to you'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.FormInput, {
icon: "mail-outline",
label: t('feedback.fields.email.label') || 'Email Address',
value: feedbackData.contactEmail,
onChangeText: text => {
updateField('contactEmail', text);
setErrorMessage('');
},
placeholder: user?.email || t('feedback.fields.email.placeholder') || 'Enter your email address',
testID: "feedback-email-input",
colors: colors,
styles: styles,
accessibilityLabel: "Email address",
accessibilityHint: "Enter your email so we can respond"
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.checkboxContainer,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
style: [styles.checkbox, {
borderColor: feedbackData.systemInfo ? colors.primary : colors.border,
backgroundColor: feedbackData.systemInfo ? colors.primary : 'transparent'
}],
onPress: () => updateField('systemInfo', !feedbackData.systemInfo),
accessibilityRole: "checkbox",
accessibilityState: {
checked: feedbackData.systemInfo
},
accessibilityLabel: "Include system information",
children: feedbackData.systemInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "checkmark",
size: 16,
color: "#FFFFFF"
})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.checkboxText, {
color: colors.text
}],
children: t('feedback.contact.includeSystemInfo') || 'Include system information to help us better understand your issue'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.navigationButtons,
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, styles.backButton, {
borderColor: colors.border
}],
onPress: prevStep,
accessibilityRole: "button",
accessibilityLabel: "Go back",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-back",
size: 16,
color: colors.text
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: colors.text
}],
children: "Back"
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, styles.nextButton, {
backgroundColor: colors.primary,
borderColor: colors.primary
}],
onPress: nextStep,
disabled: !isContactStepValid(),
accessibilityRole: "button",
accessibilityLabel: "Continue to summary",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: '#FFFFFF'
}],
children: "Next"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-forward",
size: 16,
color: "#FFFFFF"
})]
})]
})]
});
const renderSummaryStep = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
style: [styles.stepContainer, {
opacity: fadeAnim,
transform: [{
translateX: slideAnim
}]
}],
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.modernHeader,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.stepTitle, {
color: colors.text
}],
children: t('feedback.summary.title') || 'Summary'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernSubtitle, {
color: colors.secondaryText
}],
children: t('feedback.summary.subtitle') || 'Please review your feedback before submitting'
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryContainer,
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryRow,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryLabel, {
color: colors.secondaryText
}],
children: "Type:"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryValue, {
color: colors.text
}],
children: _index3.FEEDBACK_TYPES.find(t => t.id === feedbackData.type)?.label
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryRow,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryLabel, {
color: colors.secondaryText
}],
children: "Category:"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryValue, {
color: colors.text
}],
children: feedbackData.category
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryRow,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryLabel, {
color: colors.secondaryText
}],
children: "Priority:"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryValue, {
color: colors.text
}],
children: _index3.PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryRow,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryLabel, {
color: colors.secondaryText
}],
children: "Title:"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryValue, {
color: colors.text
}],
children: feedbackData.title
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.summaryRow,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryLabel, {
color: colors.secondaryText
}],
children: "Contact:"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.summaryValue, {
color: colors.text
}],
children: feedbackData.contactEmail || user?.email
})]
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
style: [styles.button, {
backgroundColor: colors.primary
}],
onPress: handleSubmitFeedback,
disabled: feedbackState.status === 'submitting',
testID: "submit-feedback-button",
accessibilityRole: "button",
accessibilityLabel: "Submit feedback",
children: feedbackState.status === 'submitting' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
color: "#FFFFFF",
size: "small"
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: styles.buttonText,
children: t('feedback.actions.submit') || 'Submit Feedback'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "send",
size: 20,
color: "#FFFFFF"
})]
})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: styles.navigationButtons,
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
style: [styles.navButton, {
backgroundColor: 'transparent',
borderColor: colors.border,
borderRadius: 35
}],
onPress: prevStep,
accessibilityRole: "button",
accessibilityLabel: "Go back",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "arrow-back",
size: 16,
color: colors.text
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.navButtonText, {
color: colors.text
}],
children: t('common.actions.back') || 'Back'
})]
})
})]
});
const renderSuccessStep = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
style: [styles.stepContainer, {
opacity: fadeAnim,
transform: [{
translateX: slideAnim
}]
}],
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: styles.successContainer,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: [styles.successIcon, {
backgroundColor: (colors.success || '#34C759') + '20',
padding: 24,
borderRadius: 50
}],
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "checkmark-circle",
size: 48,
color: colors.success || '#34C759'
})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.successTitle, {
color: colors.text
}],
children: t('feedback.success.thanks') || 'Thank You!'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.successMessage, {
color: colors.secondaryText
}],
children: t('feedback.success.message') || "Your feedback has been submitted successfully. We'll review it and get back to you soon."
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
style: [styles.button, {
backgroundColor: colors.primary
}],
onPress: () => {
resetForm();
setCurrentStep(0);
},
accessibilityRole: "button",
accessibilityLabel: "Submit another feedback",
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: styles.buttonText,
children: t('feedback.actions.submitAnother') || 'Submit Another'
})
})]
})
});
const renderCurrentStep = () => {
if (feedbackState.status === 'success') return renderSuccessStep();
switch (currentStep) {
case 0:
return renderTypeStep();
case 1:
return renderDetailsStep();
case 2:
return renderContactStep();
case 3:
return renderSummaryStep();
default:
return renderTypeStep();
}
};
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.KeyboardAvoidingView, {
style: [styles.container, {
backgroundColor: theme === 'dark' ? colors.background : '#F7F9FC'
}],
behavior: _reactNative.Platform.OS === 'ios' ? 'padding' : 'height',
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.StatusBar, {
barStyle: theme === 'dark' ? 'light-content' : 'dark-content',
backgroundColor: theme === 'dark' ? colors.background : '#F7F9FC'
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
contentContainerStyle: [styles.scrollContent, {
backgroundColor: 'transparent'
}],
showsVerticalScrollIndicator: false,
keyboardShouldPersistTaps: "handled",
children: [feedbackState.status !== 'success' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.ProgressIndicator, {
currentStep: currentStep,
totalSteps: 4,
colors: colors,
styles: styles
}), renderCurrentStep()]
})]
});
};
var _default = exports.default = FeedbackScreen;
//# sourceMappingURL=FeedbackScreen.js.map