@dotconnor/grommet
Version:
focus on the essential experience
139 lines (120 loc) • 5.63 kB
JavaScript
exports.__esModule = true;
exports.Detail = void 0;
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _Box = require("../Box");
var _Drop = require("../Drop");
var _Grid = require("../Grid");
var _Keyboard = require("../Keyboard");
var _Text = require("../Text");
var _utils = require("../../utils");
var _Swatch = require("./Swatch");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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 DetailControl = (0, _styledComponents["default"])(_Box.Box).withConfig({
displayName: "Detail__DetailControl",
componentId: "huiwg9-0"
})(["&:focus{", "}"], (0, _utils.focusStyle)());
var Detail = function Detail(_ref) {
var activeProperty = _ref.activeProperty,
axis = _ref.axis,
data = _ref.data,
pad = _ref.pad,
series = _ref.series,
seriesStyles = _ref.seriesStyles,
renderValue = _ref.renderValue;
var _useState = (0, _react.useState)(),
detailIndex = _useState[0],
setDetailIndex = _useState[1];
var activeIndex = (0, _react.useRef)();
var detailRefs = (0, _react.useMemo)(function () {
return [];
}, []);
var onMouseLeave = (0, _react.useCallback)(function (event) {
// Only remove detail if the mouse isn't over the active index.
// This helps distinguish leaving the drop on the edge where it is
// anchored.
var rect = activeIndex.current.getBoundingClientRect();
if (event.pageX < rect.left || event.pageX > rect.right || event.pageY < rect.top || event.pageY > rect.bottom) {
activeIndex.current = undefined;
setDetailIndex(undefined);
}
}, []);
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Keyboard.Keyboard, {
onLeft: function onLeft() {
if (detailIndex === undefined) setDetailIndex(data.length - 1);else if (detailIndex > 0) setDetailIndex(detailIndex - 1);
},
onRight: function onRight() {
if (detailIndex === undefined) setDetailIndex(0);else if (detailIndex < data.length - 1) setDetailIndex(detailIndex + 1);
}
}, /*#__PURE__*/_react["default"].createElement(DetailControl, {
key: "band",
tabIndex: 0,
direction: "row",
fill: true,
justify: "between",
responsive: false,
onFocus: function onFocus() {},
onBlur: function onBlur() {
return setDetailIndex(undefined);
}
}, data.map(function (_, i) {
return /*#__PURE__*/_react["default"].createElement(_Box.Box // eslint-disable-next-line react/no-array-index-key
, {
key: i,
align: "center",
responsive: false,
pad: {
horizontal: pad.horizontal
},
onMouseOver: function onMouseOver(event) {
activeIndex.current = event.currentTarget;
setDetailIndex(i);
},
onMouseLeave: onMouseLeave,
onFocus: function onFocus() {},
onBlur: function onBlur() {}
}, /*#__PURE__*/_react["default"].createElement(_Box.Box, {
ref: function ref(c) {
detailRefs[i] = c;
},
fill: "vertical",
border: detailIndex === i ? true : undefined
}));
}))), detailIndex !== undefined && detailRefs[detailIndex] && /*#__PURE__*/_react["default"].createElement(_Drop.Drop, {
key: "drop",
target: detailRefs[detailIndex],
align: detailIndex > data.length / 2 ? {
right: 'left'
} : {
left: 'right'
},
plain: true,
onMouseLeave: onMouseLeave
}, /*#__PURE__*/_react["default"].createElement(_Box.Box, {
pad: "small",
background: {
color: 'background-back'
}
}, /*#__PURE__*/_react["default"].createElement(_Grid.Grid, {
columns: ['auto', 'auto', 'auto'],
gap: "xsmall",
align: "center"
}, series.filter(function (_ref2) {
var property = _ref2.property;
return !activeProperty || activeProperty === property || axis && axis.x && axis.x.property === property;
}).map(function (serie) {
var propertyStyle = seriesStyles[serie.property];
return /*#__PURE__*/_react["default"].createElement(_react.Fragment, {
key: serie.property
}, propertyStyle ? /*#__PURE__*/_react["default"].createElement(_Swatch.Swatch, propertyStyle) : /*#__PURE__*/_react["default"].createElement("span", null), /*#__PURE__*/_react["default"].createElement(_Text.Text, {
size: "small"
}, serie.label || serie.property), /*#__PURE__*/_react["default"].createElement(_Text.Text, {
size: "small",
weight: "bold"
}, renderValue(serie, detailIndex)));
})))));
};
exports.Detail = Detail;
;