drf-react-by-schema 0.20.10 → 0.21.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.
Files changed (68) hide show
  1. package/dist/@types/index.d.ts +4 -1
  2. package/dist/@types/index.d.ts.map +1 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +2 -9
  5. package/dist/components/DataGridBySchemaEditable/DataGridDesktop.d.ts.map +1 -1
  6. package/dist/components/DataGridBySchemaEditable/DataGridDesktop.js +27 -29
  7. package/dist/components/DataGridBySchemaEditable/DataGridMobile.d.ts.map +1 -1
  8. package/dist/components/DataGridBySchemaEditable/DataGridMobile.js +1 -3
  9. package/dist/components/DataGridBySchemaEditable.d.ts.map +1 -1
  10. package/dist/components/DataGridBySchemaEditable.js +1 -0
  11. package/dist/components/GenericModelList.js +7 -7
  12. package/dist/components/GenericRelatedModelList.d.ts.map +1 -1
  13. package/dist/components/GenericRelatedModelList.js +6 -15
  14. package/dist/components/details/DetailBySchema.d.ts.map +1 -1
  15. package/dist/components/details/DetailBySchema.js +2 -2
  16. package/dist/components/details/DetailFieldBySchema.d.ts +1 -1
  17. package/dist/components/details/DetailFieldBySchema.d.ts.map +1 -1
  18. package/dist/components/details/DetailFieldBySchema.js +5 -1
  19. package/dist/components/forms/DialogFormBySchema.d.ts +1 -1
  20. package/dist/components/forms/DialogFormBySchema.d.ts.map +1 -1
  21. package/dist/components/forms/DialogFormBySchema.js +1 -1
  22. package/dist/components/forms/FieldBySchema.d.ts.map +1 -1
  23. package/dist/components/forms/FieldBySchema.js +4 -2
  24. package/dist/components/forms/FormBySchema.d.ts.map +1 -1
  25. package/dist/components/forms/FormBySchema.js +3 -3
  26. package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts +1 -1
  27. package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts.map +1 -1
  28. package/dist/components/forms/inputs/AutocompleteFieldBySchema.js +10 -6
  29. package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts +1 -1
  30. package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts.map +1 -1
  31. package/dist/components/forms/inputs/BooleanFieldBySchema.js +8 -3
  32. package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts +1 -1
  33. package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts.map +1 -1
  34. package/dist/components/forms/inputs/DesktopDatePickerBySchema.js +9 -4
  35. package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts +1 -1
  36. package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts.map +1 -1
  37. package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.js +8 -3
  38. package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.d.ts.map +1 -1
  39. package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.js +19 -14
  40. package/dist/components/forms/inputs/FileFieldBySchema.d.ts +1 -1
  41. package/dist/components/forms/inputs/FileFieldBySchema.d.ts.map +1 -1
  42. package/dist/components/forms/inputs/FileFieldBySchema.js +14 -10
  43. package/dist/components/forms/inputs/FloatFieldBySchema.d.ts +1 -1
  44. package/dist/components/forms/inputs/FloatFieldBySchema.d.ts.map +1 -1
  45. package/dist/components/forms/inputs/FloatFieldBySchema.js +13 -9
  46. package/dist/components/forms/inputs/PatternFieldBySchema.d.ts +1 -1
  47. package/dist/components/forms/inputs/PatternFieldBySchema.d.ts.map +1 -1
  48. package/dist/components/forms/inputs/PatternFieldBySchema.js +8 -4
  49. package/dist/components/forms/inputs/TextFieldBySchema.d.ts +1 -1
  50. package/dist/components/forms/inputs/TextFieldBySchema.d.ts.map +1 -1
  51. package/dist/components/forms/inputs/TextFieldBySchema.js +8 -4
  52. package/dist/context/APIWrapper.d.ts +1 -1
  53. package/dist/context/APIWrapper.d.ts.map +1 -1
  54. package/dist/context/APIWrapper.js +175 -144
  55. package/dist/context/APIWrapperContext.d.ts +7 -8
  56. package/dist/context/APIWrapperContext.d.ts.map +1 -1
  57. package/dist/context/APIWrapperContext.js +1 -1
  58. package/dist/context/DRFReactBySchemaProvider.d.ts.map +1 -1
  59. package/dist/context/DRFReactBySchemaProvider.js +56 -15
  60. package/dist/context/Overlays.d.ts.map +1 -1
  61. package/dist/context/Overlays.js +4 -4
  62. package/dist/hooks/useWhyDidYouUpdate.d.ts +4 -0
  63. package/dist/hooks/useWhyDidYouUpdate.d.ts.map +1 -0
  64. package/dist/hooks/useWhyDidYouUpdate.js +26 -0
  65. package/dist/utils.d.ts +5 -2
  66. package/dist/utils.d.ts.map +1 -1
  67. package/dist/utils.js +64 -25
  68. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ function useWhyDidYouUpdate(name, props) {
5
+ const previousProps = (0, react_1.useRef)({});
6
+ (0, react_1.useEffect)(() => {
7
+ if (previousProps.current) {
8
+ const allKeys = new Set([...Object.keys(previousProps.current), ...Object.keys(props)]);
9
+ const changes = {};
10
+ allKeys.forEach((key) => {
11
+ var _a, _b;
12
+ if (((_a = previousProps.current) === null || _a === void 0 ? void 0 : _a[key]) !== props[key]) {
13
+ changes[key] = {
14
+ from: (_b = previousProps.current) === null || _b === void 0 ? void 0 : _b[key],
15
+ to: props[key],
16
+ };
17
+ }
18
+ });
19
+ if (Object.keys(changes).length > 0) {
20
+ console.log('[why-did-you-update]', name, changes);
21
+ }
22
+ }
23
+ previousProps.current = props;
24
+ });
25
+ }
26
+ exports.default = useWhyDidYouUpdate;
package/dist/utils.d.ts CHANGED
@@ -1,17 +1,18 @@
1
1
  import { GridFilterModel } from '@mui/x-data-grid';
