@fto-consult/expo-ui 6.85.5 → 6.86.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "6.85.5",
3
+ "version": "6.86.0",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "main",
6
6
  "scripts": {
@@ -409,7 +409,7 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
409
409
  pageRef.current = firstPage;
410
410
  }
411
411
  if(typeof beforeFetchData =="function" && beforeFetchData(args)==false) return;
412
- doRefresh(typeof renderProgressBar =='boolean'? renderProgressBar : force);
412
+ doRefresh(typeof renderProgressBar =='boolean'? renderProgressBar : showProgressRef.current);
413
413
  return false;
414
414
  }}
415
415
  isSWRDatagrid
@@ -72,7 +72,7 @@ Object.map(Utils,(v,i)=>{
72
72
 
73
73
  navigation : {
74
74
  screens : {Array}, les écrans de navigation,
75
- screenOptions : {object}, les options du composant Stack.Navigator, voir https://reactnavigation.org/docs/native-stack-navigator/
75
+ screenOptions : {object|function}, les options du composant Stack.Navigator, voir https://reactnavigation.org/docs/native-stack-navigator/
76
76
  drawerItems : {object|array|function}, la fonction permettant d'obtenir les items du drawer principal de l'application, Chaque item du drawer doit avoir la chaine drawerSection, chaine de caractère determinant le code de la section dans lequel l'afficher
77
77
  drawerSections : {object : {
78
78
  [key{string}]:{string}} |
@@ -165,7 +165,7 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,a
165
165
  APP.off(APP.EVENTS.GO_ONLINE,callback);
166
166
  }
167
167
  }
168
- },swrConfig);
168
+ },swrConfig,{refreshTimeout:swrRefreshTimeout});
169
169
  if(parseMangoQueries !== undefined){
170
170
  appConfig.set("parseMangoQueries",parseMangoQueries);
171
171
  }
@@ -1,2 +1,2 @@
1
1
 
2
- export const SWR_REFRESH_TIMEOUT = 5000*60;
2
+ export const SWR_REFRESH_TIMEOUT = 2500*60;
@@ -1,7 +1,9 @@
1
1
  //import { createNativeStackNavigator } from '@react-navigation/native-stack';
2
- import { createStackNavigator } from '@react-navigation/stack';
2
+ import { createStackNavigator,CardStyleInterpolators } from '@react-navigation/stack';
3
3
 
4
4
  export const Stack = createStackNavigator()
5
5
  //export const Stack = createNativeStackNavigator();
6
6
 
7
- export default Stack;
7
+ export default Stack;
8
+
9
+ export {CardStyleInterpolators};
@@ -6,7 +6,8 @@ import DrawerNavigator from "./Drawer";
6
6
  import useContext from "$econtext/hooks";
7
7
  import { MainNavigationProvider } from "./hooks";
8
8
  import {isWeb,isAndroid} from "$cplatform";
9
- import Stack from "./Stack";
9
+ import Stack,{CardStyleInterpolators} from "./Stack";
10
+ import {extendObj,defaultObj} from "$cutils";
10
11
  import theme from "$theme";;
11
12
 
12
13
  export * from "./hooks";
@@ -18,11 +19,9 @@ export * from "./utils";
18
19
  */
