Skip to content

Commit 3895bdf

Browse files
committed
feat: Exported some TS types
The following types were exported so that it's easier to compose hook options: - ObservedSize - ResizeHandler - ResizeObserverBoxOptions - RoundingFunction Tests were updated as well to guarantee the new API interface. Resolves #98
1 parent 614b149 commit 3895bdf

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed

src/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ import {
1010
import useResolvedElement from "./utils/useResolvedElement";
1111
import extractSize from "./utils/extractSize";
1212

13-
type ObservedSize = {
13+
export type ObservedSize = {
1414
width: number | undefined;
1515
height: number | undefined;
1616
};
1717

18-
type ResizeHandler = (size: ObservedSize) => void;
18+
export type ResizeHandler = (size: ObservedSize) => void;
1919

2020
type HookResponse<T extends Element> = {
2121
ref: RefCallback<T>;
2222
} & ObservedSize;
2323

2424
// Declaring my own type here instead of using the one provided by TS (available since 4.2.2), because this way I'm not
2525
// forcing consumers to use a specific TS version.
26-
type ResizeObserverBoxOptions =
26+
export type ResizeObserverBoxOptions =
2727
| "border-box"
2828
| "content-box"
2929
| "device-pixel-content-box";
@@ -34,7 +34,7 @@ declare global {
3434
}
3535
}
3636

37-
type RoundingFunction = (n: number) => number;
37+
export type RoundingFunction = (n: number) => number;
3838

3939
function useResizeObserver<T extends Element>(
4040
opts: {

tests/basic.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
import React, { useRef, useState } from "react";
33
import { render, cleanup, act } from "@testing-library/react";
44
import createController from "./utils/createController";
5-
import useResizeObserver from "../";
5+
import useResizeObserver, { ObservedSize, ResizeHandler } from "../";
66
import useMergedCallbackRef from "./utils/useMergedCallbackRef";
77
import awaitNextFrame from "./utils/awaitNextFrame";
8-
import { ObservedSize } from "./utils";
98
import useRenderTrigger from "./utils/useRenderTrigger";
109

1110
afterEach(() => {
@@ -341,10 +340,9 @@ describe("Basic tests", () => {
341340

342341
it("should handle if the onResize handler changes, with the correct render counts", async () => {
343342
const controller = createController();
344-
type OnResizeHandler = (size: ObservedSize) => void;
345-
let changeOnResizeHandler = (handler: OnResizeHandler) => {};
343+
let changeOnResizeHandler = (handler: ResizeHandler) => {};
346344
const Test = () => {
347-
const [onResize, setOnResize] = useState<OnResizeHandler>(() => () => {});
345+
const [onResize, setOnResize] = useState<ResizeHandler>(() => () => {});
348346
changeOnResizeHandler = (handler) => setOnResize(() => handler);
349347
const { ref, width, height } = useResizeObserver({ onResize });
350348
controller.reportMeasuredSize({ width, height });

tests/testing-lib.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
// Tests written with react testing library
22
import React, { useRef, useState, useCallback } from "react";
3-
import useResizeObserver from "../";
3+
import useResizeObserver, {
4+
ResizeHandler,
5+
ObservedSize,
6+
ResizeObserverBoxOptions,
7+
RoundingFunction,
8+
} from "../";
49
import { render, cleanup, act } from "@testing-library/react";
510
import useRenderTrigger from "./utils/useRenderTrigger";
611
import awaitNextFrame from "./utils/awaitNextFrame";
712
import createController from "./utils/createController";
813
import useMergedCallbackRef from "./utils/useMergedCallbackRef";
9-
import { ObservedSize, supports } from "./utils";
14+
import { supports } from "./utils";
1015

1116
afterEach(() => {
1217
cleanup();
@@ -77,11 +82,13 @@ describe("Testing Lib: Basics", () => {
7782
const controller = createController();
7883
const Test = () => {
7984
const ref = useRef(null);
85+
// Declaring onResize here only to test the availability and correctness of the exported `ResizeHandler` function
86+
const onResize: ResizeHandler = (size) => {
87+
controller.reportMeasuredSize(size);
88+
};
8089
useResizeObserver({
8190
ref,
82-
onResize: (size) => {
83-
controller.reportMeasuredSize(size);
84-
},
91+
onResize,
8592
});
8693

8794
return <div ref={ref} style={{ width: 10, height: 20 }} />;
@@ -577,7 +584,7 @@ describe("Testing Lib: Resize Observer Instance Counting Block", () => {
577584
};
578585
const c2 = {} as Controller;
579586
const Test = () => {
580-
const [rounder, setRounder] = useState<typeof Math.ceil | undefined>(
587+
const [rounder, setRounder] = useState<RoundingFunction | undefined>(
581588
() => Math.ceil
582589
);
583590
const { ref, width, height } = useResizeObserver<HTMLDivElement>({

tests/utils/index.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,3 @@ new ResizeObserver((entries) => {
1111
entries[0].devicePixelContentBoxSize
1212
);
1313
}).observe(document.body);
14-
15-
export type ObservedSize = {
16-
width: number | undefined;
17-
height: number | undefined;
18-
};

0 commit comments

Comments
 (0)