@fto-consult/expo-ui 6.26.8 → 6.26.10
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 +1 -1
- package/bin/create-app/registerApp.js +1 -0
- package/package.json +6 -7
- package/src/components/AutoLink/index.js +11 -3
- package/src/components/Countries/SelectCountry.js +5 -3
- package/src/components/ScrollView/index.js +1 -1
- package/src/components/Table/Header/index.js +2 -2
- package/src/components/Table/index.js +1 -1
- package/src/index.js +41 -31
- package/src/layouts/Screen/ScreenWithoutAuthContainer.js +1 -1
- package/src/screens/Help/About.js +5 -50
- package/src/screens/Help/OpenLibraryScreen.js +128 -0
- package/src/screens/Help/index.js +2 -0
- package/src/screens/Help/openLibraries.js +1 -1
- package/src/screens/ScreenWrapper.js +2 -1
- package/src/screens/index.js +1 -0
- package/src/components/Portal/index.old.js +0 -4
package/app.config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fto-consult/expo-ui",
|
|
3
|
-
"version": "6.26.
|
|
3
|
+
"version": "6.26.10",
|
|
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 @
|
|
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"
|
|
@@ -68,8 +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.
|
|
72
|
-
"@gorhom/portal": "^1.0.14",
|
|
71
|
+
"@fto-consult/common": "^3.29.2",
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -3,7 +3,7 @@ import SimpleSelect from "$ecomponents/SimpleSelect";
|
|
|
3
3
|
import { countries,styles} from "./utils";
|
|
4
4
|
import View from "$ecomponents/View";
|
|
5
5
|
import {StyleSheet,Image} from "react-native";
|
|
6
|
-
import {defaultObj} from "$cutils";
|
|
6
|
+
import {defaultObj,defaultVal} from "$cutils";
|
|
7
7
|
import PropTypes from "prop-types";
|
|
8
8
|
import {isNonNullString,isNumber,defaultStr} from "$cutils";
|
|
9
9
|
import Label from "$ecomponents/Label";
|
|
@@ -12,7 +12,8 @@ import appConfig from "$capp/config";
|
|
|
12
12
|
/**** retourne les props du champ de type countrie */
|
|
13
13
|
export const getCountryFieldProps = (props)=>{
|
|
14
14
|
props = defaultObj(props);
|
|
15
|
-
let {imageProps,defaultValue,...rest} = props;
|
|
15
|
+
let {imageProps,defaultValue,label,text,...rest} = props;
|
|
16
|
+
label = defaultVal(label,text,'Pays');
|
|
16
17
|
const countryStr = defaultStr(appConfig.countryCode).toUpperCase();
|
|
17
18
|
imageProps = defaultObj(imageProps);
|
|
18
19
|
if(rest.multiple){
|
|
@@ -26,7 +27,8 @@ export const getCountryFieldProps = (props)=>{
|
|
|
26
27
|
defaultValue = defaultStr(defaultValue,countryStr);
|
|
27
28
|
}
|
|
28
29
|
return {
|
|
29
|
-
label
|
|
30
|
+
label,
|
|
31
|
+
text : label,
|
|
30
32
|
type : 'select',
|
|
31
33
|
items : countries,
|
|
32
34
|
upper : true,
|
|
@@ -5,7 +5,7 @@ import {defaultStr,defaultObj} from "$cutils";
|
|
|
5
5
|
import {Vertical as AutoSizeVertical} from "$ecomponents/AutoSizer";
|
|
6
6
|
|
|
7
7
|
const ScrollViewComponent = React.forwardRef(({withAutoSizer,autoSizerProps,testID,...rest},ref) => {
|
|
8
|
-
return <ScrollView testID={testID} {...rest} ref={ref}/>
|
|
8
|
+
//return <ScrollView testID={testID} {...rest} ref={ref}/>
|
|
9
9
|
testID = defaultStr(testID,'RN_ScrollViewComponent');
|
|
10
10
|
const autoSize = React.useRef(withAutoSizer).current;
|
|
11
11
|
if(!autoSize || rest.horizontal === true || rest.vertical === false){
|
|
@@ -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
|
-
<
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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]}
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
1
|
+
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.26.9","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.1","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"}};
|
|
@@ -12,7 +12,7 @@ export default function ScreenWrapperNavComponent(_props){
|
|
|
12
12
|
const {navigation,route,...props} = getScreenProps(_props);
|
|
13
13
|
const sanitizedName = route.name;
|
|
14
14
|
const options = defaultObj(SCREEN_OPTIONS[sanitizedName]);
|
|
15
|
-
const {screenName,Screen,authRequired,isModal,...rest} = options;
|
|
15
|
+
const {screenName,groupName,Screen,authRequired,isModal,...rest} = options;
|
|
16
16
|
const {drawerRef} = useDrawer()
|
|
17
17
|
setActiveNavigation(navigation);
|
|
18
18
|
setRoute(route);
|
|
@@ -66,6 +66,7 @@ export default function ScreenWrapperNavComponent(_props){
|
|
|
66
66
|
const withFab = typeof options.withFab ==='boolean' ? options.withFab : typeof Screen.withFab =='boolean'? Screen.withFab : allowDrawer;
|
|
67
67
|
return <Screen
|
|
68
68
|
withFab = {withFab}
|
|
69
|
+
groupName = {groupName}
|
|
69
70
|
{...rest}
|
|
70
71
|
key = {sanitizedName}
|
|
71
72
|
authRequired={authRequired === false ? false : authRequired || allowDrawer}
|
package/src/screens/index.js
CHANGED
|
@@ -63,6 +63,7 @@ export const handleScreen = ({Screen,Factory,ModalFactory,result,filter,index})=
|
|
|
63
63
|
const options = typeof Screen.options === 'function'? Screen.options(args) : typeof screenOptions ==='function'? screenOptions(args) : defaultObj(Screen.options,screenOptions);
|
|
64
64
|
options.screenName = screenName;
|
|
65
65
|
options.Screen = Screen;
|
|
66
|
+
options.groupName = groupName;
|
|
66
67
|
options.authRequired = authRequired;
|
|
67
68
|
SCREEN_OPTIONS[sanitizedName] = options;
|
|
68
69
|
options.withAppBar = Screen.isModalScreen ? true : false;
|