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.
Files changed (79) hide show
  1. package/dist/api.d.ts +84 -0
  2. package/dist/api.js +613 -0
  3. package/dist/components/DataGridBySchemaEditable/ConfirmDialog.d.ts +8 -0
  4. package/dist/components/DataGridBySchemaEditable/ConfirmDialog.js +21 -0
  5. package/dist/components/DataGridBySchemaEditable/CustomToolbar.d.ts +16 -0
  6. package/dist/components/DataGridBySchemaEditable/CustomToolbar.js +77 -0
  7. package/dist/components/DataGridBySchemaEditable/FooterToolbar.d.ts +16 -0
  8. package/dist/components/DataGridBySchemaEditable/FooterToolbar.js +41 -0
  9. package/dist/components/DataGridBySchemaEditable/GridDecimalInput.d.ts +8 -0
  10. package/dist/components/DataGridBySchemaEditable/GridDecimalInput.js +32 -0
  11. package/dist/components/DataGridBySchemaEditable/GridPatternInput.d.ts +8 -0
  12. package/dist/components/DataGridBySchemaEditable/GridPatternInput.js +30 -0
  13. package/dist/components/DataGridBySchemaEditable/InputInterval.d.ts +3 -0
  14. package/dist/components/DataGridBySchemaEditable/InputInterval.js +105 -0
  15. package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts +33 -0
  16. package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.js +140 -0
  17. package/dist/components/DataGridBySchemaEditable/utils.d.ts +15 -0
  18. package/{src/components/DataGridBySchemaEditable/utils.ts → dist/components/DataGridBySchemaEditable/utils.js} +32 -50
  19. package/dist/components/DataGridBySchemaEditable.d.ts +34 -0
  20. package/dist/components/DataGridBySchemaEditable.js +549 -0
  21. package/dist/components/DataTotals.d.ts +14 -0
  22. package/dist/components/DataTotals.js +23 -0
  23. package/dist/components/DialogActions.d.ts +10 -0
  24. package/dist/components/DialogActions.js +17 -0
  25. package/dist/components/DialogJSONSchemaForm.d.ts +12 -0
  26. package/dist/components/DialogJSONSchemaForm.js +20 -0
  27. package/dist/components/FormButtons.d.ts +14 -0
  28. package/dist/components/FormButtons.js +39 -0
  29. package/dist/components/GenericModelList.d.ts +19 -0
  30. package/dist/components/GenericModelList.js +113 -0
  31. package/dist/components/GenericRelatedModelList.d.ts +25 -0
  32. package/dist/components/GenericRelatedModelList.js +111 -0
  33. package/dist/components/TextFieldBySchema.js +39 -0
  34. package/dist/context/APIWrapper.d.ts +12 -0
  35. package/dist/context/APIWrapper.js +341 -0
  36. package/dist/context/APIWrapperContext.d.ts +75 -0
  37. package/dist/context/APIWrapperContext.js +15 -0
  38. package/dist/context/DRFReactBySchemaContext.d.ts +20 -0
  39. package/dist/context/DRFReactBySchemaContext.js +19 -0
  40. package/dist/context/DRFReactBySchemaProvider.d.ts +13 -0
  41. package/dist/context/DRFReactBySchemaProvider.js +53 -0
  42. package/dist/context/Form.d.ts +11 -0
  43. package/dist/context/Form.js +82 -0
  44. package/dist/context/Overlays.d.ts +4 -0
  45. package/dist/context/Overlays.js +87 -0
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.js +14 -27
  48. package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
  49. package/dist/styles/index.js +28 -0
  50. package/dist/styles/layout.d.ts +107 -0
  51. package/dist/styles/layout.js +56 -0
  52. package/dist/styles/theme.d.ts +21 -0
  53. package/dist/styles/theme.js +139 -0
  54. package/dist/utils.d.ts +75 -0
  55. package/dist/utils.js +268 -0
  56. package/package.json +15 -2
  57. package/.eslintrc.js +0 -14
  58. package/.gitlab-ci.yml +0 -14
  59. package/src/api.ts +0 -733
  60. package/src/components/DataGridBySchemaEditable/ConfirmDialog.tsx +0 -41
  61. package/src/components/DataGridBySchemaEditable/CustomToolbar.tsx +0 -93
  62. package/src/components/DataGridBySchemaEditable/FooterToolbar.tsx +0 -77
  63. package/src/components/DataGridBySchemaEditable/GridDecimalInput.tsx +0 -41
  64. package/src/components/DataGridBySchemaEditable/GridPatternInput.tsx +0 -37
  65. package/src/components/DataGridBySchemaEditable/InputInterval.tsx +0 -194
  66. package/src/components/DataGridBySchemaEditable/SelectEditInputCell.tsx +0 -153
  67. package/src/components/DataGridBySchemaEditable.md +0 -50
  68. package/src/components/DataGridBySchemaEditable.tsx +0 -747
  69. package/src/components/DataTotals.tsx +0 -56
  70. package/src/components/GenericModelList.tsx +0 -155
  71. package/src/context/DRFReactBySchemaProvider.md +0 -50
  72. package/src/context/DRFReactBySchemaProvider.tsx +0 -78
  73. package/src/index.ts +0 -64
  74. package/src/styles/layout.ts +0 -104
  75. package/src/styles/theme.ts +0 -190
  76. package/src/utils.ts +0 -321
  77. package/styleguide.config.js +0 -13
  78. package/tsconfig.json +0 -104
  79. 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;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export default function Overlays({ children }: {
3
+ children: React.ReactNode;
4
+ }): JSX.Element;