souscrire a une assure pending

This commit is contained in:
Brice Zele 2021-11-22 19:20:54 +01:00
parent c41bb77124
commit a52ff41487
12 changed files with 384 additions and 53 deletions

22
package-lock.json generated
View File

@ -60,6 +60,7 @@
"react-native-modal-datetime-picker": "^10.2.0",
"react-native-onesignal": "^3.9.0",
"react-native-paper": "^2.16.0",
"react-native-permissions": "^3.0.5",
"react-native-phone-call": "^1.0.9",
"react-native-popup-dialog": "^0.18.3",
"react-native-progress": "^3.6.0",
@ -11118,6 +11119,21 @@
"react-native-vector-icons": "*"
}
},
"node_modules/react-native-permissions": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.1.0.tgz",
"integrity": "sha512-Y/kAU8cUTNhX5CLxfAG96ItEjjmwvyqnVBie38Gj8HoomXQcKM+ToFmq/rPt+DOziCq7YFKinn9AIlnLBiV3AQ==",
"peerDependencies": {
"react": ">=16.13.1",
"react-native": ">=0.63.3",
"react-native-windows": ">=0.62.0"
},
"peerDependenciesMeta": {
"react-native-windows": {
"optional": true
}
}
},
"node_modules/react-native-phone-call": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/react-native-phone-call/-/react-native-phone-call-1.0.9.tgz",
@ -23373,6 +23389,12 @@
"react-native-safe-area-view": "^0.12.0"
}
},
"react-native-permissions": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.1.0.tgz",
"integrity": "sha512-Y/kAU8cUTNhX5CLxfAG96ItEjjmwvyqnVBie38Gj8HoomXQcKM+ToFmq/rPt+DOziCq7YFKinn9AIlnLBiV3AQ==",
"requires": {}
},
"react-native-phone-call": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/react-native-phone-call/-/react-native-phone-call-1.0.9.tgz",

View File

@ -66,6 +66,7 @@
"react-native-modal-datetime-picker": "^10.2.0",
"react-native-onesignal": "^3.9.0",
"react-native-paper": "^2.16.0",
"react-native-permissions": "^3.0.5",
"react-native-phone-call": "^1.0.9",
"react-native-popup-dialog": "^0.18.3",
"react-native-progress": "^3.6.0",

View File

@ -9,6 +9,8 @@ import InsuranceActions from './insurance.type';
import {
getInsuranceListUrl,
getInsurancePrimeAmountUrl,
getUserByIdQRCodeUrl,
getUserByNameOrNumberUrl,
subscribeInsuranceUrl,
uploadInsuranceImagetUrl
} from "../../webservice/IlinkConstants";
@ -221,3 +223,61 @@ export const fetchAddBeneficiaryToSubscription = (id, data) => {
onError: fetchAddBeneficiaryToSubscriptionError,
});
};
/************************************************************/
export const fetchGetUserByIdQRCodePending = () => ({
type: InsuranceActions.GET_USER_BY_ID_QR_CODE_PENDING,
});
export const fetchGetUserByIdQRCodeReset = () => ({
type: InsuranceActions.GET_USER_BY_ID_QR_CODE_RESET,
});
export const fetchGetUserByIdQRCodeSuccess = (authkey: any) => ({
type: InsuranceActions.GET_USER_BY_ID_QR_CODE_SUCCESS,
payload: authkey,
});
export const fetchGetUserByIdQRCodeError = (error: any) => ({
type: InsuranceActions.GET_USER_BY_ID_QR_CODE_ERROR,
payload: error,
});
export const fetchGetUserByIdQRCode = (network_id, id) => {
return ApiAction({
url: `${getUserByIdQRCodeUrl}?network_id=${network_id}&${id}`,
method: 'GET',
onLoading: fetchGetUserByIdQRCodePending,
onSuccess: fetchGetUserByIdQRCodeSuccess,
onError: fetchGetUserByIdQRCodeError,
});
};
/************************************************************/
export const fetchGetUserByNameOrNumberPending = () => ({
type: InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_PENDING,
});
export const fetchGetUserByNameOrNumberReset = () => ({
type: InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_RESET,
});
export const fetchGetUserByNameOrNumberSuccess = (authkey: any) => ({
type: InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_SUCCESS,
payload: authkey,
});
export const fetchGetUserByNameOrNumberError = (error: any) => ({
type: InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_ERROR,
payload: error,
});
export const fetchGetUserByNameOrNumber = (network_id, id) => {
return ApiAction({
url: `${getUserByNameOrNumberUrl}?network_id=${network_id}&${id}`,
method: 'GET',
onLoading: fetchGetUserByNameOrNumberPending,
onSuccess: fetchGetUserByNameOrNumberSuccess,
onError: fetchGetUserByNameOrNumberError,
});
};

