@centreon/react-components
Version:
react components used by centreon web frontend
662 lines (591 loc) • 26.5 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styles = require("@material-ui/core/styles");
var _Table = _interopRequireDefault(require("@material-ui/core/Table"));
var _TableBody = _interopRequireDefault(require("@material-ui/core/TableBody"));
var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
var _LinearProgress = _interopRequireDefault(require("@material-ui/core/LinearProgress"));
var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
var _Box = _interopRequireDefault(require("@material-ui/core/Box"));
var _StyledTableRow = _interopRequireDefault(require("./StyledTableRow"));
var _IconPowerSettings = _interopRequireDefault(require("../../MaterialComponents/Icons/IconPowerSettings"));
var _IconPowerSettingsDisable = _interopRequireDefault(require("../../MaterialComponents/Icons/IconPowerSettingsDisable"));
var _StyledCheckbox = _interopRequireDefault(require("./StyledCheckbox"));
var _IconDelete = _interopRequireDefault(require("../../MaterialComponents/Icons/IconDelete"));
var _IconLibraryAdd = _interopRequireDefault(require("../../MaterialComponents/Icons/IconLibraryAdd"));
var _EnhancedTableHead = _interopRequireDefault(require("./EnhancedTableHead"));
var _ColumnTypes = _interopRequireDefault(require("../ColumnTypes"));
var _TablePaginationActions = _interopRequireDefault(require("./TablePaginationActions"));
var _StyledTableCell = _interopRequireDefault(require("./StyledTableCell2"));
var _TableCellCustom = _interopRequireDefault(require("./TableCellCustom"));
var _StyledPagination = _interopRequireDefault(require("./StyledPagination"));
var _Tooltip2 = _interopRequireDefault(require("../../MaterialComponents/Tooltip"));
var _InputFieldSelectTableCell = _interopRequireDefault(require("../../InputField/InputFieldSelectTableCell"));
var _InputFieldTableCell = _interopRequireDefault(require("../../InputField/InputFieldTableCell"));
var _IndicatorsEditorRow = _interopRequireDefault(require("./IndicatorsEditorRow"));
/* eslint-disable react/jsx-no-bind */
/* eslint-disable react/jsx-filename-extension */
var loadingIndicatorHeight = 3;
var styles = function styles() {
return {
root: {
width: '100%',
display: 'flex'
},
paper: {
width: '100%',
display: 'flex',
flexDirection: 'column',
boxShadow: 'none',
background: 'none'
},
tableWrapper: {
boxShadow: '0px 1px 3px 0px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 2px 1px -1px rgba(0,0,0,0.12)',
overflow: 'auto',
maxHeight: 'calc(100vh - 200px)'
},
rowDisabled: {
backgroundColor: 'rgba(0, 0, 0, 0.07) !important'
},
loadingIndicator: {
width: '100%',
height: loadingIndicatorHeight
}
};
};
var TableCustom =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(TableCustom, _Component);
function TableCustom() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2["default"])(this, TableCustom);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(TableCustom)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
order: '',
orderBy: ''
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleRequestSort", function (event, property) {
var onSort = _this.props.onSort;
var _this$state = _this.state,
orderBy = _this$state.orderBy,
order = _this$state.order;
var isDesc = orderBy === property && order === 'desc';
_this.setState({
order: isDesc ? 'asc' : 'desc',
orderBy: property
}, function () {
onSort({
order: isDesc ? 'asc' : 'desc',
orderBy: property
});
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleSelectAllClick", function (event) {
var _this$props = _this.props,
onEntitiesSelected = _this$props.onEntitiesSelected,
onTableSelectionChanged = _this$props.onTableSelectionChanged,
tableData = _this$props.tableData,
nameIdPaired = _this$props.nameIdPaired,
indicatorsEditor = _this$props.indicatorsEditor;
if (event.target.checked) {
var newSelecteds = indicatorsEditor ? tableData : nameIdPaired ? tableData.map(function (n) {
return "".concat(n.id, ":").concat(n.name);
}) : tableData.map(function (n) {
return n.id;
});
onTableSelectionChanged(newSelecteds);
onEntitiesSelected(tableData);
return;
}
onTableSelectionChanged([]);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClick", function (event, row, editing) {
event.preventDefault();
event.stopPropagation();
var _this$props2 = _this.props,
onEntitiesSelected = _this$props2.onEntitiesSelected,
onTableSelectionChanged = _this$props2.onTableSelectionChanged,
selected = _this$props2.selected,
nameIdPaired = _this$props2.nameIdPaired,
indicatorsEditor = _this$props2.indicatorsEditor,
tableData = _this$props2.tableData;
var value = indicatorsEditor ? row : nameIdPaired ? "".concat(row.id, ":").concat(row.name) : row.id;
var selectedIndex = indicatorsEditor ? selected.map(function (_ref) {
var object = _ref.object,
type = _ref.type;
return object.id + type + "Typed";
}).indexOf(value.object.id + value.type + "Typed") : selected.indexOf(value);
var newSelected = [];
if (editing) {
newSelected = selected;
newSelected[selectedIndex] = indicatorsEditor ? row : value;
} else if (selectedIndex === -1) {
newSelected = newSelected.concat(selected, indicatorsEditor ? row : value);
} else if (selectedIndex === 0) {
newSelected = newSelected.concat(selected.slice(1));
} else if (selectedIndex === selected.length - 1) {
newSelected = newSelected.concat(selected.slice(0, -1));
} else if (selectedIndex > 0) {
newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));
}
onEntitiesSelected(tableData.filter(function (_ref2) {
var id = _ref2.id;
return newSelected.includes(id);
}));
onTableSelectionChanged(newSelected);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "rowHovered", function (id, value) {
_this.setState({
hovered: value ? id : null
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addConditionalRowBackground", function (row, column, backgroundClass, attribute, classes) {
return column ? (0, _defineProperty2["default"])({}, attribute, !row[column] ? classes[backgroundClass] : '') : {};
});
return _this;
}
(0, _createClass2["default"])(TableCustom, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props3 = this.props,
columnConfiguration = _this$props3.columnConfiguration,
tableData = _this$props3.tableData,
onDelete = _this$props3.onDelete,
onPaginate = _this$props3.onPaginate,
onDuplicate = _this$props3.onDuplicate,
onPaginationLimitChanged = _this$props3.onPaginationLimitChanged,
labelDisplayedRows = _this$props3.labelDisplayedRows,
labelRowsPerPage = _this$props3.labelRowsPerPage,
limit = _this$props3.limit,
checkable = _this$props3.checkable,
currentPage = _this$props3.currentPage,
classes = _this$props3.classes,
totalRows = _this$props3.totalRows,
onEnable = _this$props3.onEnable,
onDisable = _this$props3.onDisable,
_this$props3$onRowCli = _this$props3.onRowClick,
onRowClick = _this$props3$onRowCli === void 0 ? function () {} : _this$props3$onRowCli,
selected = _this$props3.selected,
enabledColumn = _this$props3.enabledColumn,
nameIdPaired = _this$props3.nameIdPaired,
indicatorsEditor = _this$props3.indicatorsEditor,
emptyDataMessage = _this$props3.emptyDataMessage,
loadingDataMessage = _this$props3.loadingDataMessage,
ariaLabel = _this$props3.ariaLabel,
impacts = _this$props3.impacts,
_this$props3$paginate = _this$props3.paginated,
paginated = _this$props3$paginate === void 0 ? true : _this$props3$paginate,
loading = _this$props3.loading;
var _this$state2 = this.state,
order = _this$state2.order,
orderBy = _this$state2.orderBy,
hovered = _this$state2.hovered;
var isSelected = function isSelected(value) {
// eslint-disable-next-line
for (var i = 0; i < selected.length; i++) {
// eslint-disable-next-line
if (indicatorsEditor) {
if (selected[i].object.id === value.object.id && selected[i].type === value.type) {
return {
bool: true,
obj: selected[i]
};
}
} else if (selected[i] === value) {
return {
bool: true,
obj: selected[i]
};
}
}
return {
bool: false,
obj: null
};
};
var emptyRows = limit - Math.min(limit, totalRows - currentPage * limit);
return _react["default"].createElement(_react["default"].Fragment, null, loading && _react["default"].createElement(_LinearProgress["default"], {
className: classes.loadingIndicator
}), !loading && _react["default"].createElement("div", {
className: classes.loadingIndicator
}), _react["default"].createElement("div", {
className: classes.root
}, _react["default"].createElement(_Paper["default"], {
className: classes.paper
}, paginated ? _react["default"].createElement(_StyledPagination["default"], {
rowsPerPageOptions: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
labelDisplayedRows: labelDisplayedRows,
labelRowsPerPage: labelRowsPerPage,
colSpan: 3,
count: totalRows,
rowsPerPage: limit,
page: currentPage,
style: {
display: 'flex',
flexDirection: 'row-reverse',
padding: 0,
background: '#fff'
},
SelectProps: {
"native": true
},
onChangePage: onPaginate,
onChangeRowsPerPage: onPaginationLimitChanged,
ActionsComponent: _TablePaginationActions["default"]
}) : null, _react["default"].createElement("div", {
className: classes.tableWrapper,
style: indicatorsEditor ? {
overflow: 'initial'
} : {}
}, _react["default"].createElement(_Table["default"], {
className: classes.table,
"aria-label": ariaLabel,
size: "small",
stickyHeader: true
}, _react["default"].createElement(_EnhancedTableHead["default"], {
numSelected: selected ? selected.length : 0,
order: order,
checkable: checkable,
orderBy: orderBy,
onSelectAllClick: this.handleSelectAllClick,
onRequestSort: this.handleRequestSort,
rowCount: limit - emptyRows,
className: classes.tableWrapper,
headRows: columnConfiguration,
indicatorsEditor: indicatorsEditor
}), _react["default"].createElement(_TableBody["default"], {
onMouseLeave: this.rowHovered.bind(this, '', false),
style: {
position: 'relative'
}
}, tableData.map(function (row, index) {
var isItemSelected = isSelected(indicatorsEditor ? row : nameIdPaired ? "".concat(row.id, ":").concat(row.name) : row.id);
return _react["default"].createElement(_StyledTableRow["default"], (0, _extends2["default"])({
hover: true,
tabIndex: -1,
key: index + ariaLabel,
onMouseEnter: _this2.rowHovered.bind(_this2, row.id, true)
}, _this2.addConditionalRowBackground(row, enabledColumn, 'rowDisabled', 'className', classes), {
onClick: function onClick() {
onRowClick(row.id);
}
}), checkable ? _react["default"].createElement(_StyledTableCell["default"], {
align: "left",
onClick: function onClick(event) {
return _this2.handleClick(event, row);
},
className: classes.tableCell,
padding: "checkbox",
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, _react["default"].createElement(_StyledCheckbox["default"], {
checked: isItemSelected.bool,
color: "primary"
})) : null, columnConfiguration.map(function (column) {
switch (column.type) {
case _ColumnTypes["default"].number:
return _react["default"].createElement(_TableCellCustom["default"], {
align: "left",
className: classes.tableCellCustom,
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, row[column.id] || '');
case _ColumnTypes["default"].string:
case _ColumnTypes["default"].number:
return _react["default"].createElement(_TableCellCustom["default"], {
key: column.id,
align: "left",
className: classes.tableCellCustom,
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, column.image && _react["default"].createElement("img", {
src: row.iconPath,
style: {
maxWidth: 21,
display: 'inline-block',
verticalAlign: 'middle',
marginRight: 5
}
}), column.subkey ? row[column.subkey][column.id] || '' : row[column.id] || '');
case _ColumnTypes["default"]["boolean"]:
return _react["default"].createElement(_StyledTableCell["default"], {
align: "left",
style: indicatorsEditor ? {
padding: '5px 4px'
} : {}
}, row[column.id] ? _react["default"].createElement(_IconButton["default"], {
style: {
position: 'absolute',
top: -1,
width: 31,
height: 31,
padding: 5
},
disabled: true
}, _react["default"].createElement(_IconPowerSettings["default"], {
active: true,
customStyle: {
fontSize: 18,
boxSizing: 'border-box',
position: 'relative',
top: -2
}
})) : _react["default"].createElement(_IconButton["default"], {
style: {
position: 'absolute',
top: -1,
width: 31,
height: 31,
padding: 5
},
disabled: true
}, _react["default"].createElement(_IconPowerSettingsDisable["default"], {
active: true,
customStyle: {
fontSize: 18,
boxSizing: 'border-box',
position: 'relative',
top: -2
}
})));
case _ColumnTypes["default"].toggler:
return _react["default"].createElement(_StyledTableCell["default"], {
align: "left",
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, row[column.id] ? _react["default"].createElement(_Tooltip2["default"], {
label: "Enable/Disable",
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onDisable([row.id]);
}
}, _react["default"].createElement(_IconPowerSettings["default"], {
label: "Disable",
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onDisable([row.id]);
},
active: true,
customStyle: {
fontSize: 18,
boxSizing: 'border-box',
position: 'relative',
top: -2
}
})) : _react["default"].createElement(_Tooltip2["default"], {
label: "Enable/Disable",
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onEnable([row.id]);
}
}, _react["default"].createElement(_IconPowerSettingsDisable["default"], {
active: true,
label: "Disable",
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onEnable([row.id]);
},
customStyle: {
fontSize: 18,
boxSizing: 'border-box',
position: 'relative',
top: -2
}
})));
case _ColumnTypes["default"].input:
return _react["default"].createElement(_StyledTableCell["default"], {
align: "left",
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, _react["default"].createElement(_InputFieldTableCell["default"], null));
case _ColumnTypes["default"].select:
return _react["default"].createElement(_StyledTableCell["default"], {
align: "left",
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, _react["default"].createElement(_InputFieldSelectTableCell["default"], {
options: column.options,
value: column.subkey ? row[column.subkey][column.id] : row[column.key],
active: "active"
}));
case _ColumnTypes["default"].widthVariation:
return _react["default"].createElement(_TableCellCustom["default"], {
key: column.id,
align: "left",
className: classes.tableCellCustom,
colSpan: isItemSelected.bool ? 1 : 5,
style: indicatorsEditor ? {
padding: '3px 4px',
maxWidth: '155px'
} : {}
}, _react["default"].createElement(_Tooltip["default"], {
title: "".concat(row[column.id], " (").concat(row[column.subValue], ")"),
placement: "top"
}, _react["default"].createElement("span", null, "".concat(row[column.id], " (").concat(row[column.subValue], ")"))));
case _ColumnTypes["default"].multicolumn:
return _react["default"].createElement(_TableCellCustom["default"], {
key: column.id,
align: "left",
className: classes.tableCellCustom,
style: indicatorsEditor ? {
padding: '3px 4px'
} : {}
}, column.columns.map(function (subColumn) {
return _react["default"].createElement(_react["default"].Fragment, null, "".concat(subColumn.label, " ").concat(row[subColumn.id]), subColumn.type === 'percentage' ? '%' : null, ' ');
}));
case _ColumnTypes["default"].hoverActions:
return _react["default"].createElement(_StyledTableCell["default"], {
align: "right",
key: column.id,
style: {
paddingTop: 0,
paddingBottom: 0,
width: 100,
boxSizing: 'border-box',
padding: '0 !important'
}
}, hovered === row.id ? _react["default"].createElement(_Box["default"], {
flexDirection: "row",
display: "flex",
style: {
marginRight: -18,
position: 'absolute',
top: 3,
right: 5
}
}, _react["default"].createElement(_Box["default"], null, _react["default"].createElement(_Tooltip2["default"], {
label: "Delete",
onClick: function onClick() {
onDelete([row.id]);
}
}, _react["default"].createElement(_IconDelete["default"], {
customStyle: {
color: '#707070',
fontSize: 21
},
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onDelete([row.id]);
}
}))), _react["default"].createElement(_Box["default"], null, _react["default"].createElement(_Tooltip2["default"], {
label: "Duplicate",
onClick: function onClick() {
onDuplicate([row.id]);
}
}, _react["default"].createElement(_IconLibraryAdd["default"], {
customStyle: {
color: '#707070',
fontSize: 20
},
onClick: function onClick(e) {
e.preventDefault();
e.stopPropagation();
onDuplicate([row.id]);
}
})))) : ' ');
default:
return null;
}
}), indicatorsEditor ? _react["default"].createElement(_IndicatorsEditorRow["default"], {
row: row,
index: index,
impacts: impacts,
selected: isItemSelected,
onImpactEdit: _this2.handleClick
}) : null);
}), tableData.length < 1 && _react["default"].createElement(_StyledTableRow["default"], {
tabIndex: -1
}, _react["default"].createElement(_TableCellCustom["default"], {
className: classes.tableCellCustom,
colSpan: 6,
align: "center"
}, loading ? loadingDataMessage : emptyDataMessage))))))));
}
}]);
return TableCustom;
}(_react.Component);
TableCustom.defaultProps = {
enabledColumn: '',
onRowClick: function onRowClick() {},
labelDisplayedRows: function labelDisplayedRows(_ref4) {
var from = _ref4.from,
to = _ref4.to,
count = _ref4.count;
return "".concat(from, "-").concat(to, " of ").concat(count);
},
labelRowsPerPage: 'Rows per page',
onEntitiesSelected: function onEntitiesSelected() {},
onTableSelectionChanged: function onTableSelectionChanged() {},
nameIdPaired: false,
indicatorsEditor: false,
emptyDataMessage: 'No results found',
loadingDataMessage: 'Loading data',
loading: false
};
var anyObject = _propTypes["default"].objectOf(_propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string, _propTypes["default"].number]));
var anyArray = _propTypes["default"].arrayOf(anyObject);
TableCustom.propTypes = {
classes: anyObject.isRequired,
onSort: _propTypes["default"].func.isRequired,
onEntitiesSelected: _propTypes["default"].func,
onTableSelectionChanged: _propTypes["default"].func,
columnConfiguration: anyArray.isRequired,
tableData: anyArray.isRequired,
onDelete: _propTypes["default"].func.isRequired,
onPaginate: _propTypes["default"].func.isRequired,
onDuplicate: _propTypes["default"].func.isRequired,
onPaginationLimitChanged: _propTypes["default"].func.isRequired,
labelDisplayedRows: _propTypes["default"].func,
labelRowsPerPage: _propTypes["default"].string,
limit: _propTypes["default"].number.isRequired,
checkable: _propTypes["default"].bool.isRequired,
currentPage: _propTypes["default"].number.isRequired,
totalRows: _propTypes["default"].number.isRequired,
onEnable: _propTypes["default"].func.isRequired,
onDisable: _propTypes["default"].func.isRequired,
onRowClick: _propTypes["default"].func,
selected: anyArray.isRequired,
enabledColumn: _propTypes["default"].string,
nameIdPaired: _propTypes["default"].bool,
indicatorsEditor: _propTypes["default"].bool,
emptyDataMessage: _propTypes["default"].string,
loadingDataMessage: _propTypes["default"].string,
loading: _propTypes["default"].bool
};
var _default = (0, _styles.withStyles)(styles, {
withTheme: true
})(TableCustom);
exports["default"] = _default;