Desenvolvimento front-end (2024)/Teste/vicgraycloak
Desenvolvimento front-end
[editar]Boas-vindas ao teste de conhecimento e aptidão da vaga de Desenvolvimento front-end do projeto Capacity Exchange, coordenado pelo Wiki Movimento Brasil. O teste consistirá em um exercício de criação e documentação de um template para o protótipo do CapX.
Informações importantes
[editar]Antes de editar esta página, verifique se você está logada(o) na sua conta wiki. Se você tem dúvidas sobre como editar neste ambiente, recomenda-se a leitura desta brochura. Tenha em vista que suas respostas estarão livremente acessíveis, uma vez publicadas no ambiente wiki. Se desejar registrar o conteúdo à medida que realiza a atividade do teste, você pode editar e publicar a página quantas vezes precisar. Apenas tome o cuidado de sua conta estar sempre logada. Não serão aceitas edições realizadas 24 horas após o recebimento do e-mail com o link desta atividade.
Nome de usuário(a)
[editar]- vicgraycloak
Exercício
[editar]O Capacity Exchange é um protótipo recém lançado de uma rede social para a conexão e aprendizado entre pares no Movimento Wikimedia. O projeto é desenvolvido em Python e JavaScript JavaScript. Encontra-se disponível no Toolforge e está parcialmente documentado na Meta-Wikimedia. Utilizando JavaScript, crie o(s) arquivo(s) necessário(s) para apresentar os dados providos neste arquivo JSON (organizations.json), associado com os JSONs complementares (territory.json e type.json) de tal modo que sejam garantidos dinamismo, legibilidade, acessibilidade e usabilidade. Para o layout, dê continuidade a identidade visual aplicada no protótipo, que tem por base o Manual de Identidade Visual. Ao final, documente seu template, descrevendo cada elemento e o motivo de sua escolha. Envie para capxwmnobrasil.org o nome de usuário/a que utilizou para completar o teste e os arquivos criados para esta resposta. Abaixo, insira a documentação de seu template.
Documentação do Template
[editar]Para criar o template solicitado, foram desenvolvidos os seguintes componentes e funcionalidades:
1. Componente OrganizationCard
[editar]Foi criado um componente reutilizável chamado OrganizationCard para exibir as informações de cada organização. Este componente recebe os dados de uma organização como props e renderiza um card com as seguintes informações:
- Logo da organização (quando disponível)
- Nome da organização
- Tipo de organização
- Acrônimo
- Território (quando disponível)
- Links para a página meta e projeto principal (quando disponíveis)
O design do card segue a identidade visual do CapX, utilizando as cores e estilos definidos no Manual de Identidade Visual, com suporte para modo escuro.
2. Componente OrganizationList
[editar]Este componente é responsável por renderizar a lista de organizações. Ele utiliza o componente OrganizationCard para exibir cada organização individualmente. Além disso, implementa as seguintes funcionalidades: Filtro por tipo de organização Barra de pesquisa para filtrar organizações por nome Layout responsivo utilizando grid para exibir os cards em diferentes tamanhos de tela
3. Componente OrganizationSection
[editar]Este é o componente principal que agrupa todos os elementos relacionados às organizações. Ele inclui:
- Título da seção
- Componente OrganizationList
- Lógica para carregar e processar os dados dos arquivos JSON
4. Integração com Tailwind CSS
[editar]Para garantir a consistência visual e facilitar o desenvolvimento responsivo, foi utilizado o framework Tailwind CSS. Isso permitiu:
- Aplicação rápida de estilos consistentes
- Implementação fácil de layout responsivo
- Customização de cores e estilos de acordo com a identidade visual do CapX
5. Internacionalização
[editar]Adicionamos strings de texto nos arquivos JSON separados para os idiomas inglês e português.
6. Acessibilidade
[editar]Foram adicionados atributos ARIA e estrutura semântica adequada para melhorar a acessibilidade do template. Isso inclui:
- Uso apropriado de tags semânticas
- Atributos alt para imagens
- Rótulos adequados para elementos interativos
7. Usabilidade
[editar]Para melhorar a usabilidade, foram implementados: Filtros intuitivos para tipo de organização Barra de pesquisa para encontrar organizações rapidamente Layout responsivo para uma boa experiência em diferentes dispositivos. Suporte para modo escuro.
8. Dinamismo
[editar]O template foi desenvolvido de forma a ser totalmente dinâmico: Os dados são carregados de arquivos JSON externos. A lista de organizações é gerada dinamicamente com base nos dados carregados. Os filtros e a pesquisa atualizam a lista em tempo real. Criamos um arquivo `organizations`, na pasta `api`, com as funções de fetch que acessam as rotas definidas da API Django, responsáveis pelos dados consumidos nos componentes. Infelizmente, não conseguimos terminar a implementação devido a erro de não autorização com os tokens providos. Dessa forma, mantivemos a implementação, consultando arquivos estáticos.
9. Storybook
[editar]Foram criadas stories no Storybook para os componentes principais, permitindo:
- Visualização isolada dos componentes
- Testes de diferentes estados e props
- Documentação interativa dos componentes
10. Readme
[editar]O arquivo readme do projeto foi editado para conter instruções de como executar o Storybook localmente para ver os componentes criados e testá-los com estados diferentes.
11. Desafios e sugestões de melhoria
[editar]- Os arquivos de imagens das organizações têm formatos e proporções diferentes, o que leva a uma falta de padrão na UI. Organizações com imagens maiores podem ser consideradas mais importantes do que as com imagens menores. O ideal seria trabalhar com imagens de mesmas proporções.
- O projeto não possui testes funcionais o que pode levar a componentes quebrados, dependendo dos dados que forem recebidos da API.
- O uso de javascript sem tipagem, seja por JSDocs ou Typescript, não é aconselhável para essa aplicação, visto que os componentes esperam receber propriedades com tipos definidos. Um componente sem tipagem correta pode quebrar caso a propriedade venha undefined, null ou algum outro tipo inesperado.