Files
Paradise/tgui/packages/common/react.js
T
dearmochi 39a9d7e0b1 Clean up TGUI installation, install Prettier (#17809)
* refactor: delete unused Ntos layout

* refactor: remove webpack-build-notifier

* refactor: install and run Prettier

* build: update tgui.bundle
2022-05-18 13:55:20 +01:00

66 lines
1.3 KiB
JavaScript

/**
* Helper for conditionally adding/removing classes in React
*
* @param {any[]} classNames
* @return {string}
*/
export const classes = (classNames) => {
let className = '';
for (let i = 0; i < classNames.length; i++) {
const part = classNames[i];
if (typeof part === 'string') {
className += part + ' ';
}
}
return className;
};
/**
* Normalizes children prop, so that it is always an array of VDom
* elements.
*/
export const normalizeChildren = (children) => {
if (Array.isArray(children)) {
return children.flat().filter((value) => value);
}
if (typeof children === 'object') {
return [children];
}
return [];
};
/**
* Shallowly checks if two objects are different.
* Credit: https://github.com/developit/preact-compat
*/
export const shallowDiffers = (a, b) => {
let i;
for (i in a) {
if (!(i in b)) {
return true;
}
}
for (i in b) {
if (a[i] !== b[i]) {
return true;
}
}
return false;
};
/**
* Default inferno hooks for pure components.
*/
export const pureComponentHooks = {
onComponentShouldUpdate: (lastProps, nextProps) => {
return shallowDiffers(lastProps, nextProps);
},
};
/**
* A helper to determine whether to render an item.
*/
export const isFalsy = (value) => {
return value === undefined || value === null || value === false;
};