stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
186 lines • 8.64 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChannelMemberActionItems = exports.getChannelMemberActionItems = exports.buildDefaultChannelMemberActionItems = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _useChannelActions = require("./useChannelActions");
var _useUserActions = require("./useUserActions");
var _useUserMuteActive = require("../../components/Message/hooks/useUserMuteActive");
var _contexts = require("../../contexts");
var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext");
var _useChannelOwnCapabilities = require("../useChannelOwnCapabilities");
var _useStateStore2 = require("../useStateStore");
var _jsxRuntime = require("react/jsx-runtime");
var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/hooks/actions/useChannelMemberActionItems.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 cachedDefaultIcons;
var getDefaultIcons = () => {
if (!cachedDefaultIcons) {
cachedDefaultIcons = require("../../contexts/componentsContext/defaultComponents").defaultIcons;
}
return cachedDefaultIcons;
};
var ChannelMemberActionsIcon = ({
Icon,
...rest
}) => {
var _useTheme = (0, _contexts.useTheme)(),
semantics = _useTheme.theme.semantics;
return (0, _jsxRuntime.jsx)(Icon, {
stroke: semantics.textSecondary,
width: 20,
height: 20,
...rest
});
};
var buildDefaultChannelMemberActionItems = channelMemberActionItemsParams => {
var _ownCapabilities$incl;
var removeMembers = channelMemberActionItemsParams.channelActions.removeMembers,
_channelMemberActionI = channelMemberActionItemsParams.icons,
icons = _channelMemberActionI === void 0 ? getDefaultIcons() : _channelMemberActionI,
isBlocked = channelMemberActionItemsParams.isBlocked,
isCurrentUser = channelMemberActionItemsParams.isCurrentUser,
member = channelMemberActionItemsParams.member,
ownCapabilities = channelMemberActionItemsParams.ownCapabilities,
t = channelMemberActionItemsParams.t,
_channelMemberActionI2 = channelMemberActionItemsParams.userActions,
blockUser = _channelMemberActionI2.blockUser,
muteUser = _channelMemberActionI2.muteUser,
unblockUser = _channelMemberActionI2.unblockUser,
unmuteUser = _channelMemberActionI2.unmuteUser,
userMuteActive = channelMemberActionItemsParams.userMuteActive;
var canRemoveMember = (_ownCapabilities$incl = ownCapabilities == null ? void 0 : ownCapabilities.includes('update-channel-members')) != null ? _ownCapabilities$incl : false;
var actionItems = [];
if (!isCurrentUser) {
actionItems.push({
action: userMuteActive ? unmuteUser : muteUser,
Icon: props => {
var _props$fill;
return userMuteActive ? (0, _jsxRuntime.jsx)(ChannelMemberActionsIcon, {
Icon: icons.Sound,
...props
}) : (0, _jsxRuntime.jsx)(ChannelMemberActionsIcon, {
Icon: icons.Mute,
...props,
fill: (_props$fill = props.fill) != null ? _props$fill : props.stroke,
stroke: undefined
});
},
id: 'muteUser',
label: userMuteActive ? t('Unmute User') : t('Mute User'),
type: 'standard'
}, {
action: isBlocked ? unblockUser : (...args) => {
var _member$user, _member$user2;
var name = ((_member$user = member.user) == null ? void 0 : _member$user.name) || ((_member$user2 = member.user) == null ? void 0 : _member$user2.id) || '';
_reactNative.Alert.alert(t('Block {{ name }}', {
name
}), t("They won't be able to message or call you. You can unblock them later."), [{
style: 'cancel',
text: t('Cancel')
}, {
onPress: function () {
var _ref = (0, _asyncToGenerator2.default)(function* () {
yield blockUser(...args);
});
return function onPress() {
return _ref.apply(this, arguments);
};
}(),
style: 'destructive',
text: t('Block')
}]);
},
Icon: props => (0, _jsxRuntime.jsx)(ChannelMemberActionsIcon, {
Icon: icons.BlockUser,
...props
}),
id: 'block',
label: isBlocked ? t('Unblock User') : t('Block User'),
type: isBlocked ? 'standard' : 'destructive'
});
if (canRemoveMember) {
actionItems.push({
action: () => {
var _member$user3;
var memberId = (_member$user3 = member.user) == null ? void 0 : _member$user3.id;
if (!memberId) {
return;
}
_reactNative.Alert.alert(t('Remove User'), t('Are you sure you want to remove this member from the channel?'), [{
style: 'cancel',
text: t('Cancel')
}, {
onPress: function () {
var _ref2 = (0, _asyncToGenerator2.default)(function* () {
yield removeMembers([memberId]);
});
return function onPress() {
return _ref2.apply(this, arguments);
};
}(),
style: 'destructive',
text: t('Remove')
}]);
},
Icon: props => (0, _jsxRuntime.jsx)(ChannelMemberActionsIcon, {
Icon: icons.UserDelete,
...props
}),
id: 'removeMember',
label: t('Remove User'),
type: 'destructive'
});
}
}
return actionItems;
};
exports.buildDefaultChannelMemberActionItems = buildDefaultChannelMemberActionItems;
var getChannelMemberActionItems = ({
defaultItems
}) => defaultItems;
exports.getChannelMemberActionItems = getChannelMemberActionItems;
var blockedUsersStateSelector = state => ({
userIds: state.userIds
});
var useChannelMemberActionItems = ({
channel,
member,
getChannelMemberActionItems: getChannelMemberActionItemsProp = getChannelMemberActionItems
}) => {
var _member$user$id, _member$user4, _member$user5;
var _useTranslationContex = (0, _contexts.useTranslationContext)(),
t = _useTranslationContex.t;
var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(),
icons = _useComponentsContext.icons;
var userActions = (0, _useUserActions.useUserActions)(member.user);
var channelActions = (0, _useChannelActions.useChannelActions)(channel);
var ownCapabilities = (0, _useChannelOwnCapabilities.useChannelOwnCapabilities)(channel);
var userMuteActive = (0, _useUserMuteActive.useUserMuteActive)(member.user);
var _useStateStore = (0, _useStateStore2.useStateStore)(channel.getClient().blockedUsers, blockedUsersStateSelector),
blockedUserIds = _useStateStore.userIds;
var isBlocked = blockedUserIds.includes((_member$user$id = (_member$user4 = member.user) == null ? void 0 : _member$user4.id) != null ? _member$user$id : '');
var isCurrentUser = ((_member$user5 = member.user) == null ? void 0 : _member$user5.id) === channel.getClient().userID;
var channelMemberActionItemsParams = (0, _react.useMemo)(() => ({
channel,
channelActions,
icons,
isBlocked,
isCurrentUser,
member,
ownCapabilities,
t,
userActions,
userMuteActive
}), [channel, channelActions, icons, isBlocked, isCurrentUser, member, ownCapabilities, t, userActions, userMuteActive]);
var defaultItems = (0, _react.useMemo)(() => buildDefaultChannelMemberActionItems(channelMemberActionItemsParams), [channelMemberActionItemsParams]);
return (0, _react.useMemo)(() => getChannelMemberActionItemsProp({
context: channelMemberActionItemsParams,
defaultItems
}), [channelMemberActionItemsParams, defaultItems, getChannelMemberActionItemsProp]);
};
exports.useChannelMemberActionItems = useChannelMemberActionItems;
//# sourceMappingURL=useChannelMemberActionItems.js.map