Add prop ButtonComponent (#36)

*  Add prop buttonComponent

Allow users to use their own button component

* 🐛 Make it work as expected

* 📝 Add ButtonComponent to the Props table

* ✏️ Capitalize ButtonComponent in index.d.ts
This commit is contained in:
Charles-Henri GUERIN 2019-02-26 13:23:17 +01:00 committed by Rick van Lieshout
parent 0a5e4ea440
commit ee24754fc8
5 changed files with 381 additions and 43 deletions

View File

@ -98,6 +98,7 @@ One of the props (onAccept) is a function, this function will be called after th
| buttonStyle | object | [look at source][buttonStyle] | React styling object for the button. | | buttonStyle | object | [look at source][buttonStyle] | React styling object for the button. |
| contentStyle | object | [look at source][contentStyle] | React styling object for the content. | | contentStyle | object | [look at source][contentStyle] | React styling object for the content. |
| disableButtonStyles | boolean | false | If enabled the button will have no default style. (you can still supply style through props) | | disableButtonStyles | boolean | false | If enabled the button will have no default style. (you can still supply style through props) |
| ButtonComponent | React component | button | React Component to render as a button.
## Debugging it ## Debugging it

1
build/index.d.ts vendored
View File

@ -23,6 +23,7 @@ export interface CookieConsentProps {
acceptOnScrollPercentage?: number; acceptOnScrollPercentage?: number;
extraCookieOptions?: object; extraCookieOptions?: object;
disableButtonStyles ?: boolean; disableButtonStyles ?: boolean;
ButtonComponent?: Function | React.ReactElement;
} }
export default class CookieConsent extends React.Component<CookieConsentProps, {}> {} export default class CookieConsent extends React.Component<CookieConsentProps, {}> {}

View File

