@livelike/react-native
Version:
LiveLike React Native package
135 lines • 3.97 kB
JavaScript
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