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

View file

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