@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
124 lines (123 loc) • 5.37 kB
JavaScript
;
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