{"version":3,"file":"static/js/main-43dd7041.579e1de1.js","mappings":"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","sources":["App.js","CommanFunctions/CopyToClipBoard.jsx","CommanFunctions/commanFunctions.js","CommanFunctions/commanService.js","CommanUI/CommonBulletPoint.jsx","CommanUI/Header/header.js","CommanUI/Layout.jsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\nimport { Outlet, useLocation } from \"react-router-dom\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport SideBar from \"./CommanUI/Sidebar/sidebar\";\r\nimport Header from \"./CommanUI/Header/header\";\r\nimport \"./App.scss\";\r\nimport ToastComponent from \"./CommanUI/Toast/toast\";\r\nimport { useMediaQuery, useTheme } from \"@mui/material\";\r\nimport MobileNotFound from \"./Components/commonPages/MobileNotFound\";\r\nimport { successToast, warningToast } from \"./Redux/toastSlice\";\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport UserSectionSidebar from \"./Components/user-sections/components/UserSectionSidebar\";\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { loginChannel, logoutChannel } from \"./CommanFunctions/commanFunctions\";\r\n\r\nconst stripePromise = loadStripe(process.env.REACT_APP_STRIPE_PUBLIC_KEY);\r\n\r\nconst accessRoutesAuth = [\r\n \"authenticate\",\r\n \"set-password\",\r\n \"set-new-password\",\r\n \"verify-email\",\r\n \"welcome-cloudairy\",\r\n];\r\nexport const msalConfig = {\r\n auth: {\r\n clientId: \"e794960d-7a48-428c-8214-7af1b67f7c8b\",\r\n authority:\r\n \"https://login.microsoftonline.com/0d7a62ae-6924-472e-bb10-10d560799de4\",\r\n redirectUri: \"http://localhost:3000\",\r\n },\r\n cache: {\r\n cacheLocation: \"sessionStorage\",\r\n storeAuthStateInCookie: false,\r\n },\r\n};\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nconst allAuthRoutes = [\r\n \"login\",\r\n \"signup\",\r\n \"forgot-password\",\r\n \"verify-email\",\r\n \"check-your-mail\",\r\n \"set-new-password\",\r\n \"welcome-cloudairy\",\r\n \"authenticate\",\r\n \"set-password\",\r\n \"accept-invitation\",\r\n \"join-account\",\r\n \"accept-architecture\",\r\n];\r\n\r\nconst App = () => {\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n const matchDown760 = useMediaQuery(theme.breakpoints.down(760));\r\n const [isOpen, setIsOpen] = useState(true);\r\n const navigate = useNavigate();\r\n const { pathname } = useLocation();\r\n const selector = useSelector((state) => state?.common);\r\n const toastData = useSelector((state) => state.toastData);\r\n const { openedSidebar } = useSelector((state) => state.sidebar);\r\n const userData = localStorage.getItem(\"user_data\");\r\n const parsedData = JSON.parse(userData);\r\n const isOnBoardingDone = parsedData?.is_onboarding_done;\r\n const hasWorkspace = parsedData?.has_workspace;\r\n\r\n // useEffect(() => {\r\n // // Define onUsersnapLoad globally\r\n // if (!document.querySelector(`script[src=\"https://widget.usersnap.com/global/load/87269984-dd59-49e7-9cdd-bbe88cb7f763?onload=onUsersnapLoad\"]`)) {\r\n // // Define the onUsersnapLoad function\r\n // window.onUsersnapLoad = function (api) {\r\n // api.init();\r\n // };\r\n\r\n // // Inject the Usersnap script dynamically\r\n // const script = document.createElement(\"script\");\r\n // script.defer = true;\r\n // script.src =\r\n // \"https://widget.usersnap.com/global/load/87269984-dd59-49e7-9cdd-bbe88cb7f763?onload=onUsersnapLoad\";\r\n // document.head.appendChild(script);\r\n // }\r\n\r\n // }, []);\r\n\r\n useEffect(() => {\r\n const handleOnline = () => {\r\n dispatch(\r\n successToast({\r\n message: \"You are back online!\",\r\n isBottomCenter: true,\r\n isAutoHide: true,\r\n })\r\n );\r\n const reloadTimeout = setTimeout(() => {\r\n window.location.reload();\r\n }, 2000);\r\n return () => clearTimeout(reloadTimeout);\r\n };\r\n\r\n const handleOffline = () => {\r\n dispatch(\r\n warningToast({\r\n message: \"Your're offline. Please check your network connection.\",\r\n isBottomCenter: true,\r\n isAutoHide: false,\r\n })\r\n );\r\n };\r\n\r\n if (\r\n navigator.onLine &&\r\n toastData.showNotification &&\r\n toastData.notificationType === \"warning\"\r\n ) {\r\n handleOnline();\r\n }\r\n\r\n if (!navigator.onLine) {\r\n handleOffline();\r\n }\r\n\r\n window.addEventListener(\"online\", handleOnline);\r\n window.addEventListener(\"offline\", handleOffline);\r\n\r\n return () => {\r\n window.removeEventListener(\"online\", handleOnline);\r\n window.removeEventListener(\"offline\", handleOffline);\r\n };\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n if (\r\n (isOnBoardingDone !== undefined && !isOnBoardingDone) ||\r\n hasWorkspace === false\r\n ) {\r\n const pathsToExclude = [\r\n \"/login\",\r\n \"/signup\",\r\n \"/forgot-password\",\r\n \"/authenticate\",\r\n \"/accept-architecture\",\r\n \"/verify-email\",\r\n \"/set-new-password\",\r\n \"/accept-invitation\",\r\n \"/join-account\",\r\n \"/set-password\",\r\n ];\r\n if (!pathsToExclude?.includes(pathname)) {\r\n navigate(\"/welcome-cloudairy\");\r\n }\r\n }\r\n }, [isOnBoardingDone, navigate, hasWorkspace]);\r\n\r\n useEffect(() => {\r\n if (\r\n selector.isLoginClassAdded !== true &&\r\n accessRoutesAuth?.filter((route) => pathname.includes(route)).length <= 0\r\n ) {\r\n if (\r\n !pathname.includes(\"accept-invitation\") &&\r\n !pathname.includes(\"join-account\") &&\r\n !pathname.includes(\"forgot-password\") &&\r\n !pathname.includes(\"verify-email\") &&\r\n !pathname.includes(\"accept-architecture\") &&\r\n !pathname.includes(\"signup\") &&\r\n !pathname.includes(\"set-new-password\") &&\r\n !pathname.includes(\"set-password\")\r\n ) {\r\n logoutChannel.postMessage(\"logout\");\r\n if (pathname.includes(\"templates\")) {\r\n localStorage.setItem(\"redirectPath\", pathname);\r\n setTimeout(() => {\r\n navigate(\"/login\");\r\n });\r\n } else {\r\n navigate(\"/login\");\r\n }\r\n }\r\n } else {\r\n if (pathname.includes(\"search-charts\")) {\r\n loginChannel.postMessage(\"login\");\r\n navigate(\"/\");\r\n }\r\n }\r\n }, []);\r\n\r\n const handleChangeRow = (value) => {\r\n setIsOpen(value);\r\n };\r\n\r\n if (\r\n matchDown760 &&\r\n allAuthRoutes.filter(\r\n (route) => pathname.includes(route) || allAuthRoutes.includes(pathname)\r\n ).length <= 0 &&\r\n !pathname.includes(\"/preview\")\r\n ) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n \r\n {selector.isLoginClassAdded && (\r\n <>\r\n {pathname !== \"/welcome-cloudairy\" &&\r\n // pathname !== \"/payment-details\" &&\r\n !pathname.includes(\"/accept-invitation\") &&\r\n !pathname.includes(\"/accept-architecture\") &&\r\n !pathname.includes(\"/cloudcollab\") &&\r\n !pathname.includes(\"/cloudchart\") &&\r\n !pathname.includes(\"/preview\") &&\r\n !pathname.includes(\"/edittemplate\") &&\r\n !pathname.includes(\"/join-account\") &&
}\r\n\r\n {!pathname.includes(\"/cloudchart/\") &&\r\n !pathname.includes(\"/edittemplate/\") &&\r\n !pathname.includes(\"/preview\") &&\r\n !pathname.includes(\"/mind-map\") &&\r\n !pathname.includes(\"/cloudcollab\") &&\r\n pathname !== \"/welcome-cloudairy\" &&\r\n pathname !== \"/payment-details\" &&\r\n pathname !== \"/confirm-order\" &&\r\n !pathname.includes(\"/accept-invitation\") &&\r\n !pathname.includes(\"/accept-architecture\") &&\r\n !pathname.includes(\"/join-account\") &&\r\n !pathname.includes(\"/user\") && (\r\n \r\n )}\r\n {pathname.includes(\"/user\") && }\r\n \r\n )}\r\n \r\n {pathname === \"/payment-details\" ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n <>\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import React, { useState } from \"react\";\r\nimport { IcCheck, IcCopyToClipBoard } from \"../assets/icon-components\";\r\nimport { Stack } from \"@mui/material\";\r\nimport { color } from \"../Utils/style/color/color\";\r\n\r\nfunction CopyToClipBoard({ data , copyIcon = true}) {\r\n const [isCopied, setIsCopied] = useState(false);\r\n\r\n const handleCopyEmail = () => {\r\n navigator.clipboard.writeText(data).then(() => {\r\n setIsCopied(true);\r\n setTimeout(() => {\r\n setIsCopied(false);\r\n }, 2000);\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {isCopied ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n {copyIcon && }\r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default CopyToClipBoard;\r\n","import axios from \"axios\";\r\nimport { lazy } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport commanService from \"./commanService\";\r\nimport { errorToast, warningToast } from \"../Redux/toastSlice\";\r\nimport { handleChangeSaving } from \"../Redux/archBoardSlice\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport { iconTypes } from \"../Components/DrawBoard/const\";\r\nimport moment from \"moment\";\r\nimport { updateCurrentSubscription } from \"../Redux/common-reducer\";\r\n\r\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nexport function generateUniqueId(length = 10) {\r\n const characters =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?\";\r\n const timestamp = Date.now().toString(36);\r\n let result = \"\";\r\n\r\n for (let i = 0; i < length; i++) {\r\n const randomIndex = Math.floor(Math.random() * characters.length);\r\n result += characters.charAt(randomIndex);\r\n }\r\n\r\n return `${result}_${timestamp}`;\r\n}\r\n\r\nexport const makeid = (length) => {\r\n var result = \"\";\r\n var characters =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n var charactersLength = characters.length;\r\n for (var i = 0; i < length; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n};\r\n\r\nexport function base64ToBlob(base64, mime) {\r\n const byteCharacters = atob(base64.split(\",\")[1]);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\r\n const slice = byteCharacters.slice(offset, offset + 512);\r\n\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n return new Blob(byteArrays, { type: mime });\r\n}\r\n\r\nexport const splicaArrayIntoColumns = (a, n, balanced) => {\r\n if (n < 2) return [a];\r\n\r\n var len = a.length,\r\n out = [],\r\n i = 0,\r\n size;\r\n\r\n if (len % n === 0) {\r\n size = Math.floor(len / n);\r\n while (i < len) {\r\n out.push(a.slice(i, (i += size)));\r\n }\r\n } else if (balanced) {\r\n while (i < len) {\r\n size = Math.ceil((len - i) / n--);\r\n out.push(a.slice(i, (i += size)));\r\n }\r\n } else {\r\n n--;\r\n size = Math.floor(len / n);\r\n if (len % size === 0) size--;\r\n while (i < size * n) {\r\n out.push(a.slice(i, (i += size)));\r\n }\r\n out.push(a.slice(size * n));\r\n }\r\n\r\n return out;\r\n};\r\n\r\nexport const validateEmail = (email) => {\r\n return String(email)\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\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,}))$/\r\n );\r\n};\r\n\r\nexport const formatDate = (input) => {\r\n var datePart = input.match(/\\d+/g),\r\n year = datePart[0].substring(2), // get only two digits\r\n month = datePart[1],\r\n day = datePart[2];\r\n\r\n return day + \"/\" + month + \"/\" + year;\r\n};\r\n\r\nexport const validateWithOnlyLetters = (value) => {\r\n if (value === \"\") {\r\n return true;\r\n } else {\r\n return String(value)\r\n .toLowerCase()\r\n .match(/^[A-Za-z]+$/);\r\n }\r\n};\r\n\r\nexport const onlyNumbers = (value) => {\r\n if (value === \"\") {\r\n return true;\r\n } else {\r\n return String(value)\r\n .toLowerCase()\r\n .match(/^[0-9]+$/);\r\n }\r\n};\r\n\r\nexport const changeUrl = (text) => {\r\n //eslint-disable-next-line\r\n return text\r\n .toString()\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")\r\n .replace(/ü/g, \"u\")\r\n .replace(/ö/g, \"o\")\r\n .replace(/ğ/g, \"g\")\r\n .replace(/ş/g, \"s\")\r\n .replace(/ı/g, \"i\")\r\n .replace(/ç/g, \"c\")\r\n .replace(/[^\\w\\-]+/g, \"\")\r\n .replace(/\\-\\-+/g, \"-\")\r\n .replace(/^-+/, \"\")\r\n .replace(/-+$/, \"\")\r\n .replace(/[\\s_-]+/g, \"-\");\r\n};\r\n\r\nexport const isEmpty = (val) => {\r\n if (\r\n val === \"\" ||\r\n val === null ||\r\n val === undefined ||\r\n val === \"null\" ||\r\n val === \"undefined\"\r\n ) {\r\n return \"\";\r\n } else {\r\n return val;\r\n }\r\n};\r\n\r\nexport const splitString = (val) => {\r\n if (val !== undefined) {\r\n return val.split(\"-\").splice(-2)[0];\r\n }\r\n};\r\n\r\nexport const firstWordCapital = (string) => {\r\n if (isEmpty(string) !== \"\") {\r\n const arr = string.split(\" \");\r\n for (var i = 0; i < arr.length; i++) {\r\n arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);\r\n }\r\n const str2 = arr.join(\" \");\r\n return str2;\r\n }\r\n};\r\n\r\nexport const numberWithCommas = (val) => {\r\n let x = val.toString();\r\n var pattern = /(-?\\d+)(\\d{3})/;\r\n while (pattern.test(x)) x = x.replace(pattern, \"$1,$2\");\r\n return x;\r\n};\r\n\r\nexport const lazyRetry = function (componentImport) {\r\n return new Promise((resolve, reject) => {\r\n const hasRefreshed = JSON.parse(\r\n window.sessionStorage.getItem(\"retry-lazy-refreshed\") || \"false\"\r\n );\r\n componentImport()\r\n .then((component) => {\r\n window.sessionStorage.setItem(\"retry-lazy-refreshed\", \"false\");\r\n resolve(component);\r\n })\r\n .catch((error) => {\r\n if (!hasRefreshed) {\r\n window.sessionStorage.setItem(\"retry-lazy-refreshed\", \"true\");\r\n return window.location.reload();\r\n }\r\n reject(error);\r\n });\r\n });\r\n};\r\n\r\nexport const lazyWithRetry = (componentImport) =>\r\n lazy(async () => {\r\n const pageHasAlreadyBeenForceRefreshed = JSON.parse(\r\n window.localStorage.getItem(\"page-has-been-force-refreshed\") || \"false\"\r\n );\r\n\r\n try {\r\n const component = await componentImport();\r\n window.localStorage.setItem(\"page-has-been-force-refreshed\", \"false\");\r\n return component;\r\n } catch (error) {\r\n if (!pageHasAlreadyBeenForceRefreshed) {\r\n window.localStorage.setItem(\"page-has-been-force-refreshed\", \"true\");\r\n return window.location.reload();\r\n }\r\n throw error;\r\n }\r\n });\r\n\r\nexport const getId = () => {\r\n return uuidv4()?.split(\"-\")?.slice(-1)[0];\r\n};\r\n\r\nexport const addClickEventOutsideDropdown = (\r\n buttonId,\r\n menuId,\r\n stateValue,\r\n setStateValue\r\n) => {\r\n const handleClickOutside = (event) => {\r\n if (\r\n !document.getElementById(menuId)?.contains(event.target) &&\r\n !document.getElementById(buttonId)?.contains(event.target)\r\n ) {\r\n setStateValue(false);\r\n }\r\n };\r\n\r\n if (stateValue) {\r\n window.addEventListener(\"click\", handleClickOutside);\r\n } else {\r\n window.removeEventListener(\"click\", handleClickOutside);\r\n }\r\n};\r\n\r\nexport const prventFromNonNumericValues = (event) => {\r\n const key = event.key;\r\n\r\n const isNumeric = !isNaN(key) && !isNaN(parseFloat(key));\r\n const isControlKey =\r\n event.ctrlKey ||\r\n event.metaKey ||\r\n event.altKey ||\r\n event.key === \"Backspace\" ||\r\n event.key === \"Delete\" ||\r\n event.key === \"ArrowLeft\" ||\r\n event.key === \"ArrowRight\";\r\n\r\n if (!isNumeric && !isControlKey) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\nexport const getStateByCountryName = async (country) => {\r\n try {\r\n const response = await axios.post(\r\n \"https://countriesnow.space/api/v0.1/countries/states\",\r\n {\r\n country: country,\r\n }\r\n );\r\n\r\n return response.data.data.states;\r\n } catch (error) {\r\n return error;\r\n }\r\n};\r\n\r\nexport const getCityByStateName = async (country, state) => {\r\n try {\r\n const response = await axios.post(\r\n \"https://countriesnow.space/api/v0.1/countries/state/cities\",\r\n {\r\n country,\r\n state,\r\n }\r\n );\r\n return response.data.data;\r\n } catch (error) {\r\n return error;\r\n }\r\n};\r\n\r\nexport const debounce = (func, delay) => {\r\n let timer;\r\n return function (...args) {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => func.apply(this, args), delay);\r\n };\r\n};\r\n\r\nexport const truncateText = (text, maxLength = 15) => {\r\n if (text.length > maxLength) {\r\n return text.substring(0, maxLength) + \"...\";\r\n } else {\r\n return text;\r\n }\r\n};\r\n\r\nexport const roundToTwoDecimalPlaces = (number, toFixNum = 2) => {\r\n const numberString = number.toString();\r\n\r\n if (numberString.includes(\".\")) {\r\n const [integerPart, decimalPart] = numberString.split(\".\");\r\n\r\n const roundedDecimalPart = parseFloat(`0.${decimalPart}`).toFixed(toFixNum);\r\n\r\n return `${integerPart}.${roundedDecimalPart.split(\".\")[1]}`;\r\n } else {\r\n return numberString;\r\n }\r\n};\r\n\r\nexport const toHex = (int) => {\r\n var hex = int.toString(16);\r\n return hex.length === 1 ? \"0\" + hex : hex;\r\n};\r\n\r\nexport const parseColor = (color) => {\r\n var arr = [];\r\n color.replace(/[\\d+\\.]+/g, function (v) {\r\n arr.push(parseFloat(v));\r\n });\r\n return {\r\n color: \"#\" + arr.slice(0, 3).map(toHex).join(\"\"),\r\n opacity: arr.length === 4 ? arr[3] : 1,\r\n };\r\n};\r\n\r\nexport const handleReceivedNodes = (\r\n existingNodes,\r\n currNodes = [],\r\n deletedNodes = []\r\n) => {\r\n const newNodes = [];\r\n const existingNodeIds = existingNodes?.map((val) => val.id);\r\n const mappedNodes = currNodes?.reduce((acc, curr) => {\r\n if (!existingNodeIds?.includes(curr.id)) {\r\n newNodes.push(curr);\r\n }\r\n acc[curr.id] = curr;\r\n return acc;\r\n }, {});\r\n let updatedNodes = existingNodes?.map((currNode) => {\r\n if (mappedNodes?.[currNode.id]) {\r\n return mappedNodes?.[currNode.id];\r\n // return {\r\n // ...currNode,\r\n // ...(mappedNodes?.[currNode.id] || {})\r\n // }\r\n }\r\n return currNode;\r\n });\r\n updatedNodes = [...updatedNodes, ...newNodes]?.filter(\r\n (val) => !deletedNodes?.includes(val?.id)\r\n );\r\n return updatedNodes;\r\n};\r\n\r\nexport const handleReceivedEdges = (\r\n existingEdges,\r\n currEdges = [],\r\n deletedEdges = []\r\n) => {\r\n const newEdges = [];\r\n const existingEdgeIds = existingEdges?.map((val) => val.id);\r\n const mappedEdges = currEdges?.reduce((acc, curr) => {\r\n if (!existingEdgeIds?.includes(curr.id)) {\r\n newEdges.push(curr);\r\n }\r\n acc[curr.id] = curr;\r\n return acc;\r\n }, {});\r\n let updatedEdges = existingEdges?.map((currEdge) => {\r\n if (mappedEdges?.[currEdge.id]) {\r\n return mappedEdges?.[currEdge.id];\r\n // return {\r\n // ...currEdge,\r\n // ...(mappedEdges?.[currEdge.id] || {})\r\n // }\r\n }\r\n return currEdge;\r\n });\r\n updatedEdges = [...updatedEdges, ...newEdges]?.filter(\r\n (val) => !deletedEdges?.includes(val?.id)\r\n );\r\n return updatedEdges;\r\n};\r\n\r\nexport const updateJson = async ({\r\n json,\r\n id,\r\n dispatch,\r\n undo,\r\n a_id,\r\n isReload,\r\n should_delete = false,\r\n isDeleted = false,\r\n takeSnapshot = () => { },\r\n}) => {\r\n try {\r\n const currentUrl = window.location.href;\r\n const path = new URL(currentUrl).pathname;\r\n const isSavingLocale = localStorage.getItem(\"isSaving\");\r\n\r\n if (\r\n dispatch &&\r\n (isSavingLocale === null ||\r\n isSavingLocale === \"false\" ||\r\n isSavingLocale === false)\r\n ) {\r\n dispatch(handleChangeSaving(true));\r\n }\r\n\r\n const currentPathName = path?.split(\"/\");\r\n const isApiEnabled = isDeleted\r\n ? true\r\n : json?.architecture_json?.nodes?.length > 0 ||\r\n json?.architecture_json?.thumbnail_image ||\r\n json?.architecture_json?.selectedCategories ||\r\n json?.architecture_json?.mainBackgroundDotType ||\r\n json?.architecture_json?.edges ||\r\n json?.architecture_json?.deletedEdges ||\r\n json?.architecture_json?.background ||\r\n json?.architecture_json?.deletedNodes ||\r\n json?.architecture_json?.isPresentation\r\n ? true\r\n : false;\r\n\r\n const isNodesSet = localStorage.getItem(\"isNodesSet\");\r\n\r\n if (\r\n id !== undefined &&\r\n id !== \"undefined\" &&\r\n isApiEnabled &&\r\n isNodesSet === \"true\" &&\r\n !currentPathName?.includes(\"edittemplate\")\r\n ) {\r\n let parsedData = {};\r\n const user_data = localStorage.getItem(\"user_data\");\r\n\r\n if (user_data) {\r\n parsedData = JSON.parse(user_data);\r\n }\r\n\r\n if (takeSnapshot) {\r\n takeSnapshot({\r\n nodes: json?.architecture_json?.nodes || null,\r\n edges: json?.architecture_json?.edges || null,\r\n });\r\n }\r\n\r\n const response = await commanService.patchApi(\r\n \"drawboard/v1\",\r\n `architectures/json/${id}${a_id !== null && a_id !== undefined && typeof a_id === \"string\"\r\n ? `?a_id=${a_id}`\r\n : \"\"\r\n }`,\r\n {\r\n architecture_json: {\r\n ...json?.architecture_json,\r\n lastUpdatedBy:\r\n json?.architecture_json?.lastUpdatedBy || parsedData?.user_id,\r\n lastEvent: json?.architecture_json?.lastEvent || \"\",\r\n },\r\n should_delete,\r\n }\r\n );\r\n\r\n if (isReload) {\r\n window.location.reload();\r\n localStorage.setItem(\"isErrorShow\", \"true\");\r\n }\r\n\r\n return response?.data; // Return the response data\r\n }\r\n } catch (error) {\r\n if (error.response?.status !== 401) {\r\n if (error.response?.status < 500) {\r\n dispatch &&\r\n dispatch(\r\n warningToast({\r\n message:\r\n error.response?.data?.message ||\r\n error.response?.data?.error?.[0] ||\r\n error.message,\r\n })\r\n );\r\n } else {\r\n dispatch &&\r\n dispatch(\r\n errorToast({\r\n message: \"Oops! Something went wrong\",\r\n })\r\n );\r\n }\r\n }\r\n\r\n undo && undo();\r\n\r\n return error; // Return error \r\n } finally {\r\n dispatch && dispatch(handleChangeSaving(false));\r\n localStorage.removeItem(\"drawingNodes\");\r\n }\r\n};\r\n\r\nexport const findNearestIndex = (arr, val) => {\r\n const getDistance = (obj1, obj2) => {\r\n return Math.sqrt(\r\n Math.pow(obj1.x - obj2.x, 2) + Math.pow(obj1.y - obj2.y, 2)\r\n );\r\n };\r\n\r\n let nearestIndex = 0;\r\n let minDistance = getDistance(arr[0], val);\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n const distance = getDistance(arr[i], val);\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n nearestIndex = i;\r\n }\r\n }\r\n\r\n return nearestIndex;\r\n};\r\n\r\n// export const extractPointsFromPath = (pathData, numPoints = 100) => {\r\n// const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n// path.setAttribute(\"d\", pathData);\r\n\r\n// const length = path.getTotalLength();\r\n// const points = [];\r\n\r\n// for (let i = 0; i <= numPoints; i++) {\r\n// const point = path.getPointAtLength((i / numPoints) * length);\r\n// points.push({ x: point.x, y: point.y });\r\n// }\r\n\r\n// return points;\r\n// };\r\n\r\n// export const extractPointsFromPath = (pathData, numPoints = 100) => {\r\n// // Normalize path data\r\n// pathData = pathData.replace(/\\n/g, \" \").trim();\r\n\r\n// // Parsing function to break down path commands\r\n// const parsePathData = (d) => {\r\n// const commands = d.match(/[MmLlHhVvCcSsQqTtAaZz][-,.\\d\\s]*/g) || [];\r\n// const parsed = [];\r\n// let currentX = 0,\r\n// currentY = 0;\r\n// let startX = 0,\r\n// startY = 0;\r\n\r\n// commands.forEach((command) => {\r\n// const type = command[0].toUpperCase();\r\n// const values = command\r\n// .slice(1)\r\n// .trim()\r\n// .split(/[\\s,]+/)\r\n// .map(Number);\r\n\r\n// switch (type) {\r\n// case \"M\": // Move to\r\n// currentX = values[0];\r\n// currentY = values[1];\r\n// startX = currentX;\r\n// startY = currentY;\r\n// parsed.push({ type: \"M\", x: currentX, y: currentY });\r\n// break;\r\n// case \"L\": // Line to\r\n// parsed.push({\r\n// type: \"L\",\r\n// x1: currentX,\r\n// y1: currentY,\r\n// x2: values[0],\r\n// y2: values[1],\r\n// });\r\n// currentX = values[0];\r\n// currentY = values[1];\r\n// break;\r\n// case \"H\": // Horizontal line\r\n// values.forEach((x) => {\r\n// parsed.push({\r\n// type: \"H\",\r\n// x1: currentX,\r\n// y1: currentY,\r\n// x2: x,\r\n// y2: currentY,\r\n// });\r\n// currentX = x;\r\n// });\r\n// break;\r\n// case \"V\": // Vertical line\r\n// values.forEach((y) => {\r\n// parsed.push({\r\n// type: \"V\",\r\n// x1: currentX,\r\n// y1: currentY,\r\n// x2: currentX,\r\n// y2: y,\r\n// });\r\n// currentY = y;\r\n// });\r\n// break;\r\n// case \"C\": // Cubic Bezier\r\n// parsed.push({\r\n// type: \"C\",\r\n// x1: currentX,\r\n// y1: currentY,\r\n// x2: values[0],\r\n// y2: values[1],\r\n// x3: values[2],\r\n// y3: values[3],\r\n// x4: values[4],\r\n// y4: values[5],\r\n// });\r\n// currentX = values[4];\r\n// currentY = values[5];\r\n// break;\r\n// case \"Z\": // Close path\r\n// parsed.push({\r\n// type: \"L\",\r\n// x1: currentX,\r\n// y1: currentY,\r\n// x2: startX,\r\n// y2: startY,\r\n// });\r\n// currentX = startX;\r\n// currentY = startY;\r\n// break;\r\n// }\r\n// });\r\n\r\n// return parsed;\r\n// };\r\n\r\n// // Interpolation functions\r\n// const interpolate = {\r\n// line: (t, start, end) => ({\r\n// x: start.x + t * (end.x - start.x),\r\n// y: start.y + t * (end.y - start.y),\r\n// }),\r\n// cubicBezier: (t, p0, p1, p2, p3) => {\r\n// const u = 1 - t;\r\n// const tt = t * t;\r\n// const uu = u * u;\r\n// const uuu = uu * u;\r\n// const ttt = tt * t;\r\n\r\n// return {\r\n// x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,\r\n// y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,\r\n// };\r\n// },\r\n// };\r\n\r\n// // Parse the path\r\n// const parsedPath = parsePathData(pathData);\r\n\r\n// // Collect all segments\r\n// const segments = [];\r\n// let totalLength = 0;\r\n\r\n// parsedPath.forEach((segment) => {\r\n// const start = { x: segment.x1 || segment.x, y: segment.y1 || segment.y };\r\n// const end = { x: segment.x2 || segment.x, y: segment.y2 || segment.y };\r\n\r\n// // Calculate segment length (Euclidean distance)\r\n// const length = Math.sqrt(\r\n// Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2)\r\n// );\r\n\r\n// segments.push({\r\n// start,\r\n// end,\r\n// length,\r\n// type: segment.type,\r\n// });\r\n\r\n// totalLength += length;\r\n// });\r\n\r\n// // Generate exact number of points\r\n// const points = [];\r\n// let currentSegmentIndex = 0;\r\n// let accumulatedLength = 0;\r\n\r\n// for (let i = 0; i <= numPoints; i++) {\r\n// const t = i / numPoints;\r\n// const targetLength = t * totalLength;\r\n\r\n// while (currentSegmentIndex < segments.length) {\r\n// const currentSegment = segments[currentSegmentIndex];\r\n\r\n// if (accumulatedLength + currentSegment.length >= targetLength) {\r\n// // Interpolate within this segment\r\n// const segmentT =\r\n// (targetLength - accumulatedLength) / currentSegment.length;\r\n\r\n// let point;\r\n// if (currentSegment.type === \"C\") {\r\n// point = interpolate.cubicBezier(\r\n// segmentT,\r\n// currentSegment.start,\r\n// {\r\n// x: parsedPath[currentSegmentIndex].x2,\r\n// y: parsedPath[currentSegmentIndex].y2,\r\n// },\r\n// {\r\n// x: parsedPath[currentSegmentIndex].x3,\r\n// y: parsedPath[currentSegmentIndex].y3,\r\n// },\r\n// currentSegment.end\r\n// );\r\n// } else {\r\n// point = interpolate.line(\r\n// segmentT,\r\n// currentSegment.start,\r\n// currentSegment.end\r\n// );\r\n// }\r\n\r\n// points.push(point);\r\n// break;\r\n// }\r\n\r\n// accumulatedLength += currentSegment.length;\r\n// currentSegmentIndex++;\r\n// }\r\n// }\r\n\r\n// return points;\r\n// };\r\n\r\nexport const extractPointsFromPath = (pathData, numPoints = 100) => {\r\n // Normalize path data\r\n pathData = pathData.replace(/\\n/g, \" \").trim();\r\n\r\n // Helper function: Parse the path data into individual commands\r\n const parsePathData = (d) => {\r\n const commands =\r\n d.match(/[MmLlHhVvCcSsQqTtAaZz][^MmLlHhVvCcSsQqTtAaZz]*/g) || [];\r\n const parsed = [];\r\n let currentX = 0,\r\n currentY = 0,\r\n startX = 0,\r\n startY = 0;\r\n\r\n commands.forEach((command) => {\r\n const type = command[0];\r\n const values = command\r\n .slice(1)\r\n .trim()\r\n .split(/[\\s,]+/)\r\n .map(Number);\r\n\r\n switch (type.toUpperCase()) {\r\n case \"M\": // Move to\r\n currentX = values[0];\r\n currentY = values[1];\r\n startX = currentX;\r\n startY = currentY;\r\n parsed.push({ type: \"M\", x: currentX, y: currentY });\r\n break;\r\n\r\n case \"L\": // Line to\r\n parsed.push({\r\n type: \"L\",\r\n x1: currentX,\r\n y1: currentY,\r\n x2: values[0],\r\n y2: values[1],\r\n });\r\n currentX = values[0];\r\n currentY = values[1];\r\n break;\r\n\r\n case \"H\": // Horizontal line\r\n values.forEach((x) => {\r\n parsed.push({\r\n type: \"L\",\r\n x1: currentX,\r\n y1: currentY,\r\n x2: x,\r\n y2: currentY,\r\n });\r\n currentX = x;\r\n });\r\n break;\r\n\r\n case \"V\": // Vertical line\r\n values.forEach((y) => {\r\n parsed.push({\r\n type: \"L\",\r\n x1: currentX,\r\n y1: currentY,\r\n x2: currentX,\r\n y2: y,\r\n });\r\n currentY = y;\r\n });\r\n break;\r\n\r\n case \"C\": // Cubic Bézier\r\n parsed.push({\r\n type: \"C\",\r\n x1: currentX,\r\n y1: currentY,\r\n cx1: values[0],\r\n cy1: values[1],\r\n cx2: values[2],\r\n cy2: values[3],\r\n x2: values[4],\r\n y2: values[5],\r\n });\r\n currentX = values[4];\r\n currentY = values[5];\r\n break;\r\n\r\n case \"Z\": // Close path\r\n parsed.push({\r\n type: \"L\",\r\n x1: currentX,\r\n y1: currentY,\r\n x2: startX,\r\n y2: startY,\r\n });\r\n currentX = startX;\r\n currentY = startY;\r\n break;\r\n }\r\n });\r\n\r\n return parsed;\r\n };\r\n\r\n // **Improved Interpolation Functions**\r\n const interpolate = {\r\n line: (t, p0, p1) => ({\r\n x: p0.x + t * (p1.x - p0.x),\r\n y: p0.y + t * (p1.y - p0.y),\r\n }),\r\n\r\n cubicBezier: (t, p0, c1, c2, p1) => {\r\n const u = 1 - t;\r\n const tt = t * t;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const ttt = tt * t;\r\n\r\n return {\r\n x: uuu * p0.x + 3 * uu * t * c1.x + 3 * u * tt * c2.x + ttt * p1.x,\r\n y: uuu * p0.y + 3 * uu * t * c1.y + 3 * u * tt * c2.y + ttt * p1.y,\r\n };\r\n },\r\n };\r\n\r\n // **Parse the Path**\r\n const parsedPath = parsePathData(pathData);\r\n\r\n // **Calculate Lengths**\r\n const segments = [];\r\n let totalLength = 0;\r\n\r\n parsedPath.forEach((segment) => {\r\n const start = { x: segment.x1 || segment.x, y: segment.y1 || segment.y };\r\n const end = { x: segment.x2 || segment.x, y: segment.y2 || segment.y };\r\n\r\n let length = 0;\r\n if (segment.type === \"L\") {\r\n length = Math.hypot(end.x - start.x, end.y - start.y);\r\n } else if (segment.type === \"C\") {\r\n length = 0;\r\n const steps = 10;\r\n let prev = start;\r\n for (let i = 1; i <= steps; i++) {\r\n const t = i / steps;\r\n const point = interpolate.cubicBezier(\r\n t,\r\n start,\r\n { x: segment.cx1, y: segment.cy1 },\r\n { x: segment.cx2, y: segment.cy2 },\r\n end\r\n );\r\n length += Math.hypot(point.x - prev.x, point.y - prev.y);\r\n prev = point;\r\n }\r\n }\r\n\r\n segments.push({\r\n start,\r\n end,\r\n length,\r\n type: segment.type,\r\n control1: segment.cx1 ? { x: segment.cx1, y: segment.cy1 } : null,\r\n control2: segment.cx2 ? { x: segment.cx2, y: segment.cy2 } : null,\r\n });\r\n totalLength += length;\r\n });\r\n\r\n // **Distribute Points Along the Path**\r\n const points = [];\r\n let currentSegmentIndex = 0;\r\n let accumulatedLength = 0;\r\n\r\n for (let i = 0; i <= numPoints; i++) {\r\n const t = i / numPoints;\r\n const targetLength = t * totalLength;\r\n\r\n while (currentSegmentIndex < segments.length) {\r\n const currentSegment = segments[currentSegmentIndex];\r\n\r\n if (accumulatedLength + currentSegment.length >= targetLength) {\r\n const segmentT =\r\n (targetLength - accumulatedLength) / currentSegment.length;\r\n\r\n let point;\r\n if (currentSegment.type === \"C\") {\r\n point = interpolate.cubicBezier(\r\n segmentT,\r\n currentSegment.start,\r\n currentSegment.control1,\r\n currentSegment.control2,\r\n currentSegment.end\r\n );\r\n } else {\r\n point = interpolate.line(\r\n segmentT,\r\n currentSegment.start,\r\n currentSegment.end\r\n );\r\n }\r\n\r\n points.push(point);\r\n break;\r\n }\r\n\r\n accumulatedLength += currentSegment.length;\r\n currentSegmentIndex++;\r\n }\r\n }\r\n\r\n return points;\r\n};\r\n\r\n/**\r\n * Resets the animation of all edge motion balls on the page.\r\n *\r\n * @return {void} This function does not return anything.\r\n */\r\nexport const resetEdgeAnimation = () => {\r\n const edgeAnimationMotionBall = document.querySelectorAll(\"animateMotion\");\r\n for (let i = 0; i < edgeAnimationMotionBall.length; i++) {\r\n edgeAnimationMotionBall[i].beginElement();\r\n }\r\n return;\r\n};\r\n\r\nexport function convertToRgba(color, alpha) {\r\n // Match rgb and rgba formats\r\n const rgbMatch = color?.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n const rgbaMatch = color?.match(\r\n /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([01]?\\.?\\d*)\\)$/\r\n );\r\n\r\n // Match hex format (both 3 and 6 digits)\r\n const hexMatch = color?.match(/^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/);\r\n\r\n if (rgbMatch) {\r\n // If the color is in rgb format\r\n const [r, g, b] = rgbMatch.slice(1, 4);\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n } else if (rgbaMatch) {\r\n // If the color is in rgba format\r\n const [r, g, b] = rgbaMatch.slice(1, 4);\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n } else if (hexMatch) {\r\n // If the color is in hex format\r\n const hex = hexMatch[1];\r\n let r, g, b;\r\n\r\n if (hex.length === 3) {\r\n // Convert 3-digit hex to 6-digit\r\n r = parseInt(hex[0] + hex[0], 16);\r\n g = parseInt(hex[1] + hex[1], 16);\r\n b = parseInt(hex[2] + hex[2], 16);\r\n } else {\r\n r = parseInt(hex.slice(0, 2), 16);\r\n g = parseInt(hex.slice(2, 4), 16);\r\n b = parseInt(hex.slice(4, 6), 16);\r\n }\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n } else {\r\n // Default to black with specified alpha if input is invalid\r\n return `rgba(0, 0, 0, ${alpha})`;\r\n }\r\n}\r\n\r\nexport function parseRGBColor(colorString = \"\") {\r\n const values = colorString\r\n .replace(/rgba?\\(/, \"\")\r\n .replace(\")\", \"\")\r\n .split(\",\")\r\n .map((val) => parseFloat(val.trim()));\r\n\r\n const [r, g, b, a] = values;\r\n\r\n const result = { r, g, b };\r\n\r\n if (a !== undefined) {\r\n result.a = a;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseRGBColorConverter(colorString) {\r\n if (colorString.toLowerCase() === \"transparent\") {\r\n return { r: 0, g: 0, b: 0, a: 0 };\r\n }\r\n\r\n if (colorString.startsWith(\"#\")) {\r\n // Handle hexadecimal color codes\r\n const r = parseInt(colorString.substring(1, 3), 16);\r\n const g = parseInt(colorString.substring(3, 5), 16);\r\n const b = parseInt(colorString.substring(5, 7), 16);\r\n return { r, g, b, a: 1 }; // Assuming full opacity for hexadecimal colors\r\n }\r\n\r\n // Handle RGB and RGBA color strings\r\n const values = colorString\r\n .replace(/rgba?\\(/, \"\")\r\n .replace(\")\", \"\")\r\n .split(\",\")\r\n .map((val) => parseFloat(val.trim()));\r\n\r\n const [r, g, b, a] = values;\r\n\r\n const result = { r, g, b };\r\n\r\n if (a !== undefined) {\r\n result.a = a;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport const setEdgeAnchorTransform = (elements, x, y, position) => {\r\n const adjustments = {\r\n top: { cx: 0, cy: 10 },\r\n bottom: { cx: 0, cy: -10 },\r\n left: { cx: 10, cy: 0 },\r\n right: { cx: -10, cy: 0 },\r\n };\r\n\r\n const translation = {\r\n top: \"translate(0, 8px)\",\r\n bottom: \"translate(0, -8px)\",\r\n left: \"translate(8px, 0)\",\r\n right: \"translate(-8px, 0)\",\r\n };\r\n\r\n elements.forEach((el) => {\r\n let cx =\r\n parseFloat(el.getAttribute(\"cx\")) + (adjustments[position]?.cx || 0);\r\n let cy =\r\n parseFloat(el.getAttribute(\"cy\")) + (adjustments[position]?.cy || 0);\r\n\r\n if (cx === x && cy === y) {\r\n el.style.transform = translation[position] || \"none\";\r\n }\r\n });\r\n};\r\nexport const getSvgDimensions = (\r\n SvgComponent,\r\n shapeIconType,\r\n iconStyle,\r\n name\r\n) => {\r\n return new Promise((resolve) => {\r\n const offscreenDiv = document.createElement(\"div\");\r\n offscreenDiv.style.position = \"absolute\";\r\n offscreenDiv.style.visibility = \"hidden\";\r\n document.body.appendChild(offscreenDiv);\r\n const root = createRoot(offscreenDiv);\r\n root.render(\r\n \r\n );\r\n\r\n const smallSizedShapes = [\r\n \"Or\",\r\n \"Summing Junction\",\r\n \"Conversation\",\r\n \"Gateway\",\r\n \"End Event\",\r\n \"Intermediate Event\",\r\n \"Non-Interrupting Intermediate Event\",\r\n \"Non-Interrupting Start Event\",\r\n \"Start Event\",\r\n \"Pin Left\",\r\n \"Pin Right\",\r\n \"Pin Filled Right\",\r\n \"Pin Filled Left\",\r\n \"End\",\r\n \"Flow Final\",\r\n \"Start\",\r\n \"Pin\",\r\n \"History Pseudostate\",\r\n \"Deletion\",\r\n \"Required Interface\",\r\n \"Merge\",\r\n \"Branch_Merge\",\r\n ];\r\n\r\n const observer = new MutationObserver(() => {\r\n const svgElement = offscreenDiv.querySelector(\"svg\");\r\n // const pathElement = svgElement.querySelectorAll(\"path\")[1]\r\n // const color = pathElement.getAttribute(\"fill\");\r\n const width = svgElement.getAttribute(\"viewBox\").split(\" \")[2];\r\n const height = svgElement.getAttribute(\"viewBox\").split(\" \")[3];\r\n // const resize = [\"Curly Brace Note\",'Note', 'Text Annotation',]\r\n // const verticalSvg = ['Uml_Vertical_Fork','Uml Activation']\r\n // const horizontalSvg = ['Pool Black Box']\r\n if (svgElement) {\r\n const dimensions = {\r\n // width: verticalSvg?.includes(name) ? svgElement.clientWidth * 0.40 : horizontalSvg?.includes(name)? svgElement.clientWidth * 0.70 : svgElement.clientWidth * 1.2,\r\n // height: svgElement.clientHeight * 1.2\r\n // height: resize?.includes(name) ? svgElement.clientHeight * 0.15 : verticalSvg?.includes(name) ? svgElement.clientHeight * 0.4 : horizontalSvg?.includes(name) ? svgElement.clientHeight * 0.70 : svgElement.clientHeight * 1.2,\r\n width:\r\n name === \"Process\"\r\n ? width * (iconStyle === \"2D\" ? 6.5 : 3)\r\n : name === \"Curly Brace Note\" || name === \"Annotation\"\r\n ? width * 60\r\n : smallSizedShapes.includes(name)\r\n ? width * 3.5\r\n : // : name === \"Star\" ||\r\n // name === \"Pentagon\" ||\r\n // name === \"Hexagon\" ||\r\n // name === \"Triangle\"\r\n // ? width * 17\r\n width * 7,\r\n height:\r\n name === \"Process\"\r\n ? height * (iconStyle === \"2D\" ? 7 : 3.5)\r\n : name === \"Decision\"\r\n ? height * 8\r\n : smallSizedShapes.includes(name)\r\n ? height * 3.5\r\n : // : name === \"Star\" ||\r\n // name === \"Pentagon\" ||\r\n // name === \"Hexagon\" ||\r\n // name === \"Triangle\"\r\n // ? height * 17\r\n height * 7,\r\n // color: color\r\n };\r\n observer.disconnect();\r\n root.unmount();\r\n document.body.removeChild(offscreenDiv);\r\n resolve(dimensions);\r\n }\r\n });\r\n\r\n observer.observe(offscreenDiv, { childList: true, subtree: true });\r\n });\r\n};\r\n\r\nexport function getRandomRgbColor() {\r\n const r = Math.floor(Math.random() * 256);\r\n const g = Math.floor(Math.random() * 256);\r\n const b = Math.floor(Math.random() * 256);\r\n return `rgb(${r}, ${g}, ${b})`;\r\n}\r\n\r\nexport const checkTwoArraysAreEqual = (arr1 = [], arr2 = []) => {\r\n if (arr1.length !== arr2.length) {\r\n return false;\r\n }\r\n\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n if (set1.size !== set2.size) {\r\n return false;\r\n }\r\n\r\n for (let id of set1) {\r\n if (!set2.has(id)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport function isInputFocused() {\r\n const focusedElement = document.activeElement;\r\n\r\n if (\r\n (focusedElement &&\r\n (focusedElement.tagName === \"INPUT\" ||\r\n focusedElement.tagName === \"TEXTAREA\" ||\r\n focusedElement.tagName === \"SELECT\")) ||\r\n focusedElement.classList.contains(\"tiptap\")\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const checkEditorFocus = () => {\r\n return document\r\n .querySelector(\".ProseMirror\")\r\n ?.classList.contains(\"ProseMirror-focused\");\r\n};\r\n\r\nexport function hasSelectedTextInInput() {\r\n const focusedElement = document.activeElement;\r\n\r\n // Check if the focused element is an input, textarea, or contenteditable\r\n if (\r\n focusedElement &&\r\n (focusedElement.tagName === \"INPUT\" ||\r\n focusedElement.tagName === \"TEXTAREA\" ||\r\n focusedElement.isContentEditable)\r\n ) {\r\n const selectionStart = focusedElement.selectionStart;\r\n const selectionEnd = focusedElement.selectionEnd;\r\n\r\n // Check if there's selected text in input or textarea\r\n if (\r\n selectionStart !== null &&\r\n selectionEnd !== null &&\r\n selectionStart !== selectionEnd\r\n ) {\r\n return true;\r\n }\r\n\r\n // For contenteditable, check if there's a selection range\r\n const selection = window.getSelection();\r\n if (\r\n selection &&\r\n selection.rangeCount > 0 &&\r\n !selection.isCollapsed &&\r\n focusedElement.contains(selection.anchorNode)\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n// Common function to determine source handle based on the position\r\nexport const getSourceHandle = (position) => {\r\n switch (position) {\r\n case \"top\":\r\n return \"aaa\";\r\n case \"bottom\":\r\n return \"ddd\";\r\n case \"left\":\r\n return \"bbb\";\r\n case \"right\":\r\n return \"ccc\";\r\n default:\r\n return null; // Return null or a default value if position is unknown\r\n }\r\n};\r\n\r\n// Common function to determine target handle based on the position\r\nexport const getTargetHandle = (position) => {\r\n switch (position) {\r\n case \"top\":\r\n return \"ddd\";\r\n case \"bottom\":\r\n return \"aaa\";\r\n case \"left\":\r\n return \"ccc\";\r\n case \"right\":\r\n return \"bbb\";\r\n default:\r\n return null; // Return null or a default value if position is unknown\r\n }\r\n};\r\n\r\n// Recursive function to remove node and its children\r\nexport function removeOrphanedNodes(array) {\r\n let hasChanges;\r\n do {\r\n hasChanges = false;\r\n const validIds = new Set(array.map((node) => node.id));\r\n\r\n array = array.filter((node) => {\r\n if (!node.parentNode || validIds.has(node.parentNode)) {\r\n return true;\r\n } else {\r\n hasChanges = true;\r\n return false;\r\n }\r\n });\r\n } while (hasChanges);\r\n\r\n return array;\r\n}\r\n// Function to find the next available position\r\nexport const findAvailablePosition = (position, nodes) => {\r\n const nodeExists = nodes.find(\r\n (node) => node.position.x === position.x && node.position.y === position.y\r\n );\r\n\r\n if (nodeExists) {\r\n // If a node exists at the current position, shift to the right\r\n const newPosition = {\r\n x: position.x + nodeExists.width + 100,\r\n y: position.y,\r\n };\r\n return findAvailablePosition(newPosition, nodes); // Recursively check the new position\r\n }\r\n\r\n return position; // If no node exists, return the available position\r\n};\r\n\r\nexport function toRgba(color, alpha = 1) {\r\n let r,\r\n g,\r\n b,\r\n extractedAlpha = alpha;\r\n\r\n // If the color is in hex format\r\n if (color?.startsWith(\"#\")) {\r\n // Convert shorthand hex (#RGB) to full hex (#RRGGBB)\r\n if (color.length === 4) {\r\n color =\r\n \"#\" + color[1] + color[1] + color[2] + color[2] + color[3] + color[3];\r\n }\r\n\r\n // Parse hex values\r\n r = parseInt(color.slice(1, 3), 16);\r\n g = parseInt(color.slice(3, 5), 16);\r\n b = parseInt(color.slice(5, 7), 16);\r\n }\r\n // If the color is in rgba() or rgb() format\r\n else if (color?.startsWith(\"rgb\")) {\r\n const rgbaValues = color.match(/[\\d.]+/g); // Extract the numbers\r\n r = parseInt(rgbaValues[0]);\r\n g = parseInt(rgbaValues[1]);\r\n b = parseInt(rgbaValues[2]);\r\n\r\n // If alpha value is provided in rgba(), extract it\r\n if (rgbaValues.length === 4) {\r\n extractedAlpha = parseFloat(rgbaValues[3]);\r\n }\r\n }\r\n // If the color is a named color or other CSS color\r\n else {\r\n // Create a temporary element to get the computed color\r\n const tempElement = document.createElement(\"div\");\r\n tempElement.style.color = color;\r\n document.body.appendChild(tempElement);\r\n\r\n const computedColor = window.getComputedStyle(tempElement).color;\r\n document.body.removeChild(tempElement);\r\n\r\n // Parse the computed rgb or rgba color\r\n const rgbaValues = computedColor.match(/[\\d.]+/g);\r\n r = parseInt(rgbaValues[0]);\r\n g = parseInt(rgbaValues[1]);\r\n b = parseInt(rgbaValues[2]);\r\n\r\n // If alpha value is provided in rgba(), extract it\r\n if (rgbaValues.length === 4) {\r\n extractedAlpha = parseFloat(rgbaValues[3]);\r\n }\r\n }\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${extractedAlpha})`;\r\n}\r\n\r\nexport function getBezierPath(points) {\r\n if (points.length < 2) return \"\";\r\n\r\n let path = `M${points[0].x},${points[0].y}`;\r\n\r\n for (let i = 1; i < points.length - 2; i++) {\r\n const xc = (points[i].x + points[i + 1].x) / 2;\r\n const yc = (points[i].y + points[i + 1].y) / 2;\r\n path += ` Q${points[i].x},${points[i].y} ${xc},${yc}`;\r\n }\r\n\r\n // For the last two points\r\n if (points.length > 2) {\r\n const last = points.length - 1;\r\n path += ` Q${points[last - 1].x},${points[last - 1].y} ${points[last].x},${points[last].y\r\n }`;\r\n }\r\n\r\n return path;\r\n}\r\n\r\nexport const removeDuplicatesById = (arr) => {\r\n const uniqueIds = new Set();\r\n\r\n return arr.filter((item) => {\r\n if (uniqueIds.has(item.id)) {\r\n return false; // Ignore duplicate\r\n } else {\r\n uniqueIds.add(item.id); // Add unique ID to the set\r\n return true; // Include the item\r\n }\r\n });\r\n};\r\n\r\nexport const mergeArrays = (Array1, Array2) => {\r\n // Create a set of node IDs for fast lookup\r\n const nodeIds = new Set(Array1.map((node) => node.id));\r\n\r\n // Iterate through the Array2 array and add only the items that are not in Array1\r\n Array2?.forEach((item) => {\r\n if (!nodeIds.has(item.id)) {\r\n Array1.push(item); // Add the item to Array1 if it doesn't exist\r\n }\r\n });\r\n\r\n return Array1;\r\n};\r\n\r\nexport const findMinMaxHorizontalAbsolutePositions = (nodes) => {\r\n if (!nodes || nodes.length === 0) {\r\n return { minX: null, maxX: null, minY: null, maxY: null };\r\n }\r\n\r\n let minX = Infinity;\r\n let maxX = -Infinity;\r\n let minY = Infinity;\r\n let maxY = -Infinity;\r\n\r\n nodes.forEach((node) => {\r\n const { x, y } = node.positionAbsolute || { x: 0, y: 0 };\r\n\r\n if (x < minX) minX = x;\r\n if (x > maxX) maxX = x;\r\n if (y < minY) minY = y;\r\n if (y > maxY) maxY = y;\r\n });\r\n\r\n return { minX, maxX, minY, maxY };\r\n};\r\n\r\n// Extract the domain name without 'http', 'www', or domain extension\r\nexport const extractDomainName = (url) => {\r\n try {\r\n // Remove protocol (http://, https://) and www.\r\n const urlObj = new URL(url);\r\n let hostname = urlObj.hostname.replace(\"www.\", \"\");\r\n\r\n // Remove the domain extension (.com, .org, .net, etc.)\r\n const domainName = hostname.split(\".\")[0];\r\n\r\n return domainName;\r\n } catch (e) {\r\n // Handle URLs without http:// or https://\r\n let cleanedUrl = url.replace(/(https?:\\/\\/)?(www\\.)?/, \"\");\r\n return cleanedUrl.split(\".\")[0]; // Return the domain name without extension\r\n }\r\n};\r\n\r\n// Function to calculate handle positions (top, left, right, bottom) for a given node\r\nexport const getNodeHandlePositions = (node) => {\r\n const { x, y } = node.positionAbsolute || { x: 0, y: 0 };\r\n const width =\r\n node.type === \"stickyNoteEditor\" ? node.style?.width : node.width;\r\n const height =\r\n node.type === \"stickyNoteEditor\" ? node.style?.height : node.height;\r\n\r\n const centerX = x + width / 2;\r\n const centerY = y + height / 2;\r\n\r\n return {\r\n top: { x: centerX, y: y },\r\n left: { x: x, y: centerY },\r\n right: { x: x + width, y: centerY },\r\n bottom: { x: centerX, y: y + height },\r\n };\r\n};\r\n\r\nexport function getNodeWithAllChildrenAndEdges(node, nodes, edges) {\r\n // Helper function to recursively find children\r\n const findChildren = (currentNodeId) => {\r\n // Find all direct children of the current node\r\n const children = nodes.filter((n) => n.parentNode === currentNodeId);\r\n\r\n // For each child, recursively find its children\r\n const subchildren = children.flatMap((child) => findChildren(child.id));\r\n\r\n // Return all children and their subchildren\r\n return [...children, ...subchildren];\r\n };\r\n\r\n // Find all children and subchildren of the passed node\r\n const allChildren = findChildren(node.id);\r\n\r\n // Create a list of node IDs (the parent node + its children and subchildren)\r\n const allNodeIds = [node.id, ...allChildren.map((child) => child.id)];\r\n\r\n // Find all edges connected to the parent node or its children and subchildren\r\n const connectedEdges = edges.filter(\r\n (edge) =>\r\n allNodeIds.includes(edge.source) && allNodeIds.includes(edge.target)\r\n );\r\n\r\n // Return the selected node along with its children and the connected edges\r\n return {\r\n nodes: [node, ...allChildren], // Include the selected node as part of children\r\n edges: connectedEdges, // All edges connected to the selected node and its descendants\r\n };\r\n}\r\n\r\nexport function removeHTMLTags(str) {\r\n if (!str) return \"\"; // Handle null or undefined input gracefully\r\n return str.replace(/<\\/?[^>]+(>|$)/g, \"\"); // Regex to remove HTML tags\r\n}\r\n\r\nexport const validateUrl = (url) => {\r\n const regex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\r\n return regex.test(url);\r\n};\r\n\r\nexport const isPositionFarEnough = (oldPosition, newPosition, node) => {\r\n const { width, height } = node;\r\n\r\n // Calculate the boundaries for the 80-unit buffer around the old position\r\n const minX = oldPosition.x - width / 2 - 80;\r\n const maxX = oldPosition.x + width / 2 + 80;\r\n const minY = oldPosition.y - height / 2 - 80;\r\n const maxY = oldPosition.y + height / 2 + 80;\r\n\r\n // Check if the new position is outside this boundary\r\n if (\r\n newPosition.x < minX ||\r\n newPosition.x > maxX ||\r\n newPosition.y < minY ||\r\n newPosition.y > maxY\r\n ) {\r\n return true; // Position is far enough\r\n }\r\n\r\n return false; // Position is not far enough\r\n};\r\n\r\nexport const createTableData = (rows, cols) => {\r\n return Array.from({ length: rows }, (_, rowIndex) => {\r\n const row = {};\r\n Array.from({ length: cols }, (_, colIndex) => {\r\n row[`A${colIndex + 1}`] = { text: \"\", width: 100, height: 50 };\r\n });\r\n return row;\r\n });\r\n};\r\n\r\nexport const getStartVotingData = (getNodes) => {\r\n const sessionMap = {};\r\n\r\n getNodes?.forEach((item) => {\r\n if (!item?.data?.votingSessionData) return;\r\n\r\n item?.data.votingSessionData?.forEach((voteData) => {\r\n const {\r\n id,\r\n voteColor,\r\n name,\r\n votingEnd,\r\n endVote,\r\n selectType,\r\n time,\r\n voteSection,\r\n voteOn,\r\n first_name,\r\n last_name,\r\n profile_picture,\r\n profile_color,\r\n date,\r\n privateVoting,\r\n nodeName,\r\n nodeId,\r\n height,\r\n width,\r\n background,\r\n text,\r\n vote,\r\n file,\r\n url,\r\n type,\r\n iconStyle,\r\n iconType,\r\n Provider,\r\n node,\r\n category,\r\n key,\r\n color,\r\n startVoting,\r\n createVoting,\r\n continueVoting,\r\n votingStopTime,\r\n votingStartTime,\r\n } = voteData;\r\n\r\n if (!sessionMap[id]) {\r\n sessionMap[id] = {\r\n id,\r\n voteColor,\r\n name,\r\n votingEnd,\r\n endVote,\r\n selectType,\r\n time,\r\n voteSection,\r\n voteOn,\r\n first_name,\r\n last_name,\r\n profile_picture,\r\n profile_color,\r\n date,\r\n privateVoting,\r\n startVoting,\r\n createVoting,\r\n continueVoting,\r\n vote,\r\n votingStopTime,\r\n votingStartTime,\r\n nodeData: [],\r\n };\r\n }\r\n sessionMap[id].nodeData.push({\r\n nodeName,\r\n nodeId,\r\n height,\r\n width,\r\n background,\r\n text,\r\n vote,\r\n file,\r\n url,\r\n iconStyle,\r\n iconType,\r\n Provider,\r\n node,\r\n category,\r\n key,\r\n type,\r\n color,\r\n });\r\n });\r\n });\r\n return Object.values(sessionMap).map((sessionData) => {\r\n const totalVotes = sessionData.nodeData.reduce(\r\n (sum, node) => sum + (node.vote || 0), // Safely sum votes, defaulting to 0 if undefined\r\n 0\r\n );\r\n return {\r\n sessionId: sessionData.id,\r\n voteColor: sessionData?.voteColor,\r\n name: sessionData?.name,\r\n votingEnd: sessionData?.votingEnd,\r\n endVote: sessionData?.endVote,\r\n selectType: sessionData?.selectType,\r\n time: sessionData?.time,\r\n voteSection: sessionData?.voteSection,\r\n voteOn: sessionData?.voteOn,\r\n first_name: sessionData?.first_name,\r\n last_name: sessionData?.last_name,\r\n profile_picture: sessionData?.profile_picture,\r\n profile_color: sessionData?.profile_color,\r\n date: sessionData?.date,\r\n privateVoting: sessionData?.privateVoting,\r\n nodeData: sessionData.nodeData,\r\n startVoting: sessionData?.startVoting,\r\n createVoting: sessionData?.createVoting,\r\n continueVoting: sessionData?.continueVoting,\r\n vote: totalVotes,\r\n votingStopTime: sessionData?.votingStopTime,\r\n votingStartTime: sessionData?.votingStartTime,\r\n };\r\n });\r\n};\r\n\r\nexport const sortNodesByHierarchy = (nodes = []) => {\r\n const getDepth = (node, depthMap) => {\r\n if (depthMap[node.id] !== undefined) return depthMap[node.id];\r\n if (!node.parentNode) return 0;\r\n\r\n const parentNode = nodes.find((n) => n.id === node.parentNode);\r\n if (!parentNode) return 0;\r\n\r\n const depth = 1 + getDepth(parentNode, depthMap);\r\n depthMap[node.id] = depth;\r\n return depth;\r\n };\r\n\r\n const depthMap = {};\r\n nodes.forEach((node) => {\r\n depthMap[node.id] = getDepth(node, depthMap);\r\n });\r\n\r\n return [...nodes].sort((a, b) => depthMap[a.id] - depthMap[b.id]);\r\n};\r\n\r\nexport const isNodeIntersecting = (newNode, nodes = [], partial = false) => {\r\n const sortedNodes = sortNodesByHierarchy(nodes);\r\n let intersectedNode = null;\r\n\r\n const newNodeXPlusWidth =\r\n newNode?.position?.x +\r\n (Number(newNode?.style?.width) ||\r\n Number(newNode?.data?.style?.width) ||\r\n Number(newNode?.width) ||\r\n Number(newNode?.data?.width));\r\n const newNodeYPlusHeight =\r\n newNode?.position?.y +\r\n (Number(newNode?.style?.height) ||\r\n Number(newNode?.data?.style?.height) ||\r\n Number(newNode?.height) ||\r\n Number(newNode?.data?.height));\r\n\r\n sortedNodes.forEach((node) => {\r\n const nodeXPlusWidth =\r\n node?.position?.x +\r\n (Number(node?.style?.width) ||\r\n Number(node?.data?.style?.width) ||\r\n Number(node?.width) ||\r\n Number(node?.data?.width));\r\n const nodeYPlusHeight =\r\n node?.position?.y +\r\n (Number(node?.style?.height) ||\r\n Number(node?.data?.style?.height) ||\r\n Number(node?.height) ||\r\n Number(node?.data?.height));\r\n\r\n if (partial === true) {\r\n if (\r\n ((newNodeXPlusWidth > node?.position?.x &&\r\n newNodeXPlusWidth < nodeXPlusWidth) ||\r\n (newNode?.position?.x > node?.position?.x &&\r\n newNode?.position?.x < nodeXPlusWidth)) &&\r\n ((newNode?.position?.y > node?.position?.y &&\r\n newNode?.position?.y < nodeYPlusHeight) ||\r\n (newNodeYPlusHeight > node?.position?.y &&\r\n newNodeYPlusHeight < nodeYPlusHeight))\r\n ) {\r\n intersectedNode = node;\r\n }\r\n } else {\r\n if (\r\n newNode?.position?.x >= node?.position?.x &&\r\n nodeXPlusWidth > newNodeXPlusWidth &&\r\n newNode?.position?.y >= node?.position?.y &&\r\n nodeYPlusHeight > newNodeYPlusHeight\r\n ) {\r\n intersectedNode = node;\r\n }\r\n }\r\n });\r\n\r\n return intersectedNode;\r\n};\r\n\r\nexport const localDateFormat = (takeDate) => {\r\n return takeDate === \"Invalid date\"\r\n ? \"-\"\r\n : takeDate\r\n ? moment(takeDate).format(\"DD MMM, YYYY\")\r\n : \"-\";\r\n};\r\n\r\nexport const calculateTimeAgoOrFormatted = (updatedAt) => {\r\n if (!updatedAt) return \"-\";\r\n\r\n const createdAt = moment(updatedAt);\r\n const now = moment();\r\n const diffInSeconds = now.diff(createdAt, \"seconds\");\r\n\r\n if (diffInSeconds < 60) {\r\n return `${diffInSeconds} second${diffInSeconds !== 1 ? \"s\" : \"\"} ago`;\r\n }\r\n\r\n const diffInMinutes = now.diff(createdAt, \"minutes\");\r\n if (diffInMinutes < 60) {\r\n return `${diffInMinutes} minute${diffInMinutes !== 1 ? \"s\" : \"\"} ago`;\r\n }\r\n\r\n const diffInHours = now.diff(createdAt, \"hours\");\r\n if (diffInHours < 24) {\r\n return `${diffInHours} hour${diffInHours !== 1 ? \"s\" : \"\"} ago`;\r\n }\r\n\r\n const diffInDays = now.diff(createdAt, \"days\");\r\n if (diffInDays < 7) {\r\n return `${diffInDays} day${diffInDays !== 1 ? \"s\" : \"\"} ago`;\r\n }\r\n\r\n return localDateFormat(updatedAt);\r\n};\r\n\r\nexport const countChildrenBySide = (parentId, side, nodes) => {\r\n // Helper function to recursively count children\r\n const getChildNodes = (id) =>\r\n nodes.filter((node) => node.parentNode === id && node?.data?.side === side);\r\n\r\n const countRecursively = (id) => {\r\n const children = getChildNodes(id);\r\n return children.reduce(\r\n (count, child) => count + 1 + countRecursively(child.id),\r\n 0\r\n );\r\n };\r\n\r\n return countRecursively(parentId);\r\n};\r\n\r\nexport const capitalizeFirstChar = (str) => {\r\n if (!str) return \"\"; // Handle empty or null strings\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n};\r\n\r\nexport const extractNameFromEmail = (email) => {\r\n // Check if email is valid\r\n if (!email || !email?.includes(\"@\")) {\r\n return { emailFirstName: \"\", emailLastName: \"\" };\r\n }\r\n\r\n // Extract the part before the @\r\n const localPart = email?.split(\"@\")[0];\r\n\r\n // Split by common delimiters like . or _\r\n const parts = localPart.split(/[\\._+]/);\r\n\r\n // Handle cases\r\n const emailFirstName =\r\n parts[0]?.charAt(0)?.toUpperCase() + parts[0]?.slice(1) || \"\";\r\n const emailLastName =\r\n parts[1]?.charAt(0)?.toUpperCase() + parts[1]?.slice(1) || \"\";\r\n\r\n return { emailFirstName, emailLastName };\r\n};\r\n\r\nexport const isAccountOwner = (tableRow, user) => {\r\n return (\r\n tableRow?.email_id === user?.email_id && user?.role === \"Account Owner\"\r\n );\r\n};\r\n\r\nexport function setFullOpacity(colorString) {\r\n const parts = colorString.split(\",\");\r\n parts[3] = \"1)\";\r\n return parts.join(\",\");\r\n}\r\n\r\nexport function calculateHeightWidthInPercentage(oldSize, newSize) {\r\n const { width: oldWidth, height: oldHeight } = oldSize;\r\n const { width: newWidth, height: newHeight } = newSize;\r\n\r\n const widthChange = ((newWidth - oldWidth) / oldWidth) * 100;\r\n const heightChange = ((newHeight - oldHeight) / oldHeight) * 100;\r\n\r\n return {\r\n widthChangeInPer: parseFloat(widthChange.toFixed(2)),\r\n heightChangeInPer: parseFloat(heightChange.toFixed(2)),\r\n };\r\n}\r\n\r\nexport function calculateHeightWidthFromPercentage(oldSize, percentageChange) {\r\n const { width: oldWidth, height: oldHeight } = oldSize;\r\n const { widthChange, heightChange } = percentageChange;\r\n\r\n const newWidth = oldWidth + (oldWidth * widthChange) / 100;\r\n const newHeight = oldHeight + (oldHeight * heightChange) / 100;\r\n\r\n return {\r\n newWidth: parseFloat(newWidth.toFixed(2)),\r\n newHeight: parseFloat(newHeight.toFixed(2)),\r\n };\r\n}\r\nexport function updateEdgeWithoutType(edges) {\r\n return edges.map((edge) => {\r\n if (!edge.type) {\r\n return {\r\n ...edge,\r\n type: \"step-edge\",\r\n };\r\n }\r\n return edge;\r\n });\r\n}\r\n\r\nexport function getMaxAndMinZIndex(items) {\r\n if (items.length === 0) {\r\n return { maxZIndex: null, minZIndex: null }; // Handle empty array case\r\n }\r\n\r\n return items.reduce(\r\n (result, item) => {\r\n // Extract zIndex or default to 1\r\n const zIndex = item?.style?.zIndex ?? 1;\r\n\r\n return {\r\n maxZIndex: Math.max(result.maxZIndex, Number(zIndex)),\r\n minZIndex: Math.min(result.minZIndex, Number(zIndex)),\r\n };\r\n },\r\n {\r\n maxZIndex: -Infinity, // Initialize with smallest possible value\r\n minZIndex: Infinity, // Initialize with largest possible value\r\n }\r\n );\r\n}\r\n\r\nconst imagesPath = Array.from(\r\n { length: 38 },\r\n (_, i) =>\r\n `https://cloudairy-template-storage.s3.us-east-1.amazonaws.com/public/thumbnail-images/${i + 1\r\n }.png`\r\n);\r\n\r\nexport const getRandomThumbnailImage = () => {\r\n const randomIndex = Math.floor(Math.random() * imagesPath.length);\r\n return imagesPath[randomIndex];\r\n};\r\n\r\n// Helper function to check if one node is contained within another\r\nexport const checkNodeContainment = (containerNode, potentialChildNode) => {\r\n // Get dimensions and positions\r\n const containerPosition =\r\n containerNode?.positionAbsolute || containerNode?.position;\r\n const containerWidth = containerNode?.width || containerNode?.style?.width;\r\n const containerHeight = containerNode?.height || containerNode?.style?.height;\r\n const container = {\r\n left: containerPosition.x,\r\n right: containerPosition.x + containerWidth,\r\n top: containerPosition.y,\r\n bottom: containerPosition.y + containerHeight,\r\n };\r\n\r\n const potentialChildNodePosition =\r\n potentialChildNode?.positionAbsolute || potentialChildNode?.position;\r\n const potentialChildNodeWidth =\r\n potentialChildNode?.width || potentialChildNode?.style?.width;\r\n const potentialChildNodeHeight =\r\n potentialChildNode?.height || potentialChildNode?.style?.height;\r\n const child = {\r\n left: potentialChildNodePosition.x,\r\n right: potentialChildNodePosition.x + potentialChildNodeWidth,\r\n top: potentialChildNodePosition.y,\r\n bottom: potentialChildNodePosition.y + potentialChildNodeHeight,\r\n };\r\n\r\n // Check if the child node is completely contained within the container node\r\n return (\r\n child.left >= container.left &&\r\n child.right <= container.right &&\r\n child.top >= container.top &&\r\n child.bottom <= container.bottom\r\n );\r\n};\r\n\r\nexport const updateBoardCountInCurrentSubscription = async ({\r\n dispatch,\r\n currentSubscriptionData,\r\n isMinus = true,\r\n}) => {\r\n try {\r\n const updatedFeatureLimitAndUsed = (\r\n currentSubscriptionData?.featureLimitAndUsed || []\r\n ).map((item, index) => {\r\n if (item?.hasOwnProperty(\"used\") && index === 0) {\r\n return { ...item, used: isMinus ? item.used - 1 : item.used + 1 };\r\n }\r\n return item;\r\n });\r\n\r\n const updatedSubscriptionData = {\r\n ...currentSubscriptionData,\r\n featureLimitAndUsed: updatedFeatureLimitAndUsed,\r\n };\r\n localStorage.setItem(\r\n \"currentSubscription\",\r\n JSON.stringify(updatedSubscriptionData)\r\n );\r\n dispatch(updateCurrentSubscription(updatedSubscriptionData));\r\n } catch (error) { }\r\n};\r\n\r\nexport const isBothNodeNoteIdenticalByArea = (node1, node2) => {\r\n const parseSize = (value) => {\r\n if (typeof value === \"string\") {\r\n return parseFloat(value); // Convert \"13px\" -> 13\r\n }\r\n return value || 0; // Ensure it's always a number\r\n };\r\n\r\n const node1Width = parseSize(node1?.width || node1?.style?.width);\r\n const node2Width = parseSize(node2?.width || node2?.style?.width);\r\n const node1Height = parseSize(node1?.height || node1?.style?.height);\r\n const node2Height = parseSize(node2?.height || node2?.style?.height);\r\n\r\n const isNotIdentical = Math.abs(node1Width - node2Width) > 3 && Math.abs(node1Height - node2Height) > 3;\r\n\r\n return isNotIdentical;\r\n}\r\n\r\nexport const getNodeById = (nodes, id) => nodes.find((node) => node.id === id);\r\n\r\nexport const extractShapeTableEdgeHandleId = (str) => {\r\n const match = str.match(/(.*?-\\d-)(.*)/);\r\n return match ? { type: match[1], id: match[2] } : null;\r\n};\r\n\r\nexport const fixOrphanNodes = (nodes) => {\r\n // Convert array to a Set for quick lookup of parentNode IDs\r\n const nodeIds = new Set(nodes.map(node => node.id));\r\n\r\n return nodes.map(node => {\r\n // Check if the node has a parentNode and if that parent exists in the array\r\n if (node?.parentNode && !nodeIds.has(node?.parentNode)) {\r\n return {\r\n ...node,\r\n parentNode: null, // Remove invalid parent\r\n position: node.positionAbsolute, // Set position absolute\r\n };\r\n }\r\n return node; // Keep the node as is if it has a valid parent\r\n });\r\n};\r\n\r\nexport const logoutChannel = new BroadcastChannel(\"logout\");\r\nexport const loginChannel = new BroadcastChannel(\"login\");\r\nexport const switchWorkspaceChannel = new BroadcastChannel(\"switch-workspace\");\r\n","import axios from \"axios\";\r\nimport { storeDispatch } from \"../Redux/store\";\r\nimport { updateUserData } from \"../Redux/common-reducer\";\r\nimport { logoutChannel } from \"./commanFunctions\";\r\n\r\nexport const serviceBaseUrls = Object.freeze({\r\n drawboard: process.env.REACT_APP_DRAWBOARD_SERVICE_URL,\r\n user: process.env.REACT_APP_USER_SERVICE_URL,\r\n \"user/v1\": process.env.REACT_APP_USER_SERVICE_URL + \"/v1\",\r\n \"drawboard/v1\": process.env.REACT_APP_DRAWBOARD_SERVICE_URL + \"/v1\",\r\n});\r\n\r\nconst axiosInstance = axios.create({\r\n baseURL: serviceBaseUrls.drawboard,\r\n timeout: 0,\r\n});\r\n\r\naxiosInstance.interceptors.request.use(\r\n (config) => {\r\n const user_data = localStorage.getItem(\"user_data\");\r\n if (user_data && user_data !== \"null\") {\r\n config.headers.Authorization = `Bearer ${JSON.parse(localStorage.getItem(\"user_data\")).access_token\r\n }`;\r\n }\r\n\r\n if (!config.headers[\"Content-Type\"]) {\r\n config.headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\r\n }\r\n\r\n config.headers[\"ache-Control\"] =\r\n \"no-store, no-cache, must-revalidate, max-age=0\";\r\n config.headers[\"Pragma\"] = \"no-cache\";\r\n\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\naxiosInstance.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n if (error?.response?.status === 405) {\r\n window.location.reload();\r\n }\r\n\r\n if (error?.response?.status === 410) {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n\r\n if (\"caches\" in window) {\r\n caches.keys().then((cacheNames) => {\r\n cacheNames.forEach((cacheName) => {\r\n caches.delete(cacheName);\r\n });\r\n });\r\n }\r\n\r\n document.cookie.split(\";\").forEach((cookie) => {\r\n const name = cookie.split(\"=\")[0].trim();\r\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`;\r\n });\r\n\r\n logoutChannel.postMessage(\"logout\");\r\n window.location.href = \"/login\";\r\n }\r\n\r\n if (error?.response?.status === 401) {\r\n localStorage.removeItem(\"isNodesSet\");\r\n axios.defaults.headers.common[\"Authorization\"] = `Bearer ${JSON.parse(localStorage.getItem(\"user_data\")).refresh_token\r\n }`;\r\n axios\r\n .post(serviceBaseUrls.user + \"/v1/refresh-token\", {\r\n grant_type: \"refresh_token\",\r\n })\r\n .then((response) => {\r\n storeDispatch(updateUserData(response.data.data));\r\n localStorage.setItem(\"user_data\", JSON.stringify(response.data.data));\r\n })\r\n .catch((err) => {\r\n logoutChannel.postMessage(\"logout\");\r\n localStorage.clear();\r\n window.location.href = \"/login\";\r\n })\r\n .finally(() => {\r\n window.location.reload();\r\n });\r\n } else {\r\n console.error(\"Error:\", error.message);\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nclass Commanservice {\r\n async postApi(\r\n service = \"drawboard\",\r\n path = \"/\",\r\n data = {},\r\n queryParams = {},\r\n headers = {}\r\n ) {\r\n try {\r\n let serviceBaseUrl = serviceBaseUrls[service];\r\n if (!serviceBaseUrl) {\r\n throw new Error(\r\n `Service with ${service} name not found in config setting default service to drawboard for path ${path}`\r\n );\r\n }\r\n const response = await axiosInstance({\r\n method: \"post\",\r\n baseURL: serviceBaseUrl,\r\n url: path,\r\n data: data,\r\n params: queryParams,\r\n headers: headers,\r\n });\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n async putApi(\r\n service = \"drawboard\",\r\n path = \"/\",\r\n data = {},\r\n queryParams = {},\r\n headers = {}\r\n ) {\r\n try {\r\n let serviceBaseUrl = serviceBaseUrls[service];\r\n if (!serviceBaseUrl) {\r\n throw new Error(\r\n `Service with ${service} name not found in config setting default service to drawboard for path ${path}`\r\n );\r\n }\r\n const response = await axiosInstance({\r\n method: \"put\",\r\n baseURL: serviceBaseUrl,\r\n url: path,\r\n data: data,\r\n params: queryParams,\r\n headers: headers,\r\n });\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n async patchApi(\r\n service = \"drawboard\",\r\n path = \"/\",\r\n data = {},\r\n queryParams = {},\r\n headers = {}\r\n ) {\r\n try {\r\n let serviceBaseUrl = serviceBaseUrls[service];\r\n if (!serviceBaseUrl) {\r\n throw new Error(\r\n `Service with ${service} name not found in config setting default service to drawboard for path ${path}`\r\n );\r\n }\r\n const response = await axiosInstance({\r\n method: \"patch\",\r\n baseURL: serviceBaseUrl,\r\n url: path,\r\n data: data,\r\n params: queryParams,\r\n headers: headers,\r\n });\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n async deleteApi(\r\n service = \"drawboard\",\r\n path = \"/\",\r\n data = {},\r\n queryParams = {},\r\n headers = {}\r\n ) {\r\n try {\r\n let serviceBaseUrl = serviceBaseUrls[service];\r\n if (!serviceBaseUrl) {\r\n throw new Error(\r\n `Service with ${service} name not found in config setting default service to drawboard for path ${path}`\r\n );\r\n }\r\n const response = await axiosInstance({\r\n method: \"delete\",\r\n baseURL: serviceBaseUrl,\r\n url: path,\r\n data: data,\r\n params: queryParams,\r\n headers: headers,\r\n });\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n async getApi(\r\n service = \"drawboard\",\r\n path = \"/\",\r\n queryParams = {},\r\n headers = {}\r\n ) {\r\n try {\r\n let serviceBaseUrl = serviceBaseUrls[service];\r\n if (!serviceBaseUrl) {\r\n throw new Error(\r\n `Service with ${service} name not found in config setting default service to drawboard for path ${path}`\r\n );\r\n }\r\n const response = await axiosInstance({\r\n method: \"get\",\r\n baseURL: serviceBaseUrl,\r\n url: path,\r\n params: queryParams,\r\n headers: headers,\r\n });\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n async handleError(service, error) {\r\n if (error?.response?.status === 502 || error?.response?.status === 504) {\r\n await axiosInstance.post(\r\n service === \"user\" ? \"/drawboard/notify-sv\" : \"/user/notify-sv\",\r\n error\r\n );\r\n throw error;\r\n }\r\n throw error;\r\n }\r\n\r\n async uploadApi(service, path, data) {\r\n try {\r\n const response = await this.postApi(\r\n service,\r\n path,\r\n data,\r\n {},\r\n {\r\n \"content-type\": \"multipart/form-data\",\r\n }\r\n );\r\n return response;\r\n } catch (error) {\r\n return this.handleError(service, error);\r\n }\r\n }\r\n\r\n hubpost(url, data, config = {}) {\r\n return axios\r\n .post(\r\n \"https://api.hsforms.com/submissions/v3/integration/submit/45899842/aa3724a2-611c-4e60-81ba-1c70c3aa1534\",\r\n { ...data },\r\n { ...config }\r\n )\r\n .then((response) => response);\r\n }\r\n\r\n openAIApi(prompt, contentType, enhanced = false) {\r\n return axiosInstance\r\n .post(\"/v2/generate/generate-content\", {\r\n prompt: prompt,\r\n content_type: contentType,\r\n enhanced: enhanced,\r\n })\r\n .then((response) => response);\r\n }\r\n\r\n resourceColor = (fill) => {\r\n if (fill?.includes(\"transparent\")) {\r\n return \"transparent\";\r\n }\r\n const rgbParts = fill.match(/\\d+/g);\r\n let r = parseInt(rgbParts[0], 10); // Convert string to integer\r\n let g = parseInt(rgbParts[1], 10);\r\n let b = parseInt(rgbParts[2], 10);\r\n r = Math.round(r / 0.4);\r\n g = Math.round(g / 0.4);\r\n b = Math.round(b / 0.4);\r\n return \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\r\n };\r\n\r\n serviceColor = (fill) => {\r\n const rgbParts = fill.match(/\\d+/g);\r\n let r = parseInt(rgbParts[0], 10); // Convert string to integer\r\n let g = parseInt(rgbParts[1], 10);\r\n let b = parseInt(rgbParts[2], 10);\r\n r = Math.round(r * 0.8);\r\n g = Math.round(g * 0.8);\r\n b = Math.round(b * 0.8);\r\n return \"rgb(\" + r + \",\" + g + \",\" + b + \")\";\r\n };\r\n\r\n downColoropacity = (fill, opacity = 0.8) => {\r\n const rgbaParts = fill.match(/\\d+/g);\r\n let r = parseInt(rgbaParts[0], 10);\r\n let g = parseInt(rgbaParts[1], 10);\r\n let b = parseInt(rgbaParts[2], 10);\r\n let a = rgbaParts.length === 4 ? parseFloat(rgbaParts[3]) : 1;\r\n\r\n // Lighten the color by a specific percentage\r\n const lightenPercentage = opacity;\r\n\r\n r = Math.round(r + (255 - r) * lightenPercentage);\r\n g = Math.round(g + (255 - g) * lightenPercentage);\r\n b = Math.round(b + (255 - b) * lightenPercentage);\r\n\r\n return `rgba(${r},${g},${b},${a})`;\r\n };\r\n\r\n calculateHeight = (widths, aspectRatioWidth, aspectRatioHeight) => {\r\n return (widths / aspectRatioWidth) * aspectRatioHeight;\r\n };\r\n}\r\n\r\nconst commanService = new Commanservice();\r\n\r\nexport default commanService;\r\n\r\nexport const hubSpotAPI = async (\r\n data,\r\n config = {},\r\n id = \"8a7c05b9-33c7-4011-81ff-b0feb55a62e0\"\r\n) => {\r\n return await axios\r\n .post(\r\n `https://api.hsforms.com/submissions/v3/integration/submit/45899842/${id}`,\r\n { ...data },\r\n { ...config }\r\n )\r\n .then((response) => response);\r\n};\r\n","import React from \"react\";\r\nimport { color } from \"../Utils/style/color/color\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nconst CommonBulletPoint = ({ pointColor, height, width, mt }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CommonBulletPoint;\r\n","import {\r\n Box,\r\n Popover,\r\n Stack,\r\n Typography,\r\n useMediaQuery,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport moment from \"moment\";\r\nimport React, { useCallback, useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport commanService from \"../../CommanFunctions/commanService\";\r\nimport DeleteDialog from \"../../Components/DialogBox/DeleteDialog\";\r\nimport { s3AssetsUrl } from \"../../Components/DrawBoard/const\";\r\nimport { CustomNameTooltip } from \"../../Components/DrawBoard/top-toolbar/components/CustomTooltip\";\r\nimport CreateArchBoard from \"../../Components/Project-Management/boards/ArchitectureBoard/CreateArchBoard\";\r\nimport CloneBoard from \"../../Components/Project-Management/boards/CloneBoard\";\r\nimport MoveBoard from \"../../Components/Project-Management/boards/MoveBoard\";\r\nimport Feedback from \"../../Components/commonPages/Feedback\";\r\nimport Support from \"../../Components/commonPages/Support\";\r\nimport ChoosePlan from \"../../Components/upgrade-plan/ChoosePlan\";\r\nimport { resetAllQueryCache } from \"../../Redux/api/resetAllQueryCache\";\r\nimport { useGetAccountDetailQuery } from \"../../Redux/api/userApi\";\r\nimport { useGetUserInfoMutation } from \"../../Redux/api/usersApi\";\r\nimport {\r\n updateCurrentSubscription,\r\n updateUserData,\r\n} from \"../../Redux/common-reducer\";\r\nimport { handleChangeGlobalSearch } from \"../../Redux/drawboard\";\r\nimport { setEntireSubscriptionSliceData } from \"../../Redux/subscriptionSlice\";\r\nimport { errorToast, warningToast } from \"../../Redux/toastSlice\";\r\nimport { color } from \"../../Utils/style/color/color\";\r\nimport { commonStyles } from \"../../Utils/style/common/commonStyles\";\r\nimport { fontSizes } from \"../../Utils/style/font/fontsizes\";\r\nimport { fontWeight } from \"../../Utils/style/weight/fontWeight\";\r\nimport {\r\n IcBoostOutlined,\r\n IcFeedback,\r\n IcKeyboardShortcuts,\r\n IcLeftSingleArrow,\r\n IcSettingOutlinedNew,\r\n IcSignOutOutlined,\r\n IcSupport,\r\n IcUpArrowCircleOutlined,\r\n IcUpgrade,\r\n IcUserCircleOutlined2,\r\n} from \"../../assets/icon-components\";\r\nimport CommonDivider from \"../../common-components/CommonDivider\";\r\nimport SearchInput from \"../../common-components/SimpleSearchInput\";\r\nimport CommonLink from \"../../common-components/buttons/CommonLink\";\r\nimport ReactivateSubscription from \"../../common-components/modals/ReactivateSubscription\";\r\nimport \"./header.scss\";\r\nimport {\r\n logoutChannel,\r\n updateBoardCountInCurrentSubscription,\r\n} from \"../../CommanFunctions/commanFunctions\";\r\n\r\nconst Header = () => {\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const dispatch = useDispatch();\r\n const redirectPath = localStorage.getItem(\"redirectPath\");\r\n const { userData, currentSubscriptionData } = useSelector(\r\n (state) => state.common\r\n );\r\n const { globalChartSearch } = useSelector((state) => state.drawboard);\r\n const { openedSidebar } = useSelector((state) => state.sidebar);\r\n // const [anchorEl, setAnchorEl] = useState(null);\r\n const [anchorEl2, setAnchorEl2] = useState(null);\r\n // const [selectedItem, setSelectedItem] = useState(null);\r\n // const [loading, setLoading] = useState(false);\r\n // const [showContactUs, setShowContactUs] = useState(false);\r\n const [showSupport, setShowSupport] = useState(false);\r\n const [showSFeedback, setShowFeedback] = useState(false);\r\n // const [tooltipOpen, setTooltipOpen] = useState(false);\r\n // const [value, setValue] = React.useState(0);\r\n // const { ...modelState } = useContext(ModelContext);\r\n\r\n // const open = Boolean(anchorEl);\r\n // const popoverId = open ? \"simple-popover\" : undefined;\r\n const [openTooltip, setOpenTooltip] = useState(false);\r\n const [tooltipVisible, setTooltipVisible] = useState(false);\r\n const open2 = Boolean(anchorEl2);\r\n const popoverId2 = open2 ? \"simple-popover2\" : undefined;\r\n\r\n const [boardData, setBoardData] = useState(null);\r\n const [boardName, setBoardName] = useState(\"\");\r\n const [showCreateBoard, setShowCreateBoard] = useState(false);\r\n const [showCloneBoard, setShowCloneBoard] = useState(false);\r\n const [showMoveBoard, setShowMoveBoard] = useState(false);\r\n const [showDeleteBoard, setShowDeleteBoard] = useState(false);\r\n const [showPlans, setShowPlans] = useState(false);\r\n // const [accountData, setAccountData] = useState([]);\r\n const [accountArray, setAccountArray] = useState([]);\r\n const globalTheme = useTheme();\r\n const matchDown1536 = useMediaQuery(globalTheme.breakpoints.down(1536));\r\n const architectureData = useSelector(\r\n (data) => data?.archBoard?.architectureRes\r\n );\r\n const isCreatingNewWorkSpace = JSON.parse(\r\n localStorage.getItem(\"create_new_workspace_data\")\r\n );\r\n const [getUserInfo] = useGetUserInfoMutation();\r\n const userId = userData?.user_id;\r\n const isAccountOwner = userData?.role;\r\n const {\r\n data: getAccountDetail,\r\n isLoading: loadingAccountDetails,\r\n isFetching: fetchingAccountDetails,\r\n } = useGetAccountDetailQuery(userData?.user_id);\r\n\r\n const fetchUserInformation = () => {\r\n getUserInfo({ userId, teamId: userData?.team_id })\r\n .unwrap()\r\n .then((res) => {\r\n const responseEmail = res?.data?.email_id;\r\n\r\n if (userData?.email !== responseEmail) {\r\n const newUserData = {\r\n ...userData,\r\n email_id: res?.data?.email_id,\r\n };\r\n\r\n dispatch(updateUserData(newUserData));\r\n localStorage.setItem(\"user_data\", JSON.stringify(newUserData));\r\n }\r\n })\r\n .catch((err) => { });\r\n };\r\n\r\n const getAccountData = useCallback(async () => {\r\n try {\r\n const response = await commanService.getApi(\"user\", `accounts`);\r\n\r\n const workSpaceName = userData?.company_name;\r\n\r\n if (!workSpaceName) {\r\n const newUserData = {\r\n ...userData,\r\n company_name: response?.data?.data[0]?.account_name,\r\n };\r\n\r\n dispatch(updateUserData(newUserData));\r\n localStorage.setItem(\"user_data\", JSON.stringify(newUserData));\r\n }\r\n // var finalArray = [];\r\n // for (let c = 0; c < response.data.data.length; c++) {\r\n // if (userData?.account_id != response.data.data[c]['account_id']) {\r\n // finalArray.push(response.data.data[c])\r\n // }\r\n // }\r\n setAccountArray(response.data.data);\r\n } catch (error) { }\r\n }, [userData]);\r\n\r\n useEffect(() => {\r\n let subscriptionPaths = [\r\n \"/payment-details\",\r\n \"/confirm-order\",\r\n \"/pricing-plan\",\r\n \"/invite-user-workspace\",\r\n ];\r\n if (location.pathname === \"/\") {\r\n localStorage.removeItem(\"IsSignUPForPricing\");\r\n }\r\n\r\n if (!subscriptionPaths.includes(location.pathname)) {\r\n localStorage.removeItem(\"selectedPlanDetails\");\r\n localStorage.removeItem(\"additionalUserData\");\r\n localStorage.removeItem(\"add_ai_credits\");\r\n localStorage.removeItem(\"isNewWorkspace\");\r\n localStorage.removeItem(\"create_new_workspace_data\");\r\n localStorage.removeItem(\"user_invite_data\");\r\n localStorage.removeItem(\"isUpgrading\");\r\n localStorage.removeItem(\"isPromoCode\");\r\n localStorage.removeItem(\"isHaveNotWorkspace\");\r\n }\r\n }, [location]);\r\n\r\n const email = userData?.email_id;\r\n\r\n const firstName = userData?.first_name\r\n ? userData?.first_name?.[0].toUpperCase() +\r\n userData?.first_name.slice(1).toLowerCase()\r\n : \"\";\r\n const lastName = userData?.last_name;\r\n const firstLetter = lastName ? lastName[0].toUpperCase() : \"\";\r\n\r\n const getCurrentSubscription = async () => {\r\n try {\r\n const response = await commanService.getApi(\r\n \"user/v1\",\r\n `subscription/current`\r\n );\r\n let subscriptionTemp = response.data.data;\r\n localStorage.setItem(\r\n \"currentSubscription\",\r\n JSON.stringify(response.data.data)\r\n );\r\n dispatch(updateCurrentSubscription(subscriptionTemp));\r\n dispatch(\r\n setEntireSubscriptionSliceData({\r\n newAddedLicense: 0,\r\n currentActiveLicense: subscriptionTemp?.featureLimitAndUsed?.find(\r\n (item) => item.feature === \"user\"\r\n )?.limit,\r\n currentActivePlane: subscriptionTemp?.subscriptionData,\r\n usersSelectedPlan: null,\r\n isMonthly: true,\r\n selectedCategory: \"Bundle\",\r\n })\r\n );\r\n } catch (error) { }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isCreatingNewWorkSpace) {\r\n getAccountData();\r\n getCurrentSubscription();\r\n fetchUserInformation();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n const user_data = localStorage.getItem(\"user_data\");\r\n if (!user_data || user_data === \"null\" || user_data === null) {\r\n if (\r\n !location.pathname.includes(\"set-password\") ||\r\n !location.pathname.includes(\"accept-invitation\")\r\n ) {\r\n const searchParams = new URLSearchParams(window.location?.search);\r\n const t_id = searchParams.get(\"t_id\");\r\n\r\n // if (pathname.includes(\"templates\")) {\r\n if (t_id) {\r\n localStorage.setItem(\"redirectPath\", `/?t_id=${t_id}`);\r\n setTimeout(() => {\r\n navigate(\"/login\");\r\n });\r\n } else {\r\n navigate(\"/login\");\r\n }\r\n logoutChannel.postMessage(\"logout\");\r\n }\r\n }\r\n }, [dispatch, location.pathname, navigate]);\r\n\r\n const handleLogout = () => {\r\n logoutChannel.postMessage(\"logout\");\r\n localStorage.clear();\r\n resetAllQueryCache(dispatch);\r\n navigate(\"/login\");\r\n };\r\n\r\n const handleCloseSupport = () => setShowSupport(false);\r\n\r\n async function handleArchitectureResponse() {\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n const projectRes = a_id\r\n ? \"\"\r\n : await commanService.getApi(\r\n \"drawboard/v1\",\r\n `projects/architectures`,\r\n { project_id: architectureData?.project_id || \"\" }\r\n );\r\n setBoardData({\r\n ...architectureData,\r\n project_name: a_id ? \"\" : projectRes.data.data.project_name,\r\n type: \"chart\",\r\n // team_name: teamRes.data.data.teamInfo.team_name,\r\n });\r\n setBoardName(architectureData?.architecture_name);\r\n }\r\n\r\n useEffect(() => {\r\n if (architectureData?.architecture_id) {\r\n handleArchitectureResponse();\r\n }\r\n }, [architectureData?.architecture_id]);\r\n\r\n const handleFInalDelete = async () => {\r\n try {\r\n const search = new URLSearchParams(location.search);\r\n const a_id = search.get(\"a_id\");\r\n await commanService.deleteApi(\r\n \"drawboard/v1\",\r\n `architectures/${boardData?.architecture_id}${a_id !== null && a_id !== undefined && typeof a_id === \"string\"\r\n ? `?a_id=${a_id}`\r\n : \"\"\r\n }`,\r\n );\r\n updateBoardCountInCurrentSubscription({\r\n dispatch,\r\n currentSubscriptionData,\r\n isMinus: false,\r\n });\r\n navigate(-1);\r\n setShowDeleteBoard(false);\r\n } catch (error) {\r\n if (error.response.status !== 401) {\r\n if (error.response.status < 500) {\r\n dispatch(\r\n warningToast({\r\n message:\r\n error.response?.data?.message ||\r\n error.response.data?.error[0] ||\r\n error.message,\r\n })\r\n );\r\n } else {\r\n dispatch(\r\n errorToast({\r\n message: \"Oops! Something went wrong\",\r\n })\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n const profileDropDown = [\r\n {\r\n label: \"Profile\",\r\n Icon: IcUserCircleOutlined2,\r\n onClick: () => {\r\n navigate(\"/user/profile\");\r\n handleCloseProfileMenu();\r\n },\r\n matchingPaths: [\"/user/profile\"],\r\n },\r\n // ...(currentSubscriptionData?.subscriptionData?.package !== \"Free\" &&\r\n // currentSubscriptionData?.subscriptionData.is_trial !== true\r\n // ? [\r\n // {\r\n // label: \"Upgrade\",\r\n // Icon: IcUpArrowCircleOutlined,\r\n // onClick: () => {\r\n // setShowPlans(!showPlans);\r\n // handleCloseProfileMenu();\r\n // },\r\n // matchingPaths: [],\r\n // },\r\n ...(isAccountOwner === \"Account Owner\"\r\n ? [\r\n {\r\n label: \"Upgrade\",\r\n Icon: IcUpArrowCircleOutlined,\r\n onClick: () => {\r\n setShowPlans(!showPlans);\r\n handleCloseProfileMenu();\r\n },\r\n matchingPaths: [],\r\n },\r\n ]\r\n : []),\r\n // ]\r\n // : []),\r\n {\r\n label: \"Setting\",\r\n Icon: IcSettingOutlinedNew,\r\n onClick: () => {\r\n navigate(\"/user/workspace-profile\");\r\n handleCloseProfileMenu();\r\n },\r\n matchingPaths: [\"/user/workspace-profile\"],\r\n },\r\n {\r\n label: \"Logout\",\r\n Icon: IcSignOutOutlined,\r\n matchingPaths: [],\r\n onClick: () => {\r\n handleCloseProfileMenu();\r\n handleLogout();\r\n },\r\n },\r\n ];\r\n\r\n const helpDropdown = [\r\n {\r\n Icon: IcBoostOutlined,\r\n name: \"Getting Started guide\",\r\n onClick: () => {\r\n // window.open(`https://cloudairy.com/contactus?from=chart`, \"_blank\");\r\n // setShowContactUs(true);\r\n },\r\n },\r\n {\r\n Icon: IcSupport,\r\n name: \"Help center\",\r\n onClick: () => setShowSupport(true),\r\n },\r\n {\r\n Icon: IcFeedback,\r\n name: \"Send feedback\",\r\n onClick: () => setShowFeedback(true),\r\n },\r\n {\r\n Icon: IcKeyboardShortcuts,\r\n name: \"Keyboard shortcuts\",\r\n onClick: () => {\r\n // const email = \"support@cloudairy.com\";\r\n // const subject = \"\";\r\n // const body = \"\";\r\n // const mailtoLink = `https://mail.google.com/mail/?view=cm&fs=1&to=${email}&su=${subject}&body=${body}`;\r\n // window.open(mailtoLink, \"_blank\");\r\n },\r\n },\r\n ];\r\n\r\n const handleClickProfileMenu = (event, data) => {\r\n var finalArray = [];\r\n for (let c = 0; c < accountArray.length; c++) {\r\n if (userData?.account_id !== accountArray[c][\"account_id\"]) {\r\n finalArray.push(accountArray[c]);\r\n }\r\n }\r\n // setAccountData(finalArray);\r\n setAnchorEl2(event.currentTarget);\r\n };\r\n\r\n const handleCloseProfileMenu = () => {\r\n setAnchorEl2(null);\r\n };\r\n\r\n // const handleToggleTooltip = (e) => {\r\n // e.stopPropagation();\r\n // setTooltipOpen((prev) => !prev);\r\n // };\r\n\r\n // const handleCloseTooltip = () => {\r\n // setTooltipOpen(false);\r\n // };\r\n // const handleAddAiCredits = () => {\r\n // localStorage.setItem(\"add_ai_credits\", true);\r\n // navigate(\"/payment-details\");\r\n // };\r\n // const handleChange = (event, newValue) => {\r\n // setValue(newValue);\r\n // };\r\n\r\n // function a11yProps(index) {\r\n // return {\r\n // id: `simple-tab-${index}`,\r\n // \"aria-controls\": `simple-tabpanel-${index}`,\r\n // };\r\n // }\r\n\r\n // const CustomTabPanel = ({ children, value, index, ...other }) => {\r\n // return (\r\n //