19
20
  export default function NavigationComponent (props){
20
21
  let {state,hasGetStarted,isLoading,onGetStart,initialRouteName,...rest} = props;
21
- if(isLoading) return null;
22
+ const cardStyleInterpolator = isAndroid() ? CardStyleInterpolators.forFadeFromBottomAndroid : CardStyleInterpolators.forHorizontalIOS;
22
23
  const {navigation:{screens,screenOptions}} = useContext();
23
- const allScreens = initScreens({Factory:Stack,screens,ModalFactory:Stack,filter:({name})=>{
24
- return true;
25
- }});
24
+ const allScreens = initScreens({Factory:Stack,screens,ModalFactory:Stack});
26
25
  initialRouteName = sanitizeName(initialRouteName);
27
26
  const drawerScreens = handleContent({screens:allScreens,onGetStart,hasGetStarted,initialRouteName,state,Factory:Stack});
28
27
  const stackScreens = handleContent({screens:allScreens.modals,onGetStart,hasGetStarted,initialRouteName,state,Factory:Stack});
@@ -30,13 +29,19 @@ export default function NavigationComponent (props){
30
29
  console.error("apps will stuck on splash screen because any valid screen has been found on screens ",allScreens);
31
30
  }
32
31
  setInitialRouteName(initialRouteName);
33
- const opts = {
34
- headerShown : false,
35
- header : ()=> null,
36
- headerStyle: { backgroundColor: theme.colors.primary},
37
- presentation : isAndroid() || isWeb()? "modal":"default",
38
- animationEnabled : !isWeb(),
39
- ...Object.assign({},screenOptions)
32
+ const getScreenOptions = (options,opt2)=>{
33
+ const sOptions = defaultObj(typeof screenOptions =='function'? screenOptions(options) : screenOptions);
34
+ const {navigation} = options;
35
+ return extendObj(true,{},{
36
+ headerShown : false,
37
+ header : ()=> null,
38
+ headerStyle: { backgroundColor: theme.colors.primary},
39
+ presentation : isAndroid() || isWeb()? "modal":"default",
40
+ animationEnabled : !isWeb(),
41
+ detachPreviousScreen: !navigation.isFocused(),
42
+ cardStyleInterpolator,
43
+ ...defaultObj(opt2),
44
+ },sOptions);
40
45
  }
41
46
  const cardStyle = { backgroundColor: 'transparent' };
42
47
  if(isWeb()){
@@ -46,18 +51,19 @@ export default function NavigationComponent (props){
46
51
  <DrawerNavigator {...props}>
47
52
  {<Stack.Navigator
48
53
  initialRouteName={initialRouteName}
49
- screenOptions={opts}
54
+ screenOptions={getScreenOptions}
50
55
  >
51
- {<Stack.Group screenOptions={{...opts}}>
56
+ {<Stack.Group>
52
57
  {drawerScreens}
53
58
  </Stack.Group>}
54
59
  <Stack.Group
55
60
  key = {"MODAL-DRAWERS-SCREENS"}
56
- screenOptions={{
57
- ...opts,
58
- presentation :"transparentModal",
59
- cardStyle,
60
- animationEnabled : true,
61
+ screenOptions={function(options){
62
+ return getScreenOptions(options,{
63
+ presentation :"transparentModal",
64
+ cardStyle,
65
+ animationEnabled : true,
66
+ })
61
67
  }}
62
68
  >
63
69
  {stackScreens}
@@ -7,7 +7,7 @@ export * from "./mainScreens";
7
7
 
8
8
  export * from "./utils";
9
9
 
10
- export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=>{
10
+ export const handleScreen = ({Screen,Factory,ModalFactory,result,index})=>{
11
11
  result = defaultObj(result);
12
12
  result.screens = defaultObj(result.screens);
13
13
  result.groups = defaultObj(result.groups);
@@ -17,7 +17,7 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
17
17
  let screenOptions = undefined;
18
18
  if(Array.isArray(Screen)){
19
19
  Screen.map((S,i)=>{
20
- return handleScreen({Screen:S,Factory,ModalFactory,result,groups,filter,index:i});
20
+ return handleScreen({Screen:S,Factory,ModalFactory,result,groups,index:i});
21
21
  })
22
22
  } else if(typeof Screen ==='object' && React.isComponent(Screen.Component) && isNonNullString(Screen.screenName)){
23
23
  screenName = Screen.screenName;
@@ -37,11 +37,7 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
37
37
  if(isNonNullString(screenName)){
38
38
  let name = screenName;
39
39
  const sanitizedName = sanitizeName(screenName);
40
- let extra = filter({Screen,name,sanitizedName}),
41
- authRequired = typeof Screen.authRequired =="boolean"? Screen.authRequired : true;
42
- if(extra ===false){
43
- return null;
44
- }
40
+ let authRequired = typeof Screen.authRequired =="boolean"? Screen.authRequired : true;
45
41
  ///le groupe d'écran par défaut
46
42
  let groupName = Screen.Start ||Screen.start ? GROUP_NAMES.START : authRequired === false ? GROUP_NAMES.PUBLIC : GROUP_NAMES.PRIVATE;
47
43
  if(!GROUP_NAMES[groupName]){
@@ -83,7 +79,6 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
83
79
  }
84
80
  options.elevation = typeof options.elevation =='number'? options.elevation : typeof Screen.elevation =='number'? Screen.elevation : undefined;
85
81
  options.back = args.navigation.canGoBack();
86
- options.extra = defaultObj(extra);
87
82
  options.isModal = options.Modal = Screen.isModalScreen;
88
83
  return options;
89
84
  }} component = {ScreenWrapper}/>);
@@ -106,17 +101,15 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
106
101
 
107
102
  groups : {} : la liste des différents groupes d'écrans rendus par la méthode
108
103
  */
109
- export default function initScreens ({Factory,ModalFactory,screens,result,filter}){
104
+ export default function initScreens ({Factory,ModalFactory,screens,result}){
110
105
  if(!isArray(screens) || !screens.length){
111
106
  screens = [];
112
107
  }
113
108
  result = defaultObj(result);
114
109
  result.screens = defaultObj(result.screens);
115
110
  result.groups = defaultObj(result.groups);
116
- ///lorsque les écrans sont passés enparamètres, par défaut, le wrapper withTheme n'est pas utilisé
117
- filter = typeof filter =="function" ? filter : x=> true;
118
111
  defaultArray(screens).map((Screen,index)=>{
119
- handleScreen({Screen,result,Factory,ModalFactory,filter,index})
112
+ handleScreen({Screen,result,Factory,ModalFactory,index})
120
113
  });
121
114
  return result;
122
115
  }