@fto-consult/expo-ui 6.28.0 → 6.29.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.config.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@FTO-CONSULT/EXPO-UI",
3
- "version": "6.26.8",
3
+ "version": "6.28.1",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "bin": {
6
6
  "expo-ui": "./bin/index.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "6.28.0",
3
+ "version": "6.29.0",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -68,7 +68,7 @@
68
68
  "@expo/html-elements": "^0.5.1",
69
69
  "@expo/vector-icons": "^13.0.0",
70
70
  "@faker-js/faker": "^8.0.2",
71
- "@fto-consult/common": "^3.29.5",
71
+ "@fto-consult/common": "^3.29.8",
72
72
  "@pchmn/expo-material3-theme": "^1.3.1",
73
73
  "@react-native-async-storage/async-storage": "1.18.2",
74
74
  "@react-native-community/datetimepicker": "7.2.0",
@@ -7,7 +7,7 @@ import React from "$react";
7
7
  import { faker } from '@faker-js/faker';
8
8
  export default function TestDatagridComponent({count,...props}){
9
9
  const data = React.useMemo(()=>{
10
- count = typeof count =='number' && count > 10 ? count : 100;
10
+ count = typeof count =='number' && count > 5 ? count : 100;
11
11
  return faker.helpers.multiple(createRandomUser, {
12
12
  count,
13
13
  });
@@ -14,7 +14,6 @@ import DialogTitle from './DialogTitle';
14
14
  import {MAX_WIDTH,SCREEN_INDENT,MIN_HEIGHT} from "./utils";
15
15
  import {isMobileOrTabletMedia,isMobileMedia} from "$cplatform/dimensions";
16
16
  import Platform,{isMobileNative} from "$cplatform";
17
- import Portal from "$ecomponents/Portal";
18
17
  import Icon,{BACK_ICON} from "$ecomponents/Icon";
19
18
  import {ACTION_ICON_SIZE} from "$ecomponents/AppBar";
20
19
  import DialogFooter from "./DialogFooter";
@@ -183,8 +182,7 @@ const DialogComponent = React.forwardRef((props,ref)=>{
183
182
  {content}
184
183
  </ScrollView>
185
184
  }
186
- return <Portal>
187
- <ModalComponent
185
+ return <ModalComponent
188
186
  onDismiss={(e)=>{
189
187
  return handleBack(e,false);
190
188
  }}
@@ -272,8 +270,7 @@ const DialogComponent = React.forwardRef((props,ref)=>{
272
270
  /> : null}
273
271
  </Surface>
274
272
  </DialogContent>
275
- </ModalComponent>
276
- </Portal>
273
+ </ModalComponent>
277
274
  });
278
275
  export default DialogComponent;
279
276
 
@@ -3,8 +3,7 @@ import {defaultObj,defaultBool} from "$cutils";
3
3
  import Divider from "$ecomponents/Divider";
4
4
  import Label from "$ecomponents/Label";
5
5
  import theme,{Colors,tinyColor,ALPHA_OPACITY} from "$theme";
6
- export default function DrawerSection (props){
7
- let {children,divider,labelStyle,minimized,labelProps,dividerProps,label,text,...rest} = props;
6
+ export default function DrawerSection ({children,divider,labelStyle,minimized,labelProps,withDivider,dividerProps,label,text,...rest}){
8
7
  label = defaultStr(label,text);
9
8
  if(!label) return children;
10
9
  dividerProps = defaultObj(dividerProps);
@@ -11,8 +11,11 @@ import { useDrawer } from '../Provider';
11
11
 
12
12
  export * from "./utils";
13
13
 
14
+ let hasDivider = false;
15
+
14
16
  const DrawerItemsComponent = React.forwardRef((props,ref)=> {
15
17
  let {items:_items,minimized} = props;
18
+ hasDivider = false;
16
19
  _items = typeof _items ==='function'? _items(props) : _items;
17
20
  if(React.isValidElement(_items)){
18
21
  return _items;
@@ -23,11 +26,15 @@ const DrawerItemsComponent = React.forwardRef((props,ref)=> {
23
26
  if(isNonNullString(item.perm) && !Auth.isAllowedFromStr(item.perm)) return null;
24
27
  const {section,items:itx2,...rest} = item;
25
28
  if(section){
29
+ const sDivider = rest.divider !== false && !hasDivider && items.length ? true : false;
30
+ if(sDivider){
31
+ hasDivider = true;
32
+ }
26
33
  return <DrawerSection
27
34
  {...rest}
28
35
  minimized={minimized}
29
36
  key={key}
30
- divider = {rest.divider !== false && items.length ? true : false}
37
+ divider = {sDivider}
31
38
  >
32
39
  {items}
33
40
  </DrawerSection>
@@ -124,19 +131,22 @@ const getDefaultProps = function(item){
124
131
  const renderItem = ({item,minimized,renderExpandableOrSection,index,key})=>{
125
132
  key = key||index;
126
133
  if(React.isValidElement(item)){
134
+ hasDivider = false;
127
135
  return <React.Fragment key={key}>
128
136
  {item}
129
137
  </React.Fragment>
130
138
  } else {
131
139
  if(isNonNullString(item.perm) && !Auth.isAllowedFromStr(item.perm)) return null;
132
140
  if(!item.label && !item.text && !item.icon) {
133
- if(item.divider === true){
141
+ if(item.divider === true && !hasDivider){
134
142
  const {divider,...rest} = item;
143
+ hasDivider = true;
135
144
  return (<Divider key={key} {...rest}/>)
136
145
  }
137
146
  return null;
138
147
  }
139
148
  item = getDefaultProps(item);
149
+ hasDivider = false;
140
150
  if(isObj(item.items) || Array.isArray(item.items)){
141
151
  const itx = [];
142
152
  Object.map(item.items,(it,i)=>{
@@ -0,0 +1,13 @@
1
+ /***
2
+ * MIT License
3
+ Copyright (c) 2020 Mo Gorhom
4
+ @see : https://github.com/gorhom/react-native-portal
5
+ */
6
+
7
+ export {default} from "./Portal";
8
+
9
+ export {default as PortalHost} from "./PortalHost";
10
+
11
+ export {default as PortalProvider} from "./PortalProvider";
12
+
13
+ export * from "./hooks";
@@ -1,13 +1,4 @@
1
- /***
2
- * MIT License
3
- Copyright (c) 2020 Mo Gorhom
4
- @see : https://github.com/gorhom/react-native-portal
5
- */
1
+ import {Portal} from "react-native-paper";
6
2
 
7
- export {default} from "./Portal";
8
-
9
- export {default as PortalHost} from "./PortalHost";
10
-
11
- export {default as PortalProvider} from "./PortalProvider";
12
-
13
- export * from "./hooks";
3
+ export default Portal;
4
+ export const PortalHost = Portal.Host;
@@ -289,7 +289,7 @@ const SimpleSelect = React.forwardRef((props,ref)=>{
289
289
  rippleColor={undefined}
290
290
  onLayout={onLayout}
291
291
  >
292
- <>{anchor}</>
292
+ {anchor}
293
293
  </Pressable>
294
294
  const getItemLayout = typeof listProps.itemHeight ==='number' && listProps.itemHeight ? (data, index) => (
295
295
  {length: listProps.itemHeight, offset: listProps.itemHeight * index, index}
@@ -4,7 +4,7 @@ import {MD3LightTheme,MD3DarkTheme} from "react-native-paper";
4
4
  import { useMaterial3Theme } from '@pchmn/expo-material3-theme';
5
5
  import {colorsAlias,Colors} from "$theme";
6
6
  import {isObj,isNonNullString,defaultStr} from "$cutils";
7
- import eMainScreens from "$escreens/mainScreens";
7
+ import {getMainScreens} from "$escreens/mainScreens";
8
8
  import {ExpoUIContext} from "./hooks";
9
9
  import Login from "$eauth/Login";
10
10
  import {modes} from "$ecomponents/TextField";
@@ -21,6 +21,7 @@ import { prepareScreens } from "./TableData";
21
21
  getStructData : ()=>{object|array}
22
22
  tablesData : {object}, la liste des tables de données
23
23
  strucsData : {object}, la liste des données de structures
24
+ 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
24
25
  convertFiltersToSQL : {boolean}, si les filtres de datagrid ou filtres seront convertis au format SQL
25
26
  components : {
26
27
  logo : {
@@ -38,13 +39,14 @@ import { prepareScreens } from "./TableData";
38
39
  drawerItems : {object|array|function}, la fonction permettant d'obtenir les items du drawer principal de l'application
39
40
  }
40
41
  */
41
- const Provider = ({children,getTableData,navigation,components,convertFiltersToSQL,getStructData,tablesData,structsData,...props})=>{
42
+ const Provider = ({children,getTableData,handleHelpScreen,navigation,components,convertFiltersToSQL,getStructData,tablesData,structsData,...props})=>{
42
43
  const {extendAppTheme} = appConfig;
43
44
  const { theme : pTheme } = useMaterial3Theme();
44
45
  navigation = defaultObj(navigation);
45
46
  components = defaultObj(components);
46
47
  structsData = isObj(structsData)? structsData : null;
47
48
  appConfig.tablesData = tablesData;
49
+ handleHelpScreen = handleHelpScreen === false ? false : true;
48
50
  appConfig.structsData = appConfig.structsData = isObj(structsData)? structsData : null;
49
51
  getTableData = appConfig.getTable = appConfig.getTableData = getTableOrStructDataCall(tablesData,getTableData);
50
52
  getStructData = appConfig.getStructData = getTableOrStructDataCall(structsData,getStructData);
@@ -118,13 +120,14 @@ const Provider = ({children,getTableData,navigation,components,convertFiltersToS
118
120
  tables:tablesData,
119
121
  screens,
120
122
  TableDataScreen:components.TableDataScreen || components.TableDataScreenItem,
121
- TableDataScreenList:components.TableDataScreenList||components.TableDataListScreen
123
+ TableDataScreenList:components.TableDataScreenList||components.TableDataListScreen,
122
124
  });
123
- return [...r,...eMainScreens];
125
+ return [...r,...getMainScreens(handleHelpScreen)];
124
126
  },[]);
125
127
  return <ExpoUIContext.Provider
126
128
  value={{
127
129
  ...props,
130
+ handleHelpScreen,
128
131
  navigation,
129
132
  convertFiltersToSQL,
130
133
  components : {
package/src/index.js CHANGED
@@ -27,7 +27,6 @@ import DialogProvider from "$ecomponents/Dialog/Provider";
27
27
  import SimpleSelect from '$ecomponents/SimpleSelect';
28
28
  import {Provider as AlertProvider} from '$ecomponents/Dialog/confirm/Alert';
29
29
  import { DialogProvider as FormDataDialogProvider } from '$eform/FormData';
30
- import {PortalProvider,CustomPortal} from '$ecomponents/Portal';
31
30
  import ErrorBoundaryProvider from "$ecomponents/ErrorBoundary/Provider";
32
31
  import notify, {notificationRef} from "$notify";
33
32
  import DropdownAlert from '$ecomponents/Dialog/DropdownAlert';
@@ -283,7 +282,7 @@ function App({init:initApp,initialRouteName:appInitialRouteName,render,onMount})
283
282
  },
284
283
  }}
285
284
  >
286
- <PortalProvider>
285
+ <Portal.Host testID="RN_NativePaperPortalHost">
287
286
  <ErrorBoundaryProvider/>
288
287
  <PreloaderProvider/>
289
288
  <DialogProvider responsive testID={"RN_MainAppDialogProvider"}/>
@@ -291,17 +290,15 @@ function App({init:initApp,initialRouteName:appInitialRouteName,render,onMount})
291
290
  <FormDataDialogProvider/>
292
291
  <BottomSheetProvider/>
293
292
  <DropdownAlert ref={notificationRef}/>
294
- <Portal.Host testID="RN_NativePaperPortalHost">
295
- <ErrorBoundary>
296
- <StatusBar/>
297
- <SplashScreen isLoaded={isLoaded}>
298
- <PreferencesContext.Provider value={preferences}>
299
- {React.isValidElement(content) && content || child}
300
- </PreferencesContext.Provider>
301
- </SplashScreen>
302
- </ErrorBoundary>
303
- </Portal.Host>
304
- </PortalProvider>
293
+ <ErrorBoundary>
294
+ <StatusBar/>
295
+ <SplashScreen isLoaded={isLoaded}>
296
+ <PreferencesContext.Provider value={preferences}>
297
+ {React.isValidElement(content) && content || child}
298
+ </PreferencesContext.Provider>
299
+ </SplashScreen>
300
+ </ErrorBoundary>
301
+ </Portal.Host>
305
302
  </PaperProvider>
306
303
  </GestureHandlerRootView>
307
304
  </AuthProvider>;
@@ -11,13 +11,15 @@ import {useMemo,useEffect,useRef} from "react";
11
11
  import { screenName as aboutScreenName} from "$escreens/Help/About";
12
12
  import theme from "$theme";
13
13
  import APP from "$capp/instance";
14
+ import useExpoUI from "$econtext";
14
15
 
15
16
  const useGetItems = (options)=>{
16
17
  const {navigation:{drawerItems}} = useContext();
17
18
  options = defaultObj(options);
18
19
  const {refresh,force} = options;
19
20
  const showProfilOnDrawer = theme.showProfilAvatarOnDrawer;
20
- const handleHelp = appConfig.get("handleHelpScreen") !== false ? true : false;
21
+ const {handleHelpScreen} = useExpoUI();
22
+ const handleHelp = handleHelpScreen !== false;
21
23
  const refreshItemsRef = useRef(false);
22
24
  useEffect(()=>{
23
25
  const refreshItems = (...a)=>{
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.26.13","repository":{"type":"git","url":"git+https://github.com/borispipo/expo-ui.git"},"homepage":"https://github.com/borispipo/expo-ui#readme"},"@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":"18.1.2","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.29.2","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.7","url":"https://reactnavigation.org","license":"MIT"},"@react-navigation/native-stack":{"version":"6.9.13","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"@shopify/flash-list":{"version":"1.4.3","url":"https://shopify.github.io/flash-list/","license":"MIT"},"apexcharts":{"version":"3.41.1","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.8","url":"https://github.com/expo/expo/tree/main/packages/expo","license":"MIT"},"expo-camera":{"version":"13.4.2","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-sqlite":{"version":"11.3.2","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"},"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.4","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-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.10.3","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.18.14","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.7","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.5.0","url":"https://virtuoso.dev/","license":"MIT"},"sharp-cli":{"version":"4.1.1","url":"https://github.com/vseventer/sharp-cli","license":"MIT"},"tippy.js":{"version":"6.3.7","url":"https://atomiks.github.io/tippyjs/","license":"MIT"},"uninstall":{"version":"0.0.0","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.28.1","homepage":"https://github.com/borispipo/expo-ui#readme"}};
@@ -3,7 +3,7 @@ import {sanitizeName,GROUP_NAMES} from "./utils";
3
3
  import React from "$react";
4
4
  import ScreenWrapper from "./ScreenWrapper";
5
5
  import { SCREEN_OPTIONS } from "./utils";
6
-
6
+ export * from "./mainScreens";
7
7
 
8
8
  export * from "./utils";
9
9
 
@@ -3,4 +3,16 @@ import Help from "./Help";
3
3
  export default [
4
4
  ...Auth,
5
5
  ...Help,
6
- ]
6
+ ]
7
+
8
+ export const getMainScreens = (handleHelpScreen)=>{
9
+ const screens = [Auth];
10
+ if(handleHelpScreen !== false){
11
+ screens.push(Help);
12
+ }
13
+ return screens;
14
+ }
15
+
16
+ export const screensWithoutHelp = [...Auth];
17
+
18
+ export {Help};
@@ -3,8 +3,6 @@ import Test from "$ecomponents/Datagrid/Test";
3
3
  import React from "$react";
4
4
 
5
5
  export default function HomeScreen(props){
6
- React.useEffect(()=>{
7
- },[])
8
6
  return <Screen{...props} contentContainerStyle={[{flex:1}]}>
9
7
  <Test/>
10
8
  </Screen>