@ -64,7 +64,7 @@ module.exports =
/******/ __webpack_require__.p = ""; /******/ __webpack_require__.p = "";
/******/ /******/
/******/ // Load entry module and return exports /******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 5); /******/ return __webpack_require__(__webpack_require__.s = 6);
/******/ }) /******/ })
/************************************************************************/ /************************************************************************/
/******/ ([ /******/ ([
@ -280,6 +280,21 @@ module.exports = ReactPropTypesSecret;
/* 2 */ /* 2 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {
if (process.env.NODE_ENV === 'production') {
module.exports = __webpack_require__(12);
} else {
module.exports = __webpack_require__(11);
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
* JavaScript Cookie v2.2.0 * JavaScript Cookie v2.2.0
* https://github.com/js-cookie/js-cookie * https://github.com/js-cookie/js-cookie
@ -452,7 +467,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
/***/ }), /***/ }),
/* 3 */ /* 4 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process) {/** /* WEBPACK VAR INJECTION */(function(process) {/**
@ -463,37 +478,28 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
*/ */
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && var ReactIs = __webpack_require__(2);
Symbol.for &&
Symbol.for('react.element')) ||
0xeac7;
var isValidElement = function(object) {
return typeof object === 'object' &&
object !== null &&
object.$$typeof === REACT_ELEMENT_TYPE;
};
// By explicitly using `prop-types` you are opting into new development behavior. // By explicitly using `prop-types` you are opting into new development behavior.
// http://fb.me/prop-types-in-prod // http://fb.me/prop-types-in-prod
var throwOnDirectAccess = true; var throwOnDirectAccess = true;
module.exports = __webpack_require__(9)(isValidElement, throwOnDirectAccess); module.exports = __webpack_require__(10)(ReactIs.isElement, throwOnDirectAccess);
} else { } else {
// By explicitly using `prop-types` you are opting into new production behavior. // By explicitly using `prop-types` you are opting into new production behavior.
// http://fb.me/prop-types-in-prod // http://fb.me/prop-types-in-prod
module.exports = __webpack_require__(8)(); module.exports = __webpack_require__(9)();
} }
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }), /***/ }),
/* 4 */ /* 5 */
/***/ (function(module, exports) { /***/ (function(module, exports) {
module.exports = require("react"); module.exports = require("react");
/***/ }), /***/ }),
/* 5 */ /* 6 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -508,20 +514,22 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(4); var _react = __webpack_require__(5);
var _react2 = _interopRequireDefault(_react); var _react2 = _interopRequireDefault(_react);
var _propTypes = __webpack_require__(3); var _propTypes = __webpack_require__(4);
var _propTypes2 = _interopRequireDefault(_propTypes); var _propTypes2 = _interopRequireDefault(_propTypes);
var _jsCookie = __webpack_require__(2); var _jsCookie = __webpack_require__(3);
var _jsCookie2 = _interopRequireDefault(_jsCookie); var _jsCookie2 = _interopRequireDefault(_jsCookie);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
@ -672,7 +680,8 @@ var CookieConsent = function (_Component) {
contentClasses = _props3.contentClasses, contentClasses = _props3.contentClasses,
buttonClasses = _props3.buttonClasses, buttonClasses = _props3.buttonClasses,
buttonId = _props3.buttonId, buttonId = _props3.buttonId,
disableButtonStyles = _props3.disableButtonStyles; disableButtonStyles = _props3.disableButtonStyles,
ButtonComponent = _props3.ButtonComponent;
var myStyle = {}; var myStyle = {};
@ -719,7 +728,7 @@ var CookieConsent = function (_Component) {
this.props.children this.props.children
), ),
_react2.default.createElement( _react2.default.createElement(
"button", ButtonComponent,
{ {
style: myButtonStyle, style: myButtonStyle,
className: buttonClasses, className: buttonClasses,
@ -760,7 +769,8 @@ CookieConsent.propTypes = {
acceptOnScroll: _propTypes2.default.bool, acceptOnScroll: _propTypes2.default.bool,
acceptOnScrollPercentage: _propTypes2.default.number, acceptOnScrollPercentage: _propTypes2.default.number,
extraCookieOptions: _propTypes2.default.object, extraCookieOptions: _propTypes2.default.object,
disableButtonStyles: _propTypes2.default.bool disableButtonStyles: _propTypes2.default.bool,
ButtonComponent: _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.element])
}; };
CookieConsent.defaultProps = { CookieConsent.defaultProps = {
@ -780,14 +790,24 @@ CookieConsent.defaultProps = {
buttonClasses: "", buttonClasses: "",
buttonId: "", buttonId: "",
extraCookieOptions: {}, extraCookieOptions: {},
disableButtonStyles: false disableButtonStyles: false,
ButtonComponent: function ButtonComponent(_ref) {
var children = _ref.children,
props = _objectWithoutProperties(_ref, ["children"]);
return _react2.default.createElement(
"button",
props,
children
);
}
}; };
exports.default = CookieConsent; exports.default = CookieConsent;
exports.Cookies = _jsCookie2.default; exports.Cookies = _jsCookie2.default;
/***/ }), /***/ }),
/* 6 */ /* 7 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -884,7 +904,7 @@ module.exports = shouldUseNative() ? Object.assign : function (target, source) {
/***/ }), /***/ }),
/* 7 */ /* 8 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -902,6 +922,7 @@ var printWarning = function() {};
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
var ReactPropTypesSecret = __webpack_require__(1); var ReactPropTypesSecret = __webpack_require__(1);
var loggedTypeFailures = {}; var loggedTypeFailures = {};
var has = Function.call.bind(Object.prototype.hasOwnProperty);
printWarning = function(text) { printWarning = function(text) {
var message = 'Warning: ' + text; var message = 'Warning: ' + text;
@ -931,7 +952,7 @@ if (process.env.NODE_ENV !== 'production') {
function checkPropTypes(typeSpecs, values, location, componentName, getStack) { function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
for (var typeSpecName in typeSpecs) { for (var typeSpecName in typeSpecs) {
if (typeSpecs.hasOwnProperty(typeSpecName)) { if (has(typeSpecs, typeSpecName)) {
var error; var error;
// Prop type validation may throw. In case they do, we don't want to // Prop type validation may throw. In case they do, we don't want to
// fail the render phase where it didn't fail before. So we log it. // fail the render phase where it didn't fail before. So we log it.
@ -959,8 +980,7 @@ function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
'You may have forgotten to pass an argument to the type checker ' + 'You may have forgotten to pass an argument to the type checker ' +
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
'shape all require an argument).' 'shape all require an argument).'
) );
} }
if (error instanceof Error && !(error.message in loggedTypeFailures)) { if (error instanceof Error && !(error.message in loggedTypeFailures)) {
// Only monitor this failure once because there tends to be a lot of the // Only monitor this failure once because there tends to be a lot of the
@ -978,12 +998,23 @@ function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
} }
} }
/**
* Resets warning cache when testing.
*
* @private
*/
checkPropTypes.resetWarningCache = function() {
if (process.env.NODE_ENV !== 'production') {
loggedTypeFailures = {};
}
}
module.exports = checkPropTypes; module.exports = checkPropTypes;
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }), /***/ }),
/* 8 */ /* 9 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -999,6 +1030,8 @@ module.exports = checkPropTypes;
var ReactPropTypesSecret = __webpack_require__(1); var ReactPropTypesSecret = __webpack_require__(1);
function emptyFunction() {} function emptyFunction() {}
function emptyFunctionWithReset() {}
emptyFunctionWithReset.resetWarningCache = emptyFunction;
module.exports = function() { module.exports = function() {
function shim(props, propName, componentName, location, propFullName, secret) { function shim(props, propName, componentName, location, propFullName, secret) {
@ -1032,16 +1065,19 @@ module.exports = function() {
any: shim, any: shim,
arrayOf: getShim, arrayOf: getShim,
element: shim, element: shim,
elementType: shim,
instanceOf: getShim, instanceOf: getShim,
node: shim, node: shim,
objectOf: getShim, objectOf: getShim,
oneOf: getShim, oneOf: getShim,
oneOfType: getShim, oneOfType: getShim,
shape: getShim, shape: getShim,
exact: getShim exact: getShim,
checkPropTypes: emptyFunctionWithReset,
resetWarningCache: emptyFunction
}; };
ReactPropTypes.checkPropTypes = emptyFunction;
ReactPropTypes.PropTypes = ReactPropTypes; ReactPropTypes.PropTypes = ReactPropTypes;
return ReactPropTypes; return ReactPropTypes;
@ -1049,7 +1085,7 @@ module.exports = function() {
/***/ }), /***/ }),
/* 9 */ /* 10 */
/***/ (function(module, exports, __webpack_require__) { /***/ (function(module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -1062,11 +1098,13 @@ module.exports = function() {
var assign = __webpack_require__(6); var ReactIs = __webpack_require__(2);
var assign = __webpack_require__(7);
var ReactPropTypesSecret = __webpack_require__(1); var ReactPropTypesSecret = __webpack_require__(1);
var checkPropTypes = __webpack_require__(7); var checkPropTypes = __webpack_require__(8);
var has = Function.call.bind(Object.prototype.hasOwnProperty);
var printWarning = function() {}; var printWarning = function() {};
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
@ -1177,6 +1215,7 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
any: createAnyTypeChecker(), any: createAnyTypeChecker(),
arrayOf: createArrayOfTypeChecker, arrayOf: createArrayOfTypeChecker,
element: createElementTypeChecker(), element: createElementTypeChecker(),
elementType: createElementTypeTypeChecker(),
instanceOf: createInstanceTypeChecker, instanceOf: createInstanceTypeChecker,
node: createNodeChecker(), node: createNodeChecker(),
objectOf: createObjectOfTypeChecker, objectOf: createObjectOfTypeChecker,
@ -1330,6 +1369,18 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
return createChainableTypeChecker(validate); return createChainableTypeChecker(validate);
} }
function createElementTypeTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
if (!ReactIs.isValidElementType(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createInstanceTypeChecker(expectedClass) { function createInstanceTypeChecker(expectedClass) {
function validate(props, propName, componentName, location, propFullName) { function validate(props, propName, componentName, location, propFullName) {
if (!(props[propName] instanceof expectedClass)) { if (!(props[propName] instanceof expectedClass)) {
@ -1344,7 +1395,16 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
function createEnumTypeChecker(expectedValues) { function createEnumTypeChecker(expectedValues) {
if (!Array.isArray(expectedValues)) { if (!Array.isArray(expectedValues)) {
process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : void 0; if (process.env.NODE_ENV !== 'production') {
if (arguments.length > 1) {
printWarning(
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
);
} else {
printWarning('Invalid argument supplied to oneOf, expected an array.');
}
}
return emptyFunctionThatReturnsNull; return emptyFunctionThatReturnsNull;
} }
@ -1356,8 +1416,14 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
} }
} }
var valuesString = JSON.stringify(expectedValues); var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); var type = getPreciseType(value);
if (type === 'symbol') {
return String(value);
}
return value;
});
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
} }
return createChainableTypeChecker(validate); return createChainableTypeChecker(validate);
} }
@ -1373,7 +1439,7 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
} }
for (var key in propValue) { for (var key in propValue) {
if (propValue.hasOwnProperty(key)) { if (has(propValue, key)) {
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error instanceof Error) { if (error instanceof Error) {
return error; return error;
@ -1530,6 +1596,11 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
return true; return true;
} }
// falsy value can't be a Symbol
if (!propValue) {
return false;
}
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
if (propValue['@@toStringTag'] === 'Symbol') { if (propValue['@@toStringTag'] === 'Symbol') {
return true; return true;
@ -1604,6 +1675,7 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
} }
ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.checkPropTypes = checkPropTypes;
ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
ReactPropTypes.PropTypes = ReactPropTypes; ReactPropTypes.PropTypes = ReactPropTypes;
return ReactPropTypes; return ReactPropTypes;
@ -1611,5 +1683,262 @@ module.exports = function(isValidElement, throwOnDirectAccess) {
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0))) /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {/** @license React v16.8.3
* react-is.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (process.env.NODE_ENV !== "production") {
(function() {
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
var hasSymbol = typeof Symbol === 'function' && Symbol.for;
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
function isValidElementType(type) {
return typeof type === 'string' || typeof type === 'function' ||
// Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);
}
/**
* Forked from fbjs/warning:
* https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js
*
* Only change is we use console.warn instead of console.error,
* and do nothing when 'console' is not supported.
* This really simplifies the code.
* ---
* Similar to invariant but only logs a warning if the condition is not met.
* This can be used to log issues in development environments in critical
* paths. Removing the logging code for production environments will keep the
* same logic and follow the same code paths.
*/
var lowPriorityWarning = function () {};
{
var printWarning = function (format) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
var argIndex = 0;
var message = 'Warning: ' + format.replace(/%s/g, function () {
return args[argIndex++];
});
if (typeof console !== 'undefined') {
console.warn(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) {}
};
lowPriorityWarning = function (condition, format) {
if (format === undefined) {
throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');
}
if (!condition) {
for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
args[_key2 - 2] = arguments[_key2];
}
printWarning.apply(undefined, [format].concat(args));
}
};
}
var lowPriorityWarning$1 = lowPriorityWarning;
function typeOf(object) {
if (typeof object === 'object' && object !== null) {
var $$typeof = object.$$typeof;
switch ($$typeof) {
case REACT_ELEMENT_TYPE:
var type = object.type;
switch (type) {
case REACT_ASYNC_MODE_TYPE:
case REACT_CONCURRENT_MODE_TYPE:
case REACT_FRAGMENT_TYPE:
case REACT_PROFILER_TYPE:
case REACT_STRICT_MODE_TYPE:
case REACT_SUSPENSE_TYPE:
return type;
default:
var $$typeofType = type && type.$$typeof;
switch ($$typeofType) {
case REACT_CONTEXT_TYPE:
case REACT_FORWARD_REF_TYPE:
case REACT_PROVIDER_TYPE:
return $$typeofType;
default:
return $$typeof;
}
}
case REACT_LAZY_TYPE:
case REACT_MEMO_TYPE:
case REACT_PORTAL_TYPE:
return $$typeof;
}
}
return undefined;
}
// AsyncMode is deprecated along with isAsyncMode
var AsyncMode = REACT_ASYNC_MODE_TYPE;
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
var ContextConsumer = REACT_CONTEXT_TYPE;
var ContextProvider = REACT_PROVIDER_TYPE;
var Element = REACT_ELEMENT_TYPE;
var ForwardRef = REACT_FORWARD_REF_TYPE;
var Fragment = REACT_FRAGMENT_TYPE;
var Lazy = REACT_LAZY_TYPE;
var Memo = REACT_MEMO_TYPE;
var Portal = REACT_PORTAL_TYPE;
var Profiler = REACT_PROFILER_TYPE;
var StrictMode = REACT_STRICT_MODE_TYPE;
var Suspense = REACT_SUSPENSE_TYPE;
var hasWarnedAboutDeprecatedIsAsyncMode = false;
// AsyncMode should be deprecated
function isAsyncMode(object) {
{
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
hasWarnedAboutDeprecatedIsAsyncMode = true;
lowPriorityWarning$1(false, 'The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
}
}
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
}
function isConcurrentMode(object) {
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
}
function isContextConsumer(object) {
return typeOf(object) === REACT_CONTEXT_TYPE;
}
function isContextProvider(object) {
return typeOf(object) === REACT_PROVIDER_TYPE;
}
function isElement(object) {
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
function isForwardRef(object) {
return typeOf(object) === REACT_FORWARD_REF_TYPE;
}
function isFragment(object) {
return typeOf(object) === REACT_FRAGMENT_TYPE;
}
function isLazy(object) {
return typeOf(object) === REACT_LAZY_TYPE;
}
function isMemo(object) {
return typeOf(object) === REACT_MEMO_TYPE;
}
function isPortal(object) {
return typeOf(object) === REACT_PORTAL_TYPE;
}
function isProfiler(object) {
return typeOf(object) === REACT_PROFILER_TYPE;
}
function isStrictMode(object) {
return typeOf(object) === REACT_STRICT_MODE_TYPE;
}
function isSuspense(object) {
return typeOf(object) === REACT_SUSPENSE_TYPE;
}
exports.typeOf = typeOf;
exports.AsyncMode = AsyncMode;
exports.ConcurrentMode = ConcurrentMode;
exports.ContextConsumer = ContextConsumer;
exports.ContextProvider = ContextProvider;
exports.Element = Element;
exports.ForwardRef = ForwardRef;
exports.Fragment = Fragment;
exports.Lazy = Lazy;
exports.Memo = Memo;
exports.Portal = Portal;
exports.Profiler = Profiler;
exports.StrictMode = StrictMode;
exports.Suspense = Suspense;
exports.isValidElementType = isValidElementType;
exports.isAsyncMode = isAsyncMode;
exports.isConcurrentMode = isConcurrentMode;
exports.isContextConsumer = isContextConsumer;
exports.isContextProvider = isContextProvider;
exports.isElement = isElement;
exports.isForwardRef = isForwardRef;
exports.isFragment = isFragment;
exports.isLazy = isLazy;
exports.isMemo = isMemo;
exports.isPortal = isPortal;
exports.isProfiler = isProfiler;
exports.isStrictMode = isStrictMode;
exports.isSuspense = isSuspense;
})();
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/** @license React v16.8.3
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports,"__esModule",{value:!0});
var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?Symbol.for("react.memo"):
60115,r=b?Symbol.for("react.lazy"):60116;function t(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case r:case q:case d:return u}}}function v(a){return t(a)===m}exports.typeOf=t;exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;
exports.Fragment=e;exports.Lazy=r;exports.Memo=q;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||"object"===typeof a&&null!==a&&(a.$$typeof===r||a.$$typeof===q||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n)};exports.isAsyncMode=function(a){return v(a)||t(a)===l};exports.isConcurrentMode=v;exports.isContextConsumer=function(a){return t(a)===k};
exports.isContextProvider=function(a){return t(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return t(a)===n};exports.isFragment=function(a){return t(a)===e};exports.isLazy=function(a){return t(a)===r};exports.isMemo=function(a){return t(a)===q};exports.isPortal=function(a){return t(a)===d};exports.isProfiler=function(a){return t(a)===g};exports.isStrictMode=function(a){return t(a)===f};
exports.isSuspense=function(a){return t(a)===p};
/***/ }) /***/ })
/******/ ]); /******/ ]);

