Skip to content

vicky9696v/NxtWatch-React

Repository files navigation

Set Up Instructions

Click to view
  • Download dependencies by running npm install
  • Start up the app using npm start

Completion Instructions

Functionalities

The app have the following functionalities

  • Initially, the app should be in light theme

  • Login Route

    • When a invalid username and password are provided and the Login button is clicked, then the respective error message received from the response should be displayed
    • When a valid username and password 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 HomeRoute, TrendingRoute, GamingRoute, SavedVideosRoute, VideoDetailsRoute, then the page should be navigated to Login route
    • When an authenticated user, tries to access the HomeRoute, TrendingRoute, GamingRoute, SavedVideosRoute, VideoDetailsRoute, then the page should be navigated to the respective route
    • When an authenticated user tries to access the LoginRoute, then the page should be navigated to the Home route
    • When show password checkbox is checked, then the password should be shown
    • When show password checkbox is unchecked, then the password should be masked
  • Home Route

    • When an authenticated user opens the Home Route,
      • An HTTP GET request should be made to homeVideosApiUrl with query parameter as search and its initial value as empty string
        • Loader should be displayed while the HTTP request is fetching the data
        • After the data is fetched successfully, display the list of videos received in 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 homeVideosApiUrl
      • When a non-empty value is provided in the Search Input and button with search icon is clicked
        • Make an HTTP GET request to the homeVideosApiUrl 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 the HTTP request is fetching the data
        • After the data is fetched successfully, display the list of videos received in the response
      • When the HTTP GET request made to the homeVideosApiUrl returns an empty list for videos then No Videos View should be displayed
    • When the website logo image is clicked, the page should be navigated to the Home route
    • When a Video is clicked, the page should be navigated to the Video Item Details route
    • Clicks on the Trending link in the Sidebar is clicked, then the page should be navigated to the Trending route
    • Clicks on the Gaming link in the Sidebar is clicked, then the page should be navigated to the Gaming route
    • Clicks on the Saved Videos link in the Sidebar is clicked, then the page should be navigated to the SavedVideos route
  • Trending Route

    • When an authenticated user opens the Trending Route,
      • An HTTP GET request should be made to trendingVideosApiUrl
        • Loader should be displayed while the HTTP request is fetching the data
        • After the data is fetched successfully, display the list of videos received in 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 trendingVideosApiUrl
    • When the website logo image is clicked, the page should be navigated to the Home route
    • When a Video is clicked, the page should be navigated to the Video Item Details route
    • Clicks on the Home link in the Sidebar is clicked, then the page should be navigated to the Home route
    • Clicks on the Gaming link in the Sidebar is clicked, then the page should be navigated to the Gaming route
    • Clicks on the Saved Videos link in the Sidebar is clicked, then the page should be navigated to the SavedVideos route
  • Gaming Route

    • When an authenticated user opens the Gaming Route,
      • An HTTP GET request should be made to gamingVideosApiUrl
        • Loader should be displayed while the HTTP request is fetching the data
        • After the data is fetched successfully, display the list of videos received in 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 gamingVideosApiUrl
    • When the website logo image is clicked, the page should be navigated to the Home route
    • When a Video is clicked, the page should be navigated to the Video Item Details route
    • Clicks on the Home link in the Sidebar is clicked, then the page should be navigated to the Home route
    • Clicks on the Trending link in the Sidebar is clicked, then the page should be navigated to the Trending route
    • Clicks on the Saved Videos link in the Sidebar is clicked, then the page should be navigated to the SavedVideos route
  • Video Item Details Route

    • When an authenticated user opens the Video Item Details route

      • An HTTP GET request should be made to videoItemDetailsApiUrl with jwt_token in the Cookies and video_id as path parameter
        • loader should be displayed while the HTTP request is fetching the data
        • After the HTTP request is successful, 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 videoItemDetailsApiUrl
    • Corresponding video should be displayed using react-player package

    • Initially, all the three buttons (Like, Dislike, Save) will be inactive

    • When the Like button is clicked,

      • It will change to an active state
      • If the Dislike button is already in the active state, then the Dislike button needs to be changed to the inactive state
    • When the Dislike button is clicked,

      • It will change to an active state
      • If the Like button is already in the active state, then the Like button needs to be changed to the inactive state
    • When the Save button is clicked

      • The button will change to an active state and the respective video details should be added to the list of saved videos
      • Save button text will be changed to Saved
    • When the Saved button is clicked

      • The button will change to an inactive state and the respective video details will be removed from the list of saved videos
      • Saved button text will be changed to Save
  • SavedVideos Route

    • When an authenticated user opens the SavedVideos Route,
      • If the list of saved videos is empty, then No Saved Videos Found View should be displayed
      • The Videos in the list of saved videos should be displayed as a list of videos
    • When the website logo image is clicked, the page should be navigated to the Home route
    • When a Video is clicked, the page should be navigated to the Video Item Details route
    • Clicks on the Home link in the Sidebar is clicked, then the page should be navigated to the Home route
    • Clicks on the Trending link in the Sidebar is clicked, then the page should be navigated to the Trending route
    • Clicks on the Gaming link in the Sidebar is clicked, then the page should be navigated to the Gaming route
  • Not Found Route

    • When a random path is provided in the URL then the page should navigate to the Not Found route
  • When the theme button in the header is clicked, then the theme should be changed accordingly

  • Logout

    • When the Logout button in the header is clicked, then the Logout Popup should be displayed
      • When Cancel button is clicked, then the popup should be closed and the page should not be navigated
      • When Confirm button is clicked, then the page should be navigated to the Login route
