UNPKG

@livelike/react-native

Version:

LiveLike React Native package

86 lines (85 loc) 3.76 kB
"use strict"; 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