@fto-consult/expo-ui 6.65.6 → 6.66.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/App.js +1 -1
- package/bin/create-app/App.js +5 -2
- package/package.json +2 -2
- package/src/AppEntry/App.js +2 -2
- package/src/auth/Login.js +1 -1
- package/src/context/Provider.js +14 -7
- package/src/context/hooks.js +2 -0
- package/src/navigation/Drawer/items/index.js +0 -1
- package/src/screens/Auth/Profile.js +3 -1
- package/src/context/Provider copy 2.js +0 -8
- package/src/context/Provider copy.js +0 -205
package/App.js
CHANGED
package/bin/create-app/App.js
CHANGED
@@ -29,13 +29,16 @@ export default function AppMainEntry(){
|
|
29
29
|
},
|
30
30
|
screenOptions : {},//les options du composant Stack.Navigator de react-navigation, voir https://reactnavigation.org/docs/native-stack-navigator/
|
31
31
|
}}
|
32
|
+
auth = {{
|
33
|
+
enabled : false,//la gestion de l'authentification est désactivée par défaut
|
34
|
+
loginPropsMutator : {},//({object})=><{object}>, la fonction permettant de muter les props du composant Login,
|
35
|
+
profileFieldsMutator : (fields)=>fields,//la fonction permettant de muter les champs liés à l'écran de mise à jour d'un profil utilisateur
|
36
|
+
}}
|
32
37
|
components = {{
|
33
38
|
/*** logo : ReactNode|ReactElement | ReactComponent | object {
|
34
39
|
image{ReactComponent} :,text {ReactComponent}
|
35
40
|
},*/
|
36
41
|
logo : Logo,//logo component's properties
|
37
|
-
loginPropsMutator : {},//({object})=><{object}>, la fonction permettant de muter les props du composant Login,
|
38
|
-
authEnabled : false,//la gestion de l'authentification est désactivée par défaut
|
39
42
|
customFormFields : {},//custom form fields
|
40
43
|
/*** la fonction permettant de muter les props du composant TableLink, permetant de lier les tables entre elles */
|
41
44
|
tableLinkPropsMutator : (props)=>{
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fto-consult/expo-ui",
|
3
|
-
"version": "6.
|
3
|
+
"version": "6.66.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.55.
|
74
|
+
"@fto-consult/common": "^3.55.6",
|
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",
|
package/src/AppEntry/App.js
CHANGED
@@ -63,7 +63,7 @@ const NAVIGATION_PERSISTENCE_KEY = 'NAVIGATION_STATE';
|
|
63
63
|
*/
|
64
64
|
function App({init:initApp,initialRouteName:appInitialRouteName,render}) {
|
65
65
|
AppStateService.init();
|
66
|
-
const {FontsIconsFilter,beforeExit,preferences:appPreferences,navigation,getStartedRouteName} = useContext();
|
66
|
+
const {FontsIconsFilter,beforeExit,preferences:appPreferences,navigation,getStartedRouteName,auth} = useContext();
|
67
67
|
const {containerProps} = navigation;
|
68
68
|
const [initialState, setInitialState] = React.useState(undefined);
|
69
69
|
const appReadyRef = React.useRef(true);
|
@@ -271,7 +271,7 @@ function App({init:initApp,initialRouteName:appInitialRouteName,render}) {
|
|
271
271
|
/>
|
272
272
|
</NavigationContainer> : null;
|
273
273
|
const content = isLoaded ? typeof render == 'function'? render({children:child,appConfig,config:appConfig}) : child : null;
|
274
|
-
return <AuthProvider>
|
274
|
+
return <AuthProvider {...auth}>
|
275
275
|
<SafeAreaProvider>
|
276
276
|
<GestureHandlerRootView testID={"RN_MainAppGestureHanleRootView"} style={styles.gesture}>
|
277
277
|
<AppEntryRootView>
|
package/src/auth/Login.js
CHANGED
@@ -27,7 +27,7 @@ const WIDTH = 400;
|
|
27
27
|
|
28
28
|
export default function LoginComponent(props){
|
29
29
|
let {formName,step,appBarProps,onSuccess,withPortal,testID} = props;
|
30
|
-
const {
|
30
|
+
const {auth:{loginPropsMutator}} = useContext();
|
31
31
|
const loginTitle = getTitle();
|
32
32
|
testID = defaultStr(testID,"RN_Auth.LoginComponent");
|
33
33
|
formName = React.useRef(uniqid(defaultStr(formName,"login-formname"))).current;
|
package/src/context/Provider.js
CHANGED
@@ -7,7 +7,7 @@ import {colorsAlias,Colors} from "$theme";
|
|
7
7
|
import {isObj,isNonNullString,defaultStr,extendObj} from "$cutils";
|
8
8
|
import {getMainScreens} from "$escreens/mainScreens";
|
9
9
|
import {ExpoUIContext} from "./hooks";
|
10
|
-
import {enableAuth,disableAuth} from "$cauth/
|
10
|
+
import {enableAuth,disableAuth} from "$cauth/perms";
|
11
11
|
import Login from "$eauth/Login";
|
12
12
|
import {modes} from "$ecomponents/TextField";
|
13
13
|
import {isMobileMedia} from "$cdimensions";
|
@@ -39,7 +39,6 @@ import {extendFormFields} from "$ecomponents/Form/Fields";
|
|
39
39
|
///les props par défaut à passer au composant Datagrid
|
40
40
|
},
|
41
41
|
customFormFields{Object}, //les composant personalisés des forms fields
|
42
|
-
loginPropsMutator : ({object})=><{object}>, la fonction permettant de muter les props du composant Login,
|
43
42
|
tableLinkPropsMutator : ({object})=><{object}>, la fonction permettant de muter les props du composant TableLink,
|
44
43
|
TableDataScreen | TableDataScreenItem : {ReactComponent}, le composant TableDataScreenItem, à utiliser pour le rendu des écrans
|
45
44
|
TableDataScreenList | TableDataListScreen {ReactComponent}, le composant TableDataList à utiliser pour le rendu des écrans listants les éléments du table data
|
@@ -56,14 +55,24 @@ import {extendFormFields} from "$ecomponents/Form/Fields";
|
|
56
55
|
drawerItemsMutator : {function}, la fonction permettant de muter les drawerItems à chaque fois qu'on appelle la fonction de récupératioin des drawerItems
|
57
56
|
containerProps : {object}, les props à passer au composant NavigationContainer de react-navigation
|
58
57
|
},
|
58
|
+
auth : {
|
59
|
+
profileFieldsMutator : {({object})=><{object}> | {object})}, la fonction permettant de muter les champs à passer à l'écran de mise à jour du profil utilisateur
|
60
|
+
loginPropsMutator : ({object})=><{object}>, la fonction permettant de muter les props du composant Login,
|
61
|
+
}
|
59
62
|
swrConfig : {object},//les paramètres de configuration de l'objet swr utilisée dans le composant SWRDatagrid
|
60
63
|
realm : {}, //les options de configurations de la base de données realmdb
|
61
64
|
*/
|
62
|
-
const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,components:cComponents,convertFiltersToSQL,getStructData,tablesData,structsData,...props})=>{
|
65
|
+
const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,auth:cAuth,components:cComponents,convertFiltersToSQL,getStructData,tablesData,structsData,...props})=>{
|
63
66
|
const {extendAppTheme} = appConfig;
|
64
67
|
const { theme : pTheme } = useMaterial3Theme();
|
65
68
|
navigation = defaultObj(navigation);
|
66
69
|
const {customFormFields,...components} = defaultObj(cComponents);
|
70
|
+
const auth = {
|
71
|
+
...Object.assign({},cAuth),
|
72
|
+
loginPropsMutator : (props)=>{
|
73
|
+
return extendProps(cAuth.loginPropsMutator,props);
|
74
|
+
},
|
75
|
+
}
|
67
76
|
extendFormFields(customFormFields);
|
68
77
|
structsData = isObj(structsData)? structsData : null;
|
69
78
|
appConfig.tablesData = tablesData;
|
@@ -78,7 +87,7 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,c
|
|
78
87
|
}
|
79
88
|
const colorScheme = useColorScheme();
|
80
89
|
const isColorShemeDark = colorScheme ==="dark";
|
81
|
-
if(
|
90
|
+
if(auth.enabled === false){
|
82
91
|
disableAuth();
|
83
92
|
} else enableAuth();
|
84
93
|
appConfig.extendAppTheme = (theme,Theme,...rest)=>{
|
@@ -166,11 +175,9 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,c
|
|
166
175
|
handleHelpScreen,
|
167
176
|
navigation,
|
168
177
|
convertFiltersToSQL,
|
178
|
+
auth,
|
169
179
|
components : {
|
170
180
|
...components,
|
171
|
-
loginPropsMutator : (props)=>{
|
172
|
-
return extendProps(components.loginPropsMutator,props);
|
173
|
-
},
|
174
181
|
tableLinkPropsMutator : (props)=>{
|
175
182
|
return extendProps(components.tableLinkPropsMutator,props);
|
176
183
|
},
|
package/src/context/hooks.js
CHANGED
@@ -33,6 +33,8 @@ export const useAppGetComponent = (componentName)=>{
|
|
33
33
|
|
34
34
|
export const useAppComponent = useAppGetComponent;
|
35
35
|
|
36
|
+
export const useGetComponent = useAppComponent;
|
37
|
+
|
36
38
|
/*** permet d'attacher un lister sur la modification des props de manière responsive :
|
37
39
|
permet de récupérer la fonction à attacher par défaut au listener DimensionChange, pour la mise à jour automatique de la propriété style
|
38
40
|
* @param mediaQueryUpdateStyleCb{function}, la fonction permettant de mettre à jour les props lorsque la taille de l'écran change
|
@@ -76,7 +76,6 @@ const useGetItems = (options)=>{
|
|
76
76
|
if(!tableName || table.showInDrawer === false || !Auth.isTableDataAllowed({table:tableName})){
|
77
77
|
return;
|
78
78
|
}
|
79
|
-
console.log("is table allowed ",table);
|
80
79
|
if(isNonNullString(table.perm) && !Auth.isAllowedFromStr(table.perm)) return;
|
81
80
|
const section = (table.drawerSection).trim();
|
82
81
|
if(!items[section]){
|
@@ -7,6 +7,7 @@ import Preloader from "$epreloader";
|
|
7
7
|
import {SignIn2SignOut} from "$cauth";
|
8
8
|
import React from "$react";
|
9
9
|
import avatarProps from "$eauth/avatarProps";
|
10
|
+
import useContext from "$econtext/hooks";
|
10
11
|
|
11
12
|
import {screenName} from "./utils";
|
12
13
|
|
@@ -15,7 +16,8 @@ export default function UserProfileScreen(props){
|
|
15
16
|
const testID = defaultStr(props.testID,"RN_UserProfile_FormData");
|
16
17
|
const themeRef = React.useRef(defaultObj(user.theme));
|
17
18
|
const hasChangeRef = React.useRef(false);
|
18
|
-
const
|
19
|
+
const {auth:{profileFieldsMutator}} = useContext();
|
20
|
+
const authProfileFields = typeof profileFieldsMutator =='function'?profileFieldsMutator(props) : profileFieldsMutator;
|
19
21
|
const fields = isObj(authProfileFields)? Object.clone(authProfileFields) : {};
|
20
22
|
const formFields = {
|
21
23
|
avatar : {
|
@@ -1,8 +0,0 @@
|
|
1
|
-
import React from "$react";
|
2
|
-
import appConfig from "$capp/config";
|
3
|
-
import {View,Text} from "react-native";
|
4
|
-
export default function Provider(props){
|
5
|
-
return <View style={{justifyContent:"center",flex:1,alignItems:"center"}}>
|
6
|
-
<Text style={{fontSize:16}}>La vie de material</Text>
|
7
|
-
</View>
|
8
|
-
}
|
@@ -1,205 +0,0 @@
|
|
1
|
-
import React from "$react";
|
2
|
-
import appConfig from "$capp/config";
|
3
|
-
import {MD3LightTheme,MD3DarkTheme} from "react-native-paper";
|
4
|
-
import { useMaterial3Theme,isDynamicThemeSupported} from '@pchmn/expo-material3-theme';
|
5
|
-
import { useColorScheme } from 'react-native';
|
6
|
-
import {colorsAlias,Colors} from "$theme";
|
7
|
-
import {isObj,isNonNullString,defaultStr,extendObj} from "$cutils";
|
8
|
-
import {getMainScreens} from "$escreens/mainScreens";
|
9
|
-
import {ExpoUIContext} from "./hooks";
|
10
|
-
import Login from "$eauth/Login";
|
11
|
-
import {modes} from "$ecomponents/TextField";
|
12
|
-
import {isMobileMedia} from "$cdimensions";
|
13
|
-
import { prepareScreens } from "./TableData";
|
14
|
-
import {extendFormFields} from "$ecomponents/Form/Fields";
|
15
|
-
|
16
|
-
|
17
|
-
/*****
|
18
|
-
les utilitaires disponibles à passer au provider :
|
19
|
-
FontsIconsFilter : (font{object},fontName{string},fontNameLower{string})=><boolean> //porte le nom de la props de appConfig dans lequel définir les filtres à utiliser pour charger l'iconSet désirée pour l'appication
|
20
|
-
///fonction de rappel appelée avant d'exit l'application, doit retourner une promesse que lorsque résolue, exit l'application
|
21
|
-
beforeExit : ()=><Promise>
|
22
|
-
getTableData : ()=>{object|array}
|
23
|
-
getStructData : ()=>{object|array}
|
24
|
-
tablesData : {object:{
|
25
|
-
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}},
|
26
|
-
table2:{},
|
27
|
-
table3:{},...[tableN]:{}}
|
28
|
-
}, la liste des tables de données
|
29
|
-
structsData : {object}, la liste des données de structures
|
30
|
-
handleHelpScreen : {boolean}, //si l'écran d'aide sera pris en compte, l'écran d'aide ainsi que les écrans des termes d'utilisations et autres
|
31
|
-
convertFiltersToSQL : {boolean}, si les filtres de datagrid ou filtres seront convertis au format SQL
|
32
|
-
components : {
|
33
|
-
logo : ReactNode | ReactComponent | object {
|
34
|
-
image{ReactComponent} :,
|
35
|
-
text {ReactComponent}
|
36
|
-
},
|
37
|
-
datagrid : {
|
38
|
-
///les props par défaut à passer au composant Datagrid
|
39
|
-
},
|
40
|
-
customFormFields{Object}, //les composant personalisés des forms fields
|
41
|
-
loginPropsMutator : ({object})=><{object}>, la fonction permettant de muter les props du composant Login,
|
42
|
-
tableLinkPropsMutator : ({object})=><{object}>, la fonction permettant de muter les props du composant TableLink,
|
43
|
-
TableDataScreen | TableDataScreenItem : {ReactComponent}, le composant TableDataScreenItem, à utiliser pour le rendu des écrans
|
44
|
-
TableDataScreenList | TableDataListScreen {ReactComponent}, le composant TableDataList à utiliser pour le rendu des écrans listants les éléments du table data
|
45
|
-
},
|
46
|
-
navigation : {
|
47
|
-
screens : {Array}, les écrans de navigation,
|
48
|
-
screenOptions : {object}, les options du composant Stack.Navigator, voir https://reactnavigation.org/docs/native-stack-navigator/
|
49
|
-
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
|
50
|
-
drawerSections : {object : {
|
51
|
-
[key{string}]:{string}} |
|
52
|
-
[key{string}] : {object { code:{string},label:{Node},order:{number, l'ordre de trie de la section}}}
|
53
|
-
} //les différentes sections à utiliser pour le rendu du drawer, deux sections par défaut existent :
|
54
|
-
les sectionis help et dashboard; help pour le rendu des items de la section Aide et Dashboard pour le rendu des items de la section Dashboard/Home
|
55
|
-
drawerItemsMutator : {function}, la fonction permettant de muter les drawerItems à chaque fois qu'on appelle la fonction de récupératioin des drawerItems
|
56
|
-
containerProps : {object}, les props à passer au composant NavigationContainer de react-navigation
|
57
|
-
},
|
58
|
-
realm : {}, //les options de configurations de la base de données realmdb
|
59
|
-
*/
|
60
|
-
const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,components:cComponents,convertFiltersToSQL,getStructData,tablesData,structsData,...props})=>{
|
61
|
-
const {extendAppTheme} = appConfig;
|
62
|
-
const { theme : pTheme } = useMaterial3Theme();
|
63
|
-
navigation = defaultObj(navigation);
|
64
|
-
const {customFormFields,...components} = defaultObj(cComponents);
|
65
|
-
extendFormFields(customFormFields);
|
66
|
-
structsData = isObj(structsData)? structsData : null;
|
67
|
-
appConfig.tablesData = tablesData;
|
68
|
-
handleHelpScreen = handleHelpScreen === false ? false : true;
|
69
|
-
appConfig.structsData = appConfig.structsData = isObj(structsData)? structsData : null;
|
70
|
-
getTableData = appConfig.getTable = appConfig.getTableData = getTableOrStructDataCall(tablesData,getTableData);
|
71
|
-
getStructData = appConfig.getStructData = getTableOrStructDataCall(structsData,getStructData);
|
72
|
-
appConfig.LoginComponent = Login;
|
73
|
-
swrConfig = defaultObj(swrConfig);
|
74
|
-
if(convertFiltersToSQL !== undefined){
|
75
|
-
appConfig.set("convertFiltersToSQL",convertFiltersToSQL);
|
76
|
-
}
|
77
|
-
const colorScheme = useColorScheme();
|
78
|
-
const isColorShemeDark = colorScheme ==="dark";
|
79
|
-
appConfig.extendAppTheme = (theme,Theme,...rest)=>{
|
80
|
-
if(!isObj(theme)) return;
|
81
|
-
const isDark = theme.dark || theme.isDark || isDynamicThemeSupported && isColorShemeDark ;
|
82
|
-
const elevation = defaultObj(theme.elevation,isDark ? pTheme.dark?.elevation : pTheme.light?.elevation)
|
83
|
-
const newTheme = isDark ? { ...MD3DarkTheme, colors: pTheme.dark } : { ...MD3LightTheme, colors: pTheme.light };
|
84
|
-
for(let i in newTheme){
|
85
|
-
if(i !== 'colors' && !(i in theme)){
|
86
|
-
theme[i] = newTheme[i];
|
87
|
-
}
|
88
|
-
}
|
89
|
-
if(isObj(theme.colors)){
|
90
|
-
colorsAlias.map((color)=>{
|
91
|
-
color = color.trim();
|
92
|
-
const cUpper = color.ucFirst();
|
93
|
-
//math theme colors to material desgin V3
|
94
|
-
const textA = `${color}Text`,onColor=`on${cUpper}`//,containerA = `${color}Container`,onColorContainer=`on${cUpper}Container`;
|
95
|
-
const c = Colors.isValid(theme.colors[onColor])? theme.colors[onColor] : (theme.colors[textA]) || undefined;
|
96
|
-
if(c){
|
97
|
-
theme.colors[onColor] = c;
|
98
|
-
}
|
99
|
-
});
|
100
|
-
for(let i in newTheme.colors){
|
101
|
-
if(!(i in theme.colors)){
|
102
|
-
theme.colors[i] = newTheme.colors[i];
|
103
|
-
}
|
104
|
-
}
|
105
|
-
}
|
106
|
-
theme.fonts = newTheme.fonts;
|
107
|
-
const r = typeof extendAppTheme == 'function'? extendAppTheme(theme,Theme,...rest) : theme;
|
108
|
-
const _theme = (isObj(r) ? r : theme);
|
109
|
-
const customCSS = _theme.customCSS;
|
110
|
-
extendObj(Theme,{
|
111
|
-
elevations : elevation,
|
112
|
-
elevation,
|
113
|
-
colorScheme,
|
114
|
-
isDynamicThemeSupported,
|
115
|
-
})
|
116
|
-
return {
|
117
|
-
..._theme,
|
118
|
-
get customCSS(){
|
119
|
-
const prevCSS = defaultStr(typeof customCSS ==='function'? customCSS(theme) : customCSS);
|
120
|
-
return `
|
121
|
-
#root {
|
122
|
-
overflow:hidden!important;
|
123
|
-
width : 100%!important;
|
124
|
-
height : 100%important;
|
125
|
-
left : 0!important;
|
126
|
-
top : 0!important;
|
127
|
-
}
|
128
|
-
.virtuoso-table-component,
|
129
|
-
.virtuoso-table-component th,
|
130
|
-
.virtuoso-table-component tr,
|
131
|
-
.virtuoso-table-component td{
|
132
|
-
border-collapse : collapse!important;
|
133
|
-
}
|
134
|
-
${prevCSS}
|
135
|
-
`;
|
136
|
-
},
|
137
|
-
get textFieldMode (){
|
138
|
-
/***** possibilité de charger le mode d'affichage par défaut des champs textuels dans le theme de l'application */
|
139
|
-
if(typeof theme.textFieldMode =='string' && theme.textFieldMode && modes[theme.textFieldMode]){
|
140
|
-
return modes[theme.textFieldMode];
|
141
|
-
}
|
142
|
-
return isMobileMedia()? modes.shadow : modes.flat;
|
143
|
-
}
|
144
|
-
}
|
145
|
-
}
|
146
|
-
const {screens} = navigation;
|
147
|
-
navigation.screens = React.useMemo(()=>{
|
148
|
-
const r = prepareScreens({
|
149
|
-
tables:tablesData,
|
150
|
-
screens,
|
151
|
-
TableDataScreen:components.TableDataScreen || components.TableDataScreenItem,
|
152
|
-
TableDataScreenList:components.TableDataScreenList||components.TableDataListScreen,
|
153
|
-
});
|
154
|
-
return [...r,...getMainScreens(handleHelpScreen)];
|
155
|
-
},[]);
|
156
|
-
navigation.containerProps = defaultObj(navigation.containerProps);
|
157
|
-
const {linking} = navigation;
|
158
|
-
return <ExpoUIContext.Provider
|
159
|
-
value={{
|
160
|
-
...props,
|
161
|
-
handleHelpScreen,
|
162
|
-
navigation,
|
163
|
-
convertFiltersToSQL,
|
164
|
-
components : {
|
165
|
-
...components,
|
166
|
-
loginPropsMutator : (props)=>{
|
167
|
-
return extendProps(components.loginPropsMutator,props);
|
168
|
-
},
|
169
|
-
tableLinkPropsMutator : (props)=>{
|
170
|
-
return extendProps(components.tableLinkPropsMutator,props);
|
171
|
-
},
|
172
|
-
datagrid : Object.assign({},components.datagrid),
|
173
|
-
},
|
174
|
-
getTableData,
|
175
|
-
getTable : getTableData,
|
176
|
-
getStructData,
|
177
|
-
tablesData,
|
178
|
-
structsData,
|
179
|
-
appConfig,
|
180
|
-
swrConfig,
|
181
|
-
}}
|
182
|
-
children={children}
|
183
|
-
/>;
|
184
|
-
}
|
185
|
-
const getTableOrStructDataCall = (tablesOrStructDatas,getTableOrStructDataFunc)=>{
|
186
|
-
return (tableName,...rest)=>{
|
187
|
-
if(!isNonNullString(tableName)) return null;
|
188
|
-
tableName = tableName.trim();
|
189
|
-
const ret2 = typeof getTableOrStructDataFunc ==='function' ? getTableOrStructDataFunc (tableName,...rest) : null;
|
190
|
-
if(isObj(ret2) && Object.size(ret2,true)) return ret2;
|
191
|
-
if(!isObj(tablesOrStructDatas)) return null;
|
192
|
-
const ret = tablesOrStructDatas[tableName] || tablesOrStructDatas[tableName.toLowerCase()] || tablesOrStructDatas[tableName.toUpperCase];
|
193
|
-
if(isObj(ret)) return ret;
|
194
|
-
return null;
|
195
|
-
}
|
196
|
-
}
|
197
|
-
const extendProps = (cb,props)=>{
|
198
|
-
const prs = defaultObj(props);
|
199
|
-
const o = typeof cb ==='function'? cb(props) : null;
|
200
|
-
if(isObj(o)){
|
201
|
-
return {...prs,...o};
|
202
|
-
}
|
203
|
-
return prs
|
204
|
-
}
|
205
|
-
export default Provider;
|