@fto-consult/expo-ui 6.71.3 → 6.71.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "6.71.3",
3
+ "version": "6.71.4",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "main",
6
6
  "scripts": {
@@ -78,7 +78,7 @@
78
78
  "@react-native-community/netinfo": "9.3.10",
79
79
  "@react-native/assets-registry": "^0.72.0",
80
80
  "@react-navigation/native": "^6.1.9",
81
- "@react-navigation/native-stack": "^6.9.16",
81
+ "@react-navigation/native-stack": "^6.9.17",
82
82
  "@react-navigation/stack": "^6.3.20",
83
83
  "@shopify/flash-list": "1.4.3",
84
84
  "apexcharts": "^3.44.0",
@@ -4,6 +4,7 @@ import _DrawerItem from "./_DrawerItem";
4
4
  import {navigate,setActiveRoute} from "$cnavigation";
5
5
  import { useDrawer } from "../Provider";
6
6
  import { setActiveItem,getOnPressAction,closeDrawer as nCloseDrawer,previousActiveItemRef,activeItemRef} from "./utils";
7
+ import {useIsScreenFocused} from "$enavigation/hooks";
7
8
  import React from "$react";
8
9
 
9
10
 
@@ -12,7 +13,7 @@ import React from "$react";
12
13
  export default function DrawerItem(props){
13
14
  let {navigation,closeOnPress,routeName,routeParams,...rest} = props;
14
15
  const {drawerRef,isItemActive} = useDrawer();
15
- const isActive = isItemActive(props);
16
+ const isActive = useIsScreenFocused(routeName) || isItemActive(props);
16
17
  const [active,setActive] = React.useState(isActive);
17
18
  const isMounted = React.useIsMounted();
18
19
  const itemId = React.useState(uniqid("drawer-item-id"));
@@ -35,20 +36,6 @@ export default function DrawerItem(props){
35
36
  setActive(isActive);
36
37
  }
37
38
  },[isActive])
38
- React.useEffect(()=>{
39
- const onScreenFocus = ({sanitizedName,screenName})=>{
40
- if(screenName == routeName || sanitizedName === routeName){
41
- setActiveRoute({name:routeName,params:routeParams})
42
- if(isMounted()){
43
- setActiveItem(context,true);
44
- }
45
- }
46
- };
47
- APP.on(APP.EVENTS.SCREEN_FOCUS,onScreenFocus);
48
- return ()=>{
49
- APP.off(APP.EVENTS.SCREEN_FOCUS,onScreenFocus);
50
- }
51
- },[])
52
39
  return <_DrawerItem
53
40
  {...rest}
54
41
  drawerRef = {drawerRef}
@@ -8,8 +8,7 @@ import theme,{Colors} from "$theme";
8
8
  import Group from "./GroupComponent";
9
9
  import {Portal} from "react-native-paper";
10
10
  import {isAllowedFromStr} from "$cauth/perms";
11
-
12
- const activeRef = {current:null};
11
+ import { useIsScreenFocused } from '$enavigation/hooks';
13
12
 
