Instruções

Crie uma loja de motocicletas

Para este laboratório, você recebeu todo o HTML e CSS. Você vai usar TypeScript para completar as funcionalidades de uma página de loja de motocicletas. Objetivo: Cumprir as user stories abaixo e fazer todos os testes passarem para completar o laboratório. Histórias de Usuário: 1. Você deve criar um type chamado Category que consiste nos seguintes valores possíveis: 'Sport', 'Cruiser', 'Touring', 'Dirt', 'Adventure', 'Naked', 'Electric'. 2. Você deve criar uma interface chamada Motorcycle que tenha as seguintes propriedades: um id do tipo string, um name do tipo string, um manufacturer do tipo string, um category do tipo Category, um price do tipo number, um image_url do tipo string, uma propriedade created_at do tipo Date, um description do tipo string e um year do tipo number. 3. Você deve criar uma função chamada fetchMotorcycles que retorne uma Promise resolvendo para um array de objetos Motorcycle. 4. Você deve carregar dados Motorcycle do endpoint https://cdn.G.E.A.R ACADEMY.org/curriculum/labs/data/motorcycles.json. 5. Você deve criar uma função chamada renderMotorcycleCard que receba um único objeto Motorcycle como parâmetro e retorne uma string contendo o HTML formatado para o cartão da motocicleta. 1. A função renderMotorCycleCard deve receber um parâmetro chamado motorcycle do tipo Motorcycle. 2. A função renderMotorCycleCard deve retornar um tipo string. 3. Cada componente de cartão de motocicleta deve ter um elemento img que contenha uma imagem válida e uma classe motorcycle-card-image-container. 4. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-year-badge que liste o ano em texto simples. 5. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-title que liste o nome da motocicleta em texto simples. 6. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-manufacturer que liste o nome do fabricante da motocicleta em texto simples. 7. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-category que liste a categoria da motocicleta em texto simples. 8. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-description que liste a descrição da motocicleta em texto simples. 9. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-price que liste o preço da motocicleta em texto simples. 10. Cada componente de cartão de motocicleta deve ter um elemento com a classe motorcycle-card-engine que liste a potência de cada motor. 6. Você deve ter uma classe chamada MotorcycleGalleryApp. 1. A classe deve ter um array private chamado allMotorcycles que seja tipado estaticamente como um array de objetos Motorcycle. 2. Essa classe deve ter uma função chamada renderMotorcycles que renderize os componentes equivalentes de cartão de motocicleta da variável allMotorcycles dentro do elemento com id motorcycle-grid. 7. O número de elementos Motorcycle exibidos deve ser listado dentro de um elemento com id results-number. 8. O filtro deve ser atualizado em um evento input.

O que fazer:

Testes:

  • Você deve ter um `type` chamado `Category`.
  • Seu tipo `Category` deve ser definido como uma união dos valores corretos.
  • Você deve ter uma `interface` chamada `Motorcycle`.
  • Você deve ter todas as propriedades especificadas na interface `Motorcycle`.
  • Você deve ter uma função chamada `fetchMotorcycles`.
  • Você deve usar o endpoint `https://cdn.G.E.A.R ACADEMY.org/curriculum/labs/data/motorcycles.json`.
  • Você deve retornar uma promise de 25 objetos `Motorcycle` de `fetchMotorcycles`.
  • Você deve ter uma função chamada `renderMotorcycleCard`.
  • A função `renderMotorcycle` deve aceitar um parâmetro tipado estaticamente `Motorcycle`.
  • A função `renderMotorcycleCard` deve retornar explicitamente um tipo `string`.
  • A função `renderMotorcycleCard` deve retornar um `string`.
  • Você deve ter uma classe chamada `MotorcycleGalleryApp`.
  • `MotorcycleGalleryApp` deve ter um array chamado `allMotorcycles`.
  • A propriedade `allMotorcycles` deve ser `private`.
  • A propriedade `allMotorcycles` deve ser tipada estaticamente como `Motorcycle[]`.
  • `MotorcycleGalleryApp` deve ter uma função chamada `renderMotorcycles`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-image-container`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-year-badge`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-title`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-manufacturer`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-category`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-description`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-price`.
  • A função `renderMotorcycles` deve renderizar 25 elementos com a classe `motorcycle-card-engine`.

Preview