@jobber/hooks 2.17.4 → 2.18.0
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/dist/index.cjs +49 -0
- package/dist/index.mjs +23 -0
- package/dist/isObjectLike-cjs.js +228 -0
- package/dist/isObjectLike-es.js +219 -0
- package/dist/useBool/index.cjs +8 -0
- package/dist/useBool/index.mjs +2 -0
- package/dist/useBool-cjs.js +13 -0
- package/dist/useBool-es.js +11 -0
- package/dist/useBreakpoints/index.cjs +11 -0
- package/dist/useBreakpoints/index.mjs +3 -0
- package/dist/useBreakpoints/mockViewportWidth/{mockViewportWidth.js → index.cjs} +5 -4
- package/dist/useBreakpoints/mockViewportWidth/index.mjs +66 -0
- package/dist/useBreakpoints-cjs.js +48 -0
- package/dist/useBreakpoints-es.js +45 -0
- package/dist/useCallbackRef/index.cjs +8 -0
- package/dist/useCallbackRef/index.mjs +2 -0
- package/dist/useCallbackRef-cjs.js +17 -0
- package/dist/useCallbackRef-es.js +15 -0
- package/dist/useCollectionQuery/index.cjs +13 -0
- package/dist/useCollectionQuery/index.mjs +7 -0
- package/dist/useCollectionQuery/useCollectionQuery.d.ts +1 -1
- package/dist/useCollectionQuery-cjs.js +2842 -0
- package/dist/useCollectionQuery-es.js +2821 -0
- package/dist/useDebounce/index.cjs +9 -0
- package/dist/useDebounce/index.mjs +3 -0
- package/dist/useDebounce-cjs.js +92 -0
- package/dist/useDebounce-es.js +90 -0
- package/dist/useFocusTrap/index.cjs +8 -0
- package/dist/useFocusTrap/index.mjs +2 -0
- package/dist/{useFocusTrap/useFocusTrap.js → useFocusTrap-cjs.js} +8 -6
- package/dist/useFocusTrap-es.js +68 -0
- package/dist/useFormState/index.cjs +8 -0
- package/dist/useFormState/index.mjs +2 -0
- package/dist/useFormState-cjs.js +13 -0
- package/dist/useFormState-es.js +11 -0
- package/dist/useInView/index.cjs +8 -0
- package/dist/useInView/index.mjs +2 -0
- package/dist/{useInView/useInView.js → useInView-cjs.js} +10 -8
- package/dist/useInView-es.js +19 -0
- package/dist/useIsMounted/index.cjs +9 -0
- package/dist/useIsMounted/index.mjs +3 -0
- package/dist/{useIsMounted/useIsMounted.js → useIsMounted-cjs.js} +9 -7
- package/dist/useIsMounted-es.js +34 -0
- package/dist/useLiveAnnounce/index.cjs +8 -0
- package/dist/useLiveAnnounce/index.mjs +2 -0
- package/dist/{useLiveAnnounce/useLiveAnnounce.js → useLiveAnnounce-cjs.js} +8 -6
- package/dist/useLiveAnnounce-es.js +41 -0
- package/dist/useOnKeyDown/index.cjs +8 -0
- package/dist/useOnKeyDown/index.mjs +2 -0
- package/dist/{useOnKeyDown/useOnKeyDown.js → useOnKeyDown-cjs.js} +7 -5
- package/dist/useOnKeyDown-es.js +34 -0
- package/dist/useOnMount/index.cjs +9 -0
- package/dist/useOnMount/index.mjs +3 -0
- package/dist/{useOnMount/useOnMount.js → useOnMount-cjs.js} +9 -8
- package/dist/useOnMount-es.js +19 -0
- package/dist/useRefocusOnActivator/index.cjs +8 -0
- package/dist/useRefocusOnActivator/index.mjs +2 -0
- package/dist/{useRefocusOnActivator/useRefocusOnActivator.js → useRefocusOnActivator-cjs.js} +7 -5
- package/dist/useRefocusOnActivator-es.js +26 -0
- package/dist/useResizeObserver/index.cjs +10 -0
- package/dist/useResizeObserver/index.mjs +3 -0
- package/dist/useResizeObserver-cjs.js +1519 -0
- package/dist/useResizeObserver-es.js +1516 -0
- package/dist/useSafeLayoutEffect/index.cjs +8 -0
- package/dist/useSafeLayoutEffect/index.mjs +2 -0
- package/dist/useSafeLayoutEffect-cjs.js +9 -0
- package/dist/useSafeLayoutEffect-es.js +7 -0
- package/dist/useShowClear/{useShowClear.js → index.cjs} +4 -3
- package/dist/useShowClear/index.mjs +17 -0
- package/dist/useStepper/index.cjs +8 -0
- package/dist/useStepper/index.mjs +2 -0
- package/dist/{useStepper/useStepper.js → useStepper-cjs.js} +26 -14
- package/dist/useStepper-es.js +51 -0
- package/dist/useWindowDimensions/index.cjs +8 -0
- package/dist/useWindowDimensions/index.mjs +2 -0
- package/dist/{useWindowDimensions/useWindowDimensions.js → useWindowDimensions-cjs.js} +8 -6
- package/dist/useWindowDimensions-es.js +28 -0
- package/package.json +109 -7
- package/dist/index.js +0 -34
- package/dist/useBool/index.js +0 -5
- package/dist/useBool/useBool.js +0 -11
- package/dist/useBool/useBool.test.d.ts +0 -1
- package/dist/useBool/useBool.test.js +0 -28
- package/dist/useBreakpoints/index.js +0 -20
- package/dist/useBreakpoints/mockViewportWidth/index.js +0 -17
- package/dist/useBreakpoints/mockViewportWidth/mockViewportWidth.test.d.ts +0 -1
- package/dist/useBreakpoints/mockViewportWidth/mockViewportWidth.test.js +0 -17
- package/dist/useBreakpoints/useBreakpoints.js +0 -28
- package/dist/useBreakpoints/useBreakpoints.test.d.ts +0 -1
- package/dist/useBreakpoints/useBreakpoints.test.js +0 -142
- package/dist/useBreakpoints/useMediaQuery.js +0 -22
- package/dist/useCallbackRef/index.js +0 -5
- package/dist/useCallbackRef/useCallbackRef.js +0 -15
- package/dist/useCallbackRef/useCallbackRef.test.d.ts +0 -1
- package/dist/useCallbackRef/useCallbackRef.test.js +0 -29
- package/dist/useCollectionQuery/index.js +0 -5
- package/dist/useCollectionQuery/mdxUtils.js +0 -152
- package/dist/useCollectionQuery/test-utilities/index.d.ts +0 -3
- package/dist/useCollectionQuery/test-utilities/index.js +0 -19
- package/dist/useCollectionQuery/test-utilities/mocks.d.ts +0 -106
- package/dist/useCollectionQuery/test-utilities/mocks.js +0 -131
- package/dist/useCollectionQuery/test-utilities/queries.d.ts +0 -37
- package/dist/useCollectionQuery/test-utilities/queries.js +0 -59
- package/dist/useCollectionQuery/test-utilities/utils.d.ts +0 -1
- package/dist/useCollectionQuery/test-utilities/utils.js +0 -17
- package/dist/useCollectionQuery/uniqueEdges.js +0 -18
- package/dist/useCollectionQuery/uniqueNodes.js +0 -10
- package/dist/useCollectionQuery/useCollectionQuery.js +0 -194
- package/dist/useCollectionQuery/useCollectionQuery.test.d.ts +0 -1
- package/dist/useCollectionQuery/useCollectionQuery.test.js +0 -357
- package/dist/useDebounce/index.js +0 -5
- package/dist/useDebounce/useDebounce.js +0 -29
- package/dist/useDebounce/useDebounce.test.d.ts +0 -1
- package/dist/useDebounce/useDebounce.test.js +0 -190
- package/dist/useFocusTrap/index.js +0 -5
- package/dist/useFocusTrap/useFocusTrap.test.d.ts +0 -1
- package/dist/useFocusTrap/useFocusTrap.test.js +0 -61
- package/dist/useFormState/index.js +0 -5
- package/dist/useFormState/useFormState.js +0 -11
- package/dist/useInView/index.js +0 -17
- package/dist/useInView/useInView.test.d.ts +0 -1
- package/dist/useInView/useInView.test.js +0 -29
- package/dist/useIsMounted/index.js +0 -5
- package/dist/useIsMounted/useIsMounted.test.d.ts +0 -1
- package/dist/useIsMounted/useIsMounted.test.js +0 -15
- package/dist/useLiveAnnounce/index.js +0 -5
- package/dist/useLiveAnnounce/useLiveAnnounce.test.d.ts +0 -1
- package/dist/useLiveAnnounce/useLiveAnnounce.test.js +0 -60
- package/dist/useOnKeyDown/index.js +0 -5
- package/dist/useOnKeyDown/useOnKeyDown.test.d.ts +0 -1
- package/dist/useOnKeyDown/useOnKeyDown.test.js +0 -23
- package/dist/useOnMount/index.js +0 -5
- package/dist/useOnMount/useOnMount.test.d.ts +0 -1
- package/dist/useOnMount/useOnMount.test.js +0 -18
- package/dist/useRefocusOnActivator/index.js +0 -5
- package/dist/useResizeObserver/index.js +0 -17
- package/dist/useResizeObserver/useResizeObserver.js +0 -68
- package/dist/useSafeLayoutEffect/index.js +0 -5
- package/dist/useSafeLayoutEffect/useSafeLayoutEffect.js +0 -7
- package/dist/useShowClear/index.js +0 -5
- package/dist/useShowClear/useShowClear.test.d.ts +0 -1
- package/dist/useShowClear/useShowClear.test.js +0 -210
- package/dist/useStepper/index.js +0 -5
- package/dist/useStepper/useStepper.test.d.ts +0 -1
- package/dist/useStepper/useStepper.test.js +0 -79
- package/dist/useWindowDimensions/index.js +0 -5
- package/dist/useWindowDimensions/useWIndowDimensions.test.d.ts +0 -1
- package/dist/useWindowDimensions/useWIndowDimensions.test.js +0 -23
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useDebounce = void 0;
|
|
4
|
-
var useDebounce_1 = require("./useDebounce");
|
|
5
|
-
Object.defineProperty(exports, "useDebounce", { enumerable: true, get: function () { return useDebounce_1.useDebounce; } });
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useDebounce = useDebounce;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
const es_toolkit_1 = require("es-toolkit");
|
|
6
|
-
const useCallbackRef_1 = require("../useCallbackRef");
|
|
7
|
-
/**
|
|
8
|
-
* A hook to easily manage debounced functions, including their cleanup.
|
|
9
|
-
* @param func The function to debounce.
|
|
10
|
-
* @param wait The number of milliseconds to delay.
|
|
11
|
-
* @param options Optional debounce settings.
|
|
12
|
-
* @returns The debounced function.
|
|
13
|
-
*/
|
|
14
|
-
function useDebounce(func, wait, options) {
|
|
15
|
-
const funcRef = (0, useCallbackRef_1.useCallbackRef)(func);
|
|
16
|
-
// Note: do not add additional dependencies! There is currently no use case where we would change
|
|
17
|
-
// the wait delay or options between renders. By not tracking as dependencies, this allows
|
|
18
|
-
// consumers of useDebounce to provide a raw object for options rather than forcing them to
|
|
19
|
-
// memoize that param. Same with the func they provide, we're using a ref to keep that up
|
|
20
|
-
// to date and to avoid forcing the consumer to memoize it.
|
|
21
|
-
const debounced = (0, react_1.useMemo)(() => {
|
|
22
|
-
return (0, es_toolkit_1.debounce)((...args) => funcRef(...args), wait, options);
|
|
23
|
-
}, [funcRef]);
|
|
24
|
-
(0, react_1.useEffect)(() => {
|
|
25
|
-
// If the debounced function is recreated (or unmounted), cancel the last call.
|
|
26
|
-
return () => debounced.cancel();
|
|
27
|
-
}, [debounced]);
|
|
28
|
-
return debounced;
|
|
29
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
const react_1 = __importStar(require("react"));
|
|
39
|
-
const react_2 = require("@testing-library/react");
|
|
40
|
-
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
41
|
-
const useDebounce_1 = require("./useDebounce");
|
|
42
|
-
const DEBOUNCE_WAIT = 300;
|
|
43
|
-
describe("useDebounce", () => {
|
|
44
|
-
beforeEach(() => {
|
|
45
|
-
jest.useFakeTimers();
|
|
46
|
-
});
|
|
47
|
-
afterEach(() => {
|
|
48
|
-
jest.useRealTimers();
|
|
49
|
-
});
|
|
50
|
-
it("should debounce the function call", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
51
|
-
const mockFn = jest.fn();
|
|
52
|
-
const { result } = (0, react_2.renderHook)(() => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT));
|
|
53
|
-
result.current("test");
|
|
54
|
-
expect(mockFn).not.toHaveBeenCalled();
|
|
55
|
-
(0, react_2.act)(() => {
|
|
56
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT);
|
|
57
|
-
});
|
|
58
|
-
expect(mockFn).toHaveBeenCalledWith("test");
|
|
59
|
-
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
60
|
-
}));
|
|
61
|
-
it("should cancel pending debounced calls on unmount", () => {
|
|
62
|
-
const mockFn = jest.fn();
|
|
63
|
-
const { result, unmount } = (0, react_2.renderHook)(() => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT));
|
|
64
|
-
result.current("test");
|
|
65
|
-
unmount();
|
|
66
|
-
(0, react_2.act)(() => {
|
|
67
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT);
|
|
68
|
-
});
|
|
69
|
-
expect(mockFn).not.toHaveBeenCalled();
|
|
70
|
-
});
|
|
71
|
-
it("should handle multiple calls within the debounce period", () => {
|
|
72
|
-
const mockFn = jest.fn();
|
|
73
|
-
const { result } = (0, react_2.renderHook)(() => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT));
|
|
74
|
-
result.current("first");
|
|
75
|
-
(0, react_2.act)(() => {
|
|
76
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT / 2);
|
|
77
|
-
});
|
|
78
|
-
result.current("second");
|
|
79
|
-
(0, react_2.act)(() => {
|
|
80
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT);
|
|
81
|
-
});
|
|
82
|
-
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
83
|
-
expect(mockFn).toHaveBeenCalledWith("second");
|
|
84
|
-
});
|
|
85
|
-
it("should not recreate debounced function when options object reference changes", () => {
|
|
86
|
-
const mockFn = jest.fn();
|
|
87
|
-
const debounceEgdesOption = ["trailing"];
|
|
88
|
-
// Use a function that returns a new options object each time
|
|
89
|
-
const { result, rerender } = (0, react_2.renderHook)(({ options }) => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT, options), { initialProps: { options: { edges: debounceEgdesOption } } });
|
|
90
|
-
const debounceRef = result.current;
|
|
91
|
-
rerender({ options: { edges: debounceEgdesOption } });
|
|
92
|
-
expect(debounceRef).toBe(result.current);
|
|
93
|
-
});
|
|
94
|
-
it("should not recreate debounced function when options config changes", () => {
|
|
95
|
-
const mockFn = jest.fn();
|
|
96
|
-
// Largely arbitrary, this value x 2 must simply be less than the debounce wait
|
|
97
|
-
const TIME_INCREMENT_LESSER_THAN_DEBOUNCE_WAIT = 1;
|
|
98
|
-
// Start with trailing edge
|
|
99
|
-
const debounceEgdesOption = ["trailing"];
|
|
100
|
-
// Use a function that returns a new options object each time
|
|
101
|
-
const { result, rerender } = (0, react_2.renderHook)(({ options }) => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT, options), { initialProps: { options: { edges: debounceEgdesOption } } });
|
|
102
|
-
result.current("first");
|
|
103
|
-
(0, react_2.act)(() => {
|
|
104
|
-
jest.advanceTimersByTime(TIME_INCREMENT_LESSER_THAN_DEBOUNCE_WAIT);
|
|
105
|
-
});
|
|
106
|
-
expect(mockFn).not.toHaveBeenCalled();
|
|
107
|
-
// This means it calls immediately at the leading edge of the timeout.
|
|
108
|
-
rerender({ options: { edges: ["leading"] } });
|
|
109
|
-
result.current("second");
|
|
110
|
-
(0, react_2.act)(() => {
|
|
111
|
-
jest.advanceTimersByTime(TIME_INCREMENT_LESSER_THAN_DEBOUNCE_WAIT);
|
|
112
|
-
});
|
|
113
|
-
// The config change should be ignored, options are hardcoded
|
|
114
|
-
expect(mockFn).not.toHaveBeenCalled();
|
|
115
|
-
});
|
|
116
|
-
it("should work with React components", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
117
|
-
function DebouncedComponent() {
|
|
118
|
-
const [value, setValue] = (0, react_1.useState)("");
|
|
119
|
-
const [debouncedValue, setDebouncedValue] = (0, react_1.useState)("");
|
|
120
|
-
const debouncedSetValue = (0, useDebounce_1.useDebounce)((newValue) => {
|
|
121
|
-
setDebouncedValue(newValue);
|
|
122
|
-
}, DEBOUNCE_WAIT);
|
|
123
|
-
(0, react_1.useEffect)(() => {
|
|
124
|
-
debouncedSetValue(value);
|
|
125
|
-
}, [value, debouncedSetValue]);
|
|
126
|
-
return (react_1.default.createElement("div", null,
|
|
127
|
-
react_1.default.createElement("input", { "data-testid": "input", value: value, onChange: e => setValue(e.target.value) }),
|
|
128
|
-
react_1.default.createElement("div", { "data-testid": "debounced-value" }, debouncedValue)));
|
|
129
|
-
}
|
|
130
|
-
(0, react_2.render)(react_1.default.createElement(DebouncedComponent, null));
|
|
131
|
-
const input = react_2.screen.getByTestId("input");
|
|
132
|
-
const debouncedValue = react_2.screen.getByTestId("debounced-value");
|
|
133
|
-
const user = user_event_1.default.setup({ advanceTimers: jest.advanceTimersByTime });
|
|
134
|
-
yield user.type(input, "test");
|
|
135
|
-
expect(debouncedValue.textContent).toBe("");
|
|
136
|
-
(0, react_2.act)(() => {
|
|
137
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT + 100);
|
|
138
|
-
});
|
|
139
|
-
expect(debouncedValue.textContent).toBe("test");
|
|
140
|
-
}), 10000);
|
|
141
|
-
it("should properly handle options object", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
-
function DebouncedComponent() {
|
|
143
|
-
const [count, setCount] = (0, react_1.useState)(0);
|
|
144
|
-
const [debouncedCount, setDebouncedCount] = (0, react_1.useState)(0);
|
|
145
|
-
const options = {
|
|
146
|
-
edges: ["leading", "trailing"],
|
|
147
|
-
};
|
|
148
|
-
const debouncedSetCount = (0, useDebounce_1.useDebounce)((value) => {
|
|
149
|
-
setDebouncedCount(value);
|
|
150
|
-
}, DEBOUNCE_WAIT, options);
|
|
151
|
-
return (react_1.default.createElement("div", null,
|
|
152
|
-
react_1.default.createElement("button", { "data-testid": "increment", onClick: () => {
|
|
153
|
-
const newCount = count + 1;
|
|
154
|
-
setCount(newCount);
|
|
155
|
-
debouncedSetCount(newCount);
|
|
156
|
-
}, type: "button" }, "Increment"),
|
|
157
|
-
react_1.default.createElement("div", { "data-testid": "count" }, count),
|
|
158
|
-
react_1.default.createElement("div", { "data-testid": "debounced-count" }, debouncedCount)));
|
|
159
|
-
}
|
|
160
|
-
(0, react_2.render)(react_1.default.createElement(DebouncedComponent, null));
|
|
161
|
-
const incrementButton = react_2.screen.getByTestId("increment");
|
|
162
|
-
const debouncedCount = react_2.screen.getByTestId("debounced-count");
|
|
163
|
-
const user = user_event_1.default.setup({ advanceTimers: jest.advanceTimersByTime });
|
|
164
|
-
yield user.click(incrementButton);
|
|
165
|
-
// With leading edge, the value should be updated immediately
|
|
166
|
-
expect(debouncedCount.textContent).toBe("1");
|
|
167
|
-
yield user.click(incrementButton);
|
|
168
|
-
yield user.click(incrementButton);
|
|
169
|
-
// Additional clicks shouldn't update immediately (debounced)
|
|
170
|
-
expect(debouncedCount.textContent).toBe("1");
|
|
171
|
-
// After the debounce period, the trailing edge should update with the latest value
|
|
172
|
-
(0, react_2.act)(() => {
|
|
173
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT);
|
|
174
|
-
});
|
|
175
|
-
expect(debouncedCount.textContent).toBe("3");
|
|
176
|
-
}));
|
|
177
|
-
it("should abort debounced function when signal is aborted", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
178
|
-
const mockFn = jest.fn();
|
|
179
|
-
const controller = new AbortController();
|
|
180
|
-
const { result } = (0, react_2.renderHook)(() => (0, useDebounce_1.useDebounce)(mockFn, DEBOUNCE_WAIT, { signal: controller.signal }));
|
|
181
|
-
result.current("test");
|
|
182
|
-
(0, react_2.act)(() => {
|
|
183
|
-
controller.abort();
|
|
184
|
-
});
|
|
185
|
-
(0, react_2.act)(() => {
|
|
186
|
-
jest.advanceTimersByTime(DEBOUNCE_WAIT + 100);
|
|
187
|
-
});
|
|
188
|
-
expect(mockFn).not.toHaveBeenCalled();
|
|
189
|
-
}));
|
|
190
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useFocusTrap = void 0;
|
|
4
|
-
var useFocusTrap_1 = require("./useFocusTrap");
|
|
5
|
-
Object.defineProperty(exports, "useFocusTrap", { enumerable: true, get: function () { return useFocusTrap_1.useFocusTrap; } });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const react_1 = __importDefault(require("react"));
|
|
16
|
-
const react_2 = require("@testing-library/react");
|
|
17
|
-
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
18
|
-
const useFocusTrap_1 = require("./useFocusTrap");
|
|
19
|
-
const targetId = "target";
|
|
20
|
-
const firstFocusableChild = "first-element";
|
|
21
|
-
const lastFocusableChild = "last-element";
|
|
22
|
-
it("should focus on the ref target on mount", () => {
|
|
23
|
-
const { getByTestId } = (0, react_2.render)(react_1.default.createElement(TestComponent, null));
|
|
24
|
-
expect(getByTestId(targetId)).toHaveFocus();
|
|
25
|
-
});
|
|
26
|
-
it("should focus on the ref target when tabbing out of the last focusable element and ignore the tabindex'=-1'", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
-
const { getByTestId } = (0, react_2.render)(react_1.default.createElement(TestComponent, null));
|
|
28
|
-
getByTestId(lastFocusableChild).focus();
|
|
29
|
-
yield user_event_1.default.tab();
|
|
30
|
-
expect(getByTestId(targetId)).toHaveFocus();
|
|
31
|
-
}));
|
|
32
|
-
it("should focus on the first focusable element", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
-
const { getByTestId } = (0, react_2.render)(react_1.default.createElement(TestComponent, null));
|
|
34
|
-
yield user_event_1.default.tab();
|
|
35
|
-
expect(getByTestId(firstFocusableChild)).toHaveFocus();
|
|
36
|
-
}));
|
|
37
|
-
it("should focus on the last focusable element", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
-
const { getByTestId } = (0, react_2.render)(react_1.default.createElement(TestComponent, null));
|
|
39
|
-
yield user_event_1.default.tab({ shift: true });
|
|
40
|
-
expect(getByTestId(lastFocusableChild)).toHaveFocus();
|
|
41
|
-
}));
|
|
42
|
-
it("should not trap the tabbing and focus on the first child node", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
-
const { getByTestId } = (0, react_2.render)(react_1.default.createElement(TestComponent, { trap: false }));
|
|
44
|
-
yield user_event_1.default.tab();
|
|
45
|
-
expect(getByTestId(targetId).previousElementSibling).toHaveFocus();
|
|
46
|
-
}));
|
|
47
|
-
function TestComponent({ trap = true }) {
|
|
48
|
-
const testRef = (0, useFocusTrap_1.useFocusTrap)(trap);
|
|
49
|
-
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
50
|
-
react_1.default.createElement("input", { type: "number" }),
|
|
51
|
-
react_1.default.createElement("div", { ref: testRef, "data-testid": targetId, tabIndex: 0 },
|
|
52
|
-
react_1.default.createElement("button", { "data-testid": firstFocusableChild }, "Click me"),
|
|
53
|
-
react_1.default.createElement("a", { href: "#" }),
|
|
54
|
-
react_1.default.createElement("input", { type: "text" }),
|
|
55
|
-
react_1.default.createElement("select", null,
|
|
56
|
-
react_1.default.createElement("option", { value: "A" })),
|
|
57
|
-
react_1.default.createElement("textarea", null),
|
|
58
|
-
react_1.default.createElement("span", { tabIndex: 0, "data-testId": lastFocusableChild }),
|
|
59
|
-
react_1.default.createElement("span", { tabIndex: -1 })),
|
|
60
|
-
react_1.default.createElement("input", { type: "calendar" })));
|
|
61
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useFormState = void 0;
|
|
4
|
-
var useFormState_1 = require("./useFormState");
|
|
5
|
-
Object.defineProperty(exports, "useFormState", { enumerable: true, get: function () { return useFormState_1.useFormState; } });
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useFormState = useFormState;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
function useFormState() {
|
|
6
|
-
const [formState, setFormState] = (0, react_1.useState)({
|
|
7
|
-
isDirty: false,
|
|
8
|
-
isValid: false,
|
|
9
|
-
});
|
|
10
|
-
return [formState, setFormState];
|
|
11
|
-
}
|
package/dist/useInView/index.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./useInView"), exports);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const react_2 = require("@testing-library/react");
|
|
8
|
-
const jsdom_testing_mocks_1 = require("jsdom-testing-mocks");
|
|
9
|
-
const useInView_1 = require("./useInView");
|
|
10
|
-
(0, jsdom_testing_mocks_1.configMocks)({ act: react_2.act });
|
|
11
|
-
const observer = (0, jsdom_testing_mocks_1.mockIntersectionObserver)();
|
|
12
|
-
describe("useInView", () => {
|
|
13
|
-
it("should return true when the target element is in view", () => {
|
|
14
|
-
const { result, rerender } = (0, react_2.renderHook)(() => (0, useInView_1.useInView)());
|
|
15
|
-
const [ref, isInView] = result.current;
|
|
16
|
-
(0, react_2.render)(react_1.default.createElement("button", { ref: ref }));
|
|
17
|
-
rerender();
|
|
18
|
-
expect(result.current[0].current).toBeInstanceOf(HTMLButtonElement);
|
|
19
|
-
observer.leaveNode(react_2.screen.getByRole("button"));
|
|
20
|
-
expect(isInView).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
it("should return false when the target element is in view", () => {
|
|
23
|
-
const { result, rerender } = (0, react_2.renderHook)(() => (0, useInView_1.useInView)());
|
|
24
|
-
(0, react_2.render)(react_1.default.createElement("button", { ref: result.current[0] }));
|
|
25
|
-
rerender();
|
|
26
|
-
observer.enterNode(react_2.screen.getByRole("button"));
|
|
27
|
-
expect(result.current[1]).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useIsMounted = void 0;
|
|
4
|
-
var useIsMounted_1 = require("./useIsMounted");
|
|
5
|
-
Object.defineProperty(exports, "useIsMounted", { enumerable: true, get: function () { return useIsMounted_1.useIsMounted; } });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const react_hooks_1 = require("@testing-library/react-hooks");
|
|
4
|
-
const useIsMounted_1 = require("./useIsMounted");
|
|
5
|
-
it("should return true when the component is currently mounted", () => {
|
|
6
|
-
const { result } = (0, react_hooks_1.renderHook)(() => (0, useIsMounted_1.useIsMounted)());
|
|
7
|
-
const isMounted = result.current;
|
|
8
|
-
expect(isMounted.current).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
it("should return false when the component is unmounted", () => {
|
|
11
|
-
const { result, unmount } = (0, react_hooks_1.renderHook)(() => (0, useIsMounted_1.useIsMounted)());
|
|
12
|
-
const isMounted = result.current;
|
|
13
|
-
unmount();
|
|
14
|
-
expect(isMounted.current).toBe(false);
|
|
15
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useLiveAnnounce = void 0;
|
|
4
|
-
var useLiveAnnounce_1 = require("./useLiveAnnounce");
|
|
5
|
-
Object.defineProperty(exports, "useLiveAnnounce", { enumerable: true, get: function () { return useLiveAnnounce_1.useLiveAnnounce; } });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const react_1 = __importDefault(require("react"));
|
|
16
|
-
const react_2 = require("@testing-library/react");
|
|
17
|
-
const _1 = require(".");
|
|
18
|
-
function setupHook() {
|
|
19
|
-
const returnVal = {
|
|
20
|
-
liveAnnounce: jest.fn,
|
|
21
|
-
};
|
|
22
|
-
function TestComponent() {
|
|
23
|
-
Object.assign(returnVal, (0, _1.useLiveAnnounce)());
|
|
24
|
-
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
25
|
-
}
|
|
26
|
-
const { rerender } = (0, react_2.render)(react_1.default.createElement(TestComponent, null));
|
|
27
|
-
return Object.assign(Object.assign({}, returnVal), { rerenderComponent: () => rerender(react_1.default.createElement(TestComponent, null)) });
|
|
28
|
-
}
|
|
29
|
-
it("should render a div to announce", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
-
const { liveAnnounce } = setupHook();
|
|
31
|
-
const message = "Huzzah";
|
|
32
|
-
(0, react_2.act)(() => liveAnnounce(message));
|
|
33
|
-
yield (0, react_2.waitFor)(() => {
|
|
34
|
-
const expectedElement = react_2.screen.queryByRole("status");
|
|
35
|
-
expect(expectedElement).toBeInTheDocument();
|
|
36
|
-
expect(expectedElement === null || expectedElement === void 0 ? void 0 : expectedElement.textContent).toBe(message);
|
|
37
|
-
expect(expectedElement).toHaveAttribute("role", "status");
|
|
38
|
-
expect(expectedElement).toHaveAttribute("aria-atomic", "true");
|
|
39
|
-
expect(expectedElement).toHaveAttribute("aria-live", "assertive");
|
|
40
|
-
});
|
|
41
|
-
}));
|
|
42
|
-
it("should not render the announced div", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
-
setupHook();
|
|
44
|
-
expect(react_2.screen.queryByRole("status")).not.toBeInTheDocument();
|
|
45
|
-
}));
|
|
46
|
-
it("should only have 1 div to announce a message on a single instance of the hook", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
-
const { liveAnnounce } = setupHook();
|
|
48
|
-
const firstMessage = "I am first";
|
|
49
|
-
const secondMessage = "I am second";
|
|
50
|
-
(0, react_2.act)(() => liveAnnounce(firstMessage));
|
|
51
|
-
yield (0, react_2.waitFor)(() => {
|
|
52
|
-
expect(react_2.screen.queryAllByRole("status")).toHaveLength(1);
|
|
53
|
-
expect(react_2.screen.getByRole("status").textContent).toBe(firstMessage);
|
|
54
|
-
});
|
|
55
|
-
(0, react_2.act)(() => liveAnnounce(secondMessage));
|
|
56
|
-
yield (0, react_2.waitFor)(() => {
|
|
57
|
-
expect(react_2.screen.queryAllByRole("status")).toHaveLength(1);
|
|
58
|
-
expect(react_2.screen.getByRole("status").textContent).toBe(secondMessage);
|
|
59
|
-
});
|
|
60
|
-
}));
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useOnKeyDown = void 0;
|
|
4
|
-
var useOnKeyDown_1 = require("./useOnKeyDown");
|
|
5
|
-
Object.defineProperty(exports, "useOnKeyDown", { enumerable: true, get: function () { return useOnKeyDown_1.useOnKeyDown; } });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const react_2 = require("@testing-library/react");
|
|
8
|
-
const _1 = require(".");
|
|
9
|
-
test("fires the method when the key is pressed", () => {
|
|
10
|
-
const keypressCallback = jest.fn();
|
|
11
|
-
const { container } = (0, react_2.render)(react_1.default.createElement(TestComponent, { callback: keypressCallback }));
|
|
12
|
-
expect(keypressCallback).toHaveBeenCalledTimes(0);
|
|
13
|
-
(0, react_2.fireEvent)(container, new KeyboardEvent("keydown", {
|
|
14
|
-
key: "Enter",
|
|
15
|
-
bubbles: true,
|
|
16
|
-
cancelable: false,
|
|
17
|
-
}));
|
|
18
|
-
expect(keypressCallback).toHaveBeenCalledTimes(1);
|
|
19
|
-
});
|
|
20
|
-
function TestComponent({ callback }) {
|
|
21
|
-
(0, _1.useOnKeyDown)(callback, "Enter");
|
|
22
|
-
return react_1.default.createElement(react_1.default.Fragment, null, "Look at me!");
|
|
23
|
-
}
|
package/dist/useOnMount/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useOnMount = void 0;
|
|
4
|
-
var useOnMount_1 = require("./useOnMount");
|
|
5
|
-
Object.defineProperty(exports, "useOnMount", { enumerable: true, get: function () { return useOnMount_1.useOnMount; } });
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const react_1 = require("@testing-library/react");
|
|
4
|
-
const useOnMount_1 = require("./useOnMount");
|
|
5
|
-
describe("useOnMount", () => {
|
|
6
|
-
it("should call the function on mount", () => {
|
|
7
|
-
const fn = jest.fn();
|
|
8
|
-
(0, react_1.renderHook)(() => (0, useOnMount_1.useOnMount)(fn));
|
|
9
|
-
expect(fn).toHaveBeenCalledTimes(1);
|
|
10
|
-
});
|
|
11
|
-
it("should only call function once when re-rendered", () => {
|
|
12
|
-
const fn = jest.fn();
|
|
13
|
-
const view = (0, react_1.renderHook)(() => (0, useOnMount_1.useOnMount)(fn));
|
|
14
|
-
expect(fn).toHaveBeenCalledTimes(1);
|
|
15
|
-
view.rerender();
|
|
16
|
-
expect(fn).toHaveBeenCalledTimes(1);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useRefocusOnActivator = void 0;
|
|
4
|
-
var useRefocusOnActivator_1 = require("./useRefocusOnActivator");
|
|
5
|
-
Object.defineProperty(exports, "useRefocusOnActivator", { enumerable: true, get: function () { return useRefocusOnActivator_1.useRefocusOnActivator; } });
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./useResizeObserver"), exports);
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Breakpoints = void 0;
|
|
7
|
-
exports.useResizeObserver = useResizeObserver;
|
|
8
|
-
const react_1 = require("react");
|
|
9
|
-
// Importing the polyfilled version of ResizeObserver
|
|
10
|
-
// eslint-disable-next-line import/no-internal-modules
|
|
11
|
-
const polyfilled_1 = __importDefault(require("use-resize-observer/polyfilled"));
|
|
12
|
-
const throttle_1 = __importDefault(require("lodash/throttle"));
|
|
13
|
-
exports.Breakpoints = {
|
|
14
|
-
base: 640,
|
|
15
|
-
small: 500,
|
|
16
|
-
smaller: 265,
|
|
17
|
-
large: 750,
|
|
18
|
-
larger: 1024,
|
|
19
|
-
};
|
|
20
|
-
const wait = 100;
|
|
21
|
-
function useResizeObserver({ widths = exports.Breakpoints, heights = exports.Breakpoints, } = {}) {
|
|
22
|
-
const [exactSize, setSize] = (0, react_1.useState)({
|
|
23
|
-
width: undefined,
|
|
24
|
-
height: undefined,
|
|
25
|
-
});
|
|
26
|
-
const onResize = (0, react_1.useMemo)(() => {
|
|
27
|
-
return (0, throttle_1.default)(({ width, height }) => {
|
|
28
|
-
if (!width || width <= 1) {
|
|
29
|
-
// Ignore invalid values. ResizeObserver is unexpectedly looping between 1 and the actual
|
|
30
|
-
// width of the element. This is only happening in playwright chromium.
|
|
31
|
-
// Soon we need to replace this unmaintained package with a more reliable one.
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
setSize({ width, height });
|
|
35
|
-
}, wait);
|
|
36
|
-
}, []);
|
|
37
|
-
const { ref } = (0, polyfilled_1.default)({
|
|
38
|
-
onResize,
|
|
39
|
-
});
|
|
40
|
-
const exactWidth = exactSize.width;
|
|
41
|
-
const exactHeight = exactSize.height;
|
|
42
|
-
const sizes = {
|
|
43
|
-
width: getSize(widths, exactSize.width),
|
|
44
|
-
height: getSize(heights, exactSize.height),
|
|
45
|
-
exactWidth,
|
|
46
|
-
exactHeight,
|
|
47
|
-
};
|
|
48
|
-
return [ref, sizes];
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* To get the proper size we want to make sure that our value is greater
|
|
52
|
-
* then the comparable, but less then the next largest number in our
|
|
53
|
-
* object.
|
|
54
|
-
*/
|
|
55
|
-
function getSize(sizes, comparable) {
|
|
56
|
-
if (!comparable || !sizes) {
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Sort the values of our object so that we know they are in proper
|
|
61
|
-
* order to be compared by
|
|
62
|
-
*/
|
|
63
|
-
const sortedSizes = Object.values(sizes)
|
|
64
|
-
.sort((a, b) => a - b)
|
|
65
|
-
.reverse();
|
|
66
|
-
return (sortedSizes.find(value => value <= comparable) ||
|
|
67
|
-
sortedSizes[sortedSizes.length - 1]);
|
|
68
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useSafeLayoutEffect = void 0;
|
|
4
|
-
var useSafeLayoutEffect_1 = require("./useSafeLayoutEffect");
|
|
5
|
-
Object.defineProperty(exports, "useSafeLayoutEffect", { enumerable: true, get: function () { return useSafeLayoutEffect_1.useSafeLayoutEffect; } });
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useSafeLayoutEffect = void 0;
|
|
4
|
-
const react_1 = require("react");
|
|
5
|
-
exports.useSafeLayoutEffect = (globalThis === null || globalThis === void 0 ? void 0 : globalThis.document)
|
|
6
|
-
? react_1.useLayoutEffect
|
|
7
|
-
: react_1.useEffect;
|