@fto-consult/expo-ui 6.85.5 → 6.86.1
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
@@ -166,6 +166,7 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
|
|
166
166
|
const canHandleLimit = handleQueryLimit !== false && canHandlePagination ? true : false;
|
167
167
|
const limitRef = React.useRef(!canHandleLimit ?0 : defaultNumber(getSessionData("limit"),500));
|
168
168
|
const isInitializedRef = React.useRef(false);
|
169
|
+
const hasFetchedRef = React.useRef(false);
|
169
170
|
testID = defaultStr(testID,"RNSWRDatagridComponent");
|
170
171
|
const {error, isValidating,isLoading,data:result,refresh} = useSWR(fetchPath,{
|
171
172
|
fetcher : (url,opts)=>{
|
@@ -193,10 +194,14 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
|
|
193
194
|
if(showProgressRef.current ===false){
|
194
195
|
opts.showError = false;
|
195
196
|
}
|
197
|
+
const end = (a)=> {
|
198
|
+
hasFetchedRef.current = true;
|
199
|
+
return a;
|
200
|
+
};
|
196
201
|
if(typeof fetcher =='function'){
|
197
|
-
return fetcher(url,opts);
|
202
|
+
return Promise.resolve(fetcher(url,opts)).then(end);
|
198
203
|
}
|
199
|
-
return apiFetch(url,opts);
|
204
|
+
return apiFetch(url,opts).then(end);
|
200
205
|
},
|
201
206
|
swrOptions : getSWROptions(swrConfig.refreshTimeout)
|
202
207
|
});
|
@@ -290,7 +295,9 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
|
|
290
295
|
});
|
291
296
|
});
|
292
297
|
React.useEffect(()=>{
|
293
|
-
|
298
|
+
if(hasFetchedRef.current){
|
299
|
+
showProgressRef.current = false;
|
300
|
+
}
|
294
301
|
},[showProgressRef.current]);
|
295
302
|
return (
|
296
303
|
<Datagrid
|
@@ -401,15 +408,15 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
|
|
401
408
|
beforeFetchData = {(args)=>{
|
402
409
|
let {fetchOptions:opts,force,renderProgressBar} = args;
|
403
410
|
opts = getFetchOptions({showError:showProgressRef.current,...opts});
|
404
|
-
isInitializedRef.current = true;
|
405
411
|
fetchOptionsRef.current = opts.fetchOptions;
|
406
412
|
opts.fetchOptions.withTotal = true;
|
407
413
|
sortRef.current = opts.fetchOptions.sort;
|
414
|
+
isInitializedRef.current = true;
|
408
415
|
if(force){
|
409
416
|
pageRef.current = firstPage;
|
410
417
|
}
|
411
418
|
if(typeof beforeFetchData =="function" && beforeFetchData(args)==false) return;
|
412
|
-
doRefresh(typeof renderProgressBar =='boolean'? renderProgressBar :
|
419
|
+
doRefresh(typeof renderProgressBar =='boolean'? renderProgressBar : showProgressRef.current);
|
413
420
|
return false;
|
414
421
|
}}
|
415
422
|
isSWRDatagrid
|
package/src/context/Provider.js
CHANGED
@@ -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
|
}
|
package/src/context/utils.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
export const SWR_REFRESH_TIMEOUT =
|
2
|
+
export const SWR_REFRESH_TIMEOUT = 2500*60;
|
package/src/navigation/Stack.js
CHANGED
@@ -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};
|
package/src/navigation/index.js
CHANGED
@@ -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
|
-
|
22
|
+
const cardStyleInterpolator = isAndroid() ? CardStyleInterpolators.forFadeFromBottomAndroid : CardStyleInterpolators.forHorizontalIOS;
|
22
23
|
const {navigation:{screens,screenOptions}} = useContext();
|
23
|
-
const allScreens = initScreens({Factory:Stack,screens,ModalFactory:Stack
|
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
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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={
|
54
|
+
screenOptions={getScreenOptions}
|
50
55
|
>
|
51
|
-
{<Stack.Group
|
56
|
+
{<Stack.Group>
|
52
57
|
{drawerScreens}
|
53
58
|
</Stack.Group>}
|
54
59
|
<Stack.Group
|
55
60
|
key = {"MODAL-DRAWERS-SCREENS"}
|
56
|
-
screenOptions={{
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
screenOptions={function(options){
|
62
|
+
return getScreenOptions(options,{
|
63
|
+
presentation :"transparentModal",
|
64
|
+
cardStyle,
|
65
|
+
animationEnabled : true,
|
66
|
+
})
|
61
67
|
}}
|
62
68
|
>
|
63
69
|
{stackScreens}
|
package/src/screens/index.js
CHANGED
@@ -7,7 +7,7 @@ export * from "./mainScreens";
|
|
7
7
|
|
8
8
|
export * from "./utils";
|
9
9
|
|
10
|
-
export const handleScreen = ({Screen,Factory,ModalFactory,result,
|
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,
|
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
|
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
|
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,
|
112
|
+
handleScreen({Screen,result,Factory,ModalFactory,index})
|
120
113
|
});
|
121
114
|
return result;
|
122
115
|
}
|