@livelike/react-native
Version:
LiveLike React Native package
86 lines (85 loc) • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useWidgetInteractiveTimeout = void 0;
var _javascript = require("@livelike/javascript");
var _react = require("react");
var _store = require("../store");
var _types = require("../types");
var _useSelectedFieldStore = require("./useSelectedFieldStore");
var _useWidgetActions = require("./useWidgetActions");
var _useWidgetInteractions = require("./useWidgetInteractions");
var _useWidgetKind = require("./useWidgetKind");
var _useWidgetUIPhase = require("./useWidgetUIPhase");
var _useIsTimelineWidget = require("./useIsTimelineWidget");
/**
* @description useWidgetInteractiveTimeout hook is to derive resulted interactiveTimeout based on
* the passed interactiveTimeout value that in turns drives widget UI phases.
* For example, once the widget timeouts, widget UI phase would transition from INTERACTIVE to TIMED_OUT
* which would turn the widget into a non interact-able widget.
* Resulted interactiveTimeout value is used by `LLWidgetHeader` component.
* @since 0.1.0
*/
const useWidgetInteractiveTimeout = _ref => {
let {
widgetId,
interactiveTimeout: interactiveTimeoutProp,
onInteractiveTimeout: onInteractiveTimeoutProp
} = _ref;
const {
updateWidgetUIPhaseAction
} = (0, _useWidgetActions.useWidgetActions)({
widgetId
});
const widgetUIPhase = (0, _useWidgetUIPhase.useWidgetUIPhase)({
widgetId
});
const isTimelineWidget = (0, _useIsTimelineWidget.useIsTimelineWidget)({
widgetId
});
const widgetInteractiveDuration = (0, _useSelectedFieldStore.useSelectedFieldStore)(_store.widgetStore, () => {
var _widgetStore$get$widg;
return (_widgetStore$get$widg = _store.widgetStore.get()[widgetId]) === null || _widgetStore$get$widg === void 0 || (_widgetStore$get$widg = _widgetStore$get$widg.widgetPayload) === null || _widgetStore$get$widg === void 0 ? void 0 : _widgetStore$get$widg.timeout;
});
const widgetKind = (0, _useWidgetKind.useWidgetKind)({
widgetId
});
const widgetInteractions = (0, _useWidgetInteractions.useWidgetInteractions)({
widgetId
});
const onInteractiveTimeout = (0, _react.useCallback)(() => {
updateWidgetUIPhaseAction({
widgetId,
widgetUIPhase: _types.WidgetUIPhase.INTERACTIVE_TIMED_OUT
});
onInteractiveTimeoutProp === null || onInteractiveTimeoutProp === void 0 || onInteractiveTimeoutProp();
}, [widgetId, onInteractiveTimeoutProp]);
const interactiveTimeout = (0, _react.useMemo)(() => {
const isExpired = widgetUIPhase === _types.WidgetUIPhase.EXPIRED;
const isSubmitted = widgetUIPhase === _types.WidgetUIPhase.SUBMITTED;
const isFollowUpPublished = widgetUIPhase === _types.WidgetUIPhase.FOLLOW_UP_PUBLISHED;
const isInteractiveTimedOut = widgetUIPhase === _types.WidgetUIPhase.INTERACTIVE_TIMED_OUT;
if (isExpired || isInteractiveTimedOut) {
return null;
}
if (isFollowUpPublished && !isTimelineWidget) {
return null;
}
// set interactive timeout to null if widget interaction is already submitted
// for single interaction widgets
if (_javascript.SINGLE_INTERACTION_WIDGET_KINDS.includes(widgetKind) && isSubmitted && !isTimelineWidget) {
return null;
}
if (interactiveTimeoutProp !== undefined) {
return interactiveTimeoutProp;
}
return widgetInteractiveDuration ? (0, _javascript.getMilliseconds)(widgetInteractiveDuration) : null;
}, [widgetUIPhase, interactiveTimeoutProp, widgetInteractiveDuration, widgetInteractions, isTimelineWidget]);
return {
interactiveTimeout,
onInteractiveTimeout
};
};
exports.useWidgetInteractiveTimeout = useWidgetInteractiveTimeout;
//# sourceMappingURL=useWidgetInteractiveTimeout.js.map