View File

@ -227,3 +227,63 @@ export const addBeneficiaryToSubscriptionReducer = (state = INITIAL_STATE, actio
}
};
export const getUserByIdQRCodeReducer = (state = INITIAL_STATE, action: InsuranceActions) => {
switch (action.type) {
case InsuranceActions.GET_USER_BY_ID_QR_CODE_PENDING:
return {
...state,
loading: true
}
case InsuranceActions.GET_USER_BY_ID_QR_CODE_SUCCESS:
return {
loading: false,
result: action.payload,
error: null
}
case InsuranceActions.GET_USER_BY_ID_QR_CODE_ERROR:
return {
...state,
loading: false,
result: null,
error: action.payload
}
case InsuranceActions.GET_USER_BY_ID_QR_CODE_RESET:
return INITIAL_STATE;
default:
return state
}
};
export const getUserByNameOrNumberReducer = (state = INITIAL_STATE, action: InsuranceActions) => {
switch (action.type) {
case InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_PENDING:
return {
...state,
loading: true
}
case InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_SUCCESS:
return {
loading: false,
result: action.payload,
error: null
}
case InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_ERROR:
return {
...state,
loading: false,
result: null,
error: action.payload
}
case InsuranceActions.GET_USER_BY_NAME_OR_NUMBER_RESET:
return INITIAL_STATE;
default:
return state
}
};

View File

