{"version":3,"file":"static/js/main-43dd7041.169a9b25.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\nimport { setShowShapeLimit } from \"../Redux/drawboard\";\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 currentSubscriptionLocal = localStorage.getItem(\r\n \"currentSubscription\"\r\n );\r\n\r\n if (\r\n currentSubscriptionLocal &&\r\n currentSubscriptionLocal !== undefined &&\r\n currentSubscriptionLocal !== \"null\" &&\r\n currentSubscriptionLocal !== null\r\n ) {\r\n const currentSubscription = JSON.parse(currentSubscriptionLocal);\r\n\r\n if (currentSubscription?.subscriptionData?.package) {\r\n if (\r\n currentSubscription?.subscriptionData?.package === \"Free\" &&\r\n json?.architecture_json?.nodes?.length >= 30\r\n ) {\r\n if (!isDeleted) {\r\n dispatch(setShowShapeLimit(true));\r\n return;\r\n }\r\n } else {\r\n const architectureJsonLocal =\r\n localStorage.getItem(\"architectureJson\");\r\n if (\r\n architectureJsonLocal &&\r\n architectureJsonLocal !== undefined &&\r\n architectureJsonLocal !== \"null\" &&\r\n architectureJsonLocal !== null\r\n ) {\r\n const architectureJson = JSON.parse(architectureJsonLocal);\r\n if (\r\n currentSubscription?.subscriptionData?.package === \"Free\" &&\r\n architectureJson?.architecture_json?.nodes?.length >= 30\r\n ) {\r\n if (!isDeleted) {\r\n dispatch(setShowShapeLimit(true));\r\n return;\r\n }\r\n }\r\n } else {\r\n if (!isDeleted) {\r\n dispatch(setShowShapeLimit(true));\r\n return;\r\n }\r\n }\r\n }\r\n } else {\r\n if (!isDeleted) {\r\n dispatch(setShowShapeLimit(true));\r\n return;\r\n }\r\n }\r\n }\r\n\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}${\r\n 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},${\r\n 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 = (\r\n oldPosition = { x: 0, y: 0 },\r\n newPosition = { x: 0, y: 0 },\r\n node\r\n) => {\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 user_id,\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 userData,\r\n userPopup,\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 user_id,\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 userData,\r\n userPopup,\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 userData,\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 user_id: sessionData?.user_id,\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 userData: sessionData?.userData,\r\n userPopup: sessionData?.userPopup,\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/${\r\n 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 =\r\n Math.abs(node1Width - node2Width) > 3 &&\r\n 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 getUserFirstAndLastNameFromFullName = (fullName = \"\") => {\r\n const [dataFirstName, ...dataLastName] = fullName?.split(\" \");\r\n const lastName = dataLastName.join(\" \");\r\n\r\n return [dataFirstName, lastName];\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 ${\r\n 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 ${\r\n 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 })\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 = 0;\r\n let g = 0;\r\n let b = 0;\r\n if (rgbParts) {\r\n r = parseInt(rgbParts[0], 10); // Convert string to integer\r\n g = parseInt(rgbParts[1], 10);\r\n 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 }\r\n return rgbParts ? \"rgb(\" + r + \",\" + g + \",\" + b + \")\" : fill;\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, useMemo, 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 IcLeftSingleArrow,\r\n IcSettingOutlinedNew,\r\n IcSignOutOutlined,\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 getUserFirstAndLastNameFromFullName,\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 activeTeam = useSelector((state) => state?.sidebar?.currentTeam);\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 [first_name, last_name] = useMemo(() => {\r\n return getUserFirstAndLastNameFromFullName(\r\n getAccountDetail?.data?.user?.name\r\n );\r\n }, [getAccountDetail?.data?.user?.name]);\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 ...(userData?.role\r\n ? {}\r\n : {\r\n role:\r\n res.data?.role === \"Member\"\r\n ? \"Editor\"\r\n : res.data?.role === \"Guest\"\r\n ? \"Viewer\"\r\n : \"Account Owner\",\r\n }),\r\n };\r\n dispatch(updateUserData(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 }\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 const matchingPath = subscriptionPaths?.find((item) =>\r\n location?.pathname?.includes(item)\r\n );\r\n if (!matchingPath) {\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 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(\"drawboard/v1\", `projects/architectures`, {\r\n project_id: architectureData?.project_id || \"\",\r\n team_id: activeTeam,\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}${\r\n 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 //