jeremiahfallin / career-lab-challenge-next

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🗒️ Let’s look at some art

Your team has been developing an app that allows users to search the Art Institute of Chicago (AIC)'s APIs for public domain artwork. You've inherited some code from a teammate – a React application with some components and some functions for interating with a search API. Your job is to finish the rest of the acceptance criteria your team has agreed on! We've listed those acceptance criteria in this document, and provided some mockups of the app, as well as some tips for working with Art Institute of Chicago's APIs. You're gonna do great!

Please limit your time spent on this project to one hour. If you don't finish all the acceptance criteria, that's okay! Our goal is to give you something to discuss with your interviewer at the next stage, whether the project is feature-complete or not. You can chat with your interviewer about what you would do with more time.

Local development setup

To get started, you'll need to initialize a new Git repository using this repository as a template. You can do that one of two ways:

After that, proceed to the acceptance criteria section.

Initialize your repo from this template with the GitHub GUI

  1. Click the "Use this template" button on the GitHub page for this repo. It's located above this readme, and above the preview of the project's file structure.
  2. On the next page, give your new repo a name. Make sure the repository is public!
  3. Click "Create repository from template". Your repository will generate and you will be navigated to its GitHub page.
  4. Click the "Code" button to reveal the command you can run to clone your repo to your computer, then click the "copy" button (it looks like a clipboard).
  5. Run that code in your terminal
  6. cd into your new directory
  7. Run npm ci to install the project's dependencies

Now, to develop the app locally, run npm start. A new window will open in your browser. Happy coding!

Initialize your repo from this template with the GitHub CLI

In your terminal, cd into the folder you want your project to live in and run the following commands:

# Generate a new repo from this template with the name `take-home-assignment`
# and clone it to your computer in a new folder named `take-home-assignment`
gh repo create take-home-assignment --template the-collab-lab/career-lab-assignment-next --public --clone
# Move into this new folder and install the project's dependencies
cd take-home-assignment && npm ci

Now, to develop the app locally, run npm start. A new window will open in your browser. Happy coding!

✅ Acceptance criteria

Your team has agreed on the following requirements for the app's MVP (minimum viable product). A teammate has implemented some of these criteria already, and it's your job to finish the rest. Start with ./src/components/App.jsx to familiarize yourself with your teammate's work, then build on top of it.

  • Create a searchArtworks function for making GET requests to /search/artworks/. See src/api.js
    • Request a local copy of data in searchArtworks to avoid making too many requests to the AIC /artworks/search/ endpoint while the app is in development
    • When the UI is complete, ensure that searchArtworks makes requests to the AIC /artworks/search/ endpoint, as described in "Working with the API"
  • Create a SearchForm component that will allow the user to perform a search. See src/components/SearchForm.jsx
    • Fix a known bug: the whole app refreshes when SearchForm is submitted
  • In the App component, render
    • the SearchForm component and
    • a list of results including the name of the piece and the artist who created the piece.
  • Create an ImageDetailsPage component.
  • Render ImageDetailsPage when the user clicks the title of a piece in the list of results. 💡
  • In the ImageDetailsPage component, render
    • the name of the piece
    • the artist who created the piece
    • the image associated with the piece (don't forget its alt text!)
    • a back button that returns the user to the list of results

💡 On rendering ImageDetailsPage

You might think to install React Router to handle the back button functionality. That's probably something you would do in a production application, but your team has agreed that React Router is out of scope for this MVP. Instead, you can use conditional rendering to show and hide content. Here's some logic you could use to approach conditional rendering:

  • If no artwork is selected, render the the search form with the list of results
  • If an artwork is selected, instead render the ImageDetailsPage component
  • If the back button on ImageDetailsPage is clicked, render the search form with the list of results

🎨 Mockups

Your designer created some mockups so that everyone has a shared understanding of what the application should look like. You can find them in the mockups directory. Remember: these are just mockups! You can use them as a guide, but you don't need to match them exactly.

💻 Working with the API

AIC maintains one API endpoint for requesting data from its catalog, and another API endpoint for requesting the images from the catalog. These APIs have some dense documentation; we’ve outlined the things you should know.

⚠️ Read this section carefully. You will need data from the catalog in order to request the images you want to show to the user!

Requesting data from the catalog

You’ll make requests to the /artworks/search/ endpoint provided by AIC. You can build a request with a URL like the following:

https://api.artic.edu/api/v1/artworks/search?q={USER_QUERY}&query[term][is_public_domain]=true&fields=artist_title,date_display,image_id,thumbnail.alt_text,thumbnail.width,thumbnail.height,title

These URLs are quite long, but you don't need to worry about exactly what each part means. You'll need to replace {USER_QUERY} with the thing your user searched for in the catalog. If your user searches for “cats”, your request url becomes:

https://api.artic.edu/api/v1/artworks/search?q=cats&query[term][is_public_domain]=true&fields=artist_title,date_display,image_id,thumbnail.alt_text,thumbnail.width,thumbnail.height,title.

Try it our for yourself: open the “cats” query in your browser.

Working with data returned from the catalog

Requests to the /artworks/seearch/ endpoint return a JSON object. This object has a lot of information. You should focus on the data property, which is an array of objects. Each object is shaped as follows:

Property name Data type Description
artist_title string The known artist of the piece
date_display string The known production date of the piece
image_id string The id of the full image for this catalog item
thumbnail object An object with the properties alt_text, width, and height
thumbnail.alt_text string The alt text for the thumbnail image
thumbnail.height number The height of the thumbnail image
thumbnail.width number The width of the thumbnail image
title string The title of the piece

🖼️ Requesting an image

AIC provides an endpoint dedicated to serving images. These image URLs are structured as follows:

https://www.artic.edu/iiif/2/{IMAGE_ID}/full/843,/0/default.jpg

You should replace {IMAGE_ID} with an image ID from the data you retrieve from the /artworks/search/ endpoint. You can use the resulting URL in an img element to show that artwork to your users. For instance, the following img element would render Georges Seurat's La grande jette in the browser:

<img
	src="https://www.artic.edu/iiif/2/1adf2696-8489-499b-cad2-821d7fde4b33/full/843,/0/default.jpg"
/>

You can also open La grande jette in your browser, if you’d like!

About


Languages

Language:JavaScript 78.7%Language:CSS 15.3%Language:HTML 5.4%Language:Shell 0.6%