UNPKG

@livelike/react-native

Version:

LiveLike React Native package

89 lines 2.8 kB
import React, { useCallback, useMemo } from 'react'; import { StyleSheet, View } from 'react-native'; import { useIsWidgetDisabled, useStyles, useWidget, useWidgetActions, useWidgetInteractedAnalytics, useWidgetInteractions, useWidgetOptions } from '../../hooks'; import { roundTo } from '../../utils'; import { LLEmojiSlider } from './LLEmojiSlider'; export function LLEmojiSliderWidgetBody(_ref) { let { widgetId, styles: stylesProp, SliderComponent = LLEmojiSlider, SliderComponentStyles } = _ref; const styles = useStyles({ componentStylesFn: getEmojiSliderWidgetBodyStyles, stylesProp }); const widget = useWidget({ widgetId }); const widgetOptions = useWidgetOptions({ widgetId }); const isWidgetDisabled = useIsWidgetDisabled({ widgetId }); const widgetInteractions = useWidgetInteractions({ widgetId }); const widgetInteraction = widgetInteractions === null || widgetInteractions === void 0 ? void 0 : widgetInteractions[0]; const { updateEmojiSliderMagnitudeAction } = useWidgetActions({ widgetId }); const { trackWidgetInteractedAction } = useWidgetInteractedAnalytics({ widgetId }); const thumbImages = useMemo(() => widgetOptions === null || widgetOptions === void 0 ? void 0 : widgetOptions.map((_ref2, index) => { let { image_url } = _ref2; return { imageUrl: image_url, min: roundTo(index / widgetOptions.length, 3) }; }), [widgetOptions]); const onSlidingCompleteHandler = useCallback(magnitude => { const userMagnitude = roundTo(magnitude, 3); updateEmojiSliderMagnitudeAction({ widgetId, magnitude: userMagnitude }); trackWidgetInteractedAction({ interactionItem: userMagnitude }); }, [widgetId]); if (!widget || !widgetOptions || !widgetOptions.length) { return undefined; } const sliderValue = (widgetInteraction === null || widgetInteraction === void 0 ? void 0 : widgetInteraction.magnitude) ?? parseFloat(widget.initial_magnitude); const average = widgetInteraction ? parseFloat(widget.average_magnitude) : undefined; return /*#__PURE__*/React.createElement(View, { style: styles.bodyContainer }, /*#__PURE__*/React.createElement(SliderComponent, { onSlidingComplete: onSlidingCompleteHandler, value: sliderValue, initialValue: sliderValue, disabled: isWidgetDisabled, thumbImages: thumbImages, average: average, styles: SliderComponentStyles })); } const getEmojiSliderWidgetBodyStyles = _ref3 => { let { theme } = _ref3; return StyleSheet.create({ bodyContainer: { display: 'flex', flexDirection: 'column', marginBottom: 16, paddingHorizontal: 16 } }); }; //# sourceMappingURL=LLEmojiSliderWidgetBody.js.map