14
13
  export const isValid = (context)=>{
15
14
  if(!isObj(context) || !isNonNullString(context.fabId) || typeof context.show !=="function" || context.hide !="function") return false;
@@ -49,65 +48,6 @@ export const isActive = (fabId)=>{
49
48
  return isNonNullString(fabId) && fabIdRefs.current[fabIdRefs.current.length-1] == fabId && isValid(getFab(fabId));
50
49
  }
51
50
 
52
- export const MANAGER = {
53
- get active (){
54
- return activeRef.current;
55
- },
56
- ///la liste des fabs
57
- get all (){
58
- return allFabs;
59
- },
60
- ///la liste des fabs Id
61
- get fabIds (){
62
- return fabIdRefs.current;
63
- },
64
- set active(active){
65
- active = isValid(active)? active : null;
66
- if(active){
67
- ///on désactive l'ancien fab qui était actif
68
- if(isValid(activeRef.current)){
69
- activeRef.current.hide();
70
- }
71
- activateFabId(active.fabId);
72
- activeRef.current = active;
73
- } else {
74
- //l'ancien fab devient active
75
- let length = fabIdRefs.current.length-1;
76
- let prevActive = null,prevFabId = null;
77
- ///ça veut dire que l'ancien fab active a été démonté
78
- if(isValid(activeRef.current)){
79
- prevFabId = activeRef.current.fabId
80
- }
81
- while(length >=0 && !isValid(prevActive)){
82
- const fId = fabIdRefs.current[length];
83
- if(isNonNullString(fId) && fId !== prevFabId){
84
- prevActive = allFabs[fId];
85
- if(isValid(prevActive)){
86
- break;
87
- }
88
- }
89
- length --;
90
- }
91
- if(!prevActive){
92
- fabIdRefs.current = [];
93
- Object.map(allFabs,(f,i)=>{
94
- delete allFabs[i];
95
- })
96
- }
97
- if(isValid(prevActive)){
98
- prevActive.show();
99
- activateFabId(prevActive.fabId);
100
- }
101
- activeRef.current = prevActive;
102
- }
103
- },
104
- get hasActive(){
105
- return isValid(activeRef.current);
106
- },
107
- get get (){
108
- return getFab;
109
- }
110
- };
111
51
 
112
52
  export const activate = (args)=>{
113
53
  const {context,fabId} = args;
@@ -125,6 +65,10 @@ const FabGroupComponent = React.forwardRef((props,innerRef)=>{
125
65
  const fabIdRef = React.useRef(defaultStr(fabId,uniqid("fab-id-ref")));
126
66
  fabId = fabIdRef.current;
127
67
  const isMountedRef = React.useRef(false);
68
+ let isFocused = useIsScreenFocused(screenName);
69
+ if(!isNonNullString(screenName)){
70
+ isFocused = true;
71
+ }
128
72
  const [state, setState] = React.useState({
129
73
  open: typeof customOpen =='boolean'? customOpen : false,
130
74
  display : typeof customDisplay ==='boolean'? customDisplay : true,
@@ -205,30 +149,25 @@ const FabGroupComponent = React.forwardRef((props,innerRef)=>{
205
149
  isMountedRef.current = false;
206
150
  React.setRef(innerRef,null);
207
151
  }
208
- },[])
209
- React.useEffect(()=>{
210
- if(display){
211
- MANAGER.active = context;
212
- } else {
213
- MANAGER.active = null;
214
- }
215
- },[display]);
216
- return <Group
217
- {...rest}
218
- color = {color}
219
- style = {[rest.style,styles.container]}
220
- fabStyle = {[styles.fab,fabStyle,{backgroundColor},!display && styles.hidden]}
221
- open={open ?true : false}
222
- icon={open ? openedIcon : closedIcon}
223
- actions={actions}
224
- onStateChange={onStateChange}
225
- onPress={(e) => {
226
- context.opened = open;
227
- if (open && onOpen) {
228
- onOpen(e);
229
- }
230
- }}
231
- />
152
+ },[]);
153
+ return <Portal>
154
+ <Group
155
+ {...rest}
156
+ color = {color}
157
+ style = {[rest.style,styles.container]}
158
+ fabStyle = {[styles.fab,fabStyle,{backgroundColor},!display || !isFocused && styles.hidden]}
159
+ open={open ?true : false}
160
+ icon={open ? openedIcon : closedIcon}
161
+ actions={actions}
162
+ onStateChange={onStateChange}
163
+ onPress={(e) => {
164
+ context.opened = open;
165
+ if (open && onOpen) {
166
+ onOpen(e);
167
+ }
168
+ }}
169
+ />
170
+ </Portal>
232
171
  });
233
172
  const actionType = PropTypes.shape({
234
173
  icon : PropTypes.string,
@@ -40,7 +40,13 @@ Object.map(Utils,(v,i)=>{
40
40
  getTableData : ()=>{object|array}
41
41
  getStructData : ()=>{object|array}
42
42
  tablesData : {object:{
43
- table1:{drawerSortOrder:{number,l'ordre d'apparition dans le drawer},showInDrawer:{boolean|{funct<{boolean}>},si l'on affichera la table de données dans le drawers}},
43
+ table1:{
44
+ drawerSortOrder:{number,l'ordre d'apparition dans le drawer},showInDrawer:{boolean|{funct<{boolean}>,
45
+ showInFab{boolean},
46
+ showInDrawer{boolean},
47
+ fabProps {object|function({tableName})}, retourne les props à appliquer au composant fab lié à la tabl,
48
+ si elle définit une propriété nomée actions de types tableau, alors, ces actions seront utilisées commes actions personnalisées du fab
49
+ },si l'on affichera la table de données dans le drawers}},
44
50
  table2:{},
45
51
  table3:{},...[tableN]:{}}
46
52
  }, la liste des tables de données
@@ -54,7 +54,8 @@ export function prepareScreens ({tables,screens:screensProps,TableDataScreen,Tab
54
54
  TableDataScreenComponentRef.current = React.isComponent(TableDataScreen)? TableDataScreen : TableDataScreenComponentRef.current;
55
55
  TableDataScreenComponentRef.List = React.isComponent(TableDataScreenList)? TableDataScreenList : TableDataScreenComponentRef.List;
56
56
  const Modal = defaultBool(TableDataScreenComponentRef.current?.Modal,TableDataScreenComponentRef.current?.modal,true)
57
- const withFab = typeof TableDataScreenComponentRef.current?.withFab =="boolean"? TableDataScreenComponentRef.current?.withFab : false;
57
+ const ModalList = defaultBool(TableDataScreenComponentRef.List?.Modal,TableDataScreenComponentRef.List?.modal)
58
+ const withFab = typeof TableDataScreenComponentRef.List?.withFab =="boolean"? TableDataScreenComponentRef.List?.withFab: undefined;
58
59
  loopForScreen(screensProps,screens,foundTables);
59
60
  Object.map(tables,(table,i)=>{
60
61
  if(!isObj(table) || !isNonNullString(i)) return;
@@ -64,18 +65,17 @@ export function prepareScreens ({tables,screens:screensProps,TableDataScreen,Tab
64
65
  screens.push({
65
66
  Component : TableDataScreenItem,
66
67
  screenName,
67
- withFab,
68
68
  Modal
69
69
  })
70
70
  foundTables[screenName] = TableDataScreenItem;
71
71
  } else if(React.isComponent(foundTables[screenName])){
72
72
  foundTables[screenName].Modal = defaultBool(foundTables[screenName]?.Modal,foundTables[screenName].modal,Modal)
73
- foundTables[screenName].withFab = typeof foundTables[screenName]?.withFab ==="boolean" ? foundTables[screenName]?.withFab : withFab;
74
73
  }
75
74
  if(!foundTables[listScreenName] && table.datagrid !== false){
76
75
  screens.push({
77
76
  Component : TableDataListScreen,
78
77
  screenName : listScreenName,
78
+ Modal : ModalList,
79
79
  withFab,
80
80
  });
81
81
  foundTables[listScreenName] = TableDataListScreen;
@@ -12,12 +12,12 @@ export * from "./utils";
12
12
 
13
13
  const FabLayoutComponent = React.forwardRef((p,ref)=>{
14
14
  const {components:{fabPropsMutator},tablesData} = useExpoUI();
15
- const {style,actions:fabActions,...props} = typeof fabPropsMutator == 'function'? extendObj({},p,fabPropsMutator({...p,isLoggedIn})) : p;
15
+ const {style,actions:fabActions,useTables,...props} = typeof fabPropsMutator == 'function'? extendObj({},p,fabPropsMutator({...p,isLoggedIn})) : p;
16
16
  const isLoggedIn = useIsSignedIn();
17
17
  const tables = isObjOrArray(fabActions)? fabActions : tablesData;
18
18
  const actions = React.useMemo(()=>{
19
19
  if(Array.isArray(fabActions)) return fabActions;
20
- if(!isLoggedIn) return null;
20
+ if(!isLoggedIn || useTables === false) return null;
21
21
  const a = [];
22
22
  Object.map(tables,(table,i,index)=>{
23
23
  if(!isObj(table) || table.showInFab === false || typeof table.showInFab =="function" && table.showInFab() === false) return;
@@ -26,12 +26,22 @@ const FabLayoutComponent = React.forwardRef((p,ref)=>{
26
26
  const addText = defaultStr(table.newElementLabel,"Nouveau");
27
27
  const tableName = defaultStr(table.table,table.tableName);
28
28
  if(!table || !icon || !text || !Auth.isTableDataAllowed({table:tableName,action:'create'})) return;
29
- let fabProps = typeof table.getFabProps ==='function'? table.getFabProps({tableName}) : defaultObj(table.fabProps);;
29
+ let fabProps = typeof table.fabProps ==='function'? table.fabProps({tableName}) : defaultObj(table.fabProps);;
30
30
  if(fabProps === false) return;
31
31
  fabProps = defaultObj(fabProps);
32
32
  const cSuffix = theme.Colors.getSuffix(index);
33
33
  const color = theme.Colors.isValid(fabProps.color)? fabProps.color : theme.Colors.getContrast(cSuffix);
34
34
  const backgroundColor = theme.Colors.isValid(fabProps.backgroundColor)?fabProps.backgroundColor : cSuffix;
35
+ if(Array.isArray(fabProps.actions)){
36
+ return fabProps.actions.map((p)=>{
37
+ if(!isObj(p) || (!p.label && !p.text)) return null;
38
+ a.push({
39
+ color,
40
+ backgroundColor,
41
+ ...p,
42
+ });
43
+ })
44
+ }
35
45
  const label = defaultStr(fabProps.label,fabProps.text,"{0} | {1}".sprintf(addText,text));
36
46
  a.push({
37
47
  icon,
@@ -70,6 +80,7 @@ const styles = StyleSheet.create({
70
80
 
71
81
  FabLayoutComponent.propTypes = {
72
82
  ...Fab.propTypes,
83
+ useTables : PropTypes.bool,//si les tables data seront exploités pour la génération du fab
73
84
  actions : PropTypes.array, //les actions du fab layout
74
85
  screenName : PropTypes.string,
75
86
  }
@@ -1,4 +1,6 @@
1
- import {createContext,useContext} from "react";
1
+ import {createContext,useContext,useState,useEffect,useMemo} from "react";
2
+ import APP from "$capp/instance";
3
+ import {sanitizeName} from '$cnavigation';
2
4
 
3
5
  const MainNavigationContext = createContext(null);
4
6
 
@@ -8,4 +10,34 @@ export const useMainNavigation = ()=>{
8
10
 
9
11
  export const MainNavigationProvider = ({children,...props})=>{
10
12
  return <MainNavigationContext.Provider value = {props} children={children}/>
13
+ }
14
+
15
+ /*****
16
+ appélé lorsqu'un écran est focus
17
+ @param {string} screenName, le nom de l'écran en question
18
+ @return {boolean}, pour indiqué si l'écran est focused
19
+ */
20
+ export const useIsScreenFocused = (screenName)=>{
21
+ const sanitizedName = sanitizeName(screenName);
22
+ if(!sanitizeName) return false;
23
+ const [isFocused,setIsFocused] = useState(false);
24
+ useEffect(()=>{
25
+ const toggle = (setFocus)=>{
26
+ setIsFocused(setFocus);
27
+ }, check = (sName,rName)=>{
28
+ return sName === sanitizedName || rName === screenName;
29
+ }
30
+ const onScreenFocus = ({sanitizedName:sName,screenName:rName})=>{
31
+ toggle(check(sName,rName));
32
+ },onScreenBlur = ({sanitizedName:sName,screenName:rName})=>{
33
+ toggle(!check(sName,rName));
34
+ };
35
+ APP.on(APP.EVENTS.SCREEN_FOCUS,onScreenFocus);
36
+ APP.on(APP.EVENTS.SCREEN_BLUR,onScreenBlur);
37
+ return ()=>{
38
+ APP.off(APP.EVENTS.SCREEN_FOCUS,onScreenFocus);
39
+ APP.off(APP.EVENTS.SCREEN_BLUR,onScreenBlur);
40
+ }
41
+ },[])
42
+ return useMemo(()=>isFocused,[isFocused]);
11
43
  }
@@ -7,8 +7,7 @@ import useContext from "$econtext/hooks";
7
7
  import { MainNavigationProvider } from "./hooks";
8
8
  import {isWeb,isAndroid} from "$cplatform";
9
9
  import Stack from "./Stack";
10
- import theme from "$theme";
11
- import {defaultObj} from "$cutils";
10
+ import theme from "$theme";;
12
11
 
13
12
  export * from "./hooks";
14
13
 
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.70.3","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.59.3","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.16","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.16","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.1.1","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.7","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-gesture-handler":{"version":"2.12.1","url":"https://github.com/software-mansion/react-native-gesture-handler#readme","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.1","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.20.3","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"}};
1
+ module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.71.3","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.59.3","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.16","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.1.1","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.7","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-gesture-handler":{"version":"2.12.1","url":"https://github.com/software-mansion/react-native-gesture-handler#readme","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.1","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.20.3","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"}};
@@ -23,7 +23,11 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
23
23
  screenName = Screen.screenName;
24
24
  screenOptions = Screen.options;
25
25
  const Modal = typeof Screen.Modal =='boolean'? Screen.Modal : typeof Screen.modal =='boolean'? Screen.modal : undefined;
26
+ const withFab = typeof Screen.withFab =='boolean'? Screen.withFab : undefined;
26
27
  Screen = Screen.Component;
28
+ if(typeof withFab =='boolean'){
29
+ Screen.withFab = withFab;
30
+ }
27
31
  if(Modal !== undefined){
28
32
  Screen.Modal = Modal;
29
33
  }
@@ -68,6 +72,8 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
68
72
  const options = typeof Screen.options === 'function'? Screen.options(args) : typeof screenOptions ==='function'? screenOptions(args) : defaultObj(Screen.options,screenOptions);
69
73
  options.screenName = screenName;
70
74
  options.Screen = Screen;
75
+ options.Modal = typeof Screen.Modal =='boolean'? Screen.Modal : options.Modal;
76
+ options.withFab = typeof Screen.withFab =='boolean'? Screen.withFab : options.withFab;
71
77
  options.groupName = groupName;
72
78
  options.authRequired = authRequired;
73
79
  SCREEN_OPTIONS[sanitizedName] = options;