drf-react-by-schema 0.6.4 → 0.7.0

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 (46) hide show
  1. package/dist/api.d.ts +7 -13
  2. package/dist/api.js +77 -77
  3. package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts +1 -1
  4. package/dist/components/DataGridBySchemaEditable.js +5 -5
  5. package/dist/components/DialogActions.d.ts +3 -3
  6. package/dist/components/DialogActions.js +2 -4
  7. package/dist/components/GenericModelList.js +4 -0
  8. package/dist/components/forms/DialogFormBySchema.d.ts +14 -0
  9. package/dist/components/forms/DialogFormBySchema.js +61 -0
  10. package/dist/components/forms/FieldBySchema.d.ts +3 -0
  11. package/dist/components/forms/FieldBySchema.js +65 -0
  12. package/dist/components/forms/FormBySchema.d.ts +19 -0
  13. package/dist/components/forms/FormBySchema.js +164 -0
  14. package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts +3 -0
  15. package/dist/components/forms/inputs/AutocompleteFieldBySchema.js +86 -0
  16. package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts +3 -0
  17. package/dist/components/forms/inputs/BooleanFieldBySchema.js +41 -0
  18. package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts +3 -0
  19. package/dist/components/forms/inputs/DesktopDatePickerBySchema.js +49 -0
  20. package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts +3 -0
  21. package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.js +41 -0
  22. package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.d.ts +4 -0
  23. package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.js +203 -0
  24. package/dist/components/forms/inputs/FloatFieldBySchema.d.ts +3 -0
  25. package/dist/components/forms/inputs/FloatFieldBySchema.js +60 -0
  26. package/dist/components/forms/inputs/TextFieldBySchema.d.ts +3 -0
  27. package/dist/components/forms/inputs/TextFieldBySchema.js +44 -0
  28. package/dist/context/APIWrapper.d.ts +5 -5
  29. package/dist/context/APIWrapper.js +135 -87
  30. package/dist/context/APIWrapperContext.d.ts +22 -9
  31. package/dist/context/APIWrapperContext.js +42 -9
  32. package/dist/context/DRFReactBySchemaContext.d.ts +4 -4
  33. package/dist/context/DRFReactBySchemaContext.js +5 -5
  34. package/dist/context/DRFReactBySchemaProvider.d.ts +1 -1
  35. package/dist/context/DRFReactBySchemaProvider.js +6 -9
  36. package/dist/context/Form.d.ts +1 -1
  37. package/dist/context/Form.js +13 -14
  38. package/dist/context/FormContext.js +0 -7
  39. package/dist/context/Overlays.js +11 -12
  40. package/dist/index.d.ts +16 -6
  41. package/dist/index.js +31 -7
  42. package/dist/styles/layout.d.ts +7 -0
  43. package/dist/styles/layout.js +2 -1
  44. package/dist/utils.d.ts +42 -4
  45. package/dist/utils.js +22 -18
  46. package/package.json +1 -1
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import { Theme } from '@mui/material/styles';
3
3
  export interface serverEndPointType {
4
4
  url: string;
5
- autocomplete?: string;
6
- api?: string;
7
- JSONSchema?: string;
8
5
  apiTokenUrl: string;
6
+ api?: string;
7
+ signUp?: string;
8
+ autocomplete?: string;
9
9
  getToken?: string;
10
10
  refreshToken?: string;
11
11
  verifyToken?: string;
@@ -17,4 +17,4 @@ export interface DRFReactBySchemaContextType {
17
17
  firstBatchLength?: number;
18
18
  }
19
19
  export declare const DRFReactBySchemaContext: React.Context<DRFReactBySchemaContextType>;
20
- export declare const useTheme: () => Theme;
20
+ export declare const useDRFReactBySchema: () => DRFReactBySchemaContextType;
@@ -3,17 +3,17 @@ 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.useTheme = exports.DRFReactBySchemaContext = void 0;
6
+ exports.useDRFReactBySchema = exports.DRFReactBySchemaContext = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const theme_1 = __importDefault(require("../styles/theme"));
9
9
  exports.DRFReactBySchemaContext = react_1.default.createContext({
10
10
  serverEndPoint: null,
11
11
  theme: theme_1.default,
12
12
  isInBatches: true,
13
- firstBatchLength: 100
13
+ firstBatchLength: 100,
14
14
  });
15
- const useTheme = () => {
15
+ const useDRFReactBySchema = () => {
16
16
  const context = react_1.default.useContext(exports.DRFReactBySchemaContext);
17
- return context.theme;
17
+ return context;
18
18
  };
19
- exports.useTheme = useTheme;
19
+ exports.useDRFReactBySchema = useDRFReactBySchema;
@@ -9,5 +9,5 @@ interface DRFReactBySchemaProviderProps extends DRFReactBySchemaContextType {
9
9
  * @param {*} props
10
10
  * @returns {*}
11
11
  */
12
- declare const DRFReactBySchemaProvider: ({ serverEndPoint, theme, isInBatches, firstBatchLength, children }: DRFReactBySchemaProviderProps) => JSX.Element;
12
+ declare const DRFReactBySchemaProvider: ({ serverEndPoint, theme, isInBatches, firstBatchLength, children, }: DRFReactBySchemaProviderProps) => JSX.Element;
13
13
  export default DRFReactBySchemaProvider;
@@ -15,7 +15,7 @@ const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
15
15
  * @param {*} props
16
16
  * @returns {*}
17
17
  */
18
- const DRFReactBySchemaProvider = ({ serverEndPoint, theme, isInBatches, firstBatchLength, children }) => {
18
+ const DRFReactBySchemaProvider = ({ serverEndPoint, theme, isInBatches, firstBatchLength, children, }) => {
19
19
  if (serverEndPoint) {
20
20
  const defaultKeys = [
21
21
  'autocomplete',
@@ -23,30 +23,27 @@ const DRFReactBySchemaProvider = ({ serverEndPoint, theme, isInBatches, firstBat
23
23
  ['JSONSchema', 'jsonschema'],
24
24
  ['getToken', ''],
25
25
  ['refreshToken', 'refresh'],
26
- ['verifyToken', 'verify']
26
+ ['verifyToken', 'verify'],
27
27
  ];
28
28
  for (const key of defaultKeys) {
29
- const hybridKey = (typeof key === 'string')
29
+ const hybridKey = typeof key === 'string'
30
30
  ? key
31
31
  : key[0];
32
- const hybridUrl = (typeof key === 'string')
33
- ? key
34
- : key[1];
32
+ const hybridUrl = typeof key === 'string' ? key : key[1];
35
33
  if (serverEndPoint[hybridKey]) {
36
34
  continue;
37
35
  }
38
36
  serverEndPoint[hybridKey] = `${serverEndPoint.url}/${hybridUrl}`;
39
37
  }
40
38
  }
41
- const mergedTheme = (theme)
42
- ? Object.assign(Object.assign({}, theme_1.default), theme) : theme_1.default;
39
+ const mergedTheme = theme ? Object.assign(Object.assign({}, theme_1.default), theme) : theme_1.default;
43
40
  return (react_1.default.createElement(styles_1.ThemeProvider, { theme: mergedTheme },
44
41
  react_1.default.createElement(CssBaseline_1.default, null),
45
42
  react_1.default.createElement(DRFReactBySchemaContext_1.DRFReactBySchemaContext.Provider, { value: {
46
43
  serverEndPoint,
47
44
  theme,
48
45
  isInBatches,
49
- firstBatchLength
46
+ firstBatchLength,
50
47
  } },
51
48
  react_1.default.createElement(Overlays_1.default, { children: children }))));
52
49
  };
@@ -17,5 +17,5 @@ interface FormProps {
17
17
  formButtonsSx?: any;
18
18
  children: React.ReactNode;
19
19
  }
20
- export default function Form({ model, id, objTitleField, optionsACModels, cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children }: FormProps): JSX.Element;
20
+ export default function Form({ model, id, objTitleField, optionsACModels, cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children, }: FormProps): JSX.Element;
21
21
  export {};
@@ -37,27 +37,27 @@ const APIWrapperContext_1 = require("./APIWrapperContext");
37
37
  const utils_1 = require("../utils");
38
38
  const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
39
39
  const FormContext_1 = require("./FormContext");
40
- function Form({ model, id, objTitleField = 'name', optionsACModels = [], cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children }) {
40
+ function Form({ model, id, objTitleField = 'name', optionsACModels = [], cancelBtn, cancelBtnLabel, deleteBtnLabel, saveAndCreateNewBtnLabel, saveAndContinueBtnLabel, saveBtnLabel, onSuccess, borderBottom, saveAndContinue, formButtonsSx, children, }) {
41
41
  const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
42
42
  const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
43
43
  if (!context.serverEndPoint || !apiContext) {
44
44
  console.error('Error in drf-react-by-schema: There is no serverEndPoint configured!');
45
- return (react_1.default.createElement(react_1.default.Fragment, null));
45
+ return react_1.default.createElement(react_1.default.Fragment, null);
46
46
  }
47
- const { loadSinglePageData, onSubmit, onEditModel, onDeleteModel, onEditRelatedModelSave, onDeleteRelatedModel } = apiContext;
47
+ const { loadSinglePageData, onSubmit, onEditModel, onDeleteModel, onEditRelatedModelSave, onDeleteRelatedModel, } = apiContext;
48
48
  const pageForm = apiContext.pageFormState[0];
49
49
  const optionsAC = apiContext.optionsACState[0];
50
- const { control, handleSubmit, reset, getValues, setValue, formState: { errors, isDirty } } = (0, react_hook_form_1.useForm)({
50
+ const { control, handleSubmit, reset, getValues, setValue, formState: { errors, isDirty }, } = (0, react_hook_form_1.useForm)({
51
51
  mode: 'onBlur',
52
- resolver: (0, yup_1.yupResolver)(pageForm.validationSchema)
52
+ resolver: (0, yup_1.yupResolver)(pageForm.validationSchema),
53
53
  });
54
54
  const loadAllData = () => {
55
55
  loadSinglePageData({
56
56
  model,
57
57
  objTitleField,
58
58
  objId: id,
59
- optionsACModels
60
- }).then(values => {
59
+ optionsACModels,
60
+ }).then((values) => {
61
61
  if (values && typeof values !== 'boolean') {
62
62
  reset(values);
63
63
  }
@@ -80,7 +80,7 @@ function Form({ model, id, objTitleField = 'name', optionsACModels = [], cancelB
80
80
  onSuccess,
81
81
  borderBottom,
82
82
  saveAndContinue,
83
- sx: formButtonsSx
83
+ sx: formButtonsSx,
84
84
  };
85
85
  // onSubmit={handleSubmit((data, event) => {
86
86
  // onSubmit(
@@ -89,11 +89,10 @@ function Form({ model, id, objTitleField = 'name', optionsACModels = [], cancelB
89
89
  // data,
90
90
  // event
91
91
  // );
92
- return (react_1.default.createElement(react_1.default.Fragment, null, pageForm.initialValues && pageForm.schema && control &&
93
- react_1.default.createElement(FormContext_1.FormContext.Provider, { value: null },
94
- react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
95
- react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps)),
96
- react_1.default.createElement(Box_1.default, null, children),
97
- react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps, { bottom: true }))))));
92
+ return (react_1.default.createElement(react_1.default.Fragment, null, pageForm.initialValues && pageForm.schema && control && (react_1.default.createElement(FormContext_1.FormContext.Provider, { value: null },
93
+ react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
94
+ react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps)),
95
+ react_1.default.createElement(Box_1.default, null, children),
96
+ react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps, { bottom: true })))))));
98
97
  }
99
98
  exports.default = Form;
@@ -5,11 +5,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.FormContext = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- ;
9
- ;
10
- ;
11
- ;
12
- ;
13
- ;
14
- ;
15
8
  exports.FormContext = react_1.default.createContext(null);
@@ -42,17 +42,17 @@ function Overlays({ children }) {
42
42
  const initialSnackBar = {
43
43
  open: false,
44
44
  msg: '',
45
- severity: 'info'
45
+ severity: 'info',
46
46
  };
47
47
  const initialDialog = {
48
48
  open: false,
49
49
  loading: true,
50
50
  title: '',
51
51
  Body: null,
52
- Actions: null
52
+ Actions: null,
53
53
  };
54
- const [snackBar, setSnackBar] = (0, react_1.useReducer)(utils_1.reducer, initialSnackBar);
55
- const [dialog, setDialog] = (0, react_1.useReducer)(utils_1.reducer, initialDialog);
54
+ const [snackBar, setSnackBar] = (0, react_1.useReducer)((utils_1.reducer), initialSnackBar);
55
+ const [dialog, setDialog] = (0, react_1.useReducer)((utils_1.reducer), initialDialog);
56
56
  const [loading, setLoading] = (0, react_1.useState)(true);
57
57
  // give some time to stop loading when data is retrieved and must render before loading rendering:
58
58
  const handleLoading = (loadingState) => {
@@ -66,22 +66,21 @@ function Overlays({ children }) {
66
66
  };
67
67
  const handleDialogClose = () => {
68
68
  setDialog({
69
- open: false
69
+ open: false,
70
70
  });
71
71
  };
72
72
  return (react_1.default.createElement(react_1.default.Fragment, null,
73
73
  react_1.default.createElement(APIWrapper_1.default, { setLoading: setLoading, handleLoading: handleLoading, setSnackBar: setSnackBar, setDialog: setDialog, children: children }),
74
74
  react_1.default.createElement(Backdrop_1.default, { sx: { color: '#fff', zIndex: (theme) => theme.zIndex.drawer + 1 }, open: loading },
75
75
  react_1.default.createElement(CircularProgress_1.default, null)),
76
- react_1.default.createElement(Snackbar_1.default, { open: snackBar.open, autoHideDuration: 3000, onClose: () => { setSnackBar({ open: false }); }, anchorOrigin: { vertical: 'top', horizontal: 'right' } },
76
+ react_1.default.createElement(Snackbar_1.default, { open: snackBar.open, autoHideDuration: 3000, onClose: () => {
77
+ setSnackBar({ open: false });
78
+ }, anchorOrigin: { vertical: 'top', horizontal: 'right' } },
77
79
  react_1.default.createElement(Alert_1.default, { severity: snackBar.severity }, snackBar.msg)),
78
80
  react_1.default.createElement(Dialog_1.default, { open: dialog.open, onClose: handleDialogClose },
79
81
  react_1.default.createElement(DialogTitle_1.default, null, dialog.loading ? 'Carregando...' : dialog.title),
80
- react_1.default.createElement(DialogContent_1.default, null, dialog.loading
81
- ? react_1.default.createElement(Box_1.default, { sx: { display: 'flex' } },
82
- react_1.default.createElement(CircularProgress_1.default, null))
83
- : react_1.default.createElement(react_1.default.Fragment, null, dialog.Body)),
84
- react_1.default.createElement(DialogActions_1.default, null, !dialog.loading &&
85
- react_1.default.createElement(react_1.default.Fragment, null, dialog.Actions)))));
82
+ react_1.default.createElement(DialogContent_1.default, null, dialog.loading ? (react_1.default.createElement(Box_1.default, { sx: { display: 'flex' } },
83
+ react_1.default.createElement(CircularProgress_1.default, null))) : (react_1.default.createElement(react_1.default.Fragment, null, dialog.Body))),
84
+ react_1.default.createElement(DialogActions_1.default, null, !dialog.loading && react_1.default.createElement(react_1.default.Fragment, null, dialog.Actions)))));
86
85
  }
87
86
  exports.default = Overlays;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,22 @@
1
- import { updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, getJSONSchema, createOrUpdateJSONSchema, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel } from './api';
2
- import { emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat } from './utils';
1
+ import { updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, getJSONSchema, createOrUpdateJSONSchema, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, hasJWT, clearJWT } from './api';
2
+ import { emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat, slugToCamelCase } from './utils';
3
3
  import DRFReactBySchemaProvider from './context/DRFReactBySchemaProvider';
4
- import { DRFReactBySchemaContext, useTheme } from './context/DRFReactBySchemaContext';
5
- import { APIWrapperContext } from './context/APIWrapperContext';
4
+ import { useDRFReactBySchema } from './context/DRFReactBySchemaContext';
5
+ import { useAPIWrapper } from './context/APIWrapperContext';
6
+ import Form from './context/Form';
7
+ import FormBySchema from './components/forms/FormBySchema';
8
+ import DialogFormBySchema from './components/forms/DialogFormBySchema';
6
9
  import DataGridBySchemaEditable from './components/DataGridBySchemaEditable';
7
10
  import GenericModelList from './components/GenericModelList';
8
11
  import GenericRelatedModelList from './components/GenericRelatedModelList';
9
12
  import DataTotals from './components/DataTotals';
10
13
  import DialogActions from './components/DialogActions';
11
- import Form from './context/Form';
12
- export { DRFReactBySchemaProvider, DRFReactBySchemaContext, APIWrapperContext, useTheme, Form, FormContext, DataGridBySchemaEditable, GenericModelList, GenericRelatedModelList, DataTotals, DialogActions, updateData, partialUpdateData, createData, deleteData, createOrUpdateData, updateDataBySchema, addExistingRelatedModel, getAutoComplete, getJSONSchema, createOrUpdateJSONSchema, loginByPayload, setAuthToken, isLoggedIn, getGenericModelList, getGenericModel, emptyByType, getChoiceByValue, populateValues, buildGenericYupValidationSchema, errorProps, getTmpId, isTmpId, getPatternFormat };
14
+ import FieldBySchema from './components/forms/FieldBySchema';
15
+ import TextFieldBySchema from './components/forms/inputs/TextFieldBySchema';
16
+ import BooleanFieldBySchema from './components/forms/inputs/BooleanFieldBySchema';
17
+ import DesktopDatePickerBySchema from './components/forms/inputs/DesktopDatePickerBySchema';
18
+ import DesktopDateTimePickerBySchema from './components/forms/inputs/DesktopDateTimePickerBySchema';
19
+ import EditableAutocompleteFieldBySchema from './components/forms/inputs/EditableAutocompleteFieldBySchema';
20
+ import AutocompleteFieldBySchema from './components/forms/inputs/AutocompleteFieldBySchema';
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, getJSONSchema, createOrUpdateJSONSchema, 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.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.createOrUpdateJSONSchema = exports.getJSONSchema = exports.getAutoComplete = exports.addExistingRelatedModel = exports.updateDataBySchema = exports.createOrUpdateData = exports.deleteData = exports.createData = exports.partialUpdateData = exports.updateData = exports.DialogActions = exports.DataTotals = exports.GenericRelatedModelList = exports.GenericModelList = exports.DataGridBySchemaEditable = exports.FormContext = exports.Form = exports.useTheme = exports.APIWrapperContext = exports.DRFReactBySchemaContext = 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.createOrUpdateJSONSchema = exports.getJSONSchema = 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;
7
7
  // Methods:
8
8
  const api_1 = require("./api");
9
9
  Object.defineProperty(exports, "updateData", { enumerable: true, get: function () { return api_1.updateData; } });
@@ -21,6 +21,8 @@ Object.defineProperty(exports, "setAuthToken", { enumerable: true, get: function
21
21
  Object.defineProperty(exports, "isLoggedIn", { enumerable: true, get: function () { return api_1.isLoggedIn; } });
22
22
  Object.defineProperty(exports, "getGenericModelList", { enumerable: true, get: function () { return api_1.getGenericModelList; } });
23
23
  Object.defineProperty(exports, "getGenericModel", { enumerable: true, get: function () { return api_1.getGenericModel; } });
24
+ Object.defineProperty(exports, "hasJWT", { enumerable: true, get: function () { return api_1.hasJWT; } });
25
+ Object.defineProperty(exports, "clearJWT", { enumerable: true, get: function () { return api_1.clearJWT; } });
24
26
  const utils_1 = require("./utils");
25
27
  Object.defineProperty(exports, "emptyByType", { enumerable: true, get: function () { return utils_1.emptyByType; } });
26
28
  Object.defineProperty(exports, "getChoiceByValue", { enumerable: true, get: function () { return utils_1.getChoiceByValue; } });
@@ -30,15 +32,22 @@ Object.defineProperty(exports, "errorProps", { enumerable: true, get: function (
30
32
  Object.defineProperty(exports, "getTmpId", { enumerable: true, get: function () { return utils_1.getTmpId; } });
31
33
  Object.defineProperty(exports, "isTmpId", { enumerable: true, get: function () { return utils_1.isTmpId; } });
32
34
  Object.defineProperty(exports, "getPatternFormat", { enumerable: true, get: function () { return utils_1.getPatternFormat; } });
35
+ Object.defineProperty(exports, "slugToCamelCase", { enumerable: true, get: function () { return utils_1.slugToCamelCase; } });
33
36
  // Wrappers/Providers:
34
37
  const DRFReactBySchemaProvider_1 = __importDefault(require("./context/DRFReactBySchemaProvider"));
35
38
  exports.DRFReactBySchemaProvider = DRFReactBySchemaProvider_1.default;
36
39
  const DRFReactBySchemaContext_1 = require("./context/DRFReactBySchemaContext");
37
- Object.defineProperty(exports, "DRFReactBySchemaContext", { enumerable: true, get: function () { return DRFReactBySchemaContext_1.DRFReactBySchemaContext; } });
38
- Object.defineProperty(exports, "useTheme", { enumerable: true, get: function () { return DRFReactBySchemaContext_1.useTheme; } });
40
+ Object.defineProperty(exports, "useDRFReactBySchema", { enumerable: true, get: function () { return DRFReactBySchemaContext_1.useDRFReactBySchema; } });
39
41
  const APIWrapperContext_1 = require("./context/APIWrapperContext");
40
- Object.defineProperty(exports, "APIWrapperContext", { enumerable: true, get: function () { return APIWrapperContext_1.APIWrapperContext; } });
41
- // Components
42
+ Object.defineProperty(exports, "useAPIWrapper", { enumerable: true, get: function () { return APIWrapperContext_1.useAPIWrapper; } });
43
+ // Forms:
44
+ const Form_1 = __importDefault(require("./context/Form"));
45
+ exports.Form = Form_1.default;
46
+ const FormBySchema_1 = __importDefault(require("./components/forms/FormBySchema"));
47
+ exports.FormBySchema = FormBySchema_1.default;
48
+ const DialogFormBySchema_1 = __importDefault(require("./components/forms/DialogFormBySchema"));
49
+ exports.DialogFormBySchema = DialogFormBySchema_1.default;
50
+ // Components:
42
51
  const DataGridBySchemaEditable_1 = __importDefault(require("./components/DataGridBySchemaEditable"));
43
52
  exports.DataGridBySchemaEditable = DataGridBySchemaEditable_1.default;
44
53
  const GenericModelList_1 = __importDefault(require("./components/GenericModelList"));
@@ -49,5 +58,20 @@ const DataTotals_1 = __importDefault(require("./components/DataTotals"));
49
58
  exports.DataTotals = DataTotals_1.default;
50
59
  const DialogActions_1 = __importDefault(require("./components/DialogActions"));
51
60
  exports.DialogActions = DialogActions_1.default;
52
- const Form_1 = __importDefault(require("./context/Form"));
53
- exports.Form = Form_1.default;
61
+ // FormComponents
62
+ const FieldBySchema_1 = __importDefault(require("./components/forms/FieldBySchema"));
63
+ exports.FieldBySchema = FieldBySchema_1.default;
64
+ const TextFieldBySchema_1 = __importDefault(require("./components/forms/inputs/TextFieldBySchema"));
65
+ exports.TextFieldBySchema = TextFieldBySchema_1.default;
66
+ const BooleanFieldBySchema_1 = __importDefault(require("./components/forms/inputs/BooleanFieldBySchema"));
67
+ exports.BooleanFieldBySchema = BooleanFieldBySchema_1.default;
68
+ const DesktopDatePickerBySchema_1 = __importDefault(require("./components/forms/inputs/DesktopDatePickerBySchema"));
69
+ exports.DesktopDatePickerBySchema = DesktopDatePickerBySchema_1.default;
70
+ const DesktopDateTimePickerBySchema_1 = __importDefault(require("./components/forms/inputs/DesktopDateTimePickerBySchema"));
71
+ exports.DesktopDateTimePickerBySchema = DesktopDateTimePickerBySchema_1.default;
72
+ const EditableAutocompleteFieldBySchema_1 = __importDefault(require("./components/forms/inputs/EditableAutocompleteFieldBySchema"));
73
+ exports.EditableAutocompleteFieldBySchema = EditableAutocompleteFieldBySchema_1.default;
74
+ const AutocompleteFieldBySchema_1 = __importDefault(require("./components/forms/inputs/AutocompleteFieldBySchema"));
75
+ exports.AutocompleteFieldBySchema = AutocompleteFieldBySchema_1.default;
76
+ const FloatFieldBySchema_1 = __importDefault(require("./components/forms/inputs/FloatFieldBySchema"));
77
+ exports.FloatFieldBySchema = FloatFieldBySchema_1.default;
@@ -36,6 +36,13 @@ export declare const loadingBox: {
36
36
  flexDirection: string;
37
37
  alignItems: string;
38
38
  };
39
+ export declare const loadingBoxWhite: {
40
+ height: string;
41
+ justifyContent: string;
42
+ display: string;
43
+ flexDirection: string;
44
+ alignItems: string;
45
+ };
39
46
  export declare const actionButtons: {
40
47
  width: string;
41
48
  alignItems: string;
@@ -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.geoPicker = exports.metabaseAppEmbed = exports.formCardContent = exports.formCard = exports.fullWidthButton = exports.dataGridFixedHeight = exports.dataGridWithTabs = exports.dataGrid = exports.topBarOverList = exports.flexRowGrow = exports.flexColumn = exports.inLineForm = exports.actionButtons = exports.loadingBox = exports.topBar = exports.flexRow = exports.main = exports.content = void 0;
6
+ exports.geoPicker = exports.metabaseAppEmbed = exports.formCardContent = exports.formCard = exports.fullWidthButton = exports.dataGridFixedHeight = exports.dataGridWithTabs = exports.dataGrid = exports.topBarOverList = exports.flexRowGrow = exports.flexColumn = exports.inLineForm = exports.actionButtons = exports.loadingBoxWhite = exports.loadingBox = exports.topBar = exports.flexRow = exports.main = exports.content = void 0;
7
7
  const theme_1 = __importDefault(require("./theme"));
8
8
  exports.content = {
9
9
  flexGrow: 1,
@@ -21,6 +21,7 @@ exports.flexRow = {
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' });
24
+ exports.loadingBoxWhite = Object.assign(Object.assign({}, exports.flexRow), { height: '100%', justifyContent: 'center' });
24
25
  exports.actionButtons = Object.assign(Object.assign({}, exports.flexRow), { width: '100%', alignItems: 'flex-start' });
25
26
  exports.inLineForm = Object.assign(Object.assign({}, exports.flexRow), { width: '100%', justifyContent: 'flex-start' });
26
27
  exports.flexColumn = Object.assign(Object.assign({}, exports.flexRow), { flexDirection: 'column' });
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,9 @@
1
+ /// <reference types="react" />
1
2
  import { CalendarPickerView } from '@mui/x-date-pickers/CalendarPicker';
2
3
  import { GridActionsColDef, GridColDef, GridFilterModel, GridSortModel } from '@mui/x-data-grid';
4
+ import { Control, FieldValues, UseFormGetValues, UseFormSetValue } from 'react-hook-form';
5
+ import { AutocompleteRenderOptionState, SxProps } from '@mui/material';
6
+ import { OnEditModelType } from './context/APIWrapperContext';
3
7
  export type Id = string | number;
4
8
  export type Item = Record<string, any>;
5
9
  export type PaginatedResult = {
@@ -42,6 +46,10 @@ export interface Field {
42
46
  validators_regex?: Item[];
43
47
  many?: boolean;
44
48
  date_views?: CalendarPickerView[];
49
+ required?: boolean;
50
+ disabled?: boolean;
51
+ help_text?: string;
52
+ model_multiline?: boolean;
45
53
  }
46
54
  interface GridBySchemaColDef extends GridColDef {
47
55
  isIndexField?: boolean;
@@ -70,21 +78,50 @@ export interface ItemSchemaColumnsType {
70
78
  modelOptions: modelOptionsType;
71
79
  columns?: GridEnrichedBySchemaColDef[];
72
80
  }
81
+ export interface FieldBySchemaProps {
82
+ name: string;
83
+ schema: SchemaType;
84
+ control: Control;
85
+ errors: Item;
86
+ multiline?: boolean;
87
+ setValue?: UseFormSetValue<FieldValues>;
88
+ getValues?: UseFormGetValues<FieldValues>;
89
+ fieldKey?: string;
90
+ labelKey?: string;
91
+ index?: number;
92
+ optionsAC?: Record<string, Item[]>;
93
+ optionsModel?: string;
94
+ getOptionLabel?: (option: Item | string) => string;
95
+ renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: Item, state: AutocompleteRenderOptionState) => React.ReactNode;
96
+ onEditModel?: (x: OnEditModelType) => void;
97
+ multiple?: boolean;
98
+ sx?: SxProps;
99
+ options?: Item[];
100
+ isSemaphoric?: boolean;
101
+ label?: string;
102
+ onValueChange?: (x: any) => void;
103
+ decimalScale?: number;
104
+ isPassword?: boolean;
105
+ type?: React.HTMLInputTypeAttribute;
106
+ autocomplete?: string;
107
+ minRows?: number;
108
+ optionIdKey?: string;
109
+ optionLabelKey?: string;
110
+ }
73
111
  export declare const emptyByType: any;
74
112
  export declare const getChoiceByValue: (value: number | string, choices: Choice[] | undefined) => string | null | undefined;
75
113
  export declare const populateValues: ({ data, schema }: {
76
114
  data: Item;
77
115
  schema: SchemaType;
78
116
  }) => Record<string, any>;
79
- export declare const buildGenericYupValidationSchema: ({ data, schema, many, skipFields, extraValidators }: {
117
+ export declare const buildGenericYupValidationSchema: ({ data, schema, many, skipFields, extraValidators, }: {
80
118
  data: Item;
81
119
  schema: SchemaType;
82
120
  many?: boolean | undefined;
83
121
  skipFields?: string[] | undefined;
84
122
  extraValidators?: Item | undefined;
85
123
  }) => any;
86
- export declare const errorProps: ({ type, errors, fieldKey, fieldKeyProp, index }: {
87
- type: string;
124
+ export declare const errorProps: ({ errors, fieldKey, fieldKeyProp, index, }: {
88
125
  errors: Item;
89
126
  fieldKey: string;
90
127
  fieldKeyProp: string;
@@ -95,8 +132,9 @@ export declare const errorProps: ({ type, errors, fieldKey, fieldKeyProp, index
95
132
  };
96
133
  export declare const getTmpId: () => string;
97
134
  export declare const isTmpId: (id: string | number | undefined | null) => boolean;
98
- export declare const reducer: (state: Record<string, any> | null, newState: Record<string, any>) => Record<string, any> | null;
135
+ export declare function reducer<T>(state: T | null, newState: Partial<T> | null): T | null;
99
136
  export declare const getPatternFormat: (type: string) => string;
100
137
  export type AddParametersToEnd<TFunction extends (...args: any) => any, TParameters extends [...args: any]> = (...args: [...Parameters<TFunction>, ...TParameters]) => ReturnType<TFunction>;
101
138
  export declare function buildDateFormatBySchema(dateViews: string[] | null | undefined): "DD/MM/yyyy" | "MM/yyyy" | "yyyy" | "MM" | "DD";
139
+ export declare const slugToCamelCase: (str: string) => string;
102
140
  export {};
package/dist/utils.js CHANGED
@@ -23,12 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.buildDateFormatBySchema = exports.getPatternFormat = exports.reducer = exports.isTmpId = exports.getTmpId = exports.errorProps = exports.buildGenericYupValidationSchema = exports.populateValues = exports.getChoiceByValue = exports.emptyByType = void 0;
26
+ 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
- ;
29
- ;
30
- ;
31
- ;
32
28
  const emptyByType = (field, forDatabase = false) => {
33
29
  if (field.model_default) {
34
30
  return field.model_default;
@@ -41,9 +37,7 @@ const emptyByType = (field, forDatabase = false) => {
41
37
  if (field.child) {
42
38
  return [];
43
39
  }
44
- return (forDatabase)
45
- ? undefined
46
- : null;
40
+ return forDatabase ? undefined : null;
47
41
  case 'string':
48
42
  case 'email':
49
43
  return '';
@@ -85,7 +79,7 @@ const populateValues = ({ data, schema }) => {
85
79
  for (const row of data[key]) {
86
80
  const value = (0, exports.populateValues)({
87
81
  data: row,
88
- schema: field.child.children
82
+ schema: field.child.children,
89
83
  });
90
84
  arValues.push(value);
91
85
  }
@@ -94,7 +88,7 @@ const populateValues = ({ data, schema }) => {
94
88
  }
95
89
  values[key] = (0, exports.populateValues)({
96
90
  data: data[key],
97
- schema: field.child.children
91
+ schema: field.child.children,
98
92
  });
99
93
  continue;
100
94
  }
@@ -102,7 +96,7 @@ const populateValues = ({ data, schema }) => {
102
96
  values[key] = data[key]
103
97
  ? {
104
98
  value: data[key],
105
- display_name: (0, exports.getChoiceByValue)(data[key], field.choices)
99
+ display_name: (0, exports.getChoiceByValue)(data[key], field.choices),
106
100
  }
107
101
  : (0, exports.emptyByType)(field);
108
102
  continue;
@@ -164,7 +158,7 @@ const getYupValidator = (type) => {
164
158
  }
165
159
  return yupFunc.nullable();
166
160
  };
167
- const buildGenericYupValidationSchema = ({ data, schema, many = false, skipFields = [], extraValidators = {} }) => {
161
+ const buildGenericYupValidationSchema = ({ data, schema, many = false, skipFields = [], extraValidators = {}, }) => {
168
162
  const yupValidator = {};
169
163
  for (const entry of Object.entries(schema)) {
170
164
  const [key, field] = entry;
@@ -180,7 +174,7 @@ const buildGenericYupValidationSchema = ({ data, schema, many = false, skipField
180
174
  data: data[key],
181
175
  extraValidators: Object.prototype.hasOwnProperty.call(extraValidators, key)
182
176
  ? extraValidators[key]
183
- : {}
177
+ : {},
184
178
  });
185
179
  continue;
186
180
  }
@@ -224,16 +218,19 @@ const buildGenericYupValidationSchema = ({ data, schema, many = false, skipField
224
218
  }
225
219
  }
226
220
  // console.log({ yupValidator });
227
- return (many)
221
+ return many
228
222
  ? Yup.array().of(Yup.object().shape(yupValidator))
229
223
  : Yup.object().shape(yupValidator);
230
224
  };
231
225
  exports.buildGenericYupValidationSchema = buildGenericYupValidationSchema;
232
- const errorProps = ({ type, errors, fieldKey, fieldKeyProp, index }) => {
226
+ const errorProps = ({ errors, fieldKey, fieldKeyProp, index, }) => {
233
227
  let error;
234
228
  let helperText;
235
229
  if (index) {
236
- const hasErrors = errors && errors[fieldKey] && errors[fieldKey][index] && Boolean(errors[fieldKey][index][fieldKeyProp]);
230
+ const hasErrors = errors &&
231
+ errors[fieldKey] &&
232
+ errors[fieldKey][index] &&
233
+ Boolean(errors[fieldKey][index][fieldKeyProp]);
237
234
  error = hasErrors;
238
235
  helperText = hasErrors ? errors[fieldKey][index][fieldKeyProp].message : null;
239
236
  return { error, helperText };
@@ -255,7 +252,7 @@ const isTmpId = (id) => {
255
252
  return id.toString().slice(0, 3) === 'tmp';
256
253
  };
257
254
  exports.isTmpId = isTmpId;
258
- const reducer = (state, newState) => {
255
+ function reducer(state, newState) {
259
256
  if (newState === null) {
260
257
  return null;
261
258
  }
@@ -263,7 +260,7 @@ const reducer = (state, newState) => {
263
260
  return newState;
264
261
  }
265
262
  return Object.assign(Object.assign({}, state), newState);
266
- };
263
+ }
267
264
  exports.reducer = reducer;
268
265
  const getPatternFormat = (type) => {
269
266
  let format = '';
@@ -314,3 +311,10 @@ function buildDateFormatBySchema(dateViews) {
314
311
  return defaultFormat;
315
312
  }
316
313
  exports.buildDateFormatBySchema = buildDateFormatBySchema;
314
+ const slugToCamelCase = (str) => {
315
+ const ret = str.replace(/_([a-z])/g, function (g) {
316
+ return g[1].toUpperCase();
317
+ });
318
+ return ret;
319
+ };
320
+ exports.slugToCamelCase = slugToCamelCase;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drf-react-by-schema",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
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",