oneframe-react
Version:
Oneframe React ## Components, Hooks, Helper Functions & State Management
72 lines (71 loc) • 3.29 kB
JavaScript
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const lodash_1 = require("lodash");
const withTable_1 = require("./withTable");
const ArrowForward_1 = __importDefault(require("@material-ui/icons/ArrowForward"));
const IconButton_1 = __importDefault(require("@material-ui/core/IconButton"));
const prop_types_1 = __importDefault(require("prop-types"));
const Row = (props) => {
const { expandable, expandOpen, expandContent, expandIcon, expandIconPosition = 'left', className, tableSetState, onClick, } = props;
const initialState = {
open: false,
};
const [state, setState] = react_1.useState(initialState);
const { open } = state;
const handleStateChange = (key, value) => {
setState((prevState) => (Object.assign(Object.assign({}, prevState), { [key]: value })));
};
react_1.useEffect(() => {
if (expandOpen) {
handleStateChange('open', true);
}
}, [expandOpen]);
react_1.useEffect(() => {
if (expandable && tableSetState) {
tableSetState({
expand: true,
});
}
// eslint-disable-next-line
}, [expandable]);
const handleClick = () => {
onClick && onClick();
};
const renderExpandIcon = (position) => {
if (expandable && expandIconPosition === position) {
return (react_1.default.createElement("div", { className: `custom-table-cell expand-icon ${open ? 'active' : ''} ${expandIconPosition === 'right' ? 'expand-reverse' : ''}`, onClick: () => handleStateChange('open', !open) },
react_1.default.createElement(IconButton_1.default, null, expandIcon || react_1.default.createElement(ArrowForward_1.default, { fontSize: "small" }))));
}
return null;
};
return (react_1.default.createElement("div", { className: `custom-table-row ${className}` },
react_1.default.createElement("div", { className: "custom-table-row-list", onClick: handleClick },
renderExpandIcon('left'),
props.children,
renderExpandIcon('right')),
open ? react_1.default.createElement("div", { className: "expandable-content" }, expandContent) : null));
};
Row.propTypes = {
expandable: prop_types_1.default.bool,
expandOpen: prop_types_1.default.bool,
expandContent: prop_types_1.default.any,
expandIcon: prop_types_1.default.any,
expandIconPosition: prop_types_1.default.oneOf(['left', 'right']),
children: prop_types_1.default.any.isRequired,
className: prop_types_1.default.string,
tableSetState: prop_types_1.default.func,
onClick: prop_types_1.default.func,
};
const MemoComponent = react_1.default.memo(Row, (p, n) => lodash_1.isEqual(p, n));
exports.default = withTable_1.withTable(MemoComponent);
;