drf-react-by-schema 0.3.0 → 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 (83) 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/{src/context/APIWrapperContext.tsx → dist/context/APIWrapperContext.d.ts} +22 -31
  37. package/dist/context/APIWrapperContext.js +15 -0
  38. package/{src/context/DRFReactBySchemaContext.tsx → dist/context/DRFReactBySchemaContext.d.ts} +4 -17
  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/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
  48. package/dist/styles/index.js +28 -0
  49. package/dist/styles/layout.d.ts +107 -0
  50. package/dist/styles/layout.js +56 -0
  51. package/dist/styles/theme.d.ts +21 -0
  52. package/dist/styles/theme.js +139 -0
  53. package/dist/utils.d.ts +75 -0
  54. package/dist/utils.js +268 -0
  55. package/package.json +11 -2
  56. package/.eslintrc.js +0 -14
  57. package/.gitlab-ci.yml +0 -14
  58. package/src/api.ts +0 -727
  59. package/src/components/DataGridBySchemaEditable/ConfirmDialog.tsx +0 -41
  60. package/src/components/DataGridBySchemaEditable/CustomToolbar.tsx +0 -93
  61. package/src/components/DataGridBySchemaEditable/FooterToolbar.tsx +0 -77
  62. package/src/components/DataGridBySchemaEditable/GridDecimalInput.tsx +0 -41
  63. package/src/components/DataGridBySchemaEditable/GridPatternInput.tsx +0 -37
  64. package/src/components/DataGridBySchemaEditable/InputInterval.tsx +0 -194
  65. package/src/components/DataGridBySchemaEditable/SelectEditInputCell.tsx +0 -154
  66. package/src/components/DataGridBySchemaEditable.md +0 -50
  67. package/src/components/DataGridBySchemaEditable.tsx +0 -758
  68. package/src/components/DataTotals.tsx +0 -57
  69. package/src/components/DialogActions.tsx +0 -33
  70. package/src/components/DialogJSONSchemaForm.tsx +0 -40
  71. package/src/components/GenericModelList.tsx +0 -165
  72. package/src/components/GenericRelatedModelList.tsx +0 -168
  73. package/src/context/APIWrapper.tsx +0 -447
  74. package/src/context/DRFReactBySchemaProvider.md +0 -57
  75. package/src/context/DRFReactBySchemaProvider.tsx +0 -72
  76. package/src/context/Overlays.tsx +0 -94
  77. package/src/index.ts +0 -77
  78. package/src/styles/layout.ts +0 -104
  79. package/src/styles/theme.ts +0 -190
  80. package/src/utils.ts +0 -327
  81. package/styleguide.config.js +0 -13
  82. package/tsconfig.json +0 -104
  83. package/webpack.config.js +0 -24
