added insert pin interface
This commit is contained in:
parent
5855b788ec
commit
51c67775f9
|
@ -2,6 +2,7 @@ import { SafeAreaView, StyleSheet, Text, View, Dimensions } from "react-native";
|
||||||
import React, {FC, useState } from "react";
|
import React, {FC, useState } from "react";
|
||||||
import DialpadKeypad from "./DialpadKeypad";
|
import DialpadKeypad from "./DialpadKeypad";
|
||||||
import Button from "./Button";
|
import Button from "./Button";
|
||||||
|
import DialpadPin from "./DialpadPin";
|
||||||
|
|
||||||
const { width, height } = Dimensions.get("window");
|
const { width, height } = Dimensions.get("window");
|
||||||
|
|
||||||
|
@ -16,8 +17,11 @@ const CustomDialpad: FC<CustomDialpadProps> = props => {
|
||||||
const dialPadSize = width * 0.2;
|
const dialPadSize = width * 0.2;
|
||||||
const dialPadTextSize = dialPadSize * 0.36;
|
const dialPadTextSize = dialPadSize * 0.36;
|
||||||
const [code, setCode] = useState([]);
|
const [code, setCode] = useState([]);
|
||||||
|
|
||||||
const pinLength = 6;
|
const pinLength = 6;
|
||||||
|
const pinContainerSize = width / 2;
|
||||||
|
const pinSize = pinContainerSize / pinLength;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const updateCode = (item: never) => {
|
const updateCode = (item: never) => {
|
||||||
if (item === "X") {
|
if (item === "X") {
|
||||||
|
@ -32,7 +36,8 @@ const CustomDialpad: FC<CustomDialpadProps> = props => {
|
||||||
<View style={styles.textContainer}>
|
<View style={styles.textContainer}>
|
||||||
<Text style={styles.pinText}>Create PIN</Text>
|
<Text style={styles.pinText}>Create PIN</Text>
|
||||||
<Text style={styles.pinSubText}>Enter your secure six-digit code</Text>
|
<Text style={styles.pinSubText}>Enter your secure six-digit code</Text>
|
||||||
<DialpadKeypad dialPadContent={dialPadContent} pinLength={pinLength} dialPadSize={dialPadSize} dialPadTextSize={dialPadTextSize} setCode={updateCode} code={code}/>
|
<DialpadPin pinLength={pinLength} pinSize={pinSize} code={code} dialPadContent={dialPadContent} />
|
||||||
|
<DialpadKeypad dialPadContent={dialPadContent} pinLength={pinLength} dialPadSize={dialPadSize} dialPadTextSize={dialPadTextSize} updateCodeFunc={updateCode} code={code}/>
|
||||||
</View>
|
</View>
|
||||||
<View style={styles.btnContainer}>
|
<View style={styles.btnContainer}>
|
||||||
<Button label="Cancel" disabled={false} btnColor="#4A646C" btnWidth="50%" onChangeFunc={onCancelFunc} btnJustifyContent='center'></Button>
|
<Button label="Cancel" disabled={false} btnColor="#4A646C" btnWidth="50%" onChangeFunc={onCancelFunc} btnJustifyContent='center'></Button>
|
||||||
|
|
|
@ -8,16 +8,16 @@ type DialpadKeypadProps = {
|
||||||
dialPadSize: number;
|
dialPadSize: number;
|
||||||
dialPadTextSize: number;
|
dialPadTextSize: number;
|
||||||
code: number[];
|
code: number[];
|
||||||
setCode: (item: never) => void;
|
updateCodeFunc: (item: never) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const DialpadKeypad: FC<DialpadKeypadProps> = props => {
|
const DialpadKeypad: FC<DialpadKeypadProps> = props => {
|
||||||
const {dialPadContent, pinLength, dialPadSize, dialPadTextSize} = props;
|
const {dialPadContent, pinLength, dialPadSize, dialPadTextSize, code, updateCodeFunc} = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FlatList data={dialPadContent} numColumns={3} keyExtractor={(_, index) => index.toString()} renderItem={({ item }) => {
|
<FlatList data={dialPadContent} numColumns={3} keyExtractor={(_, index) => index.toString()} renderItem={({ item }) => {
|
||||||
return (
|
return (
|
||||||
<TouchableOpacity disabled={item === ""}>
|
<TouchableOpacity disabled={item === ""} onPress={() => updateCodeFunc(item as never)}>
|
||||||
<View style={[
|
<View style={[
|
||||||
{
|
{
|
||||||
backgroundColor: item === "" ? "transparent" : "#fff",
|
backgroundColor: item === "" ? "transparent" : "#fff",
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
import {FC } from "react";
|
||||||
|
import { StyleSheet, Text, View, FlatList, TouchableOpacity } from "react-native";
|
||||||
|
import Icon from 'react-native-vector-icons/Feather';
|
||||||
|
|
||||||
|
type DialpadPinProps = {
|
||||||
|
pinSize: number;
|
||||||
|
pinLength: number;
|
||||||
|
code: any[];
|
||||||
|
dialPadContent: any[];
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialpadPin: FC<DialpadPinProps> = props => {
|
||||||
|
const {dialPadContent, pinLength, code, pinSize} = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={styles.dialPadPinContainer}>
|
||||||
|
{Array(pinLength)
|
||||||
|
.fill(undefined)
|
||||||
|
.map((_, index) => {
|
||||||
|
const item = dialPadContent[index];
|
||||||
|
const isSelected =
|
||||||
|
typeof item === "number" && code[index] !== undefined;
|
||||||
|
return (
|
||||||
|
<View
|
||||||
|
key={index}
|
||||||
|
style={{
|
||||||
|
width: pinSize,
|
||||||
|
height: pinSize,
|
||||||
|
borderRadius: pinSize / 2,
|
||||||
|
overflow: "hidden",
|
||||||
|
margin: 5,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<View
|
||||||
|
style={[
|
||||||
|
{
|
||||||
|
borderRadius: pinSize / 2,
|
||||||
|
borderColor: !isSelected ? "lightgrey" : "#3F1D38",
|
||||||
|
},
|
||||||
|
styles.pinContentContainer,
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
{isSelected && (
|
||||||
|
<View
|
||||||
|
style={[
|
||||||
|
{
|
||||||
|
width: pinSize * 0.5,
|
||||||
|
height: pinSize * 0.5,
|
||||||
|
borderRadius: pinSize * 0.35,
|
||||||
|
},
|
||||||
|
styles.pinContent,
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
dialPadPinContainer: {
|
||||||
|
flexDirection: "row",
|
||||||
|
marginBottom: 30,
|
||||||
|
alignItems: "flex-end",
|
||||||
|
},
|
||||||
|
pinContentContainer: {
|
||||||
|
flex: 1,
|
||||||
|
backgroundColor: "#fff",
|
||||||
|
borderWidth: 1,
|
||||||
|
justifyContent: "center",
|
||||||
|
alignItems: "center",
|
||||||
|
},
|
||||||
|
pinContent: {
|
||||||
|
backgroundColor: "#5E454B",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default DialpadPin;
|
Loading…
Reference in New Issue