Add skipReselect Option (#1561)

* Add option to NFCMethodSelectionScreen

* update types

* update types
This commit is contained in:
Seshanth.S
2026-01-09 00:44:24 +05:30
committed by GitHub
parent 6e01b3c114
commit ab848221d0
7 changed files with 65 additions and 17 deletions

View File

@@ -17,7 +17,13 @@ export const useFeedbackAutoHide = () => {
// When screen goes out of focus, hide the feedback button
return () => {
hideFeedbackButton();
try {
hideFeedbackButton();
} catch (error) {
if (__DEV__) {
console.debug('Failed to hide feedback button:', error);
}
}
};
}, []),
);

View File

@@ -27,25 +27,38 @@ export const useFeedbackModal = () => {
timeoutRef.current = null;
}
switch (type) {
case 'button':
showFeedbackButton();
break;
case 'widget':
showFeedbackWidget();
break;
case 'custom':
setIsVisible(true);
break;
default:
showFeedbackButton();
try {
switch (type) {
case 'button':
showFeedbackButton();
break;
case 'widget':
showFeedbackWidget();
break;
case 'custom':
setIsVisible(true);
break;
default:
showFeedbackButton();
}
} catch (error) {
if (__DEV__) {
console.debug('Failed to show feedback button/widget:', error);
}
setIsVisible(true);
}
// we can close the feedback modals(sentry and custom modals), but can't do so for the Feedback button.
// This hides the button after 10 seconds.
if (type === 'button') {
timeoutRef.current = setTimeout(() => {
hideFeedbackButton();
try {
hideFeedbackButton();
} catch (error) {
if (__DEV__) {
console.debug('Failed to hide feedback button:', error);
}
}
timeoutRef.current = null;
}, 10000);
}
@@ -57,7 +70,13 @@ export const useFeedbackModal = () => {
timeoutRef.current = null;
}
hideFeedbackButton();
try {
hideFeedbackButton();
} catch (error) {
if (__DEV__) {
console.debug('Failed to hide feedback button:', error);
}
}
setIsVisible(false);
}, []);

View File

@@ -27,6 +27,7 @@ interface Inputs {
usePacePolling?: boolean;
sessionId: string;
userId?: string;
skipReselect?: boolean;
}
interface DataGroupHash {
@@ -91,6 +92,7 @@ const scanAndroid = async (
canNumber: inputs.canNumber ?? '',
useCan: inputs.useCan ?? false,
sessionId: inputs.sessionId,
skipReselect: inputs.skipReselect ?? false,
});
};

View File

@@ -16,6 +16,7 @@ type ScanOptions = {
usePacePolling?: boolean;
sessionId?: string;
quality?: number;
skipReselect?: boolean;
};
export interface AndroidScanResponse {
@@ -91,6 +92,8 @@ if (Platform.OS === 'android') {
canNumber = '',
useCan = false,
quality = 1,
skipReselect = false,
sessionId,
} = options;
return androidScan({
@@ -100,6 +103,8 @@ if (Platform.OS === 'android') {
canNumber,
useCan,
quality,
skipReselect,
sessionId,
});
};
}

View File

@@ -39,6 +39,13 @@ const NFC_METHODS = [
platform: ['ios'],
params: {},
},
{
key: 'skipReselect',
label: 'Skip Re-select',
description: 'Skip the re-select step after the NFC scan.',
platform: ['android'],
params: { skipReselect: true },
},
{
key: 'usePacePolling',
label: 'Use PACE Polling',

View File

@@ -81,6 +81,7 @@ const emitter =
: null;
type DocumentNFCScanRouteParams = {
skipReselect?: boolean;
usePacePolling?: boolean;
canNumber?: string;
useCan?: boolean;
@@ -326,8 +327,14 @@ const DocumentNFCScanScreen: React.FC = () => {
}, 30000);
try {
const { canNumber, useCan, skipPACE, skipCA, extendedMode } =
route.params ?? {};
const {
canNumber,
useCan,
skipPACE,
skipCA,
extendedMode,
skipReselect,
} = route.params ?? {};
await configureNfcAnalytics();
const scanResponse = await scan({
@@ -341,6 +348,7 @@ const DocumentNFCScanScreen: React.FC = () => {
extendedMode,
usePacePolling: isPacePolling,
sessionId: sessionIdRef.current,
skipReselect,
});
// Check if scan was cancelled by timeout

View File

@@ -11,6 +11,7 @@ declare module 'react-native-passport-reader' {
useCan: boolean;
quality?: number;
sessionId?: string;
skipReselect?: boolean;
}
interface PassportReader {