From 6875400086139ceabb19a2318050a1b1e57dc15e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 16 Dec 2018 21:33:39 +0000 Subject: [PATCH] chore(release): 1.2.0 [skip ci] # [1.2.0](https://github.com/bootstrap-styled/toggle/compare/v1.1.0...v1.2.0) (2018-12-16) ### Features * **greekeeper:** added greenkeeper ([8d0c60e](https://github.com/bootstrap-styled/toggle/commit/8d0c60e)) --- CHANGELOG.md | 7 ++ lib/components/Toggle/ToggleOption.js | 87 ++++++++++++++ lib/components/Toggle/index.js | 106 ++++++++++++++++++ .../Toggle/tests/ToggleOption.test.js | 42 +++++++ lib/components/Toggle/tests/index.test.js | 54 +++++++++ lib/index.js | 23 ++++ lib/tests/index.test.js | 11 ++ package.json | 2 +- 8 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 lib/components/Toggle/ToggleOption.js create mode 100644 lib/components/Toggle/index.js create mode 100644 lib/components/Toggle/tests/ToggleOption.test.js create mode 100644 lib/components/Toggle/tests/index.test.js create mode 100644 lib/index.js create mode 100644 lib/tests/index.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 32d56f2..531efc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.2.0](https://github.com/bootstrap-styled/toggle/compare/v1.1.0...v1.2.0) (2018-12-16) + + +### Features + +* **greekeeper:** added greenkeeper ([8d0c60e](https://github.com/bootstrap-styled/toggle/commit/8d0c60e)) + # [1.1.0](https://github.com/bootstrap-styled/toggle/compare/v1.0.10...v1.1.0) (2018-11-23) diff --git a/lib/components/Toggle/ToggleOption.js b/lib/components/Toggle/ToggleOption.js new file mode 100644 index 0000000..be78771 --- /dev/null +++ b/lib/components/Toggle/ToggleOption.js @@ -0,0 +1,87 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _react = _interopRequireDefault(require("react")); + +var _propTypes = _interopRequireDefault(require("prop-types")); + +var _Option = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Option")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +var injectIntl; +var intlShape; // this make react-intl optional to our component and our module + +try { + var _require = require('react-intl'), + injectIntlDefault = _require.injectIntl, + intlShapeDefault = _require.intlShape; // eslint-disable-line + + + injectIntl = injectIntlDefault; // eslint-disable-line + + intlShape = intlShapeDefault; // eslint-disable-line +} catch (er) { + injectIntl = null; + intlShape = null; +} +/** + * This component is automatically used when using `` + * If you need a different option tag, instead just pass the prop `optionTag` to the `` component. + */ + + +var ToggleOption = function ToggleOption(_ref) { + var Tag = _ref.tag, + value = _ref.value, + message = _ref.message, + intl = _ref.intl, + rest = _objectWithoutProperties(_ref, ["tag", "value", "message", "intl"]); + + return _react.default.createElement(Tag, _extends({ + value: value + }, rest), message && intl ? intl.formatMessage(message) : value); +}; + +ToggleOption.defaultProps = { + tag: _Option.default +}; +/* eslint-disable react/require-default-props */ + +ToggleOption.propTypes = { + /** + * Replace the default component tag by the one specified. Can be: + */ + tag: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element, _propTypes.default.func, _propTypes.default.object]), + + /** + * The value + */ + value: _propTypes.default.string.isRequired, + + /** + * react-intl messages (optional) + */ + message: _propTypes.default.object +}; +var exported = ToggleOption; // eslint-disable-line import/no-mutable-exports + +if (intlShape) { + /** @ignore */ + ToggleOption.propTypes.intl = intlShape.isRequired; + exported = injectIntl(ToggleOption); +} + +var _default = exported; +exports.default = _default; +module.exports = exports.default; \ No newline at end of file diff --git a/lib/components/Toggle/index.js b/lib/components/Toggle/index.js new file mode 100644 index 0000000..0547699 --- /dev/null +++ b/lib/components/Toggle/index.js @@ -0,0 +1,106 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _react = _interopRequireDefault(require("react")); + +var _propTypes = _interopRequireDefault(require("prop-types")); + +var _Option = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Option")); + +var _Input = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Input")); + +var _ToggleOption = _interopRequireDefault(require("./ToggleOption")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +function Toggle(props) { + var Tag = props.tag, + OptionTag = props.optionTag, + defaultLabel = props.defaultLabel, + className = props.className, + onToggle = props.onToggle, + value = props.value, + values = props.values, + messages = props.messages, + rest = _objectWithoutProperties(props, ["tag", "optionTag", "defaultLabel", "className", "onToggle", "value", "values", "messages"]); // If we have items, render them + + + var content = !values.length ? _react.default.createElement(_Option.default, null, defaultLabel) : values.map(function (v) { + return _react.default.createElement(OptionTag, { + key: v, + value: v, + message: messages[v] + }); + }); + return _react.default.createElement(Tag, _extends({ + type: "select", + name: "select", + value: value, + onChange: onToggle, + className: className + }, rest), content); +} + +Toggle.defaultProps = { + tag: _Input.default, + optionTag: _ToggleOption.default, + defaultLabel: '--', + messages: {}, + value: '', + values: [], + onToggle: function onToggle() {} +}; +/* eslint-disable react/require-default-props */ + +Toggle.propTypes = { + /** + * Replace the default component tag by the one specified. Can be: + */ + tag: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element, _propTypes.default.object, _propTypes.default.func]), + + /** + * Replace the option component tag by the one specified. Can be: + */ + optionTag: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element, _propTypes.default.object, _propTypes.default.func]), + + /** + * Trigger when toggle + */ + onToggle: _propTypes.default.func, + + /** + * Label used by default when no selection + */ + defaultLabel: _propTypes.default.string, + + /** + * List of all possible values + */ + values: _propTypes.default.array, + + /** + * Current value + */ + value: _propTypes.default.string, + + /** @ignore */ + className: _propTypes.default.string, + + /** react-intl messages (optional) */ + messages: _propTypes.default.object +}; +/* eslint-enable react/require-default-props */ + +var _default = Toggle; +exports.default = _default; +module.exports = exports.default; \ No newline at end of file diff --git a/lib/components/Toggle/tests/ToggleOption.test.js b/lib/components/Toggle/tests/ToggleOption.test.js new file mode 100644 index 0000000..2f3619d --- /dev/null +++ b/lib/components/Toggle/tests/ToggleOption.test.js @@ -0,0 +1,42 @@ +"use strict"; + +var _react = _interopRequireDefault(require("react")); + +var _enzyme = require("enzyme"); + +var _reactIntl = require("react-intl"); + +var _ToggleOption = _interopRequireDefault(require("../ToggleOption")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/* eslint-disable function-paren-newline */ +describe('', function () { + it('should render default language messages', function () { + var defaultEnMessage = 'someContent'; + var message = (0, _reactIntl.defineMessages)({ + enMessage: { + id: 'boilerplate.containers.LocaleToggle.en', + defaultMessage: defaultEnMessage + } + }); + var renderedComponent = (0, _enzyme.shallow)(_react.default.createElement(_reactIntl.IntlProvider, { + locale: "en" + }, _react.default.createElement(_ToggleOption.default, { + value: "en", + message: message.enMessage + }))); + expect(renderedComponent.contains(_react.default.createElement(_ToggleOption.default, { + value: "en", + message: message.enMessage + }))).toBe(true); + }); + it('should display `value`(two letter language code) when `message` is absent', function () { + var renderedComponent = (0, _enzyme.mount)(_react.default.createElement(_reactIntl.IntlProvider, { + locale: "de" + }, _react.default.createElement(_ToggleOption.default, { + value: "de" + }))); + expect(renderedComponent.text()).toBe('de'); + }); +}); \ No newline at end of file diff --git a/lib/components/Toggle/tests/index.test.js b/lib/components/Toggle/tests/index.test.js new file mode 100644 index 0000000..64130a4 --- /dev/null +++ b/lib/components/Toggle/tests/index.test.js @@ -0,0 +1,54 @@ +"use strict"; + +var _react = _interopRequireDefault(require("react")); + +var _enzyme = require("enzyme"); + +var _reactIntl = require("react-intl"); + +var _Option = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Option")); + +var _index = _interopRequireDefault(require("../index")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/* eslint-disable function-paren-newline */ +describe('', function () { + it('should contain default text', function () { + var defaultEnMessage = 'someContent'; + var defaultDeMessage = 'someOtherContent'; + var messages = (0, _reactIntl.defineMessages)({ + en: { + id: 'boilerplate.containers.LocaleToggle.en', + defaultMessage: defaultEnMessage + }, + de: { + id: 'boilerplate.containers.LocaleToggle.en', + defaultMessage: defaultDeMessage + } + }); + var renderedComponent = (0, _enzyme.shallow)(_react.default.createElement(_reactIntl.IntlProvider, { + locale: "en" + }, _react.default.createElement(_index.default, { + values: ['en', 'de'], + messages: messages + }))); + expect(renderedComponent.contains(_react.default.createElement(_index.default, { + values: ['en', 'de'], + messages: messages + }))).toBe(true); + expect(renderedComponent.find('option').length).toBe(0); + }); + it('should not have ToggleOptions if props.values is not defined', function () { + var renderedComponent = (0, _enzyme.shallow)(_react.default.createElement(_index.default, null)); + expect(renderedComponent.contains(_react.default.createElement(_Option.default, null, "--"))).toBe(true); + expect(renderedComponent.find('Option').length).toBe(1); + }); + it('should have ToggleOptions if props.values is defined', function () { + var renderedComponent = (0, _enzyme.shallow)(_react.default.createElement(_index.default, { + value: "a", + values: ['a', 'b'] + })); + expect(renderedComponent.find('InjectIntl(ToggleOption)').length).toBe(2); + }); +}); \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..b88c53b --- /dev/null +++ b/lib/index.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function get() { + return _Toggle.default; + } +}); +Object.defineProperty(exports, "ToggleOption", { + enumerable: true, + get: function get() { + return _ToggleOption.default; + } +}); + +var _Toggle = _interopRequireDefault(require("./components/Toggle")); + +var _ToggleOption = _interopRequireDefault(require("./components/Toggle/ToggleOption")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/lib/tests/index.test.js b/lib/tests/index.test.js new file mode 100644 index 0000000..9fa42cb --- /dev/null +++ b/lib/tests/index.test.js @@ -0,0 +1,11 @@ +"use strict"; + +var exported = require('../index'); + +describe('should export', function () { + Object.keys(exported).forEach(function (key) { + it("".concat(key, " should be defined"), function () { + expect(exported[key]).toBeDefined(); + }); + }); +}); \ No newline at end of file diff --git a/package.json b/package.json index 10e3825..cd5471b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bootstrap-styled/toggle", - "version": "1.1.0", + "version": "1.2.0", "description": "Toggle option made with bootstrap and optionaly use react-intl or any other ui component", "main": "lib/index.js", "jsnext:main": "dist/@bootstrap-styled/toggle.es.js",