Skip to content
This repository was archived by the owner on Jul 10, 2024. It is now read-only.

Commit 152fd10

Browse files
committed
fixed ItemSlider disable for ltr and on component mount
1 parent 05a304c commit 152fd10

File tree

2 files changed

+67
-5
lines changed

2 files changed

+67
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "saffroncodejs",
3-
"version": "1.8.0",
3+
"version": "1.8.4",
44
"description": "Package of optimised react components and javascript functions for developers ♫♪",
55
"main": "./lib/SaffronCode.js",
66
"types": "./lib/SaffronCode.d.ts",

src/ui/ItemsSlider.tsx

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,80 @@ export default class ItemsSlider extends Component<ItemSliderProps> {
1515
nextDisable: false
1616
}
1717

18+
componentDidMount() {
19+
let divToScroll:any = document.querySelector(`#${this.props.id}`);
20+
let isDown:boolean = false;
21+
let start:number;
22+
let scrollLeft:number;
23+
24+
// add code to add event listeners to div only when we have id
25+
// and only add them once
26+
if(divToScroll) {
27+
this.checkForDisabled(divToScroll);
28+
29+
const setIsDownFalse = () => {
30+
isDown = false;
31+
}
32+
33+
const mouseDownHandler = (e:MouseEvent) => {
34+
isDown = true;
35+
start = e.pageX;
36+
scrollLeft = divToScroll.scrollLeft;
37+
}
38+
39+
const mouseMoveHandler = (e:MouseEvent) => {
40+
if(isDown) {
41+
e.preventDefault();
42+
const x = e.pageX;
43+
const walk = x - start;
44+
divToScroll.scrollLeft = scrollLeft - walk;
45+
}
46+
}
47+
48+
divToScroll.addEventListener('mousedown', mouseDownHandler);
49+
50+
divToScroll.addEventListener('mouseup', setIsDownFalse);
51+
52+
divToScroll.addEventListener('mouseleave', setIsDownFalse);
53+
54+
divToScroll.addEventListener('mousemove', mouseMoveHandler);
55+
}
56+
57+
}
58+
1859
// check if the next and before buttons should be disabled
1960
// only works for rtl
2061
checkForDisabled = (divToScroll:any) => {
62+
63+
if( this.props.rtl ) {
64+
65+
if(divToScroll.scrollLeft >= 0) {
66+
this.setState({ beforeDisable: true, nextDisable: false });
67+
}
2168

69+
if(divToScroll.scrollLeft < 0){
70+
this.setState({ beforeDisable: false, nextDisable: false });
71+
}
72+
73+
if(( Math.abs(divToScroll.scrollLeft) + divToScroll.clientWidth + 20 ) >= divToScroll.scrollWidth ) {
74+
this.setState({ nextDisable: true });
75+
}
76+
77+
return;
78+
}
79+
2280
if(divToScroll.scrollLeft >= 0) {
2381
this.setState({ beforeDisable: true, nextDisable: false });
2482
}
2583

26-
if(divToScroll.scrollLeft < 0){
84+
if(divToScroll.scrollLeft > 0){
2785
this.setState({ beforeDisable: false, nextDisable: false });
2886
}
2987

30-
if(( Math.abs(divToScroll.scrollLeft) + divToScroll.clientWidth + 20 ) >= divToScroll.scrollWidth ) {
88+
if(( Math.abs(divToScroll.scrollLeft) + divToScroll.clientWidth ) >= divToScroll.scrollWidth ) {
3189
this.setState({ nextDisable: true });
3290
}
91+
3392
}
3493

3594
// set interval for scroll (to add animation)
@@ -42,7 +101,7 @@ export default class ItemsSlider extends Component<ItemSliderProps> {
42101

43102
if( count === 50 ) {
44103
clearInterval(scrollInterval);
45-
if( this.props.rtl ) this.checkForDisabled(divToScroll);
104+
this.checkForDisabled(divToScroll);
46105
}
47106
}, 10)
48107

@@ -51,9 +110,12 @@ export default class ItemsSlider extends Component<ItemSliderProps> {
51110
scrollTo = (e:any, direction:string) => {
52111

53112
let divToScroll = document.querySelector(`#${this.props.id}`);
54-
55113
let navDirections = (this.props.rtl) ? [5, -5] : [-5, 5];
56114

115+
if(!divToScroll) {
116+
return;
117+
}
118+
57119
switch(direction) {
58120
case 'next':
59121
this.scrollWithAnimation(navDirections[0], divToScroll);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy