@sendbird/uikit-react-native
Version:
Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
104 lines (103 loc) • 5.41 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.UserProfileProvider = exports.UserProfileContext = void 0;
var _react = _interopRequireWildcard(require("react"));
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
var _uikitUtils = require("@sendbird/uikit-utils");
var _LocalizationCtx = require("../contexts/LocalizationCtx");
var _SendbirdChatCtx = require("../contexts/SendbirdChatCtx");
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 && {}.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; }
let WARN_onCreateChannel = false;
const UserProfileContext = exports.UserProfileContext = /*#__PURE__*/_react.default.createContext(null);
const UserProfileProvider = ({
children,
onCreateChannel,
onBeforeCreateChannel = _uikitUtils.PASS,
statusBarTranslucent = true
}) => {
const chatContext = (0, _react.useContext)(_SendbirdChatCtx.SendbirdChatContext);
const localizationContext = (0, _react.useContext)(_LocalizationCtx.LocalizationContext);
if (!chatContext) throw new Error('SendbirdChatContext is not provided');
if (!localizationContext) throw new Error('LocalizationContext is not provided');
if (__DEV__ && !WARN_onCreateChannel && !onCreateChannel) {
_uikitUtils.Logger.warn('You should pass `userProfile.onCreateChannel` prop to SendbirdUIKitContainer if want to use message in a user profile');
WARN_onCreateChannel = true;
}
const safeArea = (0, _uikitUtils.useSafeAreaPadding)(['bottom', 'left', 'right']);
const [user, setUser] = (0, _react.useState)();
const [visible, setVisible] = (0, _react.useState)(false);
const [hideMessageButton, setHideMessageButton] = (0, _react.useState)(false);
const show = (0, _react.useCallback)((user, options) => {
if (chatContext.sbOptions.uikit.common.enableUsingDefaultUserProfile) {
setUser(user);
setVisible(true);
setHideMessageButton(Boolean(options === null || options === void 0 ? void 0 : options.hideMessageButton));
}
}, [chatContext.sbOptions.uikit.common.enableUsingDefaultUserProfile]);
const hide = (0, _react.useCallback)(() => {
setVisible(false);
}, []);
const onDismiss = () => {
setUser(undefined);
setHideMessageButton(false);
};
const userProfileButton = (0, _uikitUtils.useIIFE)(() => {
const isMe = chatContext.currentUser && (user === null || user === void 0 ? void 0 : user.userId) === chatContext.currentUser.userId;
if (isMe) return undefined;
if (hideMessageButton) return undefined;
const onPressMessageButton = async () => {
if (user) {
var _chatContext$currentU;
const params = (0, _uikitUtils.getDefaultGroupChannelCreateParams)({
invitedUserIds: [user.userId],
currentUserId: (_chatContext$currentU = chatContext.currentUser) === null || _chatContext$currentU === void 0 ? void 0 : _chatContext$currentU.userId
});
const processedParams = await onBeforeCreateChannel(params, [user]);
hide();
const channel = await chatContext.sdk.groupChannel.createChannel(processedParams);
if (onCreateChannel) {
onCreateChannel(channel);
} else {
_uikitUtils.Logger.warn('Please set `onCreateChannel` before message to user from profile card, see `userProfile` prop in the `SendbirdUIKitContainer` props');
}
}
};
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OutlinedButton, {
onPress: onPressMessageButton
}, localizationContext.STRINGS.PROFILE_CARD.BUTTON_MESSAGE);
});
return /*#__PURE__*/_react.default.createElement(UserProfileContext.Provider, {
value: {
show,
hide
}
}, children, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Modal, {
type: 'slide',
onClose: hide,
onDismiss: onDismiss,
visible: visible && Boolean(user),
backgroundStyle: styles.modal,
statusBarTranslucent: statusBarTranslucent
}, user && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.ProfileCard, {
containerStyle: [styles.profileCardContainer, safeArea],
uri: user.profileUrl,
username: user.nickname || localizationContext.STRINGS.LABELS.USER_NO_NAME,
bodyLabel: localizationContext.STRINGS.PROFILE_CARD.BODY_LABEL,
body: localizationContext.STRINGS.PROFILE_CARD.BODY(user),
button: userProfileButton
})));
};
exports.UserProfileProvider = UserProfileProvider;
const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
modal: {
justifyContent: 'flex-end'
},
profileCardContainer: {
borderTopStartRadius: 8,
borderTopEndRadius: 8
}
});
//# sourceMappingURL=UserProfileCtx.js.map
;