Skip to content

Commit e83ae91

Browse files
Steven WILMOUTHwilmouths
authored andcommitted
fix: using dirverjs to replace joyride
1 parent 3c39f24 commit e83ae91

15 files changed

Lines changed: 337 additions & 421 deletions

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"bootstrap": "^5.3.3",
1717
"date-fns": "^4.0.0",
1818
"dompurify": "^3.0.0",
19+
"driver.js": "^1.3.6",
1920
"i18next": "^25.0.0",
2021
"i18next-browser-languagedetector": "^8.0.0",
2122
"i18next-http-backend": "^3.0.0",
@@ -34,8 +35,7 @@
3435
"react-hot-toast": "^2.4.0",
3536
"react-i18next": "^16.0.0",
3637
"react-icons": "^5.0.0",
37-
"react-joyride": "^2.7.2",
38-
"react-loader-spinner": "^8.0.0",
38+
"react-loader-spinner": "^6.1.0",
3939
"react-select": "^5.7.0",
4040
"react-tooltip": "^5.13.1",
4141
"styled-components": "^6.0.7",
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import React, { useState, useEffect, useRef } from 'react';
2+
import { useTranslation } from 'react-i18next';
3+
import { driver } from "driver.js";
4+
import "driver.js/dist/driver.css";
5+
6+
import { useTour } from './DriverContext.jsx';
7+
import { guidedTour } from '../../../services/index.js';
8+
import "./driver.css";
9+
10+
function Driver({ locale = 'fr_FR', tourName, children, steps }) {
11+
const { t, i18n } = useTranslation();
12+
13+
const { isOpen, setIsOpen } = useTour();
14+
15+
const [isEnded, setIsEnded] = useState(false);
16+
17+
const driverRef = useRef(null);
18+
19+
useEffect(() => {
20+
if (!driverRef.current) {
21+
driverRef.current = driver({
22+
popoverClass: 'dmp-theme',
23+
animate: true,
24+
showProgress: true,
25+
allowClose: false,
26+
allowKeyboardControl: true,
27+
stageRadius: 10,
28+
stagePadding: 10,
29+
nextBtnText: t('Next'),
30+
prevBtnText: t('Previous'),
31+
doneBtnText: t('Finish'),
32+
progressText: '{{current}} / {{total}}',
33+
steps,
34+
onPopoverRender: (popover) => {
35+
const ignoreBtn = document.createElement('button');
36+
ignoreBtn.innerText = t('Ignore the guided tour');
37+
popover.footerButtons.prepend(ignoreBtn);
38+
ignoreBtn.addEventListener('click', () => driverRef?.current.destroy());
39+
},
40+
onDestroyed: () => {
41+
if (!isEnded) {
42+
guidedTour.endTour(tourName).then(({ data }) => {
43+
setIsEnded(data?.tour?.ended);
44+
setIsOpen(!data?.tour?.ended);
45+
});
46+
}
47+
},
48+
});
49+
}
50+
}, [steps]);
51+
52+
useEffect(() => {
53+
i18n.changeLanguage(locale.substring(0, 2));
54+
handleRenderedChildren(steps.map(({ element }) => element));
55+
}, [isOpen]);
56+
57+
const handleRenderedChildren = (childrenTags) => {
58+
const allChildrenRendered = childrenTags.every((tag) => document.querySelector(tag) !== null);
59+
60+
if (!allChildrenRendered) {
61+
return setTimeout(() => handleRenderedChildren(childrenTags), 100);
62+
}
63+
64+
return guidedTour.getTour(tourName)
65+
.then(({ data }) => {
66+
const open = isOpen || !data?.tour?.ended
67+
setIsOpen(open);
68+
setIsEnded(data?.tour?.ended)
69+
if (open) {
70+
driverRef?.current.drive();
71+
}
72+
});
73+
};
74+
75+
return children;
76+
}
77+
78+
export default Driver;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { createContext, useState, useContext } from 'react';
2+
3+
export const DriverContext = createContext();
4+
5+
export const DriverProvider = ({ children }) => {
6+
const [isOpen, setIsOpen] = useState(false);
7+
8+
return (
9+
<DriverContext.Provider value={{ isOpen, setIsOpen }}>
10+
{children}
11+
</DriverContext.Provider>
12+
);
13+
};
14+
15+
export const useTour = () => {
16+
const context = useContext(DriverContext);
17+
if (!context) {
18+
throw new Error('useTour must be used within a DriverContext');
19+
}
20+
return context;
21+
};
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
.driver-popover.dmp-theme {
2+
background-color: var(--rust);
3+
color: var(--white);
4+
min-width: 650px;
5+
box-sizing: border-box;
6+
}
7+
8+
.driver-popover.dmp-theme .driver-popover-title {
9+
color: var(--white);
10+
display: flex;
11+
justify-content: space-between;
12+
padding: 10px 0 20px 0;
13+
box-sizing: border-box;
14+
border-radius: 10px 10px 0 0;
15+
align-items: center;
16+
}
17+
18+
.driver-popover.dmp-theme .driver-popover-description {
19+
color: var(--dark-blue);
20+
padding: 10px;
21+
border-radius: 10px;
22+
box-sizing: border-box;
23+
align-items: center;
24+
background: var(--white);
25+
min-height: 100px;
26+
}
27+
28+
.driver-popover.dmp-theme .driver-popover-title,
29+
.driver-popover.dmp-theme .driver-popover-progress-text {
30+
color: var(--white);
31+
}
32+
33+
.driver-popover.dmp-theme button {
34+
color: var(--white);
35+
padding: 5px;
36+
background: transparent;
37+
border: none;
38+
font-size: 10px;
39+
min-width: 90px;
40+
text-shadow: none;
41+
}
42+
43+
.driver-popover.dmp-theme button.driver-popover-close-btn {
44+
color: var(--white);
45+
border-radius: none;
46+
background: none;
47+
border: none;
48+
font-size: 32px;
49+
margin: 8px 10px 0 0;
50+
}
51+
52+
.driver-popover.dmp-theme button.driver-popover-next-btn,
53+
.driver-popover.dmp-theme button.driver-popover-prev-btn {
54+
border-radius: 8px;
55+
background: var(--rust);
56+
color: var(--white);
57+
border: 1px solid var(--white);
58+
padding: 5px 10px 5px 10px;
59+
font-size: 16px;
60+
text-align: center;
61+
}
62+
63+
.driver-popover.dmp-theme button:hover,
64+
.driver-popover.dmp-theme .driver-popover-close-btn:hover {
65+
filter: brightness(90%);
66+
}
67+
68+
.driver-popover.dmp-theme .driver-popover-footer {
69+
margin-top: -5px;
70+
height: 60px;
71+
}
72+
73+
.driver-popover.dmp-theme .driver-popover-arrow-side-left.driver-popover-arrow {
74+
border-left-color: var(--rust);
75+
}
76+
77+
.driver-popover.dmp-theme .driver-popover-arrow-side-right.driver-popover-arrow {
78+
border-right-color: var(--rust);
79+
}
80+
81+
.driver-popover.dmp-theme .driver-popover-arrow-side-top.driver-popover-arrow {
82+
border-top-color: var(--rust);
83+
}
84+
85+
.driver-popover.dmp-theme .driver-popover-arrow-side-bottom.driver-popover-arrow {
86+
border-bottom-color: var(--rust);
87+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { DriverProvider } from './DriverContext.jsx';
2+
import Driver from './Driver.jsx';
3+
4+
export default (props) => (
5+
<DriverProvider>
6+
<Driver {...props} />
7+
</DriverProvider>
8+
);

src/components/Shared/Joyride/JoyrideContext.jsx

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/components/Shared/Joyride/JoyrideTooltipBody.jsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/components/Shared/Joyride/JoyrideTooltipButton.jsx

Lines changed: 0 additions & 50 deletions
This file was deleted.

src/components/Shared/Joyride/JoyrideTooltipFooter.jsx

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/components/Shared/Joyride/JoyrideTooltipSpacer.jsx

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)