drf-react-by-schema 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +84 -0
- package/dist/api.js +613 -0
- package/dist/components/DataGridBySchemaEditable/ConfirmDialog.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/ConfirmDialog.js +21 -0
- package/dist/components/DataGridBySchemaEditable/CustomToolbar.d.ts +16 -0
- package/dist/components/DataGridBySchemaEditable/CustomToolbar.js +77 -0
- package/dist/components/DataGridBySchemaEditable/FooterToolbar.d.ts +16 -0
- package/dist/components/DataGridBySchemaEditable/FooterToolbar.js +41 -0
- package/dist/components/DataGridBySchemaEditable/GridDecimalInput.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/GridDecimalInput.js +32 -0
- package/dist/components/DataGridBySchemaEditable/GridPatternInput.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/GridPatternInput.js +30 -0
- package/dist/components/DataGridBySchemaEditable/InputInterval.d.ts +3 -0
- package/dist/components/DataGridBySchemaEditable/InputInterval.js +105 -0
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts +33 -0
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.js +140 -0
- package/dist/components/DataGridBySchemaEditable/utils.d.ts +15 -0
- package/{src/components/DataGridBySchemaEditable/utils.ts → dist/components/DataGridBySchemaEditable/utils.js} +32 -50
- package/dist/components/DataGridBySchemaEditable.d.ts +34 -0
- package/dist/components/DataGridBySchemaEditable.js +549 -0
- package/dist/components/DataTotals.d.ts +14 -0
- package/dist/components/DataTotals.js +23 -0
- package/dist/components/DialogActions.d.ts +10 -0
- package/dist/components/DialogActions.js +17 -0
- package/dist/components/DialogJSONSchemaForm.d.ts +12 -0
- package/dist/components/DialogJSONSchemaForm.js +20 -0
- package/dist/components/FormButtons.d.ts +14 -0
- package/dist/components/FormButtons.js +39 -0
- package/dist/components/GenericModelList.d.ts +19 -0
- package/dist/components/GenericModelList.js +113 -0
- package/dist/components/GenericRelatedModelList.d.ts +25 -0
- package/dist/components/GenericRelatedModelList.js +111 -0
- package/dist/components/TextFieldBySchema.js +39 -0
- package/dist/context/APIWrapper.d.ts +12 -0
- package/dist/context/APIWrapper.js +341 -0
- package/dist/context/APIWrapperContext.d.ts +75 -0
- package/dist/context/APIWrapperContext.js +15 -0
- package/dist/context/DRFReactBySchemaContext.d.ts +20 -0
- package/dist/context/DRFReactBySchemaContext.js +19 -0
- package/dist/context/DRFReactBySchemaProvider.d.ts +13 -0
- package/dist/context/DRFReactBySchemaProvider.js +53 -0
- package/dist/context/Form.d.ts +11 -0
- package/dist/context/Form.js +82 -0
- package/dist/context/Overlays.d.ts +4 -0
- package/dist/context/Overlays.js +87 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +14 -27
- package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
- package/dist/styles/index.js +28 -0
- package/dist/styles/layout.d.ts +107 -0
- package/dist/styles/layout.js +56 -0
- package/dist/styles/theme.d.ts +21 -0
- package/dist/styles/theme.js +139 -0
- package/dist/utils.d.ts +75 -0
- package/dist/utils.js +268 -0
- package/package.json +15 -2
- package/.eslintrc.js +0 -14
- package/.gitlab-ci.yml +0 -14
- package/src/api.ts +0 -733
- package/src/components/DataGridBySchemaEditable/ConfirmDialog.tsx +0 -41
- package/src/components/DataGridBySchemaEditable/CustomToolbar.tsx +0 -93
- package/src/components/DataGridBySchemaEditable/FooterToolbar.tsx +0 -77
- package/src/components/DataGridBySchemaEditable/GridDecimalInput.tsx +0 -41
- package/src/components/DataGridBySchemaEditable/GridPatternInput.tsx +0 -37
- package/src/components/DataGridBySchemaEditable/InputInterval.tsx +0 -194
- package/src/components/DataGridBySchemaEditable/SelectEditInputCell.tsx +0 -153
- package/src/components/DataGridBySchemaEditable.md +0 -50
- package/src/components/DataGridBySchemaEditable.tsx +0 -747
- package/src/components/DataTotals.tsx +0 -56
- package/src/components/GenericModelList.tsx +0 -155
- package/src/context/DRFReactBySchemaProvider.md +0 -50
- package/src/context/DRFReactBySchemaProvider.tsx +0 -78
- package/src/index.ts +0 -64
- package/src/styles/layout.ts +0 -104
- package/src/styles/theme.ts +0 -190
- package/src/utils.ts +0 -321
- package/styleguide.config.js +0 -13
- package/tsconfig.json +0 -104
- package/webpack.config.js +0 -24
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
35
|
+
var t = {};
|
|
36
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
37
|
+
t[p] = s[p];
|
|
38
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
39
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
40
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
41
|
+
t[p[i]] = s[p[i]];
|
|
42
|
+
}
|
|
43
|
+
return t;
|
|
44
|
+
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
const react_1 = __importStar(require("react"));
|
|
50
|
+
const utils_1 = require("../utils");
|
|
51
|
+
const DialogJSONSchemaForm_1 = __importDefault(require("../components/DialogJSONSchemaForm"));
|
|
52
|
+
const DialogActions_1 = __importDefault(require("../components/DialogActions"));
|
|
53
|
+
const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
|
|
54
|
+
const api_1 = require("../api");
|
|
55
|
+
const APIWrapperContext_1 = require("./APIWrapperContext");
|
|
56
|
+
;
|
|
57
|
+
function APIWrapper({ setLoading, handleLoading, setSnackBar, setDialog, children }) {
|
|
58
|
+
const { serverEndPoint } = DRFReactBySchemaContext_1.DRFReactBySchemaContext
|
|
59
|
+
? react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext)
|
|
60
|
+
: { serverEndPoint: null };
|
|
61
|
+
if (!serverEndPoint) {
|
|
62
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, children));
|
|
63
|
+
}
|
|
64
|
+
const [usuaria, setUsuaria] = (0, react_1.useState)(null);
|
|
65
|
+
const [optionsAC, setOptionsAC] = (0, react_1.useReducer)(utils_1.reducer, {});
|
|
66
|
+
const initialPageForm = {
|
|
67
|
+
id: '',
|
|
68
|
+
schema: null,
|
|
69
|
+
initialValues: null,
|
|
70
|
+
validationSchema: null
|
|
71
|
+
};
|
|
72
|
+
const [pageForm, setPageForm] = (0, react_1.useReducer)(utils_1.reducer, initialPageForm);
|
|
73
|
+
const editModel = (0, react_1.useRef)({});
|
|
74
|
+
const jsonSchemaFormRef = (0, react_1.useRef)(null);
|
|
75
|
+
(0, react_1.useEffect)(() => {
|
|
76
|
+
setUsuaria(null);
|
|
77
|
+
(0, api_1.isLoggedIn)(serverEndPoint).then(usuaria => {
|
|
78
|
+
setUsuaria(usuaria || { erro: 'token inválido' });
|
|
79
|
+
});
|
|
80
|
+
}, []);
|
|
81
|
+
(0, react_1.useEffect)(() => {
|
|
82
|
+
setPageForm(initialPageForm);
|
|
83
|
+
}, []);
|
|
84
|
+
const onTriggerSnackBar = ({ msg, severity = 'info' }) => {
|
|
85
|
+
setSnackBar({
|
|
86
|
+
open: true,
|
|
87
|
+
msg,
|
|
88
|
+
severity
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
const loadSinglePageData = ({ model, objId, optionsACModels, extraValidators = {} }) => __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
setLoading(true);
|
|
93
|
+
if (!objId || objId === 'novo') {
|
|
94
|
+
objId = (0, utils_1.getTmpId)();
|
|
95
|
+
}
|
|
96
|
+
const object = yield (0, api_1.getGenericModel)({
|
|
97
|
+
model,
|
|
98
|
+
serverEndPoint,
|
|
99
|
+
id: (0, utils_1.isTmpId)(objId) ? null : objId
|
|
100
|
+
});
|
|
101
|
+
if (object === false) {
|
|
102
|
+
setPageForm({ schema: false, id: '' });
|
|
103
|
+
console.log('Houve um erro ao tentar carregar os dados!');
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
setLoading(false);
|
|
107
|
+
populateOptionsAC(optionsACModels);
|
|
108
|
+
const values = populateInitialValues(Object.assign({ model, id: objId, extraValidators }, object));
|
|
109
|
+
return values;
|
|
110
|
+
});
|
|
111
|
+
const onSubmit = (model, id, data, event) => __awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
setLoading(true);
|
|
113
|
+
const response = yield (0, api_1.updateDataBySchema)({
|
|
114
|
+
model,
|
|
115
|
+
modelObjectId: id,
|
|
116
|
+
serverEndPoint,
|
|
117
|
+
data,
|
|
118
|
+
schema: pageForm.schema
|
|
119
|
+
});
|
|
120
|
+
setLoading(false);
|
|
121
|
+
if (!['number', 'string'].includes(typeof response)) {
|
|
122
|
+
onTriggerSnackBar({
|
|
123
|
+
msg: 'Houve um problema ao salvar seus dados! Por favor, entre em contato',
|
|
124
|
+
severity: 'error'
|
|
125
|
+
});
|
|
126
|
+
console.log({
|
|
127
|
+
msg: 'Error saving model',
|
|
128
|
+
errors: response,
|
|
129
|
+
data
|
|
130
|
+
});
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
onTriggerSnackBar({
|
|
134
|
+
msg: (id)
|
|
135
|
+
? 'Dados atualizados com sucesso!'
|
|
136
|
+
: 'Criado com sucesso!'
|
|
137
|
+
});
|
|
138
|
+
return response;
|
|
139
|
+
});
|
|
140
|
+
const populateOptionsAC = (optionsACModels) => {
|
|
141
|
+
for (const model of optionsACModels) {
|
|
142
|
+
(0, api_1.getAutoComplete)({ model, serverEndPoint }).then(options => {
|
|
143
|
+
setOptionsAC({ [model]: options });
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
;
|
|
148
|
+
const populateInitialValues = (_a) => {
|
|
149
|
+
var { model, id, isEditModel, extraValidators } = _a, object = __rest(_a, ["model", "id", "isEditModel", "extraValidators"]);
|
|
150
|
+
const values = (0, utils_1.populateValues)(object);
|
|
151
|
+
const yupSchema = (0, utils_1.buildGenericYupValidationSchema)(Object.assign(Object.assign({}, object), { data: values, extraValidators }));
|
|
152
|
+
setPageForm({
|
|
153
|
+
model,
|
|
154
|
+
id,
|
|
155
|
+
schema: object.schema,
|
|
156
|
+
initialValues: values,
|
|
157
|
+
validationSchema: yupSchema
|
|
158
|
+
});
|
|
159
|
+
return values;
|
|
160
|
+
};
|
|
161
|
+
const onEditModel = ({ fieldKey, index, model, id, labelKey, setValue, getValues }) => {
|
|
162
|
+
setDialog({
|
|
163
|
+
open: true,
|
|
164
|
+
loading: true
|
|
165
|
+
});
|
|
166
|
+
(0, api_1.getJSONSchema)({ model, serverEndPoint, id }).then(data => {
|
|
167
|
+
const jsonSchemaSubmit = (e) => __awaiter(this, void 0, void 0, function* () {
|
|
168
|
+
jsonSchemaFormRef.current.onSubmit(e);
|
|
169
|
+
return true;
|
|
170
|
+
});
|
|
171
|
+
setDialog({
|
|
172
|
+
loading: false,
|
|
173
|
+
title: 'Editar',
|
|
174
|
+
Body: react_1.default.createElement(DialogJSONSchemaForm_1.default, { jsonSchemaFormRef: jsonSchemaFormRef, schema: data.serializer.schema, uiSchema: data.serializer.uiSchema, formData: data.formData, onSubmit: onEditModelSave }),
|
|
175
|
+
Actions: react_1.default.createElement(DialogActions_1.default, { setDialog: setDialog, handleSave: jsonSchemaSubmit })
|
|
176
|
+
});
|
|
177
|
+
editModel.current = {
|
|
178
|
+
fieldKey,
|
|
179
|
+
index,
|
|
180
|
+
model,
|
|
181
|
+
id,
|
|
182
|
+
labelKey,
|
|
183
|
+
setValue,
|
|
184
|
+
getValues
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
const onEditModelSave = ({ formData }) => __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
setDialog({ open: false });
|
|
190
|
+
setLoading(true);
|
|
191
|
+
const { fieldKey, index, model, id, labelKey, setValue, getValues } = editModel.current;
|
|
192
|
+
const newModelId = yield (0, api_1.createOrUpdateJSONSchema)({
|
|
193
|
+
model,
|
|
194
|
+
serverEndPoint,
|
|
195
|
+
id,
|
|
196
|
+
formData
|
|
197
|
+
});
|
|
198
|
+
if (newModelId.errors) {
|
|
199
|
+
console.log(newModelId.errors);
|
|
200
|
+
onTriggerSnackBar({
|
|
201
|
+
msg: 'Houve um problema ao salvar a alteração! Por favor, entre em contato.',
|
|
202
|
+
severity: 'error'
|
|
203
|
+
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
onTriggerSnackBar({
|
|
207
|
+
msg: 'Alterações salvas com sucesso!',
|
|
208
|
+
severity: 'info'
|
|
209
|
+
});
|
|
210
|
+
const targetKey = (fieldKey && index >= 0)
|
|
211
|
+
? `${fieldKey}.${index}.${model}`
|
|
212
|
+
: model;
|
|
213
|
+
const newValue = Object.assign(Object.assign(Object.assign({}, getValues(targetKey)), formData), { label: formData[labelKey] });
|
|
214
|
+
setValue(targetKey, newValue);
|
|
215
|
+
populateOptionsAC([model]);
|
|
216
|
+
setLoading(false);
|
|
217
|
+
});
|
|
218
|
+
const onDeleteModel = (model, id, onSuccess) => {
|
|
219
|
+
setDialog({
|
|
220
|
+
open: true,
|
|
221
|
+
loading: false,
|
|
222
|
+
title: 'Apagar',
|
|
223
|
+
Body: 'Tem certeza de que deseja apagar este item?',
|
|
224
|
+
Actions: react_1.default.createElement(DialogActions_1.default, { setDialog: setDialog, handleSave: (e) => {
|
|
225
|
+
return onDeleteModelSave(model, id, onSuccess);
|
|
226
|
+
}, btnConfirm: "Sim, apagar" })
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
const onDeleteModelSave = (model, id, onSuccess) => __awaiter(this, void 0, void 0, function* () {
|
|
230
|
+
setDialog({ open: false });
|
|
231
|
+
setLoading(true);
|
|
232
|
+
const ret = yield (0, api_1.deleteData)(model, serverEndPoint, id);
|
|
233
|
+
if (ret !== false) {
|
|
234
|
+
onTriggerSnackBar({
|
|
235
|
+
msg: 'Apagado com com sucesso!',
|
|
236
|
+
severity: 'info'
|
|
237
|
+
});
|
|
238
|
+
if (onSuccess !== null) {
|
|
239
|
+
onSuccess();
|
|
240
|
+
}
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
setLoading(false);
|
|
244
|
+
onTriggerSnackBar({
|
|
245
|
+
msg: 'Houve um problema ao remover o item! Por favor, entre em contato.',
|
|
246
|
+
severity: 'error'
|
|
247
|
+
});
|
|
248
|
+
return false;
|
|
249
|
+
});
|
|
250
|
+
const onEditRelatedModelSave = ({ model, id, relatedModel, relatedModelId, newRow, schema, onlyAddExisting }) => __awaiter(this, void 0, void 0, function* () {
|
|
251
|
+
const updateUrl = `${model}/${id}/${relatedModel}`;
|
|
252
|
+
if (onlyAddExisting) {
|
|
253
|
+
const response = yield (0, api_1.addExistingRelatedModel)({
|
|
254
|
+
model,
|
|
255
|
+
id,
|
|
256
|
+
serverEndPoint,
|
|
257
|
+
data: {
|
|
258
|
+
onlyAddExisting: {
|
|
259
|
+
key: relatedModel,
|
|
260
|
+
value: newRow.id_to_add
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
if (Object.prototype.hasOwnProperty.call(response, 'errors')) {
|
|
265
|
+
console.log(response);
|
|
266
|
+
onTriggerSnackBar({
|
|
267
|
+
msg: 'Houve um problema ao salvar a alteração! Por favor, entre em contato.',
|
|
268
|
+
severity: 'error'
|
|
269
|
+
});
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
onTriggerSnackBar({
|
|
273
|
+
msg: 'Alterações salvas com sucesso!',
|
|
274
|
+
severity: 'info'
|
|
275
|
+
});
|
|
276
|
+
const object = yield (0, api_1.getGenericModel)({
|
|
277
|
+
model,
|
|
278
|
+
id,
|
|
279
|
+
serverEndPoint,
|
|
280
|
+
relatedModel,
|
|
281
|
+
relatedModelId: newRow.id_to_add
|
|
282
|
+
});
|
|
283
|
+
return object;
|
|
284
|
+
}
|
|
285
|
+
// This is important for related data
|
|
286
|
+
if (schema[model] && !newRow[model]) {
|
|
287
|
+
newRow[model] = id;
|
|
288
|
+
}
|
|
289
|
+
const response = yield (0, api_1.updateDataBySchema)({
|
|
290
|
+
model: relatedModel,
|
|
291
|
+
modelObjectId: newRow.id,
|
|
292
|
+
serverEndPoint,
|
|
293
|
+
data: newRow,
|
|
294
|
+
schema,
|
|
295
|
+
path: updateUrl
|
|
296
|
+
});
|
|
297
|
+
if (response && !Object.prototype.hasOwnProperty.call(response, 'errors')) {
|
|
298
|
+
onTriggerSnackBar({
|
|
299
|
+
msg: 'Alterações salvas com sucesso!',
|
|
300
|
+
severity: 'info'
|
|
301
|
+
});
|
|
302
|
+
return response;
|
|
303
|
+
}
|
|
304
|
+
onTriggerSnackBar({
|
|
305
|
+
msg: 'Não foi possível salvar os dados. Confira os erros.',
|
|
306
|
+
severity: 'error'
|
|
307
|
+
});
|
|
308
|
+
return false;
|
|
309
|
+
});
|
|
310
|
+
const onDeleteRelatedModel = ({ model, id, relatedModel, relatedModelId }) => __awaiter(this, void 0, void 0, function* () {
|
|
311
|
+
const deleteUrl = `${model}/${id}/${relatedModel}`;
|
|
312
|
+
const response = yield (0, api_1.deleteData)(deleteUrl, serverEndPoint, relatedModelId);
|
|
313
|
+
if (response) {
|
|
314
|
+
onTriggerSnackBar({
|
|
315
|
+
msg: 'Alterações salvas com sucesso!',
|
|
316
|
+
severity: 'info'
|
|
317
|
+
});
|
|
318
|
+
return response;
|
|
319
|
+
}
|
|
320
|
+
onTriggerSnackBar({
|
|
321
|
+
msg: 'Houve um problema ao remover o item! Por favor, entre em contato.',
|
|
322
|
+
severity: 'error'
|
|
323
|
+
});
|
|
324
|
+
return false;
|
|
325
|
+
});
|
|
326
|
+
return (react_1.default.createElement(APIWrapperContext_1.APIWrapperContext.Provider, { value: {
|
|
327
|
+
usuaria,
|
|
328
|
+
onSubmit,
|
|
329
|
+
loadSinglePageData,
|
|
330
|
+
handleLoading,
|
|
331
|
+
optionsACState: [optionsAC, setOptionsAC],
|
|
332
|
+
pageFormState: [pageForm, setPageForm],
|
|
333
|
+
onEditModel,
|
|
334
|
+
onDeleteModel,
|
|
335
|
+
onEditRelatedModelSave,
|
|
336
|
+
onDeleteRelatedModel,
|
|
337
|
+
onTriggerSnackBar,
|
|
338
|
+
setDialog
|
|
339
|
+
} }, children));
|
|
340
|
+
}
|
|
341
|
+
exports.default = react_1.default.memo(APIWrapper);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FieldValues, SubmitHandler } from 'react-hook-form';
|
|
3
|
+
import { ItemSchemaColumnsType, Id, Item, SchemaType } from '../utils';
|
|
4
|
+
export interface LoadSinglePageDataProps {
|
|
5
|
+
model: string;
|
|
6
|
+
objId?: Id;
|
|
7
|
+
objTitleField?: string;
|
|
8
|
+
optionsACModels: string[];
|
|
9
|
+
basePath?: string;
|
|
10
|
+
formPath?: string | null;
|
|
11
|
+
extraValidators?: Item;
|
|
12
|
+
}
|
|
13
|
+
export type OptionsACType = Record<string, Item[]>;
|
|
14
|
+
export interface PageFormType {
|
|
15
|
+
id: Id;
|
|
16
|
+
schema: SchemaType | null;
|
|
17
|
+
initialValues: Item | null;
|
|
18
|
+
validationSchema: Item | null;
|
|
19
|
+
}
|
|
20
|
+
export interface OnEditModelType {
|
|
21
|
+
fieldKey: string;
|
|
22
|
+
index: string;
|
|
23
|
+
model: string;
|
|
24
|
+
id: Id;
|
|
25
|
+
labelKey: string;
|
|
26
|
+
setValue: (p: any) => void;
|
|
27
|
+
getValues: (p: any) => any;
|
|
28
|
+
}
|
|
29
|
+
export interface OnEditRelatedModelType {
|
|
30
|
+
model: string;
|
|
31
|
+
id: Id;
|
|
32
|
+
relatedModel: string;
|
|
33
|
+
relatedModelId: Id;
|
|
34
|
+
newRow: Item;
|
|
35
|
+
schema: SchemaType;
|
|
36
|
+
onlyAddExisting: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface OnDeleteRelatedModelType {
|
|
39
|
+
model: string;
|
|
40
|
+
id: Id;
|
|
41
|
+
relatedModel: string;
|
|
42
|
+
relatedModelId: Id;
|
|
43
|
+
}
|
|
44
|
+
export interface SnackBarType {
|
|
45
|
+
open?: boolean;
|
|
46
|
+
msg?: string;
|
|
47
|
+
severity?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface DialogType {
|
|
50
|
+
open: boolean;
|
|
51
|
+
loading?: boolean;
|
|
52
|
+
title?: string;
|
|
53
|
+
Body?: React.ReactNode;
|
|
54
|
+
Actions?: React.ReactNode;
|
|
55
|
+
}
|
|
56
|
+
export type DRFReactBySchemaSubmitHandler = (...args: [...[model: string, id: Id], ...Parameters<SubmitHandler<FieldValues>>]) => ReturnType<SubmitHandler<FieldValues>>;
|
|
57
|
+
export interface APIWrapperContextType {
|
|
58
|
+
usuaria: Item | null;
|
|
59
|
+
onSubmit: DRFReactBySchemaSubmitHandler;
|
|
60
|
+
loadSinglePageData: (p: LoadSinglePageDataProps) => Promise<boolean | FieldValues>;
|
|
61
|
+
handleLoading: (p: boolean) => void;
|
|
62
|
+
optionsACState: [{
|
|
63
|
+
[x: string]: any;
|
|
64
|
+
}, React.Dispatch<OptionsACType>];
|
|
65
|
+
pageFormState: [{
|
|
66
|
+
[x: string]: any;
|
|
67
|
+
}, React.Dispatch<PageFormType>];
|
|
68
|
+
onEditModel: (p: OnEditModelType) => void;
|
|
69
|
+
onDeleteModel: (model: string, id: Id, onSuccess: () => void | null) => void;
|
|
70
|
+
onEditRelatedModelSave: (p: OnEditRelatedModelType) => Promise<boolean | Id | ItemSchemaColumnsType>;
|
|
71
|
+
onDeleteRelatedModel: (p: OnDeleteRelatedModelType) => Promise<boolean>;
|
|
72
|
+
onTriggerSnackBar: (p: SnackBarType) => void;
|
|
73
|
+
setDialog: React.Dispatch<React.SetStateAction<DialogType>>;
|
|
74
|
+
}
|
|
75
|
+
export declare const APIWrapperContext: React.Context<APIWrapperContextType | null>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.APIWrapperContext = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
;
|
|
9
|
+
;
|
|
10
|
+
;
|
|
11
|
+
;
|
|
12
|
+
;
|
|
13
|
+
;
|
|
14
|
+
;
|
|
15
|
+
exports.APIWrapperContext = react_1.default.createContext(null);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Theme } from '@mui/material/styles';
|
|
3
|
+
export interface serverEndPointType {
|
|
4
|
+
url: string;
|
|
5
|
+
autocomplete?: string;
|
|
6
|
+
api?: string;
|
|
7
|
+
JSONSchema?: string;
|
|
8
|
+
apiTokenUrl: string;
|
|
9
|
+
getToken?: string;
|
|
10
|
+
refreshToken?: string;
|
|
11
|
+
verifyToken?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DRFReactBySchemaContextType {
|
|
14
|
+
serverEndPoint: serverEndPointType | null;
|
|
15
|
+
theme: Theme;
|
|
16
|
+
isInBatches?: boolean;
|
|
17
|
+
firstBatchLength?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const DRFReactBySchemaContext: React.Context<DRFReactBySchemaContextType>;
|
|
20
|
+
export declare const useTheme: () => Theme;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useTheme = exports.DRFReactBySchemaContext = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const theme_1 = __importDefault(require("../styles/theme"));
|
|
9
|
+
exports.DRFReactBySchemaContext = react_1.default.createContext({
|
|
10
|
+
serverEndPoint: null,
|
|
11
|
+
theme: theme_1.default,
|
|
12
|
+
isInBatches: true,
|
|
13
|
+
firstBatchLength: 100
|
|
14
|
+
});
|
|
15
|
+
const useTheme = () => {
|
|
16
|
+
const context = react_1.default.useContext(exports.DRFReactBySchemaContext);
|
|
17
|
+
return context.theme;
|
|
18
|
+
};
|
|
19
|
+
exports.useTheme = useTheme;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DRFReactBySchemaContextType } from './DRFReactBySchemaContext';
|
|
3
|
+
interface DRFReactBySchemaProviderProps extends DRFReactBySchemaContextType {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
*
|
|
9
|
+
* @param {*} props
|
|
10
|
+
* @returns {*}
|
|
11
|
+
*/
|
|
12
|
+
declare const DRFReactBySchemaProvider: ({ serverEndPoint, theme, isInBatches, firstBatchLength, children }: DRFReactBySchemaProviderProps) => JSX.Element;
|
|
13
|
+
export default DRFReactBySchemaProvider;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const styles_1 = require("@mui/material/styles");
|
|
8
|
+
const CssBaseline_1 = __importDefault(require("@mui/material/CssBaseline"));
|
|
9
|
+
const theme_1 = __importDefault(require("../styles/theme"));
|
|
10
|
+
const Overlays_1 = __importDefault(require("./Overlays"));
|
|
11
|
+
const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
*
|
|
15
|
+
* @param {*} props
|
|
16
|
+
* @returns {*}
|
|
17
|
+
*/
|
|
18
|
+
const DRFReactBySchemaProvider = ({ serverEndPoint, theme, isInBatches, firstBatchLength, children }) => {
|
|
19
|
+
if (serverEndPoint) {
|
|
20
|
+
const defaultKeys = [
|
|
21
|
+
'autocomplete',
|
|
22
|
+
'api',
|
|
23
|
+
['JSONSchema', 'jsonschema'],
|
|
24
|
+
['getToken', ''],
|
|
25
|
+
['refreshToken', 'refresh'],
|
|
26
|
+
['verifyToken', 'verify']
|
|
27
|
+
];
|
|
28
|
+
for (const key of defaultKeys) {
|
|
29
|
+
const hybridKey = (typeof key === 'string')
|
|
30
|
+
? key
|
|
31
|
+
: key[0];
|
|
32
|
+
const hybridUrl = (typeof key === 'string')
|
|
33
|
+
? key
|
|
34
|
+
: key[1];
|
|
35
|
+
if (serverEndPoint[hybridKey]) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
serverEndPoint[hybridKey] = `${serverEndPoint.url}/${hybridUrl}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const mergedTheme = (theme)
|
|
42
|
+
? Object.assign(Object.assign({}, theme_1.default), theme) : theme_1.default;
|
|
43
|
+
return (react_1.default.createElement(styles_1.ThemeProvider, { theme: mergedTheme },
|
|
44
|
+
react_1.default.createElement(CssBaseline_1.default, null),
|
|
45
|
+
react_1.default.createElement(DRFReactBySchemaContext_1.DRFReactBySchemaContext.Provider, { value: {
|
|
46
|
+
serverEndPoint,
|
|
47
|
+
theme,
|
|
48
|
+
isInBatches,
|
|
49
|
+
firstBatchLength
|
|
50
|
+
} },
|
|
51
|
+
react_1.default.createElement(Overlays_1.default, { children: children }))));
|
|
52
|
+
};
|
|
53
|
+
exports.default = DRFReactBySchemaProvider;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Id } from '../utils';
|
|
3
|
+
interface FormProps {
|
|
4
|
+
model: string;
|
|
5
|
+
id: Id;
|
|
6
|
+
objTitleField?: string;
|
|
7
|
+
optionsACModels: string[];
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export default function Form({ model, id, objTitleField, optionsACModels, children }: FormProps): JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const react_1 = __importStar(require("react"));
|
|
30
|
+
const react_hook_form_1 = require("react-hook-form");
|
|
31
|
+
const yup_1 = require("@hookform/resolvers/yup");
|
|
32
|
+
const Box_1 = __importDefault(require("@mui/material/Box"));
|
|
33
|
+
const AdapterMoment_1 = require("@mui/x-date-pickers/AdapterMoment");
|
|
34
|
+
const LocalizationProvider_1 = require("@mui/x-date-pickers/LocalizationProvider");
|
|
35
|
+
const FormButtons_1 = __importDefault(require("../components/FormButtons"));
|
|
36
|
+
const APIWrapperContext_1 = require("./APIWrapperContext");
|
|
37
|
+
const utils_1 = require("../utils");
|
|
38
|
+
const DRFReactBySchemaContext_1 = require("./DRFReactBySchemaContext");
|
|
39
|
+
function Form({ model, id, objTitleField = 'name', optionsACModels = [], children }) {
|
|
40
|
+
const apiContext = react_1.default.useContext(APIWrapperContext_1.APIWrapperContext);
|
|
41
|
+
const context = react_1.default.useContext(DRFReactBySchemaContext_1.DRFReactBySchemaContext);
|
|
42
|
+
if (!context.serverEndPoint || !apiContext) {
|
|
43
|
+
console.error('Error in drf-react-by-schema: There is no serverEndPoint configured!');
|
|
44
|
+
return (react_1.default.createElement(react_1.default.Fragment, null));
|
|
45
|
+
}
|
|
46
|
+
const { loadSinglePageData, onSubmit, onEditModel, onDeleteModel, onEditRelatedModelSave, onDeleteRelatedModel } = apiContext;
|
|
47
|
+
const pageForm = apiContext.pageFormState[0];
|
|
48
|
+
const optionsAC = apiContext.optionsACState[0];
|
|
49
|
+
const { control, handleSubmit, reset, getValues, setValue, formState: { errors, isDirty } } = (0, react_hook_form_1.useForm)({
|
|
50
|
+
mode: 'onBlur',
|
|
51
|
+
resolver: (0, yup_1.yupResolver)(pageForm.validationSchema)
|
|
52
|
+
});
|
|
53
|
+
const loadAllData = () => {
|
|
54
|
+
loadSinglePageData({
|
|
55
|
+
model,
|
|
56
|
+
objTitleField,
|
|
57
|
+
objId: id,
|
|
58
|
+
optionsACModels
|
|
59
|
+
}).then(values => {
|
|
60
|
+
if (values && typeof values !== 'boolean') {
|
|
61
|
+
reset(values);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
(0, react_1.useEffect)(() => {
|
|
66
|
+
loadAllData();
|
|
67
|
+
}, [id]);
|
|
68
|
+
const formButtonProps = {
|
|
69
|
+
objId: id,
|
|
70
|
+
formDisabled: !isDirty,
|
|
71
|
+
title: (0, utils_1.isTmpId)(id) ? 'Novo' : 'Editar'
|
|
72
|
+
};
|
|
73
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, pageForm.initialValues && pageForm.schema && control &&
|
|
74
|
+
react_1.default.createElement("form", { onSubmit: handleSubmit((data, event) => {
|
|
75
|
+
onSubmit(model, id, data, event);
|
|
76
|
+
}) },
|
|
77
|
+
react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
|
|
78
|
+
react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps)),
|
|
79
|
+
react_1.default.createElement(Box_1.default, null, children),
|
|
80
|
+
react_1.default.createElement(FormButtons_1.default, Object.assign({}, formButtonProps, { bottom: true }))))));
|
|
81
|
+
}
|
|
82
|
+
exports.default = Form;
|