UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

124 lines (123 loc) 5.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Tr; exports.useHandleOddEven = useHandleOddEven; require("core-js/modules/web.dom-collections.iterator.js"); var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _TableAccordionHead = require("./table-accordion/TableAccordionHead"); var _TableNavigationHead = require("./table-navigation/TableNavigationHead"); var _TableAccordionContent = require("./table-accordion/TableAccordionContent"); var _TableContext = require("./TableContext"); const _excluded = ["variant", "noWrap", "className"], _excluded2 = ["expanded", "disabled", "noAnimation", "onClick", "onOpened", "onClosed"]; 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 _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } function Tr(componentProps) { var _tableContext$allProp, _tableContext$allProp2, _tableContext$allProp3; const { variant, noWrap, className: _className } = componentProps, restProps = _objectWithoutProperties(componentProps, _excluded); const { currentVariant, isLast, count } = useHandleTrVariant({ variant }); const className = (0, _classnames.default)('dnb-table__tr', _className, currentVariant && `dnb-table__tr--${currentVariant}`, isLast && 'dnb-table__tr--last', noWrap && 'dnb-table--no-wrap'); const tableContext = _react.default.useContext(_TableContext.TableContext); const deprecatedAccordionProp = tableContext === null || tableContext === void 0 ? void 0 : (_tableContext$allProp = tableContext.allProps) === null || _tableContext$allProp === void 0 ? void 0 : _tableContext$allProp.accordion; if (deprecatedAccordionProp || (tableContext === null || tableContext === void 0 ? void 0 : (_tableContext$allProp2 = tableContext.allProps) === null || _tableContext$allProp2 === void 0 ? void 0 : _tableContext$allProp2.mode) == 'accordion') { return _react.default.createElement(_TableAccordionHead.TableAccordionHead, _extends({ count: count, className: className }, restProps)); } if ((tableContext === null || tableContext === void 0 ? void 0 : (_tableContext$allProp3 = tableContext.allProps) === null || _tableContext$allProp3 === void 0 ? void 0 : _tableContext$allProp3.mode) == 'navigation') { return _react.default.createElement(_TableNavigationHead.TableNavigationHead, _extends({ className: className }, restProps)); } const { expanded, disabled, noAnimation, onClick, onOpened, onClosed } = restProps, trProps = _objectWithoutProperties(restProps, _excluded2); return _react.default.createElement("tr", _extends({ role: "row", className: className }, trProps)); } function useHandleTrVariant(_ref) { let { variant } = _ref; const tableContext = _react.default.useContext(_TableContext.TableContext); const countRef = tableContext === null || tableContext === void 0 ? void 0 : tableContext.trCountRef.current; const increment = () => { if (typeof countRef === 'undefined') { return 0; } if (!variant || variant === 'even' && countRef.count % 2 === 1 || variant === 'odd' && countRef.count % 2 === 0) { countRef.count++; } return countRef.count; }; const [count, setCount] = _react.default.useState(() => { if (typeof window === 'undefined') { return increment(); } }); _react.default.useEffect(() => { setCount(increment()); }, [tableContext === null || tableContext === void 0 ? void 0 : tableContext.rerenderAlias]); let currentVariant = variant; if (!currentVariant) { currentVariant = count % 2 ? 'odd' : 'even'; } const isLast = typeof countRef !== 'undefined' && countRef.count === count; return { currentVariant, isLast, count }; } function useHandleOddEven(_ref2) { let { children } = _ref2; const trCountRef = _react.default.useRef({ count: 0 }); const [rerenderAlias, setRerenderAlias] = _react.default.useState({}); const forceRerender = _react.default.useCallback(() => { trCountRef.current.count = 0; setRerenderAlias({}); }, []); const isMounted = _react.default.useRef(false); _react.default.useEffect(() => { if (isMounted.current) { forceRerender(); } isMounted.current = true; }, [children]); return { trCountRef, rerenderAlias, setRerenderAlias }; } Tr.AccordionContent = _TableAccordionContent.TableAccordionContentRow; //# sourceMappingURL=TableTr.js.map