Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adiciona contador de caracteres em tempo real no campo de postagem #1813

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

guilhermeabell
Copy link

Mudanças realizadas

Conforme relatado na issue #1806 hoje não existe um contador de caracteres no componente de postagens, isso acaba dificultando pois o autor da postagem só consegue saber que ultrapassou o limite de caracteres ao publicar.

Dito isso, foi implementado um contador de caracteres apenas para o corpo da postagem que é incrementado em tempo real conforme o autor da postagem digita no campo, e caso exceda o limite o botão de publicar é desabilitado e o contador fica vermelho.

Resolve #1806

[x] Nova funcionalidade

Checklist:

  • [ x ] As modificações não geram novos logs de erro ou aviso (warning).

content-dark-limit
content-dark-limit-red
content-white-limit
content-white-limit-red

Copy link

vercel bot commented Nov 10, 2024

@guilhermeabell is attempting to deploy a commit to the TabNews Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Collaborator

@aprendendofelipe aprendendofelipe left a comment

Choose a reason for hiding this comment

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

Fala @guilhermeabell, obrigado pelo PR! 💪

Deixei alguns comentários no código além do que digo aqui.

...caso exceda o limite o botão de publicar é desabilitado e o contador fica vermelho.

É interessante desabilitar o botão em caso de erros de validação, mas seria bom deixar mais explícita a razão do botão estar desabilitado, mudando a estilização do campo para a estilização de erro, e talvez mostrando um texto explicativo. O texto que aparece hoje ao submeter está abaixo.

image

E na imagem vejo que não ficou muito legal o erro descolado do campo, e também que a fonte usada para a numeração está muito grande.

Ainda sobre desativar o botão, talvez seja bom fazer isso apenas se der para validar também os demais campos, então isso pode estar saindo do escopo, e seja melhor deixar para outro PR.

pages/interface/components/Markdown/index.js Outdated Show resolved Hide resolved
pages/interface/components/Markdown/index.js Outdated Show resolved Hide resolved
pages/interface/components/Content/index.js Outdated Show resolved Hide resolved
pages/interface/components/Content/index.js Outdated Show resolved Hide resolved
@guilhermeabell
Copy link
Author

Opa @aprendendofelipe obrigado pelo review! só acho que nao vai fazer sentido incluir uma mensagem do motivo do disabled do botao. acho que marcar a textarea em vermelho + o counter em vermelho ( que já ocorre ) é autoexplicativo o suficiente e evita redundancias. Oque acha?

Copy link
Collaborator

@aprendendofelipe aprendendofelipe left a comment

Choose a reason for hiding this comment

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

só acho que nao vai fazer sentido incluir uma mensagem do motivo do disabled do botao. acho que marcar a textarea em vermelho + o counter em vermelho ( que já ocorre ) é autoexplicativo o suficiente e evita redundancias. Oque acha?

Se for desabilitar o botão, acho melhor exibir um texto informativo. Mas não precisa desativar o botão nesse PR.

Independente disso, precisa adequar o posicionamento do erro de validação, pois ele vai continuar aparecendo em outras situações.

pages/interface/components/Markdown/index.js Outdated Show resolved Hide resolved
@guilhermeabell
Copy link
Author

@aprendendofelipe acha válido desacoplar o componente CharacterCounter pra pasta components? já que pediu pra torna-lo o máximo genérico possível pra reutilizaçao

Copy link
Collaborator

@aprendendofelipe aprendendofelipe left a comment

Choose a reason for hiding this comment

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

@aprendendofelipe acha válido desacoplar o componente CharacterCounter pra pasta components? já que pediu pra torna-lo o máximo genérico possível pra reutilizaçao

Meu comentário não foi sobre deixar o contador flexível, mas sim evitar quebrar o funcionamento atual do Editor, que não é utilizado exclusivamente no Content.

Com isso em mente, é até melhor nem mudar nada no Editor, e adicionar o contador diretamente no Content. Deixei comentários no código. 🤝

// Editor is not part of Primer, so error messages and styling need to be created manually
export function Editor({ isValid, onKeyDown, compact, areLinksTrusted, clobberPrefix, ...props }) {
export function Editor({ isValid, onKeyDown, compact, areLinksTrusted, clobberPrefix, maxLength, value, ...props }) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Agora precisa voltar a passar value para ByteMdEditor, pois antes ele recebia via ...props.

Mas, ao invés disso, que tal adicionar o contador diretamente lá no Content? Assim você não precisa se preocupar com o funcionamento do Editor, pois não precisaria mudar nada nesse arquivo aqui e nem na maneira de usar o Editor lá no Content.

Seria só modificar ali no trecho que começa com {errorObject?.key === 'body' && (, e isso também facilitará a criação de um layout compatível com a visualização de mensagens de erro.

@@ -82,8 +82,23 @@ export default function Viewer({ value: _value, areLinksTrusted, clobberPrefix,
);
}

export function CharacterCounter({ text, maxLength }) {
const characterCount = useMemo(() => text.length, [text]);
Copy link
Collaborator

Choose a reason for hiding this comment

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

Precisa do useMemo aqui?

@ghzeni
Copy link

ghzeni commented Dec 2, 2024

Salve, galera! Sou o Zeni, recém chegado no curso.dev 😅

Tava dando uma olhada nos PRs e nas issues... Vocês estão de parabéns! Muito satisfatório ver as pessoas colaborando e debatendo!!!

Sobre o PR em si, queria dar uma sugestão: e se o contador fosse decrescente e o background do texto ficasse vermelho para os caracteres que passaram do tamanho máximo?

Fiz um "mock" do que pensei, usando o notion. Tenho certeza que já vi isso antes, mas não consigo lembrar aonde 🫠

👉 Mock

image

edit: navegando pelo linked in, encontrei uma versão real semelhante do que eu comentei, e do que esse PR traz. Achei legal porque ela é bem minimalista.

👉 LinkedIn

ezgif-2-ea374312e3

Importante notar que nesse exemplo acima, nenhum texto adicional aparece. O LinkedIn apenas confia no bom-senso, no contador e na cor vermelha 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Exibir contador de caracteres em tempo real no campo de postagem
3 participants