@rescui/use-resize-observer 0.1.6 → 0.2.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/README.md +24 -0
- package/lib/index.d.ts +1 -1
- package/lib/use-resize-observer.d.ts +5 -2
- package/lib/use-resize-observer.js +13 -5
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -40,3 +40,27 @@ const MyComponent = () => {
|
|
|
40
40
|
return <div ref={setEl}>To the moon!</div>;
|
|
41
41
|
};
|
|
42
42
|
```
|
|
43
|
+
|
|
44
|
+
### Ignore first call
|
|
45
|
+
|
|
46
|
+
Sometimes you need to observe only changes and ignore the first observer call.
|
|
47
|
+
|
|
48
|
+
In that case, you may use the `ignoreFirstCall` option:
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
import React, { useState } from 'react';
|
|
52
|
+
import { useResizeObserver } from '@rescui/use-resize-observer';
|
|
53
|
+
|
|
54
|
+
const MyComponent = () => {
|
|
55
|
+
const ref = useRef<HTMLElement>(null);
|
|
56
|
+
useResizeObserver(
|
|
57
|
+
ref,
|
|
58
|
+
(entry: ResizeObserverEntry) => {
|
|
59
|
+
// resize logic
|
|
60
|
+
},
|
|
61
|
+
{ ignoreFirstCall: true }
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
return <div ref={ref}>To the moon!</div>;
|
|
65
|
+
};
|
|
66
|
+
```
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { useResizeObserver } from './use-resize-observer';
|
|
2
|
-
export type { Callback } from './use-resize-observer';
|
|
2
|
+
export type { UseResizeObserverCallback as Callback, UseResizeObserverCallback, UseResizeObserverOptions } from './use-resize-observer';
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare type
|
|
3
|
-
export declare
|
|
2
|
+
export declare type UseResizeObserverCallback = (entry: ResizeObserverEntry) => void;
|
|
3
|
+
export declare type UseResizeObserverOptions = {
|
|
4
|
+
ignoreFirstCall?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const useResizeObserver: <T extends Element>(target: T | React.RefObject<T> | null, callback: UseResizeObserverCallback, options?: UseResizeObserverOptions) => void;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { useRef, useEffect } from 'react';
|
|
2
2
|
|
|
3
3
|
var useResizeObserver = function useResizeObserver(target, callback) {
|
|
4
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
5
|
+
ignoreFirstCall: false
|
|
6
|
+
};
|
|
4
7
|
var cb = useRef();
|
|
5
8
|
cb.current = callback;
|
|
9
|
+
var ignoreFirstCall = options.ignoreFirstCall;
|
|
6
10
|
useEffect(function () {
|
|
7
11
|
if (!target) {
|
|
8
12
|
return;
|
|
@@ -21,15 +25,19 @@ var useResizeObserver = function useResizeObserver(target, callback) {
|
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
var firstCall = true;
|
|
24
|
-
var abort = false;
|
|
28
|
+
var abort = false; // eslint-disable-next-line complexity
|
|
25
29
|
|
|
26
30
|
var onResize = function onResize(entries) {
|
|
27
31
|
// on the first call, delay it by a frame, see https://stackoverflow.com/a/58701523
|
|
28
32
|
if (firstCall) {
|
|
29
33
|
firstCall = false;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
if (!ignoreFirstCall) {
|
|
36
|
+
window.requestAnimationFrame(function () {
|
|
37
|
+
onResize(entries);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
33
41
|
return;
|
|
34
42
|
}
|
|
35
43
|
|
|
@@ -49,7 +57,7 @@ var useResizeObserver = function useResizeObserver(target, callback) {
|
|
|
49
57
|
abort = true;
|
|
50
58
|
resizeObserver.disconnect();
|
|
51
59
|
};
|
|
52
|
-
}, [target]);
|
|
60
|
+
}, [target, ignoreFirstCall]);
|
|
53
61
|
};
|
|
54
62
|
|
|
55
63
|
export { useResizeObserver };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rescui/use-resize-observer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "ResizeObserver hook",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "JetBrains",
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"react": ">=16.8.0 <19"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@rescui/scripts": "^0.
|
|
24
|
+
"@rescui/scripts": "^0.3.0"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "rescui-scripts build"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "51da8a7188f4c558c563065a4ff4ef5c8e74994c"
|
|
30
30
|
}
|