UNPKG

@livelike/react-native

Version:

LiveLike React Native package

153 lines (152 loc) 5.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LLWidgets = LLWidgets; var _react = _interopRequireWildcard(require("react")); var _hooks = require("../../hooks"); var _reactNative = require("react-native"); var _types = require("../../types"); var _LLWidget = require("./LLWidget"); var _LLWidgetSeparator = require("./LLWidgetSeparator"); var _javascript = require("@livelike/javascript"); var _LLWidgetsLoadMoreButton = require("./LLWidgetsLoadMoreButton"); var _LLText = require("../LLText"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const UNSUPPORTED_TIMELINE_WIDGET_KIND = [_javascript.WidgetKind.VIDEO_ALERT, _javascript.WidgetKind.SOCIAL_EMBED]; function LLWidgets(_ref) { let { programId, mode, onLoadMore: onLoadMoreProp, WidgetComponent = _LLWidget.LLWidget, LoadingComponent, ErrorComponent, LoadMoreComponent = _LLWidgetsLoadMoreButton.LLWidgetsLoadMoreButton, WidgetSeparatorComponent = _LLWidgetSeparator.LLWidgetSeparator, WidgetSeparatorComponentStyles, LoadMoreComponentStyles, styles: stylesProp } = _ref; const styles = (0, _hooks.useStyles)({ componentStylesFn: getWidgetsStyles, stylesProp }); const { isLoading, error, onLoadMore } = (0, _hooks.useLoadTimelineWidgetEffect)({ programId, mode }); const widgets = (0, _hooks.useTimelineWidgets)({ programId }); const { onWidgetInteractiveTimeout } = (0, _hooks.useTimelineWidgetActions)({ programId }); const widgetsWithSeparator = (0, _react.useMemo)(() => { return widgets === null || widgets === void 0 ? void 0 : widgets.reduce((_widgets, widget, index) => { if (index !== 0) { _widgets.push({ widgetId: 'NA', widgetKind: 'NA', isSeparator: true }); } _widgets.push(widget); return _widgets; }, []); }, [widgets]); const onLoadMoreHandler = (0, _react.useCallback)(() => { return onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore().then(() => { onLoadMoreProp === null || onLoadMoreProp === void 0 || onLoadMoreProp(); }); }, [onLoadMore, onLoadMoreProp]); if (isLoading) { return LoadingComponent ? /*#__PURE__*/_react.default.createElement(LoadingComponent, null) : /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, { size: 'small', color: "blue" }); } if (error) { return ErrorComponent ? /*#__PURE__*/_react.default.createElement(ErrorComponent, null) : /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: styles.errorContainer }, /*#__PURE__*/_react.default.createElement(_LLText.LLText, { style: styles.errorText }, 'Unable to load widgets')); } const isPopupMode = mode === _types.WidgetMode.POPUP; if (isPopupMode) { if (!(widgets !== null && widgets !== void 0 && widgets.length)) { return undefined; } // when in popup mode only show last older widget from widgets array, // when widget interactive timeouts or widget is dismissed, last older widget // is removed from list and then the last array item would point to second last older widget // This way we show one widget at a time in pop up mode. const { widgetId, widgetKind } = widgets[widgets.length - 1]; return /*#__PURE__*/_react.default.createElement(WidgetComponent, { key: widgetId, programId: programId, widgetId: widgetId, widgetKind: widgetKind, onDismiss: () => onWidgetInteractiveTimeout(widgetId), onInteractiveTimeout: () => onWidgetInteractiveTimeout(widgetId) }); } return /*#__PURE__*/_react.default.createElement(_reactNative.ScrollView, { style: styles.container }, !!(widgets !== null && widgets !== void 0 && widgets.length) && widgetsWithSeparator.map((_ref2, index) => { let { widgetId, widgetKind, isSeparator } = _ref2; if (isSeparator) { return !UNSUPPORTED_TIMELINE_WIDGET_KIND.includes(widgetKind) && /*#__PURE__*/_react.default.createElement(WidgetSeparatorComponent, { key: 'separator' + index, styles: WidgetSeparatorComponentStyles }); } return /*#__PURE__*/_react.default.createElement(WidgetComponent, { key: widgetId, programId: programId, widgetId: widgetId, widgetKind: widgetKind, interactiveTimeout: null }); }), onLoadMore && /*#__PURE__*/_react.default.createElement(LoadMoreComponent, { onPress: onLoadMoreHandler, styles: LoadMoreComponentStyles })); } const getWidgetsStyles = _ref3 => { let { theme } = _ref3; return _reactNative.StyleSheet.create({ container: { display: 'flex', flexDirection: 'column', flex: 1, gap: 5 }, errorContainer: { display: 'flex', justifyContent: 'center', alignItems: 'center' }, errorText: { color: theme.error } }); }; //# sourceMappingURL=LLWidgets.js.map