@talend/react-components
Version:
Set of react components.
177 lines (174 loc) • 6.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.HiddenHeader = HiddenHeader;
exports.ListToVirtualizedList = ListToVirtualizedList;
exports.compareOrder = compareOrder;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _VirtualizedList = _interopRequireDefault(require("../../VirtualizedList"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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); }
function adaptOnSort(onChange) {
if (!onChange) {
return null;
}
return function onSortChange({
sortBy,
sortDirection
}) {
return onChange(null, {
field: sortBy,
isDescending: sortDirection === _VirtualizedList.default.SORT_BY.DESC
});
};
}
function HiddenHeader(props) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
className: "sr-only",
children: props.label
});
}
function compareOrder(a, b) {
if (!Number.isInteger(a.order) && !Number.isInteger(b.order)) {
return 0;
}
if (Number.isInteger(a.order) && !Number.isInteger(b.order)) {
return -1;
}
if (!Number.isInteger(a.order) && Number.isInteger(b.order)) {
return 1;
}
return a.order - b.order;
}
function ListToVirtualizedList(props) {
const {
itemProps,
sort,
titleProps
} = props;
if (titleProps) {
if (!titleProps.actionsKey) {
titleProps.actionsKey = 'actions';
}
if (!titleProps.persistentActionsKey) {
titleProps.persistentActionsKey = 'persistentActions';
}
}
// Backward compatibility: find array in object attr:
const supposedActions = {};
if (props.items.length > 0) {
const item = props.items[0];
Object.keys(item).filter(key => Array.isArray(item[key])).forEach(key => {
supposedActions[key] = true;
});
}
// Allow to override or add new cell renderer from outside
const listCellDictionary = {
..._VirtualizedList.default.cellDictionary,
...props.cellDictionary
};
const listHeaderDictionary = {
..._VirtualizedList.default.headerDictionary,
...props.headerDictionary
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_VirtualizedList.default, {
collection: props.items,
defaultHeight: props.defaultHeight,
id: props.id,
inProgress: props.inProgress,
isActive: itemProps && itemProps.isActive,
isSelected: itemProps && itemProps.isSelected,
noRowsRenderer: props.noRowsRenderer,
onRowClick: itemProps && itemProps.onRowClick,
onRowDoubleClick: titleProps && titleProps.onClick,
onToggleAll: itemProps && itemProps.onToggleAll,
rowHeight: props.rowHeight,
rowRenderers: props.rowRenderers,
selectionToggle: itemProps && itemProps.onToggle,
sort: adaptOnSort(sort && sort.onChange),
sortBy: sort && sort.field,
sortDirection: sort && sort.isDescending ? _VirtualizedList.default.SORT_BY.DESC : _VirtualizedList.default.SORT_BY.ASC,
type: props.displayMode.toUpperCase(),
children: props.columns.filter(item => !item.hidden).sort(compareOrder).map((column, index) => {
const cProps = {
label: column.label,
dataKey: column.key,
disableSort: column.disableSort,
width: -1,
// valid propType but disable inline style
...column
};
if (titleProps && column.key === titleProps.key) {
_extends(cProps, listCellDictionary.title, {
columnData: {
...titleProps,
'data-feature': column['data-feature']
}
});
} else if (supposedActions[column.key]) {
_extends(cProps, _VirtualizedList.default.cellDictionary.actions);
} else if (column.type && listCellDictionary[column.type]) {
_extends(cProps, listCellDictionary[column.type], {
columnData: column.data
});
}
if (column.hideHeader) {
cProps.disableSort = true;
cProps.headerRenderer = HiddenHeader;
} else if (column.header && listHeaderDictionary[column.header]) {
let header = listHeaderDictionary[column.header];
if (typeof header === 'function') {
header = {
headerRenderer: header
};
}
_extends(cProps, header, {
columnData: column.data
});
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_VirtualizedList.default.Content, {
...cProps
}, index);
})
});
}
ListToVirtualizedList.propTypes = {
id: _propTypes.default.string,
columns: _propTypes.default.arrayOf(_propTypes.default.object),
displayMode: _propTypes.default.oneOf(['large', 'table']),
defaultHeight: _propTypes.default.number,
cellDictionary: _propTypes.default.object,
headerDictionary: _propTypes.default.object,
itemProps: _propTypes.default.shape({
isActive: _propTypes.default.func,
isSelected: _propTypes.default.func,
onRowClick: _propTypes.default.func,
onToggle: _propTypes.default.func,
onToggleAll: _propTypes.default.func
}),
items: _propTypes.default.arrayOf(_propTypes.default.object),
inProgress: _propTypes.default.bool,
noRowsRenderer: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
rowHeight: _propTypes.default.number,
sort: _propTypes.default.shape({
onChange: _propTypes.default.func,
field: _propTypes.default.string,
isDescending: _propTypes.default.bool
}),
titleProps: _propTypes.default.shape({
actionsKey: _propTypes.default.string,
key: _propTypes.default.string,
onClick: _propTypes.default.func,
persistentActionsKey: _propTypes.default.string
}),
rowRenderers: _propTypes.default.object
};
ListToVirtualizedList.defaultProps = {
displayMode: 'table'
};
HiddenHeader.propTypes = {
label: _propTypes.default.string
};
//# sourceMappingURL=ListToVirtualizedList.component.js.map