drf-react-by-schema 0.8.4 → 0.8.6
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/dist/api.d.ts +2 -1
- package/dist/api.js +1 -2
- package/dist/components/DataGridBySchemaEditable/InputInterval.js +17 -20
- package/dist/components/DataGridBySchemaEditable/utils.d.ts +2 -2
- package/dist/components/DataGridBySchemaEditable/utils.js +4 -6
- package/dist/components/DataGridBySchemaEditable.js +3 -0
- package/dist/components/GenericModelList.d.ts +3 -1
- package/dist/components/GenericModelList.js +10 -8
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +26 -1
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ export interface GetGenericModelListProps {
|
|
|
64
64
|
loadedModelOptions?: modelOptionsType | boolean;
|
|
65
65
|
page?: number;
|
|
66
66
|
filter?: GridFilterModel;
|
|
67
|
+
queryParams?: string[];
|
|
67
68
|
sort?: GridSortModel;
|
|
68
69
|
sumRows?: SumRowsType;
|
|
69
70
|
}
|
|
@@ -77,7 +78,7 @@ interface SumRowsItem {
|
|
|
77
78
|
suffix?: string;
|
|
78
79
|
isCount?: boolean;
|
|
79
80
|
}
|
|
80
|
-
export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema, loadedModelOptions, page, filter, sort, sumRows, }: GetGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
|
|
81
|
+
export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema, loadedModelOptions, page, filter, queryParams, sort, sumRows, }: GetGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
|
|
81
82
|
export declare const getGenericModel: ({ model, serverEndPoint, id, relatedModel, relatedModelId, }: {
|
|
82
83
|
model: string;
|
|
83
84
|
serverEndPoint: serverEndPointType | null;
|
package/dist/api.js
CHANGED
|
@@ -529,7 +529,7 @@ const signUp = (data, serverEndPoint) => __awaiter(void 0, void 0, void 0, funct
|
|
|
529
529
|
}
|
|
530
530
|
});
|
|
531
531
|
exports.signUp = signUp;
|
|
532
|
-
const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], isInBatches = false, loadedSchema, loadedModelOptions, page, filter, sort, sumRows, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
532
|
+
const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], isInBatches = false, loadedSchema, loadedModelOptions, page, filter, queryParams = [], sort, sumRows, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
533
533
|
let path = `${model}/${id}`;
|
|
534
534
|
let schemaPath = `${model}/`;
|
|
535
535
|
let schema = loadedSchema;
|
|
@@ -542,7 +542,6 @@ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = ''
|
|
|
542
542
|
}
|
|
543
543
|
schemaPath += `${id}/${relatedModel}/`;
|
|
544
544
|
}
|
|
545
|
-
const queryParams = [];
|
|
546
545
|
// SERVER-SIDE TOTALS (sumRows):
|
|
547
546
|
if (sumRows) {
|
|
548
547
|
const sumRowsParams = sumRows.rows.map((row) => row.field).join(',');
|
|
@@ -72,34 +72,31 @@ const InputInterval = ({ item, applyValue, focusElementRef = null, type }) => {
|
|
|
72
72
|
flexDirection: 'row',
|
|
73
73
|
alignItems: 'end',
|
|
74
74
|
height: 48,
|
|
75
|
-
pl: '20px'
|
|
75
|
+
pl: '20px',
|
|
76
76
|
} },
|
|
77
|
-
type === 'number' &&
|
|
78
|
-
react_1.default.createElement(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
react_1.default.createElement(react_1.default.Fragment, null,
|
|
91
|
-
react_1.default.createElement(TextField_1.default, { name: "lower-bound-input", label: "De", variant: "standard", value: filterValueState[0] || '', onChange: handleLowerFilterChange, type: "date", inputRef: focusElementRef, InputLabelProps: { shrink: true }, sx: { mr: 2, minWidth: 130 } }),
|
|
92
|
-
react_1.default.createElement(TextField_1.default, { name: "upper-bound-input", label: "At\u00E9", variant: "standard", value: filterValueState[1] || '', onChange: handleUpperFilterChange, type: "date", InputProps: applying ? { endAdornment: react_1.default.createElement(Sync_1.default, null) } : {}, InputLabelProps: { shrink: true }, sx: { minWidth: 130 } }))));
|
|
77
|
+
type === 'number' && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
78
|
+
react_1.default.createElement(TextField_1.default, { name: "lower-bound-input", placeholder: "De", label: "De", variant: "standard", value: Number(filterValueState[0]), onChange: handleLowerFilterChange, type: "number", inputRef: focusElementRef, sx: { mr: 2, minWidth: 130 } }),
|
|
79
|
+
react_1.default.createElement(TextField_1.default, { name: "upper-bound-input", placeholder: "At\u00E9", label: "At\u00E9", variant: "standard", value: Number(filterValueState[1]), onChange: handleUpperFilterChange, type: "number", sx: { minWidth: 130 }, InputProps: applying ? { endAdornment: react_1.default.createElement(Sync_1.default, null) } : {} }))),
|
|
80
|
+
type === 'float' && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
81
|
+
react_1.default.createElement(react_number_format_1.NumericFormat, { name: "lower-bound-input", placeholder: "De", label: "De", variant: "standard", value: Number(filterValueState[0]), onValueChange: (values, sourceInfo) => {
|
|
82
|
+
handleLowerFilterChange({ target: { value: values.value } });
|
|
83
|
+
}, thousandSeparator: ".", decimalSeparator: ",", decimalScale: 2, fixedDecimalScale: true, valueIsNumericString: true, inputRef: focusElementRef, sx: { mr: 2, minWidth: 130 }, customInput: TextField_1.default }),
|
|
84
|
+
react_1.default.createElement(react_number_format_1.NumericFormat, { name: "upper-bound-input", placeholder: "At\u00E9", label: "At\u00E9", variant: "standard", value: Number(filterValueState[1]), onValueChange: (values, sourceInfo) => {
|
|
85
|
+
handleUpperFilterChange({ target: { value: values.value } });
|
|
86
|
+
}, thousandSeparator: ".", decimalSeparator: ",", decimalScale: 2, fixedDecimalScale: true, valueIsNumericString: true, InputProps: applying ? { endAdornment: react_1.default.createElement(Sync_1.default, null) } : {}, sx: { minWidth: 130 }, customInput: TextField_1.default }))),
|
|
87
|
+
type === 'date' && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
88
|
+
react_1.default.createElement(TextField_1.default, { name: "lower-bound-input", label: "De", variant: "standard", value: filterValueState[0] || '', onChange: handleLowerFilterChange, type: "date", inputRef: focusElementRef, InputLabelProps: { shrink: true }, sx: { mr: 2, minWidth: 130 } }),
|
|
89
|
+
react_1.default.createElement(TextField_1.default, { name: "upper-bound-input", label: "At\u00E9", variant: "standard", value: filterValueState[1] || '', onChange: handleUpperFilterChange, type: "date", InputProps: applying ? { endAdornment: react_1.default.createElement(Sync_1.default, null) } : {}, InputLabelProps: { shrink: true }, sx: { minWidth: 130 } })))));
|
|
93
90
|
};
|
|
94
91
|
const InputNumberInterval = (props) => {
|
|
95
|
-
return
|
|
92
|
+
return react_1.default.createElement(InputInterval, Object.assign({}, props, { type: "number" }));
|
|
96
93
|
};
|
|
97
94
|
exports.InputNumberInterval = InputNumberInterval;
|
|
98
95
|
const InputDateInterval = (props) => {
|
|
99
|
-
return
|
|
96
|
+
return react_1.default.createElement(InputInterval, Object.assign({}, props, { type: "date" }));
|
|
100
97
|
};
|
|
101
98
|
exports.InputDateInterval = InputDateInterval;
|
|
102
99
|
const InputFloatInterval = (props) => {
|
|
103
|
-
return
|
|
100
|
+
return react_1.default.createElement(InputInterval, Object.assign({}, props, { type: "float" }));
|
|
104
101
|
};
|
|
105
102
|
exports.InputFloatInterval = InputFloatInterval;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { GridApi } from
|
|
3
|
-
import { GridEnrichedBySchemaColDef } from
|
|
2
|
+
import { GridApi } from '@mui/x-data-grid';
|
|
3
|
+
import { GridEnrichedBySchemaColDef } from '../../utils';
|
|
4
4
|
export type ResizeType = 'condense' | 'maxContent' | 'fitScreen';
|
|
5
5
|
/**
|
|
6
6
|
*
|
|
@@ -18,7 +18,7 @@ function maxOfCol(colIndex) {
|
|
|
18
18
|
invisibleContainer.style.left = '0';
|
|
19
19
|
document.body.append(invisibleContainer);
|
|
20
20
|
const widths = [];
|
|
21
|
-
document.querySelectorAll(`[aria-colindex='${colIndex}']`).forEach(cell => {
|
|
21
|
+
document.querySelectorAll(`[aria-colindex='${colIndex}']`).forEach((cell) => {
|
|
22
22
|
const invisibleCell = document.createElement('div');
|
|
23
23
|
invisibleCell.innerHTML = cell.innerHTML;
|
|
24
24
|
invisibleCell.style.width = 'max-content';
|
|
@@ -65,9 +65,7 @@ function resizeColumns(columns, resizeType, apiRef) {
|
|
|
65
65
|
}
|
|
66
66
|
exports.resizeColumns = resizeColumns;
|
|
67
67
|
const quantityOnlyOperators = ({ type }) => {
|
|
68
|
-
const builtInFilters =
|
|
69
|
-
? (0, x_data_grid_1.getGridDateOperators)()
|
|
70
|
-
: (0, x_data_grid_1.getGridNumericOperators)();
|
|
68
|
+
const builtInFilters = type === 'date' ? (0, x_data_grid_1.getGridDateOperators)() : (0, x_data_grid_1.getGridNumericOperators)();
|
|
71
69
|
let InputComponent = InputInterval_1.InputNumberInterval;
|
|
72
70
|
if (type === 'date') {
|
|
73
71
|
InputComponent = InputInterval_1.InputDateInterval;
|
|
@@ -93,8 +91,8 @@ const quantityOnlyOperators = ({ type }) => {
|
|
|
93
91
|
value <= filterItem.value[1]);
|
|
94
92
|
};
|
|
95
93
|
},
|
|
96
|
-
InputComponent
|
|
97
|
-
}
|
|
94
|
+
InputComponent,
|
|
95
|
+
},
|
|
98
96
|
];
|
|
99
97
|
};
|
|
100
98
|
exports.quantityOnlyOperators = quantityOnlyOperators;
|
|
@@ -193,6 +193,9 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
193
193
|
column.type = 'dateTime';
|
|
194
194
|
column.minWidth = 180;
|
|
195
195
|
column.valueFormatter = (params) => params.value ? (0, moment_1.default)(params.value).format('DD/MM/YYYY HH:mm') : '';
|
|
196
|
+
column.filterOperators = (0, utils_2.quantityOnlyOperators)({
|
|
197
|
+
type: 'date',
|
|
198
|
+
});
|
|
196
199
|
break;
|
|
197
200
|
case 'nested object':
|
|
198
201
|
column.minWidth = 150;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { GridFilterModel } from '@mui/x-data-grid';
|
|
2
3
|
import { GridEnrichedBySchemaColDef } from '../utils';
|
|
3
4
|
import { SumRowsType } from '../api';
|
|
4
5
|
interface GenericModelListProps {
|
|
@@ -16,6 +17,7 @@ interface GenericModelListProps {
|
|
|
16
17
|
LinkComponent?: any | null;
|
|
17
18
|
hasHeader: boolean;
|
|
18
19
|
paginationMode: 'server' | 'client';
|
|
20
|
+
defaultFilter?: GridFilterModel;
|
|
19
21
|
}
|
|
20
|
-
declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent, hasHeader, paginationMode, }: GenericModelListProps) => JSX.Element;
|
|
22
|
+
declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent, hasHeader, paginationMode, defaultFilter, }: GenericModelListProps) => JSX.Element;
|
|
21
23
|
export default GenericModelList;
|
|
@@ -44,10 +44,11 @@ const DataGridBySchemaEditable_1 = __importDefault(require("./DataGridBySchemaEd
|
|
|
44
44
|
const DataTotals_1 = __importDefault(require("./DataTotals"));
|
|
45
45
|
const DataTotalsServer_1 = __importDefault(require("./DataTotalsServer"));
|
|
46
46
|
const styles_1 = require("../styles");
|
|
47
|
+
const utils_1 = require("../utils");
|
|
47
48
|
const api_1 = require("../api");
|
|
48
49
|
const DRFReactBySchemaContext_1 = require("../context/DRFReactBySchemaContext");
|
|
49
50
|
const APIWrapperContext_1 = require("../context/APIWrapperContext");
|
|
50
|
-
const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', }) => {
|
|
51
|
+
const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', defaultFilter, }) => {
|
|
51
52
|
const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
|
|
52
53
|
const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
|
|
53
54
|
if (!apiContext) {
|
|
@@ -100,14 +101,17 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
|
|
|
100
101
|
console.log('error retrieving data!');
|
|
101
102
|
return;
|
|
102
103
|
case 'server':
|
|
104
|
+
const page = paginationModel ? paginationModel.page : 0;
|
|
105
|
+
const filter = (0, utils_1.mergeFilterItems)(defaultFilter, paginationModel ? paginationModel.filter : undefined);
|
|
106
|
+
const sort = paginationModel ? paginationModel.sort : undefined;
|
|
103
107
|
const loadPaginatedParams = {
|
|
104
108
|
model,
|
|
105
109
|
serverEndPoint,
|
|
106
110
|
columnFields,
|
|
107
111
|
hiddenFields,
|
|
108
|
-
page
|
|
109
|
-
filter
|
|
110
|
-
sort
|
|
112
|
+
page,
|
|
113
|
+
filter,
|
|
114
|
+
sort,
|
|
111
115
|
sumRows,
|
|
112
116
|
};
|
|
113
117
|
const paginatedData = yield (0, api_1.getGenericModelList)(loadPaginatedParams);
|
|
@@ -125,7 +129,7 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
|
|
|
125
129
|
}
|
|
126
130
|
(0, react_1.useEffect)(() => {
|
|
127
131
|
loadObjectList();
|
|
128
|
-
}, [model]);
|
|
132
|
+
}, [model, defaultFilter]);
|
|
129
133
|
(0, react_1.useEffect)(() => {
|
|
130
134
|
if (paginationMode === 'server') {
|
|
131
135
|
loadObjectList();
|
|
@@ -149,8 +153,6 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
|
|
|
149
153
|
: typeof data.rowCount !== undefined
|
|
150
154
|
? data.rowCount
|
|
151
155
|
: 0 })),
|
|
152
|
-
paginationMode === 'client'
|
|
153
|
-
? react_1.default.createElement(DataTotals_1.default, { data: data.data, sumRows: sumRows, visibleRows: visibleRows })
|
|
154
|
-
: react_1.default.createElement(DataTotalsServer_1.default, { sumRows: sumRows, totals: data.sumRowsTotals })))));
|
|
156
|
+
paginationMode === 'client' ? (react_1.default.createElement(DataTotals_1.default, { data: data.data, sumRows: sumRows, visibleRows: visibleRows })) : (react_1.default.createElement(DataTotalsServer_1.default, { sumRows: sumRows, totals: data.sumRowsTotals }))))));
|
|
155
157
|
};
|
|
156
158
|
exports.default = GenericModelList;
|
package/dist/utils.d.ts
CHANGED
|
@@ -138,4 +138,5 @@ export type AddParametersToEnd<TFunction extends (...args: any) => any, TParamet
|
|
|
138
138
|
export declare function buildDateFormatBySchema(dateViews: string[] | null | undefined): "DD/MM/yyyy" | "MM/yyyy" | "yyyy" | "MM" | "DD";
|
|
139
139
|
export declare const slugToCamelCase: (str: string) => string;
|
|
140
140
|
export declare const slugify: (text: string) => string;
|
|
141
|
+
export declare function mergeFilterItems(defaultFilter: GridFilterModel | undefined, filter: GridFilterModel | undefined): any;
|
|
141
142
|
export {};
|
package/dist/utils.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.slugify = exports.slugToCamelCase = exports.buildDateFormatBySchema = exports.getPatternFormat = exports.reducer = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = void 0;
|
|
26
|
+
exports.mergeFilterItems = exports.slugify = exports.slugToCamelCase = exports.buildDateFormatBySchema = exports.getPatternFormat = exports.reducer = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = void 0;
|
|
27
27
|
const Yup = __importStar(require("yup"));
|
|
28
28
|
const emptyByType = (field, forDatabase = false) => {
|
|
29
29
|
if (field.model_default) {
|
|
@@ -328,3 +328,28 @@ const slugify = (text) => text
|
|
|
328
328
|
.replace(/[^\w-]+/g, '')
|
|
329
329
|
.replace(/--+/g, '-');
|
|
330
330
|
exports.slugify = slugify;
|
|
331
|
+
function mergeFilterItems(defaultFilter, filter) {
|
|
332
|
+
if (!filter && defaultFilter) {
|
|
333
|
+
return defaultFilter;
|
|
334
|
+
}
|
|
335
|
+
if (!defaultFilter && filter) {
|
|
336
|
+
return filter;
|
|
337
|
+
}
|
|
338
|
+
if (filter && defaultFilter) {
|
|
339
|
+
const items = filter.items;
|
|
340
|
+
const defaultItems = defaultFilter.items;
|
|
341
|
+
const mergedItems = defaultItems.map((defaultItem) => {
|
|
342
|
+
const itemFound = items.find((item) => item.columnField === defaultItem.columnField);
|
|
343
|
+
if (itemFound) {
|
|
344
|
+
return itemFound;
|
|
345
|
+
}
|
|
346
|
+
return defaultItem;
|
|
347
|
+
});
|
|
348
|
+
const unMergedItems = items.filter((item) => !defaultItems
|
|
349
|
+
.map((defaultItem) => defaultItem.columnField)
|
|
350
|
+
.includes(item.columnField));
|
|
351
|
+
return Object.assign(Object.assign({}, filter), { items: [...mergedItems, ...unMergedItems] });
|
|
352
|
+
}
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
exports.mergeFilterItems = mergeFilterItems;
|
package/package.json
CHANGED