@fto-consult/expo-ui 6.26.7 → 6.26.9

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.25.2",
3
+ "version": "6.26.8",
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.26.7",
3
+ "version": "6.26.9",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -43,7 +43,7 @@
43
43
  "expo-fix": "npx expo install --fix",
44
44
  "delete-node-modules": "rimraf ./**/node_modules",
45
45
  "modifier-url-remote-git": "git remote set-url origin 'https://borispipo@github.com/borispipo/smart-eneo.git'",
46
- "update": "npm i expo @emotion/native@latest @react-native-community/netinfo@latest react-native-big-list@latest apexcharts@latest file-saver@latest fs-extra@latest google-libphonenumber@latest @pchmn/expo-material3-theme@latest @gorhom/portal@latest @emotion/native@latest @fto-consult/common@latest react-native-blob-util react-native-gesture-handler@latest react-native-iphone-x-helper@latest react-native-mime-types@latest react-native-paper@latest react-native-safe-area-context@latest react-native-paper-dates@latest @react-navigation/native@latest @react-navigation/native-stack@latest react-native-screens@latest react-virtuoso@latest tippy.js@latest websql@latest xlsx@latest && npx expo install --fix"
46
+ "update": "npm i expo @emotion/native@latest @react-native-community/netinfo@latest react-native-big-list@latest apexcharts@latest file-saver@latest fs-extra@latest google-libphonenumber@latest @pchmn/expo-material3-theme@latest @emotion/native@latest @fto-consult/common@latest react-native-blob-util react-native-gesture-handler@latest react-native-iphone-x-helper@latest react-native-mime-types@latest react-native-paper@latest react-native-safe-area-context@latest react-native-paper-dates@latest @react-navigation/native@latest @react-navigation/native-stack@latest react-native-screens@latest react-virtuoso@latest tippy.js@latest websql@latest xlsx@latest && npx expo install --fix"
47
47
  },
