🌐
50 React Coding Puzzles
  • 50 React Coding Puzzles
  • Contact
  • Reviews
  • Table of Contents
  • Introduction
  • 1 - Simple Counter App
  • 2 - Dynamic List of Items with Strikethrough
  • 3 - Color Picker with Hex Code Display
  • 4 - Password Strength Checker
  • 5 - Countdown Timer with Audio
  • 6 - Dynamic Movie List with Filtering and Sorting
  • 7 - Text Animation Component (Fade/Scroll)
  • 8 - Dynamically Generated Text Art
  • 9 - Meme Generator with Custom Text
  • 10 - "What Should I Eat?" Random Recipe Generator
  • 11 - Simple Quiz App with Multiple Choice
  • 12 - Unit Converter
  • 13 - Dynamic Image Gallery with Lightbox
  • 14 - Weather Widget with Temperature and Description
  • 15 - Contact Form with Email and Message Validation
  • 16 - Color Palette Generator
  • 17 - Drag-and-Drop Feature for Rearranging Items
  • 18 - Interactive Quiz with Dynamic Results and Feedback
  • 19 - To-Do List with Task Categorization
  • 20 - Note-Taking App with Markdown Support
  • 21 - Simple Calculator with Basic Operations
  • 22 - Word Scramble Game with Timer and Score
  • 23 - Number Guessing Game
  • 24 - Digital Clock with Time Zone Support
  • 25 - Interactive Time Zone Converter
  • 26 - Weather Forecast App with Location Detection
  • 27 - Real-Time Stock Ticker with Updates
  • 28 - Virtual Dice Roller with Multiple Dice
  • 29 - Responsive Navigation Menu with Dropdowns
  • 30 - Progress Bar for Loading or Task Completion
  • 31 - Modal Window for Alerts and Confirmations
  • 32 - Infinite Scroll for Loading More Content
  • 33 - Form Validation with Error Messages
  • 34 - Search Bar with Filtering and Suggestions
  • 35 - Drag-and-Drop File Upload
  • 36 - Interactive Color Picker with Sliders
  • 37 - Image Carousel with Autoplay
  • 38 - Rating System with Stars or Thumbs Up/Down
  • 39 - Comment Section with Nested Replies
  • 40 - Pagination for Long Lists of Data
  • 41 - Stopwatch app that tracks elapsed time
  • 42 - Responsive E-commerce Product Grid
  • 43 - Random Movie/Book Recommender
  • 44 - Kanban board for managing tasks with drag-and-drop
  • 45 - Chat application with real-time messaging using WebSockets
  • 46 - Calendar that displays events and allows scheduling
  • 47 - Tic-Tac-Toe Game
  • 48 - Hangman Game
  • 49 - Notes App
  • 50 - Expense Tracker
  • Afterword
  • Appendix
Powered by GitBook
On this page
  • Description
  • Algorithm
  • Classes
  • Code
  • Explanation
  • Possible Future Enhancements

30 - Progress Bar for Loading or Task Completion

Description

Create a progress bar component that displays the progress of a task or loading process, with the following features:

  • Progress Indication: Displays the progress as a percentage or through a visual filling animation.

  • Customizability: Allows for customization of colors, width, height, and labels.

  • Determinate vs. Indeterminate: Supports both determinate progress (known percentage) and indeterminate progress (unknown completion time).

Algorithm

  1. Create a React component for the progress bar.

  2. Define the props for customizing the progress bar (colors, width, height, labels, determinate/indeterminate).

  3. Use CSS to style the progress bar and its components.

  4. Add JavaScript code to update the progress bar based on the props.

Classes

  • ProgressBar: The main progress bar component.

  • ProgressBarContainer: The container element for the progress bar.

  • ProgressBarFill: The filling element that represents the progress.

  • ProgressBarLabel: The label element that displays the progress percentage or text.

Code

ProgressBar.js

import React from 'react';
import './ProgressBar.css';
import ProgressBarContainer from './ProgressBarContainer';
import ProgressBarFill from './ProgressBarFill';
import ProgressBarLabel from './ProgressBarLabel';

const ProgressBar = ({
  progress,
  determinate,
  color,
  width,
  height,
  label
}) => {
  const [fillWidth, setFillWidth] = React.useState(0);

  React.useEffect(() => {
    if (determinate) {
      setFillWidth((progress / 100) * width);
    }
  }, [progress, determinate, width]);

  return (
    <ProgressBarContainer
      style={{
        width,
        height,
        backgroundColor: color
      }}
    >
      <ProgressBarFill
        style={{
          width: fillWidth,
          backgroundColor: color
        }}
      />
      <ProgressBarLabel>
        {label} {determinate ? `${progress}%` : ''}
      </ProgressBarLabel>
    </ProgressBarContainer>
  );
};

export default ProgressBar;

ProgressBarContainer.js

import React from 'react';

const ProgressBarContainer = ({ children, style }) => {
  return <div className="progress-bar-container" style={style}>{children}</div>;
};

export default ProgressBarContainer;

ProgressBarFill.js

import React from 'react';

const ProgressBarFill = ({ style }) => {
  return <div className="progress-bar-fill" style={style} />;
};

export default ProgressBarFill;

ProgressBarLabel.js

import React from 'react';

const ProgressBarLabel = ({ children }) => {
  return <div className="progress-bar-label">{children}</div>;
};

export default ProgressBarLabel;

ProgressBar.css

.progress-bar-container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 20px;
  border-radius: 10px;
  background-color: #f0f0f0;
  padding: 0 10px;
}

.progress-bar-fill {
  height: 100%;
  background-color: #007bff;
  border-radius: 10px;
  transition: width 0.5s ease-in-out;
}

.progress-bar-label {
  font-size: 14px;
  font-weight: bold;
  color: #333;
  margin-left: 10px;
}

/* Additional styles for different states */
.progress-bar-container.determinate {
  background-color: #f0f0f0;
}

.progress-bar-container.indeterminate {
  background-color: #f0f0f0;
  animation: progress-bar-indeterminate 2s linear infinite;
}

@keyframes progress-bar-indeterminate {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(100%);
  }
}

/* Media queries for responsive design */
@media (max-width: 768px) {
  .progress-bar-container {
    height: 15px;
  }
  .progress-bar-fill {
    height: 100%;
  }
  .progress-bar-label {
    font-size: 12px;
  }
}

@media (max-width: 480px) {
  .progress-bar-container {
    height: 10px;
  }
  .progress-bar-fill {
    height: 100%;
  }
  .progress-bar-label {
    font-size: 10px;
  }
}

Explanation

The code creates a progress bar component that displays the progress of a task or loading process. The component takes in several props for customizing the appearance and behavior of the progress bar. The ProgressBar component uses the useState hook to update the filling width based on the progress percentage. The useEffect hook is used to update the filling width when the progress changes. The component uses CSS to style the progress bar and its components.

Possible Future Enhancements

  • Add animation effects to the progress bar filling.

  • Support multiple colors and gradients for the progress bar.

  • Add a loading animation for indeterminate progress.

  • Use a library like React-Spring for animation effects.

Previous29 - Responsive Navigation Menu with DropdownsNext31 - Modal Window for Alerts and Confirmations

Last updated 10 months ago