@fto-consult/expo-ui 2.34.4 → 2.35.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": "2.34.4",
3
+ "version": "2.35.1",
4
4
  "description": "Bibliothèque de composants UI Expo,react-native",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -166,6 +166,9 @@ export default class CommonDatagridComponent extends AppComponent {
166
166
  let {
167
167
  data,
168
168
  selectedRows,
169
+ chartAllowedPerm,
170
+ exportToPDFAllowedPerm,
171
+ exportToExcelAllowedPerm,
169
172
  ...rest
170
173
  } = props;
171
174
  if(this.bindResizeEvents()){
@@ -196,15 +199,27 @@ export default class CommonDatagridComponent extends AppComponent {
196
199
  });
197
200
  const disTypes = {};
198
201
  let hasFoundDisplayTypes = false;
202
+ const perm = isNonNullString(chartAllowedPerm)? Auth.isAllowedFromStr(chartAllowedPerm) : true;
203
+ const ePDFIsAllowed = isNonNullString(exportToPDFAllowedPerm)? Auth.isAllowedFromStr(exportToPDFAllowedPerm) : true;
204
+ const eExcelISAllowed = isNonNullString(exportToExcelAllowedPerm)? Auth.isAllowedFromStr(exportToExcelAllowedPerm) : true;
199
205
  Object.map(this.props.displayTypes,(dType,v)=>{
200
206
  if(isNonNullString(dType)){
201
207
  dType = dType.toLowerCase().trim();
202
208
  if(displayTypes[dType]){
209
+ const dp = displayTypes[dType];
210
+ if(dp.isChart && !perm){
211
+ return;
212
+ }
213
+ hasFoundDisplayTypes = true;
203
214
  disTypes[dType] = Object.clone(displayTypes[dType]);
204
215
  }
205
- hasFoundDisplayTypes = true;
206
216
  }
207
217
  });
218
+ const allowedDisplayTypes = {};
219
+ Object.map(displayTypes,(t,i)=>{
220
+ if(t.isChart && !perm) return;
221
+ allowedDisplayTypes[i] = Object.clone(t);
222
+ })
208
223
  Object.defineProperties(this,{
209
224
  layoutRef : {
210
225
  value : React.createRef(null),
@@ -230,6 +245,9 @@ export default class CommonDatagridComponent extends AppComponent {
230
245
  isLoadingRef : {
231
246
  value : {current:false}
232
247
  },
248
+ isChartAllowed : {value : perm},
249
+ isExcellExportAllowed : {value:eExcelISAllowed},
250
+ isPDFExportAllowed : {value: ePDFIsAllowed},
233
251
  currentFilteringColumns : {value:{}},
234
252
  emptySectionListHeaderValue : {value : uniqid("empty-section-list-header-val").toUpperCase()},
235
253
  getSectionListHeaderProp : {value : typeof this.props.getSectionListHeader =='function'? this.props.getSectionListHeader : undefined},
@@ -242,7 +260,7 @@ export default class CommonDatagridComponent extends AppComponent {
242
260
  ///la liste des fonctions d'aggregations supportées
243
261
  aggregatorFunctions : {value : extendAggreagatorFunctions(this.props.aggregatorFunctions)},
244
262
  ///les types d'affichage
245
- displayTypes : {value : hasFoundDisplayTypes ? disTypes : Object.clone(displayTypes)},
263
+ displayTypes : {value : hasFoundDisplayTypes ? disTypes : allowedDisplayTypes},
246
264
  dateFields : {value : {}},
247
265
  sectionListColumnsSize : {value : {current:0}}, //la taille du nombre d'éléments de section dans les colonnes
248
266
  chartRef : {value : {current:null}},
@@ -372,6 +390,12 @@ export default class CommonDatagridComponent extends AppComponent {
372
390
  }
373
391
  return this.state.sectionListColumns;
374
392
  }
393
+ canExportToPDF(){
394
+ return this.isPDFExportAllowed;
395
+ }
396
+ canExportToExcel (){
397
+ return this.isExcellExportAllowed;
398
+ }
375
399
  bindResizeEvents(){
376
400
  return false;
377
401
  }
@@ -1627,16 +1651,17 @@ export default class CommonDatagridComponent extends AppComponent {
1627
1651
  })
1628
1652
  }
1629
1653
  return <Menu
1630
- title = "Type d'affichage"
1654
+ title = {"Type d'affichage ["+activeType.label+"]"}
1631
1655
  items = {m}
1632
1656
  anchor = {(p)=>{
1633
1657
  return <Pressable {...p} style={[theme.styles.row]}>
1634
1658
  <Icon
1635
1659
  {...p}
1636
1660
  name = {activeType.icon}
1661
+ color = {theme.colors.primaryOnSurface}
1637
1662
  title = {"Les données s'affichent actuellement en {0}. Cliquez pour modifier le type d'affichage".sprintf(activeType.label)}
1638
1663
  />
1639
- {this.isDashboard() && <Label textBold>Type d'affichage</Label>||null}
1664
+ {this.isDashboard() && <Label textBold primaryOnSurface>{activeType.label||"Type d'affichage"}</Label>||null}
1640
1665
  </Pressable>
1641
1666
  }}
1642
1667
  />
@@ -3533,6 +3558,12 @@ CommonDatagridComponent.propTypes = {
3533
3558
  /**** les series à utiliser pour l'affichage des données lorsque les colonnes sont groupées, ie les montant de totalisation sont utilisés */
3534
3559
  sectionListHeadersSeries : PropTypes.arrayOf(PropTypes.string),
3535
3560
  }),
3561
+ /*** la permission autorisée pour l'export en pdf */
3562
+ exportToPDFAllowedPerm : PropTypes.string,
3563
+ /*** la permission autorisée pour l'export en excel*/
3564
+ exportToExcelAllowedPerm : PropTypes.string,
3565
+ /*** la permission que doit avoir l'utilisateur pour pouvoir visualiser les graphes à partir du diagrame */
3566
+ chartAllowedPerm : PropTypes.string,
3536
3567
  displayType : chartDisplayType,
3537
3568
  /*** les types d'afichates supportés par l'application */
3538
3569
  displayTypes : PropTypes.arrayOf(chartDisplayType),
@@ -18,7 +18,7 @@ import fetch from "$capi/fetch";
18
18
  import Auth from "$auth";
19
19
  import Icon from "$ecomponents/Icon";
20
20
 
21
- export default function DatabaseStatisticContainer ({dashboardProps,fetchDataProps,table,fetchCount,index,testID,title,icon,onPress:customOnPress,columns,fetchData,withDashboard,...props}){
21
+ export default function DatabaseStatisticContainer ({dashboardProps,onRefreshAll,fetchDataProps,table,fetchCount,index,testID,title,icon,onPress:customOnPress,columns,fetchData,withDashboard,...props}){
22
22
  dashboardProps = defaultObj(dashboardProps);
23
23
  const [count,setCount] = React.useState(0);
24
24
  const datagridRef = React.useRef(null);
@@ -44,6 +44,11 @@ export default function DatabaseStatisticContainer ({dashboardProps,fetchDataPro
44
44
  }
45
45
  const refreshingRef = React.useRef(null);
46
46
  const isMounted = React.useIsMounted();
47
+ const onRefreshAllItem = typeof onRefreshAll =='function'? {
48
+ text : "Tout actualiser",
49
+ onPress : onRefreshAll,
50
+ icon : "refresh-circle"
51
+ } : {}
47
52
 
48
53
  const [isLoading,setIsLoading] = React.useState(withDashboard?false:true);
49
54
  const refresh = ()=>{
@@ -148,7 +153,7 @@ export default function DatabaseStatisticContainer ({dashboardProps,fetchDataPro
148
153
  </View>
149
154
  <Menu
150
155
  testID={testID+"_Menu"}
151
- items = {context.renderMenu()}
156
+ items = {[...context.renderMenu(),onRefreshAllItem]}
152
157
  anchor = {(p)=><Pressable {...p} style={[theme.styles.pl1]} testID={testID+"_MenuAnchor"}>
153
158
  <Label
154
159
  textCenter
@@ -177,7 +182,8 @@ export default function DatabaseStatisticContainer ({dashboardProps,fetchDataPro
177
182
  icon : "refresh",
178
183
  onPress : refresh,
179
184
  text : "Actualiser"
180
- }
185
+ },
186
+ onRefreshAllItem,
181
187
  ]}
182
188
  anchor = {(p)=><Avatar suffix={index} {...aProps} {...p} icon= {icon} size={40} label={title}/>}
183
189
  />
@@ -5,6 +5,7 @@ import React from "$react";
5
5
  import DatabaseStatistic from "./DatabaseStatistic";
6
6
  import theme from "$theme";
7
7
  import PropTypes from "prop-types";
8
+ import Auth from "$cauth";
8
9
 
9
10
  export const title = 'Statistiques en BD';
10
11
  export default function DatabaseStatisticScreen ({withScreen,fetchDataProps,tableFilter,fetchCount,fetchData,title:customTitle,contentProps,containerProps,tables,Component,...props}){
@@ -12,6 +13,7 @@ export default function DatabaseStatisticScreen ({withScreen,fetchDataProps,tabl
12
13
  containerProps = defaultObj(containerProps);
13
14
  const title = containerProps.title = defaultStr(containerProps.title,DatabaseStatisticScreen.title);
14
15
  contentProps = defaultObj(contentProps);
16
+ const forceRender = React.useForceRender();
15
17
  if(Component == Cell){
16
18
  containerProps.desktopSize = defaultNumber(containerProps.desktopSize,12);
17
19
  containerProps.tabletSize = defaultNumber(containerProps.tabletSize,8);
@@ -28,6 +30,8 @@ export default function DatabaseStatisticScreen ({withScreen,fetchDataProps,tabl
28
30
  table = t;
29
31
  }
30
32
  if(table.databaseStatistic === false || table.databaseStatistics === false) return null;
33
+ const chartAllowedPerm = defaultStr(table.chartAllowedPerm);
34
+ if(chartAllowedPerm && !Auth.isAllowedFromStr(chartAllowedPerm || !Auth.isTableDataAllowed({table:tableName}))) return null;
31
35
  content.push(<Cell elevation = {5} withSurface mobileSize={12} desktopSize={3} tabletSize={4} {...contentProps} key = {index} >
32
36
  <DatabaseStatistic
33
37
  icon = {table.icon}