TS - MergeProps Utility Function React Code Sources: ** title: ## Contents style: nestedList # TOC style (nestedList|inlineFirstLevel) minLevel: 1 # Include headings from the specified level maxLevel: 4 # Include headings up to the specified level includeLinks: true # Make headings clickable debugInConsole: false # Print debug info in Obsidian console Overview About This note is about … Code Snippet src/utils/mergeProps.ts: import { hasOwnProperty } from "@/utils/hasOwnProperty" import type { HTMLAttributes, MutableRefObject, ReactElement, Ref, RefCallback, } from "react"; import { isValidElement } from "react"; /** * Merges two sets of props. */ export function mergeProps<T extends HTMLAttributes<any>>( base: T, overrides: T, ) { const props = { ...base }; for (const key in overrides) { if (!hasOwnProperty(overrides, key)) continue; if (key === "className") { const prop = "className"; props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop]; continue; } if (key === "style") { const prop = "style"; props[prop] = base[prop] ? { ...base[prop], ...overrides[prop] } : overrides[prop]; continue; } const overrideValue = overrides[key]; if (typeof overrideValue === "function" && key.startsWith("on")) { const baseValue = base[key]; if (typeof baseValue === "function") { type EventKey = Extract<keyof HTMLAttributes<any>, `on${string}`>; props[key as EventKey] = (...args) => { overrideValue(...args); baseValue(...args); }; continue; } } props[key] = overrideValue; } return props; } Details See Also React Code React (Tool) JavaScript Code TypeScript Code Development Map of Content React Map of Content JavaScript Map of Content Hyper Text Markup Language (HTML) Cascading Style Sheets (CSS) Next.js Appendix Note created on 2024-04-30 and last modified on 2024-04-30. Backlinks LIST FROM [[TS - MergeProps Utility Function]] AND -"CHANGELOG" AND -"04-RESOURCES/Code/TypeScript/TS - MergeProps Utility Function" (c) No Clocks, LLC | 2024