MPrashanthR/Jobby-APP-react.js

Repository files navigation

In this project, let's build a Jobby App by applying the concepts we have learned till now.


Failure View


Login Route
Home Route
Jobs Route
Job Item Details Route
Not Found Route
Click to view
  • Download dependencies by running npm install
  • Start up the app using npm start
Functionality to be added

The app must have the following functionalities

  • Login Route

    • When invalid credentials are provided and the Login button is clicked, then the respective error message received from the response should be displayed
    • When valid credentials are provided and the Login button is clicked, then the page should be navigated to the Home Route
    • When an unauthenticated user, tries to access the Home Route, Jobs Route, JobItemDetails Route, then the page should be navigated to Login Route
    • When an authenticated user, tries to access the Home Route, Jobs Route, JobItemDetails Route, then the page should be navigated to the respective route
    • When an authenticated user tries to access the Login Route, then the page should be navigated to the Home Route
  • Home Route

    • When an authenticated user opens the Home Route
      • Clicks on the Jobs link in the Header, then the page should be navigated to the Jobs Route
      • Clicks on the Find Jobs button, then the page should be navigated to the Jobs Route
  • Jobs Route

    • When an authenticated user opens the Jobs Route

      • An HTTP GET request should be made to profileApiUrl
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, the response received should be displayed
        • If the HTTP GET request made is unsuccessful, then the Failure View should be displayed
          • When the Retry button is clicked, an HTTP GET request should be made to profileApiUrl
      • An HTTP GET request should be made to jobsApiUrl with employment_type, minimum_package, and search as query parameters with empty strings as initial values
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, display the list of jobs received from the response
        • If the HTTP GET request made is unsuccessful, then the Failure View should be displayed
          • When the Retry button is clicked, an HTTP GET request should be made to jobsApiUrl
      • When a value is provided in the search input and button with search icon is clicked
        • Make an HTTP GET request to the jobsApiUrl with jwt_token in the Cookies and query parameter search with value as the text provided in the search input
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, display the list of jobs received in the response
      • When Employment Types options are selected
        • Make an HTTP GET request to the jobsApiUrl with jwt_token in the Cookies and query parameter employment_type with value as a list of selected employment type id's as a single string separated by ,
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, display the list of jobs received in the response
      • When Salary Range is selected
        • Make an HTTP GET request to the jobsApiUrl with jwt_token in the Cookies and query parameter minimum_package with value as the id of the selected salary range
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, display the list of jobs received in the response
      • When the HTTP GET request made to the jobsApiUrl returns an empty list for jobs then No Jobs View should be displayed
    • When multiple filters are applied, then the HTTP GET request should be made with all the filters that are applied

    • For example: When the Full Time and Part Time employment types are selected, salary range 10 LPA and above is selected and search input field is empty, then the jobsApiUrl will be as follows

      const apiUrl = 'https://apis.ccbp.in/jobs?employment_type=FULLTIME,PARTTIME&minimum_package=1000000&search='
    • When the Home link is clicked in Header, then the page should be navigated to the Home Route

    • When the website logo image is clicked, then the page should be navigated to the Home Route

    • When a job is clicked, then the page should be navigated to the Job Item Details Route

  • Job Item Details Route

    • When an authenticated user opens the Job Item Details Route
      • An HTTP GET request should be made to jobDetailsApiUrl with jwt_token in the Cookies and job id as path parameter
        • loader should be displayed while fetching the data
        • After the data is fetched successfully, the response received should be displayed
        • The list of similar jobs should be displayed
        • If the HTTP GET request made is unsuccessful, then the Failure View should be displayed
          • When the Retry button is clicked, an HTTP GET request should be made to jobDetailsApiUrl
    • When the Visit button is clicked, then the corresponding company website URL should be opened in a new tab
  • Not Found Route

    • When a random path is provided in the URL, then the page should be navigated to the Not Found Route
  • Logout

    • When the Logout button in the header is clicked, then the page should be navigated to the Login Route
  • The App is provided with employmentTypesList. It consists of a list of employment type objects with the following properties in each employment type object

    KeyData Type
    employmentTypeIdString
    labelString
  • The App is provided with salaryRangesList. It consists of a list of salary range objects with the following properties in each salary range object

    KeyData Type
    salaryRangeIdString
    labelString
API Requests & Responses

loginApiUrl

Returns a response based on the credentials provided

{
  "jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InJhaHVsIiwicm9sZSI6IlBSSU1FX1VTRVIiLCJpYXQiOjE2MTk2Mjg2MTN9. nZDlFsnSWArLKKeF0QbmdVfLgzUbx1BGJsqa2kc_21Y"
}
{
  "status_code": 404,
  "error_msg": "Username is not found"
}

profileApiUrl

Returns a response containing the profile details

{
  "profile_details": {
    "name": "Rahul Attuluri",
    "profile_image_url": "https://assets.ccbp.in/frontend/react-js/male-avatar-img.png",
    "short_bio": "Lead Software Developer and AI-ML expert"
  }
}

