dash-renderer
Version:
render dash components in react
73 lines (72 loc) • 3.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DashContext = void 0;
exports.DashContextProvider = DashContextProvider;
exports.useDashContext = useDashContext;
var _react = _interopRequireWildcard(require("react"));
var _reactRedux = require("react-redux");
var _ramda = require("ramda");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var DashContext = exports.DashContext = /*#__PURE__*/_react.default.createContext({});
function DashContextProvider(props) {
var children = props.children,
componentPath = props.componentPath;
var stringPath = (0, _react.useMemo)(() => JSON.stringify(componentPath), [componentPath]);
var store = (0, _reactRedux.useStore)();
var isLoading = (0, _react.useCallback)(options => {
var _ref = options || {},
extraPath = _ref.extraPath,
rawPath = _ref.rawPath,
filterFunc = _ref.filterFunc;
var loadingPath = [stringPath];
if (extraPath) {
loadingPath = [JSON.stringify((0, _ramda.concat)(componentPath, extraPath))];
} else if (rawPath) {
loadingPath = [JSON.stringify(rawPath)];
}
var loading = (0, _ramda.pathOr)([], loadingPath, store.getState().loading);
return filterFunc ? loading.filter(filterFunc).length > 0 : loading.length > 0;
}, [stringPath]);
var useLoading = (0, _react.useCallback)(options => {
var _ref2 = options || {},
filterFunc = _ref2.filterFunc,
extraPath = _ref2.extraPath,
rawPath = _ref2.rawPath;
return (0, _reactRedux.useSelector)(state => {
var loadingPath = [stringPath];
if (extraPath) {
loadingPath = [JSON.stringify((0, _ramda.concat)(componentPath, extraPath))];
} else if (rawPath) {
loadingPath = [JSON.stringify(rawPath)];
}
var load = (0, _ramda.pathOr)([], loadingPath, state.loading);
if (filterFunc) {
return load.filter(filterFunc).length > 0;
}
return load.length > 0;
});
}, [stringPath]);
var ctxValue = (0, _react.useMemo)(() => {
return {
componentPath,
isLoading,
useLoading,
useSelector: _reactRedux.useSelector,
useStore: _reactRedux.useStore,
useDispatch: _reactRedux.useDispatch
};
}, [stringPath]);
return /*#__PURE__*/_react.default.createElement(DashContext.Provider, {
value: ctxValue
}, children);
}
function useDashContext() {
var ctx = (0, _react.useContext)(DashContext);
if (!ctx) {
// eslint-disable-next-line no-console
console.error('Dash Context was not found, component was rendered without a wrapper. Use `window.dash_component_api.ExternalWrapper` to make sure the component is properly connected.');
}
return ctx || {};
}