import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux' import { MdArrowBack, MdArrowForward } from 'react-icons/md' import { QuickStart } from './quickStart' // 10, 'Use the line tool', // 10, 'Adding dimensions', // 10, 'Adding vetical/horizontal constraints', // 10, 'Drawing an arc', // 10, 'Adding coincident constraints', function debounce(callback, delay) { let handler = null; return (...args) => { clearTimeout(handler); handler = setTimeout(() => callback(...args), delay); } } function reducer(state, action) { switch (action.type) { case 'resize': const rect = Math.min(Math.min(window.innerHeight * 0.8, window.innerWidth * 0.7),800) return { ...state, rect, dragLeft: state.pg * rect, dragging: true }; case 'move': return { ...state, pg: state.pg + action.del, dragging: false }; case 'drag-start': return { ...state, dragLeft: state.pg * state.rect, dragging: true }; case 'drag': return { ...state, dragLeft: state.dragLeft - action.move }; case 'drag-end': return { ...state, pg: Math.round(state.dragLeft / state.rect), dragging: false }; default: console.error(action) // throw new Error(); } } const transTime = 300 const elastic = `transform ${transTime}ms cubic-bezier(0.4, 0.0, 0.2, 1)`; const arr = [ ['Sketch out your ideas in 2D outlines.', 'link'], ['Transform the sketched shapes into 3D solids.', 'link'], ['Combine multiple solids to form more complex ones.', 'link'], ['Export your design to a 3D printer and turn into reality.', 'link'], ] export const Help = ({ setModal }) => { const dispatch = useDispatch() const status = useSelector(state => state.ui.help) // useEffect(() => { // if (!status) return // document.addEventListener( // handles click outside buttona & dropdown // 'click', // handleClick // , // { capture: true } // capture phase to allow for stopPropogation on others // ) // return () => { // document.removeEventListener('click', handleClick, { capture: true }) // important to include options if it was specified // } // }, [status]) const ref = useRef(null) const rect = Math.min(Math.min(window.innerHeight * 0.8, window.innerWidth * 0.7),800) const [state, carouselDispatch] = useReducer(reducer, { rect, pg: 0, dragLeft: 0, dragging: false }) const updateSize = useCallback( debounce( () => { carouselDispatch({ type: 'resize' }) } , 200 ) , [] ) const handleMouseDown = () => carouselDispatch({ type: 'drag-start' }) const handleMouseMove = (e) => e.buttons == 1 && carouselDispatch({ type: 'drag', move: e.movementX }) const handleMouseUp = () => carouselDispatch({ type: 'drag-end' }) useEffect(() => { window.addEventListener('resize', updateSize) document.addEventListener('mousedown', handleMouseDown) document.addEventListener('mousemove', handleMouseMove) document.addEventListener('mouseup', handleMouseUp) }, []) // if (status) { return
{ arr.map( (e, idx) =>
{e[0]}
) }
setModal(false)} > Get Started
carouselDispatch({ type: "move", del: -1 })} >
carouselDispatch({ type: "move", del: 1 })} >
{Array(arr.length + 1).fill().map((ele, idx) => (
))}
// } else { // return null // } }