@legion-ui-kit/react-core
Version:
<div align="center"> <img height="108" width="116" src="https://legion.digitaltelkom.id/favicon.svg?v=4643a71fb65fa61a5f2b266b769ea7b1" /> <h1 align="center">Legion UI Kit - React Core</h1> </div>
1 lines • 2.83 kB
Source Map (JSON)
{"version":3,"file":"common.cjs","sources":["../../../src/helpers/common.ts"],"sourcesContent":["// Helpers\r\nimport { isArray, isObject, isString } from './typeChecker';\r\n\r\n/**\r\n * Check if a value is empty\r\n * @param val value to check\r\n * @returns true if value is empty\r\n */\r\n// Disable eslint because of the need to use any type\r\n/* eslint-disable-next-line */\r\nexport const isEmpty = (val: any): boolean => {\r\n if (val === null || val === undefined) return true;\r\n else if (isArray(val)) return !val.length;\r\n else if (isObject(val)) return Object.keys(val).length === 0;\r\n else if (isString(val)) return val.trim().length === 0;\r\n else return false;\r\n};\r\n\r\n/**\r\n * Clone an object or array deeply to remove references\r\n * @param val value to clone\r\n * @returns cloned value of val with no references\r\n */\r\n// Disable eslint because of the need to use any type\r\n/* eslint-disable-next-line */\r\nexport const cloneDeep = <TValType extends any>(val: TValType): TValType => {\r\n if (isEmpty(val)) {\r\n return val;\r\n } else if (isArray(val)) {\r\n // Need to define `as TValType` because the map function return type is TValType[] instead of TValType\r\n return [\r\n ...val.map(\r\n (item) => (isArray(item) || isObject(item) ? cloneDeep<typeof item>(item) : item)\r\n )\r\n ] as TValType;\r\n } else if (isObject(val)) {\r\n const obj = Object.create(null);\r\n\r\n for (const key in val) {\r\n obj[key] = isArray(val[key]) || isObject(val[key]) ? cloneDeep(val[key]) : val[key];\r\n }\r\n\r\n return { ...obj };\r\n } else {\r\n return val;\r\n }\r\n};\r\n\r\n/**\r\n * A Function to get value from an object and return a default value if not found\r\n * @param val Object to get value from\r\n * @param keys array of keys or string of keys separated by '.'\r\n * @param defaultValue default value to return if value is not found\r\n */\r\nexport const getDefaultValue = <TResultType>(\r\n val: never, // Use `never` because it's literally can be anything\r\n keys: string | string[],\r\n defaultValue: TResultType\r\n): TResultType => {\r\n if (isEmpty(val) || isEmpty(keys)) return defaultValue;\r\n\r\n const keyList: string[] = isArray(keys) ? [...keys] : keys.split('.');\r\n\r\n let returnedValue = cloneDeep(val);\r\n\r\n while (keyList.length) {\r\n const key = keyList.shift();\r\n\r\n if (isEmpty(returnedValue[key!])) {\r\n return defaultValue;\r\n }\r\n\r\n returnedValue = returnedValue[key!];\r\n }\r\n\r\n return returnedValue;\r\n};\r\n"],"names":["val","isArray","length","isObject","Object","keys","isString","trim"],"mappings":"gEAUwBA,GAClBA,UACKC,EAAAA,QAAQD,IAAcA,EAAIE,OAC1BC,EAAAA,SAASH,GAAyC,IAA5BI,OAAOC,KAAKL,GAAKE,SACvCI,EAAAA,SAASN,IAAmC,IAAtBA,EAAIO,OAAOL"}