UNPKG

1.69 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import React, { useContext, useMemo } from 'react';
3var ThemeContext = /*#__PURE__*/React.createContext({});
4var Consumer = ThemeContext.Consumer,
5 Provider = ThemeContext.Provider;
6
7function ThemeProvider(_ref) {
8 var prefixes = _ref.prefixes,
9 children = _ref.children;
10 var copiedPrefixes = useMemo(function () {
11 return _extends({}, prefixes);
12 }, [prefixes]);
13 return /*#__PURE__*/React.createElement(Provider, {
14 value: copiedPrefixes
15 }, children);
16}
17
18export function useBootstrapPrefix(prefix, defaultPrefix) {
19 var prefixes = useContext(ThemeContext);
20 return prefix || prefixes[defaultPrefix] || defaultPrefix;
21}
22
23function createBootstrapComponent(Component, opts) {
24 if (typeof opts === 'string') opts = {
25 prefix: opts
26 };
27 var isClassy = Component.prototype && Component.prototype.isReactComponent; // If it's a functional component make sure we don't break it with a ref
28
29 var _opts = opts,
30 prefix = _opts.prefix,
31 _opts$forwardRefAs = _opts.forwardRefAs,
32 forwardRefAs = _opts$forwardRefAs === void 0 ? isClassy ? 'ref' : 'innerRef' : _opts$forwardRefAs;
33 var Wrapped = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
34 var props = _extends({}, _ref2);
35
36 props[forwardRefAs] = ref;
37 var bsPrefix = useBootstrapPrefix(props.bsPrefix, prefix);
38 return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
39 bsPrefix: bsPrefix
40 }));
41 });
42 Wrapped.displayName = "Bootstrap(" + (Component.displayName || Component.name) + ")";
43 return Wrapped;
44}
45
46export { createBootstrapComponent, Consumer as ThemeConsumer };
47export default ThemeProvider;
\No newline at end of file