From 6e17efd26a6790c9e06044519f355ef679b80d8d Mon Sep 17 00:00:00 2001 From: Alexander Fedyashov Date: Tue, 18 Jul 2017 11:20:04 +0300 Subject: [PATCH] feat(Breakpoint): add component --- index.d.ts | 6 ++++++ package.json | 2 +- src/addons/Breakpoint/Breakpoint.js | 4 +--- src/addons/Breakpoint/index.d.ts | 2 +- src/lib/customPropTypes.js | 12 ++++++++++-- test/specs/addons/Breakpoint/Breakpoint-test.js | 8 ++++---- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/index.d.ts b/index.d.ts index 348ff8b064..85bb7be7c1 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,4 +1,10 @@ // Addons +export { + default as Breakpoint, + BreakpointPoints, + BreakpointProps, + BreakpointOnUpdateData +} from './dist/commonjs/addons/Breakpoint'; export { default as Confirm, ConfirmProps } from './dist/commonjs/addons/Confirm'; export { default as Portal, PortalProps } from './dist/commonjs/addons/Portal'; export { default as Radio, RadioProps } from './dist/commonjs/addons/Radio'; diff --git a/package.json b/package.json index d7c7c6d741..a14b6164e2 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "satisfied": "^1.1.0", "semantic-ui-css": "^2.2.11", "simulant": "^0.2.2", - "sinon": "^2.1.0", + "sinon": "^2.3.8", "sinon-chai": "^2.11.0", "ta-scripts": "^2.5.2", "through2": "^2.0.2", diff --git a/src/addons/Breakpoint/Breakpoint.js b/src/addons/Breakpoint/Breakpoint.js index cf2481da55..4f31b6b955 100644 --- a/src/addons/Breakpoint/Breakpoint.js +++ b/src/addons/Breakpoint/Breakpoint.js @@ -114,7 +114,7 @@ export default class Breakpoint extends Component { // ---------------------------------------- visible = () => { - const { only } = this.props + const { only = '' } = this.props const points = only.replace('large screen', 'largeScreen').split(' ') return _.some(points, point => _.invoke(this, point)) @@ -147,5 +147,3 @@ export default class Breakpoint extends Component { return null } } - - diff --git a/src/addons/Breakpoint/index.d.ts b/src/addons/Breakpoint/index.d.ts index ee3195b503..0c42ac3578 100644 --- a/src/addons/Breakpoint/index.d.ts +++ b/src/addons/Breakpoint/index.d.ts @@ -1 +1 @@ -export { default, BreakpointPoints, BreakpointProps } from './Breakpoint'; +export { default, BreakpointPoints, BreakpointProps, BreakpointOnUpdateData } from './Breakpoint'; diff --git a/src/lib/customPropTypes.js b/src/lib/customPropTypes.js index a4736b1cec..0993526eef 100644 --- a/src/lib/customPropTypes.js +++ b/src/lib/customPropTypes.js @@ -241,7 +241,7 @@ export const demand = (requiredProps) => { * @param {string[]} possible An array of possible values to prop. */ export const onlyProp = possible => { - return (props, propName, componentName) => { + const typeChecker = (required, props, propName, componentName) => { if (!Array.isArray(possible)) { throw new Error([ 'Invalid argument supplied to some, expected an instance of array.', @@ -252,7 +252,10 @@ export const onlyProp = possible => { const propValue = props[propName] // skip if prop is undefined - if (_.isNil(propValue) || propValue === false) return + if (_.isNil(propValue) || propValue === false) { + if (required) throw new Error(`Required \`${propName}\` prop was not specified in \`${componentName}\`.`) + return + } const values = propValue .replace('large screen', 'large-screen') @@ -265,6 +268,11 @@ export const onlyProp = possible => { return new Error(`\`${propName}\` prop in \`${componentName}\` has invalid values: \`${invalid.join('`, `')}\`.`) } } + + const chainedCheckType = typeChecker.bind(null, false) + chainedCheckType.isRequired = typeChecker.bind(null, true) + + return chainedCheckType } /** diff --git a/test/specs/addons/Breakpoint/Breakpoint-test.js b/test/specs/addons/Breakpoint/Breakpoint-test.js index ad9e40c4d7..a759de8960 100644 --- a/test/specs/addons/Breakpoint/Breakpoint-test.js +++ b/test/specs/addons/Breakpoint/Breakpoint-test.js @@ -8,11 +8,11 @@ import { domEvent, sandbox } from 'test/utils' const { points } = Breakpoint.defaultProps const requiredProps = { only: 'mobile' } -beforeEach(() => { - sandbox.stub(window, 'innerWidth').value(points.mobile) -}) - describe('Breakpoint', () => { + beforeEach(() => { + sandbox.stub(window, 'innerWidth').value(points.mobile) + }) + common.isConformant(Breakpoint, { requiredProps }) common.rendersChildren(Breakpoint, { requiredProps })