Merge pull request #32 from rede5/codex/fix-typeerror-in-login-flow

Fix catalog price formatting
This commit is contained in:
Tiago Yamamoto 2025-12-22 16:01:10 -03:00 committed by GitHub
commit a873d29160
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 86 additions and 44 deletions

View file

@ -31,6 +31,18 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
onNextPage, onNextPage,
onRowClick, onRowClick,
}) => { }) => {
const formatCurrency = (value: unknown) => {
if (value === null || value === undefined || value === "") {
return null;
}
const numericValue =
typeof value === "number" ? value : Number(String(value));
if (Number.isNaN(numericValue)) {
return null;
}
return numericValue.toFixed(2);
};
const totalPages = Math.ceil(totalProdutos / pageSize); const totalPages = Math.ceil(totalProdutos / pageSize);
const startItem = (currentPage - 1) * pageSize + 1; const startItem = (currentPage - 1) * pageSize + 1;
const endItem = Math.min(currentPage * pageSize, totalProdutos); const endItem = Math.min(currentPage * pageSize, totalProdutos);
@ -104,33 +116,35 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
{ {
key: "preco-original", key: "preco-original",
header: "Preço Original", header: "Preço Original",
render: (produto: Models.Document) => ( render: (produto: Models.Document) => {
const valor = formatCurrency((produto as any)["preco-original"]);
return (
<div className="text-sm"> <div className="text-sm">
{(produto as any)["preco-original"] ? ( {valor ? (
<span className="font-medium text-green-600"> <span className="font-medium text-green-600">R$ {valor}</span>
R$ {(produto as any)["preco-original"].toFixed(2)}
</span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>
)} )}
</div> </div>
), );
},
width: "w-28", width: "w-28",
}, },
{ {
key: "preco-atual", key: "preco-atual",
header: "Preço Atual", header: "Preço Atual",
render: (produto: Models.Document) => ( render: (produto: Models.Document) => {
const valor = formatCurrency((produto as any)["preco-atual"]);
return (
<div className="text-sm"> <div className="text-sm">
{(produto as any)["preco-atual"] ? ( {valor ? (
<span className="font-medium text-blue-600"> <span className="font-medium text-blue-600">R$ {valor}</span>
R$ {(produto as any)["preco-atual"].toFixed(2)}
</span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>
)} )}
</div> </div>
), );
},
width: "w-24", width: "w-24",
}, },
{ {
@ -154,12 +168,14 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
header: "Subst. Tributária", header: "Subst. Tributária",
render: (produto: Models.Document) => { render: (produto: Models.Document) => {
const produtoData = produto as any; const produtoData = produto as any;
const valor = produtoData["valor-substituicao-tributaria"]; const valor = formatCurrency(
produtoData["valor-substituicao-tributaria"]
);
return ( return (
<div className="text-sm"> <div className="text-sm">
{valor ? ( {valor ? (
<span className="font-medium text-purple-600"> <span className="font-medium text-purple-600">
R$ {valor.toFixed(2)} R$ {valor}
</span> </span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>
@ -174,12 +190,12 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
header: "Preço NF", header: "Preço NF",
render: (produto: Models.Document) => { render: (produto: Models.Document) => {
const produtoData = produto as any; const produtoData = produto as any;
const preco = produtoData["preco-nf"]; const preco = formatCurrency(produtoData["preco-nf"]);
return ( return (
<div className="text-sm"> <div className="text-sm">
{preco ? ( {preco ? (
<span className="font-medium text-indigo-600"> <span className="font-medium text-indigo-600">
R$ {preco.toFixed(2)} R$ {preco}
</span> </span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>

View file

@ -29,6 +29,18 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
onNextPage, onNextPage,
onRowClick, onRowClick,
}) => { }) => {
const formatCurrency = (value: unknown) => {
if (value === null || value === undefined || value === "") {
return null;
}
const numericValue =
typeof value === "number" ? value : Number(String(value));
if (Number.isNaN(numericValue)) {
return null;
}
return numericValue.toFixed(2);
};
const totalPages = Math.ceil(totalProdutos / pageSize); const totalPages = Math.ceil(totalProdutos / pageSize);
const startItem = (currentPage - 1) * pageSize + 1; const startItem = (currentPage - 1) * pageSize + 1;
const endItem = Math.min(currentPage * pageSize, totalProdutos); const endItem = Math.min(currentPage * pageSize, totalProdutos);
@ -123,26 +135,40 @@ const CatalogoProdutosList: React.FC<CatalogoProdutosListProps> = ({
</div> </div>
</td> </td>
<td className="px-6 py-4 whitespace-nowrap"> <td className="px-6 py-4 whitespace-nowrap">
{(() => {
const precoOriginal = formatCurrency(
(produto as any)["preco-original"]
);
return (
<div className="text-sm"> <div className="text-sm">
{(produto as any)["preco-original"] ? ( {precoOriginal ? (
<span className="font-medium text-green-600"> <span className="font-medium text-green-600">
R$ {(produto as any)["preco-original"].toFixed(2)} R$ {precoOriginal}
</span> </span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>
)} )}
</div> </div>
);
})()}
</td> </td>
<td className="px-6 py-4 whitespace-nowrap"> <td className="px-6 py-4 whitespace-nowrap">
{(() => {
const precoAtual = formatCurrency(
(produto as any)["preco-atual"]
);
return (
<div className="text-sm"> <div className="text-sm">
{(produto as any)["preco-atual"] ? ( {precoAtual ? (
<span className="font-medium text-blue-600"> <span className="font-medium text-blue-600">
R$ {(produto as any)["preco-atual"].toFixed(2)} R$ {precoAtual}
</span> </span>
) : ( ) : (
<span className="text-gray-400">N/A</span> <span className="text-gray-400">N/A</span>
)} )}
</div> </div>
);
})()}
</td> </td>
<td className="px-6 py-4 whitespace-nowrap"> <td className="px-6 py-4 whitespace-nowrap">
<div className="text-sm"> <div className="text-sm">