269 lines
6.2 KiB
JavaScript
269 lines
6.2 KiB
JavaScript
import { LANGUAGE } from "../constants";
|
|
import sjcl from "sjcl";
|
|
import { isMobile } from "react-device-detect";
|
|
import history from "../history";
|
|
import TopLoaderService from "@appserver/components/top-loading-indicator";
|
|
export const toUrlParams = (obj, skipNull) => {
|
|
let str = "";
|
|
for (var key in obj) {
|
|
if (skipNull && !obj[key]) continue;
|
|
|
|
if (str !== "") {
|
|
str += "&";
|
|
}
|
|
|
|
str += key + "=" + encodeURIComponent(obj[key]);
|
|
}
|
|
|
|
return str;
|
|
};
|
|
|
|
export function getObjectByLocation(location) {
|
|
if (!location.search || !location.search.length) return null;
|
|
|
|
const searchUrl = location.search.substring(1);
|
|
const object = JSON.parse(
|
|
'{"' +
|
|
decodeURIComponent(searchUrl)
|
|
.replace(/"/g, '\\"')
|
|
.replace(/&/g, '","')
|
|
.replace(/=/g, '":"') +
|
|
'"}'
|
|
);
|
|
|
|
return object;
|
|
}
|
|
|
|
export function changeLanguage(
|
|
i18n,
|
|
currentLng = localStorage.getItem(LANGUAGE)
|
|
) {
|
|
return currentLng
|
|
? i18n.language !== currentLng
|
|
? i18n.changeLanguage(currentLng)
|
|
: Promise.resolve((...args) => i18n.t(...args))
|
|
: i18n.changeLanguage("en");
|
|
}
|
|
|
|
export function createPasswordHash(password, hashSettings) {
|
|
if (
|
|
!password ||
|
|
!hashSettings ||
|
|
typeof password !== "string" ||
|
|
typeof hashSettings !== "object" ||
|
|
!hashSettings.hasOwnProperty("salt") ||
|
|
!hashSettings.hasOwnProperty("size") ||
|
|
!hashSettings.hasOwnProperty("iterations") ||
|
|
typeof hashSettings.size !== "number" ||
|
|
typeof hashSettings.iterations !== "number" ||
|
|
typeof hashSettings.salt !== "string"
|
|
)
|
|
throw new Error("Invalid params.");
|
|
|
|
const { size, iterations, salt } = hashSettings;
|
|
|
|
let bits = sjcl.misc.pbkdf2(password, salt, iterations);
|
|
bits = bits.slice(0, size / 32);
|
|
const hash = sjcl.codec.hex.fromBits(bits);
|
|
|
|
return hash;
|
|
}
|
|
|
|
export function updateTempContent(isAuth = false) {
|
|
if (isAuth) {
|
|
const el = document.getElementById("burger-loader-svg");
|
|
if (el) {
|
|
el.style.display = "block";
|
|
}
|
|
|
|
const el1 = document.getElementById("logo-loader-svg");
|
|
if (el1) {
|
|
el1.style.display = "block";
|
|
}
|
|
|
|
const el2 = document.getElementById("avatar-loader-svg");
|
|
if (el2) {
|
|
el2.style.display = "block";
|
|
}
|
|
} else {
|
|
const tempElm = document.getElementById("temp-content");
|
|
if (tempElm) {
|
|
tempElm.outerHTML = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
export function hideLoader() {
|
|
if (isMobile) return;
|
|
TopLoaderService.end();
|
|
}
|
|
|
|
export function showLoader() {
|
|
if (isMobile) return;
|
|
TopLoaderService.start();
|
|
}
|
|
|
|
export { withLayoutSize } from "./withLayoutSize";
|
|
|
|
export function tryRedirectTo(page) {
|
|
if (
|
|
window.location.pathname === page ||
|
|
window.location.pathname.indexOf(page) !== -1
|
|
) {
|
|
return false;
|
|
}
|
|
//TODO: check if we already on default page
|
|
//window.location.replace(page);
|
|
history.push(page);
|
|
|
|
return true;
|
|
}
|
|
|
|
export function isMe(user, userName) {
|
|
return (
|
|
user && user.id && (userName === "@self" || user.userName === userName)
|
|
);
|
|
}
|
|
|
|
export function isAdmin(currentUser, currentProductId) {
|
|
let productName = null;
|
|
|
|
switch (currentProductId) {
|
|
case "f4d98afd-d336-4332-8778-3c6945c81ea0":
|
|
productName = "people";
|
|
break;
|
|
case "e67be73d-f9ae-4ce1-8fec-1880cb518cb4":
|
|
productName = "files";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
const isProductAdmin =
|
|
currentUser.listAdminModules && productName
|
|
? currentUser.listAdminModules.includes(productName)
|
|
: false;
|
|
|
|
return currentUser.isAdmin || currentUser.isOwner || isProductAdmin;
|
|
}
|
|
|
|
import combineUrlFunc from "./combineUrl";
|
|
|
|
export const combineUrl = combineUrlFunc;
|
|
|
|
export function getCookie(name) {
|
|
let matches = document.cookie.match(
|
|
new RegExp(
|
|
"(?:^|; )" +
|
|
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") +
|
|
"=([^;]*)"
|
|
)
|
|
);
|
|
return matches ? decodeURIComponent(matches[1]) : undefined;
|
|
}
|
|
|
|
export function setCookie(name, value, options = {}) {
|
|
options = {
|
|
path: "/",
|
|
...options,
|
|
};
|
|
|
|
if (options.expires instanceof Date) {
|
|
options.expires = options.expires.toUTCString();
|
|
}
|
|
|
|
let updatedCookie =
|
|
encodeURIComponent(name) + "=" + encodeURIComponent(value);
|
|
|
|
for (let optionKey in options) {
|
|
updatedCookie += "; " + optionKey;
|
|
let optionValue = options[optionKey];
|
|
if (optionValue !== true) {
|
|
updatedCookie += "=" + optionValue;
|
|
}
|
|
}
|
|
|
|
document.cookie = updatedCookie;
|
|
}
|
|
|
|
export function deleteCookie(name) {
|
|
setCookie(name, "", {
|
|
"max-age": -1,
|
|
});
|
|
}
|
|
|
|
export function clickBackdrop() {
|
|
var elms = document.getElementsByClassName("backdrop-active");
|
|
if (elms && elms.length > 0) {
|
|
elms[0].click();
|
|
}
|
|
}
|
|
|
|
export function objectToGetParams(object) {
|
|
const params = Object.entries(object)
|
|
.filter(([, value]) => value !== undefined && value !== null)
|
|
.map(
|
|
([key, value]) =>
|
|
`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`
|
|
);
|
|
|
|
return params.length > 0 ? `?${params.join("&")}` : "";
|
|
}
|
|
|
|
export function toCommunityHostname(hostname) {
|
|
let communityHostname;
|
|
try {
|
|
communityHostname =
|
|
hostname.indexOf("m.") > -1
|
|
? hostname.substring(2, hostname.length)
|
|
: hostname;
|
|
} catch (e) {
|
|
console.error(e);
|
|
communityHostname = hostname;
|
|
}
|
|
|
|
return communityHostname;
|
|
}
|
|
|
|
export function getProviderTranslation(provider, t) {
|
|
switch (provider) {
|
|
case "Google":
|
|
return t("Common:SignInWithGoogle");
|
|
case "Facebook":
|
|
return t("Common:SignInWithFacebook");
|
|
case "Twitter":
|
|
return t("Common:SignInWithTwitter");
|
|
case "LinkedIn":
|
|
return t("Common:SignInWithLinkedIn");
|
|
}
|
|
}
|
|
|
|
function getLanguage(lng) {
|
|
try {
|
|
let language = lng == "en-US" || lng == "en-GB" ? "en" : lng;
|
|
|
|
const splitted = lng.split("-");
|
|
|
|
if (splitted.length == 2 && splitted[0] == splitted[1].toLowerCase()) {
|
|
language = splitted[0];
|
|
}
|
|
|
|
return language;
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
|
|
return lng;
|
|
}
|
|
|
|
export function loadLanguagePath(homepage, fixedNS = null) {
|
|
return (lng, ns) => {
|
|
const language = getLanguage(lng instanceof Array ? lng[0] : lng);
|
|
|
|
if (ns.length > 0 && ns[0] === "Common") {
|
|
return `/static/locales/${language}/Common.json`;
|
|
}
|
|
return `${homepage}/locales/${language}/${fixedNS || ns}.json`;
|
|
};
|
|
}
|