Skip to content

Commit

Permalink
fix: fix conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
ttys026 committed Oct 11, 2019
2 parents ea3218f + 7ed180f commit be749a9
Show file tree
Hide file tree
Showing 17 changed files with 177 additions and 7 deletions.
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
...fabric.default.rules,
"no-restricted-syntax": "off",
"no-plusplus": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-object-literal-type-assertion": "off",
}
};
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
"pub:doc": "now --prod"
},
"dependencies": {
"react-use": "^10.6.2"
"react-use": "^10.6.2",

"resize-observer-polyfill": "^1.5.1"
},
"peerDependencies": {
"antd": "^3.20.1",
Expand Down
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import useDynamicList from './useDynamicList';
import useEventEmitter from './useEventEmitter';
import useVirtualList from './useVirtualList';
import { configResponsive, useResponsive } from './useResponsive';
import useSize from './useSize';
import useLocalStorageState from './useLocalStorageState';

export {
Expand All @@ -22,6 +23,7 @@ export {
useResponsive,
useEventEmitter,
useLocalStorageState,
useSize,
configResponsive,
configRequest,
};
1 change: 1 addition & 0 deletions src/useAPI/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useAPI
route: /useAPI
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useAntdTable/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useAntdTable
route: /useAntdTable
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useAsync/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useAsync
route: /useAsync
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useControlledValue/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useControlledValue
route: /useControlledValue
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
7 changes: 2 additions & 5 deletions src/useControlledValue/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ export interface Props {
[key: string]: any;
}

export default function useControlledValue<T>(
props: Props = {},
options: Options = {},
): [T, (v: T) => void] {
export default function useControlledValue<T>(props: Props = {}, options: Options = {}) {
const {
defaultValuePropName = 'defaultValue',
valuePropName = 'value',
Expand Down Expand Up @@ -55,5 +52,5 @@ export default function useControlledValue<T>(
[props, valuePropName, trigger],
);

return [state, handleSetState];
return [state, handleSetState] as const;
}
1 change: 1 addition & 0 deletions src/useDynamicList/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useDynamicList
route: /useDynamicList
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useEventEmitter/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useEventEmitter
route: /useEventEmitter
menu: '高阶 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useLoadMore/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useLoadMore
route: /useLoadMore
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
2 changes: 1 addition & 1 deletion src/useLocalStorageState/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ export default function useLocalStorageState<T extends string = string>(
setState(value);
}
}
return [state, updateState] as [typeof state, typeof updateState];
return [state, updateState] as const;
}
1 change: 1 addition & 0 deletions src/useResponsive/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useResponsive
route: /useResponsive
menu: '基础 hooks'
edit: false
sidebar: true
---
Expand Down
1 change: 1 addition & 0 deletions src/useSearch/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: useSearch
route: /useSearch
menu: '中台 hooks'
edit: false
sidebar: true
---
Expand Down
22 changes: 22 additions & 0 deletions src/useSize/__test__/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { renderHook, act } from '@testing-library/react-hooks';
import useSize from '../index';

// test about Resize Observer see https://github.com/que-etc/resize-observer-polyfill/tree/master/tests
describe('useSearch', () => {
it('should be defined', () => {
expect(useSize).toBeDefined();
});
it('without argument ', () => {
const hook = renderHook(() => useSize());
expect(hook.result.current.length).toEqual(2);
expect(hook.result.current[0].width).toEqual(0);
expect(hook.result.current[0].height).toEqual(0);
expect(hook.result.current[1].current).toEqual(undefined);
});
it('with argument', () => {
const hook = renderHook(() => useSize<HTMLBodyElement>(document.body));
expect(hook.result.current.length).toEqual(1);
expect(hook.result.current[0].width).toEqual(0);
expect(hook.result.current[0].height).toEqual(0);
});
});
93 changes: 93 additions & 0 deletions src/useSize/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
---
name: useSize
route: /useSize
menu: '基础 hooks'
edit: false
sidebar: true
---

import { Playground } from 'docz';
import useSize from './index';

# useSize

一个用于监听 dom 节点尺寸变化的 Hook

## 代码演示

### 基本用法

<Playground>
{
() => {
function Demo() {
const [state, ref] = useSize()
return (
<div ref={ref}>
try to resize the preview window <br />
dimensions -- width: {state.width} px, height: {state.height} px
</div>
)
}
return <Demo />
}
}
</Playground>

### 懒加载(用于监听同一组件内后渲染节点)

<Playground>
{
() => {
function Demo() {
const [state] = useSize(()=>document.querySelector('#demo2'))
return (
<div id='demo2'>
try to resize the preview window <br />
dimensions -- width: {state.width} px, height: {state.height} px
</div>
)
}
return <Demo />
}
}
</Playground>

### 监听提前渲染节点

<Playground>
{
() => {
function Demo() {
const [state] = useSize(document.querySelector('body'));
return (
<div>
this demo is listening to body size change, try to resize the window instead <br />
dimensions -- width: {state.width} px, height: {state.height} px
</div>
)
}
return <Demo />
}
}
</Playground>

## API

```
const [ state, ref? ] = useSize(dom);
dom?: HTMLElement | (() => HTMLElement)
```

### 结果

| 参数 | 说明 | 类型 |
|----------|------------------------------------------|------------|
| state | dom 节点的尺寸 | { width: number, height: number } |
| ref | 当未传入任何参数时,将 ref 绑定给需监听的节点 | - |

### 参数

| 参数 | 说明 | 类型 | 默认值 |
|---------|----------------------------------------------|------------------------|--------|
| dom? | 可选项,如果未传入则会监听返回结果中的 ref,否则会监听传入的节点 | HTMLElement \| (() => HTMLElement) \| undefined | - |
44 changes: 44 additions & 0 deletions src/useSize/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { useState, useRef, MutableRefObject, useLayoutEffect } from 'react';
import ResizeObserver from 'resize-observer-polyfill';

type Arg = HTMLElement | (() => HTMLElement) | null;

type Size = { width: number; height: number };

function useSize<T extends HTMLElement = HTMLElement>(): [Size, MutableRefObject<T>];
function useSize<T extends HTMLElement = HTMLElement>(arg: Arg): [Size];
function useSize<T extends HTMLElement = HTMLElement>(
...args: [Arg] | []
): [Size, MutableRefObject<T>?] {
const element = useRef<T>();
const [state, setState] = useState<Size>({ width: 0, height: 0 });
const hasPassedInElement = args.length === 1;
const arg = args[0];

useLayoutEffect(() => {
const passedInElement = typeof arg === 'function' ? arg() : arg;

const targetElement = hasPassedInElement ? passedInElement : element.current;
if (!targetElement) {
return () => {};
}

const resizeObserver = new ResizeObserver(entries => {
entries.forEach(entry => {
setState({ width: entry.target.clientWidth, height: entry.target.clientHeight });
});
});

resizeObserver.observe(targetElement);
return () => {
resizeObserver.disconnect();
};
}, [element.current, typeof arg === 'function' ? undefined : arg]);

if (hasPassedInElement) {
return [state];
}
return [state, element as MutableRefObject<T>];
}

export default useSize;

0 comments on commit be749a9

Please sign in to comment.