@sendbird/uikit-react-native-foundation
Version:
A foundational UI kit for building chat-enabled React Native apps.
113 lines (112 loc) • 4.53 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _uikitUtils = require("@sendbird/uikit-utils");
var _Modal = _interopRequireDefault(require("../../components/Modal"));
var _Text = _interopRequireDefault(require("../../components/Text"));
var _createStyleSheet = _interopRequireDefault(require("../../styles/createStyleSheet"));
var _useHeaderStyle = _interopRequireDefault(require("../../styles/useHeaderStyle"));
var _useUIKitTheme = _interopRequireDefault(require("../../theme/useUIKitTheme"));
var _DialogBox = _interopRequireDefault(require("../Dialog/DialogBox"));
var _LoadingSpinner = _interopRequireDefault(require("../LoadingSpinner"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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; }
const ActionMenu = ({
visible,
onHide,
onError,
onDismiss,
title,
menuItems
}) => {
const {
statusBarTranslucent
} = (0, _useHeaderStyle.default)();
const {
colors
} = (0, _useUIKitTheme.default)();
const [pending, setPending] = (0, _react.useState)(false);
const _onHide = () => {
if (!pending) onHide();
};
return /*#__PURE__*/_react.default.createElement(_Modal.default, {
onClose: _onHide,
onDismiss: onDismiss,
statusBarTranslucent: statusBarTranslucent,
visible: visible,
backgroundStyle: {
alignItems: 'center',
justifyContent: 'center'
}
}, /*#__PURE__*/_react.default.createElement(_DialogBox.default, null, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: styles.title
}, /*#__PURE__*/_react.default.createElement(_Text.default, {
h1: true,
color: colors.ui.dialog.default.none.text,
numberOfLines: 1
// style={{ flex: 1 }}
,
style: {
maxWidth: pending ? '86%' : '100%'
}
}, title), pending && /*#__PURE__*/_react.default.createElement(_LoadingSpinner.default, {
size: 20,
color: colors.ui.dialog.default.none.highlight,
style: {
width: '10%',
marginStart: '4%'
}
})), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: styles.buttonContainer
}, menuItems.map((item, index) => {
return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
activeOpacity: 0.75,
key: item.title + index,
style: styles.button,
disabled: pending,
onPress: async () => {
setPending(true);
try {
var _item$onPress;
await ((_item$onPress = item.onPress) === null || _item$onPress === void 0 ? void 0 : _item$onPress.call(item));
} catch (e) {
const errorHandler = onError ?? item.onError;
errorHandler === null || errorHandler === void 0 || errorHandler(e);
if (!errorHandler) _uikitUtils.Logger.error('ActionMenu onPress error', e);
} finally {
onHide();
setPending(false);
}
}
}, /*#__PURE__*/_react.default.createElement(_Text.default, {
subtitle2: true,
color: item.style === 'destructive' ? colors.ui.dialog.default.none.destructive : colors.ui.dialog.default.none.text,
numberOfLines: 1
}, item.title));
}))));
};
const styles = (0, _createStyleSheet.default)({
title: {
flexDirection: 'row',
paddingHorizontal: 24,
paddingVertical: 20,
alignItems: 'center',
justifyContent: 'flex-start'
},
buttonContainer: {
alignItems: 'flex-start',
marginTop: 4,
marginBottom: 8
},
button: {
paddingHorizontal: 24,
paddingVertical: 12
}
});
var _default = exports.default = ActionMenu;
//# sourceMappingURL=index.js.map