@credithub/harlan-components 1.56.0 → 1.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/protestos/protestosList.js +132 -2
- package/lib/cjs/index.js +133 -3
- package/lib/esm/index.js +133 -3
- package/package.json +1 -1
|
@@ -37,14 +37,60 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
import { formatMoney } from '../../utils/number';
|
|
38
38
|
import { formatDocument } from '../../utils/string';
|
|
39
39
|
import XPathUtils from '../../utils/xpath';
|
|
40
|
-
import React, { memo, useContext } from 'react';
|
|
40
|
+
import React, { memo, useContext, useState, useEffect } from 'react';
|
|
41
41
|
import AddItemField from '../common/addItem';
|
|
42
42
|
import Button from '../common/button';
|
|
43
43
|
import { ResultContent } from '../interface/result';
|
|
44
44
|
import { WebService } from '../webservice';
|
|
45
45
|
import { openFormThenRedirect } from '../../utils/protestosp';
|
|
46
|
+
// Throttling mechanism for API requests
|
|
47
|
+
var activeRequests = 0;
|
|
48
|
+
var MAX_CONCURRENT_REQUESTS = 2;
|
|
49
|
+
var requestQueue = [];
|
|
50
|
+
var processQueue = function () {
|
|
51
|
+
if (requestQueue.length === 0 || activeRequests >= MAX_CONCURRENT_REQUESTS)
|
|
52
|
+
return;
|
|
53
|
+
// Process next request in queue
|
|
54
|
+
var nextRequest = requestQueue.shift();
|
|
55
|
+
if (nextRequest) {
|
|
56
|
+
activeRequests++;
|
|
57
|
+
nextRequest();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// Elegant three-dot loader component
|
|
61
|
+
var ThreeDotsLoader = function () {
|
|
62
|
+
// CSS for the loader container
|
|
63
|
+
var loaderStyle = {
|
|
64
|
+
display: 'inline-flex',
|
|
65
|
+
alignItems: 'center',
|
|
66
|
+
marginLeft: '5px',
|
|
67
|
+
height: '10px',
|
|
68
|
+
};
|
|
69
|
+
// CSS for each dot
|
|
70
|
+
var dotStyle = function (delay) { return ({
|
|
71
|
+
width: '4px',
|
|
72
|
+
height: '4px',
|
|
73
|
+
margin: '0 2px',
|
|
74
|
+
borderRadius: '50%',
|
|
75
|
+
background: '#aaa',
|
|
76
|
+
opacity: 0.7,
|
|
77
|
+
animation: 'blink 1.4s infinite',
|
|
78
|
+
animationDelay: "".concat(delay, "s"),
|
|
79
|
+
}); };
|
|
80
|
+
// CSS animation keyframes defined as a style block
|
|
81
|
+
var keyframes = "\n @keyframes blink {\n 0% { opacity: 0.2; }\n 20% { opacity: 0.8; }\n 100% { opacity: 0.2; }\n }\n ";
|
|
82
|
+
return (React.createElement("span", { style: loaderStyle },
|
|
83
|
+
React.createElement("style", null, keyframes),
|
|
84
|
+
React.createElement("span", { style: dotStyle(0) }),
|
|
85
|
+
React.createElement("span", { style: dotStyle(0.2) }),
|
|
86
|
+
React.createElement("span", { style: dotStyle(0.4) })));
|
|
87
|
+
};
|
|
46
88
|
export var ProtestoItem = memo(function (_a) {
|
|
47
89
|
var protesto = _a.protesto;
|
|
90
|
+
var client = useContext(WebService);
|
|
91
|
+
var _b = useState(null), quemApresentou = _b[0], setQuemApresentou = _b[1];
|
|
92
|
+
var _c = useState(false), loading = _c[0], setLoading = _c[1];
|
|
93
|
+
var _d = useState(false), queued = _d[0], setQueued = _d[1];
|
|
48
94
|
var getField = function (path, formatter) {
|
|
49
95
|
var value = XPathUtils.select("string(".concat(path, ")"), protesto);
|
|
50
96
|
return formatter ? formatter(value) : value;
|
|
@@ -52,8 +98,92 @@ export var ProtestoItem = memo(function (_a) {
|
|
|
52
98
|
var formatBooleanField = function (value) {
|
|
53
99
|
return value === 'true' ? 'Sim' : 'Não';
|
|
54
100
|
};
|
|
101
|
+
// Function to fetch Quem Apresentou data
|
|
102
|
+
var fetchQuemApresentou = function (nm_chave) { return __awaiter(void 0, void 0, void 0, function () {
|
|
103
|
+
var response, error_1;
|
|
104
|
+
return __generator(this, function (_a) {
|
|
105
|
+
switch (_a.label) {
|
|
106
|
+
case 0:
|
|
107
|
+
if (!nm_chave)
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
setLoading(true);
|
|
110
|
+
_a.label = 1;
|
|
111
|
+
case 1:
|
|
112
|
+
_a.trys.push([1, 4, 5, 6]);
|
|
113
|
+
return [4 /*yield*/, client.request("SELECT FROM 'PDFPROTESTO'.'AI'", { nm_chave: nm_chave })];
|
|
114
|
+
case 2: return [4 /*yield*/, (_a.sent()).json()];
|
|
115
|
+
case 3:
|
|
116
|
+
response = _a.sent();
|
|
117
|
+
if (response && response['Quem Apresentou']) {
|
|
118
|
+
setQuemApresentou(response['Quem Apresentou']);
|
|
119
|
+
}
|
|
120
|
+
return [3 /*break*/, 6];
|
|
121
|
+
case 4:
|
|
122
|
+
error_1 = _a.sent();
|
|
123
|
+
console.error('Error fetching Quem Apresentou:', error_1);
|
|
124
|
+
return [3 /*break*/, 6];
|
|
125
|
+
case 5:
|
|
126
|
+
setLoading(false);
|
|
127
|
+
activeRequests--;
|
|
128
|
+
processQueue(); // Process next request in queue
|
|
129
|
+
return [7 /*endfinally*/];
|
|
130
|
+
case 6: return [2 /*return*/];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}); };
|
|
134
|
+
// Function to queue or execute the fetch request
|
|
135
|
+
var queueOrExecuteFetch = function (nm_chave) {
|
|
136
|
+
var executeRequest = function () {
|
|
137
|
+
fetchQuemApresentou(nm_chave);
|
|
138
|
+
};
|
|
139
|
+
if (activeRequests < MAX_CONCURRENT_REQUESTS) {
|
|
140
|
+
// Execute immediately if under threshold
|
|
141
|
+
activeRequests++;
|
|
142
|
+
executeRequest();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Queue the request
|
|
146
|
+
setQueued(true);
|
|
147
|
+
requestQueue.push(function () {
|
|
148
|
+
setQueued(false);
|
|
149
|
+
executeRequest();
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
useEffect(function () {
|
|
154
|
+
// Check if nomeCedente is empty
|
|
155
|
+
var nomeCedente = getField('./nomeCedente');
|
|
156
|
+
if (nomeCedente && nomeCedente.trim() !== '')
|
|
157
|
+
return;
|
|
158
|
+
// Get nm_chave and queue/execute the request
|
|
159
|
+
var nm_chave = getField('./nm_chave');
|
|
160
|
+
if (nm_chave) {
|
|
161
|
+
queueOrExecuteFetch(nm_chave);
|
|
162
|
+
}
|
|
163
|
+
// Cleanup function
|
|
164
|
+
return function () {
|
|
165
|
+
// If this component unmounts while in queue, try to remove it from queue
|
|
166
|
+
var queueIndex = requestQueue.findIndex(function (req) {
|
|
167
|
+
return req.toString().includes(nm_chave);
|
|
168
|
+
});
|
|
169
|
+
if (queueIndex !== -1) {
|
|
170
|
+
requestQueue.splice(queueIndex, 1);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}, []);
|
|
174
|
+
// Get the display value for Quem Protestou field
|
|
175
|
+
var getQuemProtestouDisplay = function () {
|
|
176
|
+
var baseValue = quemApresentou || getField('./nomeCedente');
|
|
177
|
+
if (loading || queued) {
|
|
178
|
+
return React.createElement(React.Fragment, null,
|
|
179
|
+
baseValue || '',
|
|
180
|
+
" ",
|
|
181
|
+
React.createElement(ThreeDotsLoader, null));
|
|
182
|
+
}
|
|
183
|
+
return baseValue;
|
|
184
|
+
};
|
|
55
185
|
return (React.createElement(ResultContent, { print: "repeat(7, 1fr)", desktop: "repeat(8, 1fr)", tablet: "repeat(4, 1fr)", mobile: "repeat(2, 1fr)" },
|
|
56
|
-
React.createElement(AddItemField, { name: "Quem Protestou", value:
|
|
186
|
+
React.createElement(AddItemField, { name: "Quem Protestou", value: getQuemProtestouDisplay() }),
|
|
57
187
|
React.createElement(AddItemField, { name: "Atrav\u00E9s De", value: getField('./nomeApresentante') }),
|
|
58
188
|
React.createElement(AddItemField, { name: "CPF/CNPJ Protestado", value: formatDocument(getField('./cpfCnpj')) }),
|
|
59
189
|
React.createElement(AddItemField, { name: "Data Do Protesto", value: getField('./dataProtesto') }),
|