@ -14,6 +14,8 @@ const selectUploadInsuranceImagesReducerReducer = (state) => state.uploadInsuran
const selectGetSubscriptionListReducerReducer = (state) => state.subscriptionList;
const selectActivatePaySubscriptionReducer = (state) => state.activatePaySubscription;
const selectAddBeneficiaryToSubscriptionReducer = (state) => state.addBeneficiaryToSubscription;
const selectGetUserByIdQRCodeReducer = (state) => state.getUserByIdQRCodeReducer;
const selectGetUserByNameOrNumberReducer = (state) => state.getUserByNameOrNumberReducer;
export const selectInsuranceList = createSelector(
[selectInsuranceListReducer],
@ -49,3 +51,12 @@ export const selectActivatePaySubscription = createSelector(
[selectActivatePaySubscriptionReducer],
(activatePaySubscription) => activatePaySubscription
);
export const selectGetUserByIdQRCode = createSelector(
[selectGetUserByIdQRCodeReducer],
(getUserByIdQRCode) => getUserByIdQRCode
);
export const selectGetUserByNameOrNumber = createSelector(
[selectGetUserByNameOrNumberReducer],
(getUserByNameOrNumber) => getUserByNameOrNumber
);

View File

@ -41,6 +41,16 @@ const InsuranceActions = {
ADD_BENEFICIARY_TO_SUBSCRIPTION_ERROR: 'ADD_BENEFICIARY_TO_SUBSCRIPTION_ERROR',
ADD_BENEFICIARY_TO_SUBSCRIPTION_RESET: 'ADD_BENEFICIARY_TO_SUBSCRIPTION_RESET',
GET_USER_BY_ID_QR_CODE_PENDING: 'GET_USER_BY_ID_QR_CODE_PENDING',
GET_USER_BY_ID_QR_CODE_SUCCESS: 'GET_USER_BY_ID_QR_CODE_SUCCESS',
GET_USER_BY_ID_QR_CODE_ERROR: 'GET_USER_BY_ID_QR_CODE_ERROR',
GET_USER_BY_ID_QR_CODE_RESET: 'GET_USER_BY_ID_QR_CODE_RESET',
GET_USER_BY_NAME_OR_NUMBER_PENDING: 'GET_USER_BY_NAME_OR_NUMBER_PENDING',
GET_USER_BY_NAME_OR_NUMBER_SUCCESS: 'GET_USER_BY_NAME_OR_NUMBER_SUCCESS',
GET_USER_BY_NAME_OR_NUMBER_ERROR: 'GET_USER_BY_NAME_OR_NUMBER_ERROR',
GET_USER_BY_NAME_OR_NUMBER_RESET: 'GET_USER_BY_NAME_OR_NUMBER_RESET',
}
export default InsuranceActions;

View File

@ -55,6 +55,8 @@ import {
addBeneficiaryToSubscriptionReducer,
getInsurancePrimeAmountReducer,
getSubscriptionListReducer,
getUserByIdQRCodeReducer,
getUserByNameOrNumberReducer,
insuranceListReducer,
subscribeInsuranceReducer,
uploadInsuranceImagesReducer
@ -151,7 +153,9 @@ const rootReducer = persistCombineReducers(persistConfig, {
uploadInsuranceImagesReducer: uploadInsuranceImagesReducer,
subscriptionList: getSubscriptionListReducer,
activatePaySubscription: activatePaySubscriptionReducer,
addBeneficiaryToSubscription: addBeneficiaryToSubscriptionReducer
addBeneficiaryToSubscription: addBeneficiaryToSubscriptionReducer,
getUserByIdQRCodeReducer: getUserByIdQRCodeReducer,
getUserByNameOrNumberReducer: getUserByNameOrNumberReducer,
});
export default rootReducer;

View File

@ -1336,7 +1336,44 @@ class WalletDetail extends Component {
{I18n.t('TRANSACTIONS')}
</Text>
</View>
{(wallet.type === "ilink_sante") &&
<View style={styles.transactionContainer}>
<View style={[styles.containerTouch]}>
<TouchableOpacity style={styles.contain}
onPress={() => {
this.props.navigation.push(route.walletOptionSelect, {
optionSelect: optionNanoSanteAgentScreen,
wallet,
lottie: {
source: require("./../../datas/json/cedit-cards.json"),
loop: true
},
isNanoSanteAgent: true
});
}}
activeOpacity={0.9}>
<Icon name='heart-multiple'
color={Color.primaryColor}
size={30}
style={styles.imageBanner}/>
<View style={[styles.content]}>
<View style={{paddingTop: 20,}}>
<Text
style={[Typography.headline, Typography.semibold]}>
{I18n.t('NANO_SANTE')}
</Text>
</View>
</View>
</TouchableOpacity>
</View>
</View>}
{(wallet.type === "ilink-world" || wallet.type === "ilink") &&
<View style={styles.transactionContainer}>
<View style={[styles.containerTouch]}>
@ -1436,7 +1473,7 @@ class WalletDetail extends Component {
</View>
</TouchableOpacity>
</View>
</View>
</View>}
{isIlinkWorldWallet(wallet.type) &&
<>
@ -1481,37 +1518,6 @@ class WalletDetail extends Component {
</TouchableOpacity>
</View>
<View style={[styles.containerTouch]}>
<TouchableOpacity style={styles.contain}
onPress={() => {
this.props.navigation.push(route.walletOptionSelect, {
optionSelect: optionNanoSanteAgentScreen,
wallet,
lottie: {
source: require("./../../datas/json/cedit-cards.json"),
loop: true
},
isNanoSanteAgent: true
});
}}
activeOpacity={0.9}>
<Icon name='heart-multiple'
color={Color.primaryColor}
size={30}
style={styles.imageBanner}/>
<View style={[styles.content]}>
<View style={{paddingTop: 20,}}>
<Text
style={[Typography.headline, Typography.semibold]}>
{I18n.t('NANO_SANTE')}
</Text>
</View>
</View>
</TouchableOpacity>
</View>
</View>
<View style={styles.transactionContainer}>

View File

@ -8,7 +8,9 @@
import React, {useEffect, useRef, useState} from 'react';
import {
ActivityIndicator,
Alert,
Dimensions,
FlatList,
Keyboard,
KeyboardAvoidingView,
Platform,
@ -30,13 +32,24 @@ import {
fetchActivePaySubscription,
fetchActivePaySubscriptionReset,
fetchGetSubscriptionList,
fetchGetSubscriptionListReset
fetchGetSubscriptionListReset,
fetchGetUserByIdQRCode,
fetchGetUserByIdQRCodeReset,
fetchGetUserByNameOrNumber,
fetchGetUserByNameOrNumberReset
} from "../../../redux/insurance/insurance.actions";
import DropdownAlert from "react-native-dropdownalert";
import {readUser} from "../../../webservice/AuthApi";
import TextInput from "../../../components/TextInput";
import {createStructuredSelector} from "reselect";
import {selectActivatePaySubscription, selectSubscriptionList} from "../../../redux/insurance/insurance.selector";
import {
selectActivatePaySubscription,
selectGetUserByIdQRCode,
selectGetUserByIdQRCodeReducer,
selectGetUserByNameOrNumber,
selectGetUserByNameOrNumberReducer,
selectSubscriptionList
} from "../../../redux/insurance/insurance.selector";
import StepHeader from "../../../components/StepHeaderComponent";
import Wizard from "react-native-wizard";
import Icon from "react-native-vector-icons/FontAwesome5";
@ -49,6 +62,8 @@ import Modal from "react-native-modal";
import DateTimePicker from "@react-native-community/datetimepicker";
import QRCodeScanner from "react-native-qrcode-scanner";
import {RNCamera} from "react-native-camera";
import * as Utils from "../../../utils/UtilsFunction";
import {store} from "../../../redux/store";
let moment = require('moment-timezone');
@ -211,6 +226,10 @@ const SaisirFeuilleSoinScreen = ({
fetchGetSubscriptionList,
subscriptionList,
fetchActivePaySubscription,
fetchGetUserByIdQRCode,
fetchGetUserByNameOrNumber,
getUserByNameOrNumber,
getUserByIdQRCode,
navigation
}) => {
@ -222,6 +241,11 @@ const SaisirFeuilleSoinScreen = ({
const [showQRCodeScanner, setShowQRCodeScanner] = useState(false);
const [showDateAccidentPicker, setShowDateAccidentPicker] = useState(false);
const [wallet] = useState(store.getState().walletDetailReducer.result.response);
const [isNumeroAssureSearch, setIsNumeroAssureSearch] = useState(true);
const [isNomAssureSearch, setIsNomAssureSearch] = useState(false);
const [dateDebutGrossesse, setDateDebutGrossesse] = useState(null);
const [dateFinGrossesse, setDateFinGrossesse] = useState(null);
const [isGrossesse, setIsGrossesse] = useState(false);
@ -229,12 +253,14 @@ const SaisirFeuilleSoinScreen = ({
const [showDateFinGrossessePicker, setShowDateFinGrossessePicker] = useState(false);
const [user, setUser] = useState(null);
const [assure, setAssure] = useState(null);
const wizard = useRef();
const [isFirstStep, setIsFirstStep] = useState(true);
const [isLastStep, setIsLastStep] = useState(false);
const [currentStep, setCurrentStep] = useState(1);
const [modalPrestation, setModalPrestation] = useState(false);
const [modalPrescription, setModalPrescription] = useState(false);
const [modalListAssure, setModalListAssure] = useState(false);
const [statutPatientOption] = useState([
{label: I18n.t('AYANT_DROITS'), value: "M"},
@ -270,14 +296,43 @@ const SaisirFeuilleSoinScreen = ({
});
dispatch(fetchGetSubscriptionListReset());
dispatch(fetchActivePaySubscriptionReset());
dispatch(fetchGetUserByNameOrNumberReset());
dispatch(fetchGetUserByIdQRCodeReset());
}, []);
useEffect(() => {
if (user !== null) {
console.log("user", user.id);
console.log("user", user);
}
}, [user]);
useEffect(() => {
console.log("getUserByNameOrNumber.result", getUserByNameOrNumber);
if (getUserByNameOrNumber.result !== null) {
if (getUserByNameOrNumber.result.response.length > 0) {
setModalListAssure(true);
//wizard.current.next();
} else {
dropDownAlertRef.alertWithType(
'warn',
I18n.t('EMPTY_LIST'),
I18n.t('NO_ASSURE_MATCH_SEARCH'),
);
//dispatch(fetchGetUserByNameOrNumberReset());
}
}
if (getUserByNameOrNumber.error) {
dropDownAlertRef.alertWithType(
'error',
I18n.t('ERROR_LABEL'),
Utils.getErrorMsg(getUserByNameOrNumber),
);
dispatch(fetchGetUserByNameOrNumberReset());
}
}, [getUserByNameOrNumber]);
console.log("Date accident", dateAccident);
const SaisirFeuilleSoinSchema = Yup.object().shape({
@ -366,8 +421,6 @@ const SaisirFeuilleSoinScreen = ({
const renderDialogQRCodeScanner = () => {
const {resultSearchUserByName, errorGetAvisImposition} = this.props;
console.log("resultGetAvisImposition", resultSearchUserByName);
return (
<Dialog.Container contentStyle={{width: responsiveWidth(80)}} useNativeDriver={true}
visible={showQRCodeScanner}>
@ -699,6 +752,80 @@ const SaisirFeuilleSoinScreen = ({
</Formik>
);
const renderListAssure = () => (
<ScrollView style={{flex: 1}}>
<View style={[styles.containModal, {backgroundColor: Color.containerBackgroundColor}]}>
<Modal
isVisible={modalListAssure}
onSwipeComplete={() => {
setModalListAssure(false);
}}
swipeDirection={['down']}
style={styles.bottomModal}>
<View
style={[
styles.contentFilterBottom,
{backgroundColor: Color.containerBackgroundColor},
]}>
<View style={styles.contentSwipeDown}>
<View style={styles.lineSwipeDown}/>
</View>
<Text body2 style={{marginTop: 10}}>{I18n.t('LIST_ASSURE')}</Text>
<FlatList data={getUserByNameOrNumber.result?.response}
extraData={getUserByNameOrNumber.result?.response}
keyExtractor={(item, index) => index}
renderItem={({item, index}) => {
return (
<TouchableOpacity
style={[
styles.contentActionModalBottom,
{borderBottomColor: Color.borderColor},
]}
key={item.id}
onPress={() => {
if (item.state !== 'PAID') {
Alert.alert(I18n.t('ERROR_LABEL'), I18n.t('ASSURE_NON_EN_REGLE'),
[{
text: I18n.t('OK'), onPress: () => {
}
}]);
} else {
setAssure(item);
setModalListAssure(false);
setFieldValue(
'lastname_patient',
item.user.lastname,
);
setFieldValue(
'firstname_patient',
item.user.firstname,
);
dispatch(fetchGetUserByNameOrNumberReset());
wizard.current.next();
}
}}>
<Text body2 semibold>
{`${item.user.firstname} ${item.user.lastname}`}
</Text>
</TouchableOpacity>
)
}}/>
<Button
full
style={{marginTop: 10, marginBottom: 20}}
onPress={() => setModalListAssure(false)}>
{I18n.t('OK')}
</Button>
</View>
</Modal>
</View>
</ScrollView>
)
const {
handleChange,
handleSubmit,
@ -725,15 +852,24 @@ const SaisirFeuilleSoinScreen = ({
});
const onNext = () => {
console.log("currentStep", currentStep);
console.log("values", values);
switch (currentStep) {
case 1:
return (
errors.numero_assure
);
case 0:
if (values.numero_assure !== '') {
if (getUserByNameOrNumber.result === null) {
if (isNumeroAssureSearch)
fetchGetUserByNameOrNumber(wallet.id_network, `&phone=${values.numero_assure}`);
else
fetchGetUserByNameOrNumber(wallet.id_network, `&name=${values.numero_assure}`)
console.log("errors", errors);
}
}
return false;
break;
default:
return false;
return true;
}
};
@ -744,7 +880,7 @@ const SaisirFeuilleSoinScreen = ({
<View>
<TextInput
style={{marginTop: 10}}
placeholder={I18n.t('NUMERO_ASSURE')}
placeholder={isNumeroAssureSearch ? I18n.t('NUMERO_ASSURE') : I18n.t('NOM_ASSURE')}
value={values.numero_assure}
onChangeText={handleChange('numero_assure')}
onBlur={handleBlur('numero_assure')}
@ -754,7 +890,7 @@ const SaisirFeuilleSoinScreen = ({
icon={
<FontAwesome
style={{zIndex: 10}}
name="lock"
name={isNumeroAssureSearch ? 'lock' : 'user'}
size={20}
/>
}
@ -769,10 +905,11 @@ const SaisirFeuilleSoinScreen = ({
}}>
<Icon
style={{paddingRight: 5}}
name='user'
name={isNumeroAssureSearch ? 'user' : 'lock'}
size={20}
color={Color.primaryColor}
onPress={() => {
setIsNumeroAssureSearch(!isNumeroAssureSearch);
}}
/>
<Icon
@ -1157,12 +1294,13 @@ const SaisirFeuilleSoinScreen = ({
]}
onPress={e => {
handleSubmit(e);
if (onNext())
wizard.current.next();
}}>
{subscriptionList.loading ?
{(subscriptionList.loading || getUserByNameOrNumber.loading || getUserByIdQRCode.loading) ?
<ActivityIndicator
size="small"
color={colors.primary}
color="#fff"
/>
: <Icon
name="arrow-right"
@ -1179,6 +1317,7 @@ const SaisirFeuilleSoinScreen = ({
{showDateDebutGrossessePicker && renderDateDebutGrossessePicker()}
{showDateFinGrossessePicker && renderDateFinGrossessePicker()}
{showQRCodeScanner && renderDialogQRCodeScanner()}
{modalListAssure && renderListAssure()}
</View>
</ScrollView>
</KeyboardAvoidingView>
@ -1188,12 +1327,16 @@ const SaisirFeuilleSoinScreen = ({
const mapStateToProps = createStructuredSelector({
subscriptionList: selectSubscriptionList,
activatePaySubscription: selectActivatePaySubscription
activatePaySubscription: selectActivatePaySubscription,
getUserByNameOrNumber: selectGetUserByNameOrNumber,
getUserByIdQRCode: selectGetUserByIdQRCode,
});
export default connect(mapStateToProps, {
fetchActivePaySubscription,
fetchGetSubscriptionList,
fetchGetUserByIdQRCode,
fetchGetUserByNameOrNumber
})(
SaisirFeuilleSoinScreen,
);

View File

@ -640,5 +640,12 @@
"EXONERE": "Exonéré",
"DATE_ACCIDENT": "Date accident",
"DATE_DEBUT_GROSSESSE": "Date début de grossesse",
"DATE_FIN_GROSSESSE": "Date fin de grossesse"
"DATE_FIN_GROSSESSE": "Date fin de grossesse",
"SCAN": "Scanner",
"BRING_YOUR_CAMERA_CLOSER_TO_SCAN_QR_CODE": "Approchez votre caméra du QR Code afin de le scanner",
"CLOSE": "Fermer",
"EMPTY_LIST": "Liste vide",
"NO_ASSURE_MATCH_SEARCH": "Aucun assuré ne correspond à la recherche",
"LIST_ASSURE": "Liste des assurés",
"ASSURE_NON_EN_REGLE": "Assuré non en règle"
}

View File

@ -82,6 +82,8 @@ export const linkBankAccountUrl = testBaseUrl + '/walletService/wallets/users/li
export const payBillUrl = testBaseUrl + '/walletService/transactions/ilink';
export const getInsuranceListUrl = testBaseUrl + '/nanoSanteService/insurances';
export const getUserByIdQRCodeUrl = testBaseUrl + '/nanoSanteService/qrcode/read';
export const getUserByNameOrNumberUrl = testBaseUrl + '/nanoSanteService/insured';
export const subscribeInsuranceUrl = testBaseUrl + '/nanoSanteService/insurances/subscriptions';
export const getInsurancePrimeAmountUrl = testBaseUrl + '/nanoSanteService/insurances/subscriptions/bonus-amount';
export const uploadInsuranceImagetUrl = 'https://test.ilink-app.com:8086/insurances/subscriptions/upload-images';

View File

@ -7191,6 +7191,11 @@
"resolved" "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-2.2.2.tgz"
"version" "2.2.2"
"react-native-permissions@^3.0.5":
"integrity" "sha512-Y/kAU8cUTNhX5CLxfAG96ItEjjmwvyqnVBie38Gj8HoomXQcKM+ToFmq/rPt+DOziCq7YFKinn9AIlnLBiV3AQ=="
"resolved" "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.1.0.tgz"
"version" "3.1.0"
"react-native-phone-call@^1.0.9":
"integrity" "sha512-OPWYg8qeWNG/U4bWGMAKcQTH/ifqJnsvUPCH4lOkvWFHbQS3fbH5M8rFhXCzcfS0GVNzHhZX9ZByMM368TFAUQ=="
"resolved" "https://registry.npmjs.org/react-native-phone-call/-/react-native-phone-call-1.0.9.tgz"
@ -7405,7 +7410,7 @@
"resolved" "https://registry.npmjs.org/react-native-wizard/-/react-native-wizard-2.1.0.tgz"
"version" "2.1.0"
"react-native@*", "react-native@^0.0.0-0 || ^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || ^0.65.0 || ^0.66.0 || 1000.0.0", "react-native@^0.41.2", "react-native@^0.56.0", "react-native@^0.57.8", "react-native@^0.61.0", "react-native@>= 0.51", "react-native@>=0.11", "react-native@>=0.40.0", "react-native@>=0.44", "react-native@>=0.44.1", "react-native@>=0.45.0", "react-native@>=0.46", "react-native@>=0.47.0", "react-native@>=0.50.0", "react-native@>=0.57", "react-native@>=0.59", "react-native@>=0.60.0", "react-native@>=0.65.1", "react-native@0.61.5":
"react-native@*", "react-native@^0.0.0-0 || ^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || ^0.65.0 || ^0.66.0 || 1000.0.0", "react-native@^0.41.2", "react-native@^0.56.0", "react-native@^0.57.8", "react-native@^0.61.0", "react-native@>= 0.51", "react-native@>=0.11", "react-native@>=0.40.0", "react-native@>=0.44", "react-native@>=0.44.1", "react-native@>=0.45.0", "react-native@>=0.46", "react-native@>=0.47.0", "react-native@>=0.50.0", "react-native@>=0.57", "react-native@>=0.59", "react-native@>=0.60.0", "react-native@>=0.63.3", "react-native@>=0.65.1", "react-native@0.61.5":
"integrity" "sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q=="
"resolved" "https://registry.npmjs.org/react-native/-/react-native-0.61.5.tgz"
"version" "0.61.5"
@ -7553,7 +7558,7 @@
"raf" "^3.1.0"
"tween-functions" "^1.0.1"
"react@*", "react@^0.14.0 || ^15.0.0 || ^16.0.0", "react@^15.3.0 || ^16.0.0", "react@^16.0", "react@^16.0.0", "react@^16.8", "react@^16.8.3", "react@>= 16.0 || < 17.0", "react@>=15.3.1", "react@>=15.3.1 || >=16.0.0-beta.5", "react@>=16.3.0", "react@>=16.8.0", "react@>=16.8.6", "react@16.7.0", "react@16.9.0":
"react@*", "react@^0.14.0 || ^15.0.0 || ^16.0.0", "react@^15.3.0 || ^16.0.0", "react@^16.0", "react@^16.0.0", "react@^16.8", "react@^16.8.3", "react@>= 16.0 || < 17.0", "react@>=15.3.1", "react@>=15.3.1 || >=16.0.0-beta.5", "react@>=16.13.1", "react@>=16.3.0", "react@>=16.8.0", "react@>=16.8.6", "react@16.7.0", "react@16.9.0":
"integrity" "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w=="
"resolved" "https://registry.npmjs.org/react/-/react-16.9.0.tgz"
"version" "16.9.0"