UNPKG

@livelike/react-native

Version:

LiveLike React Native package

135 lines 3.97 kB
import { addWidgetListener, createWidgetImpression, getWidgetInteractions, getWidget, removeWidgetListener, WidgetKind, CHOICE_WIDGET_KIND, getRewardTransactions, getTargetedWidgetIdAndKind } from '@livelike/javascript'; import { useEffect } from 'react'; import { getSelectedOptionIndex, getWidgetResultState, getWidgetRewardsFromRewardTransactions, getWidgeUIPhase, widgetStoreActions } from '../store'; import { useApi } from './useApi'; import { useIsTimelineWidget } from './useIsTimelineWidget'; import { useWidget } from './useWidget'; import { useWidgetInteractions } from './useWidgetInteractions'; import { useWidgetRewards } from './useWidgetRewards'; export function useLoadWidgetEffect(_ref) { let { widgetId, widgetKind, programId } = _ref; const isTimelineWidget = useIsTimelineWidget({ widgetId }); const widgetPayload = useWidget({ widgetId }); const widgetInteractions = useWidgetInteractions({ widgetId }); const widgetRewards = useWidgetRewards({ widgetId }); const { onApi, isLoading, error, data } = useApi(() => getWidget({ widgetId, widgetKind }).then(widget => Promise.all([getWidgetInteractions({ widgetId, widgetKind, interactionUrl: widget.widget_interactions_url_template }), getTargetedWidgetIdAndKind({ widget }).then(_ref2 => { let { widgetId: targetedWidgetId } = _ref2; return getRewardTransactions({ widgetIds: [targetedWidgetId] }).then(res => res.results); })]).then(_ref3 => { let [widgetInteractions, widgetRewards] = _ref3; return [widget, widgetInteractions, widgetRewards]; }))); useEffect(() => { if (isTimelineWidget) { return; } onApi().then(_ref4 => { let [widgetPayload, widgetInteractions, rewardTransactions] = _ref4; const widgetRewards = getWidgetRewardsFromRewardTransactions(rewardTransactions); widgetStoreActions.updateWidgetStateAction({ widgetId, widgetState: { widgetPayload, widgetInteractions, widgetRewards, widgetResultState: getWidgetResultState({ widgetPayload, widgetInteractions }), widgetUIPhase: getWidgeUIPhase({ widgetPayload, widgetInteractions }), selectedOptionIndex: getSelectedOptionIndex({ widgetPayload, widgetInteractions }) } }); }); }, [widgetId, widgetKind, isTimelineWidget]); useEffect(() => { if (!(data !== null && data !== void 0 && data.length) && !isTimelineWidget) { return; } createWidgetImpression({ widgetId, widgetKind }); function onWidgetListener(_ref5) { let { event, message } = _ref5; if (CHOICE_WIDGET_KIND.includes(message.kind) && message.choices.length) { widgetStoreActions.updateWidgetChoicesAction({ widgetId, widgetChoices: message.choices }); } else if (message.kind === WidgetKind.EMOJI_SLIDER && message.average_magnitude !== undefined) { widgetStoreActions.updateWidgetAverageMagnitude({ widgetId, averageMagnitude: message.average_magnitude }); } else if (message.options.length) { widgetStoreActions.updateWidgetOptionsAction({ widgetId, widgetOptions: message.options }); } } addWidgetListener({ widgetId, widgetKind }, onWidgetListener); return () => { removeWidgetListener({ widgetId, widgetKind }, onWidgetListener); }; }, [data, widgetId, widgetKind, isTimelineWidget]); if (isTimelineWidget) { return { isLoading: false, data: [widgetPayload, widgetInteractions, widgetRewards] }; } return { onApi, isLoading, error, data }; } //# sourceMappingURL=useLoadWidgetEffect.js.map