@mui/x-data-grid
Version:
The Community plan edition of the Data Grid components (MUI X).
82 lines (77 loc) • 2.43 kB
JavaScript
export function isNumber(value) {
return typeof value === 'number' && !Number.isNaN(value);
}
export function isFunction(value) {
return typeof value === 'function';
}
export function isObject(value) {
return typeof value === 'object' && value !== null;
}
export function localStorageAvailable() {
try {
// Incognito mode might reject access to the localStorage for security reasons.
// window isn't defined on Node.js
// https://stackoverflow.com/questions/16427636/check-if-localstorage-is-available
const key = '__some_random_key_you_are_not_going_to_use__';
window.localStorage.setItem(key, key);
window.localStorage.removeItem(key);
return true;
} catch (err) {
return false;
}
}
export function escapeRegExp(value) {
return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}
/**
* Follows the CSS specification behavior for min and max
* If min > max, then the min have priority
*/
export const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
/**
* Create an array containing the range [from, to[
*/
export function range(from, to) {
return Array.from({
length: to - from
}).map((_, i) => from + i);
}
// Pseudo random number. See https://stackoverflow.com/a/47593316
function mulberry32(a) {
return () => {
/* eslint-disable */
let t = a += 0x6d2b79f5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
/* eslint-enable */
};
}
/**
* Create a random number generator from a seed. The seed
* ensures that the random number generator produces the
* same sequence of 'random' numbers on every render. It
* returns a function that generates a random number between
* a specified min and max.
*/
export function createRandomNumberGenerator(seed) {
const random = mulberry32(seed);
return (min, max) => min + (max - min) * random();
}
export function deepClone(obj) {
if (typeof structuredClone === 'function') {
return structuredClone(obj);
}
return JSON.parse(JSON.stringify(obj));
}
/**
* Mark a value as used so eslint doesn't complain. Use this instead
* of a `eslint-disable-next-line react-hooks/exhaustive-deps` because
* that hint disables checks on all values instead of just one.
*/
export function eslintUseValue(_) {}
export const runIf = (condition, fn) => params => {
if (condition) {
fn(params);
}
};