@credithub/harlan-components 1.111.2 → 1.112.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/adapters/instrumentoProtesto/ieptbInstrumento.d.ts +16 -0
- package/dist/adapters/instrumentoProtesto/ieptbInstrumento.js +72 -0
- package/dist/components/common/modalInstrumentoProtestoSP.d.ts +12 -0
- package/dist/components/common/modalInstrumentoProtestoSP.js +110 -0
- package/dist/components/protestos/instrumento/InstrumentoDiscoveryConfirmModal.d.ts +9 -0
- package/dist/components/protestos/instrumento/InstrumentoDiscoveryConfirmModal.js +29 -0
- package/dist/components/protestos/instrumento/InstrumentoEmailStatusModal.d.ts +9 -0
- package/dist/components/protestos/instrumento/InstrumentoEmailStatusModal.js +16 -0
- package/dist/components/protestos/instrumento/mocks/instrumentoMocks.d.ts +33 -0
- package/dist/components/protestos/instrumento/mocks/instrumentoMocks.js +142 -0
- package/dist/components/protestos/instrumento/useInstrumento.d.ts +31 -0
- package/dist/components/protestos/instrumento/useInstrumento.js +213 -0
- package/dist/components/protestos/protestosList.js +107 -65
- package/dist/styles/globalStyle.js +4 -1
- package/dist/styles/theme.d.ts +1 -0
- package/dist/styles/theme.js +1 -0
- package/dist/utils/protestoUf.d.ts +10 -0
- package/dist/utils/protestoUf.js +17 -0
- package/lib/cjs/index.js +955 -395
- package/lib/esm/index.js +955 -395
- package/package.json +1 -1
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { sendInstrumentoDiscoveryEmail, sendInstrumentoManualEmail } from '../../../adapters/instrumentoProtesto/ieptbInstrumento';
|
|
38
|
+
import { useCallback, useState } from 'react';
|
|
39
|
+
import { mockDescobertaAutomaticaEmail, mockDescobrirInstrumento, mockEnviarEmailSP } from './mocks/instrumentoMocks';
|
|
40
|
+
/**
|
|
41
|
+
* Hook para gerenciar o fluxo de instrumento de protesto (fase mockada)
|
|
42
|
+
*
|
|
43
|
+
* Gerencia estados dos modais, handlers mockados e transições de estado.
|
|
44
|
+
* Na fase de integração real, os handlers mockados serão substituídos
|
|
45
|
+
* por chamadas ao InstrumentoService.
|
|
46
|
+
*/
|
|
47
|
+
export var useInstrumento = function (_a) {
|
|
48
|
+
var nmChave = _a.nmChave, cpfCnpj = _a.cpfCnpj, client = _a.client;
|
|
49
|
+
var _b = useState(false), isModalSPOpen = _b[0], setIsModalSPOpen = _b[1];
|
|
50
|
+
var _c = useState(false), isEmailModalOpen = _c[0], setIsEmailModalOpen = _c[1];
|
|
51
|
+
var _d = useState(''), emailMessage = _d[0], setEmailMessage = _d[1];
|
|
52
|
+
var _e = useState('Instrumento de Protesto'), emailTitle = _e[0], setEmailTitle = _e[1];
|
|
53
|
+
var _f = useState(false), isDescobrindo = _f[0], setIsDescobrindo = _f[1];
|
|
54
|
+
var _g = useState(false), isEnviandoEmail = _g[0], setIsEnviandoEmail = _g[1];
|
|
55
|
+
var _h = useState(false), isProcessandoDescoberta = _h[0], setIsProcessandoDescoberta = _h[1];
|
|
56
|
+
var openModalSP = useCallback(function () {
|
|
57
|
+
setIsModalSPOpen(true);
|
|
58
|
+
}, []);
|
|
59
|
+
var closeModalSP = useCallback(function () {
|
|
60
|
+
setIsModalSPOpen(false);
|
|
61
|
+
}, []);
|
|
62
|
+
var closeEmailModal = useCallback(function () {
|
|
63
|
+
setIsEmailModalOpen(false);
|
|
64
|
+
setEmailMessage('');
|
|
65
|
+
setEmailTitle('Instrumento de Protesto');
|
|
66
|
+
}, []);
|
|
67
|
+
var handleDescobrir = useCallback(function (livro, folha) { return __awaiter(void 0, void 0, void 0, function () {
|
|
68
|
+
var result, error_1;
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
setIsDescobrindo(true);
|
|
73
|
+
_a.label = 1;
|
|
74
|
+
case 1:
|
|
75
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
76
|
+
return [4 /*yield*/, mockDescobrirInstrumento(livro, folha)];
|
|
77
|
+
case 2:
|
|
78
|
+
result = _a.sent();
|
|
79
|
+
if (result.success) {
|
|
80
|
+
setEmailTitle('Instrumento Descoberto');
|
|
81
|
+
setEmailMessage(result.message);
|
|
82
|
+
setIsEmailModalOpen(true);
|
|
83
|
+
// Fecha o modal SP após sucesso
|
|
84
|
+
setIsModalSPOpen(false);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
setEmailTitle('Erro ao Descobrir Instrumento');
|
|
88
|
+
setEmailMessage(result.message);
|
|
89
|
+
setIsEmailModalOpen(true);
|
|
90
|
+
}
|
|
91
|
+
return [3 /*break*/, 5];
|
|
92
|
+
case 3:
|
|
93
|
+
error_1 = _a.sent();
|
|
94
|
+
setEmailTitle('Erro ao Descobrir Instrumento');
|
|
95
|
+
setEmailMessage('Ocorreu um erro inesperado ao tentar descobrir o instrumento. Tente novamente mais tarde.');
|
|
96
|
+
setIsEmailModalOpen(true);
|
|
97
|
+
return [3 /*break*/, 5];
|
|
98
|
+
case 4:
|
|
99
|
+
setIsDescobrindo(false);
|
|
100
|
+
return [7 /*endfinally*/];
|
|
101
|
+
case 5: return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); }, []);
|
|
105
|
+
var handleEnviarEmail = useCallback(function (livro, folha) { return __awaiter(void 0, void 0, void 0, function () {
|
|
106
|
+
var res, result, error_2;
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
switch (_a.label) {
|
|
109
|
+
case 0:
|
|
110
|
+
setIsEnviandoEmail(true);
|
|
111
|
+
_a.label = 1;
|
|
112
|
+
case 1:
|
|
113
|
+
_a.trys.push([1, 5, 6, 7]);
|
|
114
|
+
if (!(client && cpfCnpj)) return [3 /*break*/, 3];
|
|
115
|
+
return [4 /*yield*/, sendInstrumentoManualEmail(client, {
|
|
116
|
+
documento: cpfCnpj,
|
|
117
|
+
nm_chave: nmChave,
|
|
118
|
+
livro: livro,
|
|
119
|
+
folha: folha
|
|
120
|
+
})];
|
|
121
|
+
case 2:
|
|
122
|
+
res = _a.sent();
|
|
123
|
+
setEmailTitle('Instrumento solicitado por e-mail');
|
|
124
|
+
setEmailMessage((res === null || res === void 0 ? void 0 : res.message) ||
|
|
125
|
+
'Ok! Vamos processar e enviar o instrumento para seu e-mail assim que estiver disponível.');
|
|
126
|
+
setIsEmailModalOpen(true);
|
|
127
|
+
setIsModalSPOpen(false);
|
|
128
|
+
return [2 /*return*/];
|
|
129
|
+
case 3: return [4 /*yield*/, mockEnviarEmailSP(livro, folha)];
|
|
130
|
+
case 4:
|
|
131
|
+
result = _a.sent();
|
|
132
|
+
setEmailTitle('Instrumento solicitado por e-mail');
|
|
133
|
+
setEmailMessage(result.message);
|
|
134
|
+
setIsEmailModalOpen(true);
|
|
135
|
+
// Fecha o modal SP após envio
|
|
136
|
+
setIsModalSPOpen(false);
|
|
137
|
+
return [3 /*break*/, 7];
|
|
138
|
+
case 5:
|
|
139
|
+
error_2 = _a.sent();
|
|
140
|
+
setEmailTitle('Erro ao Enviar E-mail');
|
|
141
|
+
setEmailMessage('Não foi possível solicitar o instrumento por e-mail agora. Tente novamente em instantes.');
|
|
142
|
+
setIsEmailModalOpen(true);
|
|
143
|
+
return [3 /*break*/, 7];
|
|
144
|
+
case 6:
|
|
145
|
+
setIsEnviandoEmail(false);
|
|
146
|
+
return [7 /*endfinally*/];
|
|
147
|
+
case 7: return [2 /*return*/];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}); }, [client, cpfCnpj, nmChave]);
|
|
151
|
+
var handleDescobertaAutomatica = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
152
|
+
var res, result, error_3;
|
|
153
|
+
return __generator(this, function (_a) {
|
|
154
|
+
switch (_a.label) {
|
|
155
|
+
case 0:
|
|
156
|
+
if (!cpfCnpj) {
|
|
157
|
+
setEmailTitle('Erro');
|
|
158
|
+
setEmailMessage('Documento não disponível para descoberta automática.');
|
|
159
|
+
setIsEmailModalOpen(true);
|
|
160
|
+
return [2 /*return*/];
|
|
161
|
+
}
|
|
162
|
+
setIsProcessandoDescoberta(true);
|
|
163
|
+
_a.label = 1;
|
|
164
|
+
case 1:
|
|
165
|
+
_a.trys.push([1, 5, 6, 7]);
|
|
166
|
+
if (!client) return [3 /*break*/, 3];
|
|
167
|
+
return [4 /*yield*/, sendInstrumentoDiscoveryEmail(client, {
|
|
168
|
+
documento: cpfCnpj,
|
|
169
|
+
nm_chave: nmChave
|
|
170
|
+
})];
|
|
171
|
+
case 2:
|
|
172
|
+
res = _a.sent();
|
|
173
|
+
setEmailTitle('Solicitação enviada');
|
|
174
|
+
setEmailMessage((res === null || res === void 0 ? void 0 : res.message) ||
|
|
175
|
+
'Pronto! Iniciamos o processamento e você receberá o instrumento por e-mail assim que estiver disponível.');
|
|
176
|
+
setIsEmailModalOpen(true);
|
|
177
|
+
return [2 /*return*/];
|
|
178
|
+
case 3: return [4 /*yield*/, mockDescobertaAutomaticaEmail(nmChave, cpfCnpj)];
|
|
179
|
+
case 4:
|
|
180
|
+
result = _a.sent();
|
|
181
|
+
setEmailTitle('Solicitação enviada');
|
|
182
|
+
setEmailMessage(result.message);
|
|
183
|
+
setIsEmailModalOpen(true);
|
|
184
|
+
return [3 /*break*/, 7];
|
|
185
|
+
case 5:
|
|
186
|
+
error_3 = _a.sent();
|
|
187
|
+
setEmailTitle('Erro na solicitação');
|
|
188
|
+
setEmailMessage('Não foi possível iniciar a solicitação por e-mail agora. Tente novamente em instantes.');
|
|
189
|
+
setIsEmailModalOpen(true);
|
|
190
|
+
return [3 /*break*/, 7];
|
|
191
|
+
case 6:
|
|
192
|
+
setIsProcessandoDescoberta(false);
|
|
193
|
+
return [7 /*endfinally*/];
|
|
194
|
+
case 7: return [2 /*return*/];
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}); }, [client, nmChave, cpfCnpj]);
|
|
198
|
+
return {
|
|
199
|
+
isModalSPOpen: isModalSPOpen,
|
|
200
|
+
isEmailModalOpen: isEmailModalOpen,
|
|
201
|
+
emailMessage: emailMessage,
|
|
202
|
+
emailTitle: emailTitle,
|
|
203
|
+
isDescobrindo: isDescobrindo,
|
|
204
|
+
isEnviandoEmail: isEnviandoEmail,
|
|
205
|
+
isProcessandoDescoberta: isProcessandoDescoberta,
|
|
206
|
+
openModalSP: openModalSP,
|
|
207
|
+
closeModalSP: closeModalSP,
|
|
208
|
+
handleDescobrir: handleDescobrir,
|
|
209
|
+
handleEnviarEmail: handleEnviarEmail,
|
|
210
|
+
handleDescobertaAutomatica: handleDescobertaAutomatica,
|
|
211
|
+
closeEmailModal: closeEmailModal
|
|
212
|
+
};
|
|
213
|
+
};
|
|
@@ -58,13 +58,17 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
58
58
|
};
|
|
59
59
|
import { useGlobalData } from '../../contexts/globalDataContext';
|
|
60
60
|
import { formatMoney } from '../../utils/number';
|
|
61
|
-
import {
|
|
61
|
+
import { isProtestoSPByNmChave } from '../../utils/protestoUf';
|
|
62
62
|
import { formatDocument } from '../../utils/string';
|
|
63
63
|
import React, { memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
|
64
64
|
import AddItemField from '../common/addItem';
|
|
65
65
|
import Button from '../common/button';
|
|
66
|
+
import ModalInstrumentoProtestoSP from '../common/modalInstrumentoProtestoSP';
|
|
66
67
|
import { ResultContent } from '../interface/result';
|
|
67
68
|
import { WebService } from '../webservice';
|
|
69
|
+
import InstrumentoEmailStatusModal from './instrumento/InstrumentoEmailStatusModal';
|
|
70
|
+
import InstrumentoDiscoveryConfirmModal from './instrumento/InstrumentoDiscoveryConfirmModal';
|
|
71
|
+
import { useInstrumento } from './instrumento/useInstrumento';
|
|
68
72
|
// Throttling mechanism for API requests
|
|
69
73
|
var activeRequests = 0;
|
|
70
74
|
var MAX_CONCURRENT_REQUESTS = 2;
|
|
@@ -279,6 +283,12 @@ export var Instrumento = function (_a) {
|
|
|
279
283
|
var checkedInstruments = protestosData.checkedInstruments || {};
|
|
280
284
|
var instrumentCache = protestosData.instrumentCache || {};
|
|
281
285
|
var normalizedKey = useMemo(function () { return normalizeInstrumentKey(nm_chave); }, [nm_chave]);
|
|
286
|
+
// Hook para gerenciar fluxo de instrumento (fase mockada)
|
|
287
|
+
var instrumentoHook = useInstrumento({
|
|
288
|
+
nmChave: normalizedKey || '',
|
|
289
|
+
cpfCnpj: cpfCnpj || '',
|
|
290
|
+
client: client
|
|
291
|
+
});
|
|
282
292
|
if (!nm_chave)
|
|
283
293
|
return null;
|
|
284
294
|
var hasFailedBefore = failedInstruments[nm_chave] === true;
|
|
@@ -314,6 +324,7 @@ export var Instrumento = function (_a) {
|
|
|
314
324
|
var _c = useState(deriveErrorKind), errorKind = _c[0], setErrorKind = _c[1];
|
|
315
325
|
var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
316
326
|
var _e = useState(shouldPrefetch), isPrefetching = _e[0], setIsPrefetching = _e[1];
|
|
327
|
+
var _f = useState(false), isDiscoveryConfirmOpen = _f[0], setIsDiscoveryConfirmOpen = _f[1];
|
|
317
328
|
useEffect(function () {
|
|
318
329
|
setErrorKind(deriveErrorKind());
|
|
319
330
|
}, [deriveErrorKind]);
|
|
@@ -402,21 +413,25 @@ export var Instrumento = function (_a) {
|
|
|
402
413
|
setData,
|
|
403
414
|
shouldPrefetch
|
|
404
415
|
]);
|
|
405
|
-
|
|
416
|
+
// Mantém o botão clicável em `not-found` para permitir solicitar por e-mail
|
|
417
|
+
var isDisabled = isLoading ||
|
|
418
|
+
isPrefetching ||
|
|
419
|
+
errorKind === 'invalid-key' ||
|
|
420
|
+
errorKind === 'missing-doc';
|
|
406
421
|
var getTooltipMessage = function () {
|
|
407
422
|
if (errorKind === 'missing-doc')
|
|
408
423
|
return 'Documento não disponível para consulta';
|
|
409
424
|
if (errorKind === 'invalid-key')
|
|
410
425
|
return 'Chave de instrumento inválida';
|
|
411
426
|
if (errorKind === 'not-found')
|
|
412
|
-
return '
|
|
427
|
+
return 'PDF indisponível. Você pode solicitar por e-mail.';
|
|
413
428
|
if (isPrefetching)
|
|
414
429
|
return 'Verificando disponibilidade do instrumento...';
|
|
415
430
|
return '';
|
|
416
431
|
};
|
|
417
432
|
var getButtonLabel = function () {
|
|
418
|
-
if (errorKind === 'not-found')
|
|
419
|
-
return '
|
|
433
|
+
if (errorKind === 'not-found' && !isProtestoSPByNmChave(normalizedKey))
|
|
434
|
+
return 'Solicitar por e-mail';
|
|
420
435
|
if (errorKind === 'invalid-key' || errorKind === 'missing-doc')
|
|
421
436
|
return 'Instrumento Indisponível';
|
|
422
437
|
return 'Instrumento';
|
|
@@ -428,73 +443,100 @@ export var Instrumento = function (_a) {
|
|
|
428
443
|
return;
|
|
429
444
|
pdfWindow.document.write("<iframe width='100%' height='100%' src='data:application/pdf;base64,".concat(base64, "'></iframe>"));
|
|
430
445
|
};
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
446
|
+
var isSP = isProtestoSPByNmChave(normalizedKey);
|
|
447
|
+
return (React.createElement(React.Fragment, null,
|
|
448
|
+
React.createElement("span", { title: tooltipMessage, style: { display: 'inline-block' } },
|
|
449
|
+
React.createElement(Button, { isLoading: isLoading || instrumentoHook.isProcessandoDescoberta, onClick: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
450
|
+
var request_1, e_1, failure_2;
|
|
451
|
+
return __generator(this, function (_a) {
|
|
452
|
+
switch (_a.label) {
|
|
453
|
+
case 0:
|
|
454
|
+
if (isDisabled)
|
|
455
|
+
return [2 /*return*/];
|
|
456
|
+
// Fluxo SP: abre modal para Livro/Folha
|
|
457
|
+
if (isSP) {
|
|
458
|
+
instrumentoHook.openModalSP();
|
|
459
|
+
return [2 /*return*/];
|
|
460
|
+
}
|
|
461
|
+
// Se já sabemos que o PDF está indisponível, oferecemos o fluxo por e-mail
|
|
462
|
+
if (errorKind === 'not-found') {
|
|
463
|
+
setIsDiscoveryConfirmOpen(true);
|
|
464
|
+
return [2 /*return*/];
|
|
465
|
+
}
|
|
466
|
+
// Fluxo não-SP: tenta abrir PDF se disponível
|
|
467
|
+
if (cachedInstrument) {
|
|
468
|
+
openInstrumentPdf(cachedInstrument);
|
|
469
|
+
return [2 /*return*/];
|
|
470
|
+
}
|
|
471
|
+
// Tenta buscar PDF do backend
|
|
440
472
|
setIsLoading(true);
|
|
441
|
-
|
|
442
|
-
|
|
473
|
+
_a.label = 1;
|
|
474
|
+
case 1:
|
|
475
|
+
_a.trys.push([1, 4, 5, 6]);
|
|
476
|
+
return [4 /*yield*/, client.request("SELECT FROM 'IEPTB'.'PDF'", {
|
|
477
|
+
nm_chave: normalizedKey,
|
|
478
|
+
documento: cpfCnpj
|
|
479
|
+
})];
|
|
480
|
+
case 2: return [4 /*yield*/, (_a.sent()).json()];
|
|
481
|
+
case 3:
|
|
482
|
+
request_1 = _a.sent();
|
|
483
|
+
if (!(request_1 === null || request_1 === void 0 ? void 0 : request_1.instrumentoProtesto)) {
|
|
484
|
+
throw new Error('Instrumento não retornado pela API');
|
|
443
485
|
}
|
|
444
|
-
|
|
445
|
-
|
|
486
|
+
openInstrumentPdf(request_1.instrumentoProtesto);
|
|
487
|
+
setData(function (prev) {
|
|
488
|
+
var _a, _b;
|
|
489
|
+
var base = prev || {};
|
|
490
|
+
var prevProtestosData = base.protestosData || {};
|
|
491
|
+
var _c = prevProtestosData.failedInstruments || {}, _d = nm_chave, _removedFailed = _c[_d], restFailed = __rest(_c, [typeof _d === "symbol" ? _d : _d + ""]);
|
|
492
|
+
var _e = prevProtestosData.failedInstrumentReasons || {}, _f = nm_chave, _removedReason = _e[_f], restReasons = __rest(_e, [typeof _f === "symbol" ? _f : _f + ""]);
|
|
493
|
+
return __assign(__assign({}, base), { protestosData: __assign(__assign({}, prevProtestosData), { failedInstruments: restFailed, failedInstrumentReasons: restReasons, instrumentCache: __assign(__assign({}, (prevProtestosData.instrumentCache || {})), (_a = {}, _a[nm_chave] = request_1.instrumentoProtesto, _a)), checkedInstruments: __assign(__assign({}, (prevProtestosData.checkedInstruments || {})), (_b = {}, _b[nm_chave] = true, _b)) }) });
|
|
494
|
+
});
|
|
495
|
+
setErrorKind(null);
|
|
496
|
+
return [3 /*break*/, 6];
|
|
497
|
+
case 4:
|
|
498
|
+
e_1 = _a.sent();
|
|
499
|
+
console.error(e_1);
|
|
500
|
+
failure_2 = classifyInstrumentError(e_1);
|
|
501
|
+
setErrorKind(failure_2);
|
|
502
|
+
// Quando PDF não está disponível, oferece descoberta automática com confirmação (UX)
|
|
503
|
+
if (failure_2 === 'not-found' && hasCpfCnpj && isValidKey) {
|
|
504
|
+
setIsDiscoveryConfirmOpen(true);
|
|
446
505
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
506
|
+
// Persistimos falha/cache para evitar loops de prefetch
|
|
507
|
+
setData(function (prev) {
|
|
508
|
+
var _a, _b, _c;
|
|
509
|
+
var base = prev || {};
|
|
510
|
+
var prevProtestosData = base.protestosData || {};
|
|
511
|
+
var _d = prevProtestosData.instrumentCache || {}, _e = nm_chave, _cachedInstrument = _d[_e], restCache = __rest(_d, [typeof _e === "symbol" ? _e : _e + ""]);
|
|
512
|
+
return __assign(__assign({}, base), { protestosData: __assign(__assign({}, prevProtestosData), { instrumentCache: restCache, failedInstruments: __assign(__assign({}, (prevProtestosData.failedInstruments || {})), (_a = {}, _a[nm_chave] = true, _a)), checkedInstruments: __assign(__assign({}, (prevProtestosData.checkedInstruments || {})), (_b = {}, _b[nm_chave] = true, _b)), failedInstrumentReasons: __assign(__assign({}, (prevProtestosData.failedInstrumentReasons || {})), (_c = {}, _c[nm_chave] = failure_2, _c)) }) });
|
|
513
|
+
});
|
|
514
|
+
return [3 /*break*/, 6];
|
|
515
|
+
case 5:
|
|
516
|
+
setIsLoading(false);
|
|
517
|
+
return [7 /*endfinally*/];
|
|
518
|
+
case 6: return [2 /*return*/];
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
}); }, disabled: isDisabled }, getButtonLabel())),
|
|
522
|
+
React.createElement(ModalInstrumentoProtestoSP, { isOpen: instrumentoHook.isModalSPOpen, onClose: instrumentoHook.closeModalSP, onDescobrir: instrumentoHook.handleDescobrir, onEnviarEmail: instrumentoHook.handleEnviarEmail, canDescobrir: true, isDescobrindo: instrumentoHook.isDescobrindo, isEnviandoEmail: instrumentoHook.isEnviandoEmail }),
|
|
523
|
+
React.createElement(InstrumentoEmailStatusModal, { isOpen: instrumentoHook.isEmailModalOpen, onClose: instrumentoHook.closeEmailModal, message: instrumentoHook.emailMessage, title: instrumentoHook.emailTitle }),
|
|
524
|
+
React.createElement(InstrumentoDiscoveryConfirmModal, { isOpen: isDiscoveryConfirmOpen, onClose: function () { return setIsDiscoveryConfirmOpen(false); }, isLoading: instrumentoHook.isProcessandoDescoberta, onConfirm: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
525
|
+
return __generator(this, function (_a) {
|
|
526
|
+
switch (_a.label) {
|
|
527
|
+
case 0:
|
|
528
|
+
_a.trys.push([0, , 2, 3]);
|
|
529
|
+
return [4 /*yield*/, instrumentoHook.handleDescobertaAutomatica()];
|
|
455
530
|
case 1:
|
|
456
|
-
_a.
|
|
457
|
-
return [
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
})];
|
|
461
|
-
case 2: return [4 /*yield*/, (_a.sent()).json()];
|
|
462
|
-
case 3:
|
|
463
|
-
request_1 = _a.sent();
|
|
464
|
-
if (!(request_1 === null || request_1 === void 0 ? void 0 : request_1.instrumentoProtesto)) {
|
|
465
|
-
throw new Error('Instrumento não retornado pela API');
|
|
466
|
-
}
|
|
467
|
-
openInstrumentPdf(request_1.instrumentoProtesto);
|
|
468
|
-
setData(function (prev) {
|
|
469
|
-
var _a, _b;
|
|
470
|
-
var base = prev || {};
|
|
471
|
-
var prevProtestosData = base.protestosData || {};
|
|
472
|
-
var _c = prevProtestosData.failedInstruments || {}, _d = nm_chave, _removedFailed = _c[_d], restFailed = __rest(_c, [typeof _d === "symbol" ? _d : _d + ""]);
|
|
473
|
-
var _e = prevProtestosData.failedInstrumentReasons || {}, _f = nm_chave, _removedReason = _e[_f], restReasons = __rest(_e, [typeof _f === "symbol" ? _f : _f + ""]);
|
|
474
|
-
return __assign(__assign({}, base), { protestosData: __assign(__assign({}, prevProtestosData), { failedInstruments: restFailed, failedInstrumentReasons: restReasons, instrumentCache: __assign(__assign({}, (prevProtestosData.instrumentCache || {})), (_a = {}, _a[nm_chave] = request_1.instrumentoProtesto, _a)), checkedInstruments: __assign(__assign({}, (prevProtestosData.checkedInstruments || {})), (_b = {}, _b[nm_chave] = true, _b)) }) });
|
|
475
|
-
});
|
|
476
|
-
setErrorKind(null);
|
|
477
|
-
return [3 /*break*/, 6];
|
|
478
|
-
case 4:
|
|
479
|
-
e_1 = _a.sent();
|
|
480
|
-
console.error(e_1);
|
|
481
|
-
failure_2 = classifyInstrumentError(e_1);
|
|
482
|
-
setErrorKind(failure_2);
|
|
483
|
-
setData(function (prev) {
|
|
484
|
-
var _a, _b, _c;
|
|
485
|
-
var base = prev || {};
|
|
486
|
-
var prevProtestosData = base.protestosData || {};
|
|
487
|
-
var _d = prevProtestosData.instrumentCache || {}, _e = nm_chave, _cachedInstrument = _d[_e], restCache = __rest(_d, [typeof _e === "symbol" ? _e : _e + ""]);
|
|
488
|
-
return __assign(__assign({}, base), { protestosData: __assign(__assign({}, prevProtestosData), { instrumentCache: restCache, failedInstruments: __assign(__assign({}, (prevProtestosData.failedInstruments || {})), (_a = {}, _a[nm_chave] = true, _a)), checkedInstruments: __assign(__assign({}, (prevProtestosData.checkedInstruments || {})), (_b = {}, _b[nm_chave] = true, _b)), failedInstrumentReasons: __assign(__assign({}, (prevProtestosData.failedInstrumentReasons || {})), (_c = {}, _c[nm_chave] = failure_2, _c)) }) });
|
|
489
|
-
});
|
|
490
|
-
return [3 /*break*/, 6];
|
|
491
|
-
case 5:
|
|
492
|
-
setIsLoading(false);
|
|
531
|
+
_a.sent();
|
|
532
|
+
return [3 /*break*/, 3];
|
|
533
|
+
case 2:
|
|
534
|
+
setIsDiscoveryConfirmOpen(false);
|
|
493
535
|
return [7 /*endfinally*/];
|
|
494
|
-
case
|
|
536
|
+
case 3: return [2 /*return*/];
|
|
495
537
|
}
|
|
496
538
|
});
|
|
497
|
-
}); }
|
|
539
|
+
}); } })));
|
|
498
540
|
};
|
|
499
541
|
export var ProtestosList = function (_a) {
|
|
500
542
|
var protestos = _a.protestos;
|
|
@@ -5,7 +5,10 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
|
|
|
5
5
|
// src/styles/globalStyle.tsx
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { createGlobalStyle } from 'styled-components';
|
|
8
|
-
var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family:
|
|
8
|
+
var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: ", ";\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es e tooltips na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n body.print-mode,\n body[data-print-mode='true'] {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"], ["\n /* Reset + fonte padr\u00E3o para toda a aplica\u00E7\u00E3o (inclui modais e portais) */\n *, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: ", ";\n }\n\n body {\n -webkit-font-smoothing: antialiased;\n }\n\n /* Oculta bot\u00F5es e tooltips na impress\u00E3o */\n @media print {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n body.print-mode,\n body[data-print-mode='true'] {\n button,\n [role=\"button\"],\n [class*=\"Button\"],\n [class^=\"Button\"],\n [class*=\"btn\"],\n [class^=\"btn\"],\n .button,\n .btn,\n [class*=\"tooltip\"],\n [class*=\"Tooltip\"],\n [data-tooltip] {\n display: none !important;\n visibility: hidden !important;\n }\n }\n\n /* Anima\u00E7\u00F5es utilit\u00E1rias */\n @keyframes highlight {\n from {\n background-color: rgba(255, 215, 0, 0.35);\n }\n to {\n background-color: transparent;\n }\n }\n\n .highlighted-process {\n animation: highlight 3s ease-out forwards !important;\n }\n\n @keyframes blueHighlight {\n from {\n background-color: rgba(0, 122, 255, 0.35);\n }\n to {\n background-color: rgba(0, 122, 255, 0.15);\n }\n }\n\n .blue-highlighted-process {\n animation: blueHighlight 2.5s ease-in-out;\n background-color: rgba(0, 122, 255, 0.15);\n transition: background-color 0.3s ease-in-out;\n }\n"])), function (_a) {
|
|
9
|
+
var theme = _a.theme;
|
|
10
|
+
return theme.typography.defaultFontFamily;
|
|
11
|
+
});
|
|
9
12
|
// Componente que aplica os estilos globais da aplicação.
|
|
10
13
|
// A fonte "Open Sans Condensed" já é carregada via index.html.
|
|
11
14
|
var GlobalStyleProvider = function () { return (React.createElement(React.Fragment, null,
|
package/dist/styles/theme.d.ts
CHANGED
package/dist/styles/theme.js
CHANGED
|
@@ -16,6 +16,7 @@ var theme = {
|
|
|
16
16
|
cinzaClaro: 'rgba(209, 209, 209, 1)',
|
|
17
17
|
cinzaBase: 'rgba(245, 245, 245, 1)',
|
|
18
18
|
cinzaBackground: '#efefef',
|
|
19
|
+
cinzaMedio: 'rgba(120, 120, 120, 1)',
|
|
19
20
|
cinzaEscuro: 'rgba(53, 53, 53, 1)',
|
|
20
21
|
prata: 'rgba(121, 129, 125, 1)',
|
|
21
22
|
likeButton: '#007aff',
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heurística atual para inferir UF do protesto.
|
|
3
|
+
*
|
|
4
|
+
* Contexto: o payload de protestos (CENPROT) que consumimos hoje não expõe UF/cidade do cartório,
|
|
5
|
+
* então a única pista disponível na UI é a `nm_chave`.
|
|
6
|
+
*
|
|
7
|
+
* Na prática, a `nm_chave` costuma começar com o código IBGE da UF (ex: "35" = São Paulo).
|
|
8
|
+
* Quando o backend passar UF explicitamente, esta lógica deve ser substituída por um campo confiável.
|
|
9
|
+
*/
|
|
10
|
+
export declare const isProtestoSPByNmChave: (nmChave?: string) => boolean;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heurística atual para inferir UF do protesto.
|
|
3
|
+
*
|
|
4
|
+
* Contexto: o payload de protestos (CENPROT) que consumimos hoje não expõe UF/cidade do cartório,
|
|
5
|
+
* então a única pista disponível na UI é a `nm_chave`.
|
|
6
|
+
*
|
|
7
|
+
* Na prática, a `nm_chave` costuma começar com o código IBGE da UF (ex: "35" = São Paulo).
|
|
8
|
+
* Quando o backend passar UF explicitamente, esta lógica deve ser substituída por um campo confiável.
|
|
9
|
+
*/
|
|
10
|
+
var digitsOnly = function (value) { return (value ? value.replace(/\D+/g, '') : ''); };
|
|
11
|
+
export var isProtestoSPByNmChave = function (nmChave) {
|
|
12
|
+
var key = digitsOnly(nmChave);
|
|
13
|
+
if (!key)
|
|
14
|
+
return false;
|
|
15
|
+
// "35" é o código IBGE de São Paulo
|
|
16
|
+
return key.startsWith('35');
|
|
17
|
+
};
|