@krowdy-ui/views
Version:
React components that implement Google's Material Design.
547 lines (495 loc) • 20.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.styles = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styles = require("@krowdy-ui/styles");
var _core = require("@krowdy-ui/core");
var _Search = _interopRequireDefault(require("@material-ui/icons/Search"));
var _Star = _interopRequireDefault(require("@material-ui/icons/Star"));
var _StarBorder = _interopRequireDefault(require("@material-ui/icons/StarBorder"));
var _dxReactGrid = require("@devexpress/dx-react-grid");
var _dxReactGridMaterialUi = require("@devexpress/dx-react-grid-material-ui");
var _Autocomplete = _interopRequireDefault(require("@material-ui/lab/Autocomplete"));
var _excluded = ["row"],
_excluded2 = ["value"];
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 styles = function styles(theme) {
return {
containerFullwidth: {
height: '100%'
},
containerHeaderTable: {
padding: theme.spacing(2)
},
containerSearch: {
display: 'flex',
justifyContent: 'space-between'
},
contetPagination: {
display: 'flex',
justifyContent: 'flex-end',
padding: 20
},
gridTableChip: {
'&:focus': {
'& > div': {
'&:focus': {
background: '#F3FBFF'
}
}
},
'&:hover': {
background: '#F3FBFF'
},
background: '#F3FBFF',
border: '1px solid #80DBFF'
},
gridTableGroupingEmpty: {
'& > div': {
background: 'transparent',
border: "solid 1px ".concat(theme.palette.primary.main),
color: '#595959'
},
alignItems: 'center',
display: 'flex',
height: '32px',
marginTop: theme.spacing(1)
},
gridTableHeader: {
'& svg': {
color: "".concat(theme.palette.primary.main, " !important")
},
'& th': {},
fontSize: '0.875rem',
fontWeight: 'bold',
padding: theme.spacing(1, 2)
},
gridTableHeaderGroup: {
'& > td': {
background: '#E6E9F0'
},
'& > td > div': {
background: '#E6E9F0',
color: '#262626',
fontWeight: 'bold'
},
background: '#E6E9F0'
},
gridTableHeaderRoot: {
background: '#F2F4F7'
},
gridTableSearch: {
background: '#fff',
padding: theme.spacing(2),
paddingBottom: 0
},
gridTableToolbar: {
display: 'flex',
flexDirection: 'column',
padding: theme.spacing(2)
},
inputSearch: {
'& * input': {
fontSize: 14,
padding: '12px 10px !important'
},
'& > div': {
padding: '0 14px 0 0 !important'
},
margin: '2px 0'
},
paperRoot: {
'& > div:first-child': {
height: '100%'
},
'& > div:first-child > div:nth-child(2)': {
flex: 1,
overflow: 'auto'
},
height: '100%'
},
searchIcon: {
cursor: 'pointer'
},
tableContainer: {
display: 'flex',
flexDirection: 'column',
height: '100%'
}
};
};
exports.styles = styles;
var formatColumnsExtension = function formatColumnsExtension(columns) {
return columns.map(function (column) {
if (column.type) if (column.type === 'star') column.width = 160;
return (0, _extends2["default"])({}, column, {
columnName: column.key,
title: column.label
});
});
};
var formatColumns = function formatColumns(columns) {
return columns.map(function (column) {
return (0, _extends2["default"])({}, column, {
name: column.key,
title: column.label
});
});
};
var columnsDraggableDisable = function columnsDraggableDisable(columns) {
return columns.map(function (column) {
return {
columnName: column.key,
groupingEnabled: column.draggable
};
});
};
var sortingFormat = function sortingFormat(sortings) {
return sortings.map(function (sorting) {
return {
columnName: sorting.orderBy,
direction: sorting.sort
};
});
};
var sortingFormatReverse = function sortingFormatReverse(sortings) {
return sortings.map(function (sorting) {
return {
orderBy: sorting.columnName,
sort: sorting.direction
};
});
};
var getRowId = function getRowId(row) {
return row._id;
};
var TableRow = function TableRow(_ref, callback) {
var row = _ref.row,
restProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
return /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Table.Row, (0, _extends2["default"])({}, restProps, {
onClick: function onClick() {
return callback(row._id);
},
style: {
cursor: 'pointer'
}
}));
};
var StartCell = function StartCell(_ref2) {
var value = _ref2.value,
restProps = (0, _objectWithoutProperties2["default"])(_ref2, _excluded2);
var column = restProps.column;
return /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Table.Cell, restProps, /*#__PURE__*/_react["default"].createElement("span", null, value ? [1, 2, 3, 4, 5].map(function (currentValue) {
return currentValue <= value ? /*#__PURE__*/_react["default"].createElement(_Star["default"], {
color: "primary",
key: "star-".concat(column._id, "-").concat(currentValue)
}) : /*#__PURE__*/_react["default"].createElement(_StarBorder["default"], {
color: "primary",
key: "star-".concat(column._id, "-").concat(currentValue)
});
}) : ''));
};
var TableCell = function TableCell(props) {
var column = props.column;
if (column.type === 'star') return /*#__PURE__*/_react["default"].createElement(StartCell, props);
return /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Table.Cell, props);
};
var _ref3 = /*#__PURE__*/_react["default"].createElement(_Search["default"], null);
var _ref4 = /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.DragDropProvider, null);
var _ref5 = /*#__PURE__*/_react["default"].createElement(_dxReactGrid.IntegratedSorting, null);
var _ref7 = /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Toolbar, null);
var TableGroup = function TableGroup(props) {
var classes = props.classes,
_props$rows = props.rows,
rows = _props$rows === void 0 ? [] : _props$rows,
_props$columns = props.columns,
columns = _props$columns === void 0 ? [] : _props$columns,
_props$groupingData = props.groupingData,
groupingData = _props$groupingData === void 0 ? [] : _props$groupingData,
_props$changeGrouping = props.changeGrouping,
changeGrouping = _props$changeGrouping === void 0 ? function () {} : _props$changeGrouping,
_props$sorting = props.sorting,
sorting = _props$sorting === void 0 ? false : _props$sorting,
_props$grouping = props.grouping,
grouping = _props$grouping === void 0 ? false : _props$grouping,
_props$sortingData = props.sortingData,
sortingData = _props$sortingData === void 0 ? [] : _props$sortingData,
_props$changeSorting = props.changeSorting,
changeSorting = _props$changeSorting === void 0 ? function () {} : _props$changeSorting,
_props$withPagination = props.withPagination,
withPagination = _props$withPagination === void 0 ? false : _props$withPagination,
_props$withHeader = props.withHeader,
withHeader = _props$withHeader === void 0 ? false : _props$withHeader,
_props$withSearch = props.withSearch,
withSearch = _props$withSearch === void 0 ? false : _props$withSearch,
_props$onChangePerPag = props.onChangePerPage,
onChangePerPage = _props$onChangePerPag === void 0 ? function () {} : _props$onChangePerPag,
_props$withAutocomple = props.withAutocomplete,
withAutocomplete = _props$withAutocomple === void 0 ? false : _props$withAutocomple,
_props$searchSuggesti = props.searchSuggestions,
searchSuggestions = _props$searchSuggesti === void 0 ? [] : _props$searchSuggesti,
_props$onHandleSearch = props.onHandleSearch,
onHandleSearch = _props$onHandleSearch === void 0 ? function () {} : _props$onHandleSearch,
_props$groupingDataTe = props.groupingDataTemp,
groupingDataTemp = _props$groupingDataTe === void 0 ? null : _props$groupingDataTe,
_props$pagination = props.pagination,
pagination = _props$pagination === void 0 ? {} : _props$pagination,
_props$limitDragable = props.limitDragable,
limitDragable = _props$limitDragable === void 0 ? 1 : _props$limitDragable,
_props$onChangePage = props.onChangePage,
onChangePage = _props$onChangePage === void 0 ? function () {} : _props$onChangePage,
_props$onClickRow = props.onClickRow,
onClickRow = _props$onClickRow === void 0 ? function () {} : _props$onClickRow,
_props$onHandleSelect = props.onHandleSelectAutocomplete,
onHandleSelectAutocomplete = _props$onHandleSelect === void 0 ? function () {} : _props$onHandleSelect;
var _useState = (0, _react.useState)(formatColumns(columns)),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
columnsData = _useState2[0],
setColumnData = _useState2[1];
var _useState3 = (0, _react.useState)(formatColumnsExtension(columns)),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
columnsDataExtension = _useState4[0],
setColumnsDataExtension = _useState4[1];
var _useState5 = (0, _react.useState)(sortingFormat(sortingData)),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
sortingDataFormat = _useState6[0],
setSortingFormat = _useState6[1];
var _useState7 = (0, _react.useState)(columnsDraggableDisable(columns)),
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
groupingStateColumnExtensions = _useState8[0],
setGroupingStateColumnExtensions = _useState8[1];
var _useState9 = (0, _react.useState)([]),
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
expandData = _useState10[0],
setExpandData = _useState10[1];
var inputSearch = (0, _react.useRef)(null); // effects
(0, _react.useEffect)(function () {
if (columns.length) {
setColumnData(formatColumns(columns));
setGroupingStateColumnExtensions(columnsDraggableDisable(columns));
setColumnsDataExtension(formatColumnsExtension(columns));
}
}, [columns]);
(0, _react.useEffect)(function () {
if (sortingData.length) setSortingFormat(sortingFormat(sortingData));
}, [sortingData]); // actions
var getChildGroups = function getChildGroups(groups) {
return groups.map(function (group) {
return {
childRows: group.items,
key: group.key
};
});
};
var setExpandedGroups = function setExpandedGroups(value) {
// recibe un array de string ["Confirmed", "Completed"]
setExpandData(value);
};
var _handleSearchValidate = function _handleSearchValidate(e) {
var value = e.target.value;
if (e.keyCode === 13) onHandleSearch(value);
};
var onChangeSorting = function onChangeSorting(value) {
// if(multiSorting)
// if(sortingData.length) {
// const data = [
// ...sortingDataFormat.map(item => item.columnName === value[0].columnName ? value[0] : item),
// ...value
// ]
// changeSorting(sortingFormatReverse(data))
// } else {
// }
changeSorting(sortingFormatReverse(value));
};
var onChangeGrouping = function onChangeGrouping(value) {
if (rows.length) if (value.length <= limitDragable) changeGrouping(value);
};
return /*#__PURE__*/_react["default"].createElement(_core.Paper, {
classes: {
root: classes.paperRoot
},
style: {
position: 'relative'
},
variant: "outlined"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: classes.tableContainer
}, withHeader ? /*#__PURE__*/_react["default"].createElement("div", {
className: classes.containerHeaderTable
}, /*#__PURE__*/_react["default"].createElement("div", {
className: classes.containerSearch
}, withSearch ? withAutocomplete ? /*#__PURE__*/_react["default"].createElement(_Autocomplete["default"], {
freeSolo: true,
noOptionsText: "No hay coincidencias",
onChange: onHandleSelectAutocomplete,
options: searchSuggestions.map(function (option) {
return option.title;
}),
popupIcon: _ref3,
renderInput: function renderInput(params) {
return /*#__PURE__*/_react["default"].createElement(_core.TextField, (0, _extends2["default"])({}, params, {
className: classes.inputSearch,
fullWidth: true,
InputLabelProps: {
shrink: false
},
InputProps: (0, _extends2["default"])({}, params.InputProps, {
endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
position: "end"
}, /*#__PURE__*/_react["default"].createElement(_Search["default"], {
className: classes.searchIcon,
onClick: function onClick() {
return onHandleSearch(inputSearch.current.value);
}
}))
}),
inputRef: inputSearch,
onKeyUp: _handleSearchValidate,
placeholder: "Buscar",
variant: "outlined"
}));
},
style: {
width: 400
}
}) : /*#__PURE__*/_react["default"].createElement(_core.TextField, {
className: classes.inputSearch,
InputLabelProps: {
shrink: false
},
InputProps: {
endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
position: "end"
}, /*#__PURE__*/_react["default"].createElement(_Search["default"], {
className: classes.searchIcon,
onClick: function onClick() {
return onHandleSearch(inputSearch.current.value);
}
}))
},
inputRef: inputSearch,
onKeyUp: _handleSearchValidate,
placeholder: "Buscar",
style: {
width: 400
},
variant: "outlined"
}) : null)) : null, /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Grid, {
columns: columnsData,
getRowId: getRowId,
rows: rows
}, /*#__PURE__*/_react["default"].createElement(_dxReactGrid.SortingState, {
onSortingChange: onChangeSorting,
sorting: sortingDataFormat
}), grouping && _ref4, /*#__PURE__*/_react["default"].createElement(_dxReactGrid.GroupingState // expandedGroups={[ 'Confirmed' ]}
, {
columnExtensions: groupingStateColumnExtensions,
grouping: groupingData,
onExpandedGroupsChange: setExpandedGroups,
onGroupingChange: onChangeGrouping
}), /*#__PURE__*/_react["default"].createElement(_dxReactGrid.CustomGrouping, {
expandedGroups: expandData,
getChildGroups: getChildGroups,
grouping: groupingDataTemp
}), _ref5, /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.Table, {
cellComponent: TableCell,
columnExtensions: columnsDataExtension,
rowComponent: function rowComponent(row) {
return TableRow(row, onClickRow);
}
}), /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.TableHeaderRow, {
messages: {
sortingHint: 'Ordenar'
},
showSortingControls:
/* groupingData.length ? false : */
sorting
}), /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.TableGroupRow, {
rowComponent: function rowComponent(_ref6) {
var children = _ref6.children;
return /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.TableHeaderRow.Row, {
className: classes.gridTableHeaderGroup
}, children);
}
}), _ref7, /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.GroupingPanel, {
emptyMessageComponent: function emptyMessageComponent() {
return /*#__PURE__*/_react["default"].createElement("div", {
className: classes.gridTableGroupingEmpty
}, "Arrastra aqu\xED una columna para agrupar tus registros.");
},
itemComponent: function itemComponent(ev) {
var customSorting = true; // const customSorting = (ev.item && ev.item.column && groupingData.length) ?
// Boolean(ev.item.column.name === groupingData[0].columnName) : true
return /*#__PURE__*/_react["default"].createElement(_dxReactGridMaterialUi.GroupingPanel.Item, (0, _extends2["default"])({}, ev, {
className: classes.gridTableChip,
sortingEnabled: customSorting
}));
},
showGroupingControls: true,
showSortingControls: true
})), withPagination ? /*#__PURE__*/_react["default"].createElement("div", {
className: classes.contetPagination
}, /*#__PURE__*/_react["default"].createElement(_core.TablePagination, {
backIconButtonText: "P\xE1gina anterior",
component: "div",
labelRowsPerPage: "Mostrar",
nextIconButtonText: "P\xE1gina siguiente",
onChangePage: onChangePage,
onChangeRowsPerPage: onChangePerPage,
page: pagination.page,
rowsPerPage: pagination.perPage,
rowsPerPageOptions: [10, 25, 100],
totalItems: pagination.totalItems,
totalPages: pagination.totalPages
})) : null));
};
process.env.NODE_ENV !== "production" ? TableGroup.propTypes = {
changeGrouping: _propTypes["default"].func,
changeSorting: _propTypes["default"].func,
columns: _propTypes["default"].arrayOf(_propTypes["default"].shape({
align: _propTypes["default"].string,
currency: _propTypes["default"].bool,
key: _propTypes["default"].string.isRequired,
label: _propTypes["default"].string.isRequired,
minWidth: _propTypes["default"].number,
ordering: _propTypes["default"].bool
})).isRequired,
grouping: _propTypes["default"].bool,
groupingData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
name: _propTypes["default"].string
})),
limitDragable: _propTypes["default"].number,
onChangePage: _propTypes["default"].func,
onChangePerPage: _propTypes["default"].func,
onClickRow: _propTypes["default"].func,
onHandleSearch: _propTypes["default"].func,
onHandleSelectAutocomplete: _propTypes["default"].func,
pagination: _propTypes["default"].object,
rows: _propTypes["default"].arrayOf(_propTypes["default"].shape({
_id: _propTypes["default"].string.isRequired
})).isRequired,
searchSuggestions: _propTypes["default"].array,
sorting: _propTypes["default"].bool,
sortingData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
orderBy: _propTypes["default"].string,
sort: _propTypes["default"].string
})),
withAutocomplete: _propTypes["default"].bool,
withHeader: _propTypes["default"].bool,
withPagination: _propTypes["default"].bool,
withSearch: _propTypes["default"].bool
} : void 0;
TableGroup.muiName = 'TableGroup';
var _default = (0, _styles.withStyles)(styles, {
name: 'KrowdyTableGroup'
})(TableGroup);
exports["default"] = _default;