Spaces:
Running
Running
Upload App.tsx
Browse files- src/App.tsx +33 -0
src/App.tsx
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React, { useState } from 'react';
|
| 2 |
+
import { slidesData } from './data/slides';
|
| 3 |
+
import { styles } from './styles/appStyles';
|
| 4 |
+
import ProgressBar from './components/ProgressBar';
|
| 5 |
+
import SlideRenderer from './components/SlideRenderer';
|
| 6 |
+
|
| 7 |
+
const App = () => {
|
| 8 |
+
const [step, setStep] = useState(0);
|
| 9 |
+
|
| 10 |
+
const handleNext = () => setStep(prev => Math.min(prev + 1, slidesData.length - 1));
|
| 11 |
+
const handlePrev = () => setStep(prev => Math.max(0, prev - 1));
|
| 12 |
+
|
| 13 |
+
const currentSlideData = slidesData[step];
|
| 14 |
+
|
| 15 |
+
return (
|
| 16 |
+
<div style={styles.card}>
|
| 17 |
+
<ProgressBar current={step} total={slidesData.length} />
|
| 18 |
+
<div style={{ flex: 1, display: 'flex', flexDirection: 'column', justifyContent: 'center', padding: '2rem', overflowY: 'auto' }}>
|
| 19 |
+
<SlideRenderer slide={currentSlideData} />
|
| 20 |
+
</div>
|
| 21 |
+
<div style={{...styles.buttonContainer, padding: '0 2rem 2rem 2rem'}}>
|
| 22 |
+
<button onClick={handlePrev} disabled={step === 0} style={{ ...styles.button, ...(step === 0 && styles.buttonDisabled) }}>
|
| 23 |
+
Previous
|
| 24 |
+
</button>
|
| 25 |
+
<button onClick={handleNext} disabled={step === slidesData.length - 1} style={{ ...styles.button, ...(step === slidesData.length - 1 && styles.buttonDisabled) }}>
|
| 26 |
+
Next
|
| 27 |
+
</button>
|
| 28 |
+
</div>
|
| 29 |
+
</div>
|
| 30 |
+
);
|
| 31 |
+
};
|
| 32 |
+
|
| 33 |
+
export default App;
|