Skip to content

Commit

Permalink
fixup! Update blacklisted props that can be passed to native HTML ele…
Browse files Browse the repository at this point in the history
…ments using the transferProps principle
  • Loading branch information
mbohal committed Jan 19, 2024
1 parent 9714512 commit 4955bcf
Showing 1 changed file with 44 additions and 10 deletions.
54 changes: 44 additions & 10 deletions src/components/_helpers/transferProps.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,44 @@
export const transferProps = ({
children,
className,
dangerouslySetInnerHTML,
ref,
suppressContentEditableWarning,
staticContext,
style,
...restProps
}) => restProps;
/**
* Controls passing of props from the React component to the HTML element
*
* Sometimes it is useful to have a mechanism to pass props from the React component to a rendered HTML element.
* It enables making the component interactive and it helps to improve its accessibility. However some props should
* never be passed to the HTML element as it would break things. This function is used to filter out such props.
*
* When run in development mode the function will log error to the console if any invalid props are passed.
*
* @param props The props that were passed tot he React component
* @returns The props to be passed to the HTML element
*/
export const transferProps = (props) => {
const {
children,
className,
dangerouslySetInnerHTML,
ref,
staticContext,
style,
suppressContentEditableWarning,
...restProps
} = props;

if (process.env.NODE_ENV !== 'production') {
const invalidProps = Object.keys({
children,
className,
dangerouslySetInnerHTML,
ref,
staticContext,
style,
suppressContentEditableWarning,
})
.filter((key) => props[key] !== undefined);

if (invalidProps.length > 0) {
// eslint-disable-next-line no-console
console.error(`Invalid prop(s) supplied to the transferProps method: ${invalidProps.join(', ')}`);
}
}

return restProps;
};

0 comments on commit 4955bcf

Please sign in to comment.