SCENARIO:
While working on one of the requirements for an Automobile sector project for a client based out of Dallas, Texas, There was a requirement to display dynamic timeline component with Expand/Collapse feature using React JS/TS.
CHALLENGE
.
APPROACH
We are going to create a custom and complete dynamic timeline component with additional feature like expand and collapse in React JS/TS.
Please follow the below details steps to meet requirement.
Step 1:
Create React JS or React TS application. We can use following commands respectively for React JS and React TS.
npx create-react-app timeline --template typescript
npx create-react-app timeline
Step 2:
Once you execute the above command in your terminal you will get the following structure of your React Project.
Step 3 :
After Creating the project we need to add some plugin which you can install by executing the following commands.
npm i @fortawesome/react-fontawesome
npm i @fortawesome/free-solid-svg-icons
Step 4:
Now, Clear the project structure and we have to add new two files named as : Timeline.tsx and App.tsx.
Step 5:
Add the following Code to the Timeline.tsx file
In the above code we have defined function interface and the state as follows:
Interface Props : In React JS we get the Props directly from the parent component but in React TS we have to pass interface and from interface we get the props functions and variables.
here we have one object for the timeline details and one function for the callback to set the state of Parent component.
updateStatus Function : This function will take the updated status as the argument and the object of timeline. So, this function will take both as a argument and update the status of current state and call the callback function from Props to and pass updated Timeline information object.
In render method we have taken a const variable timelineData which takes values from Props and then we have a return function which returns the timeline View based on different condition. Also, We have one flag named as "isOpen" which basically show the view between expand or collapse.
Step 6 :
Once we are done with the timeline component, we will move to main App.tsx component.
Add the following code to the App.tsx file. We can directly move this code into Index.tsx , but we want to create a dynamic component so we are adding a new component names as App.tsx
In this file we have defined one static state object named as "timelineDetails". It contains the information of the timeline which we want to show on the component view as well as set flag to show status and expand collapse position.
We also have one function names as "updateRecord", It accepts data as an argument which is an object of the timelineDetails. this function is going to be called from the Timeline.tsx file means the child component. This function finds the matching object from the timelineDetails and store in "tempTimeline" and then will replace the states object with the updated one.
Step 7 :
Now add the following css to the App.css file for the designing and the expand/collapse view.
Step 8 :
At last, now execute the code and you will get below output with look & feel.
Expand View:
This component will create the dynamic view along with look & feel as per requirement. We can use this Timeline.tsx in any component outside of this project but we have to take care about the function and its parameter.
We can use this timeline component as independent component with the expand and collapse functionality with complete dynamic Content.