drf-react-by-schema 0.8.6 → 0.8.8

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.
@@ -18,6 +18,7 @@ interface GenericModelListProps {
18
18
  hasHeader: boolean;
19
19
  paginationMode: 'server' | 'client';
20
20
  defaultFilter?: GridFilterModel;
21
+ queryParams?: string[];
21
22
  }
22
- declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent, hasHeader, paginationMode, defaultFilter, }: GenericModelListProps) => JSX.Element;
23
+ declare const GenericModelList: ({ columnFields, hiddenFields, minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight, model, forceReload, LinkComponent, hasHeader, paginationMode, defaultFilter, queryParams, }: GenericModelListProps) => JSX.Element;
23
24
  export default GenericModelList;
@@ -48,7 +48,7 @@ const utils_1 = require("../utils");
48
48
  const api_1 = require("../api");
49
49
  const DRFReactBySchemaContext_1 = require("../context/DRFReactBySchemaContext");
50
50
  const APIWrapperContext_1 = require("../context/APIWrapperContext");
51
- const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', defaultFilter, }) => {
51
+ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, indexFieldBasePath, indexField, customColumnOperations, customLinkDestination, sumRows, isAutoHeight = true, model, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', defaultFilter, queryParams, }) => {
52
52
  const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
53
53
  const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
54
54
  if (!apiContext) {
@@ -82,6 +82,7 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
82
82
  columnFields,
83
83
  hiddenFields,
84
84
  isInBatches,
85
+ queryParams,
85
86
  };
86
87
  const loadedData = yield (0, api_1.getGenericModelList)(loadParams);
87
88
  if (loadedData && typeof loadedData !== 'boolean') {
@@ -111,6 +112,7 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
111
112
  hiddenFields,
112
113
  page,
113
114
  filter,
115
+ queryParams,
114
116
  sort,
115
117
  sumRows,
116
118
  };
