@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
108 lines (106 loc) • 5.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MediaBadges = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _debounce = _interopRequireDefault(require("lodash/debounce"));
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _primitives = require("@atlaskit/primitives");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(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; }
var MEDIA_BADGE_VISIBILITY_BREAKPOINT = 200;
var containerStyles = (0, _primitives.xcss)({
display: 'flex',
position: 'absolute',
top: 'space.0',
right: 'space.0',
// eslint-disable-next-line @atlaskit/design-system/use-tokens-typography
lineHeight: "var(--ds-space-200, 16px)",
gap: 'space.025',
zIndex: 'card',
height: 'fit-content',
width: 'fit-content',
margin: 'space.075'
});
// The above styles are used for both editor and renderer, and in renderer the
// document body is the main scroll area. This means it overscrolls the primary
// toolbar, where the z-index is "2". We have to hack in our own z-index less
// than that to ensure our badge appears under the toolbar when scrolled.
var hackedZIndexStyles = (0, _primitives.xcss)({
// @ts-ignore
zIndex: '1'
});
var resizeOffsetStyles = (0, _primitives.xcss)({
right: 'space.150'
});
var smallBadgeStyles = (0, _primitives.xcss)({
margin: 'space.025'
});
var getBadgeSize = function getBadgeSize(width, height) {
// width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now
return width && width < 70 || height && height < 70 ? 'small' : 'medium';
};
var getBadgeVisible = function getBadgeVisible(width, height) {
if (!(0, _platformFeatureFlags.fg)('platform_editor_support_media_badge_visibility')) {
return true;
}
return width && width < MEDIA_BADGE_VISIBILITY_BREAKPOINT || height && height < MEDIA_BADGE_VISIBILITY_BREAKPOINT ? false : true;
};
var MediaBadges = exports.MediaBadges = function MediaBadges(_ref) {
var children = _ref.children,
mediaElement = _ref.mediaElement,
mediaWidth = _ref.mediaWidth,
mediaHeight = _ref.mediaHeight,
extendedResizeOffset = _ref.extendedResizeOffset,
_ref$useMinimumZIndex = _ref.useMinimumZIndex,
useMinimumZIndex = _ref$useMinimumZIndex === void 0 ? false : _ref$useMinimumZIndex;
var _useState = (0, _react.useState)(getBadgeSize(mediaWidth, mediaHeight)),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
badgeSize = _useState2[0],
setBadgeSize = _useState2[1];
var _useState3 = (0, _react.useState)(getBadgeVisible(mediaWidth, mediaHeight)),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
visible = _useState4[0],
setVisible = _useState4[1];
(0, _react.useEffect)(function () {
var observer = new ResizeObserver((0, _debounce.default)(function (entries) {
var _entries = (0, _slicedToArray2.default)(entries, 1),
entry = _entries[0];
var _entry$contentRect = entry.contentRect,
width = _entry$contentRect.width,
height = _entry$contentRect.height;
setBadgeSize(getBadgeSize(width, height));
if ((0, _platformFeatureFlags.fg)('platform_editor_support_media_badge_visibility')) {
setVisible(getBadgeVisible(width, height));
}
}));
if (mediaElement) {
// Ignored via go/ees005
// eslint-disable-next-line @atlaskit/editor/no-as-casting
observer.observe(mediaElement);
}
return function () {
observer.disconnect();
};
}, [mediaElement]);
if (typeof children === 'function') {
children = children({
badgeSize: badgeSize,
visible: visible
});
}
if (!mediaElement || _react.default.Children.count(children) === 0) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
as: "div",
testId: "media-badges",
"data-media-badges": "true",
contentEditable: false,
xcss: [containerStyles, useMinimumZIndex && hackedZIndexStyles, extendedResizeOffset && resizeOffsetStyles, badgeSize === 'small' && smallBadgeStyles]
}, children);
};