1
src/index.d.ts vendored
View File

@ -23,6 +23,7 @@ export interface CookieConsentProps {
acceptOnScrollPercentage?: number; acceptOnScrollPercentage?: number;
extraCookieOptions?: object; extraCookieOptions?: object;
disableButtonStyles ?: boolean; disableButtonStyles ?: boolean;
ButtonComponent?: Function | React.ReactElement;
} }
export default class CookieConsent extends React.Component<CookieConsentProps, {}> {} export default class CookieConsent extends React.Component<CookieConsentProps, {}> {}

View File

@ -121,7 +121,8 @@ class CookieConsent extends Component {
contentClasses, contentClasses,
buttonClasses, buttonClasses,
buttonId, buttonId,
disableButtonStyles disableButtonStyles,
ButtonComponent
} = this.props; } = this.props;
let myStyle = {}; let myStyle = {};
@ -165,7 +166,7 @@ class CookieConsent extends Component {
<div style={myContentStyle} className={contentClasses}> <div style={myContentStyle} className={contentClasses}>
{this.props.children} {this.props.children}
</div> </div>
<button <ButtonComponent
style={myButtonStyle} style={myButtonStyle}
className={buttonClasses} className={buttonClasses}
id={buttonId} id={buttonId}
@ -174,7 +175,7 @@ class CookieConsent extends Component {
}} }}
> >
{buttonText} {buttonText}
</button> </ButtonComponent>
</div> </div>
); );
} }
@ -209,7 +210,11 @@ CookieConsent.propTypes = {
acceptOnScroll: PropTypes.bool, acceptOnScroll: PropTypes.bool,
acceptOnScrollPercentage: PropTypes.number, acceptOnScrollPercentage: PropTypes.number,
extraCookieOptions: PropTypes.object, extraCookieOptions: PropTypes.object,
disableButtonStyles: PropTypes.bool disableButtonStyles: PropTypes.bool,
ButtonComponent: PropTypes.oneOfType([
PropTypes.func,
PropTypes.element
]),
}; };
CookieConsent.defaultProps = { CookieConsent.defaultProps = {
@ -229,7 +234,8 @@ CookieConsent.defaultProps = {
buttonClasses: "", buttonClasses: "",
buttonId: "", buttonId: "",
extraCookieOptions: {}, extraCookieOptions: {},
disableButtonStyles: false disableButtonStyles: false,
ButtonComponent: ({ children, ...props }) => <button {...props}>{children}</button>,
}; };
export default CookieConsent; export default CookieConsent;