From 3a39d64e8c8c747bab089eed6cb029c6a9d212ad Mon Sep 17 00:00:00 2001 From: Alexander Fedyashov Date: Mon, 11 Sep 2017 06:33:13 +0300 Subject: [PATCH] feat(Responsive): add component (#1872) * feat(Breakpoint): add component * feat(Breakpoint): add component * feat(Breakpoint): add component * style(Breakpoint): prefix bools with "is" * refactor(Breakpoint): rename Responsive * style(mixed): fix lint issues * feat(Responsive): refactor component * revert(customPropTypes): reverned unnecessary changes --- .../Types/ResponsiveExampleContent.js | 38 ++++++ .../Types/ResponsiveExampleMaxWidth.js | 15 +++ .../Types/ResponsiveExampleMinWidth.js | 15 +++ .../Types/ResponsiveExampleMixed.js | 10 ++ .../Types/ResponsiveExampleResponsive.js | 10 ++ .../Examples/addons/Responsive/Types/index.js | 41 ++++++ .../Usage/ResponsiveExampleBreakpoints.js | 14 ++ .../Usage/ResponsiveExampleOnUpdate.js | 53 ++++++++ .../Examples/addons/Responsive/Usage/index.js | 21 +++ docs/app/Examples/addons/Responsive/index.js | 13 ++ index.d.ts | 5 + src/addons/Responsive/Responsive.d.ts | 44 +++++++ src/addons/Responsive/Responsive.js | 121 ++++++++++++++++++ src/addons/Responsive/index.d.ts | 1 + src/addons/Responsive/index.js | 1 + src/index.js | 1 + src/lib/eventStack.js | 8 +- .../addons/Responsive/Responsive-test.js | 77 +++++++++++ test/specs/commonTests/isConformant.js | 14 +- 19 files changed, 493 insertions(+), 9 deletions(-) create mode 100644 docs/app/Examples/addons/Responsive/Types/ResponsiveExampleContent.js create mode 100644 docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMaxWidth.js create mode 100644 docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMinWidth.js create mode 100644 docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMixed.js create mode 100644 docs/app/Examples/addons/Responsive/Types/ResponsiveExampleResponsive.js create mode 100644 docs/app/Examples/addons/Responsive/Types/index.js create mode 100644 docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleBreakpoints.js create mode 100644 docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleOnUpdate.js create mode 100644 docs/app/Examples/addons/Responsive/Usage/index.js create mode 100644 docs/app/Examples/addons/Responsive/index.js create mode 100644 src/addons/Responsive/Responsive.d.ts create mode 100644 src/addons/Responsive/Responsive.js create mode 100644 src/addons/Responsive/index.d.ts create mode 100644 src/addons/Responsive/index.js create mode 100644 test/specs/addons/Responsive/Responsive-test.js diff --git a/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleContent.js b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleContent.js new file mode 100644 index 0000000000..ad951be010 --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleContent.js @@ -0,0 +1,38 @@ +import React, { Component } from 'react' +import { Responsive, Button, Menu } from 'semantic-ui-react' + +export default class ResponsiveExampleContent extends Component { + state = { active: 'home' } + + handleItemClick = (e, { name }) => this.setState({ active: name }) + + render() { + const { active } = this.state + + return ( + + + + + + + + + + + + ) + } +} diff --git a/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMaxWidth.js b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMaxWidth.js new file mode 100644 index 0000000000..08bd71af08 --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMaxWidth.js @@ -0,0 +1,15 @@ +import React from 'react' +import { Responsive, Segment } from 'semantic-ui-react' + +const ResponsiveExampleMaxWidth = () => ( + + + Visible only if display has 767px width and lower + + + Visible only if display has 2569px width + + +) + +export default ResponsiveExampleMaxWidth diff --git a/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMinWidth.js b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMinWidth.js new file mode 100644 index 0000000000..5875fa8e57 --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMinWidth.js @@ -0,0 +1,15 @@ +import React from 'react' +import { Responsive, Segment } from 'semantic-ui-react' + +const ResponsiveExampleMinWidth = () => ( + + + Visible only if display has 768px width and higher + + + Visible only if display has 992px width and higher + + +) + +export default ResponsiveExampleMinWidth diff --git a/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMixed.js b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMixed.js new file mode 100644 index 0000000000..4584563b49 --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleMixed.js @@ -0,0 +1,10 @@ +import React from 'react' +import { Responsive, Segment } from 'semantic-ui-react' + +const ResponsiveExampleMixed = () => ( + + Visible only if display has width between 320px and 2559px + +) + +export default ResponsiveExampleMixed diff --git a/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleResponsive.js b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleResponsive.js new file mode 100644 index 0000000000..78c1883cad --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/ResponsiveExampleResponsive.js @@ -0,0 +1,10 @@ +import React from 'react' +import { Responsive, Segment } from 'semantic-ui-react' + +const ResponsiveExampleResponsive = () => ( + + I'm always visible by default + +) + +export default ResponsiveExampleResponsive diff --git a/docs/app/Examples/addons/Responsive/Types/index.js b/docs/app/Examples/addons/Responsive/Types/index.js new file mode 100644 index 0000000000..94a474bc1a --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Types/index.js @@ -0,0 +1,41 @@ +import React from 'react' +import { Message } from 'semantic-ui-react' + +import ComponentExample from 'docs/app/Components/ComponentDoc/ComponentExample' +import ExampleSection from 'docs/app/Components/ComponentDoc/ExampleSection' + +const ResponsiveTypesExamples = () => ( + + + + Instead of Grid visibility breakpoints, Responsive doesn't render invisible content. + + + + + + + +) + +export default ResponsiveTypesExamples diff --git a/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleBreakpoints.js b/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleBreakpoints.js new file mode 100644 index 0000000000..f2b7d56fd4 --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleBreakpoints.js @@ -0,0 +1,14 @@ +import React from 'react' +import { Responsive, Segment } from 'semantic-ui-react' + +const ResponsiveExampleBreakpoints = () => ( + + Mobile + Tablet + Computer + Large Screen + Widescreen + +) + +export default ResponsiveExampleBreakpoints diff --git a/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleOnUpdate.js b/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleOnUpdate.js new file mode 100644 index 0000000000..02bf1d303e --- /dev/null +++ b/docs/app/Examples/addons/Responsive/Usage/ResponsiveExampleOnUpdate.js @@ -0,0 +1,53 @@ +import React, { Component } from 'react' +import { Button, Grid, Label, Responsive, Segment } from 'semantic-ui-react' + +export default class ResponsiveExampleOnUpdate extends Component { + state = { + log: [], + logCount: 0, + } + + handleOnUpdate = () => this.setState({ + log: [ + `${new Date().toLocaleTimeString()}: onUpdate()`, + ...this.state.log, + ].slice(0, 20), + logCount: this.state.logCount + 1, + }) + + clearLog = () => this.setState({ log: [], logCount: 0 }) + + render() { + const { log, logCount } = this.state + + return ( + + + + Responsive Segment + + + + + + +