Skip to content

Melhoria nas toasts de success e error, aumentando duração para 30seg + barra de progressão#140

Open
willamyalves wants to merge 1 commit intomainfrom
increase-toast-duration-30s
Open

Melhoria nas toasts de success e error, aumentando duração para 30seg + barra de progressão#140
willamyalves wants to merge 1 commit intomainfrom
increase-toast-duration-30s

Conversation

@willamyalves
Copy link
Copy Markdown

Alterei o tempo das toasts de 'success' e 'error' de 5seg para 30seg.

Adicionei uma barra de progressão nas toasts.

Screenshot (53)


toast({
position: 'top-right',
duration: details && status === 'error' ? null : undefined,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removemos o details && de propósito mesmo??

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este pull request aumenta a duração das notificações toast de 'success' e 'error' de 5 segundos para 30 segundos e adiciona uma barra de progresso visual para indicar o tempo restante antes do fechamento automático.

Changes:

  • Modificação da lógica de duração em useToast.tsx para definir 30 segundos para toasts de sucesso e erro
  • Adição de componente de barra de progresso animada no componente Toast.tsx
  • Inclusão de estado e efeito para controlar a animação da barra de progresso

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
apps/builder/src/hooks/useToast.tsx Alterada a lógica de duração para definir 30 segundos para toasts de erro e sucesso, e passa a propriedade duration para o componente Toast
apps/builder/src/components/Toast.tsx Adicionada barra de progresso visual com animação CSS, incluindo estado e efeito para controlar a transição

Comment on lines +49 to +52
useEffect(() => {
if (!duration) return
const raf = requestAnimationFrame(() => setScale(0))
return () => cancelAnimationFrame(raf)
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A animação da barra de progresso inicia em requestAnimationFrame mas isso acontece de forma assíncrona. Para garantir que a animação CSS comece do estado inicial correto (scale=1) antes de transicionar para scale=0, considere usar setTimeout com um pequeno delay ou garantir que o navegador renderize o estado inicial antes de aplicar a transição. Uma abordagem mais robusta seria: setTimeout(() => setScale(0), 50).

Suggested change
useEffect(() => {
if (!duration) return
const raf = requestAnimationFrame(() => setScale(0))
return () => cancelAnimationFrame(raf)
const ANIMATION_DELAY_MS = 50
useEffect(() => {
if (!duration) return
const timeoutId = setTimeout(() => setScale(0), ANIMATION_DELAY_MS)
return () => clearTimeout(timeoutId)

Copilot uses AI. Check for mistakes.
shadow="sm"
fontSize="sm"
pos="relative"
zIndex={9999}
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A propriedade 'zIndex' está definida como 9999, mas isso pode conflitar com outros elementos da UI que também usam valores altos de z-index. É melhor usar um valor do sistema de design ou definir uma constante compartilhada para z-indexes de toasts, garantindo consistência com outros componentes overlay na aplicação.

Suggested change
zIndex={9999}
zIndex="toast"

Copilot uses AI. Check for mistakes.
Comment on lines +136 to +140
style={{
transformOrigin: 'right',
transform: `scaleX(${scale})`,
transition: `transform ${duration}ms linear`,
}}
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O uso de inline styles com a propriedade 'style' contorna o sistema de estilização do Chakra UI. Para manter consistência, considere usar as props do Chakra como 'sx' ou tokens de transição do tema. Exemplo: usar uma animação keyframe definida no tema ou a prop 'transition' do Chakra.

Copilot uses AI. Check for mistakes.
let duration: number | null | undefined

if (status === 'error' || status === 'success') {
duration = 30000 // 30 segundos
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O comentário está em português mas deveria estar em inglês para manter consistência com o restante do código.

Copilot generated this review using guidance from repository custom instructions.
let duration: number | null | undefined

if (status === 'error' || status === 'success') {
duration = 30000 // 30 segundos
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lógica anterior tratava toasts de erro com detalhes de forma especial, configurando duration como null para evitar que fechassem automaticamente. Agora, todos os toasts de erro fecham automaticamente após 30 segundos, mesmo aqueles com detalhes técnicos importantes que o usuário pode precisar revisar com mais calma. Considere restaurar a condição original para toasts de erro com detalhes: duration = (details && status === 'error') ? null : 30000 para status 'error' ou 'success'.

Suggested change
duration = 30000 // 30 segundos
duration = details && status === 'error' ? null : 30000

Copilot uses AI. Check for mistakes.
status={status}
icon={icon}
details={details}
duration={duration}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Se passamos ali em cima a prop (como a lib já espera na linha 28) não precisamos passar aqui embaixo novamente pois o ajuste no Toast.tsx não seria necessário, poderia ser algo como

duration: details && (status === 'error' || status === 'success') ? 30000 : 5000,

Comment on lines +119 to +143

{duration ? (
<Box
pos="absolute"
left={0}
right={0}
bottom={0}
height="3px"
bg="transparent"
>
<Box
pos="absolute"
left={0}
right={0}
top={0}
bottom={0}
bgColor={`${parseColor(status)}.500`}
style={{
transformOrigin: 'right',
transform: `scaleX(${scale})`,
transition: `transform ${duration}ms linear`,
}}
/>
</Box>
) : null}
Copy link
Copy Markdown

@gabrielbolner gabrielbolner Mar 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

esta parte parece não fazer sentido existir dado que a lib já possui o parâmetro como padrão:

Image

daria para voltar este arquivo ao que era originalmente

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants