@unif/react-native-hms-scan 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -13,6 +13,8 @@ import { ScanToolbar } from "./ScanToolbar.js";
|
|
|
13
13
|
import { ResultFocus } from "./ResultFocus.js";
|
|
14
14
|
import { ResultFail } from "./ResultFail.js";
|
|
15
15
|
import { DeniedOverlay } from "./DeniedOverlay.js";
|
|
16
|
+
|
|
17
|
+
// 'done':autoConfirm 自动回调后的终态——相机暂停、不出卡片、不自动重扫(宿主通常已导航离开)。
|
|
16
18
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
19
|
const VF_SIZE = 256;
|
|
18
20
|
const DEFAULT_HINT = '将条码 / 二维码放入框内,自动扫描';
|
|
@@ -38,6 +40,7 @@ function ScannerInner({
|
|
|
38
40
|
onClose,
|
|
39
41
|
resolveProduct,
|
|
40
42
|
onConfirm,
|
|
43
|
+
autoConfirm = false,
|
|
41
44
|
pickImage
|
|
42
45
|
}) {
|
|
43
46
|
const [phase, setPhase] = useState('init');
|
|
@@ -84,16 +87,23 @@ function ScannerInner({
|
|
|
84
87
|
setPhase('fail');
|
|
85
88
|
return;
|
|
86
89
|
}
|
|
87
|
-
|
|
90
|
+
const p = {
|
|
88
91
|
barcode: result.value,
|
|
89
92
|
...resolved
|
|
90
|
-
}
|
|
93
|
+
};
|
|
94
|
+
if (autoConfirm) {
|
|
95
|
+
// 跳过结果卡:直接回调,进 'done' 终态(相机暂停、不自动重扫)。
|
|
96
|
+
onConfirm?.(p, result);
|
|
97
|
+
setPhase('done');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
setProduct(p);
|
|
91
101
|
setDetectMs(Date.now() - detectStartRef.current);
|
|
92
102
|
setPhase('success');
|
|
93
103
|
} catch {
|
|
94
104
|
if (mountedRef.current) setPhase('fail');
|
|
95
105
|
}
|
|
96
|
-
}, [resolveProduct]);
|
|
106
|
+
}, [resolveProduct, autoConfirm, onConfirm]);
|
|
97
107
|
const onCameraResult = useCallback(results => {
|
|
98
108
|
if (phase !== 'scan' || handlingRef.current) return;
|
|
99
109
|
const first = results[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","ThemeProvider","ToastHost","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","scanChrome","Viewfinder","ScanTopBar","ScanToolbar","ResultFocus","ResultFail","DeniedOverlay","jsx","_jsx","jsxs","_jsxs","VF_SIZE","DEFAULT_HINT","Scanner","props","children","ScannerInner","title","formats","hintText","topInset","bottomInset","showTorch","onClose","resolveProduct","onConfirm","pickImage","phase","setPhase","torch","setTorch","product","setProduct","detectMs","setDetectMs","handlingRef","detectStartRef","lastResultRef","mountedRef","current","status","reset","finalize","result","resolved","name","value","barcode","Date","now","onCameraResult","results","first","onScanError","error","code","onAlbum","uri","undefined","onConfirmPress","r","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","Linking","StyleSheet","View","ThemeProvider","ToastHost","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","scanChrome","Viewfinder","ScanTopBar","ScanToolbar","ResultFocus","ResultFail","DeniedOverlay","jsx","_jsx","jsxs","_jsxs","VF_SIZE","DEFAULT_HINT","Scanner","props","children","ScannerInner","title","formats","hintText","topInset","bottomInset","showTorch","onClose","resolveProduct","onConfirm","autoConfirm","pickImage","phase","setPhase","torch","setTorch","product","setProduct","detectMs","setDetectMs","handlingRef","detectStartRef","lastResultRef","mountedRef","current","status","reset","finalize","result","resolved","name","value","p","barcode","Date","now","onCameraResult","results","first","onScanError","error","code","onAlbum","uri","undefined","onConfirmPress","r","showChrome","style","styles","root","absoluteFill","paused","onScanResult","size","detecting","flash","onFlash","t","onRescan","onSettings","openSettings","create","flex","backgroundColor","cameraBg"],"sourceRoot":"../../../src","sources":["Scanner/Scanner.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAChE,SAASC,OAAO,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACxD,SAASC,aAAa,EAAEC,SAAS,QAAQ,2BAA2B;AACpE,SAASC,WAAW,QAAQ,mBAAgB;AAC5C,SAASC,WAAW,QAAQ,mBAAgB;AAC5C,SACEC,yBAAyB,EACzBC,uBAAuB,QAClB,mBAAgB;AAEvB,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,aAAa,QAAQ,oBAAiB;;AAE/C;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGA,MAAMC,OAAO,GAAG,GAAG;AACnB,MAAMC,YAAY,GAAG,oBAAoB;AAyCzC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAACC,KAAmB,EAAE;EAC3C,oBACEJ,KAAA,CAAChB,aAAa;IAAAqB,QAAA,gBACZP,IAAA,CAACQ,YAAY;MAAA,GAAKF;IAAK,CAAG,CAAC,eAC3BN,IAAA,CAACb,SAAS,IAAE,CAAC;EAAA,CACA,CAAC;AAEpB;AAEA,SAASqB,YAAYA,CAAC;EACpBC,KAAK,GAAG,KAAK;EACbC,OAAO;EACPC,QAAQ,GAAGP,YAAY;EACvBQ,QAAQ,GAAG,EAAE;EACbC,WAAW,GAAG,EAAE;EAChBC,SAAS,GAAG,IAAI;EAChBC,OAAO;EACPC,cAAc;EACdC,SAAS;EACTC,WAAW,GAAG,KAAK;EACnBC;AACY,CAAC,EAAE;EACf,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGvC,QAAQ,CAAQ,MAAM,CAAC;EACjD,MAAM,CAACwC,KAAK,EAAEC,QAAQ,CAAC,GAAGzC,QAAQ,CAAC,KAAK,CAAC;EACzC,MAAM,CAAC0C,OAAO,EAAEC,UAAU,CAAC,GAAG3C,QAAQ,CAAqB,IAAI,CAAC;EAChE,MAAM,CAAC4C,QAAQ,EAAEC,WAAW,CAAC,GAAG7C,QAAQ,CAAC,CAAC,CAAC;EAE3C,MAAM8C,WAAW,GAAG/C,MAAM,CAAC,KAAK,CAAC;EACjC,MAAMgD,cAAc,GAAGhD,MAAM,CAAC,CAAC,CAAC;EAChC,MAAMiD,aAAa,GAAGjD,MAAM,CAAoB,IAAI,CAAC;EACrD,MAAMkD,UAAU,GAAGlD,MAAM,CAAC,IAAI,CAAC;;EAE/B;EACAD,SAAS,CAAC,MAAM;IACdmD,UAAU,CAACC,OAAO,GAAG,IAAI;IACzB,CAAC,YAAY;MACX,IAAI;QACF,IAAIC,MAAM,GAAG,MAAM3C,yBAAyB,CAAC,CAAC;QAC9C,IAAI2C,MAAM,KAAK,cAAc,IAAIA,MAAM,KAAK,QAAQ,EAAE;UACpDA,MAAM,GAAG,MAAM1C,uBAAuB,CAAC,CAAC;QAC1C;QACA,IAAI,CAACwC,UAAU,CAACC,OAAO,EAAE;QACzBX,QAAQ,CAACY,MAAM,KAAK,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;MACpD,CAAC,CAAC,MAAM;QACN,IAAIF,UAAU,CAACC,OAAO,EAAEX,QAAQ,CAAC,MAAM,CAAC;MAC1C;IACF,CAAC,EAAE,CAAC;IACJ,OAAO,MAAM;MACXU,UAAU,CAACC,OAAO,GAAG,KAAK;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,KAAK,GAAGvD,WAAW,CAAC,MAAM;IAC9BiD,WAAW,CAACI,OAAO,GAAG,KAAK;IAC3BP,UAAU,CAAC,IAAI,CAAC;IAChBJ,QAAQ,CAAC,MAAM,CAAC;EAClB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMc,QAAQ,GAAGxD,WAAW,CAC1B,MAAOyD,MAAkB,IAAK;IAC5BN,aAAa,CAACE,OAAO,GAAGI,MAAM;IAC9B,IAAI;MACF,MAAMC,QAAQ,GAAGrB,cAAc,GAC3B,MAAMA,cAAc,CAACoB,MAAM,CAAC,GAC5B;QAAEE,IAAI,EAAEF,MAAM,CAACG;MAAM,CAAC;MAC1B,IAAI,CAACR,UAAU,CAACC,OAAO,EAAE;MACzB,IAAI,CAACK,QAAQ,EAAE;QACbhB,QAAQ,CAAC,MAAM,CAAC;QAChB;MACF;MACA,MAAMmB,CAAc,GAAG;QAAEC,OAAO,EAAEL,MAAM,CAACG,KAAK;QAAE,GAAGF;MAAS,CAAC;MAC7D,IAAInB,WAAW,EAAE;QACf;QACAD,SAAS,GAAGuB,CAAC,EAAEJ,MAAM,CAAC;QACtBf,QAAQ,CAAC,MAAM,CAAC;QAChB;MACF;MACAI,UAAU,CAACe,CAAC,CAAC;MACbb,WAAW,CAACe,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGd,cAAc,CAACG,OAAO,CAAC;MAChDX,QAAQ,CAAC,SAAS,CAAC;IACrB,CAAC,CAAC,MAAM;MACN,IAAIU,UAAU,CAACC,OAAO,EAAEX,QAAQ,CAAC,MAAM,CAAC;IAC1C;EACF,CAAC,EACD,CAACL,cAAc,EAAEE,WAAW,EAAED,SAAS,CACzC,CAAC;EAED,MAAM2B,cAAc,GAAGjE,WAAW,CAC/BkE,OAAqB,IAAK;IACzB,IAAIzB,KAAK,KAAK,MAAM,IAAIQ,WAAW,CAACI,OAAO,EAAE;IAC7C,MAAMc,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC;IACxB,IAAI,CAACC,KAAK,EAAE;IACZlB,WAAW,CAACI,OAAO,GAAG,IAAI;IAC1BH,cAAc,CAACG,OAAO,GAAGU,IAAI,CAACC,GAAG,CAAC,CAAC;IACnCtB,QAAQ,CAAC,WAAW,CAAC;IACrB,KAAKc,QAAQ,CAACW,KAAK,CAAC;EACtB,CAAC,EACD,CAAC1B,KAAK,EAAEe,QAAQ,CAClB,CAAC;EAED,MAAMY,WAAW,GAAGpE,WAAW,CAAEqE,KAAwC,IAAK;IAC5E,IAAIA,KAAK,CAACC,IAAI,KAAK,wBAAwB,EAAE5B,QAAQ,CAAC,QAAQ,CAAC;EACjE,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM6B,OAAO,GAAGvE,WAAW,CAAC,YAAY;IACtC,IAAI,CAACwC,SAAS,IAAIS,WAAW,CAACI,OAAO,EAAE;IACvC,IAAI;MACF,MAAMmB,GAAG,GAAG,MAAMhC,SAAS,CAAC,CAAC;MAC7B,IAAI,CAACgC,GAAG,IAAI,CAACpB,UAAU,CAACC,OAAO,EAAE;MACjCJ,WAAW,CAACI,OAAO,GAAG,IAAI;MAC1BH,cAAc,CAACG,OAAO,GAAGU,IAAI,CAACC,GAAG,CAAC,CAAC;MACnCtB,QAAQ,CAAC,WAAW,CAAC;MACrB,MAAMwB,OAAO,GAAG,MAAMxD,WAAW,CAAC8D,GAAG,EAAEzC,OAAO,GAAG;QAAEA;MAAQ,CAAC,GAAG0C,SAAS,CAAC;MACzE,IAAI,CAACrB,UAAU,CAACC,OAAO,EAAE;MACzB,MAAMc,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC;MACxB,IAAI,CAACC,KAAK,EAAE;QACVzB,QAAQ,CAAC,MAAM,CAAC;QAChB;MACF;MACA,MAAMc,QAAQ,CAACW,KAAK,CAAC;IACvB,CAAC,CAAC,MAAM;MACN,IAAIf,UAAU,CAACC,OAAO,EAAE;QACtBJ,WAAW,CAACI,OAAO,GAAG,IAAI;QAC1BX,QAAQ,CAAC,MAAM,CAAC;MAClB;IACF;EACF,CAAC,EAAE,CAACF,SAAS,EAAET,OAAO,EAAEyB,QAAQ,CAAC,CAAC;EAElC,MAAMkB,cAAc,GAAG1E,WAAW,CAAC,MAAM;IACvC,MAAM2E,CAAC,GAAGxB,aAAa,CAACE,OAAO;IAC/B,MAAMQ,CAAC,GAAGhB,OAAO;IACjB,IAAIgB,CAAC,IAAIc,CAAC,EAAErC,SAAS,GAAGuB,CAAC,EAAEc,CAAC,CAAC;IAC7B;IACA;IACApB,KAAK,CAAC,CAAC;EACT,CAAC,EAAE,CAACV,OAAO,EAAEP,SAAS,EAAEiB,KAAK,CAAC,CAAC;EAE/B,MAAMqB,UAAU,GAAGnC,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,WAAW;EAE5D,oBACElB,KAAA,CAACjB,IAAI;IAACuE,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAnD,QAAA,GACtBa,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,MAAM,iBACrCpB,IAAA,CAACZ,WAAW;MACVoE,KAAK,EAAExE,UAAU,CAAC2E,YAAa;MAC/BjD,OAAO,EAAEA,OAAQ;MACjBkD,MAAM,EAAExC,KAAK,KAAK,MAAO;MACzBE,KAAK,EAAEA,KAAM;MACbuC,YAAY,EAAEjB,cAAe;MAC7BG,WAAW,EAAEA;IAAY,CAC1B,CACF,EAEAQ,UAAU,iBACTvD,IAAA,CAACP,UAAU;MAACqE,IAAI,EAAE3D,OAAQ;MAAC4D,SAAS,EAAE3C,KAAK,KAAK,WAAY;MAACT,QAAQ,EAAEA;IAAS,CAAE,CACnF,EAEAS,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,MAAM,iBACrCpB,IAAA,CAACN,UAAU;MAACe,KAAK,EAAEA,KAAM;MAACG,QAAQ,EAAEA;IAAS,CAAE,CAChD,EAEA2C,UAAU,KAAKzC,SAAS,IAAI,CAAC,CAACK,SAAS,IAAI,CAAC,CAACJ,OAAO,CAAC,iBACpDf,IAAA,CAACL,WAAW;MACVqE,KAAK,EAAE1C,KAAM;MACbT,WAAW,EAAEA,WAAY;MACzBoD,OAAO,EAAEnD,SAAS,GAAG,MAAMS,QAAQ,CAAE2C,CAAC,IAAK,CAACA,CAAC,CAAC,GAAGd,SAAU;MAC3DF,OAAO,EAAE/B,SAAS,GAAG+B,OAAO,GAAGE,SAAU;MACzCrC,OAAO,EAAEA;IAAQ,CAClB,CACF,EAEAK,KAAK,KAAK,SAAS,IAAII,OAAO,iBAC7BxB,IAAA,CAACJ,WAAW;MACV4B,OAAO,EAAEA,OAAQ;MACjBE,QAAQ,EAAEA,QAAS;MACnBb,WAAW,EAAEA,WAAY;MACzBsD,QAAQ,EAAEjC,KAAM;MAChBjB,SAAS,EAAEoC;IAAe,CAC3B,CACF,EAEAjC,KAAK,KAAK,MAAM,iBAAIpB,IAAA,CAACH,UAAU;MAACgB,WAAW,EAAEA,WAAY;MAACsD,QAAQ,EAAEjC;IAAM,CAAE,CAAC,EAE7Ed,KAAK,KAAK,QAAQ,iBACjBpB,IAAA,CAACF,aAAa;MAACiB,OAAO,EAAEA,OAAQ;MAACqD,UAAU,EAAEA,CAAA,KAAMrF,OAAO,CAACsF,YAAY,CAAC;IAAE,CAAE,CAC7E;EAAA,CACG,CAAC;AAEX;AAEA,MAAMZ,MAAM,GAAGzE,UAAU,CAACsF,MAAM,CAAC;EAC/BZ,IAAI,EAAE;IAAEa,IAAI,EAAE,CAAC;IAAEC,eAAe,EAAEhF,UAAU,CAACiF;EAAS;AACxD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -21,6 +21,14 @@ export interface ScannerProps {
|
|
|
21
21
|
resolveProduct?: (result: ScanResult) => ScanProduct | null | undefined | Promise<ScanProduct | null | undefined>;
|
|
22
22
|
/** 用户点"确认":把结果带回上一级(宿主通常在此导航返回)。 */
|
|
23
23
|
onConfirm?: (product: ScanProduct, result: ScanResult) => void;
|
|
24
|
+
/**
|
|
25
|
+
* 自动确认:扫到并解析成功后**不显示结果卡**,直接触发 `onConfirm(product, result)`。
|
|
26
|
+
* 默认 `false`(显示结果卡,由用户点"确定")。
|
|
27
|
+
* 适合"扫到即用、不需要二次确认"的场景。回调后相机暂停、不自动重扫——宿主通常在
|
|
28
|
+
* `onConfirm` 里导航离开;若需再扫由宿主控制(如重新挂载 `<Scanner>`)。
|
|
29
|
+
* 注:未识别(`resolveProduct` 返回 `null`/抛错)仍走失败态可重扫,不会误触发。
|
|
30
|
+
*/
|
|
31
|
+
autoConfirm?: boolean;
|
|
24
32
|
/**
|
|
25
33
|
* 点"相册":宿主用自己的图片选择器选图并返回本地 uri(取消则返回 null)。
|
|
26
34
|
* 库不内置图片选择器(遵循 RN 惯例):**传了才显示相册按钮**,不传则隐藏。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAevE,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,UAAU,KACf,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9E,oCAAoC;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAO1C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unif/react-native-hms-scan",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "华为 HMS 统一扫码服务 React Native bridge:定制视图扫码 + 图片识别 (Scan SDK-Plus / ScanKitFrameWork,@unif 私有)",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
package/src/Scanner/Scanner.tsx
CHANGED
|
@@ -16,7 +16,8 @@ import { ResultFocus } from './ResultFocus';
|
|
|
16
16
|
import { ResultFail } from './ResultFail';
|
|
17
17
|
import { DeniedOverlay } from './DeniedOverlay';
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
// 'done':autoConfirm 自动回调后的终态——相机暂停、不出卡片、不自动重扫(宿主通常已导航离开)。
|
|
20
|
+
type Phase = 'init' | 'scan' | 'detecting' | 'success' | 'fail' | 'denied' | 'done';
|
|
20
21
|
|
|
21
22
|
const VF_SIZE = 256;
|
|
22
23
|
const DEFAULT_HINT = '将条码 / 二维码放入框内,自动扫描';
|
|
@@ -45,6 +46,14 @@ export interface ScannerProps {
|
|
|
45
46
|
) => ScanProduct | null | undefined | Promise<ScanProduct | null | undefined>;
|
|
46
47
|
/** 用户点"确认":把结果带回上一级(宿主通常在此导航返回)。 */
|
|
47
48
|
onConfirm?: (product: ScanProduct, result: ScanResult) => void;
|
|
49
|
+
/**
|
|
50
|
+
* 自动确认:扫到并解析成功后**不显示结果卡**,直接触发 `onConfirm(product, result)`。
|
|
51
|
+
* 默认 `false`(显示结果卡,由用户点"确定")。
|
|
52
|
+
* 适合"扫到即用、不需要二次确认"的场景。回调后相机暂停、不自动重扫——宿主通常在
|
|
53
|
+
* `onConfirm` 里导航离开;若需再扫由宿主控制(如重新挂载 `<Scanner>`)。
|
|
54
|
+
* 注:未识别(`resolveProduct` 返回 `null`/抛错)仍走失败态可重扫,不会误触发。
|
|
55
|
+
*/
|
|
56
|
+
autoConfirm?: boolean;
|
|
48
57
|
/**
|
|
49
58
|
* 点"相册":宿主用自己的图片选择器选图并返回本地 uri(取消则返回 null)。
|
|
50
59
|
* 库不内置图片选择器(遵循 RN 惯例):**传了才显示相册按钮**,不传则隐藏。
|
|
@@ -76,6 +85,7 @@ function ScannerInner({
|
|
|
76
85
|
onClose,
|
|
77
86
|
resolveProduct,
|
|
78
87
|
onConfirm,
|
|
88
|
+
autoConfirm = false,
|
|
79
89
|
pickImage,
|
|
80
90
|
}: ScannerProps) {
|
|
81
91
|
const [phase, setPhase] = useState<Phase>('init');
|
|
@@ -126,14 +136,21 @@ function ScannerInner({
|
|
|
126
136
|
setPhase('fail');
|
|
127
137
|
return;
|
|
128
138
|
}
|
|
129
|
-
|
|
139
|
+
const p: ScanProduct = { barcode: result.value, ...resolved };
|
|
140
|
+
if (autoConfirm) {
|
|
141
|
+
// 跳过结果卡:直接回调,进 'done' 终态(相机暂停、不自动重扫)。
|
|
142
|
+
onConfirm?.(p, result);
|
|
143
|
+
setPhase('done');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
setProduct(p);
|
|
130
147
|
setDetectMs(Date.now() - detectStartRef.current);
|
|
131
148
|
setPhase('success');
|
|
132
149
|
} catch {
|
|
133
150
|
if (mountedRef.current) setPhase('fail');
|
|
134
151
|
}
|
|
135
152
|
},
|
|
136
|
-
[resolveProduct]
|
|
153
|
+
[resolveProduct, autoConfirm, onConfirm]
|
|
137
154
|
);
|
|
138
155
|
|
|
139
156
|
const onCameraResult = useCallback(
|