UNPKG

es-grid-template

Version:

es-grid-template

60 lines (58 loc) 2.09 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = mergeCellProps; var _classnames = _interopRequireDefault(require("classnames")); function composeEventHandler(handler1, handler2) { return (...args) => { // Execute the original event handler first handler1(args); handler2(args); // Event handlers do not return a value, so nothing is returned here }; } /** Merge two cellProps objects and return a new merged object. * * mergeCellProps merges according to these rules: * - For primitive fields (number, string, boolean), values from `extra` override `base` (with `className` concatenated). * - For function fields (event handlers), mergeCellProps returns a new function that calls `base` then `extra`. * - For plain object fields (e.g., styles), mergeCellProps shallow-merges the two objects. */ function mergeCellProps(base, extra) { if (base == null) { return extra; } if (extra == null) { return base; } const result = Object.assign({}, base); for (const key of Object.keys(extra)) { const value = extra[key]; const type = typeof value; if (value === null) { // When value === null, override the original value result[key] = null; } else if (value === undefined) { // When value === undefined, keep the original value } else if (type === 'number' || type === 'string' || type === 'boolean') { if (key === 'className') { result[key] = (0, _classnames.default)(result[key], value); } else { result[key] = value; } } else if (type === 'function') { const prev = result[key]; if (prev == null) { result[key] = value; } else { result[key] = composeEventHandler(prev, value); } } else if (type === 'object') { result[key] = Object.assign({}, result[key], value); } // else `type` is 'bigint' or 'symbol', `value` is an invalid cellProp, ignore it } return result; }