package/dist/api.d.ts ADDED
@@ -0,0 +1,84 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { serverEndPointType } from './context/DRFReactBySchemaContext';
3
+ import { Item, SchemaType, DataSchemaColumnsType, ItemSchemaColumnsType } from './utils';
4
+ type Id = string | number | null;
5
+ /**
6
+ * Interface for CRUD on API
7
+ *
8
+ * @interface TargetApiParams
9
+ */
10
+ interface TargetApiParams {
11
+ path: string;
12
+ serverEndPoint: serverEndPointType | null;
13
+ data: Item;
14
+ id: Id;
15
+ }
16
+ interface TargetApiParamsOptionalId {
17
+ path: string;
18
+ serverEndPoint: serverEndPointType | null;
19
+ data: Item;
20
+ id?: Id;
21
+ }
22
+ /**
23
+ *
24
+ * @param param0
25
+ * @returns Id when succesfully updated, false otherwise
26
+ */
27
+ export declare const updateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<false | Id | AxiosResponse<any, any>>;
28
+ export declare const partialUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParams) => Promise<Id | AxiosResponse<any, any>>;
29
+ export declare const createData: ({ path, serverEndPoint, data }: Omit<TargetApiParams, 'id'>) => Promise<false | AxiosResponse<any, any>>;
30
+ export declare const deleteData: (path: string, serverEndPoint: serverEndPointType | null, id: Id) => Promise<boolean>;
31
+ export declare const createOrUpdateData: ({ path, serverEndPoint, data, id }: TargetApiParamsOptionalId) => Promise<false | Id | AxiosResponse<any, any>>;
32
+ export declare const updateDataBySchema: ({ model, modelObjectId, serverEndPoint, data, schema, path }: {
33
+ model: string;
34
+ modelObjectId: Id;
35
+ serverEndPoint: serverEndPointType | null;
36
+ data: Item;
37
+ schema: SchemaType;
38
+ path?: string | null | undefined;
39
+ }) => Promise<false | Id | AxiosResponse<any, any>>;
40
+ export declare const addExistingRelatedModel: ({ model, serverEndPoint, id, data }: {
41
+ model: string;
42
+ serverEndPoint: serverEndPointType | null;
43
+ id: Id;
44
+ data: Item;
45
+ }) => Promise<Id | AxiosResponse<any, any>>;
46
+ export declare const getAutoComplete: ({ model, serverEndPoint }: {
47
+ model: string;
48
+ serverEndPoint: serverEndPointType | null;
49
+ }) => Promise<false | Item[]>;
50
+ export declare const getJSONSchema: ({ model, serverEndPoint, id }: {
51
+ model: string;
52
+ serverEndPoint: serverEndPointType | null;
53
+ id?: Id | undefined;
54
+ }) => Promise<any>;
55
+ export declare const createOrUpdateJSONSchema: ({ model, serverEndPoint, id, formData }: {
56
+ model: string;
57
+ serverEndPoint: serverEndPointType | null;
58
+ id?: Id | undefined;
59
+ formData: Item;
60
+ }) => Promise<any>;
61
+ export declare const loginByPayload: (payload: Item, serverEndPoint: serverEndPointType | null) => Promise<boolean>;
62
+ export declare const setAuthToken: (token: string | null) => void;
63
+ export declare const isLoggedIn: (serverEndPoint: serverEndPointType | null) => Promise<false | Item[]>;
64
+ export interface getGenericModelListProps {
65
+ model: string;
66
+ serverEndPoint: serverEndPointType | null;
67
+ id?: Id;
68
+ relatedModel?: string;
69
+ relatedModelId?: Id;
70
+ columnFields: string[];
71
+ hiddenFields?: string[];
72
+ creatableFields?: string[];
73
+ isInBatches?: boolean;
74
+ loadedSchema?: SchemaType | boolean;
75
+ }
76
+ export declare const getGenericModelList: ({ model, serverEndPoint, id, relatedModel, relatedModelId, columnFields, hiddenFields, creatableFields, isInBatches, loadedSchema }: getGenericModelListProps) => Promise<false | DataSchemaColumnsType>;
77
+ export declare const getGenericModel: ({ model, serverEndPoint, id, relatedModel, relatedModelId }: {
78
+ model: string;
79
+ serverEndPoint: serverEndPointType | null;
80
+ id?: Id | undefined;
81
+ relatedModel?: string | undefined;
82
+ relatedModelId?: string | undefined;
83
+ }) => Promise<false | ItemSchemaColumnsType>;
84
+ export {};
package/dist/api.js ADDED
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ 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 = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const moment_1 = __importDefault(require("moment"));
18
+ const utils_1 = require("./utils");
19
+ ;
20
+ ;
21
+ const getOptions = (path, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
22
+ var _a;
23
+ if (!serverEndPoint) {
24
+ console.log('Não há definição de API (serverEndPoint!');
25
+ return false;
26
+ }
27
+ const url = `${serverEndPoint.api}/${path}`;
28
+ try {
29
+ const { data } = yield axios_1.default.options(url);
30
+ return data;
31
+ }
32
+ catch (e) {
33
+ if (e.isAxiosError) {
34
+ const err = e;
35
+ if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
36
+ const isRefreshed = yield refreshToken(serverEndPoint);
37
+ if (!isRefreshed) {
38
+ console.log('Token expirou! Deve-se fazer login de novo');
39
+ return false;
40
+ }
41
+ try {
42
+ const { data } = yield axios_1.default.options(url);
43
+ return data;
44
+ }
45
+ catch (e) {
46
+ console.log(`Error fetching options from ${url}`, e);
47
+ return false;
48
+ }
49
+ }
50
+ console.log(`Error fetching options from ${url}`, e);
51
+ return false;
52
+ }
53
+ }
54
+ });
55
+ const getSchema = (path, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
56
+ const options = yield getOptions(path, serverEndPoint);
57
+ if (!options || !options.actions || !options.actions.POST) {
58
+ return false;
59
+ }
60
+ // Special default value of "currentUser":
61
+ let usuaria = false;
62
+ const postActions = options.actions.POST;
63
+ for (const [key, field] of Object.entries(postActions)) {
64
+ if (field.model_default === 'currentUser') {
65
+ if (!usuaria) {
66
+ usuaria = yield (0, exports.isLoggedIn)(serverEndPoint);
67
+ }
68
+ if (usuaria) {
69
+ options.actions.POST[key].model_default = {
70
+ id: usuaria.id,
71
+ label: usuaria.first_name
72
+ };
73
+ }
74
+ }
75
+ }
76
+ return options.actions.POST;
77
+ });
78
+ const getData = (path, serverEndPoint, route = 'api') => __awaiter(void 0, void 0, void 0, function* () {
79
+ var _b;
80
+ if (!serverEndPoint) {
81
+ return false;
82
+ }
83
+ const url = `${serverEndPoint[route]}/${path}`;
84
+ try {
85
+ const { data } = yield axios_1.default.get(url);
86
+ return data;
87
+ }
88
+ catch (e) {
89
+ if (e.isAxiosError) {
90
+ const err = e;
91
+ if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
92
+ const isRefreshed = yield refreshToken(serverEndPoint);
93
+ if (!isRefreshed) {
94
+ console.log('Token expirou! Deve-se fazer login de novo');
95
+ return false;
96
+ }
97
+ try {
98
+ const { data } = yield axios_1.default.get(url);
99
+ return data;
100
+ }
101
+ catch (e) {
102
+ console.log(`Error fetching data from ${url} after token refresh`, e);
103
+ return false;
104
+ }
105
+ }
106
+ }
107
+ console.log(`Error fetching data from ${url}`, e);
108
+ return false;
109
+ }
110
+ });
111
+ /**
112
+ *
113
+ * @param param0
114
+ * @returns Id when succesfully updated, false otherwise
115
+ */
116
+ const updateData = ({ path, serverEndPoint, data, id }) => __awaiter(void 0, void 0, void 0, function* () {
117
+ var _c, _d, _e;
118
+ if (!serverEndPoint) {
119
+ return { errors: 'Não há definição de API (serverEndPoint!' };
120
+ }
121
+ const url = `${serverEndPoint.api}/${path}/${id}/`;
122
+ try {
123
+ yield axios_1.default.put(url, data);
124
+ }
125
+ catch (e) {
126
+ if (e.isAxiosError) {
127
+ const err = e;
128
+ if (((_c = err.response) === null || _c === void 0 ? void 0 : _c.status) === 401) {
129
+ const isRefreshed = yield refreshToken(serverEndPoint);
130
+ if (!isRefreshed) {
131
+ console.log('Token expirou! Deve-se fazer login de novo');
132
+ return false;
133
+ }
134
+ try {
135
+ yield axios_1.default.put(url, data);
136
+ }
137
+ catch (e) {
138
+ console.log(`Error updating data at ${url}`, data, e);
139
+ return false;
140
+ }
141
+ return id;
142
+ }
143
+ console.log(`Error updating data at ${url}`, data, (_d = err.response) === null || _d === void 0 ? void 0 : _d.data);
144
+ return { errors: (_e = err.response) === null || _e === void 0 ? void 0 : _e.data };
145
+ }
146
+ }
147
+ return id;
148
+ });
149
+ exports.updateData = updateData;
150
+ const partialUpdateData = ({ path, serverEndPoint, data, id }) => __awaiter(void 0, void 0, void 0, function* () {
151
+ var _f, _g, _h, _j, _k;
152
+ if (!serverEndPoint) {
153
+ return { errors: 'Não há definição de API (serverEndPoint!' };
154
+ }
155
+ const url = `${serverEndPoint.api}/${path}/${id}/`;
156
+ try {
157
+ yield axios_1.default.patch(url, data);
158
+ // DEBUG console.log({ path, data, id });
159
+ }
160
+ catch (e) {
161
+ if (e.isAxiosError) {
162
+ const err = e;
163
+ if (((_f = err.response) === null || _f === void 0 ? void 0 : _f.status) === 401) {
164
+ const isRefreshed = yield refreshToken(serverEndPoint);
165
+ if (!isRefreshed) {
166
+ console.log('Token expirou! Deve-se fazer login de novo');
167
+ return { errors: (_g = err.response) === null || _g === void 0 ? void 0 : _g.data };
168
+ }
169
+ try {
170
+ yield axios_1.default.patch(url, data);
171
+ }
172
+ catch (e) {
173
+ console.log(`Error partial updating data at ${url}`, data, e);
174
+ return { errors: (_h = err.response) === null || _h === void 0 ? void 0 : _h.data };
175
+ }
176
+ return id;
177
+ }
178
+ console.log(`Error partial updating data at ${url}`, data, (_j = err.response) === null || _j === void 0 ? void 0 : _j.data);
179
+ return { errors: (_k = err.response) === null || _k === void 0 ? void 0 : _k.data };
180
+ }
181
+ }
182
+ return id;
183
+ });
184
+ exports.partialUpdateData = partialUpdateData;
185
+ const createData = ({ path, serverEndPoint, data }) => __awaiter(void 0, void 0, void 0, function* () {
186
+ var _l, _m, _o;
187
+ if (!serverEndPoint) {
188
+ return { errors: 'Não há definição de API (serverEndPoint!' };
189
+ }
190
+ const url = `${serverEndPoint.api}/${path}/`;
191
+ let ret = {};
192
+ try {
193
+ ret = yield axios_1.default.post(url, data);
194
+ }
195
+ catch (e) {
196
+ if (e.isAxiosError) {
197
+ const err = e;
198
+ if (((_l = err.response) === null || _l === void 0 ? void 0 : _l.status) === 401) {
199
+ const isRefreshed = yield refreshToken(serverEndPoint);
200
+ if (!isRefreshed) {
201
+ console.log('Token expirou! Deve-se fazer login de novo');
202
+ return false;
203
+ }
204
+ try {
205
+ ret = yield axios_1.default.post(url, data);
206
+ }
207
+ catch (e) {
208
+ console.log(`Error creating data at ${url}`, data, e);
209
+ return false;
210
+ }
211
+ return ret;
212
+ }
213
+ console.log(`Error creating data at ${url}`, data, (_m = err.response) === null || _m === void 0 ? void 0 : _m.data);
214
+ return { errors: (_o = err.response) === null || _o === void 0 ? void 0 : _o.data };
215
+ }
216
+ }
217
+ return ret;
218
+ });
219
+ exports.createData = createData;
220
+ const deleteData = (path, serverEndPoint, id) => __awaiter(void 0, void 0, void 0, function* () {
221
+ var _p;
222
+ if (!serverEndPoint) {
223
+ console.log('Não há definição de API (serverEndPoint!');
224
+ return false;
225
+ }
226
+ const url = `${serverEndPoint.api}/${path}/${id}`;
227
+ try {
228
+ yield axios_1.default.delete(url);
229
+ }
230
+ catch (e) {
231
+ if (e.isAxiosError) {
232
+ const err = e;
233
+ if (((_p = err.response) === null || _p === void 0 ? void 0 : _p.status) === 401) {
234
+ const isRefreshed = yield refreshToken(serverEndPoint);
235
+ if (!isRefreshed) {
236
+ console.log('Token expirou! Deve-se fazer login de novo');
237
+ return false;
238
+ }
239
+ try {
240
+ yield axios_1.default.delete(url);
241
+ }
242
+ catch (e) {
243
+ console.log(`Error deleting data from ${url}`, e);
244
+ return false;
245
+ }
246
+ return true;
247
+ }
248
+ console.log(`Error deleting data from ${url}`, e);
249
+ return false;
250
+ }
251
+ }
252
+ return true;
253
+ });
254
+ exports.deleteData = deleteData;
255
+ const createOrUpdateData = ({ path, serverEndPoint, data, id }) => __awaiter(void 0, void 0, void 0, function* () {
256
+ if ((0, utils_1.isTmpId)(id)) {
257
+ id = null;
258
+ }
259
+ if (id) {
260
+ const responseUpdate = yield (0, exports.updateData)({ path, serverEndPoint, data, id });
261
+ return responseUpdate;
262
+ }
263
+ const responseCreate = yield (0, exports.createData)({ path, serverEndPoint, data });
264
+ if (!responseCreate || Object.prototype.hasOwnProperty.call(responseCreate, 'errors')) {
265
+ return responseCreate;
266
+ }
267
+ const responseUpdate = yield (0, exports.updateData)({ path, serverEndPoint, data, id: responseCreate.data.id });
268
+ return responseUpdate;
269
+ });
270
+ exports.createOrUpdateData = createOrUpdateData;
271
+ const prepareDataBySchema = ({ data, schema, parentIsField = false }) => {
272
+ // console.log('Entered prepareDataBySchema', schema);
273
+ const dbData = {};
274
+ for (const [key, field] of Object.entries(schema)) {
275
+ // console.log(key, field, data);
276
+ if (!(key in data) || (key === 'id' && (0, utils_1.isTmpId)(data[key]))) {
277
+ continue;
278
+ }
279
+ if (!data[key]) {
280
+ dbData[key] = (0, utils_1.emptyByType)(field, true);
281
+ continue;
282
+ }
283
+ // console.log({ key, data: data[key] });
284
+ // OneToMany or ManyToMany relations:
285
+ if (field.type === 'field' && field.child) {
286
+ const dataArr = data[key];
287
+ dbData[key] = dataArr.map(row => {
288
+ var _a;
289
+ return ((_a = field.child) === null || _a === void 0 ? void 0 : _a.children)
290
+ ? prepareDataBySchema({
291
+ data: row,
292
+ schema: field.child.children,
293
+ parentIsField: true
294
+ })
295
+ : row;
296
+ });
297
+ continue;
298
+ }
299
+ // Nested Object:
300
+ if (field.type === 'nested object' && field.children && typeof data[key] === 'object') {
301
+ dbData[key] = ((0, utils_1.isTmpId)(data[key].id))
302
+ ? prepareDataBySchema({
303
+ data: data[key],
304
+ schema: field.children
305
+ })
306
+ : data[key].id;
307
+ continue;
308
+ }
309
+ // Choices:
310
+ if (field.type === 'choice') {
311
+ dbData[key] = data[key].value;
312
+ continue;
313
+ }
314
+ // Date:
315
+ if (field.type === 'date') {
316
+ const date = (0, moment_1.default)(data[key]);
317
+ dbData[key] = date.format('YYYY-MM-DD');
318
+ continue;
319
+ }
320
+ // DateTime:
321
+ if (field.type === 'datetime') {
322
+ const date = (0, moment_1.default)(data[key]);
323
+ dbData[key] = date.format('YYYY-MM-DDTHH:mm');
324
+ continue;
325
+ }
326
+ // Default:
327
+ dbData[key] = data[key];
328
+ }
329
+ return dbData;
330
+ };
331
+ const updateDataBySchema = ({ model, modelObjectId, serverEndPoint, data, schema, path = null }) => __awaiter(void 0, void 0, void 0, function* () {
332
+ // console.log({
333
+ // model,
334
+ // modelObjectId,
335
+ // data,
336
+ // schema
337
+ // });
338
+ const dbData = prepareDataBySchema({ data, schema });
339
+ if (!path) {
340
+ path = model;
341
+ }
342
+ // DEBUG console.log({ model, modelObjectId, path, data, dbData });
343
+ const response = yield (0, exports.createOrUpdateData)({
344
+ path,
345
+ serverEndPoint,
346
+ data: dbData,
347
+ id: modelObjectId
348
+ });
349
+ if (typeof response !== 'object' && parseInt(response)) {
350
+ return response;
351
+ }
352
+ console.log('ERRO MAIN', response);
353
+ return response;
354
+ });
355
+ exports.updateDataBySchema = updateDataBySchema;
356
+ const addExistingRelatedModel = ({ model, serverEndPoint, id, data }) => __awaiter(void 0, void 0, void 0, function* () {
357
+ const response = yield (0, exports.partialUpdateData)({ path: model, serverEndPoint, data, id });
358
+ // DEBUG console.log({ model, id, data, response });
359
+ return response;
360
+ });
361
+ exports.addExistingRelatedModel = addExistingRelatedModel;
362
+ const getDataGridColumns = (schema, columnFields = [], hiddenFields = [], creatableFields = []) => {
363
+ if (!schema) {
364
+ return false;
365
+ }
366
+ columnFields = (!columnFields || columnFields.length === 0)
367
+ ? Object.keys(schema)
368
+ : columnFields.filter(field => {
369
+ return Object.prototype.hasOwnProperty.call(schema, field);
370
+ });
371
+ return columnFields.map(field => {
372
+ const column = {
373
+ field,
374
+ headerName: schema[field].label,
375
+ hide: (hiddenFields.includes(field)),
376
+ creatable: (creatableFields.includes(field)),
377
+ width: 100
378
+ };
379
+ return column;
380
+ });
381
+ };
382
+ const getAutoComplete = ({ model, serverEndPoint }) => __awaiter(void 0, void 0, void 0, function* () {
383
+ const data = yield getData(model, serverEndPoint, 'autocomplete');
384
+ return data;
385
+ });
386
+ exports.getAutoComplete = getAutoComplete;
387
+ const getJSONSchema = ({ model, serverEndPoint, id = 'create' }) => __awaiter(void 0, void 0, void 0, function* () {
388
+ var _q;
389
+ if (!serverEndPoint) {
390
+ console.log('Não há definição de API (serverEndPoint!');
391
+ return false;
392
+ }
393
+ const url = `${serverEndPoint.JSONSchema}/${model}/${id}/`;
394
+ try {
395
+ const { data } = yield axios_1.default.get(url);
396
+ return data;
397
+ }
398
+ catch (e) {
399
+ if (e.isAxiosError) {
400
+ const err = e;
401
+ if (((_q = err.response) === null || _q === void 0 ? void 0 : _q.status) === 401) {
402
+ const isRefreshed = yield refreshToken(serverEndPoint);
403
+ if (!isRefreshed) {
404
+ console.log('Token expirou! Deve-se fazer login de novo');
405
+ return false;
406
+ }
407
+ try {
408
+ const { data } = yield axios_1.default.get(url);
409
+ return data;
410
+ }
411
+ catch (e) {
412
+ console.log(`Error fetching JSONSchema data from ${url}`, e);
413
+ return false;
414
+ }
415
+ }
416
+ console.log(`Error fetching JSONSchema data from ${url}`, e);
417
+ return false;
418
+ }
419
+ }
420
+ });
421
+ exports.getJSONSchema = getJSONSchema;
422
+ const createOrUpdateJSONSchema = ({ model, serverEndPoint, id = 'create', formData }) => __awaiter(void 0, void 0, void 0, function* () {
423
+ var _r;
424
+ if (!serverEndPoint) {
425
+ return { errors: 'Não há definição de API (serverEndPoint!' };
426
+ }
427
+ let url = `${serverEndPoint.JSONSchema}/${model}/`;
428
+ if (id !== 'create') {
429
+ url += `${id}/`;
430
+ }
431
+ try {
432
+ const { data } = (id === 'create')
433
+ ? yield axios_1.default.post(url, formData)
434
+ : yield axios_1.default.patch(url, formData);
435
+ return data;
436
+ }
437
+ catch (e) {
438
+ if (e.isAxiosError) {
439
+ const err = e;
440
+ if (((_r = err.response) === null || _r === void 0 ? void 0 : _r.status) === 401) {
441
+ const isRefreshed = yield refreshToken(serverEndPoint);
442
+ if (!isRefreshed) {
443
+ console.log('Token expirou! Deve-se fazer login de novo');
444
+ return { errors: 'Token expirou! Deve-se fazer login de novo!' };
445
+ }
446
+ try {
447
+ const { data } = (id === 'create')
448
+ ? yield axios_1.default.post(url, formData)
449
+ : yield axios_1.default.patch(url, formData);
450
+ return data;
451
+ }
452
+ catch (e) {
453
+ console.log(`Error partially updating or creating JSONSchema data from ${url}`, e);
454
+ return { errors: 'Erro ao salvar alterações em item!' };
455
+ }
456
+ }
457
+ console.log(`Error partially updating or creating JSONSchema data from ${url}`, e);
458
+ return { errors: 'Erro ao salvar alterações em item!' };
459
+ }
460
+ }
461
+ });
462
+ exports.createOrUpdateJSONSchema = createOrUpdateJSONSchema;
463
+ const loginByPayload = (payload, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
464
+ if (!serverEndPoint) {
465
+ console.log('Não há definição de API (serverEndPoint!');
466
+ return false;
467
+ }
468
+ const url = serverEndPoint.getToken;
469
+ if (!url) {
470
+ console.log('Erro no loginByPayload: faltou a configuração de url getToken!');
471
+ return false;
472
+ }
473
+ try {
474
+ const { data } = yield axios_1.default.post(url, payload);
475
+ localStorage.setItem('refreshToken', data.refresh);
476
+ (0, exports.setAuthToken)(data.access);
477
+ return true;
478
+ }
479
+ catch (e) {
480
+ console.log('Erro no loginByPayload!', e);
481
+ (0, exports.setAuthToken)(null);
482
+ return false;
483
+ }
484
+ });
485
+ exports.loginByPayload = loginByPayload;
486
+ const setAuthToken = (token) => {
487
+ if (token) {
488
+ localStorage.setItem('token', token);
489
+ axios_1.default.defaults.headers.common.Authorization = `Bearer ${token}`;
490
+ return;
491
+ }
492
+ localStorage.removeItem('token');
493
+ localStorage.removeItem('refreshToken');
494
+ delete axios_1.default.defaults.headers.common.Authorization;
495
+ };
496
+ exports.setAuthToken = setAuthToken;
497
+ const refreshToken = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
498
+ if (!serverEndPoint) {
499
+ console.log('Não há definição de API (serverEndPoint!');
500
+ return false;
501
+ }
502
+ const refreshToken = localStorage.getItem('refreshToken');
503
+ // console.log('entrou refreshToken', refreshToken);
504
+ (0, exports.setAuthToken)(null);
505
+ if (!refreshToken) {
506
+ return false;
507
+ }
508
+ try {
509
+ const { data } = yield axios_1.default.post(`${serverEndPoint.refreshToken}`, {
510
+ refresh: refreshToken
511
+ });
512
+ (0, exports.setAuthToken)(data.access);
513
+ return true;
514
+ }
515
+ catch (e) {
516
+ console.log('Failed refreshing token', e);
517
+ return false;
518
+ }
519
+ });
520
+ const isLoggedIn = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
521
+ const token = localStorage.getItem('token');
522
+ (0, exports.setAuthToken)(token);
523
+ if (!token) {
524
+ return false;
525
+ }
526
+ const usuaria = yield getData('minhaconta', serverEndPoint);
527
+ if (!usuaria) {
528
+ console.log('Erro ao recuperar dados de usuária!');
529
+ return false;
530
+ }
531
+ return usuaria;
532
+ });
533
+ exports.isLoggedIn = isLoggedIn;
534
+ ;
535
+ const getGenericModelList = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, hiddenFields = ['id'], creatableFields = [], isInBatches = false, loadedSchema }) => __awaiter(void 0, void 0, void 0, function* () {
536
+ let path = `${model}/${id}`;
537
+ let schemaPath = model;
538
+ let schema = loadedSchema;
539
+ let columns;
540
+ if (!(0, utils_1.isTmpId)(id) && relatedModel) {
541
+ path += `/${relatedModel}/${relatedModelId}`;
542
+ schemaPath += `/${id}/${relatedModel}`;
543
+ }
544
+ // Only get schema and columns if not in batches or in first batch:
545
+ if (!schema) {
546
+ schema = yield getSchema(schemaPath, serverEndPoint);
547
+ if (!schema) {
548
+ return false;
549
+ }
550
+ columns = getDataGridColumns(schema, columnFields, hiddenFields, creatableFields);
551
+ if (!columns) {
552
+ return false;
553
+ }
554
+ }
555
+ let data = [];
556
+ if (!id || (id && !relatedModelId)) {
557
+ if (isInBatches) {
558
+ path += (loadedSchema)
559
+ ? '?is_last_batch=1'
560
+ : '?is_first_batch=1';
561
+ }
562
+ const ret = yield getData(path, serverEndPoint);
563
+ if (ret === false) {
564
+ return false;
565
+ }
566
+ data = ret.map(row => {
567
+ const newRow = {};
568
+ for (const [key, field] of Object.entries(schema)) {
569
+ if (!(key in row)) {
570
+ continue;
571
+ }
572
+ if (field.type === 'choice') {
573
+ newRow[key] = row[key]
574
+ ? {
575
+ value: row[key],
576
+ display_name: (0, utils_1.getChoiceByValue)(row[key], field.choices)
577
+ }
578
+ : (0, utils_1.emptyByType)(field);
579
+ continue;
580
+ }
581
+ newRow[key] = (row[key])
582
+ ? row[key]
583
+ : (0, utils_1.emptyByType)(field);
584
+ }
585
+ return newRow;
586
+ });
587
+ }
588
+ if (loadedSchema) {
589
+ // DEBUG console.log({ path, data });
590
+ return { data };
591
+ }
592
+ // DEBUG console.log({ path, data, columns, schema });
593
+ return { data, columns, schema };
594
+ });
595
+ exports.getGenericModelList = getGenericModelList;
596
+ const getGenericModel = ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '' }) => __awaiter(void 0, void 0, void 0, function* () {
597
+ let path = `${model}/${id}`;
598
+ let schemaPath = model;
599
+ if (id && relatedModel) {
600
+ path += `/${relatedModel}/${relatedModelId}`;
601
+ schemaPath += `/${id}/${relatedModel}`;
602
+ }
603
+ const schema = yield getSchema(schemaPath, serverEndPoint);
604
+ if (!schema) {
605
+ return false;
606
+ }
607
+ const data = (!id || (id && relatedModel && !relatedModelId))
608
+ ? {}
609
+ : yield getData(path, serverEndPoint);
610
+ // console.log({ schema, data }); // DEBUG
611
+ return { schema, data };
612
+ });
613
+ exports.getGenericModel = getGenericModel;