@fto-consult/expo-ui 5.10.0 → 5.10.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "5.10.0",
3
+ "version": "5.10.1",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -315,8 +315,7 @@ const DatagridFactory = (Factory)=>{
315
315
  isLoading:customIsLoading,
316
316
  cacheHeight,
317
317
  toggleFilters,
318
- dbSelector,
319
- dbSelectorProps,
318
+ dataSourceSelector,
320
319
  progressBarProps,
321
320
  accordion,
322
321
  preloaderProps,
@@ -363,26 +362,6 @@ const DatagridFactory = (Factory)=>{
363
362
  color: titleColor,
364
363
  style : [styles.title,rStyles.lineHeight,titleProps.style]
365
364
  }
366
-
367
- let showDBSelector = false;
368
- if(dbSelector === true){
369
- showDBSelector = true;
370
- }
371
- dbSelectorProps = defaultObj(dbSelectorProps);
372
- let title = this.props.title;
373
- let _dbSelector = undefined;/* showDBSelector ? <div>
374
- <DBSelector
375
- {...dbSelectorProps}
376
- onChange = {this.onChangeDatabases.bind(this)}
377
- />
378
- </div> : null;*/
379
- if(!title){
380
- title = _dbSelector;
381
- _dbSelector = null;
382
- }
383
- exportable = defaultBool(exportable,true);
384
- let exportTableProps = this.getExportableProps();
385
-
386
365
  filter = defaultFunc(filter,x=>true);
387
366
  const showFooters = this.canShowFooters();
388
367
  let restItems = [];
@@ -422,7 +401,7 @@ const DatagridFactory = (Factory)=>{
422
401
  const datagridHeader = <View testID={testID+"_HeaderContainer"} pointerEvents={pointerEvents} style={[styles.datagridHeader]}>
423
402
  <ScrollView testID={testID+"_HeaderScrollView"} horizontal contentContainerStyle={StyleSheet.flatten([styles.contentContainerStyle,styles.minW100])}>
424
403
  <View testID={testID+"_HeaderContentCntainer"} style={[styles.table,styles.pullRight]}>
425
- {dbSelector}
404
+ {/*this.renderDataSourceSelector()*/}
426
405
  <View testID={testID+"_HeaderQueryLimit"} style={[styles.paginationItem]}>
427
406
  {this.renderQueryLimit(this.getStateDataSize().formatNumber())}
428
407
  </View>
@@ -528,7 +507,7 @@ const DatagridFactory = (Factory)=>{
528
507
  {this.props.showActions !== false ? <DatagridActions
529
508
  testID={testID+"_Actions"}
530
509
  pointerEvents = {pointerEvents}
531
- title = {title}
510
+ title = {this.renderDataSourceSelector()}
532
511
  context = {this}
533
512
  selectedRows = {Object.assign({},this.selectedRows)}
534
513
  selectedRowsActions = {this.renderSelectedRowsActions.bind(this)}
@@ -13,7 +13,7 @@ const selectedTitle ='#f50057';
13
13
  export const getSelectedBackgroundColor = x=> theme.isDark()?theme.colors.surface : selectedBackgroundColor;
14
14
 
15
15
  export default function DatagridActionsHeaderComponent({title,selected,testID,children,style,pointerEvents,...props}) {
16
- title = defaultStr(title);
16
+ title = React.isValidElement(title,true)? title : "";
17
17
  const bStyle = selected && theme.isDark()? {
18
18
  borderBottomColor : theme.colors.divider,
19
19
  borderTopColor : theme.colors.divider,
@@ -9,7 +9,6 @@ import theme from "$theme"
9
9
  import Button from "$ecomponents/Button";
10
10
  import { StyleSheet } from "react-native";
11
11
  import Label from "$ecomponents/Label";
12
- import APP from "$capp/instance";
13
12
  import { useWindowDimensions } from "react-native";
14
13
 
15
14
  export default function DatagridActions (_props){
@@ -340,39 +340,8 @@ export default class CommonDatagridComponent extends AppComponent {
340
340
  windowHeight,
341
341
  }
342
342
  this.selectableColumnRef = React.createRef(null);
343
- let isPv = this.isPivotDatagrid();
344
- if(isPv){
345
- isPv = this.props.dataSourceSelector !== false;
346
- } else isPv = this.props.dataSourceSelector === true ? true : false;
347
- if(isPv){
348
- let dataSourceSelectorProps = defaultObj(this.props.dataSourceSelectorProps);
349
- ['table','tableName'].map((tb,idx)=>{
350
- dataSourceSelectorProps[tb] = defaultStr(this.props[tb],dataSourceSelectorProps[tb]);
351
- });
352
- let cDB = []//DBSelector.getDefaultSelected(dataSourceSelectorProps,this.currentDataSources,this.props);
353
- let sDB = this.getSessionData().selectedDataSources;
354
- cDB = Object.toArray(cDB);
355
- if(cDB.length){
356
- this.currentDataSources = cDB
357
- } else {
358
- this.currentDataSources = sDB;
359
- }
360
- this.setSessionData({selectedDataSources:this.currentDataSources});
361
- } else {
362
- this.currentDataSources = Object.toArray(this.currentDataSources);
363
- }
364
- if(isPv){
365
- isPv = this.props.dataSourceSelector !== false;
366
- } else isPv = this.props.dataSourceSelector === true ? true : false;
367
- if(isPv){
368
- let dataSourceSelectorProps = defaultObj(this.props.dataSourceSelectorProps);
369
- ['table','tableName'].map((tb)=>{
370
- dataSourceSelectorProps[tb] = defaultStr(this.props[tb],this[tb],dataSourceSelectorProps[tb]);
371
- });
372
- this.setSessionData({selectedDataSources:this.currentDataSources});
373
- } else {
374
- this.currentDataSources = Object.toArray(this.currentDataSources);
375
- }
343
+ this.currentDataSources = Object.toArray(this.getSessionData().selectedDataSources);
344
+ this.setSessionData({selectedDataSources:this.currentDataSources});
376
345
  this.persistDisplayType(this.state.displayType);
377
346
  }
378
347
  /*** si l'on peut récuperer à distance, les colonnes seulement visibles */
@@ -622,13 +591,13 @@ export default class CommonDatagridComponent extends AppComponent {
622
591
  return this.selectedRowsCount <= 1 ? true : false;
623
592
  }
624
593
  /**** fonction appelée lorsque l'on clique sur la checkbox permettant de sélectionner la ligne */
625
- handleRowToggle ({row,rowIndex,rowData,rowKey,index, selected,cb,callback},cb2){
626
- if(!this.canSelectRow(row)) return false;
627
- if(typeof rowKey !=='string' && typeof rowKey !=='number') return false;
594
+ handleRowToggle ({rowIndex,rowKey,index, selected,cb,callback},cb2){
595
+ if((typeof rowKey !=='string' && typeof rowKey !=='number')) return false;
596
+ const row = this.getRowByKey(rowKey);
597
+ if(!isObj(row) || !this.canSelectRow(row)) return false;
628
598
  let selectableMultiple = this.isSelectableMultiple();
629
599
  rowIndex = defaultNumber(rowIndex,index);
630
600
  cb = defaultFunc(cb,callback,cb2)
631
- row = rowData = defaultObj(row,rowData);
632
601
  const size = this.selectedRowsCount;
633
602
  if(selected && !this.canSelectCheckedRow()){
634
603
  notify.warning("Vous ne pouvez sélectionner plus d'un élément");
@@ -656,14 +625,13 @@ export default class CommonDatagridComponent extends AppComponent {
656
625
  this.selectedRowsCount = Math.max(this.selectedRowsCount-1,0);
657
626
  delete selectedRows[rowKey];
658
627
  }
659
-
660
628
  this.toggleSelectableColumnCheckbox();
661
629
  if(isObj(this.datagridActionsContext) && isFunction(this.datagridActionsContext.setSelectedRows)){
662
630
  this.datagridActionsContext.setSelectedRows(selectedRows,x =>{
663
631
  this.callSRowCallback({selected,row,rowIndex,rowKey,cb})
664
632
  });
665
633
  } else {
666
- this.callSRowCallback({selected,rowData,row,rowIndex,rowKey,cb});
634
+ this.callSRowCallback({selected,rowData:row,row,rowIndex,rowKey,cb});
667
635
  }
668
636
  return true;
669
637
  }
@@ -1055,6 +1023,25 @@ export default class CommonDatagridComponent extends AppComponent {
1055
1023
  }
1056
1024
  return null;
1057
1025
  }
1026
+ renderDataSourceSelector(){
1027
+ const t = isNonNullString(this.props.title)? <Label testID={"RN_DatagridTitleProp"}>{this.props.title}</Label> : React.isValidElement(this.props.title)? this.props.title : null;
1028
+ const table = defaultStr(this.props.table,this.props.tableName);
1029
+ const dS = dS === false ? null : typeof this.props.dataSourceSelector ==='function'? this.props.dataSourceSelector({
1030
+ defaultValue : this.currentDataSources,
1031
+ onChange : this.onChangeDataSources.bind(this),
1032
+ tableName:table,
1033
+ table,
1034
+ isAccordion : this.isAccordion,
1035
+ context : this,
1036
+ }) : null;
1037
+ if(React.isValidElement(dS)){
1038
+ return <View testID={'RN_Datagrid_DataSourceSelectorContainer'} style={[theme.styles.flex,theme.styles.flexRow,theme.styles.justifyContentFlexStart,theme.styles.alignItemsCenter]}>
1039
+ {dS}
1040
+ {t}
1041
+ </View>
1042
+ }
1043
+ return t;
1044
+ }
1058
1045
  /*** permet de faire le rendu de certaines entête personalisés
1059
1046
  * utile lorsque l'on veut par exemple afficher d'autres information au niveau de l'entête du tableau
1060
1047
  */
@@ -2717,7 +2704,9 @@ export default class CommonDatagridComponent extends AppComponent {
2717
2704
  const canUpdateFooters = !!(updateFooters !== false && hasFootersFields);
2718
2705
  this.hasFoundSectionData.current = false;
2719
2706
  this.sectionListDataSize.current = 0;
2707
+ this.rowsByKeys = {};
2720
2708
  const isSList = this.isSectionList(sectionListColumns);
2709
+ this.rowsByKeys = {};
2721
2710
  const sortingField = isNonNullString(this.sortRef.current.column) && isObj(this.state.columns) && this.state.columns[this.sortRef.current.column] || {};
2722
2711
  const hasSortField = Object.size(sortingField,true);
2723
2712
  if(this.canAutoSort() && isNonNullString(this.sortRef.current.column) && hasSortField){
@@ -2941,7 +2930,7 @@ export default class CommonDatagridComponent extends AppComponent {
2941
2930
  }
2942
2931
  const isCollapsed = this.isSectionListCollapsed(key);
2943
2932
  return <View testID={testID+"_ContentContainer"} style={[theme.styles.w100,isA && this.state.displayOnlySectionListHeaders && {borderTopColor:theme.colors.divider,borderTopWidth:1},isA ? [theme.styles.ph2,theme.styles.pt1] : [theme.styles.pt1,theme.styles.noPadding,theme.styles.noMargin],theme.styles.justifyContentCenter,theme.styles.alignItemsCenter,theme.styles.pb1,!cells && theme.styles.ml1,theme.styles.mr1,cStyle]}>
2944
- {false && <View testID={testID+"_LabelAndCollapsedContainer"} style={[theme.styles.w100,theme.styles.row,theme.styles.alignItemsCenter,theme.styles.justifyContentStart]}>
2933
+ {false && <View testID={testID+"_LabelAndCollapsedContainer"} style={[theme.styles.w100,theme.styles.row,theme.styles.alignItemsCenter,theme.styles.justifyContentFlexStart]}>
2945
2934
  <Icon
2946
2935
  name = {isCollapsed?"chevron-up":"chevron-right"}
2947
2936
  color = {theme.colors.primaryOnSurface}
@@ -2961,9 +2950,9 @@ export default class CommonDatagridComponent extends AppComponent {
2961
2950
  if(isObj(rowKey)){
2962
2951
  rowKey = this.getRowKey(rowKey,rowIndex);
2963
2952
  }
2964
- if(isObj(this.selectedRows[rowKey])) return true;
2965
- if(typeof rowKey !=='string' && typeof rowKey !=='number' || !isObj(this.selectedRowsRefs[rowKey])) return false;
2966
- return !!this.selectedRowsRefs[rowKey].checked;
2953
+ if(typeof rowKey !=='string' && typeof rowKey !=='number') return false;
2954
+ if(!isObj(this.selectedRowsRefs[rowKey])) return false;
2955
+ return !!(isObj(this.selectedRows[rowKey]) && this.selectedRowsRefs[rowKey].checked);
2967
2956
  }
2968
2957
  /*** permet de définir les lignes sélectionnées du datagrid */
2969
2958
  setSelectedRows (rows){
@@ -3153,20 +3142,18 @@ export default class CommonDatagridComponent extends AppComponent {
3153
3142
  }
3154
3143
  return anchor(toggleItem)
3155
3144
  }
3145
+ /**** cette fonction est appeléee lorsque la source de données change
3146
+ le composant dataSourceSelector doit retourner un table dataSelector, qui prendra en paramètre l'objet onChange, qui systématiquement doit être appelé lorsque la source de données change
3147
+ */
3156
3148
  onChangeDataSources(args){
3157
- let {dataSources,server} = args;
3149
+ let {dataSources} = defaultObj(args);
3150
+ if(!Array.isArray(dataSources)) return;//la fonction onChangeDataSource doit retourner un dataSource de type array
3158
3151
  if(this.props.onChangeDataSources =='function' && this.props.onChangeDataSources({dataSources,prev:this.currentDataSources}) === false) return;
3152
+ if(React.isEquals(this.previousDataSources,dataSources)) return;
3159
3153
  this.currentDataSources = dataSources;
3160
3154
  this.setSessionData({selectedDatabases:dataSources})
3161
- if(JSON.stringify({dataSources:this.previousDataSources}) != JSON.stringify({dataSources})){
3162
- if(isObj(this.props.dataSourceSelectorProps) && isFunction(this.props.dataSourceSelectorProps.onChange)){
3163
- args.datagridContext = this;
3164
- this.props.dataSourceSelectorProps.onChange(args);
3165
- }
3166
- this.refresh(true);
3167
- }
3155
+ this.refresh(true);
3168
3156
  this.previousDataSources = dataSources;
3169
- this.previousServer = server;
3170
3157
  }
3171
3158
  prepareFetchData(fetchData){
3172
3159
  this.INITIAL_STATE.fetchData = defaultVal(fetchData,this.props.fetchData);
@@ -3746,6 +3733,9 @@ export default class CommonDatagridComponent extends AppComponent {
3746
3733
  renderSelectFieldCell(args){
3747
3734
  return this.renderSelectFieldCell(args);
3748
3735
  }
3736
+ getRowByKey(rowKey){
3737
+ return this.rowsByKeys[rowKey] || null;
3738
+ }
3749
3739
  /*** retourne le rendu d'une cellule de la ligne du tableau
3750
3740
  @parm, rowData, object, la ligne à afficher le rendu du contenu
3751
3741
  @param , rowInidex, l'indice de la ligne dont on affiche le rendu en cours
@@ -3763,10 +3753,11 @@ export default class CommonDatagridComponent extends AppComponent {
3763
3753
  const renderText = isSectionListHeader === true || customRenderRowCell === false ? true : false;
3764
3754
  if(!isObj(rowData)) return renderText ? null : {render:null,extra:{}};
3765
3755
  rowIndex = isDecimal(rowIndex)? rowIndex : isDecimal(index)? index : undefined;
3756
+ rowKey = rowKey || typeof rowKey =='number' ? rowKey : this.getRowKey(rowData,rowIndex);
3757
+ this.rowsByKeys[rowKey] = rowData;
3766
3758
  rowCounterIndex = isDecimal(rowCounterIndex) ? rowCounterIndex : isDecimal(rowIndex)? rowIndex+1 : defaultDecimal(rowCounterIndex);
3767
3759
  if(this.isSelectableColumn(columnDef,columnField)){
3768
3760
  if(renderText) return null;
3769
- rowKey = rowKey ? rowKey : this.getRowKey(rowData,rowIndex);
3770
3761
  return {render :handleSelectableColumn === false ? null : this.renderSelectableCheckboxCell({
3771
3762
  ...arg,
3772
3763
  rowKey,
@@ -3774,7 +3765,7 @@ export default class CommonDatagridComponent extends AppComponent {
3774
3765
  checked : this.isRowSelected(rowKey,rowIndex),
3775
3766
  rowsRefs : this.selectedRowsRefs,
3776
3767
  onPress : ({checked})=>{
3777
- return this.handleRowToggle({row:rowData,rowData,rowIndex,rowKey,selected:!checked})
3768
+ return this.handleRowToggle({rowIndex,rowKey,selected:!checked});
3778
3769
  }
3779
3770
  }),style:{},extra:{style:{}}};
3780
3771
  } else if((columnField == this.getIndexColumnName())){
@@ -80,7 +80,8 @@ export default class DatagridDashboard extends TableData {
80
80
  autoSort,
81
81
  exportable,
82
82
  selectable,pagin,showPagination,
83
- sessionName,onMount,onUnmount,onFetchData,dataSourceSelector,dataSourceSelectorProps,queryLimit,
83
+ sessionName,onMount,onUnmount,onFetchData,dataSourceSelector,
84
+ queryLimit,
84
85
  filters,
85
86
  filterOrOperator,
86
87
  filterAndOperator,
@@ -115,7 +115,8 @@ const DatagridFactory = (Factory)=>{
115
115
  autoSort,
116
116
  exportable,
117
117
  selectable,pagin,showPagination,
118
- sessionName,onMount,onUnmount,onFetchData,dataSourceSelector,dataSourceSelectorProps,queryLimit,
118
+ sessionName,onMount,onUnmount,onFetchData,dataSourceSelector,
119
+ queryLimit,
119
120
  filters,
120
121
  chartContainerProps,
121
122
  accordion, //pour le rendu du header en accordion
@@ -125,22 +126,6 @@ const DatagridFactory = (Factory)=>{
125
126
  chartContainerProps = defaultObj(chartContainerProps);
126
127
  testID = this.getTestID();
127
128
  rest = defaultObj(rest);
128
- if(dataSourceSelector === true){
129
- showDataSourceSelector = true;
130
- } else if(dataSourceSelector ===false){
131
- showDataSourceSelector = false;
132
- }
133
- dataSourceSelectorProps = defaultObj(dataSourceSelectorProps);
134
- let _dataSourceSelector = undefined;/* showDataSourceSelector ? <div>
135
- <DBSelector
136
- {...dataSourceSelectorProps}
137
- onChange = {this.onChangeDatabases.bind(this)}
138
- />
139
- </div> : null;*/
140
- if(!title){
141
- title = _dataSourceSelector;
142
- _dataSourceSelector = null;
143
- }
144
129
  exportable = defaultBool(exportable,true);
145
130
  let isMobile = isMobileOrTabletMedia();
146
131
  selectable = defaultVal(selectable,true);
@@ -295,7 +280,7 @@ const DatagridFactory = (Factory)=>{
295
280
  <View ref={this.layoutRef} testID={testID+"_LayoutContainer"}>
296
281
  {this.props.showActions !== false ? <DatagridActions
297
282
  pointerEvents = {pointerEvents}
298
- title = {title}
283
+ title = {this.renderDataSourceSelector()}
299
284
  context = {this}
300
285
  selectedRows = {Object.assign({},this.selectedRows)}
301
286
  selectedRowsActions = {this.renderSelectedRowsActions.bind(this)}