@shopify/polaris
Version:
Shopify’s admin product component library
97 lines (88 loc) • 4.62 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var polarisIcons = require('@shopify/polaris-icons');
var useToggle = require('../../utilities/use-toggle.js');
var css = require('../../utilities/css.js');
var MediaCard$1 = require('./MediaCard.scss.js');
var hooks = require('../../utilities/i18n/hooks.js');
var Button = require('../Button/Button.js');
var Popover = require('../Popover/Popover.js');
var ActionList = require('../ActionList/ActionList.js');
var utils = require('../Button/utils.js');
var Card = require('../Card/Card.js');
var Stack = require('../Stack/Stack.js');
var Heading = require('../Heading/Heading.js');
var ButtonGroup = require('../ButtonGroup/ButtonGroup.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
function MediaCard({
title,
children,
primaryAction,
secondaryAction,
description,
popoverActions = [],
portrait = false,
size = 'medium'
}) {
const i18n = hooks.useI18n();
const {
value: popoverActive,
toggle: togglePopoverActive
} = useToggle.useToggle(false);
let headerMarkup = null;
if (title) {
const headerContent = typeof title === 'string' ? /*#__PURE__*/React__default["default"].createElement(Heading.Heading, null, title) : title;
headerMarkup = /*#__PURE__*/React__default["default"].createElement("div", {
className: MediaCard$1["default"].Heading
}, headerContent);
}
const popoverActivator = /*#__PURE__*/React__default["default"].createElement(Button.Button, {
icon: polarisIcons.HorizontalDotsMinor,
onClick: togglePopoverActive,
size: "slim",
plain: true,
accessibilityLabel: i18n.translate('Polaris.MediaCard.popoverButton')
});
const popoverActionsMarkup = popoverActions.length > 0 ? /*#__PURE__*/React__default["default"].createElement("div", {
className: MediaCard$1["default"].Popover
}, /*#__PURE__*/React__default["default"].createElement(Popover.Popover, {
active: popoverActive,
activator: popoverActivator,
onClose: togglePopoverActive,
preferredAlignment: "left",
preferredPosition: "below"
}, /*#__PURE__*/React__default["default"].createElement(ActionList.ActionList, {
items: popoverActions,
onActionAnyItem: togglePopoverActive
}))) : null;
const primaryActionMarkup = primaryAction ? /*#__PURE__*/React__default["default"].createElement("div", {
className: MediaCard$1["default"].PrimaryAction
}, utils.buttonFrom(primaryAction)) : null;
const secondaryActionMarkup = secondaryAction ? /*#__PURE__*/React__default["default"].createElement("div", {
className: MediaCard$1["default"].SecondaryAction
}, utils.buttonFrom(secondaryAction, {
plain: true
})) : null;
const actionClassName = css.classNames(MediaCard$1["default"].ActionContainer, portrait && MediaCard$1["default"].portrait);
const actionMarkup = primaryActionMarkup || secondaryActionMarkup ? /*#__PURE__*/React__default["default"].createElement("div", {
className: actionClassName
}, /*#__PURE__*/React__default["default"].createElement(ButtonGroup.ButtonGroup, null, primaryActionMarkup, secondaryActionMarkup)) : null;
const mediaCardClassName = css.classNames(MediaCard$1["default"].MediaCard, portrait && MediaCard$1["default"].portrait);
const mediaContainerClassName = css.classNames(MediaCard$1["default"].MediaContainer, portrait && MediaCard$1["default"].portrait, size === 'small' && MediaCard$1["default"].sizeSmall);
const infoContainerClassName = css.classNames(MediaCard$1["default"].InfoContainer, portrait && MediaCard$1["default"].portrait, size === 'small' && MediaCard$1["default"].sizeSmall);
return /*#__PURE__*/React__default["default"].createElement(Card.Card, null, /*#__PURE__*/React__default["default"].createElement("div", {
className: mediaCardClassName
}, /*#__PURE__*/React__default["default"].createElement("div", {
className: mediaContainerClassName
}, children), /*#__PURE__*/React__default["default"].createElement("div", {
className: infoContainerClassName
}, /*#__PURE__*/React__default["default"].createElement(Card.Card.Section, null, popoverActionsMarkup, /*#__PURE__*/React__default["default"].createElement(Stack.Stack, {
vertical: true,
spacing: "tight"
}, headerMarkup, /*#__PURE__*/React__default["default"].createElement("p", {
className: MediaCard$1["default"].Description
}, description), actionMarkup)))));
}
exports.MediaCard = MediaCard;