Files
QMS/fe/mobile/src/screens/CodeEnterScreen.tsx
T
ISMAIL MASSERAN 3189e3a1e3 DONE: first init
2026-07-20 16:10:22 +08:00

128 lines
3.6 KiB
TypeScript

import React, { useState } from "react";
import {
SafeAreaView,
StyleSheet,
TextInput,
Pressable,
Text,
Alert,
ActivityIndicator,
View,
} from "react-native";
import { registerRootComponent } from "expo";
import { getCompanyBranches, getCompanyDetails } from "../services/fetchData";
import { Dialogs } from "../constants/dialogs";
import { Colors } from "../constants/colors";
import { Screens } from "../constants/screens";
import { Dimensions } from 'react-native';
const screenWidth = Dimensions.get('window').width;
const buttonWidth = screenWidth * 0.5;
export default function CodeEnterScreen({ navigation }: { navigation: any }) {
const [text, onChangeText] = React.useState("");
const [isLoading, setIsLoading] = useState(false);
function displayInvalidCodeAlert() {
Alert.alert(
Dialogs.ERROR.INVALID_CODE,
Dialogs.ERROR.INVALID_CODE_DESC,
[{ text: Dialogs.BUTTON.OK }],
{ cancelable: false }
);
}
async function handlePress() {
setIsLoading(true);
// await new Promise((resolve) => setTimeout(resolve, 2000));
const code = text;
getCompanyDetails(code)
.then(function (details) {
setIsLoading(false);
getCompanyBranches(code)
.then(function (branches){
navigation.navigate(Screens.BRANCH_PICK, {
details: details, branches: branches, code
});})
})
.catch((error) => {
console.error("Error:", error);
setIsLoading(false);
displayInvalidCodeAlert();
});
}
return (
<SafeAreaView style={styles.area}>
{isLoading && <ActivityIndicator style={styles.loader} size={75} />}
{isLoading && <View style={styles.loadingArea}></View>}
<TextInput
style={styles.input}
onChangeText={(text) => onChangeText(text)}
value={text}
placeholder={Dialogs.PROMPT.ENTER_CODE}
/>
<Pressable
style={({ pressed }) => [
styles.button,
pressed ? styles.buttonPressed : null,
]}
onPress={handlePress}
>
<Text style={styles.text}>{Dialogs.BUTTON.SUBMIT}</Text>
</Pressable>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
loadingArea: {
position: "absolute",
zIndex: 2,
height: "100%",
width: "100%",
backgroundColor: "rgba(255, 255, 255, 0.75)",
},
loader: {
position: "absolute",
zIndex: 100,
},
input: {
height: 40,
margin: 12,
borderWidth: 1,
padding: 10,
textAlign: "center",
width: 220,
},
area: {
justifyContent: "center",
alignItems: "center",
flex: 1,
},
button: {
alignItems: "center",
justifyContent: "center",
paddingVertical: 12,
paddingHorizontal: 32,
borderRadius: 4,
elevation: 3,
width: buttonWidth, // Adjusted dynamically based on screen width
backgroundColor: Colors.ACCENT,
},
buttonPressed: {
backgroundColor: Colors.PRIMARY,
},
text: {
fontSize: 16,
lineHeight: 21,
fontWeight: "bold",
letterSpacing: 0.25,
color: "white",
},
});
registerRootComponent(({ navigation }) => <CodeEnterScreen navigation={navigation} />);