@@ -129,7 +131,7 @@ const GenericModelList = ({ columnFields, hiddenFields = [], minWidthFields, ind
129
131
  }
130
132
  (0, react_1.useEffect)(() => {
131
133
  loadObjectList();
132
- }, [model, defaultFilter]);
134
+ }, [model, defaultFilter, queryParams]);
133
135
  (0, react_1.useEffect)(() => {
134
136
  if (paginationMode === 'server') {
135
137
  loadObjectList();
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { GridFilterModel } from '@mui/x-data-grid';
2
3
  import { GridEnrichedBySchemaColDef, Id, Item } from '../utils';
3
4
  import { SumRowsType } from '../api';
4
5
  interface GenericRelatedModelListProps {
@@ -22,6 +23,9 @@ interface GenericRelatedModelListProps {
22
23
  indexFieldBasePath?: string;
23
24
  noCardWrapper?: boolean;
24
25
  LinkComponent?: React.ReactNode;
26
+ paginationMode: 'server' | 'client';
27
+ defaultFilter?: GridFilterModel;
28
+ queryParams?: string[];
25
29
  }
26
- export default function GenericRelatedModelList({ id, model, relatedModel, columnFields, creatableFields, hiddenFields, usuaria, minWidthFields, indexField, addExistingModel, label, onProcessRow, sumRows, customColumnOperations, isEditable, isAutoHeight, isInBatches, indexFieldBasePath, noCardWrapper, }: GenericRelatedModelListProps): JSX.Element;
30
+ export default function GenericRelatedModelList({ id, model, relatedModel, columnFields, creatableFields, hiddenFields, usuaria, minWidthFields, indexField, addExistingModel, label, onProcessRow, sumRows, customColumnOperations, isEditable, isAutoHeight, isInBatches, indexFieldBasePath, noCardWrapper, paginationMode, defaultFilter, queryParams, }: GenericRelatedModelListProps): JSX.Element;
27
31
  export {};
@@ -43,18 +43,24 @@ const CardContent_1 = __importDefault(require("@mui/material/CardContent"));
43
43
  const DataGridBySchemaEditable_1 = __importDefault(require("./DataGridBySchemaEditable"));
44
44
  const DataTotals_1 = __importDefault(require("./DataTotals"));
45
45
  const APIWrapperContext_1 = require("../context/APIWrapperContext");
46
+ const utils_1 = require("../utils");
46
47
  const api_1 = require("../api");
47
48
  const styles_1 = require("../styles");
48
- const ContentTable = ({ data, relatedModel, model, id, indexField, indexFieldBasePath, addExistingModel, isEditable, onEditModel, finalCustomColumnOperations, setVisibleRows, isAutoHeight, hideFooterPagination, onProcessRow, setData, sumRows, visibleRows, }) => (react_1.default.createElement(react_1.default.Fragment, null,
49
+ const ContentTable = ({ data, relatedModel, model, id, indexField, indexFieldBasePath, addExistingModel, isEditable, onEditModel, finalCustomColumnOperations, setVisibleRows, isAutoHeight, hideFooterPagination, onProcessRow, setData, sumRows, visibleRows, paginationMode = 'client', paginationModel, setPaginationModel, }) => (react_1.default.createElement(react_1.default.Fragment, null,
49
50
  data.columns && (react_1.default.createElement(Box_1.default, { sx: styles_1.Layout.dataGridFixedHeight },
50
51
  react_1.default.createElement(DataGridBySchemaEditable_1.default, { data: data.data, columns: data.columns, schema: data.schema, model: relatedModel, modelParent: model, modelParentId: id, indexField: indexField, indexFieldBasePath: indexFieldBasePath, addExistingModel: addExistingModel, isEditable: isEditable, onEditModel: onEditModel, customColumnOperations: finalCustomColumnOperations, setVisibleRows: setVisibleRows, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, onProcessRow: onProcessRow, onDataChange: (newData) => {
51
52
  setData(Object.assign(Object.assign({}, data), { data: newData }));
52
- } }))),
53
+ }, paginationModel: paginationMode === 'server' ? paginationModel : undefined, setPaginationModel: paginationMode === 'server' ? setPaginationModel : undefined, rowCount: paginationMode === 'client'
54
+ ? undefined
55
+ : typeof data.rowCount !== undefined
56
+ ? data.rowCount
57
+ : 0 }))),
53
58
  react_1.default.createElement(DataTotals_1.default, { data: data.data, sumRows: sumRows, visibleRows: visibleRows })));
54
- function GenericRelatedModelList({ id, model, relatedModel, columnFields, creatableFields, hiddenFields, usuaria = null, minWidthFields, indexField, addExistingModel, label, onProcessRow, sumRows, customColumnOperations, isEditable = true, isAutoHeight = false, isInBatches = true, indexFieldBasePath, noCardWrapper = false, }) {
59
+ function GenericRelatedModelList({ id, model, relatedModel, columnFields, creatableFields, hiddenFields, usuaria = null, minWidthFields, indexField, addExistingModel, label, onProcessRow, sumRows, customColumnOperations, isEditable = true, isAutoHeight = false, isInBatches = true, indexFieldBasePath, noCardWrapper = false, paginationMode = 'client', defaultFilter, queryParams, }) {
55
60
  const [data, setData] = (0, react_1.useState)(false);
56
61
  const [visibleRows, setVisibleRows] = (0, react_1.useState)([]);
57
62
  const [hideFooterPagination, setHideFooterPagination] = (0, react_1.useState)(false);
63
+ const [paginationModel, setPaginationModel] = (0, react_1.useState)(paginationMode === 'server' ? { page: 0, pageSize: 100 } : undefined);
58
64
  const { onEditModel, onDeleteRelatedModel, serverEndPoint } = (0, APIWrapperContext_1.useAPIWrapper)();
59
65
  const finalCustomColumnOperations = (column) => {
60
66
  if (minWidthFields) {
@@ -68,40 +74,74 @@ function GenericRelatedModelList({ id, model, relatedModel, columnFields, creata
68
74
  return column;
69
75
  };
70
76
  const loadObjectList = () => __awaiter(this, void 0, void 0, function* () {
71
- const loadParams = {
72
- model,
73
- id,
74
- relatedModel,
75
- indexFieldBasePath,
76
- columnFields,
77
- creatableFields,
78
- hiddenFields,
79
- usuaria,
80
- isInBatches,
81
- serverEndPoint,
82
- };
83
- const loadedData = yield (0, api_1.getGenericModelList)(loadParams);
84
- if (loadedData) {
85
- setData(loadedData);
86
- if (isInBatches && loadedData.data.length === 100) {
87
- setHideFooterPagination(true);
88
- (0, api_1.getGenericModelList)(Object.assign(Object.assign({}, loadParams), { loadedSchema: loadedData.schema })).then((lastBatchData) => {
89
- if (lastBatchData) {
90
- setData(Object.assign(Object.assign({}, loadedData), { data: [...loadedData.data, ...lastBatchData.data] }));
91
- setHideFooterPagination(false);
77
+ switch (paginationMode) {
78
+ case 'client':
79
+ const loadParams = {
80
+ model,
81
+ id,
82
+ relatedModel,
83
+ indexFieldBasePath,
84
+ columnFields,
85
+ creatableFields,
86
+ hiddenFields,
87
+ usuaria,
88
+ isInBatches,
89
+ queryParams,
90
+ serverEndPoint,
91
+ };
92
+ const loadedData = yield (0, api_1.getGenericModelList)(loadParams);
93
+ if (loadedData && typeof loadedData !== 'boolean') {
94
+ setData(loadedData);
95
+ if (isInBatches && loadedData.data.length === 100) {
96
+ setHideFooterPagination(true);
97
+ (0, api_1.getGenericModelList)(Object.assign(Object.assign({}, loadParams), { loadedSchema: loadedData.schema })).then((lastBatchData) => {
98
+ if (lastBatchData) {
99
+ setData(Object.assign(Object.assign({}, loadedData), { data: [...loadedData.data, ...lastBatchData.data] }));
100
+ setHideFooterPagination(false);
101
+ }
102
+ });
92
103
  }
93
- });
94
- }
95
- return;
104
+ return;
105
+ }
106
+ console.log('error retrieving data!');
107
+ break;
108
+ case 'server':
109
+ const page = paginationModel ? paginationModel.page : 0;
110
+ const filter = (0, utils_1.mergeFilterItems)(defaultFilter, paginationModel ? paginationModel.filter : undefined);
111
+ const sort = paginationModel ? paginationModel.sort : undefined;
112
+ const loadPaginatedParams = {
113
+ model,
114
+ id,
115
+ relatedModel,
116
+ columnFields,
117
+ hiddenFields,
118
+ page,
119
+ filter,
120
+ sort,
121
+ sumRows,
122
+ queryParams,
123
+ serverEndPoint,
124
+ };
125
+ const paginatedData = yield (0, api_1.getGenericModelList)(loadPaginatedParams);
126
+ if (paginatedData && typeof paginatedData !== 'boolean') {
127
+ setData(paginatedData);
128
+ return;
129
+ }
130
+ console.log('error retrieving data!');
131
+ break;
96
132
  }
97
- console.log('error retrieving data!');
98
133
  });
99
134
  (0, react_1.useEffect)(() => {
100
135
  loadObjectList();
101
- }, []);
102
- return (react_1.default.createElement(react_1.default.Fragment, null, typeof data !== 'boolean' && data.columns && (react_1.default.createElement(react_1.default.Fragment, null, noCardWrapper ? (react_1.default.createElement(ContentTable, { data: data, model: model, relatedModel: relatedModel, id: id, indexField: indexField || '', indexFieldBasePath: indexFieldBasePath, addExistingModel: addExistingModel, isEditable: isEditable, onEditModel: onEditModel, onDeleteRelatedModel: onDeleteRelatedModel, finalCustomColumnOperations: finalCustomColumnOperations, setVisibleRows: setVisibleRows, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, onProcessRow: onProcessRow, setData: setData, sumRows: sumRows, visibleRows: visibleRows })) : (react_1.default.createElement(Card_1.default, { sx: styles_1.Layout.formCard },
136
+ }, [model, defaultFilter, queryParams]);
137
+ (0, react_1.useEffect)(() => {
138
+ if (paginationMode === 'server') {
139
+ loadObjectList();
140
+ }
141
+ }, [paginationModel]);
142
+ return (react_1.default.createElement(react_1.default.Fragment, null, typeof data !== 'boolean' && data.columns && (react_1.default.createElement(react_1.default.Fragment, null, noCardWrapper ? (react_1.default.createElement(ContentTable, { data: data, model: model, relatedModel: relatedModel, id: id, indexField: indexField || '', indexFieldBasePath: indexFieldBasePath, addExistingModel: addExistingModel, isEditable: isEditable, onEditModel: onEditModel, onDeleteRelatedModel: onDeleteRelatedModel, finalCustomColumnOperations: finalCustomColumnOperations, setVisibleRows: setVisibleRows, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, onProcessRow: onProcessRow, setData: setData, sumRows: sumRows, visibleRows: visibleRows, paginationMode: paginationMode, paginationModel: paginationModel, setPaginationModel: setPaginationModel })) : (react_1.default.createElement(Card_1.default, { sx: styles_1.Layout.formCard },
103
143
  react_1.default.createElement(CardHeader_1.default, { title: label }),
104
144
  react_1.default.createElement(CardContent_1.default, null,
105
- react_1.default.createElement(ContentTable, { data: data, model: model, relatedModel: relatedModel, id: id, indexField: indexField || '', indexFieldBasePath: indexFieldBasePath, addExistingModel: addExistingModel, isEditable: isEditable, onEditModel: onEditModel, onDeleteRelatedModel: onDeleteRelatedModel, finalCustomColumnOperations: finalCustomColumnOperations, setVisibleRows: setVisibleRows, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, onProcessRow: onProcessRow, setData: setData, sumRows: sumRows, visibleRows: visibleRows }))))))));
145
+ react_1.default.createElement(ContentTable, { data: data, model: model, relatedModel: relatedModel, id: id, indexField: indexField || '', indexFieldBasePath: indexFieldBasePath, addExistingModel: addExistingModel, isEditable: isEditable, onEditModel: onEditModel, onDeleteRelatedModel: onDeleteRelatedModel, finalCustomColumnOperations: finalCustomColumnOperations, setVisibleRows: setVisibleRows, isAutoHeight: isAutoHeight, hideFooterPagination: hideFooterPagination, onProcessRow: onProcessRow, setData: setData, sumRows: sumRows, visibleRows: visibleRows, paginationMode: paginationMode, paginationModel: paginationModel, setPaginationModel: setPaginationModel }))))))));
106
146
  }
107
147
  exports.default = GenericRelatedModelList;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drf-react-by-schema",
3
- "version": "0.8.6",
3
+ "version": "0.8.8",
4
4
  "description": "Components and Tools for building a React App having Django Rest Framework (DRF) as server",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",