Closed moises-elias closed 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 😅
acompanha aqui @AngeloRubin
Mudanças propostas
Tipo de mudança