Skip to content

Commit ebeb712

Browse files
author
Muhammet Ozturk
committed
- add gifs
- add props
1 parent 1f3a491 commit ebeb712

23 files changed

+425
-32
lines changed

README.md

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
This library for dedecting device type from parent dom.
44

5+
Demo : http://panoramic-cake.surge.sh/
6+
57
## Getting started
68

79
1. Install with yarn:
@@ -14,4 +16,91 @@ This library for dedecting device type from parent dom.
1416

1517
```shell
1618
npm install react-element-based-device-dedector
17-
```
19+
```
20+
21+
## Usage
22+
23+
```jsx
24+
import React, { Component } from 'react';
25+
import { render } from 'react-dom';
26+
import ReactResizeDetector from 'react-resize-detector';
27+
import ElementBasedDeviceDedector from 'element-based-device-dedector';
28+
29+
const devices = [
30+
{
31+
name: 'mobile1',
32+
breakpointPx: 300,
33+
},
34+
{
35+
name: 'mobile2',
36+
breakpointPx: 400,
37+
},
38+
{
39+
name: 'mobile3',
40+
breakpointPx: 500,
41+
},
42+
{
43+
name: 'mobile4',
44+
breakpointPx: 600,
45+
},
46+
];
47+
48+
class App extends PureComponent {
49+
state = {
50+
type: null,
51+
lastBreakpoint: null,
52+
};
53+
54+
handleChangeType = (name, lastBreakpoint) => {
55+
// set state or do whatever want
56+
this.setState({
57+
type : name,
58+
lastBreakpoint,
59+
});
60+
};
61+
62+
render() {
63+
return (
64+
<div>
65+
...
66+
<ElementBasedDeviceDedector onChangeType={this.handleChangeType}/>
67+
</div>
68+
);
69+
}
70+
71+
onResize = () => {
72+
...
73+
}
74+
}
75+
76+
render(<App />, document.getElementById('root'));
77+
```
78+
79+
## Storybook Examles
80+
```shell
81+
git clone https://github.com/hlthi/react-element-based-device-dedector.git
82+
cd react-element-based-device-dedector
83+
yarn storybook
84+
```
85+
86+
## Example Gifs
87+
- Middle
88+
![](middle.gif)
89+
90+
- Small
91+
![](small.gif)
92+
93+
- Full
94+
![](full.gif)
95+
96+
Live : http://panoramic-cake.surge.sh/
97+
98+
## API
99+
100+
| Prop | Type | Description | Default |
101+
| ------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
102+
| onChangeType | Func | Function that will be invoked with `name` and `lastBreakpointPx` arguments | n/a |
103+
| skipOnMount | Bool | Do not trigger onChangeType when a component mounts | `false` |
104+
| resizableElementId | String | Id of the element we want to observe. If none provided, parentElement of the component will be used | `undefined` |
105+
| refreshMode | String | Possible values: `throttle` and `debounce` See [lodash docs](https://lodash.com/docs#debounce) for more information. `undefined` - means that callback will be fired as often as ResizeObserver allows | `undefined` |
106+
| refreshRate | Number | Only makes sense when `refreshMode` is set. Important! It's a numeric prop so set it accordingly, e.g. `refreshRate={500}` | `1000` |

full.gif

1.19 MB
Loading

middle.gif

5.07 MB
Loading

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,21 @@
2525
},
2626
"devDependencies": {
2727
"@babel/cli": "^7.1.5",
28-
"react": "^16.6.3",
29-
"react-dom": "^16.6.3",
30-
"react-scripts": "2.1.1",
28+
"@babel/core": "^7.1.6",
29+
"@storybook/addon-actions": "^4.0.9",
30+
"@storybook/addon-links": "^4.0.9",
31+
"@storybook/addons": "^4.0.9",
32+
"@storybook/react": "^4.0.9",
33+
"babel-loader": "^8.0.4",
3134
"eslint-config-airbnb": "^17.1.0",
3235
"eslint-config-prettier": "^3.3.0",
3336
"eslint-plugin-import": "^2.14.0",
3437
"eslint-plugin-jsx-a11y": "^6.1.2",
3538
"eslint-plugin-prettier": "^3.0.0",
3639
"prettier": "^1.15.2",
37-
"@storybook/react": "^4.0.9",
38-
"@storybook/addon-actions": "^4.0.9",
39-
"@storybook/addon-links": "^4.0.9",
40-
"@storybook/addons": "^4.0.9",
41-
"@babel/core": "^7.1.6",
42-
"babel-loader": "^8.0.4"
40+
"react": "^16.6.3",
41+
"react-dom": "^16.6.3",
42+
"react-scripts": "2.1.1"
4343
},
4444
"scripts": {
4545
"start": "react-scripts start",

small.gif

3.69 MB
Loading

src/lib/ElementBasedDeviceDedector.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,13 @@ class ElementBasedDeviceDedector extends PureComponent {
4141
};
4242

4343
render() {
44-
const { refreshRate } = this.props;
45-
return <ReactResizeDetector handleWidth onResize={this.onResize} refreshRate={refreshRate} />;
44+
const { refreshRate, ...otherProps } = this.props;
45+
return <ReactResizeDetector handleWidth onResize={this.onResize} {...otherProps} />;
4646
}
4747
}
4848

4949
ElementBasedDeviceDedector.propTypes = {
5050
onChangeType: PropTypes.func.isRequired,
51-
refreshRate: PropTypes.number,
5251
devices: PropTypes.arrayOf(
5352
PropTypes.shape({
5453
name: PropTypes.string,
@@ -58,7 +57,6 @@ ElementBasedDeviceDedector.propTypes = {
5857
};
5958

6059
ElementBasedDeviceDedector.defaultProps = {
61-
refreshRate: 500,
6260
devices: [
6361
{
6462
name: 'mobile',

src/stories/index.js

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,10 @@
11
import React from 'react';
2-
32
import { storiesOf } from '@storybook/react';
4-
import { action } from '@storybook/addon-actions';
5-
import { linkTo } from '@storybook/addon-links';
6-
7-
import { Button, Welcome } from '@storybook/react/demo';
83
import FullWidthExample from '../examples/FullWidthExample';
94
import SmallWidthExample from '../examples/SmallWidthExample';
105
import MiddleExample from '../examples/MiddleExample';
116

12-
storiesOf('Welcome', module).add('to Storybook', () => <Welcome showApp={linkTo('Button')} />);
13-
14-
storiesOf('Button', module)
15-
.add('with text', () => <Button onClick={action('clicked')}>Hello Button</Button>)
16-
.add('with some emoji', () => (
17-
<Button onClick={action('clicked')}>
18-
<span role="img" aria-label="so cool">
19-
😀 😎 👍 💯
20-
</span>
21-
</Button>
22-
));
23-
24-
storiesOf('Full Width', module)
7+
storiesOf('Examples', module)
258
.add('Full', () => <FullWidthExample />)
269
.add('Small Size', () => <SmallWidthExample />)
2710
.add('Middle', () => <MiddleExample />);

storybook-static/favicon.ico

3.78 KB
Binary file not shown.

storybook-static/iframe.css

Lines changed: 68 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

storybook-static/iframe.css.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)