UNPKG

grommet

Version:

focus on the essential experience

165 lines (164 loc) 6.89 kB
"use strict"; exports.__esModule = true; exports.DataSort = void 0; var _react = _interopRequireWildcard(require("react")); var _Descend = require("grommet-icons/icons/Descend"); var _DataContext = require("../../contexts/DataContext"); var _Box = require("../Box"); var _DataForm = require("../Data/DataForm"); var _DropButton = require("../DropButton"); var _DataFormContext = require("../../contexts/DataFormContext"); var _FormField = require("../FormField"); var _RadioButtonGroup = require("../RadioButtonGroup"); var _Select = require("../Select"); var _MessageContext = require("../../contexts/MessageContext"); var _propTypes = require("./propTypes"); var _useThemeValue2 = require("../../utils/useThemeValue"); var _utils = require("../Select/utils"); var _excluded = ["drop", "options"]; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } var dropProps = { align: { top: 'bottom', left: 'left' } }; var Content = function Content(_ref) { var optionsArg = _ref.options; var _useContext = (0, _react.useContext)(_DataContext.DataContext), data = _useContext.data, dataId = _useContext.id, messages = _useContext.messages, properties = _useContext.properties; var _useContext2 = (0, _react.useContext)(_MessageContext.MessageContext), format = _useContext2.format; var selectProps = (0, _react.useMemo)(function () { var props = {}; if (optionsArg) { props = { options: optionsArg }; } if (properties && Array.isArray(properties)) { props = { options: properties }; } else if (properties && typeof properties === 'object') { props = { options: Object.entries(properties).filter(function (_ref2) { var sort = _ref2[1].sort; return !(sort === false); }).map(function (_ref3) { var key = _ref3[0], label = _ref3[1].label; return { key: key, label: label || key }; }).sort(function (a, b) { return a.label.localeCompare(b.label); }), valueKey: { key: 'key', reduce: true }, labelKey: 'label' }; } else { props = { options: data.length > 0 && Object.keys(data[0]).sort() || data }; } return props; }, [data, optionsArg, properties]); var directionOptions = [{ label: format({ id: 'dataSort.ascending', messages: messages == null ? void 0 : messages.dataSort }), value: 'asc' }, { label: format({ id: 'dataSort.descending', messages: messages == null ? void 0 : messages.dataSort }), value: 'desc' }]; var sortPropertyId = dataId + "--sort-property"; var sortDirectionId = dataId + "--sort-direction"; return [/*#__PURE__*/_react["default"].createElement(_FormField.FormField, { key: "by", htmlFor: (0, _utils.selectInputId)(sortPropertyId), label: format({ id: 'dataSort.by', messages: messages == null ? void 0 : messages.dataSort }) }, /*#__PURE__*/_react["default"].createElement(_Select.Select, _extends({ id: sortPropertyId, name: "_sort.property" }, selectProps))), /*#__PURE__*/_react["default"].createElement(_FormField.FormField, { key: "dir", htmlFor: sortDirectionId, label: format({ id: 'dataSort.direction', messages: messages == null ? void 0 : messages.dataSort }) }, /*#__PURE__*/_react["default"].createElement(_RadioButtonGroup.RadioButtonGroup, { id: sortDirectionId, name: "_sort.direction", options: directionOptions }))]; }; var DataSort = exports.DataSort = function DataSort(_ref4) { var _theme$dataSort, _theme$data$button, _theme$data; var drop = _ref4.drop, options = _ref4.options, rest = _objectWithoutPropertiesLoose(_ref4, _excluded); var _useContext3 = (0, _react.useContext)(_DataContext.DataContext), dataId = _useContext3.id, messages = _useContext3.messages; var _useContext4 = (0, _react.useContext)(_DataFormContext.DataFormContext), inDataForm = _useContext4.inDataForm; var _useContext5 = (0, _react.useContext)(_MessageContext.MessageContext), format = _useContext5.format; var _useThemeValue = (0, _useThemeValue2.useThemeValue)(), theme = _useThemeValue.theme; var _useState = (0, _react.useState)(), showContent = _useState[0], setShowContent = _useState[1]; var ControlIcon = ((_theme$dataSort = theme.dataSort) == null || (_theme$dataSort = _theme$dataSort.icons) == null ? void 0 : _theme$dataSort.control) || _Descend.Descend; var content = /*#__PURE__*/_react["default"].createElement(Content, { options: options }); if (!inDataForm) content = /*#__PURE__*/_react["default"].createElement(_DataForm.DataForm, { footer: false, updateOn: "change" }, content); if (!drop) return content; var tip = format({ id: 'dataSort.open', messages: messages == null ? void 0 : messages.dataSort }); var control = /*#__PURE__*/_react["default"].createElement(_DropButton.DropButton, _extends({ id: dataId + "--sort-control", "aria-label": tip, tip: tip, kind: (_theme$data$button = theme.data.button) == null ? void 0 : _theme$data$button.kind, icon: /*#__PURE__*/_react["default"].createElement(ControlIcon, null), dropProps: dropProps, dropContent: /*#__PURE__*/_react["default"].createElement(_Box.Box, { pad: (_theme$data = theme.data) == null || (_theme$data = _theme$data.drop) == null ? void 0 : _theme$data.pad }, content), open: showContent, onOpen: function onOpen() { return setShowContent(undefined); }, onClose: function onClose() { return setShowContent(undefined); } }, rest)); return control; }; DataSort.propTypes = _propTypes.DataSortPropTypes;