UNPKG

@livelike/react-native

Version:

LiveLike React Native package

104 lines (103 loc) 3.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLoadWidgetRewardsEffect = useLoadWidgetRewardsEffect; var _javascript = require("@livelike/javascript"); var _react = require("react"); var _store = require("../store"); var _useWidgetInteractions = require("./useWidgetInteractions"); var _useWidgetKind = require("./useWidgetKind"); function useLoadWidgetRewardsEffect(_ref) { let { widgetId } = _ref; const widgetInteractions = (0, _useWidgetInteractions.useWidgetInteractions)({ widgetId }); const widgetKind = (0, _useWidgetKind.useWidgetKind)({ widgetId }); const interactionsRef = (0, _react.useRef)(null); const rewardRef = (0, _react.useRef)(null); const mountRef = (0, _react.useRef)(null); (0, _react.useEffect)(() => { // avoid getting reward transactions on initial mount since we are already loading // widget details including reward transaction as part of useLoadWidgetEffect if (!mountRef.current && Array.isArray(widgetInteractions)) { mountRef.current = true; return; } // avoid loading widget rewards if there are no interactions or // widget interaction are same as earlier interaction if (!(widgetInteractions !== null && widgetInteractions !== void 0 && widgetInteractions.length)) { return; } if (areWidgetInteractionsSame(widgetInteractions, interactionsRef.current ?? [])) { return; } interactionsRef.current = widgetInteractions; const timeout = setTimeout(() => { (0, _javascript.getTargetedWidgetIdAndKind)({ widgetId, widgetKind }).then(_ref2 => { let { widgetId: targettedWidgetId } = _ref2; return (0, _javascript.getRewardTransactions)({ widgetIds: [targettedWidgetId] }); }).then(res => { const widgetRewards = (0, _store.getWidgetRewardsFromRewardTransactions)(res.results); if (rewardRef.current && areWidgetRewardsSame(widgetRewards, rewardRef.current)) { return; } rewardRef.current = widgetRewards; // Observed a behaviour where old reward animation overlap with new reward animation // until old reward animation gets resetted and dereferenced // To avoid overlapping, we clear the existing rewards from state so that // there's no residue of existing reward animation Promise.resolve(_store.widgetStoreActions.updateWidgetRewardsAction({ widgetId, widgetRewards: [] })).then(() => _store.widgetStoreActions.updateWidgetRewardsAction({ widgetId, widgetRewards })); }); }, 1000); return () => { clearTimeout(timeout); }; }, [widgetId, widgetKind, widgetInteractions]); } function areWidgetRewardsSame(rewardsA, rewardsB) { if (rewardsA.length !== rewardsB.length) { return false; } return rewardsA.every(rewardA => { return !!rewardsB.find(_ref3 => { let { reward_item_id, reward_item_amount } = _ref3; return rewardA.reward_item_id === reward_item_id && rewardA.reward_item_amount === reward_item_amount; }); }); } function areWidgetInteractionsSame(interactionsA, interactionsB) { if (interactionsA.length !== interactionsB.length) { return false; } return interactionsA.every(interactionA => { return !!interactionsB.find(_ref4 => { let { option_id, choice_id } = _ref4; return interactionA.option_id && interactionA.option_id === option_id || interactionA.choice_id && interactionA.choice_id === choice_id; }); }); } //# sourceMappingURL=useLoadWidgetRewardsEffect.js.map