@fto-consult/expo-ui 2.36.4 → 2.36.5
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/Common/Common.js +28 -196
- package/src/components/Datagrid/Common/index.js +2 -1
- package/src/components/Datagrid/Common/utils.js +188 -0
- package/src/components/Dropdown/index.js +1 -1
- package/src/components/Filter/index.js +4 -0
- package/src/components/Form/Fields/SelectField.js +0 -6
- package/src/components/Form/Fields/SelectTableData/Component.js +7 -1
- package/src/components/Form/FormData/componentsTypes.js +7 -5
package/package.json
CHANGED
|
@@ -9,10 +9,8 @@ import Tooltip from "$ecomponents/Tooltip";
|
|
|
9
9
|
import setQueryLimit from "./setQueryLimit";
|
|
10
10
|
import {showConfirm} from "$ecomponents/Dialog";
|
|
11
11
|
import Label from "$ecomponents/Label";
|
|
12
|
-
import Image from "$ecomponents/Image";
|
|
13
12
|
import Icon,{COPY_ICON} from "$ecomponents/Icon";
|
|
14
13
|
import filterUtils from "$cfilters";
|
|
15
|
-
import Hashtag from "$ecomponents/Hashtag";
|
|
16
14
|
import {sortBy,isDecimal,defaultVal,extendObj,isObjOrArray,isObj,defaultNumber,defaultStr,isFunction,defaultBool,defaultArray,defaultObj,isNonNullString,defaultDecimal} from "$utils";
|
|
17
15
|
import {Datagrid as DatagridContentLoader} from "$ecomponents/ContentLoader";
|
|
18
16
|
import React from "$react";
|
|
@@ -25,15 +23,11 @@ import Preloader from "$ecomponents/Preloader";
|
|
|
25
23
|
import Checkbox from "../Checkbox";
|
|
26
24
|
import { TouchableRipple } from "react-native-paper";
|
|
27
25
|
import { evalSingleValue,Footer,getFooterColumnValue,isValidAggregator,extendAggreagatorFunctions} from "../Footer";
|
|
28
|
-
import i18n from "$i18n";
|
|
29
26
|
import { makePhoneCall,canMakePhoneCall as canMakeCall} from "$makePhoneCall";
|
|
30
27
|
import copyToClipboard from "$capp/clipboard";
|
|
31
28
|
import { Pressable } from "react-native";
|
|
32
|
-
import TableLink from "$TableLink";
|
|
33
|
-
import appConfig from "$capp/config";
|
|
34
29
|
import stableHash from "stable-hash";
|
|
35
30
|
import DatagridProgressBar from "./ProgressBar";
|
|
36
|
-
import {Flag} from "$ecomponents/Countries"
|
|
37
31
|
import View from "$ecomponents/View";
|
|
38
32
|
import {Menu} from "$ecomponents/BottomSheet";
|
|
39
33
|
import {styles as tableStyles} from "$ecomponents/Table";
|
|
@@ -42,6 +36,7 @@ import Chart,{getMaxSupportedSeriesSize} from "$ecomponents/Chart";
|
|
|
42
36
|
import notify from "$cnotify";
|
|
43
37
|
import FileSystem from "$file-system";
|
|
44
38
|
import sprintf from "$cutils/sprintf";
|
|
39
|
+
import { renderRowCell,formatValue } from "./utils";
|
|
45
40
|
|
|
46
41
|
export const TIMEOUT = 100;
|
|
47
42
|
|
|
@@ -1417,11 +1412,7 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
1417
1412
|
},TIMEOUT);
|
|
1418
1413
|
}
|
|
1419
1414
|
formatValue(value,format){
|
|
1420
|
-
|
|
1421
|
-
if(format && typeof format =='string' && format.toLowerCase() =='money'){
|
|
1422
|
-
return this.state.abreviateValues? value.abreviate2FormatMoney() : value.formatMoney();
|
|
1423
|
-
}
|
|
1424
|
-
return this.state.abreviateValues ? value.abreviate() : value.formatNumber();
|
|
1415
|
+
return formatValue(value,format,this.state.abreviateValues);
|
|
1425
1416
|
}
|
|
1426
1417
|
renderAggregatorFunctionsMenu(){
|
|
1427
1418
|
const m = this.getAggregatorFunctionsMenuItems(false,false);
|
|
@@ -3165,44 +3156,8 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
3165
3156
|
key = {props.rowKey}
|
|
3166
3157
|
/>
|
|
3167
3158
|
}
|
|
3168
|
-
renderSelectFieldCell(
|
|
3169
|
-
|
|
3170
|
-
if(isObjOrArray(columnDef.items)){
|
|
3171
|
-
if(columnDef.multiple){
|
|
3172
|
-
v1 = Object.toArray(v1);
|
|
3173
|
-
_render = "";
|
|
3174
|
-
v1.map((v)=>{
|
|
3175
|
-
for(let i in columnDef.items){
|
|
3176
|
-
let it = columnDef.items[i];
|
|
3177
|
-
if(isObj(it) && defaultVal(it.code,i) == v){
|
|
3178
|
-
_render+=(_render?arrayValueSeparator:"")+defaultStr(it.label,it.text,v);
|
|
3179
|
-
} else if(isNonNullString(it) && i == v){
|
|
3180
|
-
_render+=(_render?arrayValueSeparator:"")+it;
|
|
3181
|
-
}
|
|
3182
|
-
}
|
|
3183
|
-
})
|
|
3184
|
-
if(!_render){
|
|
3185
|
-
return v1.join(arrayValueSeparator);
|
|
3186
|
-
}
|
|
3187
|
-
return _render;
|
|
3188
|
-
} else {
|
|
3189
|
-
for(let i in columnDef.items){
|
|
3190
|
-
let it = columnDef.items[i];
|
|
3191
|
-
if(isObj(it) && defaultVal(it.code,i) == v1){
|
|
3192
|
-
return defaultStr(it.label,it.text,v1);
|
|
3193
|
-
} else if(isNonNullString(it) && i == v1){
|
|
3194
|
-
return it;
|
|
3195
|
-
}
|
|
3196
|
-
}
|
|
3197
|
-
if(_render === undefined || _render === null) return v1;
|
|
3198
|
-
if(isArray(_render)){
|
|
3199
|
-
return _render.join(arrayValueSeparator)
|
|
3200
|
-
} else if(isObj(_render)){
|
|
3201
|
-
return "";
|
|
3202
|
-
}
|
|
3203
|
-
}
|
|
3204
|
-
}
|
|
3205
|
-
return _render
|
|
3159
|
+
renderSelectFieldCell(args){
|
|
3160
|
+
return this.renderSelectFieldCell(args);
|
|
3206
3161
|
}
|
|
3207
3162
|
/*** retourne le rendu d'une cellule de la ligne du tableau
|
|
3208
3163
|
@parm, rowData, object, la ligne à afficher le rendu du contenu
|
|
@@ -3217,157 +3172,34 @@ export default class CommonDatagridComponent extends AppComponent {
|
|
|
3217
3172
|
différent du td d'un table et ne doit pas être un TableColumn de md
|
|
3218
3173
|
*/
|
|
3219
3174
|
renderRowCell (arg){
|
|
3220
|
-
let {rowData,
|
|
3175
|
+
let {rowData,rowKey,rowIndex,handleSelectableColumn,rowCounterIndex,renderRowCell:customRenderRowCell,isSectionListHeader,columnDef,columnField} = arg;
|
|
3221
3176
|
const renderText = isSectionListHeader === true || customRenderRowCell === false ? true : false;
|
|
3222
|
-
rowIndex = isDecimal(rowIndex)? rowIndex : isDecimal(index)? index : undefined;
|
|
3223
|
-
rowCounterIndex = isDecimal(rowCounterIndex) ? rowCounterIndex : isDecimal(rowIndex)? rowIndex+1 : defaultDecimal(rowCounterIndex);
|
|
3224
|
-
const abreviate = this.state.abreviateValues;
|
|
3225
3177
|
if(!isObj(rowData)) return renderText ? null : {render:null,extra:{}};
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
3229
|
-
if(this.isSelectableColumn(columnDef,columnField)){
|
|
3230
|
-
if(renderText) return null;
|
|
3231
|
-
rowKey = rowKey ? rowKey : this.getRowKey(rowData,rowIndex);
|
|
3232
|
-
return {render :handleSelectableColumn === false ? null : this.renderSelectableCheckboxCell({
|
|
3233
|
-
...arg,
|
|
3234
|
-
rowKey,
|
|
3235
|
-
rowData,
|
|
3236
|
-
checked : this.isRowSelected(rowKey,rowIndex),
|
|
3237
|
-
rowsRefs : this.selectedRowsRefs,
|
|
3238
|
-
onChange : ({checked})=>{
|
|
3239
|
-
this.handleRowToggle({row:rowData,rowData,rowIndex,rowKey,selected:checked})
|
|
3240
|
-
}
|
|
3241
|
-
}),style:{},extra:{style:{}}};
|
|
3242
|
-
} else if((columnField == this.getIndexColumnName())){
|
|
3178
|
+
rowIndex = isDecimal(rowIndex)? rowIndex : isDecimal(index)? index : undefined;
|
|
3179
|
+
rowCounterIndex = isDecimal(rowCounterIndex) ? rowCounterIndex : isDecimal(rowIndex)? rowIndex+1 : defaultDecimal(rowCounterIndex);
|
|
3180
|
+
if(this.isSelectableColumn(columnDef,columnField)){
|
|
3243
3181
|
if(renderText) return null;
|
|
3182
|
+
rowKey = rowKey ? rowKey : this.getRowKey(rowData,rowIndex);
|
|
3183
|
+
return {render :handleSelectableColumn === false ? null : this.renderSelectableCheckboxCell({
|
|
3184
|
+
...arg,
|
|
3185
|
+
rowKey,
|
|
3186
|
+
rowData,
|
|
3187
|
+
checked : this.isRowSelected(rowKey,rowIndex),
|
|
3188
|
+
rowsRefs : this.selectedRowsRefs,
|
|
3189
|
+
onChange : ({checked})=>{
|
|
3190
|
+
this.handleRowToggle({row:rowData,rowData,rowIndex,rowKey,selected:checked})
|
|
3191
|
+
}
|
|
3192
|
+
}),style:{},extra:{style:{}}};
|
|
3193
|
+
} else if((columnField == this.getIndexColumnName())){
|
|
3194
|
+
if(renderText) return null;
|
|
3244
3195
|
return {render : rowCounterIndex.formatNumber(),style:{},extra:{}};
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
style.display = "none";
|
|
3253
|
-
}
|
|
3254
|
-
let extra = {style},renderArgs = arg;
|
|
3255
|
-
|
|
3256
|
-
renderArgs.extra = extra;
|
|
3257
|
-
renderArgs.item = rowData;
|
|
3258
|
-
const defaultValue = renderArgs.defaultValue = renderArgs.value = rowData[columnField];
|
|
3259
|
-
let key = this.getRowKey(rowData,rowIndex)+"-"+columnField,isTagRender = defaultStr(columnDef.table).toLowerCase().contains("tags");
|
|
3260
|
-
if(isObj(columnDef.datagrid) && isFunction(columnDef.datagrid.render)){
|
|
3261
|
-
_render = columnDef.datagrid.render.call(this,renderArgs);
|
|
3262
|
-
} else if(isFunction(columnDef.multiplicater)){
|
|
3263
|
-
_render = defaultDecimal(columnDef.multiplicater({...renderArgs,value:rowData[columnField]}),rowData[columnField]);
|
|
3264
|
-
} else {
|
|
3265
|
-
_render = defaultValue;
|
|
3266
|
-
if(!renderText && defaultStr(columnDef.format).toLowerCase() === 'hashtag'){
|
|
3267
|
-
_render = <Hashtag>{_render}</Hashtag>
|
|
3268
|
-
} else if(typeof columnDef.render === "function"){
|
|
3269
|
-
_render = columnDef.render.call(this,renderArgs);
|
|
3270
|
-
} else if(arrayValueExists( _type,["date","datetime","time"])){
|
|
3271
|
-
let _dd =DateLib.parse(rowData[columnField],_type === 'time'?DateLib.isoTimeFormat:DateLib.SQLDateFormat);
|
|
3272
|
-
if(DateLib.isDateObj(_dd)){
|
|
3273
|
-
_render = DateLib.format(_dd,defaultStr(columnDef.format,(_type === 'time'?DateLib.defaultTimeFormat:DateLib.masks.defaultDate)));
|
|
3274
|
-
}
|
|
3275
|
-
if(!_render) _render = rowData[columnField]
|
|
3276
|
-
} else if(arrayValueExists(_type,['switch','checkbox'])){
|
|
3277
|
-
let {checkedLabel,checkedTooltip,uncheckedTooltip,checkedValue,uncheckedLabel,uncheckedValue} = columnDef;
|
|
3278
|
-
checkedLabel = defaultStr(checkedLabel,'Oui')
|
|
3279
|
-
uncheckedLabel = defaultStr(uncheckedLabel,'Non')
|
|
3280
|
-
checkedValue = defaultVal(checkedValue,1); uncheckedValue = defaultVal(uncheckedValue,0)
|
|
3281
|
-
let val = defaultVal(rowData[columnField],columnDef.defaultValue,columnDef.value)
|
|
3282
|
-
if(val === checkedValue){
|
|
3283
|
-
_render = checkedLabel;
|
|
3284
|
-
} else _render = uncheckedLabel;
|
|
3285
|
-
}
|
|
3286
|
-
else if(!renderText && (_type =='select_country' || _type =='selectcountry')){
|
|
3287
|
-
_render = <Flag withCode {...columnDef} length={undefined} width={undefined} height={undefined} code={defaultValue}/>
|
|
3288
|
-
}
|
|
3289
|
-
///le lien vers le table data se fait via la colonne ayant la propriété foreignKeyTable de type chaine de caractère non nulle
|
|
3290
|
-
else if(!renderText && (isNonNullString(columnDef.foreignKeyTable) || columnDef.primaryKey === true || arrayValueExists(['id','piece'],_type))){
|
|
3291
|
-
const id = rowData[columnField]?.toString();
|
|
3292
|
-
if(isNonNullString(id)){
|
|
3293
|
-
_render = <TableLink
|
|
3294
|
-
id = {id}
|
|
3295
|
-
foreignKeyTable = {defaultStr(columnDef.foreignKeyTable,columnDef.table,columnDef.tableName)}
|
|
3296
|
-
foreignKeyColumn = {defaultStr(columnDef.foreignKeyColumn,columnDef.field)}
|
|
3297
|
-
{...columnDef}
|
|
3298
|
-
data = {rowData}
|
|
3299
|
-
columnField = {columnField}
|
|
3300
|
-
>
|
|
3301
|
-
{this.renderSelectFieldCell({columnDef,columnField,rowData})}
|
|
3302
|
-
</TableLink>
|
|
3303
|
-
}
|
|
3304
|
-
} else if((_type.contains('select'))){
|
|
3305
|
-
_render= this.renderSelectFieldCell({columnDef,columnField,rowData,data:rowData})
|
|
3306
|
-
} else if(_type == 'image'){
|
|
3307
|
-
if(renderText) return null;
|
|
3308
|
-
columnDef = defaultObj(columnDef)
|
|
3309
|
-
columnDef = {...columnDef,...defaultObj(columnDef.datagrid)};
|
|
3310
|
-
columnDef.size = defaultDecimal(columnDef.size,50);
|
|
3311
|
-
columnDef.editable = defaultBool(columnDef.editable,false)
|
|
3312
|
-
columnDef.rounded = defaultBool(columnDef.rounded,columnDef.round,true);
|
|
3313
|
-
columnDef.src = rowData[columnField];
|
|
3314
|
-
_render = <Image {...columnDef}/>
|
|
3315
|
-
}
|
|
3316
|
-
if(_render === undefined || _render ===null){
|
|
3317
|
-
_render = rowData[columnField];
|
|
3318
|
-
}
|
|
3319
|
-
if(columnDef.type =="password" && isNonNullString(_render)){
|
|
3320
|
-
let l = Math.max(_render.length,20);
|
|
3321
|
-
_render = "";
|
|
3322
|
-
for(let i=0;i<l;i++){
|
|
3323
|
-
_render+=".";
|
|
3324
|
-
}
|
|
3325
|
-
}
|
|
3326
|
-
if(isArray(_render)){
|
|
3327
|
-
if(isTagRender){
|
|
3328
|
-
let nV = "";
|
|
3329
|
-
_render.map((v1)=>{
|
|
3330
|
-
nV +=(nV?arrayValueSeparator:"")+i18n.lang(v1,v1);
|
|
3331
|
-
})
|
|
3332
|
-
_render = nV;
|
|
3333
|
-
} else {
|
|
3334
|
-
_render = _render.join(arrayValueSeparator);
|
|
3335
|
-
}
|
|
3336
|
-
}
|
|
3337
|
-
}
|
|
3338
|
-
if(_render ===undefined){
|
|
3339
|
-
_render = rowData[columnField];
|
|
3340
|
-
}
|
|
3341
|
-
if(isArray(_render)){
|
|
3342
|
-
_render = _render.join(arrayValueSeparator);
|
|
3343
|
-
} else if(!React.isValidElement(_render) && isPlainObj(_render)){
|
|
3344
|
-
let __r = "";
|
|
3345
|
-
for(let i in _render){
|
|
3346
|
-
__r+= (isObj(_render[i]) && _render[i]? (_render[i].code? _render[i].code:defaultStr(_render[i].label)):(_render[i]))
|
|
3347
|
-
}
|
|
3348
|
-
_render = __r;
|
|
3349
|
-
}
|
|
3350
|
-
if(isFunction(renderProps)){
|
|
3351
|
-
renderProps = renderProps.call(this,renderArgs);
|
|
3352
|
-
}
|
|
3353
|
-
_render = this.formatValue(_render,columnDef.format);
|
|
3354
|
-
if(!renderText && _render && isObj(renderProps)){
|
|
3355
|
-
let Component = defaultVal(renderProps.Component,Label);
|
|
3356
|
-
delete renderProps.Component;
|
|
3357
|
-
_render = <Component {...renderProps}>{_render}</Component>
|
|
3358
|
-
}
|
|
3359
|
-
if(typeof _render =='boolean'){
|
|
3360
|
-
_render = _render ? "Oui" : "Non";
|
|
3361
|
-
}
|
|
3362
|
-
if(renderText){
|
|
3363
|
-
return React.getTextContent(_render);
|
|
3364
|
-
}
|
|
3365
|
-
if((typeof _render ==='string' || typeof _render =='number')){
|
|
3366
|
-
_render = <Label selectable>{_render}</Label>
|
|
3367
|
-
}
|
|
3368
|
-
|
|
3369
|
-
_render = React.isValidElement(_render)|| Array.isArray(_render)?_render:null;
|
|
3370
|
-
return {render:_render,style,extra,key};
|
|
3196
|
+
}
|
|
3197
|
+
return renderRowCell({
|
|
3198
|
+
...arg,
|
|
3199
|
+
context : this,
|
|
3200
|
+
getRowKey : this.getRowKey.bind(this),
|
|
3201
|
+
abreviateValues : this.state.abreviateValues,
|
|
3202
|
+
})
|
|
3371
3203
|
}
|
|
3372
3204
|
static LinesProgressBar (props){
|
|
3373
3205
|
return <DatagridContentLoader {...props}/>
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// Copyright 2023 @fto-consult/Boris Fouomene. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style
|
|
3
|
+
// license that can be found in the LICENSE file.
|
|
4
|
+
import {isNonNullString,isArray,isObjOrArray,defaultStr,defaultArray,defaultObj,isObj} from "$utils";
|
|
5
|
+
import Hashtag from "$ecomponents/Hashtag";
|
|
6
|
+
import DateLib from "$date";
|
|
7
|
+
import Image from "$ecomponents/Image";
|
|
8
|
+
import React from "$react";
|
|
9
|
+
import Label from "$ecomponents/Label";
|
|
10
|
+
import TableLink from "$TableLink";
|
|
11
|
+
import {Flag} from "$ecomponents/Countries";
|
|
12
|
+
import { StyleSheet } from "react-native";
|
|
13
|
+
|
|
14
|
+
export const renderRowCell = (arg)=>{
|
|
15
|
+
let {rowData,getRowKey,context,renderRowCell:customRenderRowCell,abreviateValues,isSectionListHeader,rowIndex,index,rowCounterIndex,columnDef,columnField} = arg;
|
|
16
|
+
context = context || this;
|
|
17
|
+
const renderText = isSectionListHeader === true || customRenderRowCell === false ? true : false;
|
|
18
|
+
rowIndex = isDecimal(rowIndex)? rowIndex : isDecimal(index)? index : undefined;
|
|
19
|
+
rowCounterIndex = isDecimal(rowCounterIndex) ? rowCounterIndex : isDecimal(rowIndex)? rowIndex+1 : defaultDecimal(rowCounterIndex);
|
|
20
|
+
if(!isObj(rowData)) return renderText ? null : {render:null,extra:{}};
|
|
21
|
+
let _render = null;
|
|
22
|
+
getRowKey = typeof getRowKey =='function'? getRowKey : React.getKey;
|
|
23
|
+
columnDef = defaultObj(columnDef);
|
|
24
|
+
let _type = defaultStr(columnDef.jsType,columnDef.type).trim().toLowerCase().replaceAll("_","");
|
|
25
|
+
let renderProps = undefined;
|
|
26
|
+
if(isObj(columnDef.datagrid)){
|
|
27
|
+
renderProps = columnDef.datagrid.renderProps;
|
|
28
|
+
}
|
|
29
|
+
const style = Object.assign({},StyleSheet.flatten(columnDef.style));
|
|
30
|
+
if(!renderText && columnDef.visible === false){
|
|
31
|
+
style.display = "none";
|
|
32
|
+
}
|
|
33
|
+
const extra = {style},renderArgs = arg;
|
|
34
|
+
renderArgs.extra = extra;
|
|
35
|
+
renderArgs.item = rowData;
|
|
36
|
+
const defaultValue = renderArgs.defaultValue = renderArgs.value = rowData[columnField];
|
|
37
|
+
let key = getRowKey.call(context,rowData,rowIndex)+"-"+columnField;
|
|
38
|
+
if(isObj(columnDef.datagrid) && isFunction(columnDef.datagrid.render)){
|
|
39
|
+
_render = columnDef.datagrid.render.call(context,renderArgs);
|
|
40
|
+
} else if(isFunction(columnDef.multiplicater)){
|
|
41
|
+
_render = defaultDecimal(columnDef.multiplicater({...renderArgs,value:rowData[columnField]}),rowData[columnField]);
|
|
42
|
+
} else {
|
|
43
|
+
_render = defaultValue;
|
|
44
|
+
if(!renderText && defaultStr(columnDef.format).toLowerCase() === 'hashtag'){
|
|
45
|
+
_render = <Hashtag>{_render}</Hashtag>
|
|
46
|
+
} else if(typeof columnDef.render === "function"){
|
|
47
|
+
_render = columnDef.render.call(context,renderArgs);
|
|
48
|
+
} else if(arrayValueExists( _type,["date","datetime","time"])){
|
|
49
|
+
let _dd =DateLib.parse(rowData[columnField],_type === 'time'?DateLib.isoTimeFormat:DateLib.SQLDateFormat);
|
|
50
|
+
if(DateLib.isDateObj(_dd)){
|
|
51
|
+
_render = DateLib.format(_dd,defaultStr(columnDef.format,(_type === 'time'?DateLib.defaultTimeFormat:DateLib.masks.defaultDate)));
|
|
52
|
+
}
|
|
53
|
+
if(!_render) _render = rowData[columnField]
|
|
54
|
+
} else if(arrayValueExists(_type,['switch','checkbox'])){
|
|
55
|
+
let {checkedLabel,checkedValue,uncheckedLabel,uncheckedValue} = columnDef;
|
|
56
|
+
checkedLabel = defaultStr(checkedLabel,'Oui')
|
|
57
|
+
uncheckedLabel = defaultStr(uncheckedLabel,'Non')
|
|
58
|
+
checkedValue = defaultVal(checkedValue,1); uncheckedValue = defaultVal(uncheckedValue,0)
|
|
59
|
+
let val = defaultVal(rowData[columnField],columnDef.defaultValue,columnDef.value)
|
|
60
|
+
if(val === checkedValue){
|
|
61
|
+
_render = checkedLabel;
|
|
62
|
+
} else _render = uncheckedLabel;
|
|
63
|
+
}
|
|
64
|
+
else if(!renderText && (_type =='selectcountry')){
|
|
65
|
+
_render = <Flag withCode {...columnDef} length={undefined} width={undefined} height={undefined} code={defaultValue}/>
|
|
66
|
+
}
|
|
67
|
+
///le lien vers le table data se fait via la colonne ayant la propriété foreignKeyTable de type chaine de caractère non nulle
|
|
68
|
+
else if(!renderText && (isNonNullString(columnDef.foreignKeyTable) || columnDef.primaryKey === true || arrayValueExists(['id','piece'],_type))){
|
|
69
|
+
const id = rowData[columnField]?.toString();
|
|
70
|
+
if(isNonNullString(id)){
|
|
71
|
+
_render = <TableLink
|
|
72
|
+
id = {id}
|
|
73
|
+
foreignKeyTable = {defaultStr(columnDef.foreignKeyTable,columnDef.table,columnDef.tableName)}
|
|
74
|
+
foreignKeyColumn = {defaultStr(columnDef.foreignKeyColumn,columnDef.field)}
|
|
75
|
+
{...columnDef}
|
|
76
|
+
data = {rowData}
|
|
77
|
+
columnField = {columnField}
|
|
78
|
+
>
|
|
79
|
+
{renderSelectFieldCell({columnDef,columnField,rowData})}
|
|
80
|
+
</TableLink>
|
|
81
|
+
}
|
|
82
|
+
} else if((_type.contains('select'))){
|
|
83
|
+
_render= renderSelectFieldCell({columnDef,columnField,rowData,data:rowData})
|
|
84
|
+
} else if(_type == 'image'){
|
|
85
|
+
if(renderText) return null;
|
|
86
|
+
columnDef = defaultObj(columnDef)
|
|
87
|
+
columnDef = {...columnDef,...defaultObj(columnDef.datagrid)};
|
|
88
|
+
columnDef.size = defaultDecimal(columnDef.size,50);
|
|
89
|
+
columnDef.editable = defaultBool(columnDef.editable,false)
|
|
90
|
+
columnDef.rounded = defaultBool(columnDef.rounded,columnDef.round,true);
|
|
91
|
+
columnDef.src = rowData[columnField];
|
|
92
|
+
_render = <Image {...columnDef}/>
|
|
93
|
+
}
|
|
94
|
+
if(_render === undefined || _render ===null){
|
|
95
|
+
_render = rowData[columnField];
|
|
96
|
+
}
|
|
97
|
+
if(columnDef.type =="password" && isNonNullString(_render)){
|
|
98
|
+
let l = Math.max(_render.length,20);
|
|
99
|
+
_render = "";
|
|
100
|
+
for(let i=0;i<l;i++){
|
|
101
|
+
_render+=".";
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if(isArray(_render)){
|
|
105
|
+
_render = _render.join(arrayValueSeparator);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if(_render ===undefined){
|
|
109
|
+
_render = rowData[columnField];
|
|
110
|
+
}
|
|
111
|
+
if(isArray(_render)){
|
|
112
|
+
_render = _render.join(arrayValueSeparator);
|
|
113
|
+
} else if(!React.isValidElement(_render) && isPlainObj(_render)){
|
|
114
|
+
let __r = "";
|
|
115
|
+
for(let i in _render){
|
|
116
|
+
__r+= (isObj(_render[i]) && _render[i]? (_render[i].code? _render[i].code:defaultStr(_render[i].label)):(_render[i]))
|
|
117
|
+
}
|
|
118
|
+
_render = __r;
|
|
119
|
+
}
|
|
120
|
+
if(isFunction(renderProps)){
|
|
121
|
+
renderProps = renderProps.call(context,renderArgs);
|
|
122
|
+
}
|
|
123
|
+
_render = formatValue(_render,columnDef.format,abreviateValues);
|
|
124
|
+
if(!renderText && _render && isObj(renderProps)){
|
|
125
|
+
let Component = defaultVal(renderProps.Component,Label);
|
|
126
|
+
delete renderProps.Component;
|
|
127
|
+
_render = <Component {...renderProps}>{_render}</Component>
|
|
128
|
+
}
|
|
129
|
+
if(typeof _render =='boolean'){
|
|
130
|
+
_render = _render ? "Oui" : "Non";
|
|
131
|
+
}
|
|
132
|
+
if(renderText){
|
|
133
|
+
return React.getTextContent(_render);
|
|
134
|
+
}
|
|
135
|
+
if((typeof _render ==='string' || typeof _render =='number')){
|
|
136
|
+
_render = <Label selectable>{_render}</Label>
|
|
137
|
+
}
|
|
138
|
+
_render = React.isValidElement(_render)|| Array.isArray(_render)?_render:null;
|
|
139
|
+
return {render:_render,style,extra,key};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const renderSelectFieldCell= ({rowData,columnDef,columnField})=>{
|
|
143
|
+
let v1 = rowData[columnField],_render = v1;
|
|
144
|
+
if(isObjOrArray(columnDef.items)){
|
|
145
|
+
if(columnDef.multiple){
|
|
146
|
+
v1 = Object.toArray(v1);
|
|
147
|
+
_render = "";
|
|
148
|
+
v1.map((v)=>{
|
|
149
|
+
for(let i in columnDef.items){
|
|
150
|
+
let it = columnDef.items[i];
|
|
151
|
+
if(isObj(it) && defaultVal(it.code,i) == v){
|
|
152
|
+
_render+=(_render?arrayValueSeparator:"")+defaultStr(it.label,it.text,v);
|
|
153
|
+
} else if(isNonNullString(it) && i == v){
|
|
154
|
+
_render+=(_render?arrayValueSeparator:"")+it;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
})
|
|
158
|
+
if(!_render){
|
|
159
|
+
return v1.join(arrayValueSeparator);
|
|
160
|
+
}
|
|
161
|
+
return _render;
|
|
162
|
+
} else {
|
|
163
|
+
for(let i in columnDef.items){
|
|
164
|
+
let it = columnDef.items[i];
|
|
165
|
+
if(isObj(it) && defaultVal(it.code,i) == v1){
|
|
166
|
+
return defaultStr(it.label,it.text,v1);
|
|
167
|
+
} else if(isNonNullString(it) && i == v1){
|
|
168
|
+
return it;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if(_render === undefined || _render === null) return v1;
|
|
172
|
+
if(isArray(_render)){
|
|
173
|
+
return _render.join(arrayValueSeparator)
|
|
174
|
+
} else if(isObj(_render)){
|
|
175
|
+
return "";
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return _render
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export const formatValue = (value,format,abreviateValues)=>{
|
|
183
|
+
if(typeof value !='number') return value;
|
|
184
|
+
if(format && typeof format =='string' && format.toLowerCase() =='money'){
|
|
185
|
+
return abreviateValues? value.abreviate2FormatMoney() : value.formatMoney();
|
|
186
|
+
}
|
|
187
|
+
return abreviateValues ? value.abreviate() : value.formatNumber();
|
|
188
|
+
}
|
|
@@ -996,7 +996,7 @@ class DropdownComponent extends AppComponent {
|
|
|
996
996
|
contentStyle = {[{paddingVertical:0},restProps.contentStyle]}
|
|
997
997
|
anchor={anchor}
|
|
998
998
|
{...dialogProps}
|
|
999
|
-
title = {defaultStr(dialogProps.title,label,text)+"[ "+self.state.data.length.formatNumber()+" ]"}
|
|
999
|
+
title = {defaultStr(dialogProps.title,label,text)+" [ "+self.state.data.length.formatNumber()+" ]"}
|
|
1000
1000
|
subtitle = {selectedText}
|
|
1001
1001
|
style = {[restProps.style]}
|
|
1002
1002
|
contentProps = {{style:{flex:1}}}
|
|
@@ -513,6 +513,10 @@ export default class Filter extends AppComponent {
|
|
|
513
513
|
isLoading = !!isLoading;
|
|
514
514
|
rest.pointerEvents = !isLoading ? "auto" : "none";
|
|
515
515
|
if(withLabel ===false){
|
|
516
|
+
if(type.contains("select")){
|
|
517
|
+
rest.dialogProps = defaultObj(rest.dialogProps);
|
|
518
|
+
rest.dialogProps.title = defaultStr(rest.dialogProps.title,label);
|
|
519
|
+
}
|
|
516
520
|
delete rest.label;
|
|
517
521
|
delete rest.text;
|
|
518
522
|
delete rest.title;
|
|
@@ -2,7 +2,6 @@ import Field from "./Field";
|
|
|
2
2
|
import Dropdown from "$ecomponents/Dropdown";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import {isObj} from "$utils";
|
|
5
|
-
import appConfig from "$capp/config";
|
|
6
5
|
|
|
7
6
|
export default class FormSelectField extends Field{
|
|
8
7
|
constructor(props) {
|
|
@@ -110,16 +109,11 @@ export default class FormSelectField extends Field{
|
|
|
110
109
|
_render (componentProps){
|
|
111
110
|
let {
|
|
112
111
|
getInstance,
|
|
113
|
-
_defaultValue,
|
|
114
112
|
...props
|
|
115
113
|
} = componentProps;
|
|
116
114
|
delete props.format;
|
|
117
115
|
delete props.import;
|
|
118
116
|
delete props.exports;
|
|
119
|
-
const isCountry = this.type.contains('country');
|
|
120
|
-
if( isCountry && props.multiple !== true){
|
|
121
|
-
props.defaultValue = defaultStr(props.defaultValue,appConfig.countryCode,appConfig.get("countryCode","country"));
|
|
122
|
-
}
|
|
123
117
|
return <Dropdown
|
|
124
118
|
{...props}
|
|
125
119
|
ref = {(el)=>{
|
|
@@ -195,7 +195,13 @@ const TableDataSelectField = React.forwardRef((_props,ref)=>{
|
|
|
195
195
|
return (itemLabel !== itemCode ? ((isNonNullString(itemCode)?("["+itemCode+"] "):"")+itemLabel):itemLabel);
|
|
196
196
|
}
|
|
197
197
|
const dialogProps = defaultObj(props.dialogProps);
|
|
198
|
-
|
|
198
|
+
let ttitle = defaultStr(dialogProps.title);
|
|
199
|
+
if(!ttitle){
|
|
200
|
+
const txt = defaultStr(props.label,props.text);
|
|
201
|
+
const tt = defaultStr(fKeyTable.text,fKeyTable.label);
|
|
202
|
+
ttitle = txt && tt ? "{0} [1]".sprintf(txt,tt) : tt || txt;
|
|
203
|
+
}
|
|
204
|
+
dialogProps.title = ttitle;
|
|
199
205
|
return <Dropdown
|
|
200
206
|
{...props}
|
|
201
207
|
isFilter = {isFilter}
|
|
@@ -71,20 +71,24 @@ export const getFilterComponentProps = (_props)=>{
|
|
|
71
71
|
type = defaultStr(jsType,type,'text').toLowerCase().replaceAll("_","").replaceAll("-","").trim();
|
|
72
72
|
const sanitizedType = type.replaceAll("_","").toLowerCase().trim();
|
|
73
73
|
props = defaultObj(props);
|
|
74
|
+
props.label = defaultStr(label,text);
|
|
74
75
|
if(type.startsWith("select")){
|
|
75
76
|
props.inputProps = Object.assign({},props.inputProps);
|
|
76
77
|
props.inputProps.placeholder = defaultStr(props.inputProps.placeholder,i18n.lang("search.."))
|
|
77
|
-
props.label = label;
|
|
78
78
|
component = Fields.SelectField;
|
|
79
79
|
if(type =='select_country' || type =='selectcountry'){
|
|
80
80
|
component = Fields.SelectCountry;
|
|
81
81
|
} else if(type =='select_tabledata' || type =='selecttabledata'){
|
|
82
82
|
component = Fields.SelectTableData;
|
|
83
|
+
} else if(React.isComponent(componentTypes[type])){
|
|
84
|
+
component = componentTypes[type];
|
|
85
|
+
} else if(React.isComponent(componentTypes[sanitizedType])){
|
|
86
|
+
component = componentTypes[sanitizedType];
|
|
83
87
|
}
|
|
84
88
|
type = "select";
|
|
85
89
|
} else if(type == 'switch' || type =='radio' || type ==='checkbox') {
|
|
86
90
|
type = 'select';
|
|
87
|
-
let {checkedLabel,checkedTooltip,uncheckedTooltip,checkedValue,uncheckedLabel,uncheckedValue
|
|
91
|
+
let {checkedLabel,checkedTooltip,uncheckedTooltip,checkedValue,uncheckedLabel,uncheckedValue,...pR} = props;
|
|
88
92
|
checkedLabel = defaultVal(checkedLabel,'Non')
|
|
89
93
|
uncheckedLabel = defaultVal(uncheckedLabel,'Oui')
|
|
90
94
|
checkedValue = defaultVal(checkedValue,1); uncheckedValue = defaultVal(uncheckedValue,0)
|
|
@@ -101,7 +105,6 @@ export const getFilterComponentProps = (_props)=>{
|
|
|
101
105
|
component = componentTypes[type];
|
|
102
106
|
} else if(isNonNullString(props.foreignKeyColumn) && isNonNullString(props.foreignKeyTable)) {
|
|
103
107
|
component = Fields.SelectTableData;
|
|
104
|
-
props.multiple = true;
|
|
105
108
|
type = "select";
|
|
106
109
|
}else {
|
|
107
110
|
if(React.isComponent(componentTypes[sanitizedType])){
|
|
@@ -109,8 +112,7 @@ export const getFilterComponentProps = (_props)=>{
|
|
|
109
112
|
}
|
|
110
113
|
delete props.dbName;
|
|
111
114
|
delete props.tableName;
|
|
112
|
-
|
|
113
|
-
delete props.fieldName;
|
|
115
|
+
delete props.fieldName;
|
|
114
116
|
}
|
|
115
117
|
type = type || "text"
|
|
116
118
|
if(type =='select'){
|