drf-react-by-schema 0.9.0 → 0.10.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/dist/api.d.ts CHANGED
@@ -63,6 +63,7 @@ export interface GetGenericModelListProps {
63
63
  columnFields: string[];
64
64
  hiddenFields?: string[];
65
65
  creatableFields?: string[];
66
+ disabledFields?: string[];
66
67
  isInBatches?: boolean;
67
68
  loadedSchema?: SchemaType | boolean;
68
69
  loadedModelOptions?: modelOptionsType | boolean;
@@ -82,7 +83,7 @@ interface SumRowsItem {
82
83
  suffix?: string;
83
84
  isCount?: boolean;
84
85
  }
85
- export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema, loadedModelOptions, page, filter, queryParams, sort, sumRows, }: GetGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
86
+ export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, disabledFields, isInBatches, loadedSchema, loadedModelOptions, page, filter, queryParams, sort, sumRows, }: GetGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
86
87
  export declare const getGenericModel: ({ model, serverEndPoint, id, relatedModel, relatedModelId, }: {
87
88
  model: string;
88
89
  serverEndPoint: serverEndPointType | null;
package/dist/api.js CHANGED
@@ -402,7 +402,7 @@ const addExistingRelatedModel = ({ model, serverEndPoint, id, data, }) => __awai
402
402
  return response;
403
403
  });
404
404
  exports.addExistingRelatedModel = addExistingRelatedModel;
405
- const getDataGridColumns = (schema, columnFields = [], hiddenFields = [], creatableFields = []) => {
405
+ const getDataGridColumns = (schema, columnFields = [], hiddenFields = [], creatableFields = [], disabledFields = []) => {
406
406
  if (!schema) {
407
407
  return false;
408
408
  }
@@ -418,6 +418,7 @@ const getDataGridColumns = (schema, columnFields = [], hiddenFields = [], creata
418
418
  headerName: schema[field].label,
419
419
  hide: hiddenFields.includes(field),
420
420
  creatable: creatableFields.includes(field) || schema[field].creatable,
421
+ disabled: disabledFields.includes(field),
421
422
  width: 100,
422
423
  };
423
424
  return column;
@@ -565,7 +566,7 @@ const signUp = (data, serverEndPoint) => __awaiter(void 0, void 0, void 0, funct
565
566
  }
566
567
  });
567
568
  exports.signUp = signUp;
568
- 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* () {
569
+ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], disabledFields = [], isInBatches = false, loadedSchema, loadedModelOptions, page, filter, queryParams = [], sort, sumRows, }) => __awaiter(void 0, void 0, void 0, function* () {
569
570
  let path = `${model}/${id}`;
570
571
  let schemaPath = `${model}/`;
571
572
  let schema = loadedSchema;
@@ -623,7 +624,7 @@ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = ''
623
624
  }
624
625
  schema = options.schema;
625
626
  modelOptions = options.modelOptions;
626
- columns = getDataGridColumns(schema, columnFields, hiddenFields, creatableFields);
627
+ columns = getDataGridColumns(schema, columnFields, hiddenFields, creatableFields, disabledFields);
627
628
  if (!columns) {
628
629
  return false;
629
630
  }
@@ -168,6 +168,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
168
168
  }
169
169
  column.editable =
170
170
  isEditable &&
171
+ !col.disabled &&
171
172
  (!schema[col.field].read_only ||
172
173
  ['field', 'nested object'].includes(schema[col.field].type));
