December-software-project/sort-algo

View on GitHub
src/visualizer/sortingvisualizer/component/button/newdatabutton/NewDataButton.js

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
import React, { useContext } from 'react';
import './styles.css';
import { VisualizerStateContext } from '../../../Visualizer';
import { buckets } from '../../../util/CountingSortUtil';
import { stack } from '../../../util/RadixSortUtil';
import { arrayCopy, generateArray } from '../../../util/ArrayUtil';

/**
 * A button to generate new data for the "blocks" for the sorting animation.
 *
 * @component
 * @category Button
 */
const NewDataButton = () => {
  const {
    isPlay,
    dataSize,
    setArrayData,
    setIsInMidstOfSort,
    setIsReplay,
    setAnimationPercentage,
    visualizerAlgorithm,
    setCountArr,
    setStackArr,
    setIsReset,
    setHistoryArr,
  } = useContext(VisualizerStateContext);

  /**
   * Event handler to generate new data set for the sorting animation.
   */
  const handleNewDataButtonClick = () => {
    if (!isPlay) {
      setArrayData(generateArray(dataSize, visualizerAlgorithm));
      setIsInMidstOfSort(false);
      setAnimationPercentage(0);
      setIsReplay(false);
      setCountArr(arrayCopy(buckets));
      setStackArr(arrayCopy(stack));
      setHistoryArr([]);
      setIsReset(true);
    }
  };

  return (
    <div className="new-data-box" style={{ cursor: isPlay ? 'not-allowed' : 'pointer' }}>
      <span onClick={() => handleNewDataButtonClick()}>New Data</span>
    </div>
  );
};

export default NewDataButton;