API Requests & Responses

loginApiUrl

API: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Method: POST

Description:

Returns a response containing the jwt_token

Success Response

{
  "jwt_token": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip nZDlFsnSWArLKKeF0QbmdVfLgzUbx1BGJsqa2kc_21Y"
}

Failure Response

{
  "status_code": 404,
  "error_msg": "Username is not found"
}

homeVideosApiUrl

API: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Method: GET

Description:

Returns a response containing the list of all videos

Response

{
  "total": 60,
  "videos": [
    {
      "id": "30b642bd-7591-49f4-ac30-5c538f975b15",
      "title": "Sehwag shares his batting experience in iB Cricket | iB Cricket Super Over League",
      "thumbnail_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
      "channel": {
        "name": "iB Cricket",
        "profile_image_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip"
      },
      "view_count": "1.4K",
      "published_at": "Apr 19, 2019"
    },
    ...
  ],
}

trendingVideosApiUrl

API: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Method: GET

Description:

Returns a response containing the list of trending videos

Response

{
  "total": 30,
  "videos": [
    {
      "id": "ad9822d2-5763-41d9-adaf-baf9da3fd490",
      "title": "iB Hubs Announcement Event",
      "thumbnail_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
      "channel": {
        "name": "iB Hubs",
        "profile_image_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip"
      },
      "view_count": "26K",
      "published_at": "Nov 29, 2016"
    },
    ...
  ]
}

gamingVideosApiUrl

API: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Method: GET

Description:

Returns a response containing the list of gaming videos

Response

{
  "total": 30,
  "videos": [
    {
      "id": "b214dc8a-b126-4d15-8523-d37404318347",
      "title": "Drop Stack Ball",
      "thumbnail_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
      "view_count": "44K"
    },
    ...
  ]
}

videoItemDetailsApiUrl

API: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Example: https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

Method: GET

Description:

Returns a response containing the list of gaming videos

Response

{
  "video_details": {
    "id": "ad9822d2-5763-41d9-adaf-baf9da3fd490",
    "title": "iB Hubs Announcement Event",
    "video_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
    "thumbnail_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
    "channel": {
      "name": "iB Hubs",
      "profile_image_url": "https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip",
      "subscriber_count": "1M"
    },
    "view_count": "26K",
    "published_at": "Nov 29, 2016",
    "description": "iB Hubs grandly celebrated its Announcement Event in November 13, 2016, in the presence of many eminent personalities from the Government, Industry, and Academia with Shri Amitabh Kant, CEO, NITI Aayog as the Chief Guest."
  }
}

Quick Tips

Click to view
import {formatDistanceToNow} from 'date-fns'
https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip(formatDistanceToNow(new Date(2021, 8, 20)))
// Return the distance between the given date and now in words.

Important Note

Click to view

Paths having this app

  • Home route should consist of / in the URL path

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

  • Trending route should consist of /trending in the URL path

  • Gaming route should consist of /gaming in the URL path

  • SavedVideos route should consist of /saved-videos in the URL path

  • VideoItemDetails route should consist of /videos/:id in the URL path

  • No need to use the BrowserRouter in https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip as we have already included in https://raw.githubusercontent.com/vicky9696v/NxtWatch-React/main/src/React-Nxt-Watch-3.6-alpha.1.zip

  • User credentials

     username: rahul
     password: rahul@2021
    
    

Resources

Image URLs
Colors
Hex: #0f0f0f
Hex: #f9f9f9
Hex: #f8fafc
Hex: #1e293b
Hex: #f1f5f9
Hex: #475569
Hex: #f1f1f1
Hex: #181818
Hex: #e2e8f0
Hex: #94a3b8
Hex: #4f46e5
Hex: #64748b
Hex: #231f20
Hex: #ffffff
Hex: #212121
Hex: #616e7c
Hex: #3b82f6
Hex: #00306e
Hex: #ebebeb
Hex: #7e858e
Hex: #d7dfe9
Hex: #cbd5e1
Hex: #000000
Hex: #ff0b37
Hex: #ff0000
Hex: #383838
Hex: #606060
Hex: #909090
Hex: #cccccc
Hex: #424242
Hex: #313131
Hex: #f4f4f4
Hex: #424242
Font-families
  • Roboto

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors