@fto-consult/expo-ui 2.0.13 → 2.1.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 +1 -1
- package/src/components/Datagrid/Accordion/Filters.js +1 -6
- package/src/components/Datagrid/Accordion/index.js +1 -1
- package/src/components/Datagrid/Common/Common.js +26 -11
- package/src/components/Datagrid/Common/TableData.js +8 -3
- package/src/components/Drawer/utils.js +2 -3
- package/src/components/Filter/index.js +2 -2
- package/src/components/Filter/utils.js +5 -0
- package/src/components/TableLink/index.js +2 -2
- package/src/navigation/Drawer/ProfilAvatar/index.js +1 -1
package/package.json
CHANGED
|
@@ -17,7 +17,6 @@ let windowWidth = Dimensions.get("window").width;
|
|
|
17
17
|
const FiltersAccordionComponent = React.forwardRef((props,ref)=>{
|
|
18
18
|
const {filters,isLoading,filteredColumns,children,filterTitle:customFilterTitle,visible:customVisible,orOperator,andOperator,onToggleFilters,context:customContext,...restProps} = props;
|
|
19
19
|
const context = defaultObj(customContext);
|
|
20
|
-
const filtersValuesRef = React.useRef({});
|
|
21
20
|
const [state,setState] = React.useState({
|
|
22
21
|
visible : defaultBool(customVisible,false),
|
|
23
22
|
visibleColumns : defaultObj(filteredColumns),
|
|
@@ -55,8 +54,7 @@ const FiltersAccordionComponent = React.forwardRef((props,ref)=>{
|
|
|
55
54
|
}}
|
|
56
55
|
/>)
|
|
57
56
|
if(!visible) return;
|
|
58
|
-
|
|
59
|
-
let defVal = isObj(filtersValuesRef.current[key]) ? filtersValuesRef.current[key].defaultValue : "";
|
|
57
|
+
let defVal = filter.defaultValue;
|
|
60
58
|
if(typeof defVal !== 'string' && typeof defVal !=='boolean'){
|
|
61
59
|
if(Array.isArray(defVal)){
|
|
62
60
|
defVal = "["+defVal.join(",")+"]";
|
|
@@ -69,13 +67,11 @@ const FiltersAccordionComponent = React.forwardRef((props,ref)=>{
|
|
|
69
67
|
mainFilterTitle +=(content.length?",":"")+"\n"+defaultStr(filter.label,filter.text,filter.field)+" : "+defVal+""
|
|
70
68
|
content.push(<Filter
|
|
71
69
|
{...filter}
|
|
72
|
-
{...fOp}
|
|
73
70
|
dynamicRendered
|
|
74
71
|
isLoading = {isLoading && filteredRef.current[key] ? true : false}
|
|
75
72
|
orOperator = {defaultBool(orOperator,filter.orOperator,true)}
|
|
76
73
|
andOperator = {defaultBool(andOperator,filter.andOperator,true)}
|
|
77
74
|
onChange = {(arg)=>{
|
|
78
|
-
filtersValuesRef.current[key] = getFilterStateValues(arg);
|
|
79
75
|
const canHandle = canHandleFilter(arg);
|
|
80
76
|
if(filteredRef.current[key] !== canHandle){
|
|
81
77
|
if(canHandle){
|
|
@@ -90,7 +86,6 @@ const FiltersAccordionComponent = React.forwardRef((props,ref)=>{
|
|
|
90
86
|
}
|
|
91
87
|
}}
|
|
92
88
|
withBottomSheet
|
|
93
|
-
//style = {[styles.filter,filter.style]}
|
|
94
89
|
containerProps = {{...containerProps}}
|
|
95
90
|
inputProps = {{containerProps}}
|
|
96
91
|
/>)
|
|
@@ -31,6 +31,7 @@ import copyToClipboard from "$capp/clipboard";
|
|
|
31
31
|
import { Pressable } from "react-native";
|
|
32
32
|
import TableLink from "$TableLink";
|
|
33
33
|
import appConfig from "$capp/config";
|
|
34
|
+
import stableHash from "stable-hash"
|
|
34
35
|
|
|
35
36
|
export const arrayValueSeparator = ", ";
|
|
36
37
|
|
|
@@ -115,10 +116,10 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
115
116
|
if(isPlainObject(f)){
|
|
116
117
|
this.filters[v] = f;
|
|
117
118
|
this.filters[v].field = defaultStr(f.field,v);
|
|
118
|
-
this.filters[v].
|
|
119
|
+
this.filters[v].originValue = defaultVal(this.filters[v].originValue,f.defaultValue,f.value)
|
|
119
120
|
} else {
|
|
120
121
|
this.filters[v] = {
|
|
121
|
-
|
|
122
|
+
originValue : f,
|
|
122
123
|
field : v
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -845,7 +846,9 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
845
846
|
if(removeFocus) document.body.click();
|
|
846
847
|
});
|
|
847
848
|
}
|
|
849
|
+
prepareFilter(props,filteredColumns){
|
|
848
850
|
|
|
851
|
+
}
|
|
849
852
|
renderFilter(props){
|
|
850
853
|
return <Filter {...props}/>
|
|
851
854
|
}
|
|
@@ -884,7 +887,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
884
887
|
width,
|
|
885
888
|
...restCol
|
|
886
889
|
} = header;
|
|
887
|
-
restCol = defaultObj(restCol);
|
|
890
|
+
restCol = Object.clone(defaultObj(restCol));
|
|
888
891
|
let colFilter = defaultVal(restCol.filter,true);
|
|
889
892
|
field = header.field = defaultStr(header.field,field,headerIndex);
|
|
890
893
|
delete restCol.filter;
|
|
@@ -899,7 +902,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
899
902
|
}
|
|
900
903
|
totalWidths +=width;
|
|
901
904
|
widths[header.field] = width;
|
|
902
|
-
|
|
905
|
+
const colProps = {id,key}
|
|
903
906
|
colProps.key = isNonNullString(key)?key : (header.field||("datagrid-column-header-"+headerIndex))
|
|
904
907
|
colProps.style = Object.assign({},StyleSheet.flatten(restCol.style));
|
|
905
908
|
if(!visible){
|
|
@@ -937,7 +940,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
937
940
|
const sortedProps = isColumnSorted ? {...sortedColumn} : {};
|
|
938
941
|
let filterProps = {};
|
|
939
942
|
if(colFilter){
|
|
940
|
-
|
|
943
|
+
const fCol = defaultObj(this.filters[header.field]);
|
|
941
944
|
this.filters[header.field] = fCol;
|
|
942
945
|
delete restCol.sortable;
|
|
943
946
|
filterProps = {
|
|
@@ -948,14 +951,14 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
948
951
|
andOperator : filterAndOperator,
|
|
949
952
|
searchIconTooltip : 'Filtre',
|
|
950
953
|
searchIcon : 'filter_list',
|
|
951
|
-
defaultValue : fCol.
|
|
954
|
+
defaultValue : fCol.originValue,
|
|
952
955
|
name : header.field,
|
|
953
956
|
onClearFilter : this.onClearFilter.bind(this),
|
|
954
957
|
onChange : this.onFilterChange.bind(this),
|
|
955
958
|
operator : fCol.operator,
|
|
956
959
|
action : defaultStr(fCol.originAction,fCol.action),
|
|
957
960
|
};
|
|
958
|
-
this.
|
|
961
|
+
this.prepareFilter(filterProps,headerFilters);
|
|
959
962
|
}
|
|
960
963
|
this.prepareColumn({
|
|
961
964
|
visible,
|
|
@@ -1129,7 +1132,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
1129
1132
|
if(!isObj(f)) return;
|
|
1130
1133
|
defValue = undefined;
|
|
1131
1134
|
if(f.type =="select") defValue = [];
|
|
1132
|
-
filters[i] = {...f,value:defValue,defaultValue:defValue,
|
|
1135
|
+
filters[i] = {...f,value:defValue,defaultValue:defValue,originValue:defValue}
|
|
1133
1136
|
})
|
|
1134
1137
|
this.filters = filters;
|
|
1135
1138
|
this.refresh(true);
|
|
@@ -1155,7 +1158,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
1155
1158
|
field = defaultStr(field,name);
|
|
1156
1159
|
if(field){
|
|
1157
1160
|
let v = defaultStr(type).toLowerCase() == "select"? []:undefined
|
|
1158
|
-
this.filters[field] = {value:v,defaultValue:v,
|
|
1161
|
+
this.filters[field] = {value:v,defaultValue:v,originValue:v,originValue:v}
|
|
1159
1162
|
this.doFilter({value:v,field,force:true})
|
|
1160
1163
|
}
|
|
1161
1164
|
}
|
|
@@ -1165,11 +1168,20 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
1165
1168
|
}
|
|
1166
1169
|
onFilterChange(arg){
|
|
1167
1170
|
this.filteredValues = defaultObj(this.filteredValues);
|
|
1168
|
-
let {field,operator,action,value} = defaultObj(arg);
|
|
1171
|
+
let {field,operator,originAction,action,value} = defaultObj(arg);
|
|
1172
|
+
const filters = this.preparedColumns.filters;
|
|
1169
1173
|
if(isNonNullString(field) && isNonNullString(operator) && isNonNullString(action)){
|
|
1170
1174
|
this.filteredValues[field] = {
|
|
1171
1175
|
operator,action,value,field
|
|
1172
1176
|
}
|
|
1177
|
+
Object.map(filters,(filter)=>{
|
|
1178
|
+
if(isObj(filter) && filter.field == field){
|
|
1179
|
+
filter.originValue = filter.defaultValue = arg.defaultValue;
|
|
1180
|
+
filter.operator = operator;
|
|
1181
|
+
filter.action = defaultStr(originAction,action);
|
|
1182
|
+
}
|
|
1183
|
+
});
|
|
1184
|
+
|
|
1173
1185
|
}
|
|
1174
1186
|
return this.doFilter(arg);
|
|
1175
1187
|
}
|
|
@@ -1369,8 +1381,11 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
1369
1381
|
}
|
|
1370
1382
|
},isObj(p) && typeof p.force ==='boolean'?p.force : !this.state.isReady)
|
|
1371
1383
|
}
|
|
1384
|
+
isTableData(){
|
|
1385
|
+
return false;
|
|
1386
|
+
}
|
|
1372
1387
|
UNSAFE_componentWillReceiveProps(nextProps){
|
|
1373
|
-
if('data' in nextProps && isObjOrArray(nextProps.data)){
|
|
1388
|
+
if(!this.isTableData() && 'data' in nextProps && isObjOrArray(nextProps.data) && nextProps.data != this.state.data && (stableHash(nextProps.data) != stableHash(this.state.data))){
|
|
1374
1389
|
this.prepareData({data:nextProps.data,force:true},(state)=>{
|
|
1375
1390
|
this.setState(state)
|
|
1376
1391
|
});
|
|
@@ -2,6 +2,7 @@ import CommonDatagrid from "./Common";
|
|
|
2
2
|
import {defaultObj,extendObj,defaultStr,isNonNullString,isFunction,isPromise} from "$utils";
|
|
3
3
|
import actions from "$actions";
|
|
4
4
|
import PropTypes from "prop-types";
|
|
5
|
+
import stableHash from "stable-hash";
|
|
5
6
|
|
|
6
7
|
export default class CommonTableDatagrid extends CommonDatagrid{
|
|
7
8
|
constructor(props){
|
|
@@ -13,12 +14,12 @@ export default class CommonTableDatagrid extends CommonDatagrid{
|
|
|
13
14
|
} = props;
|
|
14
15
|
dataSource = CommonDatagrid.getDataSource({...props,dataSource,context:this});
|
|
15
16
|
tableName = defaultStr(tableName,table).toUpperCase();
|
|
17
|
+
this.prepareFetchData();
|
|
16
18
|
if(tableName){
|
|
17
19
|
Object.defineProperties(this,{
|
|
18
20
|
tableName : {value:tableName,override:false,writable:false}
|
|
19
21
|
})
|
|
20
22
|
}
|
|
21
|
-
this.INITIAL_STATE.fetchData = defaultVal(this.props.fetchData);
|
|
22
23
|
let isPv = this.isPivotDatagrid();
|
|
23
24
|
if(isPv){
|
|
24
25
|
isPv = this.props.dbSelector !== false;
|
|
@@ -34,7 +35,9 @@ export default class CommonTableDatagrid extends CommonDatagrid{
|
|
|
34
35
|
}
|
|
35
36
|
this.state.isLoading = true;
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
+
prepareFetchData(fetchData){
|
|
39
|
+
this.INITIAL_STATE.fetchData = defaultVal(fetchData,this.props.fetchData);
|
|
40
|
+
}
|
|
38
41
|
/*** lorsque la données est modifiée */
|
|
39
42
|
onUpsertData =(arg) =>{
|
|
40
43
|
if(!this._isMounted()) return;
|
|
@@ -57,7 +60,9 @@ export default class CommonTableDatagrid extends CommonDatagrid{
|
|
|
57
60
|
this.clearEvents();
|
|
58
61
|
this.setSelectedRows();
|
|
59
62
|
}
|
|
60
|
-
|
|
63
|
+
isTableData(){
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
61
66
|
onChangeDataSources(args){
|
|
62
67
|
let {dataSources,server} = args;
|
|
63
68
|
this.currentDataSources = dataSources;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {isMobileNative} from "$cplatform";
|
|
2
1
|
import {isDesktopMedia} from "$cdimensions";
|
|
3
2
|
|
|
4
3
|
export * from "./DrawerItems/utils";
|
|
@@ -7,7 +6,7 @@ let activeItem = null;
|
|
|
7
6
|
export const getActiveItem = x=> activeItem;
|
|
8
7
|
export {default as session} from "./session";
|
|
9
8
|
|
|
10
|
-
export const DRAWER_WIDTH =
|
|
9
|
+
export const DRAWER_WIDTH = 300;
|
|
11
10
|
|
|
12
11
|
export const MINIMIZED_WIDTH = 85;
|
|
13
12
|
|
|
@@ -35,5 +34,5 @@ export const setActiveItem = (item,toogleActiveItem)=> {
|
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
|
|
38
|
-
export const canBeMinimizedOrPermanent = x=>
|
|
37
|
+
export const canBeMinimizedOrPermanent = x=> isDesktopMedia() ? true : false;
|
|
39
38
|
|
|
@@ -170,7 +170,7 @@ export default class Filter extends AppComponent {
|
|
|
170
170
|
if(!isObjOrArray(value) && (isNullOrEmpty(value,true) || value ==='undefined') ){
|
|
171
171
|
value = undefined;
|
|
172
172
|
}
|
|
173
|
-
let
|
|
173
|
+
let originValue = value;
|
|
174
174
|
const type = defaultStr(this.props.type).toLowerCase().trim();
|
|
175
175
|
value = parseDecimal(value,type);
|
|
176
176
|
if(action =="$today"){
|
|
@@ -215,7 +215,7 @@ export default class Filter extends AppComponent {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
-
this.props.onChange({...this.getStateValues(),value,originValue:
|
|
218
|
+
this.props.onChange({...this.getStateValues(),value,originValue:originValue,originValue,field:this.props.field,action,operator,selector,originAction,context:this});
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
componentDidUpdate (){
|
|
@@ -164,6 +164,10 @@ export const matchPouchDBOperator = (operator,value)=>{
|
|
|
164
164
|
return {operator:"$lt",value}
|
|
165
165
|
case "LTE":
|
|
166
166
|
return {operator:"$lte",value}
|
|
167
|
+
case "IN":
|
|
168
|
+
return {operator:"$in",value}
|
|
169
|
+
case "NOT IN":
|
|
170
|
+
return {operator:"$in",value}
|
|
167
171
|
}
|
|
168
172
|
}
|
|
169
173
|
|
|
@@ -486,6 +490,7 @@ const operatorsMap = {
|
|
|
486
490
|
$gte: '>=',
|
|
487
491
|
$ne: '!=',
|
|
488
492
|
$in: 'IN',
|
|
493
|
+
$nin : 'NOT IN',
|
|
489
494
|
$eq: '=',
|
|
490
495
|
$regex : "LIKE"
|
|
491
496
|
}
|
|
@@ -13,9 +13,9 @@ import {styles as _styles} from "$theme";
|
|
|
13
13
|
import Tooltip from "$ecomponents/Tooltip";
|
|
14
14
|
|
|
15
15
|
const TableLinKComponent = React.forwardRef((props,ref)=>{
|
|
16
|
-
let {disabled,labelProps,server,containerProps,id,columnDef,tableName,data,testID,Component,routeName,routeParams,component,primary,triggerProps,onPress,children, ...rest} = props;
|
|
16
|
+
let {disabled,labelProps,server,containerProps,id,columnDef,tableName,table:customTable,data,testID,Component,routeName,routeParams,component,primary,triggerProps,onPress,children, ...rest} = props;
|
|
17
17
|
testID = defaultStr(testID,"RN_TableDataLinkContainer")
|
|
18
|
-
tableName = defaultStr(tableName).trim();
|
|
18
|
+
tableName = defaultStr(tableName,customTable).trim();
|
|
19
19
|
rest = defaultObj(rest);
|
|
20
20
|
containerProps = defaultObj(containerProps)
|
|
21
21
|
labelProps = defaultObj(labelProps);
|