GithubHelp home page GithubHelp logo

rn-interview's Introduction

Interview Project

In this interview you'll build a dating profile screen and use Bill Gates' photos as example data for demo.

This repository is a starting point for implementing an interview challenge. This should get you everything you need to just start working on a react-native implementation.

The starter project was created using these steps. Note that React-Native-CLI was used and not Expo. If you have any troubles with tooling then start there.

Implement the following features in the app using React Native and demo the app functionality using the ios simulator and the Android emulator.

Once you're finished with the implementation, record a screen capture demo of the requirements. If you can, please walk us through your demo with a mic. You can use Quicktime "New screen recording" or any other video screen capture system or Loom.

Deliverable: Email us the following (please do not open a pull request):

  • Link to your code implementation on a public github repository
  • Video file for demo screen capture

Be sure to leave 5-10 minutes at the end to record and send your screen capture and send the Github link. Please record any progress you have made. It's okay if you don't finish both phases.

Tools & Dependencies

yarn nodejs xcode

You may need to install the following dependencies, as described on https://reactnative.dev/docs/0.60/getting-started

brew install node
brew install watchman
sudo gem install cocoapods

Steps to Get Started

Shell 1 - Starting your mock API server

cd mock
yarn install
yarn run mock
# Server will now be running at http://localhost:3000

Note: Any data saved to the mock server will be saved to mock/api/db.json.

Shell 2 - you can run the iOS simulator and develop your app here

cd app
yarn install
npx pod-install
yarn run ios

Requirements

Phase 1

Build a single screen for Viewing and Editing the Photos of a users profile. This should look like Tinder's Edit your Profile screen, which includes thumbnails of each photo in a grid of 3 wide by 3 high.

  • Add new photo
    • Add a new photo.
    • You can hard code a URL of a photo from the internet in the event handling code or use the camera. Whatever works to get a new photo in the appropriate data format and display.
  • Remove photos
    • Remove a photo from the profile.
  • Rearrange photos
    • The profile will show the photos in order. Give users a way to rearrange the order.
  • The above functionality should query a backend service. The service API is as defined below.

Example Layout

API Response Types

interface APIMember {
    id: number;
    firstName: string;
    lastName: string;
    email: string;
}

interface APIPhotoBase {
    url: string;
    width: number;
    height: number;
    position: number;
    centerX: number;
    centerY: number;
}

interface APIPhoto = APIPhotoBase & {
    id: string;
    memberId: number;
}

API definition

GET /member/{memberId}/photos

curl http://localhost:3000/member/1/photos

200 response:

interface APIGetPhotosResponse = APIPhoto[];

POST /member/{memberId}/photos

curl -H "Content-Type: application/json" -X POST http://localhost:3000/member/2/photos -d '{"url":"https://miro.medium.com/max/2000/1*KvhM-ArA5RkpYLi7L_Qtdw.jpeg","position": 1, "width": 2000,"height": 1000, "centerX": 1000, "centerY": 500}'

Request Parameters:

interface APIAddMemberPhotoRequest = APIPhotoBase

200 response type:

interface APIAddMemberPhotoResponse = APIPhoto

PUT /photos/{id}

curl -H "Content-Type: application/json" -X PUT http://localhost:3000/photos/dK4-OYy -d '{"url":"https://miro.medium.com/max/2000/1*KvhM-ArA5RkpYLi7L_Qtdw.jpeg","position": 2, "width": 2000,"height": 1000, "centerX": 1000, "centerY": 500}'

Request Parameters:

interface APIUpdateMemberPhotoRequest = APIPhotoBase

200 response type:

interface APIUpdateMemberPhotoResponse = APIPhoto

DELETE /photos/{id}

curl -X DELETE http://localhost:3000/photos/dK4-OYy

200 response type:

interface APIDeletePhotosResponse {}

If needed, additional documentation can be found at https://github.com/typicode/json-server

Phase 2

Iterate on your initial implementation to include the following changes. This will improve the profile by having each photo specify where in the photo the center is located. Scale and translate the photo as necessary to put the photo's center in the middle of the display frame.

  • Implement custom offset based on the center of each photo (denoted by centerX and centerY in the APIPhoto type).
  • Photos should be scaled accordingly to fill the frame when offset to center.

rn-interview's People

Contributors

danielrhodes avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.