stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
121 lines • 5.76 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.OpenChannelDetailsButton = exports.ChannelSwipableWrapper = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext");
var _SwipeRegistryContext = require("../../contexts/swipeableContext/SwipeRegistryContext");
var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
var _useChannelActionItems = require("../../hooks/actions/useChannelActionItems");
var _BottomSheetModal = require("../UIComponents/BottomSheetModal");
var _SwipableWrapper = require("../UIComponents/SwipableWrapper");
var _jsxRuntime = require("react/jsx-runtime");
var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ChannelPreview/ChannelSwipableWrapper.tsx";
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var OpenChannelDetailsButton = () => {
var _useTheme = (0, _ThemeContext.useTheme)(),
semantics = _useTheme.theme.semantics;
var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(),
icons = _useComponentsContext.icons;
return (0, _jsxRuntime.jsx)(icons.MenuPointHorizontal, {
stroke: semantics.textPrimary
});
};
exports.OpenChannelDetailsButton = OpenChannelDetailsButton;
var ChannelSwipableWrapper = ({
channel,
getChannelActionItems,
swipableProps: _swipableProps,
children
}) => {
var _useComponentsContext2 = (0, _ComponentsContext.useComponentsContext)(),
ChannelDetailsBottomSheetComponent = _useComponentsContext2.ChannelDetailsBottomSheet;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
channelDetailSheetOpen = _useState2[0],
setChannelDetailSheetOpen = _useState2[1];
var channelActionItems = (0, _useChannelActionItems.useChannelActionItems)({
channel,
getChannelActionItems,
surface: 'list'
});
var sheetItems = (0, _react.useMemo)(() => channelActionItems.filter(item => item.placement !== 'swipe'), [channelActionItems]);
var swipeItems = (0, _react.useMemo)(() => channelActionItems.filter(item => item.placement !== 'sheet'), [channelActionItems]);
var swipableRegistry = (0, _SwipeRegistryContext.useSwipeRegistryContext)();
var _useTheme2 = (0, _ThemeContext.useTheme)(),
semantics = _useTheme2.theme.semantics;
var styles = useStyles();
var swipableActions = (0, _react.useMemo)(() => {
var items = [{
id: 'openSheet',
action: () => setChannelDetailSheetOpen(true),
contentContainerStyle: [styles.contentContainerStyle, styles.elipsis],
Content: OpenChannelDetailsButton
}];
swipeItems.forEach(item => {
items.push({
id: item.id,
action: () => {
item.action();
swipableRegistry == null || swipableRegistry.closeAll();
},
Content: createSwipeContent(item, semantics.textOnAccent),
contentContainerStyle: [styles.contentContainerStyle, styles.standard]
});
});
return items;
}, [styles.contentContainerStyle, styles.elipsis, styles.standard, swipeItems, swipableRegistry, semantics.textOnAccent]);
var renderRightActions = (0, _react.useCallback)((_progress, translation) => (0, _jsxRuntime.jsx)(_SwipableWrapper.RightActions, {
items: swipableActions,
translation: translation
}), [swipableActions]);
var swipableProps = (0, _react.useMemo)(() => ({
renderRightActions,
..._swipableProps
}), [_swipableProps, renderRightActions]);
return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [(0, _jsxRuntime.jsx)(_SwipableWrapper.SwipableWrapper, {
swipeableId: channel.cid,
swipableProps: swipableProps,
children: children
}), (0, _jsxRuntime.jsx)(_BottomSheetModal.BottomSheetModal, {
enableDynamicSizing: true,
onClose: () => setChannelDetailSheetOpen(false),
visible: channelDetailSheetOpen,
height: 424,
children: (0, _jsxRuntime.jsx)(ChannelDetailsBottomSheetComponent, {
channel: channel,
items: sheetItems
})
})]
});
};
exports.ChannelSwipableWrapper = ChannelSwipableWrapper;
var createSwipeContent = (item, color) => {
var SwipeContent = () => (0, _jsxRuntime.jsx)(item.Icon, {
fill: color,
stroke: color
});
return SwipeContent;
};
var useStyles = () => {
var _useTheme3 = (0, _ThemeContext.useTheme)(),
semantics = _useTheme3.theme.semantics;
return (0, _react.useMemo)(() => _reactNative.StyleSheet.create({
contentContainerStyle: {
alignItems: 'center',
flex: 1,
justifyContent: 'center'
},
elipsis: {
backgroundColor: semantics.backgroundCoreSurfaceDefault
},
standard: {
backgroundColor: semantics.accentPrimary
}
}), [semantics.accentPrimary, semantics.backgroundCoreSurfaceDefault]);
};
//# sourceMappingURL=ChannelSwipableWrapper.js.map