@sanity/form-builder
Version:
Sanity form builder
73 lines (72 loc) • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.InsertMenu = void 0;
var _react = _interopRequireWildcard(require("react"));
var _components = require("@sanity/base/components");
var _icons = require("@sanity/icons");
var _ui = require("@sanity/ui");
var _portableTextEditor = require("@sanity/portable-text-editor");
var _hooks = require("./hooks");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var CollapseMenuMemo = /*#__PURE__*/(0, _react.memo)(_components.CollapseMenu);
var MENU_POPOVER_PROPS = {
constrainSize: true,
portal: true
};
var InsertMenu = /*#__PURE__*/(0, _react.memo)(function InsertMenu(props) {
var disabled = props.disabled,
items = props.items,
isFullscreen = props.isFullscreen,
collapsed = props.collapsed;
var features = (0, _hooks.useFeatures)();
var focusBlock = (0, _hooks.useFocusBlock)();
var editor = (0, _portableTextEditor.usePortableTextEditor)();
var isVoidFocus = focusBlock && focusBlock._type !== features.types.block.name;
var handleMenuClose = (0, _react.useCallback)(() => {
_portableTextEditor.PortableTextEditor.focus(editor);
}, [editor]);
var children = (0, _react.useMemo)(() => {
return items.map(item => {
var title = item.type.title || item.type.type.name;
return /*#__PURE__*/_react.default.createElement(_components.CollapseMenuButton, {
"aria-label": "Insert ".concat(title).concat(item.inline ? ' (inline)' : ' (block)'),
padding: 2,
mode: "bleed",
disabled: disabled || isVoidFocus && item.inline === true,
icon: item.icon,
key: item.key
// eslint-disable-next-line react/jsx-no-bind, react/jsx-handler-names
,
onClick: item.handle,
text: title,
tooltipText: "Insert ".concat(title),
tooltipProps: {
disabled,
placement: isFullscreen ? 'bottom' : 'top',
portal: 'default'
}
});
});
}, [items, disabled, isVoidFocus, isFullscreen]);
var menuButtonProps = (0, _react.useMemo)(() => ({
button: /*#__PURE__*/_react.default.createElement(_ui.Button, {
icon: _icons.AddIcon,
mode: "bleed",
padding: 2,
disabled: disabled
}),
popover: MENU_POPOVER_PROPS
}), [disabled]);
return /*#__PURE__*/_react.default.createElement(CollapseMenuMemo, {
collapsed: collapsed,
collapseText: false,
disableRestoreFocusOnClose: true,
gap: 1,
menuButtonProps: menuButtonProps,
onMenuClose: handleMenuClose
}, children);
});
exports.InsertMenu = InsertMenu;