Table of Content
Introduction
This task is a TYPESCRIPT and REACT based homework task in which you will create a sample Single-Page-App to fulfil the requirements given below.
This task should take around 3 - 4 hours and you are free to use libraries where you see fit. Remember, this is also a showcase of your skills. When you are finished, please zip / tar your solution (without node_modules).
Starting Off
We insist you bootstrap your project using:
https://create-react-app.dev/docs/getting-started#creating-a-typescript-app
npx create-react-app fs-ttvm --template typescript
Task
Background
A User can manage their Video Production Projects which go through various stages. At any time a user might have multiple active projects which are in different stages of production. You will be building a Github Issues like data table which list all their projects with columns showing them essential information on the projects, and allow them to Sort and Search the project list.
Given a JSON API which serves list of Projects for created by a user in various stages, create a dashboard page which displays all the projects created by a user.
A
Projecthas the following fields which should be rendered as columns in the project list table:nameof typestring, which is a user entered name for their project.statusis astringenum which indicates the current stage of the project. A project moves through the following stages in order:INCOMPLETE- project brief is not complete, still being written by the user.SHOOTING- project is in shooting phase.EDITING- video is in editing phase.FEEDBACK- a draft of the final film needs feedbackCOMPLETED- project is deemed as completed
typeis astringenum which will be one of the values:educational,testimonial,training,recreationalor some know unique type of video.createdOnis aDateon which the project was created by the userarchivedis aboolindicating whether a project is archived by the user or still active.
You should also focus on creating the UI design which meets your design sense. You are free to use a component library you prefer and use Github’s UI as inspiration.
Requirements
- Load list of projects from the given
db.jsonfile directly or via a JSON API using https://github.com/typicode/json-server. - Project belonging to the user should be rendered in a table with the columns Name, Type, Status, Created. Archived projects are hidden by default.
- Create a search field which can search and filter the table rows by
name - The table rows can be sortable by
createdOnvalue in ascending and descending order. - The search field should also support case-insensitive smart label searching by
is:<ANY_ENUM_FIELD>,is:archived,not:<ANY_ENUM_FIELD>,not:archived,after:<DATE>. You can also come up with your own idea. Examples:is:archived is:testimonial is:completedwill show archived videos oftype“testimonial” and which have thestatusascompletedorCOMPLETEDis:educational not:incomplete after:2023-01-01will show videos oftype“educational”, which have thestatusas anything butincompleteorINCOMPLETEand thecreatedOnis after 1st of January, 2023
Deliverables
- The solution code in Typescript and using the React UI Framework, and using the
create-react-app - The codebase should be completely typed without
anyusage unless absolutely necessary. Please state why you ended up usingany
Database File
A sample list of Project is available in this file db.json. NOTE that values in this file are generated using @faker-js/faker: - db.zip
Sample Screenshots
