/
App.tsx
67 lines (60 loc) · 2.32 KB
/
App.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import React, { useRef, useState } from 'react';
import logo from './logo.svg';
import './App.scss';
import TinyCarousel, { definePlugin, PluginsProp, TinyCarouselProps, TinyCarouselRef } from './TinyCarousel';
import { pluginAutoplay } from '@frsource/tiny-carousel-plugin-autoplay';
import { pluginMouseDrag } from '@frsource/tiny-carousel-plugin-mouse-drag';
import { pluginCustomEvents } from '@frsource/tiny-carousel-plugin-custom-events';
const carouselPlugins: PluginsProp = [
definePlugin(pluginAutoplay, {
autoplayTimeout: 5000,
}),
definePlugin(pluginMouseDrag),
definePlugin(pluginCustomEvents),
];
function App() {
const [number, setNumber] = useState(6);
const [isInitialized, setIsInitialized] = useState(false);
const tinyCarousel = useRef<TinyCarouselRef>(null);
const onCarouselInit: TinyCarouselProps['onAfterEventInit'] = e => {
setIsInitialized(true);
e.detail.tinyCarousel.play();
};
const clickPrev = () => tinyCarousel.current?.prev();
const clickNext = () => tinyCarousel.current?.next();
return (
<main className="App">
<header>
<h1>Tiny carousel - your favourite carousel library 👑</h1>
<h3>Now in <a href="https://reactjs.org" title="Read more about React!">React</a> <img src={logo} className="App-logo" alt="logo" /></h3>
</header>
<TinyCarousel
className="carousel"
tag="ul"
plugins={carouselPlugins}
onAfterEventInit={onCarouselInit}
ref={tinyCarousel}
>
{
new Array(number).fill(0).map((_, index) =>
<li key={index}>
<img
className="carousel__item-img"
alt={`Demo ${index}`}
src={`https://picsum.photos/seed/${index + 1}/800/600`}
/>
</li>
)
}
</TinyCarousel>
<p className="carousel-status">Carousel is { isInitialized ? 'initialized' : 'not initialized' }</p>
<nav className="row">
<button type="button" onClick={clickPrev}>prev</button>
<button type="button" onClick={clickNext}>next</button>
<button type="button" onClick={() => setNumber(number + 1)}>Add slide</button>
<button type="button" onClick={() => setNumber(number - 1)}>Remove slide</button>
</nav>
</main>
);
}
export default App;