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