48
48
  "bin": {
49
49
  "expo-ui": "./bin/index.js"
@@ -69,7 +69,6 @@
69
69
  "@expo/vector-icons": "^13.0.0",
70
70
  "@faker-js/faker": "^8.0.2",
71
71
  "@fto-consult/common": "^3.29.1",
72
- "@gorhom/portal": "^1.0.14",
73
72
  "@pchmn/expo-material3-theme": "^1.3.1",
74
73
  "@react-native-async-storage/async-storage": "1.18.2",
75
74
  "@react-native-community/datetimepicker": "7.2.0",
@@ -79,7 +78,7 @@
79
78
  "@react-navigation/native-stack": "^6.9.13",
80
79
  "@shopify/flash-list": "1.4.3",
81
80
  "apexcharts": "^3.41.1",
82
- "expo": "^49.0.7",
81
+ "expo": "^49.0.8",
83
82
  "expo-camera": "~13.4.2",
84
83
  "expo-clipboard": "~4.3.1",
85
84
  "expo-font": "~11.4.0",
@@ -99,13 +98,13 @@
99
98
  "react": "^18.2.0",
100
99
  "react-content-loader": "^6.2.1",
101
100
  "react-dom": "^18.2.0",
102
- "react-native": "0.72.3",
101
+ "react-native": "0.72.4",
103
102
  "react-native-big-list": "^1.6.1",
104
103
  "react-native-blob-util": "^0.18.6",
105
104
  "react-native-gesture-handler": "^2.12.1",
106
105
  "react-native-iphone-x-helper": "^1.3.1",
107
106
  "react-native-mime-types": "^2.4.0",
108
- "react-native-paper": "^5.10.1",
107
+ "react-native-paper": "^5.10.3",
109
108
  "react-native-paper-dates": "^0.18.14",
110
109
  "react-native-reanimated": "~3.3.0",
111
110
  "react-native-safe-area-context": "4.6.3",
@@ -3,7 +3,7 @@
3
3
  // license that can be found in the LICENSE file.
4
4
 
5
5
  import * as Linking from 'expo-linking';
6
- import { Pressable } from 'react-native';
6
+ import { Pressable,StyleSheet } from 'react-native';
7
7
  import {isValidUrl,isValidEmail,defaultStr,isSms} from "$cutils";
8
8
  import PropTypes from "prop-types";
9
9
  import Browser from "$ecomponents/Browser";
@@ -12,12 +12,14 @@ export default function AutolinkComponent({onPress,withBrowser,mailto,email,tel,
12
12
  url = defaultStr(url,href);
13
13
  phone = defaultStr(phone,tel).trim();
14
14
  const isPhone = phone ? true : false;
15
- const isUrl = isValidUrl(url);
15
+ const isUrl = url && isValidUrl(url);
16
16
  email = defaultStr(email,mailto);
17
- const isEmail = isValidEmail(email);
17
+ const isEmail = email && isValidEmail(email);
18
+ const hasContent = isUrl || isEmail || isPhone;
18
19
  return <Pressable
19
20
  testID={"RN_AutoLinkComponent"}
20
21
  {...props}
22
+ style = {[hasContent && styles.textDecorationUnderline,props.style]}
21
23
  onPress = {(e)=>{
22
24
  if(onPress && onPress(e) === false) return;
23
25
  if(isUrl){
@@ -36,6 +38,12 @@ export default function AutolinkComponent({onPress,withBrowser,mailto,email,tel,
36
38
  />
37
39
  }
38
40
 
41
+
42
+ const styles = StyleSheet.create({
43
+ textDecorationUnderline : {
44
+ textDecorationLine:'underline',
45
+ },
46
+ })
39
47
  AutolinkComponent.propTypes = {
40
48
  onPress : PropTypes.func,
41
49
  phone : PropTypes.string,//le numéro à utiliser
@@ -75,7 +75,7 @@ const DatagridAccordionRow = React.forwardRef((props,ref)=>{
75
75
  const wrapStyle = React.useMemo(()=>{
76
76
  return getRowStyle({row:item,index,selected,numColumns,isAccordion:true,rowIndex:index});
77
77
  },[selected,numColumns]);
78
- const viewWrapperStyle = [];
78
+ const viewWrapperStyle = [selectable !== false && theme.styles.cursorPointer];
79
79
  if(selected) {
80
80
  const handleAvatarRowToggle = (event)=>{
81
81
  React.stopEventPropagation(event);
@@ -122,6 +122,7 @@ const DatagridAccordionRow = React.forwardRef((props,ref)=>{
122
122
  rowProps.style,
123
123
  numColumns > 1 && styles.multiColumns,
124
124
  selected && styles.selected,
125
+ selectable !== false && theme.styles.cursorPointer,
125
126
  //style,
126
127
  ]}
127
128
  ref = {React.useMergeRefs(ref,innerRef)}
@@ -230,6 +231,7 @@ const styles = StyleSheet.create({
230
231
  alignItems : 'center',
231
232
  justifyContent : 'center',
232
233
  paddingVertical : 10,
234
+ width : "100%",
233
235
  },
234
236
  right : {
235
237
  marginHorizontal : 0,
@@ -401,7 +401,7 @@ const DatagridFactory = (Factory)=>{
401
401
  const hasFootersFields = this.hasFootersFields();
402
402
  const datagridHeader = <View testID={testID+"_HeaderContainer"} pointerEvents={pointerEvents} style={[styles.datagridHeader]}>
403
403
  <ScrollView testID={testID+"_HeaderScrollView"} horizontal contentContainerStyle={StyleSheet.flatten([styles.contentContainerStyle,styles.minW100])}>
404
- <View testID={testID+"_HeaderContentCntainer"} style={[styles.table,styles.pullRight]}>
404
+ <View testID={testID+"_HeaderContentContainer"} style={[styles.table,styles.pullRight]}>
405
405
  {/*this.renderDataSourceSelector()*/}
406
406
  <View testID={testID+"_HeaderQueryLimit"} style={[styles.paginationItem]}>
407
407
  {this.renderQueryLimit(this.getStateDataSize().formatNumber())}
@@ -552,6 +552,7 @@ const DatagridFactory = (Factory)=>{
552
552
  items = {this.state.data}
553
553
  isLoading = {isLoading}
554
554
  ref = {this.listRef}
555
+ style = {styles.list}
555
556
  backToTopRef = {backToTopRef?(e)=>{
556
557
  return this.backToTopRef.current;
557
558
  }:false}
@@ -605,13 +606,15 @@ const styles = StyleSheet.create({
605
606
  alignItems : 'center',
606
607
  maxHeight : 60
607
608
  },
609
+ list : {
610
+ paddingHorizontal : 5,
611
+ },
608
612
  container : {
609
613
  position : 'relative',
610
614
  flexDirection :'column',
611
615
  justifyContent : 'flex-start',
612
616
  width : '100%',
613
617
  flex : 1,
614
- paddingHorizontal : isNativeMobile()? 5:1,
615
618
  },
616
619
  accordionHeader : {
617
620
  paddingTop : 0,
@@ -7,6 +7,7 @@ import KeyboardAvoidingView from "$ecomponents/KeyboardAvoidingView";
7
7
  import { StyleSheet } from "react-native";
8
8
  import APP from "$capp/instance";
9
9
  import PropTypes from "prop-types";
10
+ import View from "$ecomponents/View";
10
11
 
11
12
  /**** règles d'utilisation :
12
13
  1. les forms doivent toujours avoir un nom : chaine de caractère unique pour l'application et non null
@@ -105,9 +106,9 @@ export default class FormComponent extends React.AppComponent {
105
106
  ...rest
106
107
  } = this.props;
107
108
  testID = defaultStr(testID,"RN_FormComponent");
108
- return <KeyboardAvoidingView {...rest} testID={testID+"_FormKeyboardAvoidingView"} style={[styles.container,rest.style]}>
109
+ return <View {...rest} testID={testID+"_FormKeyboardAvoidingView"} style={[styles.container,rest.style]}>
109
110
  {this.props.children}
110
- </KeyboardAvoidingView>
111
+ </View>
111
112
  }
112
113
  }
113
114
  const isField = (Component)=>{
@@ -15,9 +15,9 @@ import styles from "../styles";
15
15
  import CellWrapper from "./CellWrapper";
16
16
 
17
17
  export default function RowHeaderComponent({isFilter,isFooter,isHeader,className,children:cChildren,...rest}){
18
- const {showHeaders,visibleColsNames,visibleColsNamesStr,headerContainerProps,footerContainerProps,filtersContainerProps,showFilters,filters,showFooters} = useTable();
18
+ const {showHeaders,visibleColsNames,filterable,visibleColsNamesStr,headerContainerProps,footerContainerProps,filtersContainerProps,showFilters,filters,showFooters} = useTable();
19
19
  const canV = showHeaders === false ? false : Array.isArray(children)? !!children.length : true;
20
- const visible = canV && (isHeader ? true : isFilter ? !!showFilters : isFooter ? !!showFooters: true);
20
+ const visible = canV && (isHeader ? true : isFilter ? !!showFilters && filterable !== false : isFooter ? !!showFooters: true);
21
21
  const containerProps = defaultObj( isHeader ? headerContainerProps : isFooter ? footerContainerProps : filtersContainerProps);
22
22
  const style = filters ? styles.filters : isFooter ? styles.footer : null;
23
23
  const children = React.useMemo(()=>{
@@ -230,7 +230,7 @@ const TableComponent = React.forwardRef(({containerProps,listContainerStyle,onRe
230
230
  prepareItems = {false}
231
231
  items = {items}
232
232
  contentContainerStyle = {[styles.contentContainer,{width:listWidth,minWidth:totalWidths}]}
233
- style = {[styles.datagrid,{width:listWidth,minWidth:totalWidths}]}
233
+ style = {[styles.datagrid,{width:listWidth,minWidth:totalWidths},props.style]}
234
234
  keyExtractor = {keyExtractor}
235
235
  onScroll = {getOnScrollCb([absoluteScrollViewRef],(args)=>{
236
236
  if(!absoluteScrollViewRef.current) return;
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 {Portal } from 'react-native-paper';
31
30
  import {PortalProvider,CustomPortal} from '$ecomponents/Portal';
32
31
  import ErrorBoundaryProvider from "$ecomponents/ErrorBoundary/Provider";
33
32
  import notify, {notificationRef} from "$notify";
@@ -37,9 +36,11 @@ import { PreferencesContext } from './Preferences';
37
36
  import ErrorBoundary from "$ecomponents/ErrorBoundary";
38
37
  import {updateTheme,defaultTheme} from "$theme";
39
38
  import StatusBar from "$ecomponents/StatusBar";
40
- import {Provider as PaperProvider } from 'react-native-paper';
39
+ import {Provider as PaperProvider,Portal } from 'react-native-paper';
41
40
  import FontIcon from "$ecomponents/Icon/Font";
42
41
  import useContext from "$econtext/hooks";
42
+ import { GestureHandlerRootView } from 'react-native-gesture-handler';
43
+ import { StyleSheet } from "react-native";
43
44
  export * from "./context";
44
45
 
45
46
  let MAX_BACK_COUNT = 1;
@@ -273,35 +274,44 @@ function App({init:initApp,initialRouteName:appInitialRouteName,render,onMount})
273
274
  </NavigationContainer> : null;
274
275
  const content = isLoaded ? typeof render == 'function'? render({children:child,appConfig,config:appConfig}) : child : null;
275
276
  return <AuthProvider>
276
- <PaperProvider
277
- theme={theme}
278
- settings={{
279
- icon: (props) => {
280
- return <FontIcon {...props}/>
281
- },
282
- }}
283
- >
284
- <PortalProvider>
285
- <ErrorBoundaryProvider/>
286
- <PreloaderProvider/>
287
- <DialogProvider responsive testID={"RN_MainAppDialogProvider"}/>
288
- <AlertProvider SimpleSelect={SimpleSelect}/>
289
- <FormDataDialogProvider/>
290
- <BottomSheetProvider/>
291
- <DropdownAlert ref={notificationRef}/>
292
- <Portal.Host testID="RN_NativePaperPortalHost">
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>
302
- </PortalProvider>
303
- </PaperProvider>
277
+ <GestureHandlerRootView testID={"RN_MainAppGestureHanleRootView"} style={styles.gesture}>
278
+ <PaperProvider
279
+ theme={theme}
280
+ settings={{
281
+ icon: (props) => {
282
+ return <FontIcon {...props}/>
283
+ },
284
+ }}
285
+ >
286
+ <PortalProvider>
287
+ <ErrorBoundaryProvider/>
288
+ <PreloaderProvider/>
289
+ <DialogProvider responsive testID={"RN_MainAppDialogProvider"}/>
290
+ <AlertProvider SimpleSelect={SimpleSelect}/>
291
+ <FormDataDialogProvider/>
292
+ <BottomSheetProvider/>
293
+ <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>
305
+ </PaperProvider>
306
+ </GestureHandlerRootView>
304
307
  </AuthProvider>;
305
308
  }
306
309
 
307
- export default App;
310
+ export default App;
311
+
312
+ const styles = StyleSheet.create({
313
+ gesture : {
314
+ flex : 1,
315
+ flexGrow : 1,
316
+ }
317
+ })
@@ -108,7 +108,7 @@ export default function MainScreenScreenWithoutAuthContainer(props) {
108
108
  const WrapperProps = modal? {screenName} : {};
109
109
  const portalId = uniqid("screeen-container-"+screenName);
110
110
  return <Wrapper {...WrapperProps}>
111
- <View testID={testID+"_ScreenContentContainer"} id={portalId} style={[containerStyle,{backgroundColor},modal && styles.modal,containerProps.style]} {...containerProps}>
111
+ <View testID={testID+"_ScreenContentContainer"} id={portalId} {...containerProps} style={[containerStyle,{backgroundColor},modal && styles.modal,containerProps.style]} >
112
112
  <KeyboardAvoidingView testID={testID} {...keyboardAvoidingViewProps} style={[styles.keyboardAvoidingView,keyboardAvoidingViewProps.style]}>
113
113
  {withStatusBar !== false ? <StatusBar/> : null}
114
114
  {appBar === false ? null : React.isValidElement(appBar)? state.AppBar : <AppBar
@@ -5,7 +5,6 @@ import Divider from "$ecomponents/Divider";
5
5
  import PrivacyPolicyLink from "./PrivacyPolicy/Link";
6
6
  import TermsOfUsesLink from "./TermsOfUses/Link";
7
7
  import {isNativeDesktop,isAndroid,isIos} from "$platform";
8
- import Expandable from "$ecomponents/Expandable";
9
8
  import React from "$react";
10
9
  import Screen from "$screen";
11
10
  import getDevicesInfos from "./getDevicesInfos";
@@ -15,15 +14,10 @@ import {defaultStr} from "$cutils";
15
14
  import theme from "$theme";
16
15
  import APP from "$app";
17
16
  import AutoLink from "$ecomponents/AutoLink";
18
- import Grid from "$ecomponents/Grid";
19
17
  import getReleaseText from "./getReleaseText";
20
18
  import appConfig from "$capp/config";
21
- let openLibraries = null;
22
- try {
23
- openLibraries = require("./openLibraries");
24
- } catch{
25
- openLibraries = null;
26
- }
19
+ import OpenLibraries from "./OpenLibraryScreen";
20
+
27
21
  export default function HelpScreen(props){
28
22
  const deviceInfo = getDevicesInfos();
29
23
  let icon = undefined, iconText = undefined;
@@ -58,9 +52,6 @@ export default function HelpScreen(props){
58
52
  iconText += " Mac os";
59
53
  }
60
54
  }
61
- const gridPadding = 5;
62
- const gridStyles = [{width:40,padding:gridPadding},{width:'60%',padding:gridPadding},{width:60,padding:gridPadding},{width:60,padding:gridPadding}];
63
- const borderStyle = {borderColor:theme.colors.divider,borderWidth:1,justifyContent:'space-between'};
64
55
  const testID = defaultStr(props.testID,"RN_HelpAboutScreenComponent")
65
56
  return <Screen withScrollView title={title} {...props} testID={testID+"_Screen"} contentContainerStyle={[{flex:1},theme.styles.alignItemsCenter,theme.styles.justifyContentCenter]}>
66
57
  <View testID={testID+"_Container"} style={[theme.styles.alignItemsCenter,theme.styles.justifyContentCenter,theme.styles.w100,theme.styles.p1]}>
@@ -87,44 +78,8 @@ export default function HelpScreen(props){
87
78
  <Label primary textBold style={theme.styles.mv05} >{appConfig.name+", Notes de mise à jour."}</Label>
88
79
  </Link>
89
80
  </View>
90
- <View style={theme.styles.w100}>
91
- {Object.size(openLibraries,true) ? <View style={[theme.styles.w100]}>
92
- <Expandable
93
- testID={testID+"_OpenLibraries"}
94
- title = {"A propos des librairies tiers"}
95
- titleProps = {{style:theme.styles.ph1}}
96
- style = {{backgroundColor:'transparent'}}
97
- >
98
- <View testID={testID+"_OpenLibraries_Header"} style={[theme.styles.row,theme.styles.flexWrap]}>
99
- <Label testID={testID+"_OpenLibraries_HeaderLabel"} primary textBold>{appConfig.name+" "}</Label>
100
- <Label>est bâti sur un ensemble d'outils et librairies open Source</Label>
101
- </View>
102
- <View testID={testID+"_OpenLibrariesContent"} style={[theme.styles.w100,theme.styles.pv1]}>
103
- <Grid.Row style={borderStyle}>
104
- <Label style={gridStyles[0]} textBold>#</Label>
105
- <Label style={gridStyles[1]} textBold>Librairie/Outil</Label>
106
- <Label style={gridStyles[2]} textBold>Version</Label>
107
- <Label style={gridStyles[3]} textBold>Licence</Label>
108
- </Grid.Row>
109
- {Object.mapToArray(openLibraries,(lib,i,_i)=>{
110
- return <Grid.Row key={i} style={borderStyle}>
111
- <Label style={gridStyles[0]}>
112
- {_i.formatNumber()}
113
- </Label>
114
- <AutoLink style={gridStyles[1]} url={lib.url}>
115
- <Label splitText>{i}</Label>
116
- </AutoLink>
117
- <AutoLink style={gridStyles[2]}>
118
- <Label splitText numberOfLines={2}>{defaultStr(lib.version)}</Label>
119
- </AutoLink>
120
- <AutoLink url={lib.licenseUrl} style={gridStyles[3]}>
121
- <Label splitText>{lib.license}</Label>
122
- </AutoLink>
123
- </Grid.Row>
124
- })}
125
- </View>
126
- </Expandable>
127
- </View>: null}
81
+ <View testID={testID+"_OpenLibrariesLinkContainer"} style={[theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
82
+ <OpenLibraries.Link testID={testID+"_OpenLibrariesLink"}/>
128
83
  </View>
129
84
  </View>
130
85
  </Screen>
@@ -134,6 +89,6 @@ export const title = HelpScreen.title = "A propos";
134
89
 
135
90
  export const screenName = HelpScreen.screenName = "Help/About";
136
91
 
137
- HelpScreen.AuthRequired = false;
92
+ HelpScreen.authRequired = false;
138
93
 
139
94
  HelpScreen.Modal = true;
@@ -0,0 +1,128 @@
1
+ import View from "$ecomponents/View";
2
+ import Screen from "$escreen";
3
+ import {defaultStr,defaultObj,isValidUrl} from "$cutils";
4
+ import Label from "$ecomponents/Label";
5
+ import theme from "$theme";
6
+ import Link from "$ecomponents/Link";
7
+ import {StyleSheet} from "react-native";
8
+ import appConfig from "$capp/config";
9
+ import Grid from "$ecomponents/Grid";
10
+ import Table from "$ecomponents/Table";
11
+ import React from "$react";
12
+ import AutoLink from "$ecomponents/AutoLink";
13
+
14
+ const openLibraries = require("./openLibraries");
15
+
16
+ const columns = {
17
+ index : {
18
+ text : "#",
19
+ width : 40,
20
+ },
21
+ library : {
22
+ text : "Librairie/Outil",
23
+ width : 180,
24
+ },
25
+ version : {
26
+ text : "Version",
27
+ width : 60,
28
+ },
29
+ license : {
30
+ text : "Licence",
31
+ width : 80,
32
+ }
33
+ }
34
+ export default function OpenLibrariesScreen({testID,...props}){
35
+ testID = defaultStr(testID,"RN_HealScreenOpenLibraries");
36
+ const gridStyles = [styles.grid0,styles.grid1,styles.grid2,styles.grid3];
37
+ const borderStyle = {borderColor:theme.colors.divider,borderWidth:1,justifyContent:'space-between'};
38
+ const data = React.useMemo(()=>{
39
+ const data = [];
40
+ Object.map(openLibraries,(lib,i,_i)=>{
41
+ const da = {
42
+ ...lib,
43
+ index : _i,
44
+ library : i,
45
+ };
46
+ da.url = isValidUrl(da.url)? da.url : da.homepage;
47
+ data.push(da)
48
+ })
49
+ return data;
50
+ },[])
51
+ return <Screen {...props} title={title} containerProps={{style:[theme.styles.justifyContentCenter]}}>
52
+ <View testID={testID+"_OpenLibraries_Header"} style={[theme.styles.row,theme.styles.flexWrap,theme.styles.p1]}>
53
+ <Label testID={testID+"_OpenLibraries_HeaderLabel"} primary textBold>{appConfig.name+" "}</Label>
54
+ <Label>est bâti sur un ensemble d'outils et librairies open Source</Label>
55
+ </View>
56
+ <View testID={testID+"_OpenLibrariesContent"} style={[theme.styles.w100,theme.styles.pv1]}>
57
+ <Table
58
+ sortable = {false}
59
+ columns = {columns}
60
+ data = {data}
61
+ containerProps = {{style:styles.table}}
62
+ renderCell = {({rowData,columnDef,columnField,...rest})=>{
63
+ const value = rowData[columnField];
64
+ switch(columnField){
65
+ case "index":
66
+ return <Label>
67
+ {value.formatNumber()}
68
+ </Label>
69
+ case "library" :
70
+ return <AutoLink url={rowData.url}>
71
+ <Label splitText style={styles.textDecorationUnderline} >{value}</Label>
72
+ </AutoLink>
73
+ case "version" :
74
+ return <Label splitText numberOfLines={2}>{defaultStr(value)}</Label>
75
+ case "licence" :
76
+ return <AutoLink url={rowData.licenseUrl}>
77
+ <Label style={styles.textDecorationUnderline} splitText>{rowData.license}</Label>
78
+ </AutoLink>
79
+ }
80
+ return null;
81
+ }}
82
+ />
83
+ </View>
84
+ </Screen>
85
+ }
86
+
87
+ export const title = "A propos des librairies tiers";
88
+
89
+ OpenLibrariesScreen.title = title;
90
+ OpenLibrariesScreen.screenName = "Help/OpenLibraries";
91
+ OpenLibrariesScreen.Modal = true;
92
+ OpenLibrariesScreen.authRequired = false;
93
+
94
+ export function OpenLibrariesLink(props){
95
+ const {style,...rest} = props;
96
+ return <Link routeName={OpenLibrariesScreen.screenName}>
97
+ <Label {...defaultObj(rest)} style={[{color:theme.colors.primary},styles.content,style]}>
98
+ {props.children || title}
99
+ </Label>
100
+ </Link>
101
+ }
102
+
103
+ const gridPadding = 5;
104
+
105
+ const styles = StyleSheet.create({
106
+ container : {
107
+ paddingHorizontal : 10,
108
+ paddingVertical : 10,
109
+ },
110
+ textDecorationUnderline : {
111
+ textDecorationLine:'underline',
112
+ },
113
+ content : {
114
+ textDecorationLine:'underline',
115
+ fontWeight : 'bold',
116
+ },
117
+ grid0: {width:40,padding:gridPadding},
118
+ grid1 : {width:'60%',padding:gridPadding},
119
+ grid2 : {width:60,padding:gridPadding},
120
+ grid3 : {width:60,padding:gridPadding},
121
+ table : {
122
+ width : "100%"
123
+ },
124
+ })
125
+
126
+ OpenLibrariesScreen.Link = OpenLibrariesLink;
127
+
128
+ export {OpenLibrariesLink as Link};
@@ -1,10 +1,12 @@
1
1
  import TermsOfUses from "./TermsOfUses"
2
2
  import PrivacyPolicy from "./PrivacyPolicy";
3
3
  import About from "./About";
4
+ import OpenLibrariesScreen from "./OpenLibraryScreen";
4
5
  export default [
5
6
  TermsOfUses,
6
7
  PrivacyPolicy,
7
8
  About,
9
+ OpenLibrariesScreen,
8
10
  ]
9
11
 
10
12
  export {PrivacyPolicy};
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.26.3","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.0","url":"https://github.com/borispipo/common#readme","license":"ISC"},"@gorhom/portal":{"version":"1.0.14","url":"https://github.com/gorhom/react-native-portal#readme","license":"MIT"},"@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.7","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.3","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.1","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.26.8","homepage":"https://github.com/borispipo/expo-ui#readme"}};
@@ -1,4 +0,0 @@
1
- import { Portal } from "@gorhom/portal";
2
- export * from "@gorhom/portal";
3
-
4
- export default Portal;