@fto-consult/expo-ui 2.16.11 → 2.18.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.
@@ -3,9 +3,9 @@ import View from "$ecomponents/View";
3
3
  import React from "$react";
4
4
  import memoize from "$react/memoize";
5
5
  export {default as FooterItem} from "./Footer";
6
+ import {parseDecimal} from "$utils";
6
7
 
7
8
  export const evalSingleValue = ({data,columnDef,field,result,displayLabel,onlyVisible})=>{
8
- result = defaultObj(result)
9
9
  data = data || {}
10
10
  if(!isNonNullString(field) || !isObj(columnDef)) return result;
11
11
  onlyVisible = defaultBool(onlyVisible,true);
@@ -17,22 +17,26 @@ export const evalSingleValue = ({data,columnDef,field,result,displayLabel,onlyVi
17
17
  if(!isDecimal(val)){
18
18
  return result;
19
19
  }
20
- if(!isObj(result[field])){
21
- let label = defaultStr(columnDef.label,columnDef.text);
22
- if(!label && displayLabel !== false) return result;
23
- result[field] = {
24
- label,
25
- visible : columnDef.visible,
26
- format : defaultStr(columnDef.format).toLowerCase()
20
+ val = parseDecimal(val.toFixed(10));
21
+ (Array.isArray(result) ? result : [result]).map((currentResult)=>{
22
+ currentResult = defaultObj(currentResult);
23
+ if(!isObj(currentResult[field])){
24
+ let label = defaultStr(columnDef.label,columnDef.text);
25
+ if(!label && displayLabel !== false) return currentResult;
26
+ currentResult[field] = {
27
+ label,
28
+ visible : columnDef.visible,
29
+ format : defaultStr(columnDef.format).toLowerCase()
30
+ }
27
31
  }
28
- }
29
- let obj = result[field];
30
- val = parseFloat(val.toFixed(10));
31
- obj.max = isDecimal(obj.max) ? Math.max(obj.max,val) : val;
32
- obj.min = isDecimal(obj.min) ? Math.min(obj.min,val) : val;
33
- obj.count = isDecimal(obj.count) ? (obj.count = obj.count +1) : 1;
34
- obj.sum = isDecimal(obj.sum) ? (parseFloat((obj.sum+val).toFixed(10))) : val;
35
- obj.average = obj.sum / obj.count;
32
+ const obj = currentResult[field];
33
+ obj.max = isDecimal(obj.max) ? Math.max(obj.max,val) : val;
34
+ obj.min = isDecimal(obj.min) ? Math.min(obj.min,val) : val;
35
+ obj.count = isDecimal(obj.count) ? (obj.count = obj.count +1) : 1;
36
+ obj.sum = isDecimal(obj.sum) ? (parseDecimal((obj.sum+val).toFixed(10))) : val;
37
+ obj.average = obj.sum / obj.count;
38
+ return currentResult;
39
+ })
36
40
  return result;
37
41
  }
38
42
  export const evalValues = memoize(({data,columns,onlyVisible,displayLabel})=>{
@@ -4,10 +4,10 @@ export default {
4
4
  code:'fixed',icon:fixedIcon,
5
5
  label:'Tableau virtuel optimisé',
6
6
  desktop:true,
7
- title : "Les éléments de liste s'affichent dans un tableau virtuel optimisé",
7
+ tooltip : "Les éléments de liste s'affichent dans un tableau virtuel optimisé",
8
8
  },
9
9
  virtual : {code:'virtual',icon:virtualIcon,
10
10
  label:'Tableau virtuel',
11
- title : "Les éléments de liste s'affichent dans un tableau virtuel", desktop:true
11
+ tooltip : "Les éléments de liste s'affichent dans un tableau virtuel", desktop:true
12
12
  }
13
13
  }
@@ -28,6 +28,7 @@ const DatagridFactory = (Factory)=>{
28
28
  return true;
29
29
  }
30
30
  renderRowCell(args){
31
+ if(args.renderRowCell === false || args.isSectionListHeader === true) return super.renderRowCell(args);
31
32
  const {render} = super.renderRowCell(args);
32
33
  return render;
33
34
  }
@@ -174,14 +175,14 @@ const DatagridFactory = (Factory)=>{
174
175
  restItems = [
175
176
  ...this.renderCustomMenu(),
176
177
  ...(selectableMultiple ? [{
177
- label : "Sélect "+max,
178
+ label : "Sélectionner "+max.formatNumber(),
178
179
  icon : "select-all",
179
180
  onPress : (x,event)=>{
180
181
  this.handleAllRowsToggle(true);
181
182
  }
182
183
  },
183
184
  {
184
- label : "Tout désélec",
185
+ label : "Tout désélectionner",
185
186
  onPress : (x,event)=>{
186
187
  this.handleAllRowsToggle(false);
187
188
  },
@@ -277,6 +278,7 @@ const DatagridFactory = (Factory)=>{
277
278
  ] : visibleColumns}
278
279
 
279
280
  />
281
+ {this.renderSectionListMenu()}
280
282
  <View testID={testID+"_HeaderPagination"} style = {styles.paginationItem}>
281
283
  <BottomSheetMenu
282
284
  testID={testID+"_HeaderMenus"}
@@ -321,6 +323,8 @@ const DatagridFactory = (Factory)=>{
321
323
  <Table
322
324
  ref = {this.listRef}
323
325
  {...rest}
326
+ getItemType = {this.getFlashListItemType.bind(this)}
327
+ renderItem = {this.renderFlashListItem.bind(this)}
324
328
  hasFooters = {hasFooterFields}
325
329
  showFilters = {showFilters}
326
330
  showFooters = {showFooters}
@@ -104,7 +104,7 @@ LabelComponentExported.propTypes = {
104
104
  primary : PropTypes.bool,
105
105
  error : PropTypes.bool,///si le label est liée à une text field sur laquelle il y a erreur
106
106
  secondary : PropTypes.bool,
107
- color : PropTypes.bool,
107
+ color : PropTypes.string,
108
108
  selectable : PropTypes.bool, //si le texte est sélectionnable
109
109
  underlined : PropTypes.bool,//si le style underlined sera appliqué au label
110
110
  splitText : PropTypes.bool,///si le texte lorsqu'il est long sera splité
@@ -12,6 +12,8 @@ const FlashListComponent = React.forwardRef((props,ref)=>{
12
12
  ListHeaderComponent={() => (
13
13
  <View testID={(testID||'RN_FlashListComponent')+"_Header"}>{props.children}</View>
14
14
  )}
15
+ disableAutoLayout
16
+ disableHorizontalListHeightMeasurement = {props.horizontal?undefined : true}
15
17
  {...props}
16
18
  contentContainerStyle = {undefined}
17
19
  style = {undefined}
@@ -43,7 +43,7 @@ const getOnScrollCb = (refs,pos,cb2)=>{
43
43
  return isMobileNative()? cb : debounce(cb,200);
44
44
  }
45
45
 
46
- const TableComponent = React.forwardRef(({containerProps,renderEmpty,isRowSelected,headerScrollViewProps,footerScrollViewProps,scrollViewProps,showFooters,renderFooterCell,footerCellContainerProps,filterCellContainerProps,headerContainerProps,headerCellContainerProps,headerProps,rowProps:customRowProps,renderCell,cellContainerProps,hasFooters,renderHeaderCell,renderFilterCell,columnProps,getRowKey,columnsWidths,colsWidths,footerContainerProps,showFilters,columns,data,testID,...props},tableRef)=>{
46
+ const TableComponent = React.forwardRef(({containerProps,renderEmpty,renderItem,isRowSelected,headerScrollViewProps,footerScrollViewProps,scrollViewProps,showFooters,renderFooterCell,footerCellContainerProps,filterCellContainerProps,headerContainerProps,headerCellContainerProps,headerProps,rowProps:customRowProps,renderCell,cellContainerProps,hasFooters,renderHeaderCell,renderFilterCell,columnProps,getRowKey,columnsWidths,colsWidths,footerContainerProps,showFilters,columns,data,testID,...props},tableRef)=>{
47
47
  containerProps = defaultObj(containerProps);
48
48
  testID = defaultStr(testID,"RN_TableComponent");
49
49
  cellContainerProps = defaultObj(cellContainerProps);
@@ -263,7 +263,6 @@ const TableComponent = React.forwardRef(({containerProps,renderEmpty,isRowSelect
263
263
  >
264
264
  <FlashList
265
265
  containerProps = {{style:[cStyle]}}
266
- //prepareItems = {Array.isArray(items)? false : undefined}
267
266
  estimatedItemSize = {200}
268
267
  {...props}
269
268
  onContentSizeChange = {(width,height)=>{
@@ -311,7 +310,14 @@ const TableComponent = React.forwardRef(({containerProps,renderEmpty,isRowSelect
311
310
  })}
312
311
  renderItem = {(arg)=>{
313
312
  const item = arg.item, data = arg.item,allData=Array.isArray(item.items)? item.items : data;
314
- const cells = visibleColumns.map((i,index)=>{
313
+ arg.allData = arg.allData;arg.isTable = true; arg.isAccordion = false;
314
+ arg.columns = visibleColumns;
315
+ const selected = typeof isRowSelected=='function'? isRowSelected(item,arg.index):undefined;
316
+ const rowArgs = {...arg,selected,isTable:true,allData,row:data,rowData:data,rowIndex:arg.index};
317
+ const rProps = getRowProps ? getRowProps(rowArgs) : {};
318
+ const rowStyle = getRowStyle(rowArgs);
319
+ const sItem = typeof renderItem == 'function'? renderItem({...arg,rowProps:rProps,rowStyle}) : undefined;
320
+ const cells = sItem && React.isValidElement(sItem) ? sItem : !isObj(item) ? null : visibleColumns.map((i,index)=>{
315
321
  const cellValue = data[i];
316
322
  const col = defaultObj(cols[i]);
317
323
  const cellArgs = {...col,...arg,containerProps:{},columnIndex:col.index,style:{width:col.width},cellValue,data,rowData:data,row:data,rowIndex:arg.index};
@@ -328,13 +334,9 @@ const TableComponent = React.forwardRef(({containerProps,renderEmpty,isRowSelect
328
334
  {content}
329
335
  </View>);
330
336
  });
331
- const selected = typeof isRowSelected=='function'? isRowSelected(item,arg.index):undefined;
332
- const rowArgs = {...arg,selected,isTable:true,allData,row:data,cells,rowData:data,rowIndex:arg.index};
333
- const rProps = getRowProps ? getRowProps(rowArgs) : {};
334
- const rowStyle = getRowStyle(rowArgs);
335
- return <View testID={testID+"_Row_"+arg.index} {...rowProps} {...rProps} style={[styles.row,rowProps.style,rowStyle,styles.rowNoPadding,rProps.style]}>
337
+ return cells ? <View testID={testID+"_Row_"+arg.index} {...rowProps} {...rProps} style={[styles.row,rowProps.style,rowStyle,styles.rowNoPadding,rProps.style]}>
336
338
  {cells}
337
- </View>;
339
+ </View> : null
338
340
  }}
339
341
  />
340
342
  <AbsoluteScrollView
@@ -490,6 +492,7 @@ TableComponent.popTypes = {
490
492
  PropTypes.func,
491
493
  PropTypes.object
492
494
  ]),
495
+ renderItem : PropTypes.func,//la fonction permettant de gérer le rendu des item
493
496
  headerScrollViewProps : PropTypes.object,
494
497
  footerScrollViewProps : PropTypes.object,
495
498
  }