introduce usePrepareDocumentProof in mobile SDK (#1176)

* introduce usePrepareDocumentProof in mobile SDK

* revert haptic feedback + lint
This commit is contained in:
Leszek Stachowski
2025-10-01 15:08:48 +02:00
committed by GitHub
parent 1856c9b325
commit 3b14f09c30
4 changed files with 41 additions and 26 deletions

View File

@@ -8,7 +8,10 @@ import { ActivityIndicator, View } from 'react-native';
import type { StaticScreenProps } from '@react-navigation/native';
import { usePreventRemove } from '@react-navigation/native';
import { loadSelectedDocument, useSelfClient } from '@selfxyz/mobile-sdk-alpha';
import {
usePrepareDocumentProof,
useSelfClient,
} from '@selfxyz/mobile-sdk-alpha';
import {
PassportEvents,
ProofEvents,
@@ -34,35 +37,17 @@ type ConfirmBelongingScreenProps = StaticScreenProps<Record<string, never>>;
const ConfirmBelongingScreen: React.FC<ConfirmBelongingScreenProps> = () => {
const selfClient = useSelfClient();
const { useProvingStore, trackEvent } = selfClient;
const { trackEvent } = selfClient;
const navigate = useHapticNavigation('Loading', {
params: {},
});
const [_requestingPermission, setRequestingPermission] = useState(false);
const currentState = useProvingStore(state => state.currentState);
const init = useProvingStore(state => state.init);
const setUserConfirmed = useProvingStore(state => state.setUserConfirmed);
const { setUserConfirmed, isReadyToProve } = usePrepareDocumentProof();
const setFcmToken = useSettingStore(state => state.setFcmToken);
const isReadyToProve = currentState === 'ready_to_prove';
useEffect(() => {
notificationSuccess();
const initializeProving = async () => {
try {
const selectedDocument = await loadSelectedDocument(selfClient);
if (selectedDocument?.data?.documentCategory === 'aadhaar') {
init(selfClient, 'register');
} else {
init(selfClient, 'dsc');
}
} catch (error) {
console.error('Error loading selected document:', error);
init(selfClient, 'dsc');
}
};
initializeProving();
}, [init, selfClient]);
}, []);
const onOkPress = async () => {
try {

View File

@@ -39,7 +39,7 @@ export { SCANNER_ERROR_CODES, notImplemented, sdkError } from './errors';
export { SdkEvents } from './types/events';
export { SelfClientContext, SelfClientProvider, useSelfClient } from './context';
export { SelfClientContext, SelfClientProvider, usePrepareDocumentProof, useSelfClient } from './context';
export {
clearPassportData,

View File

@@ -2,9 +2,10 @@
// SPDX-License-Identifier: BUSL-1.1
// NOTE: Converts to Apache-2.0 on 2029-06-11 per LICENSE.
import { createContext, type PropsWithChildren, useContext, useMemo } from 'react';
import { createContext, type PropsWithChildren, useContext, useEffect, useMemo } from 'react';
import { createSelfClient } from './client';
import { loadSelectedDocument } from './documents/utils';
import { SdkEvents } from './types/events';
import type { Adapters, Config, SelfClient } from './types/public';
@@ -56,6 +57,35 @@ export function SelfClientProvider({
return <SelfClientContext.Provider value={client}>{children}</SelfClientContext.Provider>;
}
export function usePrepareDocumentProof() {
const selfClient = useSelfClient();
const { useProvingStore } = selfClient;
const currentState = useProvingStore(state => state.currentState);
const init = useProvingStore(state => state.init);
const setUserConfirmed = useProvingStore(state => state.setUserConfirmed);
const isReadyToProve = currentState === 'ready_to_prove';
useEffect(() => {
const initializeProving = async () => {
try {
const selectedDocument = await loadSelectedDocument(selfClient);
if (selectedDocument?.data?.documentCategory === 'aadhaar') {
init(selfClient, 'register');
} else {
init(selfClient, 'dsc');
}
} catch (error) {
console.error('Error loading selected document:', error);
init(selfClient, 'dsc');
}
};
initializeProving();
}, [init, selfClient]);
return { setUserConfirmed, isReadyToProve };
}
/**
* Retrieves the current {@link SelfClient} from context.
*

View File

@@ -68,7 +68,7 @@ export { QRCodeScreen } from './components/screens/QRCodeScreen';
export { SdkEvents } from './types/events';
// Components
export { SelfClientContext, SelfClientProvider, useSelfClient } from './context';
export { SelfClientContext, SelfClientProvider, usePrepareDocumentProof, useSelfClient } from './context';
// Documents utils
export { SelfMobileSdk } from './entry';