allaw-ui 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,54 +1,33 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from "react";
|
|
2
|
-
import { differenceInSeconds } from "date-fns";
|
|
3
2
|
import "./BillingCount.css";
|
|
4
3
|
var LOCAL_STORAGE_KEYS = {
|
|
5
4
|
START_TIME: "startTimeBilling",
|
|
6
5
|
ELAPSED_TIME: "elapsedTime",
|
|
6
|
+
IS_RUNNING: "isRunning",
|
|
7
7
|
};
|
|
8
8
|
var BillingCount = function (_a) {
|
|
9
9
|
var onEnd = _a.onEnd, setIsStarted = _a.setIsStarted, pauseTimer = _a.pauseTimer, resetTimer = _a.resetTimer;
|
|
10
10
|
var _b = useState(0), time = _b[0], setTime = _b[1];
|
|
11
11
|
var _c = useState(false), isPaused = _c[0], setIsPaused = _c[1];
|
|
12
12
|
var _d = useState(false), isRunning = _d[0], setIsRunning = _d[1];
|
|
13
|
-
var intervalRef = useRef(null);
|
|
14
|
-
var startTimeRef = useRef(null);
|
|
15
13
|
var _e = useState(false), isInitialized = _e[0], setIsInitialized = _e[1];
|
|
14
|
+
var intervalRef = useRef(null);
|
|
16
15
|
useEffect(function () {
|
|
17
16
|
setIsInitialized(true);
|
|
18
17
|
}, []);
|
|
19
|
-
var updateElapsedTime = function (elapsedTime) {
|
|
20
|
-
localStorage.setItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME, elapsedTime.toString());
|
|
21
|
-
};
|
|
22
|
-
var clearTimerData = function () {
|
|
23
|
-
localStorage.removeItem(LOCAL_STORAGE_KEYS.START_TIME);
|
|
24
|
-
localStorage.removeItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME);
|
|
25
|
-
};
|
|
26
|
-
var getSavedElapsedTime = function () {
|
|
27
|
-
return parseInt(localStorage.getItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME) || "0", 10);
|
|
28
|
-
};
|
|
29
|
-
var getCurrentElapsedTime = function () {
|
|
30
|
-
var savedStartTime = localStorage.getItem(LOCAL_STORAGE_KEYS.START_TIME);
|
|
31
|
-
if (savedStartTime) {
|
|
32
|
-
var startTime = new Date(savedStartTime);
|
|
33
|
-
var elapsedSinceStart = differenceInSeconds(new Date(), startTime);
|
|
34
|
-
return elapsedSinceStart + getSavedElapsedTime();
|
|
35
|
-
}
|
|
36
|
-
return getSavedElapsedTime();
|
|
37
|
-
};
|
|
38
18
|
useEffect(function () {
|
|
39
19
|
setTime(getSavedElapsedTime());
|
|
40
20
|
}, []);
|
|
41
21
|
useEffect(function () {
|
|
42
22
|
if (!isInitialized)
|
|
43
23
|
return;
|
|
44
|
-
if (resetTimer)
|
|
24
|
+
if (resetTimer)
|
|
45
25
|
setTime(0);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
26
|
+
setIsPaused(false);
|
|
27
|
+
setIsRunning(false);
|
|
28
|
+
clearTimerData();
|
|
29
|
+
if (intervalRef.current) {
|
|
30
|
+
clearInterval(intervalRef.current);
|
|
52
31
|
}
|
|
53
32
|
else if (pauseTimer) {
|
|
54
33
|
pauseTimerHandler();
|
|
@@ -59,15 +38,17 @@ var BillingCount = function (_a) {
|
|
|
59
38
|
}, [resetTimer]);
|
|
60
39
|
useEffect(function () {
|
|
61
40
|
if (isRunning && !isPaused) {
|
|
62
|
-
startTimeRef.current = new Date();
|
|
63
41
|
intervalRef.current = setInterval(function () {
|
|
64
|
-
setTime(
|
|
42
|
+
setTime(function (prevTime) {
|
|
43
|
+
var newElapsedTime = prevTime + 1;
|
|
44
|
+
updateElapsedTime(newElapsedTime);
|
|
45
|
+
return newElapsedTime;
|
|
46
|
+
});
|
|
65
47
|
}, 1000);
|
|
66
48
|
}
|
|
67
|
-
else {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
49
|
+
else if (intervalRef.current) {
|
|
50
|
+
clearInterval(intervalRef.current);
|
|
51
|
+
intervalRef.current = null;
|
|
71
52
|
}
|
|
72
53
|
return function () {
|
|
73
54
|
if (intervalRef.current)
|
|
@@ -87,27 +68,44 @@ var BillingCount = function (_a) {
|
|
|
87
68
|
pauseTimerHandler();
|
|
88
69
|
}
|
|
89
70
|
}, [pauseTimer, resetTimer]);
|
|
71
|
+
// Gestion de reprise de chrono en cas de refresh de page
|
|
90
72
|
useEffect(function () {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
73
|
+
var savedElapsedTime = getSavedElapsedTime();
|
|
74
|
+
var savedIsRunning = localStorage.getItem(LOCAL_STORAGE_KEYS.IS_RUNNING) === "true";
|
|
75
|
+
setTime(savedElapsedTime);
|
|
76
|
+
if (savedIsRunning && savedElapsedTime > 0) {
|
|
77
|
+
setIsRunning(true);
|
|
78
|
+
setIsStarted && setIsStarted(true);
|
|
97
79
|
}
|
|
98
80
|
else {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
81
|
+
setIsRunning(false);
|
|
82
|
+
setIsStarted && setIsStarted(false);
|
|
102
83
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
84
|
+
}, [setIsStarted]);
|
|
85
|
+
// Mise a jour du temps de session
|
|
86
|
+
var updateElapsedTime = function (elapsedTime) {
|
|
87
|
+
localStorage.setItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME, elapsedTime.toString());
|
|
88
|
+
};
|
|
89
|
+
// Cleanup du localStorage après un reset de session de travail
|
|
90
|
+
var clearTimerData = function () {
|
|
91
|
+
localStorage.removeItem(LOCAL_STORAGE_KEYS.START_TIME);
|
|
92
|
+
localStorage.removeItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME);
|
|
93
|
+
localStorage.removeItem(LOCAL_STORAGE_KEYS.IS_RUNNING);
|
|
94
|
+
};
|
|
95
|
+
var getSavedElapsedTime = function () {
|
|
96
|
+
return parseInt(localStorage.getItem(LOCAL_STORAGE_KEYS.ELAPSED_TIME) || "0", 10);
|
|
97
|
+
};
|
|
98
|
+
var getCurrentElapsedTime = function () {
|
|
99
|
+
var savedStartTime = localStorage.getItem(LOCAL_STORAGE_KEYS.START_TIME);
|
|
100
|
+
if (savedStartTime) {
|
|
101
|
+
return getSavedElapsedTime();
|
|
102
|
+
}
|
|
103
|
+
return getSavedElapsedTime();
|
|
104
|
+
};
|
|
108
105
|
var startTimerHandler = function () {
|
|
109
106
|
if (!isRunning) {
|
|
110
107
|
localStorage.setItem(LOCAL_STORAGE_KEYS.START_TIME, new Date().toISOString());
|
|
108
|
+
localStorage.setItem(LOCAL_STORAGE_KEYS.IS_RUNNING, "true");
|
|
111
109
|
setTime(getSavedElapsedTime());
|
|
112
110
|
setIsRunning(true);
|
|
113
111
|
setIsStarted && setIsStarted(true);
|
|
@@ -117,6 +115,7 @@ var BillingCount = function (_a) {
|
|
|
117
115
|
if (isRunning) {
|
|
118
116
|
var elapsed = getCurrentElapsedTime();
|
|
119
117
|
updateElapsedTime(elapsed);
|
|
118
|
+
localStorage.setItem(LOCAL_STORAGE_KEYS.IS_RUNNING, "false");
|
|
120
119
|
setTime(elapsed);
|
|
121
120
|
setIsRunning(false);
|
|
122
121
|
setIsStarted && setIsStarted(false);
|
|
@@ -6,9 +6,14 @@ import Heading from "../../atoms/typography/Heading";
|
|
|
6
6
|
import Paragraph from "../../atoms/typography/Paragraph";
|
|
7
7
|
var ConfirmationModal = function (_a) {
|
|
8
8
|
var show = _a.show, title = _a.title, description = _a.description, confirmLabel = _a.confirmLabel, cancelLabel = _a.cancelLabel, onConfirm = _a.onConfirm, onCancel = _a.onCancel, _b = _a.isDanger, isDanger = _b === void 0 ? false : _b;
|
|
9
|
+
var handleOutsideClick = function (e) {
|
|
10
|
+
if (e.target === e.currentTarget) {
|
|
11
|
+
onCancel();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
9
14
|
if (!show)
|
|
10
15
|
return null;
|
|
11
|
-
return (React.createElement("div", { className: "confirmation-modal" },
|
|
16
|
+
return (React.createElement("div", { className: "confirmation-modal", onClick: handleOutsideClick },
|
|
12
17
|
React.createElement("div", { className: "confirmation-modal-content" },
|
|
13
18
|
React.createElement("div", { className: "confirmation-modal-heading-wrapper" },
|
|
14
19
|
React.createElement(Heading, { text: title, variant: "h4", color: "noir", align: "left" })),
|
|
@@ -101,9 +101,21 @@ var Stepper = function (_a) {
|
|
|
101
101
|
}, [onClose]);
|
|
102
102
|
var handleMouseDown = useCallback(function (e) {
|
|
103
103
|
var selectList = document.querySelector('[class*="selectList"]');
|
|
104
|
+
var datepickerElements = document.querySelectorAll([
|
|
105
|
+
".datepicker-portal",
|
|
106
|
+
".react-datepicker",
|
|
107
|
+
".react-datepicker__month-container",
|
|
108
|
+
".react-datepicker__header",
|
|
109
|
+
".react-datepicker__day",
|
|
110
|
+
".react-datepicker__current-month",
|
|
111
|
+
".react-datepicker__month-dropdown",
|
|
112
|
+
".react-datepicker__year-dropdown",
|
|
113
|
+
].join(","));
|
|
114
|
+
var isClickOnDatepicker = Array.from(datepickerElements).some(function (element) { return element === null || element === void 0 ? void 0 : element.contains(e.target); });
|
|
104
115
|
if (stepperContainerRef.current &&
|
|
105
116
|
!stepperContainerRef.current.contains(e.target) &&
|
|
106
|
-
!(selectList === null || selectList === void 0 ? void 0 : selectList.contains(e.target))
|
|
117
|
+
!(selectList === null || selectList === void 0 ? void 0 : selectList.contains(e.target)) &&
|
|
118
|
+
!isClickOnDatepicker) {
|
|
107
119
|
handleClose();
|
|
108
120
|
}
|
|
109
121
|
}, [handleClose]);
|
|
@@ -7,9 +7,9 @@ declare const meta: {
|
|
|
7
7
|
layout: string;
|
|
8
8
|
};
|
|
9
9
|
args: {
|
|
10
|
-
onLogin: import("@vitest/spy").Mock<[]
|
|
11
|
-
onLogout: import("@vitest/spy").Mock<[]
|
|
12
|
-
onCreateAccount: import("@vitest/spy").Mock<[]
|
|
10
|
+
onLogin: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
11
|
+
onLogout: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
12
|
+
onCreateAccount: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
13
13
|
};
|
|
14
14
|
};
|
|
15
15
|
export default meta;
|