@fto-consult/expo-ui 6.90.2 → 6.91.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.
- package/package.json +2 -2
- package/src/components/Datagrid/events/index.js +1 -1
- package/src/components/Stack/HStack.js +21 -0
- package/src/components/Stack/VStack.js +19 -0
- package/src/components/Stack/index.js +3 -0
- package/src/components/TableLink/index.js +42 -37
- package/src/context/TableData.js +46 -1
- package/src/context/TableDataLink.js +36 -0
- package/src/navigation/utils.js +16 -4
- package/src/screens/Help/openLibraries.js +1 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fto-consult/expo-ui",
|
3
|
-
"version": "6.
|
3
|
+
"version": "6.91.0",
|
4
4
|
"description": "Bibliothèque de composants UI Expo,react-native",
|
5
5
|
"main": "main",
|
6
6
|
"scripts": {
|
@@ -71,7 +71,7 @@
|
|
71
71
|
"@expo/html-elements": "^0.5.1",
|
72
72
|
"@expo/vector-icons": "^13.0.0",
|
73
73
|
"@faker-js/faker": "^8.0.2",
|
74
|
-
"@fto-consult/common": "^3.
|
74
|
+
"@fto-consult/common": "^3.66.0",
|
75
75
|
"@pchmn/expo-material3-theme": "^1.3.1",
|
76
76
|
"@react-native-async-storage/async-storage": "1.18.2",
|
77
77
|
"@react-native-community/datetimepicker": "7.2.0",
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import View from "$ecomponents/View";
|
2
|
+
import {forwardRef} from "react";
|
3
|
+
import { StyleSheet } from "react-native";
|
4
|
+
|
5
|
+
const HStackComponent = forwardRef(({style,...props},ref)=>{
|
6
|
+
return <View ref={ref} style={[styles.container,style]} {...props}/>
|
7
|
+
});
|
8
|
+
|
9
|
+
HStackComponent.displayName = "HStackComponent";
|
10
|
+
|
11
|
+
export default HStackComponent;
|
12
|
+
|
13
|
+
const styles = StyleSheet.create({
|
14
|
+
container : {
|
15
|
+
flexDirection:"row",
|
16
|
+
flexWrap : "wrap",
|
17
|
+
columnGap : 5,
|
18
|
+
alignItems : "center",
|
19
|
+
justifyContent : "flex-start",
|
20
|
+
}
|
21
|
+
})
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import View from "$ecomponents/View";
|
2
|
+
import {forwardRef} from "react";
|
3
|
+
import { StyleSheet } from "react-native";
|
4
|
+
|
5
|
+
const VStackComponent = forwardRef(({style,...props},ref)=>{
|
6
|
+
return <View ref={ref} style={[styles.container,style]} {...props}/>
|
7
|
+
});
|
8
|
+
|
9
|
+
VStackComponent.displayName = "VStackComponent";
|
10
|
+
|
11
|
+
export default VStackComponent;
|
12
|
+
|
13
|
+
const styles = StyleSheet.create({
|
14
|
+
container : {
|
15
|
+
flexDirection:"column",
|
16
|
+
alignItems : "flex-start",
|
17
|
+
justifyContent : "flex-start",
|
18
|
+
}
|
19
|
+
})
|
@@ -18,59 +18,64 @@ import useContext from "$econtext/hooks";
|
|
18
18
|
/***** la fonction fetchForeignData permet de spécifier s'il s'agit d'une données de structure où non
|
19
19
|
dans le champ isStructData
|
20
20
|
*/
|
21
|
-
const TableLinKComponent = React.forwardRef((props,ref)=>{
|
21
|
+
const TableLinKComponent = React.forwardRef(({containerProps,children,labelProps,...props},ref)=>{
|
22
|
+
const {testID,onPressLink,disabled,readOnly,fetchData,navigate,isAllowed:checkIfAllowed,Component,...rest} = usePrepareProps(props);
|
23
|
+
containerProps = defaultObj(containerProps);
|
24
|
+
labelProps = defaultObj(labelProps);
|
25
|
+
const CP = disabled || readOnly ? View : Pressable;
|
26
|
+
return <CP testID={testID} onLongPres={(e)=>React.stopEventPropagation(e)} {...containerProps} onPress={disabled || readOnly? undefined : onPressLink} style={[styles.container,containerProps.style]}>
|
27
|
+
<Tooltip testID={testID+"_Tooltip"} {...rest} style={[rest.style,{pointerEvents: disabled || readOnly ? 'none' : 'auto'}]} Component={Component} onPress={disabled || readOnly?undefined:onPressLink} ref={ref} readOnly={readOnly} disabled = {disabled}>
|
28
|
+
<Label testID={testID+"_Label"} underlined primary {...labelProps} style={[_styles.lh15,labelProps.style]} disabled={disabled} readOnly={readOnly}>{children}</Label>
|
29
|
+
</Tooltip>
|
30
|
+
</CP>
|
31
|
+
});
|
32
|
+
|
33
|
+
export const usePrepareProps = (props)=>{
|
22
34
|
const {components:{tableLinkPropsMutator}} = useContext();
|
23
|
-
let {disabled,readOnly,labelProps,server,
|
35
|
+
let {disabled,readOnly,labelProps,server,isStructData,type,perm,isAllowed,id,fetchForeignData,foreignKeyTable,foreignKeyColumn,data,testID,Component,routeName,routeParams,component,primary,triggerProps,onPress, ...rest} = tableLinkPropsMutator(props);
|
24
36
|
testID = defaultStr(testID,"RN_TableDataLinkContainer")
|
25
37
|
foreignKeyTable = defaultStr(foreignKeyTable).trim();
|
26
38
|
foreignKeyColumn = defaultStr(foreignKeyColumn).trim();
|
27
39
|
isStructData = isStructData || defaultStr(type).toLowerCase().replaceAll("_","").replaceAll("-","").includes("structdata");
|
28
|
-
rest = defaultObj(rest);
|
29
|
-
containerProps = defaultObj(containerProps)
|
30
|
-
labelProps = defaultObj(labelProps);
|
31
40
|
data = defaultObj(data);
|
32
41
|
id = typeof id =='number'? String(id) : defaultStr(id);
|
33
42
|
if(!id || !foreignKeyTable){
|
34
43
|
readOnly = true;
|
35
44
|
}
|
36
|
-
const
|
37
|
-
const
|
38
|
-
React.stopEventPropagation(event);
|
45
|
+
const fetchArgs = {type,columnType:type,isStructData,fetch,foreignKeyTable,foreignKeyColumn,data,id,value:id};
|
46
|
+
const checkIfAllowed = ()=>{
|
39
47
|
if((isNonNullString(perm))){
|
40
|
-
if(!Auth.isAllowedFromString(perm))return;
|
48
|
+
if(!Auth.isAllowedFromString(perm))return false;
|
41
49
|
} else {
|
42
|
-
if(
|
50
|
+
if(typeof isAllowed ==="function"){
|
51
|
+
if(!isAllowed(args)) return false;
|
52
|
+
} else if(!Auth[isStructData?"isStructDataAllowed":"isTableDataAllowed"]({table:foreignKeyTable,action:'read'})) return false;
|
43
53
|
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
const
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
const nav = isStructData ? navigateToStructData : navigateToTableData;
|
52
|
-
if(isObj(data) && (isNonNullString(foreignKeyColumn) ? data[foreignKeyColumn] !== undefined:true)){
|
53
|
-
nav({tableName:foreignKeyTable,isStructData,data});
|
54
|
-
}
|
55
|
-
});
|
56
|
-
}
|
57
|
-
return Promise.reject({msg:'type de données retournée par la fonction fetchForeignKeyData invalide',fetchForeignData,foreignKeyTable,foreignKeyColumn,id,data});
|
54
|
+
return true;
|
55
|
+
}
|
56
|
+
const navigate = (data)=>{
|
57
|
+
const nav = isStructData ? navigateToStructData : navigateToTableData;
|
58
|
+
if(isObj(data) && (isNonNullString(foreignKeyColumn) ? data[foreignKeyColumn] !== undefined:true)){
|
59
|
+
nav({tableName:foreignKeyTable,isStructData,data});
|
60
|
+
return Promise.resolve({data,foreignKeyTable});
|
58
61
|
}
|
62
|
+
return Promise.reject({msg:`type de données retournée par la fonction fetchForeignKeyData invalide, paramètres : table:${foreignKeyTable}, value:${id}`,fetchForeignData,foreignKeyTable,foreignKeyColumn,id,data});
|
63
|
+
}
|
64
|
+
const fetchData = (opts)=>{
|
65
|
+
return Promise.resolve(typeof fetchForeignData === 'function'? fetchForeignData({...fetchArgs,...defaultObj(opts)}) : undefined).then(navigate)
|
66
|
+
}
|
67
|
+
const onPressLink = (event)=>{
|
68
|
+
React.stopEventPropagation(event);
|
69
|
+
const args = {...React.getOnPressArgs(event),...fetchArgs};
|
70
|
+
if(checkIfAllowed() !== true) return;
|
71
|
+
const r = typeof onPress =='function'? onPress(args) : undefined;
|
72
|
+
if(r === false) return;
|
59
73
|
openPreloader("traitement de la requête...");
|
60
|
-
|
61
|
-
r.then(cb).finally(closePreloader);
|
62
|
-
} else {
|
63
|
-
cb().finally(closePreloader);
|
64
|
-
}
|
74
|
+
Promise.resolve(r).then((opts)=>fetchData({...args,...defaultObj(opts)})).finally(closePreloader);
|
65
75
|
}
|
66
|
-
rest.style = [rest.style,
|
67
|
-
|
68
|
-
|
69
|
-
<Tooltip testID={testID+"_Tooltip"} {...rest} Component={Component} onPress={disabled || readOnly?undefined:onPressLink} ref={ref} pointerEvents={pointerEvents} readOnly={readOnly} disabled = {disabled}>
|
70
|
-
<Label testID={testID+"_Label"} underlined primary {...labelProps} style={[_styles.lh15,labelProps.style]} disabled={disabled} readOnly={readOnly}>{children}</Label>
|
71
|
-
</Tooltip>
|
72
|
-
</CP>
|
73
|
-
});
|
76
|
+
rest.style = [rest.style,_styles.cursorPointer];
|
77
|
+
return {...rest,id,disabled,fetchData,navigate,isAllowed:checkIfAllowed,readOnly,testID,onPressLink}
|
78
|
+
}
|
74
79
|
|
75
80
|
export default TableLinKComponent;
|
76
81
|
|
package/src/context/TableData.js
CHANGED
@@ -6,6 +6,14 @@ import React from "$react";
|
|
6
6
|
import useExpo from "./hooks";
|
7
7
|
import {defaultStr,defaultBool,isObj,isNonNullString} from "$cutils";
|
8
8
|
import {getTableDataListRouteName,getTableDataRouteName,tableDataRouteName} from "$enavigation/utils";
|
9
|
+
import {Form as FormLoader} from "$ecomponents/ContentLoader";
|
10
|
+
import { tableDataLinkRouteName } from "../navigation/utils";
|
11
|
+
import { useEffect,useState } from "react";
|
12
|
+
import { usePrepareProps } from "../components/TableLink";
|
13
|
+
import View from "$ecomponents/View";
|
14
|
+
import Label from "$ecomponents/Label";
|
15
|
+
import theme from "$theme";
|
16
|
+
import notify from "$notify";
|
9
17
|
|
10
18
|
export function TableDataListScreen({tableName,table,screenName,...props}){
|
11
19
|
const {getTable} = useExpo();
|
@@ -81,6 +89,13 @@ export function prepareScreens ({tables,screens:screensProps,TableDataScreen,Tab
|
|
81
89
|
foundTables[listScreenName] = TableDataListScreen;
|
82
90
|
}
|
83
91
|
});
|
92
|
+
if(!foundTables[tableDataLinkRouteName]){
|
93
|
+
screens.push({
|
94
|
+
Component : TableDataLinkScreen,
|
95
|
+
screenName : tableDataLinkRouteName,
|
96
|
+
Modal,
|
97
|
+
})
|
98
|
+
}
|
84
99
|
return screens;
|
85
100
|
}
|
86
101
|
|
@@ -103,6 +118,36 @@ export const TableDataScreenItem = (props)=>{
|
|
103
118
|
}
|
104
119
|
return <Item testID={"RN_TableDataScreenItem_"+(defaultStr(tableName)).toUpperCase()}{...props} tableObj={tableObj} data={data} tableName={tableName} {...params}/>
|
105
120
|
}
|
106
|
-
TableDataScreenItem.Modal = true;
|
107
121
|
|
108
122
|
TableDataScreenItem.displayName = "TableDataScreenItem";
|
123
|
+
|
124
|
+
export function TableDataLinkScreen(p){
|
125
|
+
const {navigate,fetchData,isAllowed,...props} = usePrepareProps(p);
|
126
|
+
const [content,setContent] = useState(null);
|
127
|
+
const [data,setData] = useState(null);
|
128
|
+
const isLoading = !isObj(data);
|
129
|
+
useEffect(()=>{
|
130
|
+
if(!isAllowed()){
|
131
|
+
setContent(<NotAllowed />)
|
132
|
+
return ()=>{};
|
133
|
+
}
|
134
|
+
fetchData().then(setData).catch(notify.error);
|
135
|
+
return ()=>{}
|
136
|
+
},[])
|
137
|
+
return <TableDataScreenItem
|
138
|
+
children = {content||<FormLoader/>}
|
139
|
+
isLoading = {isLoading}
|
140
|
+
data = {isLoading ? {}:data}
|
141
|
+
tableName = {defaultStr(props.foreignKeyTable,props.tableName,props.table)}
|
142
|
+
{...props}
|
143
|
+
/>
|
144
|
+
}
|
145
|
+
|
146
|
+
TableDataLinkScreen.screenName = tableDataLinkRouteName;
|
147
|
+
TableDataLinkScreen.Modal = true;
|
148
|
+
|
149
|
+
function NotAllowed(){
|
150
|
+
return <View style={[theme.styles.flex1,theme.styles.h100,theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
|
151
|
+
<Label error textBold fontSize={18}>Vous n'êtes pas autorisé à accéder à la resource demandée!!!Veuillez contacter votre administrateur.</Label>
|
152
|
+
</View>
|
153
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import Screen from "$eScreen";
|
2
|
+
import {Form as FormLoader} from "$ecomponents/ContentLoader";
|
3
|
+
import { tableDataLinkRouteName } from "../navigation/utils";
|
4
|
+
import { useEffect,useState } from "react";
|
5
|
+
import { usePrepareProps } from "../components/TableLink";
|
6
|
+
import View from "$ecomponents/View";
|
7
|
+
import Label from "$ecomponents/Label";
|
8
|
+
import theme from "$theme";
|
9
|
+
import Preloader from "$preloader";
|
10
|
+
import notify from "$notify";
|
11
|
+
|
12
|
+
export default function TableDataLinkScreen(p){
|
13
|
+
const {navigate,fetchData,isAllowed,...props} = usePrepareProps(p);
|
14
|
+
const [content,setContent] = useState(null);
|
15
|
+
useEffect(()=>{
|
16
|
+
if(!isAllowed()){
|
17
|
+
setContent(<NotAllowed />)
|
18
|
+
return ()=>{};
|
19
|
+
}
|
20
|
+
Preloader.open("traitement de la requête....");
|
21
|
+
fetchData().then(navigate).catch(notify.error).finally(Preloader.close);
|
22
|
+
return ()=>{}
|
23
|
+
},[])
|
24
|
+
return <Screen
|
25
|
+
children = {content||<FormLoader/>}
|
26
|
+
{...props}
|
27
|
+
/>
|
28
|
+
}
|
29
|
+
|
30
|
+
function NotAllowed(){
|
31
|
+
return <View style={[theme.styles.flex1,theme.styles.h100,theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
|
32
|
+
<Label error textBold fontSize={18}>Vous n'êtes pas autorisé à accéder à la resource demandée!!!Veuillez contacter votre administrateur.</Label>
|
33
|
+
</View>
|
34
|
+
}
|
35
|
+
|
36
|
+
TableDataLinkScreen.screenName = tableDataLinkRouteName;
|
package/src/navigation/utils.js
CHANGED
@@ -5,9 +5,16 @@ import {navigate,sanitizeName} from "$cnavigation";
|
|
5
5
|
import {isNonNullString,defaultStr,defaultObj,isObj} from "$cutils";
|
6
6
|
import appConfig from "$capp/config";
|
7
7
|
|
8
|
-
export const tableDataRouteName = '
|
8
|
+
export const tableDataRouteName = 'table-data';
|
9
9
|
|
10
|
-
export const structDataRouteName = '
|
10
|
+
export const structDataRouteName = 'struct-data';
|
11
|
+
|
12
|
+
export const tableDataLinkRouteName = "table-data-link";
|
13
|
+
|
14
|
+
export const tableDataLinkScreenName = tableDataLinkRouteName;
|
15
|
+
|
16
|
+
export const structDataLinkRouteName = "struct-data-link";
|
17
|
+
export const structDataLinkScreeName = structDataLinkRouteName;
|
11
18
|
|
12
19
|
const canCheckNavPerms = ()=> appConfig.get("checkNavigationPermsOnTableOrStructData")
|
13
20
|
|
@@ -49,6 +56,11 @@ export const navigateToTableData = (tableName,params)=>{
|
|
49
56
|
export const navigateToStructData = (tableName,params)=>{
|
50
57
|
return navigateToTableOrStructData(tableName,params,"structdata");
|
51
58
|
}
|
59
|
+
/**** permet de naviguer ver un lien */
|
60
|
+
export const navigateToTableDataLink = (tableName,options)=>{
|
61
|
+
const opts = isNonNullString(tableName)? {tableName,table:tableName} : {};
|
62
|
+
return navigate(tableDataLinkRouteName,extendObj({},opts,options));
|
63
|
+
}
|
52
64
|
|
53
65
|
export const buildScreenRoute = function(tableName,parent){
|
54
66
|
if(isObj(tableName)){
|
@@ -75,11 +87,11 @@ export const getTableDataScreenName = getTableDataRouteName;
|
|
75
87
|
|
76
88
|
/*** permet d'obtenir le lien vers l'écran table data permettant de lister les données de la table data */
|
77
89
|
export const getTableDataListRouteName = function(tableName){
|
78
|
-
return buildScreenRoute(tableName,tableDataRouteName+"/
|
90
|
+
return buildScreenRoute(tableName,tableDataRouteName+"/list");
|
79
91
|
}
|
80
92
|
|
81
93
|
export const getStructDataListRouteName = function(tableName){
|
82
|
-
return buildScreenRoute(tableName,structDataRouteName+"/
|
94
|
+
return buildScreenRoute(tableName,structDataRouteName+"/list");
|
83
95
|
}
|
84
96
|
|
85
97
|
export const getTableDataListScreenName = getTableDataListRouteName;
|
@@ -1 +1 @@
|
|
1
|
-
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.
|
1
|
+
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.90.2","repository":{"type":"git","url":"git+https://github.com/borispipo/expo-ui.git"},"homepage":"https://github.com/borispipo/expo-ui#readme"},"@babel/plugin-proposal-export-namespace-from":{"version":"7.18.9","url":"https://babel.dev/docs/en/next/babel-plugin-proposal-export-namespace-from","license":"MIT"},"@emotion/native":{"version":"11.11.0","url":"https://emotion.sh","license":"MIT"},"@emotion/react":{"version":"11.11.1","url":"https://github.com/emotion-js/emotion/tree/main/packages/react","license":"MIT"},"@expo/html-elements":{"version":"0.5.1","url":"https://github.com/expo/expo/tree/main/packages/html-elements","license":"MIT"},"@expo/metro-config":{"version":"0.10.7","url":"https://github.com/expo/expo.git","license":"MIT"},"@expo/vector-icons":{"version":"13.0.0","url":"https://expo.github.io/vector-icons","license":"MIT"},"@expo/webpack-config":{"version":"19.0.0","url":"https://github.com/expo/expo-cli.git","license":"MIT"},"@faker-js/faker":{"version":"8.0.2","url":"https://github.com/faker-js/faker.git","license":"MIT"},"@fto-consult/common":{"version":"3.65.12","url":"https://github.com/borispipo/common#readme","license":"ISC"},"@pchmn/expo-material3-theme":{"version":"1.3.1","url":"https://github.com/pchmn/expo-material3-theme#readme","license":"MIT"},"@react-native-async-storage/async-storage":{"version":"1.18.2","url":"https://github.com/react-native-async-storage/async-storage#readme","license":"MIT"},"@react-native-community/datetimepicker":{"version":"7.2.0","url":"https://github.com/react-native-community/datetimepicker#readme","license":"MIT"},"@react-native-community/netinfo":{"version":"9.3.10","url":"https://github.com/react-native-netinfo/react-native-netinfo#readme","license":"MIT"},"@react-native/assets-registry":{"version":"0.72.0","url":"git@github.com:facebook/react-native.git","license":"MIT"},"@react-navigation/native":{"version":"6.1.9","url":"https://reactnavigation.org","license":"MIT"},"@react-navigation/native-stack":{"version":"6.9.17","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"@react-navigation/stack":{"version":"6.3.20","url":"https://reactnavigation.org/docs/stack-navigator/","license":"MIT"},"@shopify/flash-list":{"version":"1.4.3","url":"https://shopify.github.io/flash-list/","license":"MIT"},"apexcharts":{"version":"3.44.0","url":"https://apexcharts.com","license":"MIT"},"babel-plugin-inline-dotenv":{"version":"1.7.0","url":"https://github.com/brysgo/babel-plugin-inline-dotenv#readme","license":"ISC"},"babel-plugin-module-resolver":{"version":"5.0.0","url":"https://github.com/tleunen/babel-plugin-module-resolver.git","license":"MIT"},"expo":{"version":"49.0.21","url":"https://github.com/expo/expo/tree/main/packages/expo","license":"MIT"},"expo-camera":{"version":"13.4.4","url":"https://docs.expo.dev/versions/latest/sdk/camera/","license":"MIT"},"expo-clipboard":{"version":"4.3.1","url":"https://docs.expo.dev/versions/latest/sdk/clipboard","license":"MIT"},"expo-font":{"version":"11.4.0","url":"https://docs.expo.dev/versions/latest/sdk/font/","license":"MIT"},"expo-image-picker":{"version":"14.3.2","url":"https://docs.expo.dev/versions/latest/sdk/imagepicker/","license":"MIT"},"expo-linking":{"version":"5.0.2","url":"https://docs.expo.dev/versions/latest/sdk/linking","license":"MIT"},"expo-sharing":{"version":"11.5.0","url":"https://docs.expo.dev/versions/latest/sdk/sharing/","license":"MIT"},"expo-sqlite":{"version":"11.3.3","url":"https://docs.expo.dev/versions/latest/sdk/sqlite/","license":"MIT"},"expo-status-bar":{"version":"1.6.0","url":"https://docs.expo.dev/versions/latest/sdk/status-bar/","license":"MIT"},"expo-system-ui":{"version":"2.4.0","url":"https://docs.expo.dev/versions/latest/sdk/system-ui","license":"MIT"},"expo-web-browser":{"version":"12.3.2","url":"https://docs.expo.dev/versions/latest/sdk/webbrowser/","license":"MIT"},"file-saver":{"version":"2.0.5","url":"https://github.com/eligrey/FileSaver.js#readme","license":"MIT"},"fs-extra":{"version":"11.2.0","url":"https://github.com/jprichardson/node-fs-extra","license":"MIT"},"google-libphonenumber":{"version":"3.2.33","url":"https://ruimarinho.github.io/google-libphonenumber/","license":"(MIT AND Apache-2.0)"},"htmlparser2-without-node-native":{"version":"3.9.2","url":"git://github.com/fb55/htmlparser2.git","license":"MIT"},"is-plain-obj":{"version":"4.1.0","license":"MIT"},"js-base64":{"version":"3.7.5","license":"BSD-3-Clause"},"pdfmake":{"version":"0.2.8","url":"http://pdfmake.org","license":"MIT"},"process":{"version":"0.11.10","url":"git://github.com/shtylman/node-process.git","license":"MIT"},"prop-types":{"version":"15.8.1","url":"https://facebook.github.io/react/","license":"MIT"},"react":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-content-loader":{"version":"6.2.1","url":"https://github.com/danilowoz/react-content-loader","license":"MIT"},"react-dom":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-native":{"version":"0.72.6","license":"MIT"},"react-native-big-list":{"version":"1.6.1","url":"https://marcocesarato.github.io/react-native-big-list-docs/","license":"GPL-3.0-or-later"},"react-native-blob-util":{"version":"0.18.6","url":"https://github.com/RonRadtke/react-native-blob-util","license":"MIT"},"react-native-get-random-values":{"version":"1.9.0","license":"MIT"},"react-native-iphone-x-helper":{"version":"1.3.1","url":"https://github.com/ptelad/react-native-iphone-x-helper#readme","license":"MIT"},"react-native-mime-types":{"version":"2.4.0","license":"MIT"},"react-native-paper":{"version":"5.11.3","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.20.4","url":"https://github.com/web-ridge/react-native-paper-dates#readme","license":"MIT"},"react-native-reanimated":{"version":"3.3.0","url":"https://github.com/software-mansion/react-native-reanimated#readme","license":"MIT"},"react-native-safe-area-context":{"version":"4.6.3","url":"https://github.com/th3rdwave/react-native-safe-area-context#readme","license":"MIT"},"react-native-screens":{"version":"3.22.1","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"react-native-svg":{"version":"13.9.0","url":"https://github.com/react-native-community/react-native-svg","license":"MIT"},"react-native-web":{"version":"0.19.9","url":"git://github.com/necolas/react-native-web.git","license":"MIT"},"react-native-webview":{"version":"13.2.2","url":"https://github.com/react-native-webview/react-native-webview#readme","license":"MIT"},"react-virtuoso":{"version":"4.6.2","url":"https://virtuoso.dev/","license":"MIT"},"sharp-cli":{"version":"2.1.0","url":"https://github.com/vseventer/sharp-cli","license":"MIT"},"tippy.js":{"version":"6.3.7","url":"https://atomiks.github.io/tippyjs/","license":"MIT"},"websql":{"version":"2.0.3","url":"git://github.com/nolanlawson/node-websql.git","license":"Apache-2.0"},"xlsx":{"version":"0.18.5","url":"https://sheetjs.com/","license":"Apache-2.0"}};
|