react-native-timacare 3.3.10 → 3.3.12
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.
- package/lib/commonjs/RNTimacare.js +1 -1
- package/lib/commonjs/RNTimacare.js.flow +2 -2
- package/lib/commonjs/RNTimacare.js.map +1 -1
- package/lib/commonjs/screens/camera/CCCDCameraScreen.js +1 -1
- package/lib/commonjs/screens/camera/CCCDCameraScreen.js.flow +257 -200
- package/lib/commonjs/screens/camera/CCCDCameraScreen.js.map +1 -1
- package/lib/commonjs/screens/nationalID/index.js +1 -1
- package/lib/commonjs/screens/nationalID/index.js.flow +4 -2
- package/lib/commonjs/screens/nationalID/index.js.map +1 -1
- package/lib/commonjs/screens/nationalIDBack/index.js +1 -1
- package/lib/commonjs/screens/nationalIDBack/index.js.flow +3 -1
- package/lib/commonjs/screens/nationalIDBack/index.js.map +1 -1
- package/lib/commonjs/screens/uploadVideo/index.js +1 -1
- package/lib/commonjs/screens/uploadVideo/index.js.flow +109 -61
- package/lib/commonjs/screens/uploadVideo/index.js.map +1 -1
- package/lib/commonjs/screens/uploadVideo/videoStore.js +1 -1
- package/lib/commonjs/screens/uploadVideo/videoStore.js.flow +4 -4
- package/lib/commonjs/screens/uploadVideo/videoStore.js.map +1 -1
- package/lib/module/RNTimacare.js +1 -1
- package/lib/module/RNTimacare.js.map +1 -1
- package/lib/module/screens/camera/CCCDCameraScreen.js +1 -1
- package/lib/module/screens/camera/CCCDCameraScreen.js.map +1 -1
- package/lib/module/screens/nationalID/index.js +1 -1
- package/lib/module/screens/nationalID/index.js.map +1 -1
- package/lib/module/screens/nationalIDBack/index.js +1 -1
- package/lib/module/screens/nationalIDBack/index.js.map +1 -1
- package/lib/module/screens/uploadVideo/index.js +1 -1
- package/lib/module/screens/uploadVideo/index.js.map +1 -1
- package/lib/module/screens/uploadVideo/videoStore.js +1 -1
- package/lib/module/screens/uploadVideo/videoStore.js.map +1 -1
- package/lib/typescript/RNTimacare.d.ts +1 -1
- package/lib/typescript/RNTimacare.d.ts.map +1 -1
- package/lib/typescript/screens/camera/CCCDCameraScreen.d.ts.map +1 -1
- package/lib/typescript/screens/nationalID/index.d.ts.map +1 -1
- package/lib/typescript/screens/nationalIDBack/index.d.ts.map +1 -1
- package/lib/typescript/screens/uploadVideo/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/RNTimacare.tsx +2 -2
- package/src/screens/camera/CCCDCameraScreen.tsx +257 -200
- package/src/screens/nationalID/index.tsx +4 -2
- package/src/screens/nationalIDBack/index.tsx +3 -1
- package/src/screens/uploadVideo/index.tsx +109 -61
- package/src/screens/uploadVideo/videoStore.tsx +4 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.RNTimacare=RNTimacare;var
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.RNTimacare=RNTimacare;var _react=_interopRequireWildcard(require("react"));var _navigation=require("./navigation");var _reactNative=require("react-native");var _AppStore=_interopRequireDefault(require("./AppStore"));var _reactNativeFbsdkNext=require("react-native-fbsdk-next");var _jsxFileName="/Users/tima/Documents/Tima/tima-care-v2-sdk/src/RNTimacare.tsx";function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}function RNTimacare(){(0,_react.useEffect)(function(){if(_reactNative.Platform.OS==='android'){_reactNativeFbsdkNext.Settings.initializeSDK();}_AppStore.default.getDeviceId();_AppStore.default.getPublicIp();_AppStore.default.getAppId();_AppStore.default.getDevicePayload();},[]);return _react.default.createElement(_navigation.PrimaryNavigator,{__self:this,__source:{fileName:_jsxFileName,lineNumber:18,columnNumber:10}});}
|
|
2
2
|
//# sourceMappingURL=RNTimacare.js.map
|
|
@@ -5,7 +5,7 @@ import { Platform } from 'react-native';
|
|
|
5
5
|
import appStore from './AppStore';
|
|
6
6
|
import { Settings } from 'react-native-fbsdk-next';
|
|
7
7
|
|
|
8
|
-
export function RNTimacare(
|
|
8
|
+
export function RNTimacare() {
|
|
9
9
|
useEffect(() => {
|
|
10
10
|
if (Platform.OS === 'android') {
|
|
11
11
|
Settings.initializeSDK();
|
|
@@ -15,5 +15,5 @@ export function RNTimacare(props) {
|
|
|
15
15
|
appStore.getAppId();
|
|
16
16
|
appStore.getDevicePayload();
|
|
17
17
|
}, []);
|
|
18
|
-
return <PrimaryNavigator
|
|
18
|
+
return <PrimaryNavigator />;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_navigation","_reactNative","_AppStore","_interopRequireDefault","_reactNativeFbsdkNext","_jsxFileName","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","RNTimacare","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_navigation","_reactNative","_AppStore","_interopRequireDefault","_reactNativeFbsdkNext","_jsxFileName","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","RNTimacare","useEffect","Platform","OS","Settings","initializeSDK","appStore","getDeviceId","getPublicIp","getAppId","getDevicePayload","createElement","PrimaryNavigator","__self","__source","fileName","lineNumber","columnNumber"],"sourceRoot":"../../src","sources":["RNTimacare.tsx"],"mappings":"0KACA,IAAAA,MAAA,CAAAC,uBAAA,CAAAC,OAAA,WACA,IAAAC,WAAA,CAAAD,OAAA,iBACA,IAAAE,YAAA,CAAAF,OAAA,iBACA,IAAAG,SAAA,CAAAC,sBAAA,CAAAJ,OAAA,gBACA,IAAAK,qBAAA,CAAAL,OAAA,4BAAmD,IAAAM,YAAA,2EAAAC,yBAAAC,CAAA,wBAAAC,OAAA,iBAAAC,CAAA,KAAAD,OAAA,GAAAE,CAAA,KAAAF,OAAA,UAAAF,wBAAA,UAAAA,yBAAAC,CAAA,SAAAA,CAAA,CAAAG,CAAA,CAAAD,CAAA,IAAAF,CAAA,YAAAT,wBAAAS,CAAA,CAAAE,CAAA,MAAAA,CAAA,EAAAF,CAAA,EAAAA,CAAA,CAAAI,UAAA,QAAAJ,CAAA,WAAAA,CAAA,mBAAAA,CAAA,qBAAAA,CAAA,QAAAK,OAAA,CAAAL,CAAA,MAAAG,CAAA,CAAAJ,wBAAA,CAAAG,CAAA,KAAAC,CAAA,EAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,SAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,MAAAQ,CAAA,EAAAC,SAAA,OAAAC,CAAA,CAAAC,MAAA,CAAAC,cAAA,EAAAD,MAAA,CAAAE,wBAAA,SAAAC,CAAA,IAAAd,CAAA,gBAAAc,CAAA,EAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,CAAAc,CAAA,OAAAI,CAAA,CAAAR,CAAA,CAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,CAAAc,CAAA,OAAAI,CAAA,GAAAA,CAAA,CAAAX,GAAA,EAAAW,CAAA,CAAAC,GAAA,EAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,CAAAM,CAAA,CAAAI,CAAA,EAAAV,CAAA,CAAAM,CAAA,EAAAd,CAAA,CAAAc,CAAA,UAAAN,CAAA,CAAAH,OAAA,CAAAL,CAAA,CAAAG,CAAA,EAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,CAAAQ,CAAA,EAAAA,CAAA,EAE5C,QAAS,CAAAY,UAAUA,CAAA,CAAG,CAC3B,GAAAC,gBAAS,EAAC,UAAM,CACd,GAAIC,qBAAQ,CAACC,EAAE,GAAK,SAAS,CAAE,CAC7BC,8BAAQ,CAACC,aAAa,CAAC,CAAC,CAC1B,CACAC,iBAAQ,CAACC,WAAW,CAAC,CAAC,CACtBD,iBAAQ,CAACE,WAAW,CAAC,CAAC,CACtBF,iBAAQ,CAACG,QAAQ,CAAC,CAAC,CACnBH,iBAAQ,CAACI,gBAAgB,CAAC,CAAC,CAC7B,CAAC,CAAE,EAAE,CAAC,CACN,MAAO,CAAAxC,MAAA,CAAAe,OAAA,CAAA0B,aAAA,CAACtC,WAAA,CAAAuC,gBAAgB,EAAAC,MAAA,MAAAC,QAAA,EAAAC,QAAA,CAAArC,YAAA,CAAAsC,UAAA,IAAAC,YAAA,KAAE,CAAC,CAC7B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=CCCDCameraScreen;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _reactNativeVisionCamera=require("react-native-vision-camera");var _icons=require("../../assets/icons");var _MText=require("../../components/MText");var _imageEditor=_interopRequireDefault(require("@react-native-community/image-editor"));var _native=require("@react-navigation/native");var _reactNativeDeviceInfo=_interopRequireDefault(require("react-native-device-info"));var _reactNativePermissions=require("react-native-permissions");var _jsxFileName="/Users/tima/Documents/Tima/tima-care-v2-sdk/src/screens/camera/CCCDCameraScreen.tsx";function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}var _Dimensions$get=_reactNative.Dimensions.get('window'),screenWidth=_Dimensions$get.width,screenHeight=_Dimensions$get.height;var frameWidth=screenWidth*0.85;var frameHeight=frameWidth*0.63;var frameLeft=(screenWidth-frameWidth)/2;var frameTop=(screenWidth*4/3-frameHeight)/2;function CCCDCameraScreen(props){var navigation=(0,_native.useNavigation)();var camera=(0,_react.useRef)(null);var device=(0,_reactNativeVisionCamera.useCameraDevice)('back');var _useState=(0,_react.useState)(true),_useState2=(0,_slicedToArray2.default)(_useState,2),cameraActive=_useState2[0],setCameraActive=_useState2[1];var _useState3=(0,_react.useState)(false),_useState4=(0,_slicedToArray2.default)(_useState3,2),passPermission=_useState4[0],setPassPermission=_useState4[1];var requestPermissions=function requestPermissions(){(0,_reactNativePermissions.request)(_reactNative.Platform.OS==='ios'?_reactNativePermissions.PERMISSIONS.IOS.CAMERA:_reactNativePermissions.PERMISSIONS.ANDROID.CAMERA).then(function(result){switch(result){case _reactNativePermissions.RESULTS.UNAVAILABLE:console.log('This feature is not available (on this device / in this context)');_reactNative.Alert.alert('Thông báo','Máy ảnh trên thiết bị không tương thích.\nVui lòng kiểm tra lại thiết bị!',[{text:'Đồng ý'}]);break;case _reactNativePermissions.RESULTS.DENIED:console.log('The permission has not been requested / is denied but requestable');_reactNative.Alert.alert('Thông báo','Bạn đã từ chối quyền máy ảnh. Vui lòng cấp quyền máy ảnh để tiếp tục!',[{text:'Đồng ý',onPress:function onPress(){if(_reactNative.Platform.OS==='ios'){(0,_reactNativePermissions.openSettings)();}else{requestPermissions();}}}]);break;case _reactNativePermissions.RESULTS.LIMITED:console.log('The permission is limited: some actions are possible');_reactNative.Alert.alert('Thông báo','Quyền máy ảnh bị hạn chế. Vui lòng kiểm tra lại để tiếp tục!',[{text:'Đồng ý',onPress:function onPress(){if(_reactNative.Platform.OS==='ios'){(0,_reactNativePermissions.openSettings)();}else{requestPermissions();}}}]);break;case _reactNativePermissions.RESULTS.GRANTED:console.log('The permission is granted');setPassPermission(true);break;case _reactNativePermissions.RESULTS.BLOCKED:console.log('The permission is denied and not requestable anymore');_reactNative.Alert.alert('Thông báo','Bạn đã từ chối quyền máy ảnh. Vui lòng cấp quyền máy ảnh để tiếp tục!',[{text:'Đồng ý'}]);break;}});};(0,_react.useEffect)(function(){requestPermissions();},[]);var takePicture=function _callee2(){var photo;return _regenerator.default.async(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(camera.current==null)){_context2.next=2;break;}return _context2.abrupt("return");case 2:_context2.next=4;return _regenerator.default.awrap(camera.current.takePhoto({skipMetadata:true}));case 4:photo=_context2.sent;_reactNative.Image.getSize("file://"+photo.path,function _callee(width,height){var previewHeight,scaleX,scaleY,cropData,croppedUri;return _regenerator.default.async(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:previewHeight=screenWidth*4/3;scaleX=width/screenWidth;scaleY=height/previewHeight;cropData={offset:{x:frameLeft*scaleX,y:frameTop*scaleY},size:{width:frameWidth*scaleX,height:frameHeight*scaleY},displaySize:{width:frameWidth*scaleX,height:frameHeight*scaleY},resizeMode:'contain'};_context.prev=4;_context.next=7;return _regenerator.default.awrap(_imageEditor.default.cropImage("file://"+photo.path,cropData));case 7:croppedUri=_context.sent;setCameraActive(false);navigation.goBack();if(props.route.params.callback){props.route.params.callback(croppedUri.uri);}_context.next=16;break;case 13:_context.prev=13;_context.t0=_context["catch"](4);console.error(_context.t0);case 16:case"end":return _context.stop();}},null,null,[[4,13]],Promise);});case 6:case"end":return _context2.stop();}},null,null,null,Promise);};if(!device||!passPermission)return _react.default.createElement(_reactNative.View,{style:{flex:1,backgroundColor:'#000'},__self:this,__source:{fileName:_jsxFileName,lineNumber:166,columnNumber:12}});return _react.default.createElement(_reactNative.View,{style:styles.container,__self:this,__source:{fileName:_jsxFileName,lineNumber:168,columnNumber:5}},_react.default.createElement(_reactNative.View,{style:styles.topContainer,__self:this,__source:{fileName:_jsxFileName,lineNumber:169,columnNumber:7}},_react.default.createElement(_reactNative.TouchableOpacity,{onPress:function onPress(){navigation.goBack();},style:[{width:48,height:48,zIndex:1000,alignItems:'center'}],__self:this,__source:{fileName:_jsxFileName,lineNumber:170,columnNumber:9}},_react.default.createElement(_icons.IconBackWhite,{__self:this,__source:{fileName:_jsxFileName,lineNumber:178,columnNumber:11}}))),_react.default.createElement(_reactNativeVisionCamera.Camera,{style:styles.camera,device:device,isActive:cameraActive,photo:true,ref:camera,__self:this,__source:{fileName:_jsxFileName,lineNumber:181,columnNumber:7}}),_react.default.createElement(_reactNative.View,{style:styles.overlay,__self:this,__source:{fileName:_jsxFileName,lineNumber:188,columnNumber:7}},_react.default.createElement(_reactNative.View,{style:styles.darkOverlayTop,__self:this,__source:{fileName:_jsxFileName,lineNumber:189,columnNumber:9}}),_react.default.createElement(_reactNative.View,{style:styles.row,__self:this,__source:{fileName:_jsxFileName,lineNumber:190,columnNumber:9}},_react.default.createElement(_reactNative.View,{style:styles.darkOverlaySide,__self:this,__source:{fileName:_jsxFileName,lineNumber:191,columnNumber:11}}),_react.default.createElement(_reactNative.View,{style:styles.frameBorder,__self:this,__source:{fileName:_jsxFileName,lineNumber:192,columnNumber:11}}),_react.default.createElement(_reactNative.View,{style:styles.darkOverlaySide,__self:this,__source:{fileName:_jsxFileName,lineNumber:193,columnNumber:11}})),_react.default.createElement(_reactNative.View,{style:styles.darkOverlayBottom,__self:this,__source:{fileName:_jsxFileName,lineNumber:195,columnNumber:9}})),_react.default.createElement(_reactNative.View,{style:styles.captureButton,__self:this,__source:{fileName:_jsxFileName,lineNumber:197,columnNumber:7}},_react.default.createElement(_MText.MText,{style:{color:'#fff',marginBottom:16,textAlign:'center',paddingHorizontal:24},__self:this,__source:{fileName:_jsxFileName,lineNumber:198,columnNumber:9}},"Vui l\xF2ng \u0111\u1EB7t gi\u1EA5y t\u1EDD n\u1EB1m v\u1EEBa khung h\xECnh ch\u1EEF nh\u1EADt, ch\u1EE5p \u0111\u1EE7 \xE1nh s\xE1ng v\xE0 r\xF5 n\xE9t."),_react.default.createElement(_reactNative.TouchableOpacity,{onPress:takePicture,__self:this,__source:{fileName:_jsxFileName,lineNumber:209,columnNumber:9}},_react.default.createElement(_icons.TakePhotoSvg,{__self:this,__source:{fileName:_jsxFileName,lineNumber:210,columnNumber:11}}))));}var overlayColor='rgba(22, 22, 22, 0.7)';var styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:'#000'},camera:{flex:1},overlay:(0,_extends2.default)({},_reactNative.StyleSheet.absoluteFillObject,{justifyContent:'center',alignItems:'center'}),frameBorder:{width:frameWidth,height:frameHeight,borderColor:'#FDFDFD',borderWidth:2},row:{flexDirection:'row',alignItems:'center'},darkOverlayTop:{width:'100%',height:(screenHeight-frameHeight)/2,backgroundColor:overlayColor},darkOverlayBottom:{width:'100%',height:(screenHeight-frameHeight)/2,backgroundColor:overlayColor},darkOverlaySide:{width:(screenWidth-frameWidth)/2,height:frameHeight,backgroundColor:overlayColor},captureContainer:{position:'absolute',bottom:40,width:'100%',alignItems:'center'},captureButton:{position:'absolute',bottom:30,alignSelf:'center',flexDirection:'column',alignItems:'center'},topContainer:{position:'absolute',top:_reactNativeDeviceInfo.default.hasNotch()?60:24},textContainer:{position:'absolute',top:_reactNativeDeviceInfo.default.hasNotch()?60:24}});
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=CCCDCameraScreen;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _reactNativeVisionCamera=require("react-native-vision-camera");var _icons=require("../../assets/icons");var _MText=require("../../components/MText");var _native=require("@react-navigation/native");var _reactNativeSafeAreaContext=require("react-native-safe-area-context");var _reactNativeImageManipulator=_interopRequireDefault(require("@oguzhnatly/react-native-image-manipulator"));var _jsxFileName="/Users/tima/Documents/Tima/tima-care-v2-sdk/src/screens/camera/CCCDCameraScreen.tsx",_this=this;function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r;})(e);}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u];}return n.default=e,t&&t.set(e,n),n;}var _Dimensions$get=_reactNative.Dimensions.get('window'),screenWidth=_Dimensions$get.width,screenHeight=_Dimensions$get.height;var getImageSize=function getImageSize(uri){return new Promise(function(resolve,reject){_reactNative.Image.getSize(uri,function(width,height){return resolve({width:width,height:height});},function(err){return reject(err);});});};var clamp=function clamp(value,min,max){return Math.min(Math.max(value,min),max);};function CCCDCameraScreen(props){var _props$route2,_props$route2$params;var insets=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)();var navigation=(0,_native.useNavigation)();var camera=(0,_react.useRef)(null);var device=(0,_reactNativeVisionCamera.useCameraDevice)('back');var _useState=(0,_react.useState)(true),_useState2=(0,_slicedToArray2.default)(_useState,2),cameraActive=_useState2[0],setCameraActive=_useState2[1];var _useCameraPermission=(0,_reactNativeVisionCamera.useCameraPermission)(),hasPermission=_useCameraPermission.hasPermission,requestPermission=_useCameraPermission.requestPermission;var _useState3=(0,_react.useState)({width:screenWidth,height:screenHeight}),_useState4=(0,_slicedToArray2.default)(_useState3,2),previewLayout=_useState4[0],setPreviewLayout=_useState4[1];(0,_react.useEffect)(function(){if(!hasPermission)requestPermission();},[hasPermission,requestPermission]);var takePicture=function _callee(){var photo,_props$route,_props$route$params,imageUri,_await$getImageSize,width,height,previewWidth,previewHeight,_frameWidth,_frameHeight,_frameX,_frameY,scale,renderedWidth,renderedHeight,offsetX,offsetY,cropX,cropY,cropWidth,cropHeight,cropXInt,cropYInt,cropWidthInt,cropHeightInt,cropData,result;return _regenerator.default.async(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(camera.current==null)){_context.next=2;break;}return _context.abrupt("return");case 2:_context.next=4;return _regenerator.default.awrap(camera.current.takePhoto({skipMetadata:true}));case 4:photo=_context.sent;_context.prev=5;imageUri="file://"+photo.path;_context.next=9;return _regenerator.default.awrap(getImageSize(imageUri));case 9:_await$getImageSize=_context.sent;width=_await$getImageSize.width;height=_await$getImageSize.height;previewWidth=previewLayout.width||screenWidth;previewHeight=previewLayout.height||screenHeight;_frameWidth=previewWidth*0.85;_frameHeight=_frameWidth*0.63;_frameX=(previewWidth-_frameWidth)/2;_frameY=(previewHeight-_frameHeight)/2;scale=Math.max(previewWidth/width,previewHeight/height);renderedWidth=width*scale;renderedHeight=height*scale;offsetX=(renderedWidth-previewWidth)/2;offsetY=(renderedHeight-previewHeight)/2;cropX=(_frameX+offsetX)/scale;cropY=(_frameY+offsetY)/scale;cropWidth=_frameWidth/scale;cropHeight=_frameHeight/scale;cropXInt=Math.floor(clamp(cropX,0,Math.max(0,width-1)));cropYInt=Math.floor(clamp(cropY,0,Math.max(0,height-1)));cropWidthInt=Math.floor(clamp(cropWidth,1,Math.max(1,width-cropXInt)));cropHeightInt=Math.floor(clamp(cropHeight,1,Math.max(1,height-cropYInt)));cropData={offset:{x:cropXInt,y:cropYInt},size:{width:cropWidthInt,height:cropHeightInt}};_context.next=34;return _regenerator.default.awrap(_reactNativeImageManipulator.default.manipulate(imageUri,[{crop:{originX:cropXInt,originY:cropYInt,width:cropWidthInt,height:cropHeightInt}}],{format:'jpg',compress:1}));case 34:result=_context.sent;setCameraActive(false);navigation.goBack();if((_props$route=props.route)!=null&&(_props$route$params=_props$route.params)!=null&&_props$route$params.callback){props.route.params.callback(result==null?void 0:result.uri);}_context.next=43;break;case 40:_context.prev=40;_context.t0=_context["catch"](5);console.error(_context.t0);case 43:case"end":return _context.stop();}},null,null,[[5,40]],Promise);};if(!device||!hasPermission)return _react.default.createElement(_reactNative.View,{style:{flex:1,backgroundColor:'#000'},__self:this,__source:{fileName:_jsxFileName,lineNumber:136,columnNumber:12}});var frameWidth=previewLayout.width*0.85;var frameHeight=frameWidth*0.63;var frameX=(previewLayout.width-frameWidth)/2;var frameY=(previewLayout.height-frameHeight)/2;return _react.default.createElement(_reactNative.View,{style:$container,onLayout:function onLayout(e){var _e$nativeEvent$layout=e.nativeEvent.layout,width=_e$nativeEvent$layout.width,height=_e$nativeEvent$layout.height;if(width>0&&height>0)setPreviewLayout({width:width,height:height});},__self:this,__source:{fileName:_jsxFileName,lineNumber:144,columnNumber:5}},_react.default.createElement(_reactNativeVisionCamera.Camera,{style:{flex:1},device:device,isActive:cameraActive,photo:true,ref:camera,__self:this,__source:{fileName:_jsxFileName,lineNumber:151,columnNumber:7}}),_react.default.createElement(_reactNative.View,{style:$overlay,pointerEvents:"none",__self:this,__source:{fileName:_jsxFileName,lineNumber:158,columnNumber:7}},_react.default.createElement(_reactNative.View,{style:[$darkOverlayTop,{height:frameY}],__self:this,__source:{fileName:_jsxFileName,lineNumber:159,columnNumber:9}}),_react.default.createElement(_reactNative.View,{style:$row,__self:this,__source:{fileName:_jsxFileName,lineNumber:160,columnNumber:9}},_react.default.createElement(_reactNative.View,{style:[$darkOverlaySide,{width:frameX,height:frameHeight}],__self:this,__source:{fileName:_jsxFileName,lineNumber:161,columnNumber:11}}),_react.default.createElement(_reactNative.View,{style:[$frameBorder,{width:frameWidth,height:frameHeight}],__self:this,__source:{fileName:_jsxFileName,lineNumber:164,columnNumber:11}},_react.default.createElement(Corner,{style:{top:0,left:0,borderTopWidth:CORNER_WIDTH,borderLeftWidth:CORNER_WIDTH,borderColor:BORDER_COLOR},__self:this,__source:{fileName:_jsxFileName,lineNumber:168,columnNumber:13}}),_react.default.createElement(Corner,{style:{top:0,right:0,borderTopWidth:CORNER_WIDTH,borderRightWidth:CORNER_WIDTH,borderColor:BORDER_COLOR},__self:this,__source:{fileName:_jsxFileName,lineNumber:179,columnNumber:13}}),_react.default.createElement(Corner,{style:{bottom:0,left:0,borderBottomWidth:CORNER_WIDTH,borderLeftWidth:CORNER_WIDTH,borderColor:BORDER_COLOR},__self:this,__source:{fileName:_jsxFileName,lineNumber:190,columnNumber:13}}),_react.default.createElement(Corner,{style:{bottom:0,right:0,borderBottomWidth:CORNER_WIDTH,borderRightWidth:CORNER_WIDTH,borderColor:BORDER_COLOR},__self:this,__source:{fileName:_jsxFileName,lineNumber:201,columnNumber:13}})),_react.default.createElement(_reactNative.View,{style:[$darkOverlaySide,{width:frameX,height:frameHeight}],__self:this,__source:{fileName:_jsxFileName,lineNumber:211,columnNumber:11}})),_react.default.createElement(_reactNative.View,{style:[$darkOverlayBottom,{height:frameY}],__self:this,__source:{fileName:_jsxFileName,lineNumber:215,columnNumber:9}})),_react.default.createElement(_reactNative.View,{style:[$back,{top:insets.top+16}],__self:this,__source:{fileName:_jsxFileName,lineNumber:217,columnNumber:7}},_react.default.createElement(_reactNative.TouchableOpacity,{onPress:function onPress(){navigation.goBack();},style:{position:'absolute',left:0,width:48,height:48,zIndex:1000,alignItems:'center'},__self:this,__source:{fileName:_jsxFileName,lineNumber:218,columnNumber:9}},_react.default.createElement(_icons.IconBackWhite,{__self:this,__source:{fileName:_jsxFileName,lineNumber:231,columnNumber:11}})),_react.default.createElement(_MText.MText,{style:{textAlign:'center',zIndex:10,color:'#FFFFFF',fontSize:16},__self:this,__source:{fileName:_jsxFileName,lineNumber:233,columnNumber:9}},props!=null&&(_props$route2=props.route)!=null&&(_props$route2$params=_props$route2.params)!=null&&_props$route2$params.front?'Chụp CMND/ CCCD mặt trước':'Chụp CMND/ CCCD mặt sau')),_react.default.createElement(_reactNative.View,{style:{position:'absolute',bottom:24+insets.bottom,alignSelf:'center',flexDirection:'column',alignItems:'center'},__self:this,__source:{fileName:_jsxFileName,lineNumber:246,columnNumber:7}},_react.default.createElement(_MText.MText,{style:{color:'#fff',marginBottom:16,textAlign:'center',paddingHorizontal:24},__self:this,__source:{fileName:_jsxFileName,lineNumber:255,columnNumber:9}},"Vui l\xF2ng \u0111\u1EB7t gi\u1EA5y t\u1EDD n\u1EB1m v\u1EEBa khung h\xECnh ch\u1EEF nh\u1EADt, ch\u1EE5p \u0111\u1EE7 \xE1nh s\xE1ng v\xE0 r\xF5 n\xE9t."),_react.default.createElement(_reactNative.TouchableOpacity,{onPress:takePicture,__self:this,__source:{fileName:_jsxFileName,lineNumber:266,columnNumber:9}},_react.default.createElement(_icons.TakePhotoSvg,{__self:this,__source:{fileName:_jsxFileName,lineNumber:267,columnNumber:11}}))));}var CORNER_SIZE=20;var CORNER_WIDTH=2;var BORDER_COLOR='#FDFDFD';var Corner=function Corner(_ref){var style=_ref.style;return _react.default.createElement(_reactNative.View,{style:[style,{position:'absolute',width:CORNER_SIZE,height:CORNER_SIZE}],__self:_this,__source:{fileName:_jsxFileName,lineNumber:279,columnNumber:3}});};var overlayColor='rgba(22, 22, 22, 0.7)';var $back={position:'absolute',left:0,right:0};var $overlay=(0,_extends2.default)({},_reactNative.StyleSheet.absoluteFillObject,{justifyContent:'center',alignItems:'center'});var $container={flex:1,backgroundColor:'#000'};var $row={flexDirection:'row',alignItems:'center'};var $darkOverlayTop={width:'100%',backgroundColor:overlayColor};var $darkOverlayBottom={width:'100%',backgroundColor:overlayColor};var $darkOverlaySide={backgroundColor:overlayColor};var $frameBorder={};
|
|
2
2
|
//# sourceMappingURL=CCCDCameraScreen.js.map
|
|
@@ -9,111 +9,48 @@ import {
|
|
|
9
9
|
TouchableOpacity,
|
|
10
10
|
View,
|
|
11
11
|
} from 'react-native';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
Camera,
|
|
14
|
+
useCameraDevice,
|
|
15
|
+
useCameraPermission,
|
|
16
|
+
} from 'react-native-vision-camera';
|
|
13
17
|
import { IconBackWhite, TakePhotoSvg } from '../../assets/icons';
|
|
14
18
|
import { MText } from '../../components/MText';
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
request,
|
|
20
|
-
PERMISSIONS,
|
|
21
|
-
RESULTS,
|
|
22
|
-
openSettings,
|
|
23
|
-
} from 'react-native-permissions';
|
|
19
|
+
import { useNavigation } from '@react-navigation/native';
|
|
20
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
21
|
+
import RNImageManipulator from '@oguzhnatly/react-native-image-manipulator';
|
|
24
22
|
|
|
25
23
|
const { width: screenWidth, height: screenHeight } = Dimensions.get('window');
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
|
|
25
|
+
const getImageSize = (
|
|
26
|
+
uri: string
|
|
27
|
+
): Promise<{ width: number; height: number }> =>
|
|
28
|
+
new Promise((resolve, reject) => {
|
|
29
|
+
Image.getSize(
|
|
30
|
+
uri,
|
|
31
|
+
(width, height) => resolve({ width, height }),
|
|
32
|
+
(err) => reject(err)
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const clamp = (value: number, min: number, max: number) =>
|
|
37
|
+
Math.min(Math.max(value, min), max);
|
|
38
|
+
|
|
30
39
|
export default function CCCDCameraScreen(props) {
|
|
40
|
+
const insets = useSafeAreaInsets();
|
|
31
41
|
const navigation = useNavigation();
|
|
32
42
|
const camera = useRef(null);
|
|
33
43
|
const device = useCameraDevice('back');
|
|
34
44
|
const [cameraActive, setCameraActive] = useState(true);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
? PERMISSIONS.IOS.CAMERA
|
|
41
|
-
: PERMISSIONS.ANDROID.CAMERA
|
|
42
|
-
).then((result) => {
|
|
43
|
-
switch (result) {
|
|
44
|
-
case RESULTS.UNAVAILABLE:
|
|
45
|
-
console.log(
|
|
46
|
-
'This feature is not available (on this device / in this context)'
|
|
47
|
-
);
|
|
48
|
-
Alert.alert(
|
|
49
|
-
'Thông báo',
|
|
50
|
-
'Máy ảnh trên thiết bị không tương thích.\nVui lòng kiểm tra lại thiết bị!',
|
|
51
|
-
[{ text: 'Đồng ý' }]
|
|
52
|
-
);
|
|
53
|
-
break;
|
|
54
|
-
case RESULTS.DENIED:
|
|
55
|
-
console.log(
|
|
56
|
-
'The permission has not been requested / is denied but requestable'
|
|
57
|
-
);
|
|
58
|
-
Alert.alert(
|
|
59
|
-
'Thông báo',
|
|
60
|
-
'Bạn đã từ chối quyền máy ảnh. Vui lòng cấp quyền máy ảnh để tiếp tục!',
|
|
61
|
-
[
|
|
62
|
-
{
|
|
63
|
-
text: 'Đồng ý',
|
|
64
|
-
onPress: () => {
|
|
65
|
-
if (Platform.OS === 'ios') {
|
|
66
|
-
openSettings();
|
|
67
|
-
} else {
|
|
68
|
-
requestPermissions();
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
]
|
|
73
|
-
);
|
|
74
|
-
break;
|
|
75
|
-
case RESULTS.LIMITED:
|
|
76
|
-
console.log('The permission is limited: some actions are possible');
|
|
77
|
-
Alert.alert(
|
|
78
|
-
'Thông báo',
|
|
79
|
-
'Quyền máy ảnh bị hạn chế. Vui lòng kiểm tra lại để tiếp tục!',
|
|
80
|
-
[
|
|
81
|
-
{
|
|
82
|
-
text: 'Đồng ý',
|
|
83
|
-
onPress: () => {
|
|
84
|
-
if (Platform.OS === 'ios') {
|
|
85
|
-
openSettings();
|
|
86
|
-
} else {
|
|
87
|
-
requestPermissions();
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
]
|
|
92
|
-
);
|
|
93
|
-
break;
|
|
94
|
-
case RESULTS.GRANTED:
|
|
95
|
-
console.log('The permission is granted');
|
|
96
|
-
setPassPermission(true);
|
|
97
|
-
break;
|
|
98
|
-
case RESULTS.BLOCKED:
|
|
99
|
-
console.log('The permission is denied and not requestable anymore');
|
|
100
|
-
Alert.alert(
|
|
101
|
-
'Thông báo',
|
|
102
|
-
'Bạn đã từ chối quyền máy ảnh. Vui lòng cấp quyền máy ảnh để tiếp tục!',
|
|
103
|
-
[
|
|
104
|
-
{
|
|
105
|
-
text: 'Đồng ý',
|
|
106
|
-
},
|
|
107
|
-
]
|
|
108
|
-
);
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
};
|
|
45
|
+
const { hasPermission, requestPermission } = useCameraPermission();
|
|
46
|
+
const [previewLayout, setPreviewLayout] = useState({
|
|
47
|
+
width: screenWidth,
|
|
48
|
+
height: screenHeight,
|
|
49
|
+
});
|
|
113
50
|
|
|
114
51
|
useEffect(() => {
|
|
115
|
-
|
|
116
|
-
}, []);
|
|
52
|
+
if (!hasPermission) requestPermission();
|
|
53
|
+
}, [hasPermission, requestPermission]);
|
|
117
54
|
|
|
118
55
|
const takePicture = async () => {
|
|
119
56
|
if (camera.current == null) return;
|
|
@@ -122,79 +59,199 @@ export default function CCCDCameraScreen(props) {
|
|
|
122
59
|
skipMetadata: true,
|
|
123
60
|
});
|
|
124
61
|
|
|
125
|
-
|
|
126
|
-
const
|
|
62
|
+
try {
|
|
63
|
+
const imageUri = `file://${photo.path}`;
|
|
64
|
+
const { width, height } = await getImageSize(imageUri);
|
|
65
|
+
const previewWidth = previewLayout.width || screenWidth;
|
|
66
|
+
const previewHeight = previewLayout.height || screenHeight;
|
|
67
|
+
|
|
68
|
+
const frameWidth = previewWidth * 0.85;
|
|
69
|
+
const frameHeight = frameWidth * 0.63; // tỷ lệ giống CCCD
|
|
70
|
+
const frameX = (previewWidth - frameWidth) / 2;
|
|
71
|
+
const frameY = (previewHeight - frameHeight) / 2;
|
|
72
|
+
|
|
73
|
+
// Tính scale dựa trên `resizeMode="cover"` mặc định của Vision Camera phủ kín màn hình
|
|
74
|
+
const scale = Math.max(previewWidth / width, previewHeight / height);
|
|
75
|
+
|
|
76
|
+
// Kích thước của ảnh nếu được hiển thị và zoom lên để cover màn hình
|
|
77
|
+
const renderedWidth = width * scale;
|
|
78
|
+
const renderedHeight = height * scale;
|
|
79
|
+
|
|
80
|
+
// Độ phân giải của các phần bị tràn ra khỏi màn hình (do cover)
|
|
81
|
+
const offsetX = (renderedWidth - previewWidth) / 2;
|
|
82
|
+
const offsetY = (renderedHeight - previewHeight) / 2;
|
|
83
|
+
|
|
84
|
+
// Tính tọa độ vùng cần crop trên ảnh gốc dựa vào toạ độ của khung UI
|
|
85
|
+
const cropX = (frameX + offsetX) / scale;
|
|
86
|
+
const cropY = (frameY + offsetY) / scale;
|
|
87
|
+
const cropWidth = frameWidth / scale;
|
|
88
|
+
const cropHeight = frameHeight / scale;
|
|
127
89
|
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
const
|
|
90
|
+
const cropXInt = Math.floor(clamp(cropX, 0, Math.max(0, width - 1)));
|
|
91
|
+
const cropYInt = Math.floor(clamp(cropY, 0, Math.max(0, height - 1)));
|
|
92
|
+
const cropWidthInt = Math.floor(
|
|
93
|
+
clamp(cropWidth, 1, Math.max(1, width - cropXInt))
|
|
94
|
+
);
|
|
95
|
+
const cropHeightInt = Math.floor(
|
|
96
|
+
clamp(cropHeight, 1, Math.max(1, height - cropYInt))
|
|
97
|
+
);
|
|
131
98
|
|
|
132
|
-
// Tính tọa độ vùng cần crop trên ảnh gốc
|
|
133
99
|
const cropData = {
|
|
134
100
|
offset: {
|
|
135
|
-
x:
|
|
136
|
-
y:
|
|
101
|
+
x: cropXInt,
|
|
102
|
+
y: cropYInt,
|
|
137
103
|
},
|
|
138
104
|
size: {
|
|
139
|
-
width:
|
|
140
|
-
height:
|
|
105
|
+
width: cropWidthInt,
|
|
106
|
+
height: cropHeightInt,
|
|
141
107
|
},
|
|
142
|
-
displaySize: {
|
|
143
|
-
width: frameWidth * scaleX,
|
|
144
|
-
height: frameHeight * scaleY,
|
|
145
|
-
},
|
|
146
|
-
resizeMode: 'contain',
|
|
147
108
|
};
|
|
148
109
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
110
|
+
const result = await RNImageManipulator.manipulate(
|
|
111
|
+
imageUri,
|
|
112
|
+
[
|
|
113
|
+
{
|
|
114
|
+
crop: {
|
|
115
|
+
originX: cropXInt,
|
|
116
|
+
originY: cropYInt,
|
|
117
|
+
width: cropWidthInt,
|
|
118
|
+
height: cropHeightInt,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
{ format: 'jpg', compress: 1 }
|
|
123
|
+
);
|
|
124
|
+
setCameraActive(false);
|
|
125
|
+
navigation.goBack();
|
|
126
|
+
|
|
127
|
+
if (props.route?.params?.callback) {
|
|
128
|
+
props.route.params.callback(result?.uri);
|
|
161
129
|
}
|
|
162
|
-
})
|
|
130
|
+
} catch (err) {
|
|
131
|
+
console.error(err);
|
|
132
|
+
}
|
|
163
133
|
};
|
|
164
134
|
|
|
165
|
-
if (!device || !
|
|
135
|
+
if (!device || !hasPermission)
|
|
166
136
|
return <View style={{ flex: 1, backgroundColor: '#000' }} />;
|
|
137
|
+
|
|
138
|
+
const frameWidth = previewLayout.width * 0.85;
|
|
139
|
+
const frameHeight = frameWidth * 0.63;
|
|
140
|
+
const frameX = (previewLayout.width - frameWidth) / 2;
|
|
141
|
+
const frameY = (previewLayout.height - frameHeight) / 2;
|
|
142
|
+
|
|
167
143
|
return (
|
|
168
|
-
<View
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
{ width: 48, height: 48, zIndex: 1000, alignItems: 'center' },
|
|
176
|
-
]}
|
|
177
|
-
>
|
|
178
|
-
<IconBackWhite />
|
|
179
|
-
</TouchableOpacity>
|
|
180
|
-
</View>
|
|
144
|
+
<View
|
|
145
|
+
style={$container}
|
|
146
|
+
onLayout={(e) => {
|
|
147
|
+
const { width, height } = e.nativeEvent.layout;
|
|
148
|
+
if (width > 0 && height > 0) setPreviewLayout({ width, height });
|
|
149
|
+
}}
|
|
150
|
+
>
|
|
181
151
|
<Camera
|
|
182
|
-
style={
|
|
152
|
+
style={{ flex: 1 }}
|
|
183
153
|
device={device}
|
|
184
154
|
isActive={cameraActive}
|
|
185
155
|
photo={true}
|
|
186
156
|
ref={camera}
|
|
187
157
|
/>
|
|
188
|
-
<View style={
|
|
189
|
-
<View style={
|
|
190
|
-
<View style={
|
|
191
|
-
<View
|
|
192
|
-
|
|
193
|
-
|
|
158
|
+
<View style={$overlay} pointerEvents="none">
|
|
159
|
+
<View style={[$darkOverlayTop, { height: frameY }]} />
|
|
160
|
+
<View style={$row}>
|
|
161
|
+
<View
|
|
162
|
+
style={[$darkOverlaySide, { width: frameX, height: frameHeight }]}
|
|
163
|
+
/>
|
|
164
|
+
<View
|
|
165
|
+
style={[$frameBorder, { width: frameWidth, height: frameHeight }]}
|
|
166
|
+
>
|
|
167
|
+
{/* Top Left */}
|
|
168
|
+
<Corner
|
|
169
|
+
style={{
|
|
170
|
+
top: 0,
|
|
171
|
+
left: 0,
|
|
172
|
+
borderTopWidth: CORNER_WIDTH,
|
|
173
|
+
borderLeftWidth: CORNER_WIDTH,
|
|
174
|
+
borderColor: BORDER_COLOR,
|
|
175
|
+
}}
|
|
176
|
+
/>
|
|
177
|
+
|
|
178
|
+
{/* Top Right */}
|
|
179
|
+
<Corner
|
|
180
|
+
style={{
|
|
181
|
+
top: 0,
|
|
182
|
+
right: 0,
|
|
183
|
+
borderTopWidth: CORNER_WIDTH,
|
|
184
|
+
borderRightWidth: CORNER_WIDTH,
|
|
185
|
+
borderColor: BORDER_COLOR,
|
|
186
|
+
}}
|
|
187
|
+
/>
|
|
188
|
+
|
|
189
|
+
{/* Bottom Left */}
|
|
190
|
+
<Corner
|
|
191
|
+
style={{
|
|
192
|
+
bottom: 0,
|
|
193
|
+
left: 0,
|
|
194
|
+
borderBottomWidth: CORNER_WIDTH,
|
|
195
|
+
borderLeftWidth: CORNER_WIDTH,
|
|
196
|
+
borderColor: BORDER_COLOR,
|
|
197
|
+
}}
|
|
198
|
+
/>
|
|
199
|
+
|
|
200
|
+
{/* Bottom Right */}
|
|
201
|
+
<Corner
|
|
202
|
+
style={{
|
|
203
|
+
bottom: 0,
|
|
204
|
+
right: 0,
|
|
205
|
+
borderBottomWidth: CORNER_WIDTH,
|
|
206
|
+
borderRightWidth: CORNER_WIDTH,
|
|
207
|
+
borderColor: BORDER_COLOR,
|
|
208
|
+
}}
|
|
209
|
+
/>
|
|
210
|
+
</View>
|
|
211
|
+
<View
|
|
212
|
+
style={[$darkOverlaySide, { width: frameX, height: frameHeight }]}
|
|
213
|
+
/>
|
|
194
214
|
</View>
|
|
195
|
-
<View style={
|
|
215
|
+
<View style={[$darkOverlayBottom, { height: frameY }]} />
|
|
216
|
+
</View>
|
|
217
|
+
<View style={[$back, { top: insets.top + 16 }]}>
|
|
218
|
+
<TouchableOpacity
|
|
219
|
+
onPress={() => {
|
|
220
|
+
navigation.goBack();
|
|
221
|
+
}}
|
|
222
|
+
style={{
|
|
223
|
+
position: 'absolute',
|
|
224
|
+
left: 0,
|
|
225
|
+
width: 48,
|
|
226
|
+
height: 48,
|
|
227
|
+
zIndex: 1000,
|
|
228
|
+
alignItems: 'center',
|
|
229
|
+
}}
|
|
230
|
+
>
|
|
231
|
+
<IconBackWhite />
|
|
232
|
+
</TouchableOpacity>
|
|
233
|
+
<MText
|
|
234
|
+
style={{
|
|
235
|
+
textAlign: 'center',
|
|
236
|
+
zIndex: 10,
|
|
237
|
+
color: '#FFFFFF',
|
|
238
|
+
fontSize: 16,
|
|
239
|
+
}}
|
|
240
|
+
>
|
|
241
|
+
{props?.route?.params?.front
|
|
242
|
+
? 'Chụp CMND/ CCCD mặt trước'
|
|
243
|
+
: 'Chụp CMND/ CCCD mặt sau'}
|
|
244
|
+
</MText>
|
|
196
245
|
</View>
|
|
197
|
-
<View
|
|
246
|
+
<View
|
|
247
|
+
style={{
|
|
248
|
+
position: 'absolute',
|
|
249
|
+
bottom: 24 + insets.bottom,
|
|
250
|
+
alignSelf: 'center',
|
|
251
|
+
flexDirection: 'column',
|
|
252
|
+
alignItems: 'center',
|
|
253
|
+
}}
|
|
254
|
+
>
|
|
198
255
|
<MText
|
|
199
256
|
style={{
|
|
200
257
|
color: '#fff',
|
|
@@ -214,59 +271,59 @@ export default function CCCDCameraScreen(props) {
|
|
|
214
271
|
);
|
|
215
272
|
}
|
|
216
273
|
|
|
274
|
+
const CORNER_SIZE = 20;
|
|
275
|
+
const CORNER_WIDTH = 2;
|
|
276
|
+
const BORDER_COLOR = '#FDFDFD';
|
|
277
|
+
|
|
278
|
+
const Corner = ({ style }: { style: ViewStyle }) => (
|
|
279
|
+
<View
|
|
280
|
+
style={[
|
|
281
|
+
style,
|
|
282
|
+
{
|
|
283
|
+
position: 'absolute',
|
|
284
|
+
width: CORNER_SIZE,
|
|
285
|
+
height: CORNER_SIZE,
|
|
286
|
+
},
|
|
287
|
+
]}
|
|
288
|
+
/>
|
|
289
|
+
);
|
|
290
|
+
|
|
217
291
|
const overlayColor = 'rgba(22, 22, 22, 0.7)';
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
},
|
|
257
|
-
captureButton: {
|
|
258
|
-
position: 'absolute',
|
|
259
|
-
bottom: 30,
|
|
260
|
-
alignSelf: 'center',
|
|
261
|
-
flexDirection: 'column',
|
|
262
|
-
alignItems: 'center',
|
|
263
|
-
},
|
|
264
|
-
topContainer: {
|
|
265
|
-
position: 'absolute',
|
|
266
|
-
top: DeviceInfo.hasNotch() ? 60 : 24,
|
|
267
|
-
},
|
|
268
|
-
textContainer: {
|
|
269
|
-
position: 'absolute',
|
|
270
|
-
top: DeviceInfo.hasNotch() ? 60 : 24,
|
|
271
|
-
},
|
|
272
|
-
});
|
|
292
|
+
const $back: ViewStyle = {
|
|
293
|
+
position: 'absolute',
|
|
294
|
+
left: 0,
|
|
295
|
+
right: 0,
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
const $overlay: ViewStyle = {
|
|
299
|
+
...StyleSheet.absoluteFillObject,
|
|
300
|
+
justifyContent: 'center',
|
|
301
|
+
alignItems: 'center',
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
const $container: ViewStyle = {
|
|
305
|
+
flex: 1,
|
|
306
|
+
backgroundColor: '#000',
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
const $row: ViewStyle = {
|
|
310
|
+
flexDirection: 'row',
|
|
311
|
+
alignItems: 'center',
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
const $darkOverlayTop: ViewStyle = {
|
|
315
|
+
width: '100%',
|
|
316
|
+
backgroundColor: overlayColor,
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
const $darkOverlayBottom: ViewStyle = {
|
|
320
|
+
width: '100%',
|
|
321
|
+
backgroundColor: overlayColor,
|
|
322
|
+
};
|
|
323
|
+
const $darkOverlaySide: ViewStyle = {
|
|
324
|
+
backgroundColor: overlayColor,
|
|
325
|
+
};
|
|
326
|
+
const $frameBorder: ViewStyle = {
|
|
327
|
+
// borderColor: '#FDFDFD',
|
|
328
|
+
// borderWidth: 2,
|
|
329
|
+
};
|