drf-react-by-schema 0.28.8 → 0.28.9
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/@types/index.d.ts +410 -0
- package/dist/@types/index.d.ts.map +1 -0
- package/dist/@types/index.js +9 -0
- package/dist/@types/string-mask.d.ts +10 -0
- package/dist/@types/string-mask.d.ts.map +1 -0
- package/dist/@types/string-mask.js +1 -0
- package/dist/api.d.ts +81 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +1118 -0
- package/dist/components/DataGridBySchemaEditable/BooleanInputCell.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/BooleanInputCell.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/BooleanInputCell.js +86 -0
- package/dist/components/DataGridBySchemaEditable/ConditionalEditWrapper.d.ts +12 -0
- package/dist/components/DataGridBySchemaEditable/ConditionalEditWrapper.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/ConditionalEditWrapper.js +71 -0
- package/dist/components/DataGridBySchemaEditable/ConfirmDialog.d.ts +9 -0
- package/dist/components/DataGridBySchemaEditable/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/ConfirmDialog.js +21 -0
- package/dist/components/DataGridBySchemaEditable/CustomToolbar.d.ts +26 -0
- package/dist/components/DataGridBySchemaEditable/CustomToolbar.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/CustomToolbar.js +146 -0
- package/dist/components/DataGridBySchemaEditable/DataGridDesktop.d.ts +73 -0
- package/dist/components/DataGridBySchemaEditable/DataGridDesktop.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/DataGridDesktop.js +421 -0
- package/dist/components/DataGridBySchemaEditable/DataGridMobile.d.ts +18 -0
- package/dist/components/DataGridBySchemaEditable/DataGridMobile.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/DataGridMobile.js +105 -0
- package/dist/components/DataGridBySchemaEditable/FileInputCell.d.ts +11 -0
- package/dist/components/DataGridBySchemaEditable/FileInputCell.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/FileInputCell.js +155 -0
- package/dist/components/DataGridBySchemaEditable/FooterToolbar.d.ts +12 -0
- package/dist/components/DataGridBySchemaEditable/FooterToolbar.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/FooterToolbar.js +36 -0
- package/dist/components/DataGridBySchemaEditable/GeoEditCell.d.ts +10 -0
- package/dist/components/DataGridBySchemaEditable/GeoEditCell.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GeoEditCell.js +85 -0
- package/dist/components/DataGridBySchemaEditable/GeoThumbCell.d.ts +11 -0
- package/dist/components/DataGridBySchemaEditable/GeoThumbCell.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GeoThumbCell.js +87 -0
- package/dist/components/DataGridBySchemaEditable/GridActionsCellItemLink.d.ts +18 -0
- package/dist/components/DataGridBySchemaEditable/GridActionsCellItemLink.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridActionsCellItemLink.js +24 -0
- package/dist/components/DataGridBySchemaEditable/GridDateInput.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/GridDateInput.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridDateInput.js +166 -0
- package/dist/components/DataGridBySchemaEditable/GridDateTimeInput.d.ts +6 -0
- package/dist/components/DataGridBySchemaEditable/GridDateTimeInput.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridDateTimeInput.js +154 -0
- package/dist/components/DataGridBySchemaEditable/GridDecimalInput.d.ts +10 -0
- package/dist/components/DataGridBySchemaEditable/GridDecimalInput.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridDecimalInput.js +78 -0
- package/dist/components/DataGridBySchemaEditable/GridGenericInput.d.ts +8 -0
- package/dist/components/DataGridBySchemaEditable/GridGenericInput.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridGenericInput.js +30 -0
- package/dist/components/DataGridBySchemaEditable/GridPatternInput.d.ts +7 -0
- package/dist/components/DataGridBySchemaEditable/GridPatternInput.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/GridPatternInput.js +74 -0
- package/dist/components/DataGridBySchemaEditable/InputInterval.d.ts +21 -0
- package/dist/components/DataGridBySchemaEditable/InputInterval.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/InputInterval.js +131 -0
- package/dist/components/DataGridBySchemaEditable/MobileSearchBar.d.ts +9 -0
- package/dist/components/DataGridBySchemaEditable/MobileSearchBar.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/MobileSearchBar.js +70 -0
- package/dist/components/DataGridBySchemaEditable/RowEditingWatcher.d.ts +7 -0
- package/dist/components/DataGridBySchemaEditable/RowEditingWatcher.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/RowEditingWatcher.js +41 -0
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts +24 -0
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/SelectEditInputCell.js +259 -0
- package/dist/components/DataGridBySchemaEditable/geoConstants.d.ts +5 -0
- package/dist/components/DataGridBySchemaEditable/geoConstants.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/geoConstants.js +6 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useDataGridActions.d.ts +33 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useDataGridActions.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useDataGridActions.js +161 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useOptionsAC.d.ts +14 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useOptionsAC.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useOptionsAC.js +69 -0
- package/dist/components/DataGridBySchemaEditable/hooks/usePreparedColumns.d.ts +9 -0
- package/dist/components/DataGridBySchemaEditable/hooks/usePreparedColumns.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/hooks/usePreparedColumns.js +73 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useProcessRowUpdate.d.ts +30 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useProcessRowUpdate.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/hooks/useProcessRowUpdate.js +199 -0
- package/dist/components/DataGridBySchemaEditable/utils/columnFactory.d.ts +33 -0
- package/dist/components/DataGridBySchemaEditable/utils/columnFactory.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/utils/columnFactory.js +270 -0
- package/dist/components/DataGridBySchemaEditable/utils.d.ts +40 -0
- package/dist/components/DataGridBySchemaEditable/utils.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable/utils.js +181 -0
- package/dist/components/DataGridBySchemaEditable.d.ts +64 -0
- package/dist/components/DataGridBySchemaEditable.d.ts.map +1 -0
- package/dist/components/DataGridBySchemaEditable.js +172 -0
- package/dist/components/DataTotals.d.ts +12 -0
- package/dist/components/DataTotals.d.ts.map +1 -0
- package/dist/components/DataTotals.js +32 -0
- package/dist/components/DataTotalsServer.d.ts +10 -0
- package/dist/components/DataTotalsServer.d.ts.map +1 -0
- package/dist/components/DataTotalsServer.js +18 -0
- package/dist/components/DialogActions.d.ts +11 -0
- package/dist/components/DialogActions.d.ts.map +1 -0
- package/dist/components/DialogActions.js +20 -0
- package/dist/components/FileTypeIcon.d.ts +18 -0
- package/dist/components/FileTypeIcon.d.ts.map +1 -0
- package/dist/components/FileTypeIcon.js +48 -0
- package/dist/components/GenericModelList.d.ts +53 -0
- package/dist/components/GenericModelList.d.ts.map +1 -0
- package/dist/components/GenericModelList.js +194 -0
- package/dist/components/GenericRelatedModelList.d.ts +55 -0
- package/dist/components/GenericRelatedModelList.d.ts.map +1 -0
- package/dist/components/GenericRelatedModelList.js +181 -0
- package/dist/components/GenericRelatedModelListTable.d.ts +56 -0
- package/dist/components/GenericRelatedModelListTable.d.ts.map +1 -0
- package/dist/components/GenericRelatedModelListTable.js +31 -0
- package/dist/components/Image.d.ts +10 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/Image.js +111 -0
- package/dist/components/details/DetailBySchema.d.ts +4 -0
- package/dist/components/details/DetailBySchema.d.ts.map +1 -0
- package/dist/components/details/DetailBySchema.js +175 -0
- package/dist/components/details/DetailFieldBySchema.d.ts +4 -0
- package/dist/components/details/DetailFieldBySchema.d.ts.map +1 -0
- package/dist/components/details/DetailFieldBySchema.js +88 -0
- package/dist/components/forms/ChangePasswordForm.d.ts +7 -0
- package/dist/components/forms/ChangePasswordForm.d.ts.map +1 -0
- package/dist/components/forms/ChangePasswordForm.js +93 -0
- package/dist/components/forms/DialogFormBySchema.d.ts +22 -0
- package/dist/components/forms/DialogFormBySchema.d.ts.map +1 -0
- package/dist/components/forms/DialogFormBySchema.js +97 -0
- package/dist/components/forms/FieldBySchema.d.ts +4 -0
- package/dist/components/forms/FieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/FieldBySchema.js +80 -0
- package/dist/components/forms/ForgotPasswordForm.d.ts +11 -0
- package/dist/components/forms/ForgotPasswordForm.d.ts.map +1 -0
- package/dist/components/forms/ForgotPasswordForm.js +114 -0
- package/dist/components/forms/Form.d.ts +61 -0
- package/dist/components/forms/Form.d.ts.map +1 -0
- package/dist/components/forms/Form.js +264 -0
- package/dist/components/forms/FormActions.d.ts +20 -0
- package/dist/components/forms/FormActions.d.ts.map +1 -0
- package/dist/components/forms/FormActions.js +55 -0
- package/dist/components/forms/FormBySchema.d.ts +21 -0
- package/dist/components/forms/FormBySchema.d.ts.map +1 -0
- package/dist/components/forms/FormBySchema.js +280 -0
- package/dist/components/forms/FormWatcher.d.ts +10 -0
- package/dist/components/forms/FormWatcher.d.ts.map +1 -0
- package/dist/components/forms/FormWatcher.js +25 -0
- package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts +13 -0
- package/dist/components/forms/inputs/AutocompleteFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/AutocompleteFieldBySchema.js +133 -0
- package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/BooleanFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/BooleanFieldBySchema.js +39 -0
- package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts +5 -0
- package/dist/components/forms/inputs/DesktopDatePickerBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/DesktopDatePickerBySchema.js +54 -0
- package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts +5 -0
- package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/DesktopDateTimePickerBySchema.js +47 -0
- package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.d.ts +14 -0
- package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/EditableAutocompleteFieldBySchema.js +272 -0
- package/dist/components/forms/inputs/FileFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/FileFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/FileFieldBySchema.js +144 -0
- package/dist/components/forms/inputs/FloatFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/FloatFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/FloatFieldBySchema.js +64 -0
- package/dist/components/forms/inputs/GeometryFieldBySchema.d.ts +8 -0
- package/dist/components/forms/inputs/GeometryFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/GeometryFieldBySchema.js +61 -0
- package/dist/components/forms/inputs/MapGeometryPicker.d.ts +19 -0
- package/dist/components/forms/inputs/MapGeometryPicker.d.ts.map +1 -0
- package/dist/components/forms/inputs/MapGeometryPicker.js +344 -0
- package/dist/components/forms/inputs/PatternFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/PatternFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/PatternFieldBySchema.js +56 -0
- package/dist/components/forms/inputs/TextFieldBySchema.d.ts +4 -0
- package/dist/components/forms/inputs/TextFieldBySchema.d.ts.map +1 -0
- package/dist/components/forms/inputs/TextFieldBySchema.js +56 -0
- package/dist/components/forms/inputs/leafletMarker.d.ts +12 -0
- package/dist/components/forms/inputs/leafletMarker.d.ts.map +1 -0
- package/dist/components/forms/inputs/leafletMarker.js +52 -0
- package/dist/context/APIWrapper.d.ts +18 -0
- package/dist/context/APIWrapper.d.ts.map +1 -0
- package/dist/context/APIWrapper.js +593 -0
- package/dist/context/APIWrapperContext.d.ts +132 -0
- package/dist/context/APIWrapperContext.d.ts.map +1 -0
- package/dist/context/APIWrapperContext.js +63 -0
- package/dist/context/DRFReactBySchemaContext.d.ts +31 -0
- package/dist/context/DRFReactBySchemaContext.d.ts.map +1 -0
- package/dist/context/DRFReactBySchemaContext.js +20 -0
- package/dist/context/DRFReactBySchemaProvider.d.ts +5 -0
- package/dist/context/DRFReactBySchemaProvider.d.ts.map +1 -0
- package/dist/context/DRFReactBySchemaProvider.js +105 -0
- package/dist/context/Overlays.d.ts +5 -0
- package/dist/context/Overlays.d.ts.map +1 -0
- package/dist/context/Overlays.js +114 -0
- package/dist/context/PrivateContext.d.ts +10 -0
- package/dist/context/PrivateContext.d.ts.map +1 -0
- package/dist/context/PrivateContext.js +16 -0
- package/dist/hooks/useDeepMemo.d.ts +2 -0
- package/dist/hooks/useDeepMemo.d.ts.map +1 -0
- package/dist/hooks/useDeepMemo.js +13 -0
- package/dist/hooks/useWhyDidYouUpdate.d.ts +4 -0
- package/dist/hooks/useWhyDidYouUpdate.d.ts.map +1 -0
- package/dist/hooks/useWhyDidYouUpdate.js +26 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/styles/grid.d.ts +3 -0
- package/dist/styles/grid.d.ts.map +1 -0
- package/dist/styles/grid.js +38 -0
- package/dist/styles/index.d.ts +3 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +38 -0
- package/dist/styles/layout.d.ts +23 -0
- package/dist/styles/layout.d.ts.map +1 -0
- package/dist/styles/layout.js +71 -0
- package/dist/styles/texts.d.ts +66 -0
- package/dist/styles/texts.d.ts.map +1 -0
- package/dist/styles/texts.js +73 -0
- package/dist/styles/theme.d.ts +29 -0
- package/dist/styles/theme.d.ts.map +1 -0
- package/dist/styles/theme.js +226 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/utils.d.ts +107 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +957 -0
- package/package.json +1 -1
package/dist/api.js
ADDED
|
@@ -0,0 +1,1118 @@
|
|
|
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.exportExcelData = exports.getAllModels = exports.changePassword = exports.confirmPasswordReset = exports.requestPasswordReset = exports.signUp = exports.getSignUpOptions = exports.isLoggedIn = exports.setAuthToken = exports.hasJWT = exports.clearJWT = exports.loginByPayload = exports.dispatchAuthExpired = exports.AUTH_EXPIRED_EVENT = void 0;
|
|
16
|
+
exports.getRawData = getRawData;
|
|
17
|
+
exports.getData = getData;
|
|
18
|
+
exports.updateData = updateData;
|
|
19
|
+
exports.partialUpdateData = partialUpdateData;
|
|
20
|
+
exports.createData = createData;
|
|
21
|
+
exports.deleteData = deleteData;
|
|
22
|
+
exports.createOrUpdateData = createOrUpdateData;
|
|
23
|
+
exports.prepareDataBySchema = prepareDataBySchema;
|
|
24
|
+
exports.updateDataBySchema = updateDataBySchema;
|
|
25
|
+
exports.addExistingRelatedModel = addExistingRelatedModel;
|
|
26
|
+
exports.getAutoComplete = getAutoComplete;
|
|
27
|
+
exports.getGenericModelList = getGenericModelList;
|
|
28
|
+
exports.getGenericModel = getGenericModel;
|
|
29
|
+
const axios_1 = __importDefault(require("axios"));
|
|
30
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
31
|
+
const utils_1 = require("./utils");
|
|
32
|
+
const expiredTokenMessage = 'Token expired! System must login again';
|
|
33
|
+
const noServerEndPointMessage = 'There is not API definition (serverEndPoint)!';
|
|
34
|
+
const unknownError = 'Unknown error!';
|
|
35
|
+
/**
|
|
36
|
+
* Global event dispatched whenever the session is definitively expired (i.e. a
|
|
37
|
+
* 401 happened AND refreshing the token failed). Host apps can listen to this
|
|
38
|
+
* to immediately sign out and redirect to the login page.
|
|
39
|
+
*/
|
|
40
|
+
exports.AUTH_EXPIRED_EVENT = 'drf-react-by-schema:auth-expired';
|
|
41
|
+
const dispatchAuthExpired = () => {
|
|
42
|
+
if (typeof window !== 'undefined') {
|
|
43
|
+
window.dispatchEvent(new CustomEvent(exports.AUTH_EXPIRED_EVENT));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.dispatchAuthExpired = dispatchAuthExpired;
|
|
47
|
+
function getOptions(path, serverEndPoint, schemas) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
var _a;
|
|
50
|
+
if (schemas) {
|
|
51
|
+
const pathParts = path.split('/');
|
|
52
|
+
const model = pathParts[0];
|
|
53
|
+
const relatedModel = pathParts.length > 2 ? pathParts[2] : null;
|
|
54
|
+
const schemaKey = relatedModel
|
|
55
|
+
? (0, utils_1.slugToCamelCase)(`${model}_related_${relatedModel}_schema`, true)
|
|
56
|
+
: (0, utils_1.slugToCamelCase)(`${model}_schema`, true);
|
|
57
|
+
if (schemas[schemaKey]) {
|
|
58
|
+
const foundSchema = schemas[schemaKey];
|
|
59
|
+
if (typeof foundSchema === 'function') {
|
|
60
|
+
try {
|
|
61
|
+
const loaded = yield foundSchema();
|
|
62
|
+
return loaded.default || loaded;
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error(`Failed to load schema for ${schemaKey}`, e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return foundSchema;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!serverEndPoint) {
|
|
74
|
+
return {
|
|
75
|
+
message: noServerEndPointMessage,
|
|
76
|
+
isAxiosError: true,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const url = `${serverEndPoint.api}/${path}`;
|
|
80
|
+
try {
|
|
81
|
+
const { data } = yield axios_1.default.options(url);
|
|
82
|
+
return {
|
|
83
|
+
schema: data.actions.POST,
|
|
84
|
+
verbose_name: data.verbose_name,
|
|
85
|
+
verbose_name_plural: data.verbose_name_plural,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
90
|
+
const err = e;
|
|
91
|
+
const message = `Error fetching options from ${url}`;
|
|
92
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
|
|
93
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
94
|
+
if (!isRefreshed) {
|
|
95
|
+
console.log(expiredTokenMessage);
|
|
96
|
+
return {
|
|
97
|
+
message: expiredTokenMessage,
|
|
98
|
+
isAxiosError: true,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const { data } = yield axios_1.default.options(url);
|
|
103
|
+
return {
|
|
104
|
+
schema: data.actions.POST,
|
|
105
|
+
verbose_name: data.verbose_name,
|
|
106
|
+
verbose_name_plural: data.verbose_name_plural,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
console.log(message, e);
|
|
111
|
+
return {
|
|
112
|
+
message,
|
|
113
|
+
isAxiosError: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
console.log(message, e);
|
|
118
|
+
return {
|
|
119
|
+
message,
|
|
120
|
+
isAxiosError: true,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
message: unknownError,
|
|
125
|
+
isAxiosError: true,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function getSchema(path, serverEndPoint, schemas) {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
const options = yield getOptions(path, serverEndPoint, schemas);
|
|
133
|
+
if (axios_1.default.isAxiosError(options)) {
|
|
134
|
+
return options;
|
|
135
|
+
}
|
|
136
|
+
// Special default value of "currentUser":
|
|
137
|
+
let usuaria = false;
|
|
138
|
+
for (const [key, fieldRaw] of Object.entries(options.schema)) {
|
|
139
|
+
const field = fieldRaw;
|
|
140
|
+
if (field.model_default === '{currentUser}') {
|
|
141
|
+
if (!usuaria) {
|
|
142
|
+
usuaria = yield (0, exports.isLoggedIn)(serverEndPoint);
|
|
143
|
+
}
|
|
144
|
+
if (usuaria) {
|
|
145
|
+
options.schema[key].model_default = {
|
|
146
|
+
id: usuaria.id,
|
|
147
|
+
label: usuaria.first_name,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (field.model_default === '{dateNow}') {
|
|
152
|
+
field.model_default = (0, dayjs_1.default)().format('YYYY-MM-DD');
|
|
153
|
+
}
|
|
154
|
+
if (field.model_default === '{dateTimeNow}') {
|
|
155
|
+
field.model_default = (0, dayjs_1.default)().format('YYYY-MM-DDTHH:mm');
|
|
156
|
+
}
|
|
157
|
+
if (field.model_default && field.type === 'choice') {
|
|
158
|
+
if (field.choices) {
|
|
159
|
+
const modelDefault = field.choices.filter((choice) => choice.value === field.model_default);
|
|
160
|
+
options.schema[key].model_default =
|
|
161
|
+
modelDefault.length === 1 ? modelDefault[0] : undefined;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const modelOptions = {
|
|
166
|
+
verbose_name: options.verbose_name,
|
|
167
|
+
verbose_name_plural: options.verbose_name_plural,
|
|
168
|
+
};
|
|
169
|
+
return { schema: options.schema, modelOptions };
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function getRawData(_a) {
|
|
173
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, }) {
|
|
174
|
+
var _b;
|
|
175
|
+
if (!serverEndPoint) {
|
|
176
|
+
return {
|
|
177
|
+
message: noServerEndPointMessage,
|
|
178
|
+
isAxiosError: true,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const url = `${serverEndPoint.api}/${path}`;
|
|
182
|
+
try {
|
|
183
|
+
const { data } = yield axios_1.default.get(url);
|
|
184
|
+
return data;
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
const message = `Error fetching data from ${url}`;
|
|
188
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
189
|
+
const err = e;
|
|
190
|
+
if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
|
|
191
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
192
|
+
if (!isRefreshed) {
|
|
193
|
+
console.log(expiredTokenMessage);
|
|
194
|
+
return {
|
|
195
|
+
message: expiredTokenMessage,
|
|
196
|
+
isAxiosError: true,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const { data } = yield axios_1.default.get(url);
|
|
201
|
+
return data;
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
const message = `Error fetching data from ${url}`;
|
|
205
|
+
console.log(message, e);
|
|
206
|
+
return {
|
|
207
|
+
message,
|
|
208
|
+
isAxiosError: true,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
console.log(message, e);
|
|
214
|
+
return {
|
|
215
|
+
message,
|
|
216
|
+
isAxiosError: true,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function getData(_a) {
|
|
222
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, route = 'api', }) {
|
|
223
|
+
var _b;
|
|
224
|
+
if (!serverEndPoint) {
|
|
225
|
+
return {
|
|
226
|
+
message: noServerEndPointMessage,
|
|
227
|
+
isAxiosError: true,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
const url = `${serverEndPoint[route]}/${path}`;
|
|
231
|
+
try {
|
|
232
|
+
const { data } = yield axios_1.default.get(url);
|
|
233
|
+
return data;
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
237
|
+
const err = e;
|
|
238
|
+
if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
|
|
239
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
240
|
+
if (!isRefreshed) {
|
|
241
|
+
console.log(expiredTokenMessage);
|
|
242
|
+
return {
|
|
243
|
+
message: expiredTokenMessage,
|
|
244
|
+
isAxiosError: true,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
const { data } = yield axios_1.default.get(url);
|
|
249
|
+
return data;
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
console.log(expiredTokenMessage, e);
|
|
253
|
+
return {
|
|
254
|
+
message: expiredTokenMessage,
|
|
255
|
+
isAxiosError: true,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const message = `Error fetching data from ${url}`;
|
|
261
|
+
console.log(message, e);
|
|
262
|
+
return {
|
|
263
|
+
message,
|
|
264
|
+
isAxiosError: true,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
*
|
|
271
|
+
* @param options - params
|
|
272
|
+
* @returns updatedData when succesfully updated, axiosError otherwise
|
|
273
|
+
*/
|
|
274
|
+
function updateData(_a) {
|
|
275
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, data, id, contentType = 'application/json', }) {
|
|
276
|
+
var _b, _c, _d;
|
|
277
|
+
if (!serverEndPoint) {
|
|
278
|
+
return {
|
|
279
|
+
message: noServerEndPointMessage,
|
|
280
|
+
isAxiosError: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
const url = `${serverEndPoint.api}/${path}/${id}/`;
|
|
284
|
+
const config = { headers: { 'Content-Type': contentType } };
|
|
285
|
+
try {
|
|
286
|
+
const { data: updatedData } = yield axios_1.default.put(url, data, config);
|
|
287
|
+
return updatedData;
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
291
|
+
const err = e;
|
|
292
|
+
const message = `Error updating data at ${url}`;
|
|
293
|
+
if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
|
|
294
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
295
|
+
if (!isRefreshed) {
|
|
296
|
+
console.log(expiredTokenMessage);
|
|
297
|
+
return {
|
|
298
|
+
message: expiredTokenMessage,
|
|
299
|
+
isAxiosError: true,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const { data: updatedData } = yield axios_1.default.put(url, data, config);
|
|
304
|
+
return updatedData;
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
console.log(message, data, (_c = err.response) === null || _c === void 0 ? void 0 : _c.data, e);
|
|
308
|
+
return { message, isAxiosError: true };
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
console.log(message, data, (_d = err.response) === null || _d === void 0 ? void 0 : _d.data);
|
|
312
|
+
return { message, isAxiosError: true, response: err.response };
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return { message: unknownError, isAxiosError: true };
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
function partialUpdateData(_a) {
|
|
319
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, data, id, }) {
|
|
320
|
+
var _b, _c;
|
|
321
|
+
if (!serverEndPoint) {
|
|
322
|
+
return {
|
|
323
|
+
message: noServerEndPointMessage,
|
|
324
|
+
isAxiosError: true,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
const url = `${serverEndPoint.api}/${path}/${id}/`;
|
|
328
|
+
try {
|
|
329
|
+
const { data: updatedData } = yield axios_1.default.patch(url, data);
|
|
330
|
+
return updatedData;
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
334
|
+
const err = e;
|
|
335
|
+
const message = `Error partial updating data at ${url}`;
|
|
336
|
+
if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
|
|
337
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
338
|
+
if (!isRefreshed) {
|
|
339
|
+
console.log(expiredTokenMessage);
|
|
340
|
+
return {
|
|
341
|
+
message: expiredTokenMessage,
|
|
342
|
+
isAxiosError: true,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
try {
|
|
346
|
+
const { data: updatedData } = yield axios_1.default.patch(url, data);
|
|
347
|
+
return updatedData;
|
|
348
|
+
}
|
|
349
|
+
catch (e) {
|
|
350
|
+
console.log(message, data, e);
|
|
351
|
+
return {
|
|
352
|
+
message: err.response ? err.response.data : message,
|
|
353
|
+
isAxiosError: true,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
console.log(message, data, (_c = err.response) === null || _c === void 0 ? void 0 : _c.data);
|
|
358
|
+
return {
|
|
359
|
+
message: err.response ? err.response.data : message,
|
|
360
|
+
isAxiosError: true,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return { message: unknownError, isAxiosError: true };
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
function createData(_a) {
|
|
368
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, data, contentType = 'application/json', }) {
|
|
369
|
+
var _b, _c;
|
|
370
|
+
if (!serverEndPoint) {
|
|
371
|
+
return {
|
|
372
|
+
message: noServerEndPointMessage,
|
|
373
|
+
isAxiosError: true,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const url = `${serverEndPoint.api}/${path}/`;
|
|
377
|
+
const config = { headers: { 'Content-Type': contentType } };
|
|
378
|
+
try {
|
|
379
|
+
const { data: createdData } = yield axios_1.default.post(url, data, config);
|
|
380
|
+
return createdData;
|
|
381
|
+
}
|
|
382
|
+
catch (err) {
|
|
383
|
+
if (axios_1.default.isAxiosError(err)) {
|
|
384
|
+
const message = `Error creating data at ${url}`;
|
|
385
|
+
if (((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
|
|
386
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
387
|
+
if (!isRefreshed) {
|
|
388
|
+
console.log(expiredTokenMessage);
|
|
389
|
+
return {
|
|
390
|
+
message: expiredTokenMessage,
|
|
391
|
+
isAxiosError: true,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
try {
|
|
395
|
+
const { data: createdData } = yield axios_1.default.post(url, data);
|
|
396
|
+
return createdData;
|
|
397
|
+
}
|
|
398
|
+
catch (e) {
|
|
399
|
+
console.log(message, data, e);
|
|
400
|
+
return {
|
|
401
|
+
message: err.response ? err.response.data : message,
|
|
402
|
+
isAxiosError: true,
|
|
403
|
+
response: err.response,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
console.log(message, data, (_c = err.response) === null || _c === void 0 ? void 0 : _c.data);
|
|
408
|
+
return {
|
|
409
|
+
message: err.response ? err.response.data : message,
|
|
410
|
+
isAxiosError: true,
|
|
411
|
+
response: err.response,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return {
|
|
416
|
+
message: unknownError,
|
|
417
|
+
isAxiosError: true,
|
|
418
|
+
};
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function deleteData(path, serverEndPoint, id) {
|
|
422
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
423
|
+
var _a;
|
|
424
|
+
if (!serverEndPoint) {
|
|
425
|
+
return {
|
|
426
|
+
message: noServerEndPointMessage,
|
|
427
|
+
isAxiosError: true,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
const url = `${serverEndPoint.api}/${path}/${id}`;
|
|
431
|
+
try {
|
|
432
|
+
yield axios_1.default.delete(url);
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
catch (e) {
|
|
436
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
437
|
+
const err = e;
|
|
438
|
+
const message = `Error deleting data from ${url}`;
|
|
439
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
|
|
440
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
441
|
+
if (!isRefreshed) {
|
|
442
|
+
console.log(expiredTokenMessage);
|
|
443
|
+
return {
|
|
444
|
+
message: expiredTokenMessage,
|
|
445
|
+
isAxiosError: true,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
try {
|
|
449
|
+
yield axios_1.default.delete(url);
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
catch (e) {
|
|
453
|
+
console.log(message, e);
|
|
454
|
+
return {
|
|
455
|
+
message: err.response ? err.response.data : message,
|
|
456
|
+
isAxiosError: true,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
console.log(message, e);
|
|
461
|
+
return {
|
|
462
|
+
message: err.response ? err.response.data : message,
|
|
463
|
+
isAxiosError: true,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return {
|
|
468
|
+
message: unknownError,
|
|
469
|
+
isAxiosError: true,
|
|
470
|
+
};
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
function createOrUpdateData(_a) {
|
|
474
|
+
return __awaiter(this, arguments, void 0, function* ({ path, serverEndPoint, data, id, contentType = 'application/json', }) {
|
|
475
|
+
if ((0, utils_1.isTmpId)(id) || !id) {
|
|
476
|
+
const responseCreate = yield createData({ path, serverEndPoint, data, contentType });
|
|
477
|
+
return responseCreate;
|
|
478
|
+
}
|
|
479
|
+
const responseUpdate = yield updateData({ path, serverEndPoint, data, id, contentType });
|
|
480
|
+
return responseUpdate;
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
function prepareDataBySchemaRecursive({ data: typedData, schema, }) {
|
|
484
|
+
const data = typedData;
|
|
485
|
+
let requiresMultipart = false;
|
|
486
|
+
const dbData = {};
|
|
487
|
+
const conditionalVisible = (0, utils_1.buildConditionalVisibleBySchema)(schema);
|
|
488
|
+
for (const [key, field] of Object.entries(schema)) {
|
|
489
|
+
const value = data[key];
|
|
490
|
+
if (!(key in data) || (key === 'id' && (0, utils_1.isTmpId)(value))) {
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
// Clear hidden conditional_visible fields so their stale value isn't saved.
|
|
494
|
+
if (!(0, utils_1.showConditionalVisibleFieldObj)(key, conditionalVisible, data)) {
|
|
495
|
+
dbData[key] = (0, utils_1.emptyByType)(field, true);
|
|
496
|
+
continue;
|
|
497
|
+
}
|
|
498
|
+
if (typeof value !== 'boolean' && !value) {
|
|
499
|
+
dbData[key] = (0, utils_1.emptyByType)(field, true);
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
// Check for file upload fields
|
|
503
|
+
if (field && ['file upload', 'image upload'].includes(field.type)) {
|
|
504
|
+
requiresMultipart = true;
|
|
505
|
+
if ('file' in data[key]) {
|
|
506
|
+
dbData[key] = { file: value.file };
|
|
507
|
+
}
|
|
508
|
+
continue;
|
|
509
|
+
}
|
|
510
|
+
// OneToMany or ManyToMany relations:
|
|
511
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'field' && field.child) {
|
|
512
|
+
const dataArr = value;
|
|
513
|
+
dbData[key] = dataArr.map((row) => {
|
|
514
|
+
var _a;
|
|
515
|
+
return ((_a = field.child) === null || _a === void 0 ? void 0 : _a.children)
|
|
516
|
+
? prepareDataBySchemaRecursive({
|
|
517
|
+
data: row,
|
|
518
|
+
schema: field.child.children,
|
|
519
|
+
}).data
|
|
520
|
+
: row;
|
|
521
|
+
});
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
// Nested Object:
|
|
525
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'nested object' && field.children && typeof value === 'object') {
|
|
526
|
+
dbData[key] = (0, utils_1.isTmpId)(value === null || value === void 0 ? void 0 : value.id)
|
|
527
|
+
? prepareDataBySchemaRecursive({
|
|
528
|
+
data: value,
|
|
529
|
+
schema: field.children,
|
|
530
|
+
}).data
|
|
531
|
+
: value.id;
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
// Choices:
|
|
535
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'choice') {
|
|
536
|
+
dbData[key] = value.value;
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
// Multiple-choice lists: unwrap {value, display_name} objects to raw .value
|
|
540
|
+
// for the backend; raw values already present are passed through unchanged.
|
|
541
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'list' || (field === null || field === void 0 ? void 0 : field.type) === 'multiple choice') {
|
|
542
|
+
dbData[key] = Array.isArray(value)
|
|
543
|
+
? value.map((choice) => typeof choice === 'object' && choice !== null ? choice.value : choice)
|
|
544
|
+
: value;
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
// Date:
|
|
548
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'date') {
|
|
549
|
+
dbData[key] = (0, dayjs_1.default)(value).format('YYYY-MM-DD');
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
// DateTime:
|
|
553
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'datetime') {
|
|
554
|
+
dbData[key] = (0, dayjs_1.default)(value).format('YYYY-MM-DDTHH:mm');
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
// Default:
|
|
558
|
+
dbData[key] = value;
|
|
559
|
+
}
|
|
560
|
+
return {
|
|
561
|
+
data: dbData,
|
|
562
|
+
requiresMultipart,
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
function prepareDataBySchema({ data, schema, }) {
|
|
566
|
+
const { data: preparedData, requiresMultipart } = prepareDataBySchemaRecursive({
|
|
567
|
+
data,
|
|
568
|
+
schema,
|
|
569
|
+
});
|
|
570
|
+
return {
|
|
571
|
+
data: requiresMultipart ? (0, utils_1.convertToFormData)(preparedData) : preparedData,
|
|
572
|
+
contentType: requiresMultipart
|
|
573
|
+
? 'multipart/form-data'
|
|
574
|
+
: 'application/json',
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function updateDataBySchema(_a) {
|
|
578
|
+
return __awaiter(this, arguments, void 0, function* ({ model, modelObjectId, serverEndPoint, data, schema, path = null, }) {
|
|
579
|
+
const { data: dbData, contentType } = prepareDataBySchema({ data, schema });
|
|
580
|
+
if (!path) {
|
|
581
|
+
path = model;
|
|
582
|
+
}
|
|
583
|
+
const response = yield createOrUpdateData({
|
|
584
|
+
path,
|
|
585
|
+
serverEndPoint,
|
|
586
|
+
data: dbData,
|
|
587
|
+
id: modelObjectId,
|
|
588
|
+
contentType,
|
|
589
|
+
});
|
|
590
|
+
return response;
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
function addExistingRelatedModel(_a) {
|
|
594
|
+
return __awaiter(this, arguments, void 0, function* ({ model, serverEndPoint, id, data, }) {
|
|
595
|
+
const response = yield partialUpdateData({ path: model, serverEndPoint, data, id });
|
|
596
|
+
return response;
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
function getDataGridColumns(schema, columnFields, creatableFields, disabledFields) {
|
|
600
|
+
if (!schema) {
|
|
601
|
+
return false;
|
|
602
|
+
}
|
|
603
|
+
const finalColumnFields = !columnFields || columnFields.length === 0
|
|
604
|
+
? Object.keys(schema)
|
|
605
|
+
: columnFields.filter((field) => {
|
|
606
|
+
return field in schema;
|
|
607
|
+
});
|
|
608
|
+
return finalColumnFields.map((field) => {
|
|
609
|
+
const fieldSchema = schema[field];
|
|
610
|
+
const column = {
|
|
611
|
+
field,
|
|
612
|
+
headerName: fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.label,
|
|
613
|
+
creatable: creatableFields && creatableFields.includes(field)
|
|
614
|
+
? true
|
|
615
|
+
: fieldSchema && 'related_editable' in fieldSchema
|
|
616
|
+
? fieldSchema.related_editable
|
|
617
|
+
: false,
|
|
618
|
+
disabled: !!disabledFields && disabledFields.includes(field),
|
|
619
|
+
uiRequired: (fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.ui_required) || false,
|
|
620
|
+
width: 100,
|
|
621
|
+
};
|
|
622
|
+
return column;
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
function getAutoComplete(_a) {
|
|
626
|
+
return __awaiter(this, arguments, void 0, function* ({ model, queryParams, serverEndPoint, }) {
|
|
627
|
+
const data = yield getData({
|
|
628
|
+
path: `${model}/${queryParams && queryParams.length > 0 ? '?' + queryParams.join('&') : ''}`,
|
|
629
|
+
serverEndPoint,
|
|
630
|
+
route: 'autocomplete',
|
|
631
|
+
});
|
|
632
|
+
if (axios_1.default.isAxiosError(data)) {
|
|
633
|
+
return data;
|
|
634
|
+
}
|
|
635
|
+
const occurrences = {};
|
|
636
|
+
const sanitizedData = data.map((row) => {
|
|
637
|
+
const baseLabel = row.label;
|
|
638
|
+
occurrences[baseLabel] = (occurrences[baseLabel] || 0) + 1;
|
|
639
|
+
return Object.assign(Object.assign({}, row), { label: occurrences[baseLabel] > 1 ? `${baseLabel} (${occurrences[baseLabel]})` : baseLabel });
|
|
640
|
+
});
|
|
641
|
+
return sanitizedData;
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
const loginByPayload = (payload, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
645
|
+
if (!serverEndPoint) {
|
|
646
|
+
return {
|
|
647
|
+
message: noServerEndPointMessage,
|
|
648
|
+
isAxiosError: true,
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
const url = serverEndPoint.getToken;
|
|
652
|
+
if (!url) {
|
|
653
|
+
console.log('Erro no loginByPayload: faltou a configuração de url getToken!');
|
|
654
|
+
return false;
|
|
655
|
+
}
|
|
656
|
+
try {
|
|
657
|
+
const { data } = yield axios_1.default.post(url, payload);
|
|
658
|
+
localStorage.setItem('refreshToken', data.refresh);
|
|
659
|
+
(0, exports.setAuthToken)(data.access);
|
|
660
|
+
return true;
|
|
661
|
+
}
|
|
662
|
+
catch (e) {
|
|
663
|
+
console.log('Erro no loginByPayload!', e);
|
|
664
|
+
(0, exports.setAuthToken)(null);
|
|
665
|
+
return false;
|
|
666
|
+
}
|
|
667
|
+
});
|
|
668
|
+
exports.loginByPayload = loginByPayload;
|
|
669
|
+
const clearJWT = () => {
|
|
670
|
+
localStorage.removeItem('token');
|
|
671
|
+
return false;
|
|
672
|
+
};
|
|
673
|
+
exports.clearJWT = clearJWT;
|
|
674
|
+
const hasJWT = () => {
|
|
675
|
+
const token = localStorage.getItem('token');
|
|
676
|
+
if (token) {
|
|
677
|
+
return true;
|
|
678
|
+
}
|
|
679
|
+
return false;
|
|
680
|
+
};
|
|
681
|
+
exports.hasJWT = hasJWT;
|
|
682
|
+
const setAuthToken = (token) => {
|
|
683
|
+
if (token) {
|
|
684
|
+
localStorage.setItem('token', token);
|
|
685
|
+
axios_1.default.defaults.headers.common.Authorization = `Bearer ${token}`;
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
localStorage.removeItem('token');
|
|
689
|
+
localStorage.removeItem('refreshToken');
|
|
690
|
+
delete axios_1.default.defaults.headers.common.Authorization;
|
|
691
|
+
};
|
|
692
|
+
exports.setAuthToken = setAuthToken;
|
|
693
|
+
const refreshToken = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
694
|
+
if (!serverEndPoint) {
|
|
695
|
+
return {
|
|
696
|
+
message: noServerEndPointMessage,
|
|
697
|
+
isAxiosError: true,
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
const refreshToken = localStorage.getItem('refreshToken');
|
|
701
|
+
(0, exports.setAuthToken)(null);
|
|
702
|
+
if (!refreshToken) {
|
|
703
|
+
(0, exports.dispatchAuthExpired)();
|
|
704
|
+
return false;
|
|
705
|
+
}
|
|
706
|
+
try {
|
|
707
|
+
const { data } = yield axios_1.default.post(`${serverEndPoint.refreshToken}`, {
|
|
708
|
+
refresh: refreshToken,
|
|
709
|
+
});
|
|
710
|
+
(0, exports.setAuthToken)(data.access);
|
|
711
|
+
return true;
|
|
712
|
+
}
|
|
713
|
+
catch (e) {
|
|
714
|
+
console.log('Failed refreshing token', e);
|
|
715
|
+
(0, exports.dispatchAuthExpired)();
|
|
716
|
+
return false;
|
|
717
|
+
}
|
|
718
|
+
});
|
|
719
|
+
const isLoggedIn = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
720
|
+
const token = localStorage.getItem('token');
|
|
721
|
+
(0, exports.setAuthToken)(token);
|
|
722
|
+
if (!token) {
|
|
723
|
+
return false;
|
|
724
|
+
}
|
|
725
|
+
const usuaria = yield getData({ path: 'my_account/', serverEndPoint });
|
|
726
|
+
if (axios_1.default.isAxiosError(usuaria)) {
|
|
727
|
+
console.log('Erro ao recuperar dados de usuária!');
|
|
728
|
+
return false;
|
|
729
|
+
}
|
|
730
|
+
return usuaria;
|
|
731
|
+
});
|
|
732
|
+
exports.isLoggedIn = isLoggedIn;
|
|
733
|
+
const getSignUpOptions = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
734
|
+
if (!serverEndPoint || !serverEndPoint.signUp) {
|
|
735
|
+
return {
|
|
736
|
+
message: noServerEndPointMessage,
|
|
737
|
+
isAxiosError: true,
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
const url = serverEndPoint.signUp;
|
|
741
|
+
try {
|
|
742
|
+
const { data } = yield axios_1.default.options(url);
|
|
743
|
+
return data.action.POST;
|
|
744
|
+
}
|
|
745
|
+
catch (e) {
|
|
746
|
+
const message = `Error fetching options from ${url}`;
|
|
747
|
+
console.log(message, e);
|
|
748
|
+
return {
|
|
749
|
+
message,
|
|
750
|
+
isAxiosError: true,
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
});
|
|
754
|
+
exports.getSignUpOptions = getSignUpOptions;
|
|
755
|
+
const signUp = (data, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
756
|
+
var _a;
|
|
757
|
+
if (!serverEndPoint || !serverEndPoint.signUp) {
|
|
758
|
+
return {
|
|
759
|
+
message: noServerEndPointMessage,
|
|
760
|
+
isAxiosError: true,
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
const url = serverEndPoint.signUp;
|
|
764
|
+
try {
|
|
765
|
+
const { data: responseData } = yield axios_1.default.post(url, data);
|
|
766
|
+
return responseData;
|
|
767
|
+
}
|
|
768
|
+
catch (e) {
|
|
769
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
770
|
+
const err = e;
|
|
771
|
+
const message = `Error trying signUp at ${url}`;
|
|
772
|
+
if (((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
|
|
773
|
+
const isRefreshed = yield refreshToken(serverEndPoint);
|
|
774
|
+
if (!isRefreshed) {
|
|
775
|
+
console.log(expiredTokenMessage);
|
|
776
|
+
return {
|
|
777
|
+
message: expiredTokenMessage,
|
|
778
|
+
isAxiosError: true,
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
try {
|
|
782
|
+
const { data: responseData } = yield axios_1.default.post(url, data);
|
|
783
|
+
return responseData;
|
|
784
|
+
}
|
|
785
|
+
catch (e) {
|
|
786
|
+
console.log(message, data, e);
|
|
787
|
+
return {
|
|
788
|
+
message,
|
|
789
|
+
isAxiosError: true,
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
console.log(message, data, e);
|
|
794
|
+
return {
|
|
795
|
+
message,
|
|
796
|
+
isAxiosError: true,
|
|
797
|
+
};
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
console.log(unknownError, data);
|
|
801
|
+
return {
|
|
802
|
+
message: unknownError,
|
|
803
|
+
isAxiosError: true,
|
|
804
|
+
};
|
|
805
|
+
});
|
|
806
|
+
exports.signUp = signUp;
|
|
807
|
+
const requestPasswordReset = (email, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
808
|
+
if (!serverEndPoint || !serverEndPoint.requestPasswordReset) {
|
|
809
|
+
return {
|
|
810
|
+
message: noServerEndPointMessage,
|
|
811
|
+
isAxiosError: true,
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
const url = serverEndPoint.requestPasswordReset;
|
|
815
|
+
try {
|
|
816
|
+
const { data } = yield axios_1.default.post(url, { email });
|
|
817
|
+
return data;
|
|
818
|
+
}
|
|
819
|
+
catch (e) {
|
|
820
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
821
|
+
return e;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
return { message: unknownError, isAxiosError: true };
|
|
825
|
+
});
|
|
826
|
+
exports.requestPasswordReset = requestPasswordReset;
|
|
827
|
+
const confirmPasswordReset = (data, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
828
|
+
if (!serverEndPoint || !serverEndPoint.confirmPasswordReset) {
|
|
829
|
+
return {
|
|
830
|
+
message: noServerEndPointMessage,
|
|
831
|
+
isAxiosError: true,
|
|
832
|
+
};
|
|
833
|
+
}
|
|
834
|
+
const url = serverEndPoint.confirmPasswordReset;
|
|
835
|
+
try {
|
|
836
|
+
const { data: responseData } = yield axios_1.default.post(url, data);
|
|
837
|
+
return responseData;
|
|
838
|
+
}
|
|
839
|
+
catch (e) {
|
|
840
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
841
|
+
return e;
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
return { message: unknownError, isAxiosError: true };
|
|
845
|
+
});
|
|
846
|
+
exports.confirmPasswordReset = confirmPasswordReset;
|
|
847
|
+
const changePassword = (data, serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
848
|
+
if (!serverEndPoint || !serverEndPoint.changePassword) {
|
|
849
|
+
return {
|
|
850
|
+
message: noServerEndPointMessage,
|
|
851
|
+
isAxiosError: true,
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
const url = serverEndPoint.changePassword;
|
|
855
|
+
try {
|
|
856
|
+
const { data: responseData } = yield axios_1.default.post(url, data);
|
|
857
|
+
return responseData;
|
|
858
|
+
}
|
|
859
|
+
catch (e) {
|
|
860
|
+
if (axios_1.default.isAxiosError(e)) {
|
|
861
|
+
return e;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
return { message: unknownError, isAxiosError: true };
|
|
865
|
+
});
|
|
866
|
+
exports.changePassword = changePassword;
|
|
867
|
+
function getGenericModelList(_a) {
|
|
868
|
+
return __awaiter(this, arguments, void 0, function* ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', columnFields, creatableFields, disabledFields, isInBatches = false, loadedSchema, loadedModelOptions, page, filter, queryParams = [], sort, sumRows, schemas, }) {
|
|
869
|
+
const newQueryParams = [...queryParams];
|
|
870
|
+
let path = `${model}/${id}`;
|
|
871
|
+
let schemaPath = `${model}/`;
|
|
872
|
+
let schema = loadedSchema;
|
|
873
|
+
let modelOptions = loadedModelOptions;
|
|
874
|
+
let columns = [];
|
|
875
|
+
if (!(0, utils_1.isTmpId)(id) && relatedModel) {
|
|
876
|
+
path += `/${relatedModel}/`;
|
|
877
|
+
if (relatedModelId) {
|
|
878
|
+
path += `${relatedModelId}/`;
|
|
879
|
+
}
|
|
880
|
+
schemaPath += `${id}/${relatedModel}/`;
|
|
881
|
+
}
|
|
882
|
+
// SERVER-SIDE TOTALS (sumRows):
|
|
883
|
+
if (sumRows) {
|
|
884
|
+
const sumRowsParams = sumRows.rows.map((row) => row.field).join(',');
|
|
885
|
+
newQueryParams.push(`sum_rows=${sumRowsParams}`);
|
|
886
|
+
}
|
|
887
|
+
// SERVER-SIDE FILTERING:
|
|
888
|
+
if (filter) {
|
|
889
|
+
if (filter.quickFilterValues &&
|
|
890
|
+
filter.quickFilterValues.length > 0 &&
|
|
891
|
+
filter.quickFilterValues[0]) {
|
|
892
|
+
newQueryParams.push(`search=${filter.quickFilterValues[0]}`);
|
|
893
|
+
}
|
|
894
|
+
for (const item of filter.items) {
|
|
895
|
+
if (!item.operator) {
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
const queryParam = item.value
|
|
899
|
+
? `field=${item.field}&operator=${item.operator}&value=${item.value}`
|
|
900
|
+
: `field=${item.field}&operator=${item.operator}`;
|
|
901
|
+
newQueryParams.push(queryParam);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
// SERVER-SIDE SORTING:
|
|
905
|
+
if (sort) {
|
|
906
|
+
const sortParams = [];
|
|
907
|
+
for (const item of sort) {
|
|
908
|
+
sortParams.push(item.sort === 'desc' ? `-${item.field}` : item.field);
|
|
909
|
+
}
|
|
910
|
+
newQueryParams.push(`ordering=${sortParams.join(',')}`);
|
|
911
|
+
}
|
|
912
|
+
// SERVER-SIDE PAGINATION:
|
|
913
|
+
if (page) {
|
|
914
|
+
newQueryParams.push(`page=${page + 1}`);
|
|
915
|
+
}
|
|
916
|
+
// Only get schema and columns if not in batches or in first batch:
|
|
917
|
+
if (!schema) {
|
|
918
|
+
const options = yield getSchema(schemaPath, serverEndPoint, schemas);
|
|
919
|
+
if (!options || axios_1.default.isAxiosError(options)) {
|
|
920
|
+
return (options || { message: unknownError, isAxiosError: true });
|
|
921
|
+
}
|
|
922
|
+
schema = options.schema;
|
|
923
|
+
if (!schema) {
|
|
924
|
+
return { message: `Schema not found for ${model}`, isAxiosError: true };
|
|
925
|
+
}
|
|
926
|
+
modelOptions = options.modelOptions;
|
|
927
|
+
columns = getDataGridColumns(schema, columnFields, creatableFields, disabledFields);
|
|
928
|
+
if (!columns) {
|
|
929
|
+
return {
|
|
930
|
+
message: `Columns could not be generated for ${model}`,
|
|
931
|
+
isAxiosError: true,
|
|
932
|
+
};
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
let rowCount = 0;
|
|
936
|
+
let sumRowsTotals = null;
|
|
937
|
+
let data = [];
|
|
938
|
+
if (!id || (id && !relatedModelId)) {
|
|
939
|
+
if (isInBatches) {
|
|
940
|
+
newQueryParams.push(loadedSchema ? 'is_last_batch=1' : 'is_first_batch=1');
|
|
941
|
+
}
|
|
942
|
+
if (newQueryParams.length > 0) {
|
|
943
|
+
path += `?${newQueryParams.join('&')}`;
|
|
944
|
+
}
|
|
945
|
+
const ret = yield getData({ path, serverEndPoint });
|
|
946
|
+
if (ret && axios_1.default.isAxiosError(ret)) {
|
|
947
|
+
return ret;
|
|
948
|
+
}
|
|
949
|
+
const dataRaw = 'results' in ret ? ret.results : ret;
|
|
950
|
+
if ('results' in ret) {
|
|
951
|
+
rowCount = ret.count;
|
|
952
|
+
if (sumRows) {
|
|
953
|
+
sumRowsTotals = ret.sum_rows;
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
if (!schema) {
|
|
957
|
+
return { message: `Schema not found for ${model}`, isAxiosError: true };
|
|
958
|
+
}
|
|
959
|
+
data = dataRaw.map((row) => {
|
|
960
|
+
const newRow = {};
|
|
961
|
+
for (const [key, field] of Object.entries(schema)) {
|
|
962
|
+
if (!(key in row)) {
|
|
963
|
+
continue;
|
|
964
|
+
}
|
|
965
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'choice') {
|
|
966
|
+
newRow[key] = row[key]
|
|
967
|
+
? {
|
|
968
|
+
value: row[key],
|
|
969
|
+
display_name: (0, utils_1.getChoiceByValue)(row[key], field.choices),
|
|
970
|
+
}
|
|
971
|
+
: (0, utils_1.emptyByType)(field);
|
|
972
|
+
continue;
|
|
973
|
+
}
|
|
974
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === 'list' || (field === null || field === void 0 ? void 0 : field.type) === 'multiple choice') {
|
|
975
|
+
newRow[key] = Array.isArray(row[key])
|
|
976
|
+
? row[key].map((entry) => { var _a; return (0, utils_1.toChoiceItem)(entry, (_a = field.child) === null || _a === void 0 ? void 0 : _a.choices); })
|
|
977
|
+
: (0, utils_1.emptyByType)(field);
|
|
978
|
+
continue;
|
|
979
|
+
}
|
|
980
|
+
newRow[key] = row[key] ? row[key] : (0, utils_1.emptyByType)(field);
|
|
981
|
+
}
|
|
982
|
+
return newRow;
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
if (!schema || !columns) {
|
|
986
|
+
return {
|
|
987
|
+
message: `Schema or columns not found for ${model}`,
|
|
988
|
+
isAxiosError: true,
|
|
989
|
+
};
|
|
990
|
+
}
|
|
991
|
+
return { data, columns, schema, modelOptions, rowCount, sumRowsTotals };
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
function getGenericModel(_a) {
|
|
995
|
+
return __awaiter(this, arguments, void 0, function* ({ model, serverEndPoint, id = '', relatedModel = '', relatedModelId = '', schemas, }) {
|
|
996
|
+
let path = `${model}/${id}`;
|
|
997
|
+
let schemaPath = `${model}/`;
|
|
998
|
+
if (!(0, utils_1.isTmpId)(id) && relatedModel) {
|
|
999
|
+
path += `/${relatedModel}/`;
|
|
1000
|
+
if (relatedModelId) {
|
|
1001
|
+
path += `${relatedModelId}/`;
|
|
1002
|
+
}
|
|
1003
|
+
schemaPath += `${id}/${relatedModel}/`;
|
|
1004
|
+
}
|
|
1005
|
+
else if (id) {
|
|
1006
|
+
path += '/';
|
|
1007
|
+
}
|
|
1008
|
+
const options = yield getSchema(schemaPath, serverEndPoint, schemas);
|
|
1009
|
+
if (!options || axios_1.default.isAxiosError(options)) {
|
|
1010
|
+
return (options || { message: unknownError, isAxiosError: true });
|
|
1011
|
+
}
|
|
1012
|
+
const { schema, modelOptions } = options;
|
|
1013
|
+
const columns = getDataGridColumns(schema);
|
|
1014
|
+
if (!columns) {
|
|
1015
|
+
return {
|
|
1016
|
+
message: `Columns could not be generated for ${model}`,
|
|
1017
|
+
isAxiosError: true,
|
|
1018
|
+
};
|
|
1019
|
+
}
|
|
1020
|
+
let data = {};
|
|
1021
|
+
if (!(0, utils_1.isTmpId)(id) && (!relatedModel || (relatedModel && relatedModelId))) {
|
|
1022
|
+
const response = yield getData({ path, serverEndPoint });
|
|
1023
|
+
if (!axios_1.default.isAxiosError(response)) {
|
|
1024
|
+
data = response;
|
|
1025
|
+
}
|
|
1026
|
+
else {
|
|
1027
|
+
return response;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
return { schema, columns, modelOptions, data };
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
const getAllModels = (serverEndPoint) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1034
|
+
if (!serverEndPoint) {
|
|
1035
|
+
return {
|
|
1036
|
+
message: noServerEndPointMessage,
|
|
1037
|
+
isAxiosError: true,
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
1040
|
+
const data = yield getData({ path: 'endpoints/', serverEndPoint });
|
|
1041
|
+
return axios_1.default.isAxiosError(data) ? [] : data;
|
|
1042
|
+
});
|
|
1043
|
+
exports.getAllModels = getAllModels;
|
|
1044
|
+
const exportExcelData = (_a) => __awaiter(void 0, [_a], void 0, function* ({ model, modelParent, modelParentId, paginationModel, serverEndPoint, }) {
|
|
1045
|
+
var _b;
|
|
1046
|
+
if (!serverEndPoint) {
|
|
1047
|
+
return {
|
|
1048
|
+
message: noServerEndPointMessage,
|
|
1049
|
+
isAxiosError: true,
|
|
1050
|
+
};
|
|
1051
|
+
}
|
|
1052
|
+
const filter = paginationModel.filter;
|
|
1053
|
+
const sort = paginationModel.sort;
|
|
1054
|
+
const newQueryParams = paginationModel.queryParams ? [...paginationModel.queryParams] : [];
|
|
1055
|
+
try {
|
|
1056
|
+
// SERVER-SIDE FILTERING:
|
|
1057
|
+
if (filter) {
|
|
1058
|
+
if (filter.quickFilterValues &&
|
|
1059
|
+
filter.quickFilterValues.length > 0 &&
|
|
1060
|
+
filter.quickFilterValues[0]) {
|
|
1061
|
+
newQueryParams.push(`search=${filter.quickFilterValues[0]}`);
|
|
1062
|
+
}
|
|
1063
|
+
for (const item of filter.items) {
|
|
1064
|
+
if (!item.operator) {
|
|
1065
|
+
continue;
|
|
1066
|
+
}
|
|
1067
|
+
const queryParam = item.value
|
|
1068
|
+
? `field=${item.field}&operator=${item.operator}&value=${item.value}`
|
|
1069
|
+
: `field=${item.field}&operator=${item.operator}`;
|
|
1070
|
+
newQueryParams.push(queryParam);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
// SERVER-SIDE SORTING:
|
|
1074
|
+
if (sort) {
|
|
1075
|
+
const sortParams = [];
|
|
1076
|
+
for (const item of sort) {
|
|
1077
|
+
sortParams.push(item.sort === 'desc' ? `-${item.field}` : item.field);
|
|
1078
|
+
}
|
|
1079
|
+
newQueryParams.push(`ordering=${sortParams.join(',')}`);
|
|
1080
|
+
}
|
|
1081
|
+
let url = !modelParent || !modelParentId
|
|
1082
|
+
? `${serverEndPoint.api}/${model}/excel/`
|
|
1083
|
+
: `${serverEndPoint.api}/${modelParent}/${modelParentId}/${model}/excel/`;
|
|
1084
|
+
if (newQueryParams.length > 0) {
|
|
1085
|
+
url += `?${newQueryParams.join('&')}`;
|
|
1086
|
+
}
|
|
1087
|
+
const response = yield axios_1.default.get(url, { responseType: 'blob' });
|
|
1088
|
+
const downloadUrl = window.URL.createObjectURL(new Blob([response.data]));
|
|
1089
|
+
const link = document.createElement('a');
|
|
1090
|
+
link.href = downloadUrl;
|
|
1091
|
+
// Try to get filename from content-disposition header if available, otherwise use model name
|
|
1092
|
+
let filename = `${model}.xlsx`;
|
|
1093
|
+
const disposition = response.headers['content-disposition'];
|
|
1094
|
+
if (disposition && disposition.indexOf('attachment') !== -1) {
|
|
1095
|
+
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
|
|
1096
|
+
const matches = filenameRegex.exec(disposition);
|
|
1097
|
+
if (matches != null && matches[1]) {
|
|
1098
|
+
filename = matches[1].replace(/['"]/g, '');
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
link.setAttribute('download', filename);
|
|
1102
|
+
document.body.appendChild(link);
|
|
1103
|
+
link.click();
|
|
1104
|
+
(_b = link.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(link);
|
|
1105
|
+
return true;
|
|
1106
|
+
}
|
|
1107
|
+
catch (error) {
|
|
1108
|
+
console.error('Error exporting to excel:', error);
|
|
1109
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
1110
|
+
return error;
|
|
1111
|
+
}
|
|
1112
|
+
return {
|
|
1113
|
+
message: 'Erro desconhecido ao exportar para Excel',
|
|
1114
|
+
isAxiosError: true,
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
});
|
|
1118
|
+
exports.exportExcelData = exportExcelData;
|