jobsApiUrl

Returns a response containing the list of all jobs

{
  "jobs": [
    {
      "company_logo_url": "https://assets.ccbp.in/frontend/react-js/jobby-app/facebook-img.png",
      "employment_type": "Full Time",
      "id": "d6019453-f864-4a2f-8230-6a9642a59466",
      "job_description": "We’re in search of a Back-End Software Engineer that specializes in server-side components. In this role, you’ll primarily work in NodeJs, SQL Lite, Python, AWS and GO and will bring a depth of knowledge on basic algorithms and data structures. As a Back-End Engineer, you might be architecting new features for our customers.",
      "location": "Bangalore",
      "package_per_annum": "21 LPA",
      "rating": 4,
      "title": "Backend Engineer"
    }
    ...
  ],
  "total":25,
}

jobDetailsApiUrl

Returns a response containing the job details

{
  "job_details": {
    "company_logo_url": "https://assets.ccbp.in/frontend/react-js/jobby-app/-img.png",
    "company_website_url": "https://about..com/en",
    "employment_type": "Internship",
    "id": "bb95e51b-b1b2-4d97-bee4-1d5ec2b96751",
    "job_description": "We are looking for a DevOps Engineer with a minimum of 5 years of industry experience, preferably working in the financial IT community. The position in the team is focused on delivering exceptional services to both BU and Dev",
    "skills": [
      {
        "image_url": "https://assets.ccbp.in/frontend/react-js/jobby-app/docker-img.png",
        "name": "Docker"
      },
      ...
    ],
    "life_at_company": {
      "description": "Our core philosophy is people over process. Our culture has been instrumental to our success. It has helped us attract and retain stunning colleagues, making work here more satisfying. Entertainment, like friendship, is a fundamental human need, and it changes how we feel and gives us common ground. We want to entertain the world.",
      "image_url": "https://assets.ccbp.in/frontend/react-js/jobby-app/life--img.png"
    },
    "location":"Delhi",
    "package_per_annum":"10 LPA",
    "rating":4
  },
  "similar_jobs": [
    {
      "company_logo_url": "https://assets.ccbp.in/frontend/react-js/jobby-app/-img.png",
      "employment_type": "Freelance",
      "id": "2b40029d-e5a5-48cc-84a6-b6e12d25625d",
      "job_description": "The Experimentation Platform team builds internal tools with a big impact across the company. We are looking to add a UI engineer to our team to continue to improve our experiment analysis workflow and tools. Ideal candidates will be excited by direct contact with our users, fast feedback, and quick iteration.",
      "location": "Delhi",
      "rating": 4,
      "title": "Frontend Engineer"
    },
    ...
  ]
}
Click to view
  • To convert a list of items as a comma-separated string we can use the array method join()
Click to view

The following instructions are required for the tests to pass

  • Home Route should consist of / in the URL path

  • Login route should consist of /login in the URL path

  • Jobs route should consist of /jobs in the URL path

  • Job Item Details route should consist of /jobs/:id in the URL path

  • No need to use the BrowserRouter in App.js as we have already included in index.js

  • User credentials

     username: rahul
     password: rahul@2021
    
    
  • Wrap the Loader component with an HTML container element and add the testid attribute value as loader to it

    <div className="loader-container" testid="loader">
      <Loader type="ThreeDots" color="#ffffff" height="50" width="50" />
    </div>
  • The HTML button element with search icon in Jobs Route should have the testid attribute value as searchButton to it

    <button type="button" testid="searchButton">
      <BsSearch className="search-icon" />
    </button>
  • The profile image in Jobs Route should have the alt as profile

  • The company logo images in Jobs Route should have the alt as company logo

  • The company logo image in Job Item Details Route should have the alt as job details company logo

  • The life at company image in Job Item Details Route should have the alt as life at company

  • The skill images in the Job Item Details Route should have the alt as the value of the key name from each object in the skills list in jobDetailsResponse

  • The company logo image in similar job item in Job Item Details Route should have the alt as similar job company logo

Image URLs
Colors
Hex: #64748b
Hex: #4f46e5
Hex: #f8fafc
Hex: #272727
Hex: #ffffff
Hex: #b6c5ff
Hex: #6366f1
Hex: #2c364c
Hex: #000000
Hex: #f1f5f9
Hex: #fbbf24
Hex: #202020
Hex: #cbd5e1
Hex: #7e858e
Hex: #121212
Hex: #475569
Hex: #ff0b37

Font-families
  • Roboto
  • All components you implement should go in the src/components directory.
  • Don't change the component folder names as those are the files being imported into the tests.
  • Do not remove the pre-filled code
  • Want to quickly review some of the concepts you’ve been learning? Take a look at the Cheat Sheets.

About

Implemented Jobby App where users can log in and can see a list of jobs with search by Job title, filters based on Salary range and Employment type, etc Implemented different pages like Login, Home, Jobs, Job item details using React components, props, state, lists, event handlers, form inputs. Credentials: username: rahul , password: rahul@2021

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published