2022-01-25 04:04:35 +00:00
|
|
|
import _ from 'lodash';
|
|
|
|
|
2022-01-15 15:45:46 +00:00
|
|
|
export const hasAdminSecret = () => {
|
2022-01-17 07:33:28 +00:00
|
|
|
return (<any>window)['__authorizer__'].isOnboardingCompleted === true;
|
|
|
|
};
|
|
|
|
|
|
|
|
export const capitalizeFirstLetter = (data: string): string =>
|
|
|
|
data.charAt(0).toUpperCase() + data.slice(1);
|
2022-01-25 04:04:35 +00:00
|
|
|
|
|
|
|
const fallbackCopyTextToClipboard = (text: string) => {
|
|
|
|
const textArea = document.createElement('textarea');
|
|
|
|
|
|
|
|
textArea.value = text;
|
|
|
|
textArea.style.top = '0';
|
|
|
|
textArea.style.left = '0';
|
|
|
|
textArea.style.position = 'fixed';
|
|
|
|
|
|
|
|
document.body.appendChild(textArea);
|
|
|
|
textArea.focus();
|
|
|
|
textArea.select();
|
|
|
|
|
|
|
|
try {
|
|
|
|
const successful = document.execCommand('copy');
|
|
|
|
const msg = successful ? 'successful' : 'unsuccessful';
|
|
|
|
console.log('Fallback: Copying text command was ' + msg);
|
|
|
|
} catch (err) {
|
|
|
|
console.error('Fallback: Oops, unable to copy', err);
|
|
|
|
}
|
|
|
|
document.body.removeChild(textArea);
|
|
|
|
};
|
|
|
|
|
2022-09-10 05:20:15 +00:00
|
|
|
export const copyTextToClipboard = async (text: string) => {
|
2022-01-25 04:04:35 +00:00
|
|
|
if (!navigator.clipboard) {
|
|
|
|
fallbackCopyTextToClipboard(text);
|
|
|
|
return;
|
|
|
|
}
|
2022-09-10 05:20:15 +00:00
|
|
|
try {
|
|
|
|
navigator.clipboard.writeText(text);
|
|
|
|
} catch (err) {
|
|
|
|
throw err;
|
|
|
|
}
|
2022-01-25 04:04:35 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export const getObjectDiff = (obj1: any, obj2: any) => {
|
|
|
|
const diff = Object.keys(obj1).reduce((result, key) => {
|
|
|
|
if (!obj2.hasOwnProperty(key)) {
|
|
|
|
result.push(key);
|
2022-01-30 05:09:35 +00:00
|
|
|
} else if (
|
|
|
|
_.isEqual(obj1[key], obj2[key]) ||
|
|
|
|
(obj1[key] === null && obj2[key] === '') ||
|
2022-01-31 06:05:24 +00:00
|
|
|
(obj1[key] &&
|
|
|
|
Array.isArray(obj1[key]) &&
|
|
|
|
obj1[key].length === 0 &&
|
|
|
|
obj2[key] === null)
|
2022-01-30 05:09:35 +00:00
|
|
|
) {
|
2022-01-25 04:04:35 +00:00
|
|
|
const resultKeyIndex = result.indexOf(key);
|
|
|
|
result.splice(resultKeyIndex, 1);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}, Object.keys(obj2));
|
|
|
|
|
|
|
|
return diff;
|
|
|
|
};
|
2022-03-14 19:54:14 +00:00
|
|
|
|
|
|
|
export const validateEmail = (email: string) => {
|
|
|
|
if (!email || email === '') return true;
|
|
|
|
return email
|
|
|
|
.toLowerCase()
|
|
|
|
.match(
|
|
|
|
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
|
|
|
|
)
|
|
|
|
? true
|
|
|
|
: false;
|
|
|
|
};
|
2022-03-15 15:01:54 +00:00
|
|
|
|
|
|
|
export const validateURI = (uri: string) => {
|
|
|
|
if (!uri || uri === '') return true;
|
|
|
|
return uri
|
|
|
|
.toLowerCase()
|
|
|
|
.match(
|
|
|
|
/(?:^|\s)((https?:\/\/)?(?:localhost|[\w-]+(?:\.[\w-]+)+)(:\d+)?(\/\S*)?)/
|
|
|
|
)
|
|
|
|
? true
|
|
|
|
: false;
|
|
|
|
};
|