@credithub/harlan-components 1.121.6 → 1.123.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.
@@ -74,13 +74,15 @@ function ConsultaSCR(_a) {
74
74
  var setData = useGlobalData().setData;
75
75
  var _g = useState(false), dataUpdated = _g[0], setDataUpdated = _g[1];
76
76
  var _h = useState(false), alertShown = _h[0], setAlertShown = _h[1];
77
- var _j = consultasComplementaresContext !== null && consultasComplementaresContext !== void 0 ? consultasComplementaresContext : {}, consultasComplementares = _j.consultasComplementares, setConsultasComplementares = _j.setConsultasComplementares;
77
+ var _j = useState(false), isPdfLoading = _j[0], setIsPdfLoading = _j[1];
78
+ var _k = useState(null), pdfError = _k[0], setPdfError = _k[1];
79
+ var _l = consultasComplementaresContext !== null && consultasComplementaresContext !== void 0 ? consultasComplementaresContext : {}, consultasComplementares = _l.consultasComplementares, setConsultasComplementares = _l.setConsultasComplementares;
78
80
  // O valor de dataBase já vem no formato "YYYY-MM" (ou o padrão "2025-01")
79
81
  var period = ((_b = consultasComplementares === null || consultasComplementares === void 0 ? void 0 : consultasComplementares.scr) === null || _b === void 0 ? void 0 : _b.dataBase) || '2025-01';
80
- var _k = useSafeQuery("SELECT FROM 'SCR'.'CONSULTA'", {
82
+ var _m = useSafeQuery("SELECT FROM 'SCR'.'CONSULTA'", {
81
83
  documento: documento,
82
84
  period: period
83
- }, !!((_c = consultasComplementares === null || consultasComplementares === void 0 ? void 0 : consultasComplementares.scr) === null || _c === void 0 ? void 0 : _c.consultaRealizada)), response = _k.response, isLoading = _k.isLoading, error = _k.error, loadingProgress = _k.loadingProgress;
85
+ }, !!((_c = consultasComplementares === null || consultasComplementares === void 0 ? void 0 : consultasComplementares.scr) === null || _c === void 0 ? void 0 : _c.consultaRealizada)), response = _m.response, isLoading = _m.isLoading, error = _m.error, loadingProgress = _m.loadingProgress;
84
86
  var fetch = useFetch("SELECT FROM 'SCR'.'PDF'").fetch;
85
87
  var isOpen = useToggle()[0];
86
88
  var scrRef = useRef(null);
@@ -133,7 +135,9 @@ function ConsultaSCR(_a) {
133
135
  refetch: function () { },
134
136
  Section: Section,
135
137
  progress: loadingProgress
136
- }, title: "SCR", subtitle: "Resumo do Cliente", icon: ScrIcon, description: !error && (React.createElement(StatusMessage, { type: scr ? 'success' : 'default' }, description)), onSuccess: function () { return (React.createElement(React.Fragment, null,
138
+ }, title: "SCR", subtitle: "Resumo do Cliente", icon: ScrIcon, description: React.createElement(React.Fragment, null,
139
+ !error && (React.createElement(StatusMessage, { type: scr ? 'success' : 'default' }, description)),
140
+ pdfError && (React.createElement(StatusMessage, { type: "warning" }, pdfError))), onSuccess: function () { return (React.createElement(React.Fragment, null,
137
141
  React.createElement(Result, null,
138
142
  React.createElement(ResultContent, { desktop: "repeat(4, 1fr)", tablet: "repeat(3, 1fr)", mobile: "1fr 1fr" }, Array.isArray(basicData)
139
143
  ? basicData.map(function (data) { return (React.createElement(AddItemField, { key: data.label, name: data.label, value: data.value })); })
@@ -141,15 +145,21 @@ function ConsultaSCR(_a) {
141
145
  React.createElement(ResultContent, { desktop: "repeat(4, 1fr)", tablet: "repeat(3, 1fr)", mobile: "1fr 1fr" },
142
146
  React.createElement(AddItemField, { name: "Total de cr\u00E9ditos a vencer", value: scr === null || scr === void 0 ? void 0 : scr.response.expiringTotal }),
143
147
  React.createElement(AddItemField, { name: "Total de cr\u00E9ditos vencidos", value: scr === null || scr === void 0 ? void 0 : scr.response.expiredTotal }),
144
- React.createElement(Button, { style: { maxWidth: 'fit-content', minHeight: '0' }, onClick: function () { return __awaiter(_this, void 0, void 0, function () {
148
+ React.createElement(Button, { style: { maxWidth: 'fit-content', minHeight: '0' }, isLoading: isPdfLoading, disabled: isPdfLoading, onClick: function () { return __awaiter(_this, void 0, void 0, function () {
145
149
  var win, response_1, fileBlob, file, fileURL_1, a, err_1;
146
150
  return __generator(this, function (_a) {
147
151
  switch (_a.label) {
148
152
  case 0:
153
+ setPdfError(null);
149
154
  win = window.open('', '_blank');
155
+ setIsPdfLoading(true);
150
156
  _a.label = 1;
151
157
  case 1:
152
- _a.trys.push([1, 4, , 5]);
158
+ _a.trys.push([1, 4, 5, 6]);
159
+ if (win && !win.closed) {
160
+ win.document.write("\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Preparando relat\u00F3rio</title>\n <style>\n @keyframes spin { to { transform: rotate(360deg); } }\n @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } }\n .spinner {\n width: 48px;\n height: 48px;\n border: 4px solid #e8e8e8;\n border-top-color: #0066cc;\n border-radius: 50%;\n animation: spin 0.9s linear infinite;\n }\n .card {\n background: #fff;\n border-radius: 12px;\n padding: 32px 40px;\n box-shadow: 0 4px 24px rgba(0,0,0,0.08);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 20px;\n max-width: 320px;\n }\n .message { color: #333; font-size: 16px; animation: pulse 1.5s ease-in-out infinite; }\n .hint { color: #888; font-size: 13px; margin-top: 4px; }\n </style>\n </head>\n <body style=\"font-family: system-ui, -apple-system, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; background: linear-gradient(180deg, #f0f4f8 0%, #e8ecf0 100%);\">\n <div class=\"card\">\n <div class=\"spinner\" aria-hidden=\"true\"></div>\n <div>\n <p class=\"message\">Preparando seu relat\u00F3rio detalhado</p>\n <p class=\"hint\">Aguarde, isso pode levar alguns segundos</p>\n </div>\n </div>\n </body>\n </html>\n ");
161
+ win.document.close();
162
+ }
153
163
  return [4 /*yield*/, fetch({
154
164
  uuid: scr === null || scr === void 0 ? void 0 : scr.uuidQuery
155
165
  })];
@@ -167,9 +177,7 @@ function ConsultaSCR(_a) {
167
177
  });
168
178
  fileURL_1 = URL.createObjectURL(file);
169
179
  if (win && !win.closed) {
170
- // Janela aberta com sucesso: navega para o PDF
171
180
  win.location.href = fileURL_1;
172
- // Revoga o objectURL após um tempo para evitar leak
173
181
  setTimeout(function () { return URL.revokeObjectURL(fileURL_1); }, 10000);
174
182
  }
175
183
  else {
@@ -181,10 +189,9 @@ function ConsultaSCR(_a) {
181
189
  a.remove();
182
190
  URL.revokeObjectURL(fileURL_1);
183
191
  }
184
- return [3 /*break*/, 5];
192
+ return [3 /*break*/, 6];
185
193
  case 4:
186
194
  err_1 = _a.sent();
187
- // Fecha a janela em branco se algo falhar após a abertura
188
195
  if (win && !win.closed) {
189
196
  try {
190
197
  win.close();
@@ -192,8 +199,12 @@ function ConsultaSCR(_a) {
192
199
  catch (_b) { }
193
200
  }
194
201
  console.error('Erro ao baixar PDF:', err_1);
195
- return [3 /*break*/, 5];
196
- case 5: return [2 /*return*/];
202
+ setPdfError('Não foi possível gerar o relatório detalhado.');
203
+ return [3 /*break*/, 6];
204
+ case 5:
205
+ setIsPdfLoading(false);
206
+ return [7 /*endfinally*/];
207
+ case 6: return [2 /*return*/];
197
208
  }
198
209
  });
199
210
  }); } }, "Baixar relat\u00F3rio detalhado"))),