@fto-consult/expo-ui 6.77.6 → 6.78.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/package.json +2 -2
- package/src/components/Datagrid/Common/Common.js +13 -12
- package/src/components/Datagrid/Common/TableData.js +2 -2
- package/src/components/Datagrid/SWRDatagrid.js +1 -1
- package/src/components/Form/Fields/SelectTableData/Component.js +6 -6
- package/src/context/Provider.js +5 -5
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fto-consult/expo-ui",
|
3
|
-
"version": "6.
|
3
|
+
"version": "6.78.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.
|
74
|
+
"@fto-consult/common": "^3.63.0",
|
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",
|
@@ -39,7 +39,7 @@ import { renderRowCell,formatValue,arrayValueSeparator } from "./utils";
|
|
39
39
|
import Button from "$ecomponents/Button";
|
40
40
|
import stableHash from "stable-hash";
|
41
41
|
import * as XLSX from "xlsx";
|
42
|
-
import {
|
42
|
+
import {parseMangoQueries} from "$ecomponents/Filter";
|
43
43
|
import events from "../events";
|
44
44
|
import {MORE_ICON} from "$ecomponents/Icon"
|
45
45
|
import ActivityIndicator from "$ecomponents/ActivityIndicator";
|
@@ -1874,7 +1874,8 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
1874
1874
|
})
|
1875
1875
|
}).finally(Preloader.close);
|
1876
1876
|
}
|
1877
|
-
handleTableExport(
|
1877
|
+
handleTableExport(args){
|
1878
|
+
let {sessionKeyName,excel,pdf,isOnlytotal,displayOnlyHeader,data:config} = args;
|
1878
1879
|
this.setSessionData(sessionKeyName,config);
|
1879
1880
|
config.fileName = sprintf(config.fileName);
|
1880
1881
|
config.sheetName = sanitizeSheetName(config.sheetName);
|
@@ -1979,7 +1980,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
1979
1980
|
}
|
1980
1981
|
});
|
1981
1982
|
}
|
1982
|
-
return {data,headers,config}
|
1983
|
+
return {...args,data,headers,config}
|
1983
1984
|
}
|
1984
1985
|
|
1985
1986
|
renderExportableMenu(){
|
@@ -3193,9 +3194,9 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
3193
3194
|
if(this.isClearingAllFilters) return;
|
3194
3195
|
return this.doFilter(arg);
|
3195
3196
|
}
|
3196
|
-
///si les filtres devront être
|
3197
|
+
///si les filtres devront être parsé, pour être preparés au format SQL
|
3197
3198
|
canConvertFiltersToSQL(){
|
3198
|
-
return !!(this.props.
|
3199
|
+
return !!(this.props.parseMangoQueries);;
|
3199
3200
|
}
|
3200
3201
|
/*** retourne la liste des colonnes sur lesquelles on peut effectuer un filtre*/
|
3201
3202
|
getFilterableColumnsNames(){
|
@@ -3204,15 +3205,15 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
3204
3205
|
}
|
3205
3206
|
/*** récupère les filtres en cours du datagrid
|
3206
3207
|
* @param {boolean} prepare si les filtres seront apprêtés grace à la méthode prepareFilters de $cFilters
|
3207
|
-
* @param {boolean}
|
3208
|
+
* @param {boolean} parseMangoQueries, si l'on doit parser les filtres initialement au format mangoqueries, les preparer au format SQL
|
3208
3209
|
*/
|
3209
3210
|
getFilters(args){
|
3210
3211
|
args = defaultObj(args);
|
3211
3212
|
const prepare = typeof args.prepare =='boolean'? args.prepare : typeof args.prepareFilters =='boolean' ? args.prepareFilters : true;
|
3212
3213
|
this.filters = extendObj(true,{},this.filteredValues,this.filters);
|
3213
|
-
const
|
3214
|
+
const parseMangoQueries = typeof args.parseMangoQueries =="boolean"? args.parseMangoQueries : typeof args.parseMangoQueries =="boolean"? args.parseMangoQueries : false;
|
3214
3215
|
if(prepare === false) return this.filters;
|
3215
|
-
return prepareFilters(this.filters,{filter:this.canHandleFilterVal.bind(this),
|
3216
|
+
return prepareFilters(this.filters,{filter:this.canHandleFilterVal.bind(this),parseMangoQueries});
|
3216
3217
|
}
|
3217
3218
|
hasFilters (){
|
3218
3219
|
if(!this.isFilterable()) return false;
|
@@ -3300,14 +3301,14 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
3300
3301
|
force = cb;
|
3301
3302
|
cb = undefined;
|
3302
3303
|
}
|
3303
|
-
fetchOptions = this.getFetchOptions({fetchOptions,
|
3304
|
+
fetchOptions = this.getFetchOptions({fetchOptions,parseMangoQueries:false});
|
3304
3305
|
if(typeof this.props.fetchOptionsMutator =='function' && this.props.fetchOptionsMutator(fetchOptions) === false){
|
3305
3306
|
this.isFetchingData = false;
|
3306
3307
|
return resolve(sData);
|
3307
3308
|
}
|
3308
3309
|
if(this.beforeFetchData({fetchOptions,force,context:this,renderProgressBar}) === false) return resolve(sData);
|
3309
3310
|
if(this.canConvertFiltersToSQL()){
|
3310
|
-
fetchOptions.selector =
|
3311
|
+
fetchOptions.selector = parseMangoQueries(fetchOptions.selector);
|
3311
3312
|
}
|
3312
3313
|
if(typeof this.props.beforeFetchData =='function' && this.props.beforeFetchData({...rest,renderProgressBar,context:this,force,fetchOptions,options:fetchOptions}) === false){
|
3313
3314
|
this.isFetchingData = false;
|
@@ -3462,7 +3463,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
3462
3463
|
}
|
3463
3464
|
/*** récupère les fetchOptions du datagrid */
|
3464
3465
|
getFetchOptions({fetchOptions}){
|
3465
|
-
const fetchFilters = this.getFilters({
|
3466
|
+
const fetchFilters = this.getFilters({parseMangoQueries : false});
|
3466
3467
|
fetchOptions = Object.clone(isObj(fetchOptions)? fetchOptions : {});
|
3467
3468
|
fetchOptions.selector = defaultObj(fetchOptions.selector);
|
3468
3469
|
fetchOptions.dataSources = this.currentDataSources;
|
@@ -3951,7 +3952,7 @@ CommonDatagridComponent.propTypes = {
|
|
3951
3952
|
]),
|
3952
3953
|
filterable : PropTypes.bool, //si le composant peut être filtrable
|
3953
3954
|
/*** si les filtres de données seront convertis au format SQL avant d'effectuer la requête distante */
|
3954
|
-
|
3955
|
+
parseMangoQueries : PropTypes.bool,
|
3955
3956
|
isLoading : PropTypes.bool,///si les données sont en train d'être chargées
|
3956
3957
|
session : PropTypes.bool, /// si les données de sessions seront persistées
|
3957
3958
|
exportTableProps : PropTypes.oneOfType([
|
@@ -4,8 +4,8 @@ import PropTypes from "prop-types";
|
|
4
4
|
import actions from "$actions";
|
5
5
|
/****
|
6
6
|
* la fonction fetchOptionsMutator permet éventuellemnt de faire une mutations sur les options fetchOptions avant qu'elle ne soit appliquée pour la recherche. elle
|
7
|
-
* est appelée avant que la fonction
|
8
|
-
* la fonction beforeFetchData est appelée immédiatement avant l'execution de la requête fetch et après que la fonction
|
7
|
+
* est appelée avant que la fonction parseMangoQueriesToSQL ne soit appelée, bien évidemement si la props parseMangoQueriesToSQL est active pour le datagrid
|
8
|
+
* la fonction beforeFetchData est appelée immédiatement avant l'execution de la requête fetch et après que la fonction parseMangoQueriestoSQL soit appelée
|
9
9
|
*/
|
10
10
|
export default class CommonTableDatagrid extends CommonDatagrid{
|
11
11
|
constructor(props){
|
@@ -175,7 +175,7 @@ const SWRDatagridComponent = React.forwardRef((props,ref)=>{
|
|
175
175
|
opts = defaultObj(opts);
|
176
176
|
opts.fetchOptions = isObj(opts.fetchOptions)? Object.clone(opts.fetchOptions) : {};
|
177
177
|
extendObj(true,opts.fetchOptions,fetchOptionsRef.current);
|
178
|
-
if(props.
|
178
|
+
if(props.parseMangoQueries === false){
|
179
179
|
opts.fetchOptions.selector = extendObj(true,{},opts.fetchOptions.selector,fetchOptionsRef.current?.selector);
|
180
180
|
}
|
181
181
|
opts.fetchOptions.sort = sortRef.current;
|
@@ -7,7 +7,7 @@ import {defaultStr,extendObj,isFunction,defaultVal,isObjOrArray,defaultObj} from
|
|
7
7
|
import PropTypes from "prop-types";
|
8
8
|
import actions from "$cactions";
|
9
9
|
import {navigateToTableData} from "$enavigation/utils";
|
10
|
-
import {getFetchOptions,prepareFilters,
|
10
|
+
import {getFetchOptions,prepareFilters,parseMangoQueries as filtersParseMangoQueries} from "$cutils/filters";
|
11
11
|
import fetch from "$capi"
|
12
12
|
import React from "$react";
|
13
13
|
import useApp from "$econtext/hooks";
|
@@ -19,7 +19,7 @@ import DateLib from "$lib/date";
|
|
19
19
|
* foreignKeyTable : la tableData dans laquelle effectuer les donées de la requêtes
|
20
20
|
* foreignKeyLabel : Le libélé dans la table étrangère
|
21
21
|
*/
|
22
|
-
const TableDataSelectField = React.forwardRef(({foreignKeyColumn,foreignKeyLabelRenderers,isStructData,getForeignKeyTable:cGetForeignKeyTable,prepareFilters:cPrepareFilters,bindUpsert2RemoveEvents,onAdd,showAdd:customShowAdd,canShowAdd,foreignKeyTable,fetchItemsPath,foreignKeyLabel,foreignKeyLabelIndex,dropdownActions,fields,fetchItems:customFetchItem,
|
22
|
+
const TableDataSelectField = React.forwardRef(({foreignKeyColumn,foreignKeyLabelRenderers,isStructData,getForeignKeyTable:cGetForeignKeyTable,prepareFilters:cPrepareFilters,bindUpsert2RemoveEvents,onAdd,showAdd:customShowAdd,canShowAdd,foreignKeyTable,fetchItemsPath,foreignKeyLabel,foreignKeyLabelIndex,dropdownActions,fields,fetchItems:customFetchItem,parseMangoQueries,mutateFetchedItems,onFetchItems,isFilter,isUpdate,isDocEditing,items,onAddProps,fetchOptions,...props},ref)=>{
|
23
23
|
props.data = defaultObj(props.data);
|
24
24
|
const type = defaultStr(props.type)?.toLowerCase();
|
25
25
|
isStructData = isStructData || type?.replaceAll("-","").replaceAll("_","").trim().contains("structdata");
|
@@ -37,7 +37,7 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,foreignKeyLabel
|
|
37
37
|
}
|
38
38
|
}
|
39
39
|
const getForeignKeyTable = typeof cGetForeignKeyTable =='function'? cGetForeignKeyTable : isStructData ? getStructData: appGetForeignKeyTable;
|
40
|
-
|
40
|
+
parseMangoQueries = defaultBool(parseMangoQueries,datagrid?.parseMangoQueries);
|
41
41
|
const foreignKeyTableStr = defaultStr(foreignKeyTable,props.tableName,props.table);
|
42
42
|
if(typeof getForeignKeyTable !=='function'){
|
43
43
|
console.error("la fonction getTableData non définie des les paramètres d'initialisation de l'application!!! Rassurez vous d'avoir définier cette fonction!!, options : foreignKeyTable:",foreignKeyTable,"foreignKeyColumn:",foreignKeyColumn,props)
|
@@ -147,8 +147,8 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,foreignKeyLabel
|
|
147
147
|
if(!isMounted()) return;
|
148
148
|
if(typeof beforeFetchItems ==='function' && beforeFetchItems({fetchOptions}) === false) return;
|
149
149
|
let opts = Object.clone(fetchOptions);
|
150
|
-
if(
|
151
|
-
opts.selector =
|
150
|
+
if(parseMangoQueries){
|
151
|
+
opts.selector = filtersParseMangoQueries(opts.selector);
|
152
152
|
opts = getFetchOptions(opts);
|
153
153
|
delete opts.selector;
|
154
154
|
} else {
|
@@ -357,7 +357,7 @@ TableDataSelectField.propTypes = {
|
|
357
357
|
itemValue : PropTypes.func,
|
358
358
|
renderItem : PropTypes.func,
|
359
359
|
renderText : PropTypes.func,
|
360
|
-
|
360
|
+
parseMangoQueries : PropTypes.oneOfType([
|
361
361
|
PropTypes.func,
|
362
362
|
PropTypes.bool,
|
363
363
|
]),// si l'on doit convertir les selecteurs de filtres au format SQl
|
package/src/context/Provider.js
CHANGED
@@ -52,7 +52,7 @@ Object.map(Utils,(v,i)=>{
|
|
52
52
|
}, la liste des tables de données
|
53
53
|
structsData : {object}, la liste des données de structures
|
54
54
|
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
|
55
|
-
|
55
|
+
parseMangoQueries : {boolean}, si les filtres de datagrid ou filtres seront convertis au format SQL
|
56
56
|
components : {
|
57
57
|
MainProvider : {ReactComponent}, //le composant qui permet de wrapper le contenu de l'application expo. Nb, ce composant ne peut utiliser ni les routes, nis les DialogProvider,
|
58
58
|
logo : ReactNode | ReactComponent | object {
|
@@ -88,7 +88,7 @@ Object.map(Utils,(v,i)=>{
|
|
88
88
|
swrConfig : {object},//les paramètres de configuration de l'objet swr utilisée dans le composant SWRDatagrid
|
89
89
|
realm : {}, //les options de configurations de la base de données realmdb
|
90
90
|
*/
|
91
|
-
const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,auth:cAuth,components:cComponents,
|
91
|
+
const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,auth:cAuth,components:cComponents,parseMangoQueries,getStructData,tablesData,structsData,...props})=>{
|
92
92
|
require('$session');///initializing session
|
93
93
|
const {extendAppTheme} = appConfig;
|
94
94
|
const { theme : pTheme } = useMaterial3Theme();
|
@@ -165,8 +165,8 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,a
|
|
165
165
|
}
|
166
166
|
}
|
167
167
|
},swrConfig);
|
168
|
-
if(
|
169
|
-
appConfig.set("
|
168
|
+
if(parseMangoQueries !== undefined){
|
169
|
+
appConfig.set("parseMangoQueries",parseMangoQueries);
|
170
170
|
}
|
171
171
|
const colorScheme = useColorScheme();
|
172
172
|
const isColorShemeDark = colorScheme ==="dark";
|
@@ -300,7 +300,7 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,a
|
|
300
300
|
...props,
|
301
301
|
handleHelpScreen,
|
302
302
|
navigation,
|
303
|
-
|
303
|
+
parseMangoQueries,
|
304
304
|
auth,
|
305
305
|
components : {
|
306
306
|
...components,
|