@oxyhq/services
Version:
Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀
135 lines (134 loc) • 4.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _vectorIcons = require("@expo/vector-icons");
var _HighFive = _interopRequireDefault(require("../../../assets/illustrations/HighFive"));
var _TextField = _interopRequireDefault(require("../../components/internal/TextField"));
var _GroupedPillButtons = _interopRequireDefault(require("../../components/internal/GroupedPillButtons"));
var _sonner = require("../../../lib/sonner");
var _useI18n = require("../../hooks/useI18n");
var _spacing = require("../../styles/spacing");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const RecoverRequestStep = ({
colors,
styles,
navigate,
nextStep,
identifier,
setIdentifier,
errorMessage,
setErrorMessage,
isLoading,
setIsLoading,
oxyServices
}) => {
const inputRef = (0, _react.useRef)(null);
const {
t
} = (0, _useI18n.useI18n)();
const baseStyles = _spacing.stepStyles;
const handleIdentifierChange = text => {
setIdentifier(text);
if (errorMessage) setErrorMessage('');
};
const handleRequest = async () => {
if (!identifier || identifier.length < 3) {
setErrorMessage(t('recover.username.errorRequired') || 'Please enter your username.');
setTimeout(() => inputRef.current?.focus(), 0);
return;
}
setErrorMessage('');
setIsLoading(true);
try {
_sonner.toast.info(t('recover.noEmail'));
} finally {
setIsLoading(false);
}
};
const handleRequestWithFocus = () => {
if (!identifier) {
setTimeout(() => inputRef.current?.focus(), 0);
}
handleRequest();
};
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: [baseStyles.container, baseStyles.sectionSpacing, {
alignItems: 'flex-start'
}],
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_HighFive.default, {
width: 100,
height: 100
})
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: [baseStyles.container, baseStyles.sectionSpacing, baseStyles.header],
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernTitle, baseStyles.title, {
color: colors.text,
marginBottom: 0,
marginTop: 0
}],
children: t('recover.title')
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: [styles.modernSubtitle, baseStyles.subtitle, {
color: colors.secondaryText,
marginBottom: 0,
marginTop: 0
}],
children: t('recover.noEmail')
})]
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: [baseStyles.container, baseStyles.sectionSpacing],
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
ref: inputRef,
label: t('recover.username.label'),
leading: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
name: "mail-outline",
size: 24,
color: colors.secondaryText
}),
value: identifier,
onChangeText: handleIdentifierChange,
autoCapitalize: "none",
autoCorrect: false,
testID: "recover-identifier-input",
variant: "filled",
error: errorMessage || undefined,
helperText: t('recover.username.helper') || 'Enter your username or email',
editable: !isLoading,
onSubmitEditing: handleRequestWithFocus,
autoFocus: true,
accessibilityLabel: t('recover.username.label'),
accessibilityHint: t('recover.username.helper') || 'Enter your username or email to recover your account',
style: {
marginBottom: 0
}
})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
style: [baseStyles.container, baseStyles.sectionSpacing, baseStyles.buttonContainer],
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupedPillButtons.default, {
buttons: [{
text: t('common.actions.back'),
onPress: () => navigate('SignIn'),
icon: 'arrow-back',
variant: 'transparent'
}, {
text: t('common.actions.continue'),
onPress: handleRequest,
icon: 'information-circle-outline',
variant: 'primary',
loading: isLoading,
disabled: isLoading || !identifier || identifier.length < 3
}],
colors: colors
})
})]
});
};
var _default = exports.default = RecoverRequestStep;
//# sourceMappingURL=RecoverRequestStep.js.map