irmaos-dev / mural

20 stars 14 forks source link

Dropdown com opções relacionadas ao usuário #67

Closed moises-elias closed 3 weeks ago

moises-elias commented 3 weeks ago

Mudanças propostas

Tipo de mudança

irmaosdev1 commented 3 weeks ago

Logo de cara eu confesso: sim eu quero complicar.

Mas começo com um detalhe simples: Não existe motivo para o "LogoutDropdownButton" estar sendo declarado no layout.ui.tsx para usar no user.layout.tsx. Poderia ser direto no user.layout.tsx.

Mas agora a complicação:

O nome do arquivo "userDropdown" diz muito. A pasta "6shared" não pressupõe qualquer regra de negócio. O simples nome "user" vem da nossa regra de negócio. O ideal aqui é que termos um componente completamente genérico no shared e a implementação do dropdown de usuário dentro do "4features". Caso contrário, logo logo teremos no shared um articleDropdown, um commentDropdown etc etc.

Um belo exemplo dessa separação é o Tabs. Veja como o "6shared/ui/tabs" não assume qualquer regra de negócio. Por mais que a única 4features que implementa a UI dele é o "filter-article.ui.tsx", ele é usado em ambos "home-page.model.ts" e "profile-page.model.ts".

Uma ideia melhor do que criar um dropdown genérico para o "6shared" é importar o componente Dropdown do pacote "shadcn". Já ouviu falar dele? Tá bem hypado. E não é atoa. Usando ele teriamos um componente altamente flexível que se adaptaria a virtualmente qualquer caso de uso que tivermos. Instalá-lo não seria muito complicado. Basicamente simplemente joga todo o código dele pra dentro da pasta shared/ui/dropdown. Então no layout você implementa a nossa regra de negócio do "user" para o dropdown.

Dito tudo isso, não tenha dúvida, seu código tá ótimo para 95% das empresas.

Espero que não esteja com vontade de correr 😅

ps, não deixa de ler sobre a arquitetura, se ainda não leu

irmaosdev1 commented 3 weeks ago

acompanha aqui @AngeloRubin