From 2457b880cf29623101c01cdc0153a870f496998f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Colin?= Date: Sun, 14 Jan 2024 14:11:00 +0100 Subject: [PATCH] ui --- app/App.tsx | 5 +- app/src/screens/MainScreen.tsx | 29 +++--- app/src/screens/ProveScreen.tsx | 171 ++++++++++++-------------------- common/src/utils/types.ts | 2 +- 4 files changed, 85 insertions(+), 122 deletions(-) diff --git a/app/App.tsx b/app/App.tsx index 681a367d0..88c24efbf 100644 --- a/app/App.tsx +++ b/app/App.tsx @@ -88,7 +88,7 @@ function App(): JSX.Element { const [dateOfBirth, setDateOfBirth] = useState(DEFAULT_DOB ?? ''); const [dateOfExpiry, setDateOfExpiry] = useState(DEFAULT_DOE ?? ''); const [address, setAddress] = useState(DEFAULT_ADDRESS ?? ''); - const [passportData, setPassportData] = useState(mockPassportData); + const [passportData, setPassportData] = useState(samplePassportData); const [step, setStep] = useState('enterDetails'); const [testResult, setTestResult] = useState(null); const [error, setError] = useState(null); @@ -417,7 +417,8 @@ function App(): JSX.Element { handleDisclosureChange={handleDisclosureChange} address={address} setAddress={setAddress} - generatingProof={generatingProof}/> + generatingProof={generatingProof} + handleProve={handleProve}/> ) : null} {step === 'scanning' ? ( diff --git a/app/src/screens/MainScreen.tsx b/app/src/screens/MainScreen.tsx index e0259c8d4..e01bceb9e 100644 --- a/app/src/screens/MainScreen.tsx +++ b/app/src/screens/MainScreen.tsx @@ -9,12 +9,13 @@ import ProveScreen from './ProveScreen'; const MainScreen = ( {onStartCameraScan, nfcScan, -passportData, -disclosure, -handleDisclosureChange, -address, -setAddress, -generatingProof} + passportData, + disclosure, + handleDisclosureChange, + address, + setAddress, + generatingProof, + handleProve} ) => { // placeholder function for button press const [selectedTab, setSelectedTab] = useState("scan"); @@ -42,13 +43,15 @@ generatingProof} + passportData={passportData} + disclosure={disclosure} + handleDisclosureChange={handleDisclosureChange} + address={address} + setAddress={setAddress} + generatingProof={generatingProof} + handleProve={handleProve} + /> + diff --git a/app/src/screens/ProveScreen.tsx b/app/src/screens/ProveScreen.tsx index 792365ca8..5378af2df 100644 --- a/app/src/screens/ProveScreen.tsx +++ b/app/src/screens/ProveScreen.tsx @@ -1,119 +1,78 @@ -import React from 'react'; -import { - Checkbox, - Text, - Input, - Button, - Spinner, - YStack, // Tamagui's version of View with flex direction column - XStack, // for row layout - Theme, // for accessing theme values - useTheme -} from 'tamagui'; +import { View, Text, Checkbox, Input, Button } from 'tamagui'; +import { CheckIcon, ButtonSpinner, ButtonText, InputField, CheckboxIndicator } from '@tamagui/lucide-icons'; import { getFirstName } from '../../utils/utils'; -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - useColorScheme, - NativeModules, - DeviceEventEmitter, - TextInput -} from 'react-native'; +import { attributeToPosition } from '../../../common/src/constants/constants'; +const PassportDataComponent = ({ passportData, disclosure, handleDisclosureChange, address, setAddress, generatingProof, handleProve }) => { -const ProveScreen = ({ - passportData, - disclosure, - handleDisclosureChange, - address, - setAddress, - generatingProof, -}) => { - const { space } = useTheme(); // for margins and padding + + const attributeToPosition = { + issuing_state: [2, 5], + name: [5, 44], + passport_number: [44, 52], + nationality: [54, 57], + date_of_birth: [57, 63], + gender: [64, 65], + expiry_date: [65, 71], + } return ( - - - Hi {getFirstName(passportData.mrz)} - - - Signature algorithm: {passportData.signatureAlgorithm} - What do you want to disclose? + + Hi {getFirstName(passportData.mrz)} + + + Signature algorithm: {passportData.signatureAlgorithm} + What do you want to disclose ? + {Object.keys(disclosure).map((key) => { - // ... your logic for mapping disclosure keys + const keyy = key as keyof typeof disclosure; + const indexes = attributeToPosition[keyy]; + const keyFormatted = keyy.replace(/_/g, ' ').split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' '); + const mrzAttribute = passportData.mrz.slice(indexes[0], indexes[1]); + const mrzAttributeFormatted = mrzAttribute.replace(/ - - {/* ... your text components */} - + + + {keyFormatted}: + {mrzAttributeFormatted} + + {/* handleDisclosureChange(key)} - size="$4" - /> - + checked={disclosure[keyy]} + onChange={() => handleDisclosureChange(keyy)} + size="lg" + aria-label={key} + > + + + + + */} + ); - })} - + })} + + {/* Enter your address or ens - - - + + + + {generatingProof ? + : + + } */} + ); }; - -const styles = StyleSheet.create({ - view: { - flex: 1, - }, - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, - header: { - fontSize: 22, - fontWeight: 'bold', - textAlign: 'center', - marginTop: 20, - }, - testSection: { - backgroundColor: '#f2f2f2', // different background color - padding: 10, - borderTopWidth: 1, - borderTopColor: '#dcdcdc', // adding a border top with a light color - marginTop: 15, - }, - }); - -export default ProveScreen; +export default PassportDataComponent; diff --git a/common/src/utils/types.ts b/common/src/utils/types.ts index 0d43f40e5..3095e06e7 100644 --- a/common/src/utils/types.ts +++ b/common/src/utils/types.ts @@ -10,7 +10,7 @@ export type PassportData = { }; // Mock data for PassportData export const mockPassportData: PassportData = { - mrz: 'YourMockMRZ', + mrz: 'YourMockMR<