UNPKG

oneframe-react

Version:

Oneframe React ## Components, Hooks, Helper Functions & State Management

72 lines (71 loc) 3.29 kB
"use strict"; 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);