@reaqtive/q
Version:
A react library to connect React to the QIX engine and to Qlik Capability APIs
136 lines (114 loc) • 4.02 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
var _react = require("react");
var _lodash = _interopRequireDefault(require("lodash"));
var _helpers = require("../helpers/helpers");
const useQLayoutHandler = (qObject, preventUpdate = false) => {
const _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
qLayout = _useState2[0],
setQLayout = _useState2[1];
const _useState3 = (0, _react.useState)(0),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
qErrorCounter = _useState4[0],
setQErrorCounter = _useState4[1];
const _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
qError = _useState6[0],
setQError = _useState6[1];
const _useState7 = (0, _react.useState)(true),
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
qLoading = _useState8[0],
setQLoading = _useState8[1];
const _useState9 = (0, _react.useState)(false),
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
qUpdating = _useState10[0],
setQUpdating = _useState10[1];
const _useState11 = (0, _react.useState)(),
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
onUpdate = _useState12[0],
setOnUpdate = _useState12[1];
const _useState13 = (0, _react.useState)(false),
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
isSelecting = _useState14[0],
setIsSelecting = _useState14[1];
const qLayoutRef = (0, _react.useRef)();
function handleQError(err) {
qErrorCounter <= 10 ? setQErrorCounter(prevCounter => prevCounter + 1) : setQError({
qError: true,
rqtvMessage: 'error retrieving qLayout',
qErrorObject: err
});
}
function applyQLayoutPatch(path, patch) {
const qLayoutPatched = (0, _helpers.getPatchedObject)(qLayout, path, patch); //console.log(qLayoutPatched)
setQLayout(qLayoutPatched);
}
function getQLayout() {
qObject.getLayout().then(qLayout => {
setQLayout(qLayout);
}).catch(err => {
handleQError(err);
});
}
const triggerUpdate = (0, _react.useCallback)(() => {
//console.log(preventUpdate)
if (preventUpdate === false) {
setQUpdating(!preventUpdate);
}
}, [preventUpdate]);
(0, _react.useEffect)(() => {
const hasUpdated = !_lodash.default.isEqual(qLayoutRef.current, qLayout) && qLayout !== null;
if (hasUpdated && qLoading === true) {
qLayoutRef.current = qLayout;
setQLoading(false);
}
if (hasUpdated && qUpdating === true) {
//console.log('setToFalse',qUpdating)
qLayoutRef.current = qLayout;
setQUpdating(false);
}
}, [qLayout]);
(0, _react.useEffect)(() => {
if (qLoading === true && qObject !== null) {
getQLayout();
}
}, [qLoading]);
const layoutUpdater = (0, _react.useCallback)(updating => {
if (isSelecting && onUpdate && typeof onUpdate.fn === 'function') {
qObject && onUpdate.fn(() => setQUpdating(false));
} else {
qObject && getQLayout();
setQUpdating(false);
}
}, [isSelecting, onUpdate, qObject]);
(0, _react.useEffect)(() => {
if (qUpdating === true && qObject !== null) {
layoutUpdater(qUpdating);
}
}, [qUpdating]);
(0, _react.useEffect)(() => {
if (qObject) {
getQLayout();
qObject.on('changed', () => triggerUpdate());
return () => qObject.removeAllListeners();
}
}, [qObject]);
return {
qLayout,
qError,
qLoading,
applyQLayoutPatch,
qUpdating,
setOnUpdate,
isSelecting,
setIsSelecting
};
};
var _default = useQLayoutHandler;
exports.default = _default;