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.
- package/dist/api.d.ts +7 -13
- package/dist/api.js +77 -77
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts +1 -1
- package/dist/components/DataGridBySchemaEditable.js +5 -5
- package/dist/components/DialogActions.d.ts +3 -3
- package/dist/components/DialogActions.js +2 -4
- package/dist/components/GenericModelList.js +4 -0
- package/dist/components/forms/DialogFormBySchema.d.ts +14 -0
- package/dist/components/forms/DialogFormBySchema.js +61 -0
- package/dist/components/forms/FieldBySchema.d.ts +3 -0
- package/dist/components/forms/FieldBySchema.js +65 -0
- package/dist/components/forms/FormBySchema.d.ts +19 -0
- package/dist/components/forms/FormBySchema.js +164 -0
- package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/AutocompleteFieldBySchema.js +86 -0
- package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/BooleanFieldBySchema.js +41 -0
- package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/DesktopDatePickerBySchema.js +49 -0
- package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.js +41 -0
- package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.js +203 -0
- package/dist/components/forms/inputs/FloatFieldBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/FloatFieldBySchema.js +60 -0
- package/dist/components/forms/inputs/TextFieldBySchema.d.ts +3 -0
- package/dist/components/forms/inputs/TextFieldBySchema.js +44 -0
- package/dist/context/APIWrapper.d.ts +5 -5
- package/dist/context/APIWrapper.js +135 -87
- package/dist/context/APIWrapperContext.d.ts +22 -9
- package/dist/context/APIWrapperContext.js +42 -9
- package/dist/context/DRFReactBySchemaContext.d.ts +4 -4
- package/dist/context/DRFReactBySchemaContext.js +5 -5
- package/dist/context/DRFReactBySchemaProvider.d.ts +1 -1
- package/dist/context/DRFReactBySchemaProvider.js +6 -9
- package/dist/context/Form.d.ts +1 -1
- package/dist/context/Form.js +13 -14
- package/dist/context/FormContext.js +0 -7
- package/dist/context/Overlays.js +11 -12
- package/dist/index.d.ts +16 -6
- package/dist/index.js +31 -7
- package/dist/styles/layout.d.ts +7 -0
- package/dist/styles/layout.js +2 -1
- package/dist/utils.d.ts +42 -4
- package/dist/utils.js +22 -18
- 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
|
|
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.
|
|
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
|
|
15
|
+
const useDRFReactBySchema = () => {
|
|
16
16
|
const context = react_1.default.useContext(exports.DRFReactBySchemaContext);
|
|
17
|
-
return context
|
|
17
|
+
return context;
|
|
18
18
|
};
|
|
19
|
-
exports.
|
|
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 =
|
|
29
|
+
const hybridKey = typeof key === 'string'
|
|
30
30
|
? key
|
|
31
31
|
: key[0];
|
|
32
|
-
const hybridUrl =
|
|
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
|
};
|
package/dist/context/Form.d.ts
CHANGED
|
@@ -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 {};
|
package/dist/context/Form.js
CHANGED
|
@@ -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
|
|
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(
|
|
94
|
-
react_1.default.createElement(
|
|
95
|
-
|
|
96
|
-
|
|
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);
|
package/dist/context/Overlays.js
CHANGED
|
@@ -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: () => {
|
|
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
|
-
|
|
82
|
-
|
|
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 {
|
|
5
|
-
import {
|
|
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
|
|
12
|
-
|
|
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.
|
|
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, "
|
|
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, "
|
|
41
|
-
//
|
|
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
|
-
|
|
53
|
-
|
|
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;
|
package/dist/styles/layout.d.ts
CHANGED
|
@@ -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;
|
package/dist/styles/layout.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.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: ({
|
|
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
|
|
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
|
|
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
|
|
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 = ({
|
|
226
|
+
const errorProps = ({ errors, fieldKey, fieldKeyProp, index, }) => {
|
|
233
227
|
let error;
|
|
234
228
|
let helperText;
|
|
235
229
|
if (index) {
|
|
236
|
-
const hasErrors = errors &&
|
|
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
|
-
|
|
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