2
- import { Choice, ChoiceValue, ExtraValidators, GenericValue, GridEnrichedBySchemaColDef, Item, SchemaType } from './@types';
2
+ import { Choice, ChoiceValue, ExtraValidators, Field, FormFieldLayout, GenericValue, GridEnrichedBySchemaColDef, Item, SchemaType } from './@types';
3
3
  export declare const emptyByType: GenericValue;
4
4
  export declare const getChoiceByValue: (value: ChoiceValue, choices: Choice[] | undefined) => string | null | undefined;
5
5
  export declare const populateValues: ({ data, schema }: {
6
6
  data: Item;
7
7
  schema: SchemaType;
8
8
  }) => Item;
9
- export declare function buildGenericYupValidationSchema({ data, schema, many, skipFields, extraValidators, }: {
9
+ export declare function buildGenericYupValidationSchema({ data, schema, many, skipFields, extraValidators, uiFields, }: {
10
10
  data: Item;
11
11
  schema: SchemaType;
12
12
  many?: boolean;
13
13
  skipFields?: string[];
14
14
  extraValidators?: ExtraValidators;
15
+ uiFields?: string[];
15
16
  }): any;
16
17
  export declare const errorProps: ({ errors, fieldKey, fieldKeyProp, index, }: {
17
18
  errors: Item;
@@ -38,4 +39,6 @@ export declare function initViewColumns({ schema, columns, customColumnOperation
38
39
  export declare function shouldMemoUpdate<T extends object>(prevProps: Readonly<T>, nextProps: Readonly<T>): boolean;
39
40
  export declare const convertToFormData: (data: Item) => FormData;
40
41
  export declare function formatFileSize(bytes: number): string;
42
+ export declare function getFieldsFromFieldsLayout(fieldsLayout: FormFieldLayout[]): string[];
43
+ export declare function isFieldRequired(fieldSchema: Field, isInForm?: boolean): boolean;
41
44
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EACL,MAAM,EACN,WAAW,EACX,eAAe,EAEf,YAAY,EAEZ,0BAA0B,EAC1B,IAAI,EACJ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,WAAW,EAAE,YAyBzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,8BASjF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,kBAAkB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,SA8ClF,CAAC;AA0DF,wBAAgB,+BAA+B,CAAC,EAC9C,IAAI,EACJ,MAAM,EACN,IAAY,EACZ,UAAe,EACf,eAAe,GAChB,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,OAyEA;AAED,eAAO,MAAM,UAAU,GAAI,4CAKxB;IACD,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;CAkBA,CAAC;AAEF,eAAO,MAAM,QAAQ,cAEpB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,YAK7D,CAAC;AAEF,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,YAQtE;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAqB5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,mDA0B7E;AAED,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,sBAAoB,WAWhE,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,GAAG,IAAI,WAa1C,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,eAAe,GAAG,SAAS,EAC1C,MAAM,EAAE,eAAe,GAAG,SAAS,OAyBpC;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,OAAO,EACP,sBAAsB,GACvB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,sBAAsB,CAAC,EAAE,CACvB,CAAC,EAAE,0BAA0B,KAC1B,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACvE,gBAoGA;AA0CD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EACtB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,GACrB,OAAO,CAwCT;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,QAuB9C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAgB3C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EACL,MAAM,EACN,WAAW,EACX,eAAe,EACf,KAAK,EACL,eAAe,EACf,YAAY,EAEZ,0BAA0B,EAC1B,IAAI,EACJ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,WAAW,EAAE,YAyBzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,8BASjF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,kBAAkB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,SA8ClF,CAAC;AA0DF,wBAAgB,+BAA+B,CAAC,EAC9C,IAAI,EACJ,MAAM,EACN,IAAY,EACZ,UAAe,EACf,eAAe,EACf,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,OA0EA;AAED,eAAO,MAAM,UAAU,GAAI,4CAKxB;IACD,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;CAkBA,CAAC;AAEF,eAAO,MAAM,QAAQ,cAEpB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,YAK7D,CAAC;AAEF,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,YAQtE;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAqB5C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,mDA0B7E;AAED,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,sBAAoB,WAWhE,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,GAAG,IAAI,WAa1C,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,eAAe,GAAG,SAAS,EAC1C,MAAM,EAAE,eAAe,GAAG,SAAS,OAyBpC;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,OAAO,EACP,sBAAsB,GACvB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,sBAAsB,CAAC,EAAE,CACvB,CAAC,EAAE,0BAA0B,KAC1B,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACvE,gBAoGA;AA0CD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EACtB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,GACrB,OAAO,CAwCT;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,QAuB9C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAgB3C;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,eAAe,EAAE,YAwBxE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,WAYrE"}
package/dist/utils.js CHANGED
@@ -53,6 +53,8 @@ exports.mergeFilterItems = mergeFilterItems;
53
53
  exports.initViewColumns = initViewColumns;
54
54
  exports.shouldMemoUpdate = shouldMemoUpdate;
55
55
  exports.formatFileSize = formatFileSize;
56
+ exports.getFieldsFromFieldsLayout = getFieldsFromFieldsLayout;
57
+ exports.isFieldRequired = isFieldRequired;
56
58
  const dayjs_1 = __importDefault(require("dayjs"));
57
59
  const Yup = __importStar(require("yup"));
58
60
  const string_mask_1 = __importDefault(require("string-mask"));
@@ -100,7 +102,7 @@ const populateValues = ({ data, schema }) => {
100
102
  if (key === 'id' && (0, exports.isTmpId)(data[key])) {
101
103
  continue;
102
104
  }
103
- if (!data[key]) {
105
+ if (!data[key] && data[key] !== false && data[key] !== 0) {
104
106
  values[key] = (0, exports.emptyByType)(field);
105
107
  continue;
106
108
  }
@@ -193,27 +195,28 @@ const getYupValidator = (type) => {
193
195
  }
194
196
  return yupFunc.transform((v) => (v === '' ? null : v)).nullable();
195
197
  };
196
- function buildGenericYupValidationSchema({ data, schema, many = false, skipFields = [], extraValidators, }) {
198
+ function buildGenericYupValidationSchema({ data, schema, many = false, skipFields = [], extraValidators, uiFields, }) {
197
199
  const yupValidator = {};
198
200
  for (const entry of Object.entries(schema)) {
199
- const [key, field] = entry;
200
- if (!data || !(key in data) || key === 'id' || skipFields.includes(key)) {
201
+ const [field, fieldSchema] = entry;
202
+ if (!data || !(field in data) || field === 'id' || skipFields.includes(field)) {
201
203
  continue;
202
204
  }
203
205
  // OneToMany or ManyToMany:
204
- if (field.type === 'field' && field.child) {
205
- yupValidator[key] =
206
- extraValidators && key in extraValidators
207
- ? extraValidators[key]
206
+ if (fieldSchema.type === 'field' && fieldSchema.child) {
207
+ yupValidator[field] =
208
+ extraValidators && field in extraValidators
209
+ ? extraValidators[field]
208
210
  : buildGenericYupValidationSchema({
209
- schema: field.child.children,
211
+ schema: fieldSchema.child.children,
210
212
  many: true,
211
- data: data[key],
213
+ data: data[field],
214
+ uiFields,
212
215
  });
213
216
  continue;
214
217
  }
215
218
  // Nested Object:
216
- if (field.type === 'nested object' && field.children) {
219
+ if (fieldSchema.type === 'nested object' && fieldSchema.children) {
217
220
  // yupValidator[key] = buildGenericYupValidationSchema({
218
221
  // schema: field.children,
219
222
  // many: false,
@@ -225,28 +228,28 @@ function buildGenericYupValidationSchema({ data, schema, many = false, skipField
225
228
  // }
226
229
  // continue;
227
230
  }
228
- yupValidator[key] =
229
- extraValidators && key in extraValidators
230
- ? extraValidators[key]
231
- : getYupValidator(field.type);
232
- if (field.required || field.model_required) {
233
- yupValidator[key] = yupValidator[key].required('Este campo é obrigatório');
231
+ yupValidator[field] =
232
+ extraValidators && field in extraValidators
233
+ ? extraValidators[field]
234
+ : getYupValidator(fieldSchema.type);
235
+ if (isFieldRequired(fieldSchema, (uiFields || []).includes(field))) {
236
+ yupValidator[field] = yupValidator[field].required('Este campo é obrigatório');
234
237
  }
235
- if (field.max_length && field.type === 'string') {
236
- yupValidator[key] = yupValidator[key].max(parseInt(field.max_length), `Este campo só pode ter no máximo ${field.max_length} caracteres`);
238
+ if (fieldSchema.max_length && fieldSchema.type === 'string') {
239
+ yupValidator[field] = yupValidator[field].max(parseInt(fieldSchema.max_length), `Este campo só pode ter no máximo ${fieldSchema.max_length} caracteres`);
237
240
  }
238
- if (field.max_digits && field.type === 'decimal') {
239
- const maxDigits = field.max_digits;
240
- yupValidator[key] = yupValidator[key].test('len', `Este número pode ter no máximo ${maxDigits} dígitos`, (val) => {
241
+ if (fieldSchema.max_digits && fieldSchema.type === 'decimal') {
242
+ const maxDigits = fieldSchema.max_digits;
243
+ yupValidator[field] = yupValidator[field].test('len', `Este número pode ter no máximo ${maxDigits} dígitos`, (val) => {
241
244
  if (!val) {
242
245
  return true;
243
246
  }
244
247
  return val.toString().length <= maxDigits;
245
248
  });
246
249
  }
247
- if (!field.read_only && field.validators_regex) {
248
- for (const validator of field.validators_regex) {
249
- yupValidator[key] = yupValidator[key].matches(validator.regex, validator.message);
250
+ if (!fieldSchema.read_only && fieldSchema.validators_regex) {
251
+ for (const validator of fieldSchema.validators_regex) {
252
+ yupValidator[field] = yupValidator[field].matches(validator.regex, validator.message);
250
253
  }
251
254
  }
252
255
  }
@@ -595,3 +598,39 @@ function formatFileSize(bytes) {
595
598
  });
596
599
  return `${formattedValue} ${units[i]}`;
597
600
  }
601
+ function getFieldsFromFieldsLayout(fieldsLayout) {
602
+ const fields = [];
603
+ for (const section of fieldsLayout) {
604
+ if (!section.rows) {
605
+ continue;
606
+ }
607
+ for (const row of section.rows) {
608
+ if (typeof row === 'string') {
609
+ fields.push(row);
610
+ continue;
611
+ }
612
+ if (Array.isArray(row)) {
613
+ for (const field of row) {
614
+ if (typeof field === 'string') {
615
+ fields.push(field);
616
+ continue;
617
+ }
618
+ }
619
+ continue;
620
+ }
621
+ }
622
+ }
623
+ return fields;
624
+ }
625
+ function isFieldRequired(fieldSchema, isInForm) {
626
+ if (fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.required) {
627
+ return true;
628
+ }
629
+ if (fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.model_required) {
630
+ return true;
631
+ }
632
+ if ((fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.ui_required) && (typeof isInForm === 'undefined' || isInForm === true)) {
633
+ return true;
634
+ }
635
+ return false;
636
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drf-react-by-schema",
3
- "version": "0.20.10",
3
+ "version": "0.21.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",