@w3ux/hooks 1.3.1-beta.0 → 1.3.1-beta.2
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.
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/{useTimeleft → useTimeLeft}/defaults.js.map +1 -1
- package/cjs/{useTimeleft → useTimeLeft}/index.js.map +1 -1
- package/cjs/{useTimeleft → useTimeLeft}/types.js.map +1 -1
- package/cjs/useTimeLeft/utils.d.ts +4 -0
- package/cjs/useTimeLeft/utils.js +69 -0
- package/cjs/useTimeLeft/utils.js.map +1 -0
- package/cjs/util.d.ts +0 -0
- package/cjs/util.js +5 -0
- package/cjs/util.js.map +1 -0
- package/mjs/index.d.ts +1 -1
- package/mjs/index.js +1 -1
- package/mjs/index.js.map +1 -1
- package/mjs/{useTimeleft → useTimeLeft}/defaults.js.map +1 -1
- package/mjs/{useTimeleft → useTimeLeft}/index.js.map +1 -1
- package/mjs/{useTimeleft → useTimeLeft}/types.js.map +1 -1
- package/mjs/useTimeLeft/utils.d.ts +4 -0
- package/mjs/{useTimeleft → useTimeLeft}/utils.js +31 -0
- package/mjs/useTimeLeft/utils.js.map +1 -0
- package/mjs/util.d.ts +0 -0
- package/mjs/util.js +5 -0
- package/mjs/util.js.map +1 -0
- package/package.json +5 -1
- package/cjs/useTimeleft/utils.d.ts +0 -2
- package/cjs/useTimeleft/utils.js +0 -36
- package/cjs/useTimeleft/utils.js.map +0 -1
- package/mjs/useTimeleft/utils.d.ts +0 -2
- package/mjs/useTimeleft/utils.js.map +0 -1
- /package/cjs/{useTimeleft → useTimeLeft}/defaults.d.ts +0 -0
- /package/cjs/{useTimeleft → useTimeLeft}/defaults.js +0 -0
- /package/cjs/{useTimeleft → useTimeLeft}/index.d.ts +0 -0
- /package/cjs/{useTimeleft → useTimeLeft}/index.js +0 -0
- /package/cjs/{useTimeleft → useTimeLeft}/types.d.ts +0 -0
- /package/cjs/{useTimeleft → useTimeLeft}/types.js +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/defaults.d.ts +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/defaults.js +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/index.d.ts +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/index.js +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/types.d.ts +0 -0
- /package/mjs/{useTimeleft → useTimeLeft}/types.js +0 -0
package/cjs/index.d.ts
CHANGED
package/cjs/index.js
CHANGED
|
@@ -18,7 +18,7 @@ __exportStar(require("./useEffectIgnoreInitial"), exports);
|
|
|
18
18
|
__exportStar(require("./useOnResize"), exports);
|
|
19
19
|
__exportStar(require("./useOutsideAlerter"), exports);
|
|
20
20
|
__exportStar(require("./useSize"), exports);
|
|
21
|
-
__exportStar(require("./
|
|
21
|
+
__exportStar(require("./useTimeLeft"), exports);
|
|
22
22
|
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
|
24
24
|
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,2DAAyC;AACzC,gDAA8B;AAC9B,sDAAoC;AACpC,4CAA0B;AAC1B,gDAA8B","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from \"./useEffectIgnoreInitial\";\nexport * from \"./useOnResize\";\nexport * from \"./useOutsideAlerter\";\nexport * from \"./useSize\";\nexport * from \"./
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,2DAAyC;AACzC,gDAA8B;AAC9B,sDAAoC;AACpC,4CAA0B;AAC1B,gDAA8B","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from \"./useEffectIgnoreInitial\";\nexport * from \"./useOnResize\";\nexport * from \"./useOutsideAlerter\";\nexport * from \"./useSize\";\nexport * from \"./useTimeLeft\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/defaults.ts"],"names":[],"mappings":";;;AAKa,QAAA,eAAe,GAAqB;IAC/C,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,KAAK;CAClB,CAAC;AAEW,QAAA,sBAAsB,GAAG,EAAE,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { TimeleftDuration } from \"./types\";\n\nexport const defaultDuration: TimeleftDuration = {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n lastMinute: false,\n};\n\nexport const defaultRefreshInterval = 60;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { setStateWithRef } from \"@w3ux/utils\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type {\n TimeLeftAll,\n TimeLeftRaw,\n TimeleftDuration,\n UseTimeleftProps,\n} from \"./types\";\nimport { getDuration } from \"./utils\";\n\nexport const useTimeLeft = (props?: UseTimeleftProps) => {\n const depsTimeleft = props?.depsTimeleft || [];\n const depsFormat = props?.depsFormat || [];\n\n // check whether timeleft is within a minute of finishing.\n const inLastHour = () => {\n const { days, hours } = getDuration(toRef.current);\n return !days && !hours;\n };\n\n // get the amount of seconds left if timeleft is in the last minute.\n const lastMinuteCountdown = () => {\n const { seconds } = getDuration(toRef.current);\n if (!inLastHour()) {\n return 60;\n }\n return seconds;\n };\n\n // calculate resulting timeleft object from latest duration.\n const getTimeleft = (c?: TimeleftDuration): TimeLeftAll => {\n const { days, hours, minutes, seconds } = c || getDuration(toRef.current);\n const raw: TimeLeftRaw = {\n days,\n hours,\n minutes,\n };\n if (!days && !hours) {\n raw.seconds = seconds;\n }\n return {\n raw,\n };\n };\n\n // the end time as a date.\n const [to, setTo] = useState<Date | null>(null);\n const toRef = useRef(to);\n\n // resulting timeleft object to be returned.\n const [timeleft, setTimeleft] = useState<TimeLeftAll>(getTimeleft());\n\n // timeleft refresh intervals.\n const [minInterval, setMinInterval] = useState<\n ReturnType<typeof setInterval> | undefined\n >(undefined);\n const minIntervalRef = useRef(minInterval);\n\n const [secInterval, setSecInterval] = useState<\n ReturnType<typeof setInterval> | undefined\n >(undefined);\n const secIntervalRef = useRef(secInterval);\n\n // refresh effects.\n useEffect(() => {\n setTimeleft(getTimeleft());\n if (inLastHour()) {\n // refresh timeleft every second.\n if (!secIntervalRef.current) {\n const interval = setInterval(() => {\n if (!inLastHour()) {\n clearInterval(secIntervalRef.current);\n setStateWithRef(undefined, setSecInterval, secIntervalRef);\n }\n setTimeleft(getTimeleft());\n }, 1000);\n\n setStateWithRef(interval, setSecInterval, secIntervalRef);\n }\n }\n // refresh timeleft every minute.\n else if (!minIntervalRef.current) {\n const interval = setInterval(() => {\n if (inLastHour()) {\n clearInterval(minIntervalRef.current);\n setStateWithRef(undefined, setMinInterval, minIntervalRef);\n }\n setTimeleft(getTimeleft());\n }, 60000);\n setStateWithRef(interval, setMinInterval, minIntervalRef);\n }\n }, [to, inLastHour(), lastMinuteCountdown(), ...depsTimeleft]);\n\n // re-render the timeleft upon formatting changes.\n useEffect(() => {\n setTimeleft(getTimeleft());\n }, [...depsFormat]);\n\n // clear intervals on unmount\n useEffect(\n () => () => {\n clearInterval(minInterval);\n clearInterval(secInterval);\n },\n []\n );\n\n // Set the end time and calculate timeleft.\n const setFromNow = (dateFrom: Date, dateTo: Date) => {\n setTimeleft(getTimeleft(getDuration(dateFrom)));\n setStateWithRef(dateTo, setTo, toRef);\n };\n\n return {\n setFromNow,\n timeleft,\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport interface UseTimeleftProps {\n // Dependencies to trigger re-calculation of timeleft.\n depsTimeleft: unknown[];\n // Dependencies to trigger re-render of timeleft, e.g. if language switching occurs.\n depsFormat: unknown[];\n}\n\nexport interface TimeleftDuration {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n lastMinute: boolean;\n}\n\nexport interface TimeLeftRaw {\n days: number;\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\nexport interface TimeLeftFormatted {\n days: [number, string];\n hours: [number, string];\n minutes: [number, string];\n seconds?: [number, string];\n}\n\nexport interface TimeLeftAll {\n raw: TimeLeftRaw;\n}\n\nexport interface TimeleftHookProps {\n refreshInterval: number;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TimeleftDuration } from "./types";
|
|
2
|
+
export declare const getDuration: (toDate: Date | null) => TimeleftDuration;
|
|
3
|
+
export declare const secondsFromNow: (seconds: number) => Date;
|
|
4
|
+
export declare const getDurationFromNow: (toDate: Date | null) => TimeleftDuration;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDurationFromNow = exports.secondsFromNow = exports.getDuration = void 0;
|
|
4
|
+
const date_fns_1 = require("date-fns");
|
|
5
|
+
const defaults_1 = require("./defaults");
|
|
6
|
+
const getDuration = (toDate) => {
|
|
7
|
+
if (!toDate) {
|
|
8
|
+
return defaults_1.defaultDuration;
|
|
9
|
+
}
|
|
10
|
+
if ((0, date_fns_1.getUnixTime)(toDate) <= (0, date_fns_1.getUnixTime)(new Date())) {
|
|
11
|
+
return defaults_1.defaultDuration;
|
|
12
|
+
}
|
|
13
|
+
toDate.setSeconds(toDate.getSeconds());
|
|
14
|
+
const d = (0, date_fns_1.intervalToDuration)({
|
|
15
|
+
start: Date.now(),
|
|
16
|
+
end: toDate,
|
|
17
|
+
});
|
|
18
|
+
const days = (0, date_fns_1.differenceInDays)(toDate, Date.now());
|
|
19
|
+
const hours = (d === null || d === void 0 ? void 0 : d.hours) || 0;
|
|
20
|
+
const minutes = (d === null || d === void 0 ? void 0 : d.minutes) || 0;
|
|
21
|
+
const seconds = (d === null || d === void 0 ? void 0 : d.seconds) || 0;
|
|
22
|
+
const lastHour = days === 0 && hours === 0;
|
|
23
|
+
const lastMinute = lastHour && minutes === 0;
|
|
24
|
+
return {
|
|
25
|
+
days,
|
|
26
|
+
hours,
|
|
27
|
+
minutes,
|
|
28
|
+
seconds,
|
|
29
|
+
lastMinute,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.getDuration = getDuration;
|
|
33
|
+
const secondsFromNow = (seconds) => {
|
|
34
|
+
const end = new Date();
|
|
35
|
+
end.setSeconds(end.getSeconds() + seconds);
|
|
36
|
+
return end;
|
|
37
|
+
};
|
|
38
|
+
exports.secondsFromNow = secondsFromNow;
|
|
39
|
+
const getDurationFromNow = (toDate) => {
|
|
40
|
+
if (!toDate) {
|
|
41
|
+
return defaults_1.defaultDuration;
|
|
42
|
+
}
|
|
43
|
+
if ((0, date_fns_1.getUnixTime)(toDate) <= (0, date_fns_1.getUnixTime)(new Date())) {
|
|
44
|
+
return defaults_1.defaultDuration;
|
|
45
|
+
}
|
|
46
|
+
toDate.setSeconds(toDate.getSeconds());
|
|
47
|
+
const d = (0, date_fns_1.intervalToDuration)({
|
|
48
|
+
start: Date.now(),
|
|
49
|
+
end: toDate,
|
|
50
|
+
});
|
|
51
|
+
const days = (0, date_fns_1.differenceInDays)(toDate, Date.now());
|
|
52
|
+
const hours = (d === null || d === void 0 ? void 0 : d.hours) || 0;
|
|
53
|
+
const minutes = (d === null || d === void 0 ? void 0 : d.minutes) || 0;
|
|
54
|
+
const seconds = (d === null || d === void 0 ? void 0 : d.seconds) || 0;
|
|
55
|
+
const lastHour = days === 0 && hours === 0;
|
|
56
|
+
const lastMinute = lastHour && minutes === 0;
|
|
57
|
+
return {
|
|
58
|
+
days,
|
|
59
|
+
hours,
|
|
60
|
+
minutes,
|
|
61
|
+
seconds,
|
|
62
|
+
lastMinute,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
exports.getDurationFromNow = getDurationFromNow;
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=utils.js.map
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { differenceInDays, getUnixTime, intervalToDuration } from \"date-fns\";\nimport { defaultDuration } from \"./defaults\";\nimport type { TimeleftDuration } from \"./types\";\n\n// calculates the current timeleft duration.\nexport const getDuration = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n\n// Helper: Adds `seconds` to the current time and returns the resulting date.\nexport const secondsFromNow = (seconds: number): Date => {\n const end = new Date();\n end.setSeconds(end.getSeconds() + seconds);\n return end;\n};\n\n// Helper: Calculates the duration between the current time and the provided date.\nexport const getDurationFromNow = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n"]}
|
package/cjs/util.d.ts
ADDED
|
File without changes
|
package/cjs/util.js
ADDED
package/cjs/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/util.ts"],"names":[],"mappings":"","file":"util.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\n"]}
|
package/mjs/index.d.ts
CHANGED
package/mjs/index.js
CHANGED
package/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":"AAGA,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from \"./useEffectIgnoreInitial\";\nexport * from \"./useOnResize\";\nexport * from \"./useOutsideAlerter\";\nexport * from \"./useSize\";\nexport * from \"./
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":"AAGA,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from \"./useEffectIgnoreInitial\";\nexport * from \"./useOnResize\";\nexport * from \"./useOutsideAlerter\";\nexport * from \"./useSize\";\nexport * from \"./useTimeLeft\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/defaults.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { TimeleftDuration } from \"./types\";\n\nexport const defaultDuration: TimeleftDuration = {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n lastMinute: false,\n};\n\nexport const defaultRefreshInterval = 60;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAwB,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC;IAG3C,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC,CAAC;IAGF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAGF,MAAM,WAAW,GAAG,CAAC,CAAoB,EAAe,EAAE;QACxD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAgB;YACvB,IAAI;YACJ,KAAK;YACL,OAAO;SACR,CAAC;QACF,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,OAAO;YACL,GAAG;SACJ,CAAC;IACJ,CAAC,CAAC;IAGF,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAc,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAGzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,WAAW,EAAE,CAAC,CAAC;IAGrE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAE5C,SAAS,CAAC,CAAC;IACb,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAE5C,SAAS,CAAC,CAAC;IACb,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAG3C,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3B,IAAI,UAAU,EAAE,EAAE,CAAC;YAEjB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;oBAChC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;wBAClB,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;wBACtC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;oBAC7D,CAAC;oBACD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7B,CAAC,EAAE,IAAI,CAAC,CAAC;gBAET,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;aAEI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,IAAI,UAAU,EAAE,EAAE,CAAC;oBACjB,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;oBACtC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;gBAC7D,CAAC;gBACD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,mBAAmB,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IAG/D,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAGpB,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3B,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC,EACD,EAAE,CACH,CAAC;IAGF,MAAM,UAAU,GAAG,CAAC,QAAc,EAAE,MAAY,EAAE,EAAE;QAClD,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { setStateWithRef } from \"@w3ux/utils\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type {\n TimeLeftAll,\n TimeLeftRaw,\n TimeleftDuration,\n UseTimeleftProps,\n} from \"./types\";\nimport { getDuration } from \"./utils\";\n\nexport const useTimeLeft = (props?: UseTimeleftProps) => {\n const depsTimeleft = props?.depsTimeleft || [];\n const depsFormat = props?.depsFormat || [];\n\n // check whether timeleft is within a minute of finishing.\n const inLastHour = () => {\n const { days, hours } = getDuration(toRef.current);\n return !days && !hours;\n };\n\n // get the amount of seconds left if timeleft is in the last minute.\n const lastMinuteCountdown = () => {\n const { seconds } = getDuration(toRef.current);\n if (!inLastHour()) {\n return 60;\n }\n return seconds;\n };\n\n // calculate resulting timeleft object from latest duration.\n const getTimeleft = (c?: TimeleftDuration): TimeLeftAll => {\n const { days, hours, minutes, seconds } = c || getDuration(toRef.current);\n const raw: TimeLeftRaw = {\n days,\n hours,\n minutes,\n };\n if (!days && !hours) {\n raw.seconds = seconds;\n }\n return {\n raw,\n };\n };\n\n // the end time as a date.\n const [to, setTo] = useState<Date | null>(null);\n const toRef = useRef(to);\n\n // resulting timeleft object to be returned.\n const [timeleft, setTimeleft] = useState<TimeLeftAll>(getTimeleft());\n\n // timeleft refresh intervals.\n const [minInterval, setMinInterval] = useState<\n ReturnType<typeof setInterval> | undefined\n >(undefined);\n const minIntervalRef = useRef(minInterval);\n\n const [secInterval, setSecInterval] = useState<\n ReturnType<typeof setInterval> | undefined\n >(undefined);\n const secIntervalRef = useRef(secInterval);\n\n // refresh effects.\n useEffect(() => {\n setTimeleft(getTimeleft());\n if (inLastHour()) {\n // refresh timeleft every second.\n if (!secIntervalRef.current) {\n const interval = setInterval(() => {\n if (!inLastHour()) {\n clearInterval(secIntervalRef.current);\n setStateWithRef(undefined, setSecInterval, secIntervalRef);\n }\n setTimeleft(getTimeleft());\n }, 1000);\n\n setStateWithRef(interval, setSecInterval, secIntervalRef);\n }\n }\n // refresh timeleft every minute.\n else if (!minIntervalRef.current) {\n const interval = setInterval(() => {\n if (inLastHour()) {\n clearInterval(minIntervalRef.current);\n setStateWithRef(undefined, setMinInterval, minIntervalRef);\n }\n setTimeleft(getTimeleft());\n }, 60000);\n setStateWithRef(interval, setMinInterval, minIntervalRef);\n }\n }, [to, inLastHour(), lastMinuteCountdown(), ...depsTimeleft]);\n\n // re-render the timeleft upon formatting changes.\n useEffect(() => {\n setTimeleft(getTimeleft());\n }, [...depsFormat]);\n\n // clear intervals on unmount\n useEffect(\n () => () => {\n clearInterval(minInterval);\n clearInterval(secInterval);\n },\n []\n );\n\n // Set the end time and calculate timeleft.\n const setFromNow = (dateFrom: Date, dateTo: Date) => {\n setTimeleft(getTimeleft(getDuration(dateFrom)));\n setStateWithRef(dateTo, setTo, toRef);\n };\n\n return {\n setFromNow,\n timeleft,\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport interface UseTimeleftProps {\n // Dependencies to trigger re-calculation of timeleft.\n depsTimeleft: unknown[];\n // Dependencies to trigger re-render of timeleft, e.g. if language switching occurs.\n depsFormat: unknown[];\n}\n\nexport interface TimeleftDuration {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n lastMinute: boolean;\n}\n\nexport interface TimeLeftRaw {\n days: number;\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\nexport interface TimeLeftFormatted {\n days: [number, string];\n hours: [number, string];\n minutes: [number, string];\n seconds?: [number, string];\n}\n\nexport interface TimeLeftAll {\n raw: TimeLeftRaw;\n}\n\nexport interface TimeleftHookProps {\n refreshInterval: number;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TimeleftDuration } from "./types";
|
|
2
|
+
export declare const getDuration: (toDate: Date | null) => TimeleftDuration;
|
|
3
|
+
export declare const secondsFromNow: (seconds: number) => Date;
|
|
4
|
+
export declare const getDurationFromNow: (toDate: Date | null) => TimeleftDuration;
|
|
@@ -26,6 +26,37 @@ export const getDuration = (toDate) => {
|
|
|
26
26
|
lastMinute,
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
+
export const secondsFromNow = (seconds) => {
|
|
30
|
+
const end = new Date();
|
|
31
|
+
end.setSeconds(end.getSeconds() + seconds);
|
|
32
|
+
return end;
|
|
33
|
+
};
|
|
34
|
+
export const getDurationFromNow = (toDate) => {
|
|
35
|
+
if (!toDate) {
|
|
36
|
+
return defaultDuration;
|
|
37
|
+
}
|
|
38
|
+
if (getUnixTime(toDate) <= getUnixTime(new Date())) {
|
|
39
|
+
return defaultDuration;
|
|
40
|
+
}
|
|
41
|
+
toDate.setSeconds(toDate.getSeconds());
|
|
42
|
+
const d = intervalToDuration({
|
|
43
|
+
start: Date.now(),
|
|
44
|
+
end: toDate,
|
|
45
|
+
});
|
|
46
|
+
const days = differenceInDays(toDate, Date.now());
|
|
47
|
+
const hours = d?.hours || 0;
|
|
48
|
+
const minutes = d?.minutes || 0;
|
|
49
|
+
const seconds = d?.seconds || 0;
|
|
50
|
+
const lastHour = days === 0 && hours === 0;
|
|
51
|
+
const lastMinute = lastHour && minutes === 0;
|
|
52
|
+
return {
|
|
53
|
+
days,
|
|
54
|
+
hours,
|
|
55
|
+
minutes,
|
|
56
|
+
seconds,
|
|
57
|
+
lastMinute,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
29
60
|
|
|
30
61
|
//# sourceMappingURL=utils.js.map
|
|
31
62
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useTimeLeft/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAmB,EAAoB,EAAE;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QACjB,GAAG,EAAE,MAAM;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI;QACJ,KAAK;QACL,OAAO;QACP,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAQ,EAAE;IACtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAoB,EAAE;IAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QACjB,GAAG,EAAE,MAAM;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI;QACJ,KAAK;QACL,OAAO;QACP,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { differenceInDays, getUnixTime, intervalToDuration } from \"date-fns\";\nimport { defaultDuration } from \"./defaults\";\nimport type { TimeleftDuration } from \"./types\";\n\n// calculates the current timeleft duration.\nexport const getDuration = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n\n// Helper: Adds `seconds` to the current time and returns the resulting date.\nexport const secondsFromNow = (seconds: number): Date => {\n const end = new Date();\n end.setSeconds(end.getSeconds() + seconds);\n return end;\n};\n\n// Helper: Calculates the duration between the current time and the provided date.\nexport const getDurationFromNow = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n"]}
|
package/mjs/util.d.ts
ADDED
|
File without changes
|
package/mjs/util.js
ADDED
package/mjs/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/util.ts"],"names":[],"mappings":"","file":"util.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w3ux/hooks",
|
|
3
|
-
"version": "1.3.1-beta.
|
|
3
|
+
"version": "1.3.1-beta.2",
|
|
4
4
|
"license": "GPL-3.0-only",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@w3ux/utils": "^1.1.1-beta.9",
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
".": {
|
|
13
13
|
"import": "./mjs/index.js",
|
|
14
14
|
"require": "./cjs/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./utils": {
|
|
17
|
+
"import": "./mjs/utils/index.js",
|
|
18
|
+
"require": "./cjs/utils/index.js"
|
|
15
19
|
}
|
|
16
20
|
},
|
|
17
21
|
"peerDependencies": {
|
package/cjs/useTimeleft/utils.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDuration = void 0;
|
|
4
|
-
const date_fns_1 = require("date-fns");
|
|
5
|
-
const defaults_1 = require("./defaults");
|
|
6
|
-
const getDuration = (toDate) => {
|
|
7
|
-
if (!toDate) {
|
|
8
|
-
return defaults_1.defaultDuration;
|
|
9
|
-
}
|
|
10
|
-
if ((0, date_fns_1.getUnixTime)(toDate) <= (0, date_fns_1.getUnixTime)(new Date())) {
|
|
11
|
-
return defaults_1.defaultDuration;
|
|
12
|
-
}
|
|
13
|
-
toDate.setSeconds(toDate.getSeconds());
|
|
14
|
-
const d = (0, date_fns_1.intervalToDuration)({
|
|
15
|
-
start: Date.now(),
|
|
16
|
-
end: toDate,
|
|
17
|
-
});
|
|
18
|
-
const days = (0, date_fns_1.differenceInDays)(toDate, Date.now());
|
|
19
|
-
const hours = (d === null || d === void 0 ? void 0 : d.hours) || 0;
|
|
20
|
-
const minutes = (d === null || d === void 0 ? void 0 : d.minutes) || 0;
|
|
21
|
-
const seconds = (d === null || d === void 0 ? void 0 : d.seconds) || 0;
|
|
22
|
-
const lastHour = days === 0 && hours === 0;
|
|
23
|
-
const lastMinute = lastHour && minutes === 0;
|
|
24
|
-
return {
|
|
25
|
-
days,
|
|
26
|
-
hours,
|
|
27
|
-
minutes,
|
|
28
|
-
seconds,
|
|
29
|
-
lastMinute,
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
exports.getDuration = getDuration;
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=utils.js.map
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useTimeleft/utils.ts"],"names":[],"mappings":";;;AAGA,uCAA6E;AAC7E,yCAA6C;AAItC,MAAM,WAAW,GAAG,CAAC,MAAmB,EAAoB,EAAE;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,0BAAe,CAAC;IACzB,CAAC;IACD,IAAI,IAAA,sBAAW,EAAC,MAAM,CAAC,IAAI,IAAA,sBAAW,EAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,0BAAe,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAA,6BAAkB,EAAC;QAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QACjB,GAAG,EAAE,MAAM;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAA,2BAAgB,EAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,KAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,KAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,KAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI;QACJ,KAAK;QACL,OAAO;QACP,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,WAAW,eA4BtB","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { differenceInDays, getUnixTime, intervalToDuration } from \"date-fns\";\nimport { defaultDuration } from \"./defaults\";\nimport type { TimeleftDuration } from \"./types\";\n\n// calculates the current timeleft duration.\nexport const getDuration = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/useTimeleft/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAmB,EAAoB,EAAE;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QACjB,GAAG,EAAE,MAAM;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI;QACJ,KAAK;QACL,OAAO;QACP,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC","file":"utils.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { differenceInDays, getUnixTime, intervalToDuration } from \"date-fns\";\nimport { defaultDuration } from \"./defaults\";\nimport type { TimeleftDuration } from \"./types\";\n\n// calculates the current timeleft duration.\nexport const getDuration = (toDate: Date | null): TimeleftDuration => {\n if (!toDate) {\n return defaultDuration;\n }\n if (getUnixTime(toDate) <= getUnixTime(new Date())) {\n return defaultDuration;\n }\n\n toDate.setSeconds(toDate.getSeconds());\n const d = intervalToDuration({\n start: Date.now(),\n end: toDate,\n });\n\n const days = differenceInDays(toDate, Date.now());\n const hours = d?.hours || 0;\n const minutes = d?.minutes || 0;\n const seconds = d?.seconds || 0;\n const lastHour = days === 0 && hours === 0;\n const lastMinute = lastHour && minutes === 0;\n\n return {\n days,\n hours,\n minutes,\n seconds,\n lastMinute,\n };\n};\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|