173
174
  if (['field', 'nested object'].includes(schema[col.field].type)) {
@@ -184,7 +185,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
184
185
  column.filterOperators = (0, utils_2.quantityOnlyOperators)({
185
186
  type: 'date',
186
187
  });
187
- if (isEditable) {
188
+ if (isEditable && !col.disabled) {
188
189
  column.renderEditCell = (params) => (react_1.default.createElement(GridDateInput_1.GridDateInput, Object.assign({}, params, { column: column, dateViews: schema[col.field].date_views })));
189
190
  break;
190
191
  }
@@ -199,7 +200,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
199
200
  break;
200
201
  case 'nested object':
201
202
  column.minWidth = 150;
202
- if (isEditable) {
203
+ if (isEditable && !col.disabled) {
203
204
  column.valueFormatter = (params) => {
204
205
  return !params.value ? '' : params.value.label;
205
206
  };
@@ -216,7 +217,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
216
217
  break;
217
218
  case 'field':
218
219
  column.orderable = false;
219
- if (isEditable) {
220
+ if (isEditable && !col.disabled) {
220
221
  column.minWidth = 300;
221
222
  column.valueFormatter = (params) => {
222
223
  return !params.value || !Array.isArray(params.value)
@@ -234,7 +235,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
234
235
  };
235
236
  break;
236
237
  case 'choice':
237
- if (isEditable) {
238
+ if (isEditable && !col.disabled) {
238
239
  column.minWidth = 150;
239
240
  column.valueFormatter = (params) => {
240
241
  return !params.value ? '' : params.value.display_name;
@@ -251,7 +252,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
251
252
  };
252
253
  break;
253
254
  case 'boolean':
254
- if (isEditable) {
255
+ if (isEditable && !col.disabled) {
255
256
  column.valueFormatter = (params) => {
256
257
  return params.value ? 'Sim' : 'Não';
257
258
  };
@@ -277,7 +278,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
277
278
  maximumFractionDigits: decimalScale,
278
279
  });
279
280
  };
280
- if (isEditable) {
281
+ if (isEditable && !col.disabled) {
281
282
  column.renderEditCell = (params) => (react_1.default.createElement(GridDecimalInput_1.GridDecimalInput, Object.assign({}, params, { decimalPlaces: decimalScale, isCurrency: isCurrency, prefix: prefix, suffix: suffix, column: column })));
282
283
  }
283
284
  column.filterOperators = (0, utils_2.quantityOnlyOperators)({
@@ -314,6 +315,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
314
315
  return (react_1.default.createElement(LinkComponent, { to: `${indexFieldBasePath}${targetId}`, state: stateToLink }, params.formattedValue));
315
316
  };
316
317
  if (isEditable &&
318
+ !col.disabled &&
317
319
  optionsAC.current &&
318
320
  col.field in optionsAC.current &&
319
321
  addExistingModel) {
@@ -339,7 +341,7 @@ const DataGridBySchemaEditable = (0, react_1.forwardRef)((_a, ref) => {
339
341
  const formattedValue = new stringMask(column.patternFormat, {}).apply(params.value);
340
342
  return formattedValue;
341
343
  };
342
- if (isEditable) {
344
+ if (isEditable && !col.disabled) {
343
345
  column.renderEditCell = (params) => (react_1.default.createElement(GridPatternInput_1.GridPatternInput, Object.assign({}, params, { patternFormat: column.patternFormat })));
344
346
  }
345
347
  }
@@ -7,6 +7,7 @@ interface GenericModelListProps {
7
7
  columnFields: string[];
8
8
  hiddenFields?: string[];
9
9
  creatableFields?: string[];
10
+ disabledFields?: string[];
10
11
  minWidthFields?: Record<string, number>;
11
12
  indexField: string;
12
13
  indexFieldBasePath: string;
@@ -25,5 +26,5 @@ interface GenericModelListProps {
25
26
  defaultFilter?: GridFilterModel;
26
27
  queryParams?: string[];
27
28
  }
28
- declare const GenericModelList: ({ model, columnFields, hiddenFields, creatableFields, minWidthFields, indexField, indexFieldBasePath, addExistingModel, onProcessRow, customColumnOperations, customLinkDestination, isEditable, hasBulkSelect, sumRows, isAutoHeight, forceReload, LinkComponent, hasHeader, paginationMode, defaultFilter, queryParams, }: GenericModelListProps) => JSX.Element;
29
+ declare const GenericModelList: ({ model, columnFields, hiddenFields, creatableFields, disabledFields, minWidthFields, indexField, indexFieldBasePath, addExistingModel, onProcessRow, customColumnOperations, customLinkDestination, isEditable, hasBulkSelect, sumRows, isAutoHeight, forceReload, LinkComponent, hasHeader, paginationMode, defaultFilter, queryParams, }: GenericModelListProps) => JSX.Element;
29
30
  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 = ({ model, columnFields, hiddenFields = [], creatableFields, minWidthFields, indexField, indexFieldBasePath, addExistingModel, onProcessRow, customColumnOperations, customLinkDestination, isEditable, hasBulkSelect = false, sumRows, isAutoHeight = true, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', defaultFilter, queryParams, }) => {
51
+ const GenericModelList = ({ model, columnFields, hiddenFields = [], creatableFields, disabledFields, minWidthFields, indexField, indexFieldBasePath, addExistingModel, onProcessRow, customColumnOperations, customLinkDestination, isEditable, hasBulkSelect = false, sumRows, isAutoHeight = true, forceReload = false, LinkComponent = null, hasHeader = false, paginationMode = 'client', defaultFilter, queryParams, }) => {
52
52
  const { serverEndPoint, isInBatches, firstBatchLength } = (0, DRFReactBySchemaContext_1.useDRFReactBySchema)();
53
53
  const { onEditModel, handleLoading } = (0, APIWrapperContext_1.useAPIWrapper)();
54
54
  const [data, setData] = (0, react_1.useState)(false);
@@ -76,6 +76,7 @@ const GenericModelList = ({ model, columnFields, hiddenFields = [], creatableFie
76
76
  columnFields,
77
77
  hiddenFields,
78
78
  creatableFields,
79
+ disabledFields,
79
80
  isInBatches,
80
81
  queryParams,
81
82
  };
@@ -106,6 +107,7 @@ const GenericModelList = ({ model, columnFields, hiddenFields = [], creatableFie
106
107
  columnFields,
107
108
  hiddenFields,
108
109
  creatableFields,
110
+ disabledFields,
109
111
  page,
110
112
  filter,
111
113
  queryParams,
@@ -9,6 +9,7 @@ interface GenericRelatedModelListProps {
9
9
  columnFields: string[];
10
10
  hiddenFields: string[];
11
11
  creatableFields: string[];
12
+ disabledFields: string[];
12
13
  usuaria?: Item | null;
13
14
  minWidthFields?: Record<string, number>;
14
15
  indexField?: string;
@@ -27,5 +28,5 @@ interface GenericRelatedModelListProps {
27
28
  defaultFilter?: GridFilterModel;
28
29
  queryParams?: string[];
29
30
  }
30
- export default function GenericRelatedModelList({ model, id, relatedModel, columnFields, hiddenFields, creatableFields, usuaria, minWidthFields, indexField, indexFieldBasePath, addExistingModel, label, onProcessRow, customColumnOperations, isEditable, hasBulkSelect, sumRows, isAutoHeight, isInBatches, noCardWrapper, paginationMode, defaultFilter, queryParams, }: GenericRelatedModelListProps): JSX.Element;
31
+ export default function GenericRelatedModelList({ model, id, relatedModel, columnFields, hiddenFields, creatableFields, disabledFields, usuaria, minWidthFields, indexField, indexFieldBasePath, addExistingModel, label, onProcessRow, customColumnOperations, isEditable, hasBulkSelect, sumRows, isAutoHeight, isInBatches, noCardWrapper, paginationMode, defaultFilter, queryParams, }: GenericRelatedModelListProps): JSX.Element;
31
32
  export {};
@@ -56,7 +56,7 @@ const ContentTable = ({ data, relatedModel, model, id, indexField, indexFieldBas
56
56
  ? data.rowCount
57
57
  : 0 }))),
58
58
  react_1.default.createElement(DataTotals_1.default, { data: data.data, sumRows: sumRows, visibleRows: visibleRows })));
59
- function GenericRelatedModelList({ model, id, relatedModel, columnFields, hiddenFields, creatableFields, usuaria = null, minWidthFields, indexField, indexFieldBasePath, addExistingModel, label, onProcessRow, customColumnOperations, isEditable = true, hasBulkSelect = false, sumRows, isAutoHeight = false, isInBatches = true, noCardWrapper = false, paginationMode = 'client', defaultFilter, queryParams, }) {
59
+ function GenericRelatedModelList({ model, id, relatedModel, columnFields, hiddenFields, creatableFields, disabledFields, usuaria = null, minWidthFields, indexField, indexFieldBasePath, addExistingModel, label, onProcessRow, customColumnOperations, isEditable = true, hasBulkSelect = false, sumRows, isAutoHeight = false, isInBatches = true, noCardWrapper = false, paginationMode = 'client', defaultFilter, queryParams, }) {
60
60
  const [data, setData] = (0, react_1.useState)(false);
61
61
  const [visibleRows, setVisibleRows] = (0, react_1.useState)([]);
62
62
  const [hideFooterPagination, setHideFooterPagination] = (0, react_1.useState)(false);
@@ -83,6 +83,7 @@ function GenericRelatedModelList({ model, id, relatedModel, columnFields, hidden
83
83
  indexFieldBasePath,
84
84
  columnFields,
85
85
  creatableFields,
86
+ disabledFields,
86
87
  hiddenFields,
87
88
  usuaria,
88
89
  isInBatches,
@@ -115,6 +116,8 @@ function GenericRelatedModelList({ model, id, relatedModel, columnFields, hidden
115
116
  relatedModel,
116
117
  columnFields,
117
118
  hiddenFields,
119
+ creatableFields,
120
+ disabledFields,
118
121
  page,
119
122
  filter,
120
123
  sort,
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { SxProps } from '@mui/material';
3
+ import { Item, SchemaType } from '../../utils';
4
+ import { OptionsACType } from '../../context/APIWrapperContext';
5
+ interface FieldLayout {
6
+ title?: string;
7
+ rows?: (string | string[])[];
8
+ CustomElement?: React.ReactNode;
9
+ }
10
+ interface DetailBySchemaProps {
11
+ values: Item;
12
+ schema: SchemaType;
13
+ labelKey?: string;
14
+ optionsAC?: OptionsACType;
15
+ setOptionsAC?: (x: OptionsACType) => void;
16
+ decimalScale?: number;
17
+ fieldsLayout?: FieldLayout[];
18
+ sxRow?: SxProps;
19
+ sxRowMultiple?: SxProps;
20
+ sxField?: SxProps;
21
+ sxLabel?: SxProps;
22
+ sxValue?: SxProps;
23
+ sxValueList?: SxProps;
24
+ sxValueListItem?: SxProps;
25
+ sxValueListItemText?: SxProps;
26
+ }
27
+ export default function DetailBySchema({ values, schema, labelKey, optionsAC, setOptionsAC, decimalScale, fieldsLayout: fieldsLayoutInitial, sxRow, sxRowMultiple, sxField, sxLabel, sxValue, sxValueList, sxValueListItem, sxValueListItemText, }: DetailBySchemaProps): JSX.Element;
28
+ export {};
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const Box_1 = __importDefault(require("@mui/material/Box"));
31
+ const Card_1 = __importDefault(require("@mui/material/Card"));
32
+ const CardHeader_1 = __importDefault(require("@mui/material/CardHeader"));
33
+ const CardContent_1 = __importDefault(require("@mui/material/CardContent"));
34
+ const CircularProgress_1 = __importDefault(require("@mui/material/CircularProgress"));
35
+ const DetailFieldBySchema_1 = __importDefault(require("./DetailFieldBySchema"));
36
+ const styles_1 = require("../../styles");
37
+ const APIWrapperContext_1 = require("../../context/APIWrapperContext");
38
+ function DetailBySchema({ values, schema, labelKey = 'label', optionsAC, setOptionsAC, decimalScale = 2, fieldsLayout: fieldsLayoutInitial, sxRow, sxRowMultiple, sxField, sxLabel, sxValue, sxValueList, sxValueListItem, sxValueListItemText, }) {
39
+ const { getAutoComplete } = (0, APIWrapperContext_1.useAPIWrapper)();
40
+ const [fieldsLayout, setFieldsLayout] = (0, react_1.useState)([]);
41
+ const [localOptionsAC, setLocalOptionsAC] = (0, react_1.useState)(undefined);
42
+ const getColumns = () => {
43
+ if (fieldsLayoutInitial && fieldsLayoutInitial.length > 0) {
44
+ return fieldsLayoutInitial;
45
+ }
46
+ const rows = [];
47
+ for (const [key, field] of Object.entries(schema)) {
48
+ if (['field', 'nested object'].includes(field.type)) {
49
+ rows.push(key);
50
+ continue;
51
+ }
52
+ }
53
+ return [{ rows }];
54
+ };
55
+ (0, react_1.useEffect)(() => {
56
+ const newFieldsLayout = getColumns();
57
+ setFieldsLayout(newFieldsLayout);
58
+ }, []);
59
+ if (fieldsLayout.length === 0) {
60
+ return (react_1.default.createElement(Card_1.default, { sx: styles_1.Layout.formCard },
61
+ react_1.default.createElement(CardContent_1.default, null,
62
+ react_1.default.createElement(Box_1.default, { sx: styles_1.Layout.loadingBoxWhite },
63
+ react_1.default.createElement(CircularProgress_1.default, null)))));
64
+ }
65
+ return (react_1.default.createElement(react_1.default.Fragment, null, fieldsLayout.map((section, sectionIndex) => {
66
+ return (react_1.default.createElement(Card_1.default, { sx: styles_1.Layout.formCard, key: `section_${sectionIndex}` },
67
+ section.title && react_1.default.createElement(CardHeader_1.default, { title: section.title }),
68
+ react_1.default.createElement(CardContent_1.default, null,
69
+ section.CustomElement && react_1.default.createElement(react_1.default.Fragment, null, section.CustomElement),
70
+ section.rows && (react_1.default.createElement(react_1.default.Fragment, null, section.rows.map((row, rowIndex) => {
71
+ if (typeof row === 'string') {
72
+ const field = row;
73
+ return (react_1.default.createElement(Box_1.default, { key: field, sx: sxRow },
74
+ react_1.default.createElement(DetailFieldBySchema_1.default, { name: field, value: values[field], schema: schema, labelKey: labelKey, decimalScale: decimalScale, sxField: sxField, sxLabel: sxLabel, sxValue: sxValue, sxValueList: sxValueList, sxValueListItem: sxValueListItem, sxValueListItemText: sxValueListItemText })));
75
+ }
76
+ return (react_1.default.createElement(Box_1.default, { key: `row_${rowIndex}`, sx: sxRowMultiple }, row.map((field, i, j) => (react_1.default.createElement(react_1.default.Fragment, { key: field },
77
+ react_1.default.createElement(DetailFieldBySchema_1.default, { name: field, value: values[field], schema: schema, labelKey: labelKey, decimalScale: decimalScale, sxField: sxField, sxLabel: sxLabel, sxValue: sxValue, sxValueList: sxValueList, sxValueListItem: sxValueListItem, sxValueListItemText: sxValueListItemText }))))));
78
+ }))))));
79
+ })));
80
+ }
81
+ exports.default = DetailBySchema;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { DetailFieldBySchemaProps } from '../../utils';
3
+ export default function DetailFieldBySchema({ name, value, schema, labelKey, decimalScale, optionIdKey, optionLabelKey, sxField, sxLabel, sxValue, sxValueList, sxValueListItem, sxValueListItemText, }: DetailFieldBySchemaProps): JSX.Element;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const moment_1 = __importDefault(require("moment"));
8
+ const Typography_1 = __importDefault(require("@mui/material/Typography"));
9
+ const Box_1 = __importDefault(require("@mui/material/Box"));
10
+ const List_1 = __importDefault(require("@mui/material/List"));
11
+ const ListItem_1 = __importDefault(require("@mui/material/ListItem"));
12
+ const ListItemText_1 = __importDefault(require("@mui/material/ListItemText"));
13
+ function DetailFieldBySchema({ name, value, schema, labelKey = 'label', decimalScale = 2, optionIdKey = 'value', optionLabelKey = 'display_name', sxField, sxLabel, sxValue, sxValueList, sxValueListItem, sxValueListItemText, }) {
14
+ if (!value) {
15
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
16
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
17
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, "-")));
18
+ }
19
+ switch (schema[name].type) {
20
+ case 'date':
21
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
22
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
23
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, (0, moment_1.default)(value).format('DD/MM/YYYY'))));
24
+ case 'datetime':
25
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
26
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
27
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, (0, moment_1.default)(value).format('DD/MM/YYYY HH:mm'))));
28
+ case 'nested object':
29
+ case 'field':
30
+ const multiple = schema[name].many || false;
31
+ if (multiple) {
32
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
33
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
34
+ react_1.default.createElement(List_1.default, { sx: sxValueList }, value.map((singleValue) => (react_1.default.createElement(ListItem_1.default, { key: singleValue.id, sx: sxValueListItem },
35
+ react_1.default.createElement(ListItemText_1.default, { sx: sxValueListItemText }, singleValue[labelKey])))))));
36
+ }
37
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
38
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
39
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, value[labelKey])));
40
+ case 'choice':
41
+ const multipleChoice = schema[name].many || false;
42
+ if (multipleChoice) {
43
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
44
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
45
+ react_1.default.createElement(List_1.default, { sx: sxValueList }, value.map((singleValue) => (react_1.default.createElement(ListItem_1.default, { key: singleValue[optionIdKey], sx: sxValueListItem },
46
+ react_1.default.createElement(ListItemText_1.default, { sx: sxValueListItemText }, singleValue[optionLabelKey])))))));
47
+ }
48
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
49
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
50
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, value.display_name)));
51
+ case 'boolean':
52
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
53
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
54
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, value ? 'Sim' : 'Não')));
55
+ case 'decimal':
56
+ case 'float':
57
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
58
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
59
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, value.toLocaleString())));
60
+ case 'number':
61
+ case 'integer':
62
+ case 'password':
63
+ default:
64
+ return (react_1.default.createElement(Box_1.default, { sx: sxField },
65
+ react_1.default.createElement(Typography_1.default, { variant: "h5", sx: sxLabel }, schema[name].label),
66
+ react_1.default.createElement(Typography_1.default, { variant: "body2", sx: sxValue }, value)));
67
+ }
68
+ }
69
+ exports.default = DetailFieldBySchema;
@@ -45,7 +45,7 @@ function FieldBySchema(_a) {
45
45
  case 'field':
46
46
  const relatedEditable = schema[name].related_editable;
47
47
  const multiple = schema[name].many || false;
48
- return (react_1.default.createElement(EditableAutocompleteFieldBySchema_1.default, Object.assign({ name: name, schema: schema, control: control, errors: errors, setValue: setValue, getValues: getValues, fieldKey: fieldKey, labelKey: labelKey, index: index, optionsAC: optionsAC, optionsModel: optionsModel, getOptionLabel: getOptionLabel, renderOption: renderOption, onEditModel: relatedEditable ? onEditModel : null, multiple: multiple, sx: sx }, other)));
48
+ return (react_1.default.createElement(EditableAutocompleteFieldBySchema_1.default, Object.assign({ name: name, schema: schema, control: control, errors: errors, setValue: setValue, getValues: getValues, fieldKey: fieldKey, labelKey: labelKey, index: index, optionsAC: optionsAC, optionsModel: optionsModel, getOptionLabel: getOptionLabel, renderOption: renderOption, onEditModel: relatedEditable ? onEditModel : undefined, multiple: multiple, sx: sx }, other)));
49
49
  case 'choice':
50
50
  return (react_1.default.createElement(AutocompleteFieldBySchema_1.default, { index: index, name: name, schema: schema, control: control, errors: errors, fieldKey: fieldKey, optionIdKey: "value", optionLabelKey: "display_name", options: options, isSemaphoric: isSemaphoric, label: label, sx: sx }));
51
51
  case 'boolean':
package/dist/index.d.ts CHANGED
@@ -19,4 +19,6 @@ import DesktopDateTimePickerBySchema from './components/forms/inputs/DesktopDate
19
19
  import EditableAutocompleteFieldBySchema from './components/forms/inputs/EditableAutocompleteFieldBySchema';
20
20
  import AutocompleteFieldBySchema from './components/forms/inputs/AutocompleteFieldBySchema';
21
21
  import FloatFieldBySchema from './components/forms/inputs/FloatFieldBySchema';
22
- export { DRFReactBySchemaProvider, useAPIWrapper, useDRFReactBySchema, Form, FormBySchema, DialogFormBySchema, DataGridBySchemaEditable, GenericModelList, GenericRelatedModelList, DataTotals, DialogActions, FieldBySchema, TextFieldBySchema, BooleanFieldBySchema, DesktopDatePickerBySchema, DesktopDateTimePickerBySchema, EditableAutocompleteFieldBySchema, AutocompleteFieldBySchema, FloatFieldBySchema, updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat, clearJWT, hasJWT, slugToCamelCase, };
22
+ import DetailBySchema from './components/details/DetailBySchema';
23
+ import DetailFieldBySchema from './components/details/DetailFieldBySchema';
24
+ export { DRFReactBySchemaProvider, useAPIWrapper, useDRFReactBySchema, Form, FormBySchema, DialogFormBySchema, DataGridBySchemaEditable, GenericModelList, GenericRelatedModelList, DataTotals, DialogActions, FieldBySchema, TextFieldBySchema, BooleanFieldBySchema, DesktopDatePickerBySchema, DesktopDateTimePickerBySchema, EditableAutocompleteFieldBySchema, AutocompleteFieldBySchema, FloatFieldBySchema, DetailBySchema, DetailFieldBySchema, updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat, clearJWT, hasJWT, slugToCamelCase, };
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.slugToCamelCase = exports.hasJWT = exports.clearJWT = exports.getPatternFormat = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = exports.getGenericModel = exports.getGenericModelList = exports.isLoggedIn = exports.setAuthToken = exports.loginByPayload = exports.getAutoComplete = exports.addExistingRelatedModel = exports.updateDataBySchema = exports.createOrUpdateData = exports.deleteData = exports.createData = exports.partialUpdateData = exports.updateData = exports.FloatFieldBySchema = exports.AutocompleteFieldBySchema = exports.EditableAutocompleteFieldBySchema = exports.DesktopDateTimePickerBySchema = exports.DesktopDatePickerBySchema = exports.BooleanFieldBySchema = exports.TextFieldBySchema = exports.FieldBySchema = exports.DialogActions = exports.DataTotals = exports.GenericRelatedModelList = exports.GenericModelList = exports.DataGridBySchemaEditable = exports.DialogFormBySchema = exports.FormBySchema = exports.Form = exports.useDRFReactBySchema = exports.useAPIWrapper = exports.DRFReactBySchemaProvider = void 0;
6
+ exports.slugToCamelCase = exports.hasJWT = exports.clearJWT = exports.getPatternFormat = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = exports.getGenericModel = exports.getGenericModelList = exports.isLoggedIn = exports.setAuthToken = exports.loginByPayload = exports.getAutoComplete = exports.addExistingRelatedModel = exports.updateDataBySchema = exports.createOrUpdateData = exports.deleteData = exports.createData = exports.partialUpdateData = exports.updateData = exports.DetailFieldBySchema = exports.DetailBySchema = exports.FloatFieldBySchema = exports.AutocompleteFieldBySchema = exports.EditableAutocompleteFieldBySchema = exports.DesktopDateTimePickerBySchema = exports.DesktopDatePickerBySchema = exports.BooleanFieldBySchema = exports.TextFieldBySchema = exports.FieldBySchema = exports.DialogActions = exports.DataTotals = exports.GenericRelatedModelList = exports.GenericModelList = exports.DataGridBySchemaEditable = exports.DialogFormBySchema = exports.FormBySchema = exports.Form = exports.useDRFReactBySchema = exports.useAPIWrapper = exports.DRFReactBySchemaProvider = void 0;
7
7
  // Methods:
8
8
  const api_1 = require("./api");
9
9
  Object.defineProperty(exports, "updateData", { enumerable: true, get: function () { return api_1.updateData; } });
@@ -73,3 +73,8 @@ const AutocompleteFieldBySchema_1 = __importDefault(require("./components/forms/
73
73
  exports.AutocompleteFieldBySchema = AutocompleteFieldBySchema_1.default;
74
74
  const FloatFieldBySchema_1 = __importDefault(require("./components/forms/inputs/FloatFieldBySchema"));
75
75
  exports.FloatFieldBySchema = FloatFieldBySchema_1.default;
76
+ // DetailComponents
77
+ const DetailBySchema_1 = __importDefault(require("./components/details/DetailBySchema"));
78
+ exports.DetailBySchema = DetailBySchema_1.default;
79
+ const DetailFieldBySchema_1 = __importDefault(require("./components/details/DetailFieldBySchema"));
80
+ exports.DetailFieldBySchema = DetailFieldBySchema_1.default;
@@ -10,14 +10,14 @@ exports.content = {
10
10
  pr: 3,
11
11
  pl: 3,
12
12
  pt: 2,
13
- pb: 0
13
+ pb: 0,
14
14
  };
15
15
  exports.main = Object.assign(Object.assign({}, exports.content), { ml: 4 });
16
16
  exports.flexRow = {
17
17
  display: 'flex',
18
18
  flexDirection: 'row',
19
19
  justifyContent: 'space-between',
20
- alignItems: 'center'
20
+ alignItems: 'center',
21
21
  };
22
22
  exports.topBar = Object.assign(Object.assign({}, exports.flexRow), { width: '100%', pl: 3, pr: 6 });
23
23
  exports.loadingBox = Object.assign(Object.assign({}, exports.flexRow), { height: '100%', backgroundColor: '#ccc', justifyContent: 'center' });
@@ -29,29 +29,29 @@ exports.flexRowGrow = Object.assign(Object.assign({}, exports.flexRow), { flexGr
29
29
  exports.topBarOverList = Object.assign(Object.assign({}, exports.flexRowGrow), { mb: 2 });
30
30
  exports.dataGrid = {
31
31
  height: 'calc(100vh - 180px)',
32
- mt: 2
32
+ mt: 2,
33
33
  };
34
34
  exports.dataGridWithTabs = Object.assign(Object.assign({}, exports.dataGrid), { mt: 0 });
35
35
  exports.dataGridFixedHeight = Object.assign(Object.assign({}, exports.dataGrid), { height: 400 });
36
36
  exports.fullWidthButton = {
37
37
  mt: 3,
38
- width: '100%'
38
+ width: '100%',
39
39
  };
40
40
  exports.formCard = {
41
41
  width: '100%',
42
42
  backgroundColor: theme_1.default.palette.formCard.main,
43
43
  mt: 2,
44
- mb: 2
44
+ mb: 2,
45
45
  };
46
46
  exports.formCardContent = {
47
47
  maxHeight: 350,
48
- overflow: 'scroll'
48
+ overflow: 'scroll',
49
49
  };
50
50
  exports.metabaseAppEmbed = {
51
- height: 1700
51
+ height: 1700,
52
52
  };
53
53
  exports.geoPicker = {
54
54
  height: 350,
55
55
  width: '100%',
56
- mt: 0
56
+ mt: 0,
57
57
  };
package/dist/utils.d.ts CHANGED
@@ -54,12 +54,14 @@ export interface Field {
54
54
  interface GridBySchemaColDef extends GridColDef {
55
55
  isIndexField?: boolean;
56
56
  creatable?: boolean;
57
+ disabled?: boolean;
57
58
  orderable?: boolean;
58
59
  patternFormat?: string;
59
60
  }
60
61
  interface GridActionsBySchemaColDef extends GridActionsColDef {
61
62
  isIndexField?: boolean;
62
63
  creatable?: boolean;
64
+ disabled?: boolean;
63
65
  orderable?: boolean;
64
66
  patternFormat?: string;
65
67
  }
@@ -108,6 +110,21 @@ export interface FieldBySchemaProps {
108
110
  optionIdKey?: string;
109
111
  optionLabelKey?: string;
110
112
  }
113
+ export interface DetailFieldBySchemaProps {
114
+ name: string;
115
+ schema: SchemaType;
116
+ value: any;
117
+ labelKey?: string;
118
+ decimalScale?: number;
119
+ optionIdKey?: string;
120
+ optionLabelKey?: string;
121
+ sxField?: SxProps;
122
+ sxLabel?: SxProps;
123
+ sxValue?: SxProps;
124
+ sxValueList?: SxProps;
125
+ sxValueListItem?: SxProps;
126
+ sxValueListItemText?: SxProps;
127
+ }
111
128
  export declare const emptyByType: any;
112
129
  export declare const getChoiceByValue: (value: number | string, choices: Choice[] | undefined) => string | null | undefined;
113
130
  export declare const populateValues: ({ data, schema }: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drf-react-by-schema",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
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",