{\r\n if (isNavigateOnClose) {\r\n navigate(-1);\r\n } else {\r\n setShowPlans(false);\r\n setOpen(false);\r\n }\r\n }}\r\n handleClose={handleChoosePlanClose}\r\n />\r\n ) : (\r\n {\r\n // isNavigateOnClose && navigate(-1);\r\n setOpen && setOpen(false);\r\n handleClose && handleClose();\r\n }}\r\n >\r\n \r\n
\r\n \r\n {\r\n isNavigateOnClose && navigate(-1);\r\n setOpen && setOpen(false);\r\n handleClose && handleClose();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {subtitle}\r\n \r\n \r\n {\r\n setShowPlans(true);\r\n // setOpen(false);\r\n }}\r\n >\r\n \r\n Upgrade Now\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 UpgradeModel;\r\n","import {\r\n Box,\r\n Grid,\r\n Popover,\r\n Stack,\r\n Typography,\r\n useMediaQuery,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport {\r\n IcFont,\r\n IcPlus,\r\n IcTrash,\r\n IcUploadFile,\r\n} from \"../../../assets/icon-components\";\r\nimport BtnGradient from \"../../../common-components/buttons/BtnGradient\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\nimport { fontSizes } from \"../../../Utils/style/font/fontsizes\";\r\nimport CommonSwitch from \"../../Input/CommonSwitch\";\r\nimport DeleteBrandColor from \"../pages/profile/components/DeleteBrandColor\";\r\nimport DeleteFont from \"../pages/profile/components/DeleteFont\";\r\nimport LargeSimpleInput from \"../../../common-components/LargeSimpleInput\";\r\nimport { fontWeight } from \"../../../Utils/style/weight/fontWeight\";\r\nimport {\r\n useGetBrandCenterMutation,\r\n useUpdateBrandCenterMutation,\r\n} from \"../../../Redux/api/brandCenterApi\";\r\nimport commanService from \"../../../CommanFunctions/commanService\";\r\nimport AbsoluteLoader from \"../../../CommanUI/Loader/AbsoluteLoader\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { subscriptionDataSelect } from \"../../../Redux/common-reducer\";\r\nimport UpgradeModel from \"./UpgradeModel\";\r\nimport CommonDivider from \"../../../common-components/CommonDivider\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { successToast } from \"../../../Redux/toastSlice\";\r\n\r\nfunction UserSectionBrandCenter() {\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n const matchDown950 = useMediaQuery(theme.breakpoints.down(950));\r\n const [hexCode, setHexCode] = useState(\"\");\r\n const [colorName, setColorName] = useState(\"\");\r\n const [colors, setColors] = useState([]);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [regularFont, setRegularFont] = useState(false);\r\n const [regularFontFile, setRegularFontFile] = useState(null);\r\n const [regularFontName, setRegularFontName] = useState(\"\");\r\n const [fontTypeToDelete, setFontTypeToDelete] = useState(null);\r\n const [boldFont, setBoldFont] = useState(false);\r\n const [boldFontFile, setBoldFontFile] = useState(null);\r\n const [boldFontName, setBoldFontName] = useState(\"\");\r\n const [triggerDelete, setTriggerDelete] = useState(false);\r\n const [italicFont, setItalicFont] = useState(false);\r\n const [italicFontFile, setItalicFontFile] = useState(null);\r\n const [italicFontName, setItalicFontName] = useState(\"\");\r\n const [triggerSubmit, setTriggerSubmit] = useState(false);\r\n const [boldItalicFont, setBoldItalicFont] = useState(false);\r\n const [boldItalicFontFile, setBoldItalicFontFile] = useState(null);\r\n const [boldItalicFontName, setBoldItalicFontName] = useState(\"\");\r\n const [selectedIndex, setSelectedIndex] = useState(null);\r\n const [showDeleteBrand, setShowDeleteBrand] = useState(false);\r\n const [showDeleteFont, setShowDeleteFont] = useState(false);\r\n const [isSwitchOn, setIsSwitchOn] = useState(false);\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(1270));\r\n const [submitOnce, setSubmitOnce] = useState(false);\r\n const { userData } = useSelector((state) => state.common);\r\n const currentSubscription = subscriptionDataSelect();\r\n\r\n const [\r\n getBrandCenter,\r\n {\r\n data: brandCenter,\r\n isLoading: brandDataLoading,\r\n isFetching: brandDataFetching,\r\n // } = useGetBrandCenterQuery();\r\n },\r\n ] = useGetBrandCenterMutation();\r\n const [updateBrandCenter, { isLoading: updatingInProgress }] =\r\n useUpdateBrandCenterMutation();\r\n const [hover, setHover] = useState({\r\n Regular: false,\r\n Bold: false,\r\n Italic: false,\r\n BoldItalic: false,\r\n });\r\n const [hoverPlusIcon, setHoverPlusIcon] = useState(false);\r\n const handleMouseEnter = (type) => {\r\n setHover((prev) => ({ ...prev, [type]: true }));\r\n };\r\n const handleMouseLeave = (type) => {\r\n setHover((prev) => ({ ...prev, [type]: false }));\r\n };\r\n\r\n useEffect(() => {\r\n currentSubscription?.package !== \"Free\" && getBrandCenter();\r\n }, []);\r\n\r\n const resetData = () => {\r\n if (brandCenter?.data?.brand_center?.colour) {\r\n const defaultColors = brandCenter?.data?.brand_center?.colour?.map(\r\n (color) => ({\r\n hexCode: color.color_code,\r\n colorName: color.color_name,\r\n })\r\n );\r\n setColors(defaultColors);\r\n }\r\n setIsSwitchOn(brandCenter?.data?.brand_center?.only_admin || false);\r\n\r\n localStorage.setItem(\r\n \"brandCenterAdministrators\",\r\n brandCenter?.data?.brand_center?.only_admin ?? false\r\n );\r\n setRegularFontFile(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Regular\"\r\n )?.font_url\r\n );\r\n setRegularFontName(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Regular\"\r\n )?.font_name\r\n );\r\n setBoldFontFile(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Bold\"\r\n )?.font_url\r\n );\r\n setBoldFontName(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Bold\"\r\n )?.font_name\r\n );\r\n setItalicFontFile(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Italic\"\r\n )?.font_url\r\n );\r\n setItalicFontName(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"Italic\"\r\n )?.font_name\r\n );\r\n setBoldItalicFontFile(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"BoldItalic\"\r\n )?.font_url\r\n );\r\n setBoldItalicFontName(\r\n brandCenter?.data?.brand_center?.fonts?.find(\r\n (font) => font.font_type === \"BoldItalic\"\r\n )?.font_name\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n resetData();\r\n }, [brandCenter]);\r\n\r\n const handleSwitchChange = async (event) => {\r\n const check = event.target.checked;\r\n // setIsSwitchOn(event.target.checked);\r\n const payload = {\r\n brand_center: {\r\n colour: [\r\n ...colors.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n })),\r\n ],\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: check,\r\n },\r\n };\r\n\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n getBrandCenter();\r\n });\r\n } catch (error) {}\r\n };\r\n\r\n const handleFileSubmit = async () => {\r\n const payload = {\r\n brand_center: {\r\n colour: [\r\n ...colors.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n })),\r\n ],\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: isSwitchOn,\r\n },\r\n };\r\n\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n getBrandCenter();\r\n });\r\n } catch (error) {\r\n console.error(\"API Error:\", error);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (triggerSubmit) {\r\n if (\r\n (regularFontFile && regularFontName) ||\r\n (boldFontFile && boldFontName) ||\r\n (italicFontFile && italicFontName) ||\r\n (boldItalicFontFile && boldItalicFontName)\r\n ) {\r\n handleFileSubmit();\r\n }\r\n setTriggerSubmit(false);\r\n }\r\n }, [\r\n triggerSubmit,\r\n regularFontFile,\r\n regularFontName,\r\n boldFontFile,\r\n boldFontName,\r\n italicFontFile,\r\n italicFontName,\r\n boldItalicFontFile,\r\n boldItalicFontName,\r\n ]);\r\n useEffect(() => {\r\n if (triggerDelete) {\r\n const payload = {\r\n brand_center: {\r\n colour: colors.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n })),\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: isSwitchOn,\r\n },\r\n };\r\n\r\n const performApiCall = async () => {\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n getBrandCenter();\r\n });\r\n setShowDeleteFont(false);\r\n } catch (error) {\r\n console.error(\"API Error after font deletion:\", error);\r\n }\r\n };\r\n\r\n performApiCall();\r\n setTriggerDelete(false);\r\n }\r\n }, [\r\n triggerDelete,\r\n regularFontFile,\r\n regularFontName,\r\n boldFontFile,\r\n boldFontName,\r\n italicFontFile,\r\n italicFontName,\r\n boldItalicFontFile,\r\n boldItalicFontName,\r\n isSwitchOn,\r\n colors,\r\n ]);\r\n const handleFileChange = async (event, fontType) => {\r\n const file = event.target.files[0];\r\n if (!file) {\r\n console.error(\"No file selected.\");\r\n return;\r\n }\r\n\r\n const uploadFont = async () => {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const response = await commanService.uploadApi(\r\n \"drawboard\",\r\n `upload/files`,\r\n formData\r\n );\r\n return response.data.data[0]?.location;\r\n } catch (error) {\r\n console.error(\"Font upload failed:\", error);\r\n return null;\r\n }\r\n };\r\n\r\n const validExtensions = [\r\n \".woff\",\r\n \".woff2\",\r\n \".ttf\",\r\n \".otf\",\r\n \".eot\",\r\n \".pfb\",\r\n \".pfm\",\r\n \".otc\",\r\n \".ttc\",\r\n ];\r\n const fileExtension = file.name.slice(\r\n ((file.name.lastIndexOf(\".\") - 1) >>> 0) + 2\r\n );\r\n\r\n if (!validExtensions.includes(`.${fileExtension}`)) {\r\n console.error(\r\n \"Invalid file type. Only .woff and .woff2 files are allowed.\"\r\n );\r\n return;\r\n }\r\n\r\n const fontUrl = await uploadFont();\r\n if (!fontUrl) {\r\n console.error(\"Font URL could not be retrieved.\");\r\n return;\r\n }\r\n\r\n if (fontType === \"Regular\") {\r\n setRegularFont(true);\r\n setRegularFontFile(fontUrl);\r\n setRegularFontName(file.name);\r\n } else if (fontType === \"Bold\") {\r\n setBoldFont(true);\r\n setBoldFontFile(fontUrl);\r\n setBoldFontName(file.name);\r\n } else if (fontType === \"Italic\") {\r\n setItalicFont(true);\r\n setItalicFontFile(fontUrl);\r\n setItalicFontName(file.name);\r\n } else if (fontType === \"BoldItalic\") {\r\n setBoldItalicFont(true);\r\n setBoldItalicFontFile(fontUrl);\r\n setBoldItalicFontName(file.name);\r\n } else {\r\n console.error(\"Unknown font type.\");\r\n return;\r\n }\r\n setTriggerSubmit(true);\r\n };\r\n\r\n const handleUpdateColor = async () => {\r\n if (isValidHex(hexCode) && colorName) {\r\n if (selectedIndex !== null) {\r\n const updatedColors = [...colors];\r\n updatedColors[selectedIndex] = { hexCode, colorName };\r\n setColors(updatedColors);\r\n\r\n let payload = {\r\n brand_center: {\r\n colour: updatedColors.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n })),\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: isSwitchOn,\r\n },\r\n };\r\n\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n getBrandCenter();\r\n handleClose();\r\n });\r\n } catch (error) {\r\n console.error(\"API Error:\", error);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleAddColor = async () => {\r\n setSubmitOnce(true);\r\n if (isValidHex(hexCode) && colorName && !colorValidation) {\r\n let payload = {\r\n brand_center: {\r\n colour: [\r\n ...(Array.isArray(colors) && colors.length > 0\r\n ? colors.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n }))\r\n : []),\r\n { color_name: colorName, color_code: hexCode },\r\n ],\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: isSwitchOn,\r\n },\r\n };\r\n\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n setSubmitOnce(true);\r\n if (selectedIndex !== null) {\r\n const updatedColors = [...colors];\r\n updatedColors[selectedIndex] = { hexCode, colorName };\r\n setColors(updatedColors);\r\n } else {\r\n setColors([...colors, { hexCode, colorName }]);\r\n }\r\n handleClose();\r\n\r\n getBrandCenter();\r\n });\r\n } catch (error) {\r\n console.error(\"API Error:\", error);\r\n }\r\n }\r\n };\r\n const handleToggleUploadRemove = (event, fontType) => {\r\n setFontTypeToDelete(fontType);\r\n setShowDeleteFont(true);\r\n };\r\n\r\n const handleValidationForAddColor = (colorCode) => {\r\n return colors.some((color) => color.hexCode === colorCode);\r\n };\r\n\r\n const handleValidationForAddColorName = (colorCode) => {\r\n return colors.some((color) => color.colorName === colorCode);\r\n };\r\n\r\n const colorValidation = handleValidationForAddColor(hexCode);\r\n const colorNameValidation = handleValidationForAddColorName(colorName);\r\n\r\n const handleEditColorValidation = () => {\r\n return (\r\n colors.filter((color, index) => {\r\n return index !== selectedIndex && color.hexCode === hexCode;\r\n }).length > 0\r\n );\r\n };\r\n\r\n const handleEditColorNameValidation = () => {\r\n return (\r\n colors.filter((color, index) => {\r\n return index !== selectedIndex && color.colorName === colorName;\r\n }).length > 0\r\n );\r\n };\r\n\r\n const editValidation = handleEditColorValidation();\r\n const editColoNameValidation = handleEditColorNameValidation();\r\n\r\n const handleClickDeleteColor = async () => {\r\n setShowDeleteBrand(false);\r\n setAnchorEl(null);\r\n if (selectedIndex !== null) {\r\n const updatedColors = colors.filter(\r\n (_, index) => index !== selectedIndex\r\n );\r\n setColors(updatedColors);\r\n let payload = {\r\n brand_center: {\r\n colour: updatedColors?.map((color) => ({\r\n color_name: color.colorName,\r\n color_code: color.hexCode,\r\n })),\r\n fonts: [\r\n ...(regularFontFile && regularFontName\r\n ? [\r\n {\r\n font_url: regularFontFile,\r\n font_name: regularFontName,\r\n font_type: \"Regular\",\r\n },\r\n ]\r\n : []),\r\n ...(boldFontFile && boldFontName\r\n ? [\r\n {\r\n font_url: boldFontFile,\r\n font_name: boldFontName,\r\n font_type: \"Bold\",\r\n },\r\n ]\r\n : []),\r\n ...(italicFontFile && italicFontName\r\n ? [\r\n {\r\n font_url: italicFontFile,\r\n font_name: italicFontName,\r\n font_type: \"Italic\",\r\n },\r\n ]\r\n : []),\r\n ...(boldItalicFontFile && boldItalicFontName\r\n ? [\r\n {\r\n font_url: boldItalicFontFile,\r\n font_name: boldItalicFontName,\r\n font_type: \"BoldItalic\",\r\n },\r\n ]\r\n : []),\r\n ],\r\n only_admin: isSwitchOn,\r\n },\r\n };\r\n\r\n try {\r\n updateBrandCenter(payload).then(() => {\r\n dispatch(\r\n successToast({\r\n message: \"Color deleted successfully\",\r\n })\r\n );\r\n getBrandCenter();\r\n handleClose();\r\n });\r\n } catch (error) {\r\n console.error(\"API Error after deletion:\", error);\r\n }\r\n }\r\n };\r\n\r\n const handleClickDeleteFont = async () => {\r\n if (!fontTypeToDelete) {\r\n console.error(\"Font type not specified for deletion.\");\r\n return;\r\n }\r\n\r\n if (fontTypeToDelete === \"Regular\") {\r\n setRegularFontFile(null);\r\n setRegularFontName(\"\");\r\n } else if (fontTypeToDelete === \"Bold\") {\r\n setBoldFontFile(null);\r\n setBoldFontName(\"\");\r\n } else if (fontTypeToDelete === \"Italic\") {\r\n setItalicFontFile(null);\r\n setItalicFontName(\"\");\r\n } else if (fontTypeToDelete === \"BoldItalic\") {\r\n setBoldItalicFontFile(null);\r\n setBoldItalicFontName(\"\");\r\n } else {\r\n console.error(\"Unknown font type.\");\r\n return;\r\n }\r\n setTriggerDelete(true);\r\n };\r\n\r\n const handleClick = (event, index) => {\r\n setAnchorEl(event.currentTarget);\r\n if (index !== undefined) {\r\n setSelectedIndex(index);\r\n setHexCode(colors[index].hexCode);\r\n setColorName(colors[index].colorName);\r\n } else {\r\n setSelectedIndex(null);\r\n setHexCode(\"\");\r\n setColorName(\"\");\r\n }\r\n };\r\n\r\n const handleHexCodeChange = (e) => {\r\n const newHexCode = e.target.value;\r\n setHexCode(newHexCode);\r\n\r\n if (\r\n selectedIndex !== null &&\r\n (submitOnce ? isValidHex(newHexCode) : true)\r\n ) {\r\n const updatedColors = [...colors];\r\n updatedColors[selectedIndex].hexCode = newHexCode;\r\n setColors(updatedColors);\r\n }\r\n };\r\n const handleColorNameChange = (e) => {\r\n const newColorName = e.target.value;\r\n setColorName(newColorName);\r\n\r\n if (selectedIndex !== null) {\r\n const updatedColors = [...colors];\r\n updatedColors[selectedIndex].colorName = newColorName;\r\n setColors(updatedColors);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n resetData();\r\n };\r\n\r\n const isValidHex = (value) => {\r\n return /^([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(value);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? \"simple-popover\" : undefined;\r\n // if (currentSubscription?.package === \"Free\") {\r\n // return (\r\n // \r\n // \r\n // \r\n // );\r\n // }\r\n\r\n return (\r\n \r\n {(brandDataLoading || brandDataFetching) && }\r\n \r\n \r\n {/* \r\n \r\n Consistency\r\n \r\n \r\n \r\n \r\n Maintain brand consistency by providing all teams with access to\r\n your brand's colors and fonts.\r\n \r\n \r\n \r\n \r\n \r\n Any adjustments you make here will immediately update the color\r\n and font choices for all team members on their boards.\r\n \r\n \r\n */}\r\n \r\n Customize and manage your workspace's visual identity. The Brand\r\n Center helps you maintain consistency across all your projects by\r\n providing access to pre-defined fonts and color styles.\r\n \r\n\r\n \r\n\r\n {(userData?.is_admin === true ||\r\n userData?.is_admin === \"true\" ||\r\n userData?.role === \"Account Owner\") && (\r\n <>\r\n \r\n \r\n Only administrators have the authority to establish and modify\r\n brand center assets for the entire organization.\r\n \r\n \r\n \r\n\r\n \r\n >\r\n )}\r\n\r\n \r\n \r\n Brand colors\r\n \r\n \r\n Add personality to your workspace with{\" \"}\r\n \r\n 24 different color styles.\r\n \r\n These colors can be used for text, shapes, backgrounds, and more,\r\n helping you align projects with your brand.\r\n \r\n\r\n \r\n {colors.map((color, index) => (\r\n \r\n {\r\n handleClick(e, index);\r\n }}\r\n >\r\n \r\n Edit\r\n \r\n \r\n \r\n ))}\r\n\r\n = 24 ? 0.5 : 1,\r\n transition: \"opacity 0.3s ease\",\r\n \"&:hover\": {\r\n background: color.primaryColor,\r\n borderRadius: \"10px\",\r\n },\r\n }}\r\n onClick={colors.length < 24 ? handleClick : null}\r\n onMouseEnter={() => setHoverPlusIcon(true)}\r\n onMouseLeave={() => setHoverPlusIcon(false)}\r\n >\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n HEX Code\r\n \r\n \r\n \r\n \r\n \r\n \r\n // \r\n // \r\n // }\r\n variant=\"outlined\"\r\n name=\"hexCode\"\r\n value={hexCode}\r\n onChange={(e) => {\r\n const newValue = e.target.value;\r\n if (newValue.length <= 6) {\r\n handleHexCodeChange(e);\r\n }\r\n }}\r\n errorMessage={\r\n submitOnce && !isValidHex(hexCode) && hexCode\r\n ? \"Invalid HEX Code\"\r\n : colorValidation && editValidation\r\n ? \"Already added a color\"\r\n : \"\"\r\n }\r\n startAdornment={\r\n \r\n #\r\n \r\n }\r\n onKeyPress={(e) => {\r\n if (\r\n hexCode.length >= 6 &&\r\n !e.ctrlKey &&\r\n !e.metaKey &&\r\n !e.key.match(/Backspace|Delete/)\r\n ) {\r\n e.preventDefault();\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n Color Name\r\n \r\n \r\n \r\n \r\n\r\n {selectedIndex === null && (\r\n \r\n Add\r\n \r\n )}\r\n\r\n {selectedIndex !== null && (\r\n \r\n \r\n Update\r\n \r\n {\r\n setShowDeleteBrand(true);\r\n }}\r\n btnColor=\"white\"\r\n sx={{\r\n color: color.errorColor,\r\n fontWeight: \"600\",\r\n minWidth: \"40px\",\r\n fontSize: {\r\n xs: fontSizes.fontSize13,\r\n md: fontSizes.fontSize14,\r\n },\r\n borderRadius: \"8px\",\r\n background: \"#FFFFFF\",\r\n border: \"1px solid #E1E1E1\",\r\n \"&:hover\": {\r\n backgroundColor: \"#FF503029\",\r\n border: \"1px solid #FF503029\",\r\n\r\n \"& path\": {\r\n stroke: \"#FF5030\",\r\n },\r\n },\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n setShowDeleteBrand(false)}\r\n handleClickDelete={handleClickDeleteColor}\r\n hexCode={hexCode}\r\n colorName={colorName}\r\n />\r\n\r\n setShowDeleteFont(false)}\r\n handleClickDelete={handleClickDeleteFont}\r\n open={showDeleteFont}\r\n fontTypeToDelete={fontTypeToDelete}\r\n regularFontFile={regularFontFile}\r\n regularFontName={regularFontName}\r\n boldFontFile={boldFontFile}\r\n boldFontName={boldFontName}\r\n italicFontFile={italicFontFile}\r\n italicFontName={italicFontName}\r\n boldItalicFontName={boldItalicFontName}\r\n boldItalicFontFile={boldItalicFontFile}\r\n />\r\n\r\n \r\n \r\n \r\n Fonts\r\n \r\n \r\n {/* Upload up to 4 different styles for your brand's fonts. */}\r\n Choose from{\" \"}\r\n \r\n 4 different font styles\r\n {\" \"}\r\n to give your workspace a unique and professional look. Fonts can\r\n be applied to text across boards, diagrams, and notes.\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Regular Font\r\n \r\n \r\n {regularFontName || \"No file Uploaded\"}\r\n \r\n \r\n \r\n handleMouseEnter(\"Regular\")}\r\n onMouseLeave={() => handleMouseLeave(\"Regular\")}\r\n >\r\n {regularFontName ? (\r\n \r\n handleToggleUploadRemove(event, \"Regular\")\r\n }\r\n >\r\n Remove\r\n \r\n ) : (\r\n \r\n document.getElementById(\"regularFile\").click()\r\n }\r\n >\r\n \r\n handleFileChange(event, \"Regular\")\r\n }\r\n style={{ display: \"none\" }}\r\n />\r\n \r\n \r\n Upload\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 Bold font\r\n \r\n \r\n {boldFontName || \"No file Uploaded\"}\r\n \r\n \r\n \r\n handleMouseEnter(\"Bold\")}\r\n onMouseLeave={() => handleMouseLeave(\"Bold\")}\r\n >\r\n {boldFontName ? (\r\n \r\n handleToggleUploadRemove(event, \"Bold\")\r\n }\r\n >\r\n Remove\r\n \r\n ) : (\r\n \r\n document.getElementById(\"boldFile\").click()\r\n }\r\n >\r\n \r\n handleFileChange(event, \"Bold\")\r\n }\r\n style={{ display: \"none\" }}\r\n />\r\n \r\n \r\n Upload\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 Italic font\r\n \r\n \r\n {italicFontName || \"No file Uploaded\"}\r\n \r\n \r\n \r\n handleMouseEnter(\"Italic\")}\r\n onMouseLeave={() => handleMouseLeave(\"Italic\")}\r\n >\r\n {italicFontName ? (\r\n \r\n handleToggleUploadRemove(event, \"Italic\")\r\n }\r\n >\r\n Remove\r\n \r\n ) : (\r\n \r\n document.getElementById(\"italicFile\").click()\r\n }\r\n >\r\n \r\n handleFileChange(event, \"Italic\")\r\n }\r\n style={{ display: \"none\" }}\r\n />\r\n \r\n \r\n Upload\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 Bold italic Font\r\n \r\n \r\n {boldItalicFontName || \"No file Uploaded\"}\r\n \r\n \r\n \r\n handleMouseEnter(\"BoldItalic\")}\r\n onMouseLeave={() => handleMouseLeave(\"BoldItalic\")}\r\n >\r\n {boldItalicFontName ? (\r\n \r\n handleToggleUploadRemove(event, \"BoldItalic\")\r\n }\r\n >\r\n Remove\r\n \r\n ) : (\r\n \r\n document.getElementById(\"boldItalicFile\").click()\r\n }\r\n >\r\n \r\n handleFileChange(event, \"BoldItalic\")\r\n }\r\n style={{ display: \"none\" }}\r\n />\r\n \r\n \r\n Upload\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {currentSubscription?.package === \"Free\" && (\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 UserSectionBrandCenter;\r\n","import { Box } from \"@material-ui/core\";\r\nimport {\r\n FormControl,\r\n FormControlLabel,\r\n FormGroup,\r\n Radio,\r\n RadioGroup,\r\n Stack,\r\n Typography,\r\n useMediaQuery,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { IcUpgrade } from \"../../../assets/icon-components\";\r\nimport BtnGradient from \"../../../common-components/buttons/BtnGradient\";\r\nimport CustomAutoSelect from \"../../../common-components/CustomAutoSelect\";\r\nimport CommonSwitch from \"../../Input/CommonSwitch\";\r\nimport { useSelector } from \"react-redux\";\r\nimport {\r\n useGetPermissionQuery,\r\n useUpdatePermissionMutation,\r\n} from \"../../../Redux/api/permission\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { errorToast, successToast } from \"../../../Redux/toastSlice\";\r\nimport ChoosePlan from \"../../upgrade-plan/ChoosePlan\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\nimport { fontSizes } from \"../../../Utils/style/font/fontsizes\";\r\nimport { useGetTeamProfileByTeamQuery } from \"../../../Redux/api/teamsApi\";\r\nimport CommonDivider from \"../../../common-components/CommonDivider\";\r\n\r\nconst defaultSettingForBoard = [\r\n {\r\n label: \"Anyone in the team can view\",\r\n value: \"anyone_in_the_team_can_view\",\r\n },\r\n {\r\n label: \"Anyone in the team can edit\",\r\n value: \"anyone_in_the_team_can_edit\",\r\n },\r\n {\r\n label: \"Only board owners can access\",\r\n value: \"only_board_owner_can_access\",\r\n },\r\n];\r\n\r\nconst boardAndEdit = [\r\n {\r\n label: \"Anyone in the team can view\",\r\n value: \"anyone_in_the_team_can_view\",\r\n },\r\n {\r\n label: \"Only Space owners can access\",\r\n value: \"only_team_owner_can_access\",\r\n },\r\n];\r\n\r\nconst boardCopy = [\r\n { label: \"Team members\", value: \"team_members\" },\r\n { label: \"Board owners and co-owners\", value: \"board_owner\" },\r\n];\r\n\r\nfunction UserSectionPermissions() {\r\n const [sharingSetting, setSharingSetting] = useState({\r\n boardSharing: defaultSettingForBoard[0],\r\n editSharing: boardAndEdit[0],\r\n copySharing: boardCopy[0],\r\n });\r\n const [showPlans, setShowPlans] = useState(false);\r\n const { currentSubscriptionData } = useSelector((state) => state.common);\r\n\r\n const activeTeam = useSelector((state) => state?.sidebar?.currentTeam);\r\n const selectedTeam = sessionStorage.getItem(\"selectedTeam\");\r\n const { selectedTeamId, selectedTeamName } = selectedTeam\r\n ? JSON.parse(selectedTeam)\r\n : {};\r\n\r\n const { data: permission } = useGetPermissionQuery(\r\n selectedTeamId ?? activeTeam\r\n );\r\n const isProfessional =\r\n currentSubscriptionData?.subscriptionData?.package?.includes(\r\n \"Professional\"\r\n );\r\n const initialState = {\r\n enable_team_invite_link:\r\n permission?.data?.permission?.enable_team_invite_link,\r\n team_invite_admin_only:\r\n permission?.data?.permission?.team_invite_admin_only,\r\n ...(isProfessional && {\r\n copying_board_content:\r\n permission?.data?.permission?.copying_board_content,\r\n default_board_copying:\r\n permission?.data?.permission?.default_board_copying,\r\n default_setting_for_board_share:\r\n permission?.data?.permission?.default_setting_for_board_share,\r\n invite_to_board_and_edit_share_setting:\r\n permission?.data?.permission?.invite_to_board_and_edit_share_setting,\r\n }),\r\n };\r\n const [allState, setAllState] = useState(initialState);\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n const matchDown950 = useMediaQuery(theme.breakpoints.down(950));\r\n const { userData } = useSelector((state) => state.common);\r\n const isAccountOwner = userData?.role;\r\n const { data: selectedTeamInfo, refetch: teamIsFetching } =\r\n useGetTeamProfileByTeamQuery(selectedTeamId, { skip: !selectedTeamId });\r\n\r\n useEffect(() => {\r\n teamIsFetching();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (permission?.data?.permission) {\r\n const fetchedPermissions = permission.data.permission;\r\n setAllState({ ...allState, ...fetchedPermissions });\r\n setSharingSetting({\r\n boardSharing:\r\n defaultSettingForBoard.find(\r\n (item) =>\r\n item.value === fetchedPermissions.default_setting_for_board_share\r\n ) || defaultSettingForBoard[0],\r\n editSharing:\r\n boardAndEdit.find(\r\n (item) =>\r\n item.value ===\r\n fetchedPermissions.invite_to_board_and_edit_share_setting\r\n ) || boardAndEdit[0],\r\n copySharing:\r\n boardCopy.find(\r\n (item) => item.value === fetchedPermissions.default_board_copying\r\n ) || boardCopy[0],\r\n });\r\n }\r\n }, [permission]);\r\n var copyingBoardContentRadio =\r\n permission?.data?.permission?.copying_board_content === \"only_team_member\"\r\n ? \"only_team_member\"\r\n : \"team_members_and_user_outside_this_team\";\r\n\r\n const [updatePermission, { error: errorInUpdate, data: updateData }] =\r\n useUpdatePermissionMutation();\r\n const teamInvitationOnlyRadio = allState?.team_invite_admin_only\r\n ? \"admins\"\r\n : \"members\";\r\n useEffect(() => {\r\n if (errorInUpdate) {\r\n setAllState(initialState);\r\n }\r\n }, [updateData, errorInUpdate]);\r\n const updatePermissionsAPISelect = async (updatedSettings) => {\r\n try {\r\n const response = await updatePermission({\r\n teamId: selectedTeamId ?? activeTeam,\r\n data: {\r\n ...allState,\r\n default_setting_for_board_share: updatedSettings.boardSharing.value,\r\n invite_to_board_and_edit_share_setting:\r\n updatedSettings.editSharing.value,\r\n default_board_copying: updatedSettings.copySharing.value,\r\n },\r\n }).unwrap();\r\n\r\n response?.message &&\r\n dispatch(\r\n successToast({\r\n message: response?.message, // || \"Permissions updated successfully!\",\r\n })\r\n );\r\n } catch (error) {\r\n console.error(\"Error updating permissions:\", error);\r\n dispatch(\r\n errorToast({\r\n message: error?.data?.message || \"Failed to update permissions!\",\r\n })\r\n );\r\n }\r\n };\r\n const handleChange = async (event) => {\r\n const newIsChecked = event.target.checked;\r\n\r\n try {\r\n const response = await updatePermission({\r\n teamId: selectedTeamId ?? activeTeam,\r\n data: { ...allState, enable_team_invite_link: newIsChecked },\r\n }).unwrap();\r\n\r\n response?.message &&\r\n dispatch(\r\n successToast({\r\n message: response?.message, // || \"Permissions updated successfully!\",\r\n })\r\n );\r\n } catch (error) {\r\n console.error(\"Error updating permissions:\", error);\r\n dispatch(\r\n errorToast({\r\n message: error?.data?.message || \"Failed to update permissions!\",\r\n })\r\n );\r\n }\r\n };\r\n\r\n const handleChangeRadioTeam = async (event) => {\r\n const isAdminSelected = event.target.value === \"admins\";\r\n setAllState({ ...allState, team_invite_admin_only: isAdminSelected });\r\n try {\r\n const response = await updatePermission({\r\n teamId: selectedTeamId ?? activeTeam,\r\n data: { ...allState, team_invite_admin_only: isAdminSelected },\r\n }).unwrap();\r\n response?.message &&\r\n dispatch(\r\n successToast({\r\n message: response?.message, // || \"Permissions updated successfully!\",\r\n })\r\n );\r\n } catch (error) {\r\n console.error(\"Error updating permissions:\", error);\r\n dispatch(\r\n errorToast({\r\n message: error?.data?.message || \"Failed to update permissions!\",\r\n })\r\n );\r\n }\r\n };\r\n\r\n const handleChangeRadioCopyBoard = async (event) => {\r\n const newSelectedOptionCopyBoard = event.target.value;\r\n\r\n try {\r\n const response = await updatePermission({\r\n teamId: selectedTeamId ?? activeTeam,\r\n data: {\r\n ...allState,\r\n copying_board_content: newSelectedOptionCopyBoard,\r\n },\r\n }).unwrap();\r\n dispatch(\r\n response?.message &&\r\n successToast({\r\n message: response?.message, // || \"Permissions updated successfully!\",\r\n })\r\n );\r\n } catch (error) {\r\n console.error(\"Error updating permissions:\", error);\r\n dispatch(\r\n errorToast({\r\n message: error?.data?.message || \"Failed to update permissions!\",\r\n })\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {/* {(permissionIsFetching || permissionIsLoading) && } */}\r\n \r\n \r\n \r\n \r\n \r\n Team Invitation Settings\r\n \r\n {selectedTeamName && (\r\n \r\n Choose who can invite users to the\r\n \r\n {selectedTeamName} \r\n \r\n team.{\" \"}\r\n \r\n Learn about invitation settings\r\n \r\n \r\n )}\r\n \r\n\r\n {/* radio button */}\r\n\r\n \r\n \r\n \r\n }\r\n label={\r\n \r\n \r\n Team admins only\r\n \r\n \r\n Only team admins are allowed to invite users.\r\n \r\n \r\n }\r\n sx={{ alignItems: \"flex-start\", gap: \"8px\" }}\r\n />\r\n \r\n\r\n \r\n \r\n }\r\n label={\r\n \r\n \r\n All team members\r\n \r\n \r\n Everyone can invite users\r\n \r\n \r\n }\r\n sx={{ alignItems: \"flex-start\", gap: \"8px\" }}\r\n />\r\n \r\n \r\n\r\n {/* switch button */}\r\n \r\n \r\n \r\n Enable team invite link\r\n \r\n \r\n \r\n }\r\n label=\"\"\r\n />\r\n \r\n \r\n \r\n Enabled invite link allows everyone with the link to join your\r\n team. It shows up in board sharing settings and when inviting to\r\n a team.\r\n \r\n \r\n\r\n {/* external setting */}\r\n {currentSubscriptionData?.subscriptionData?.package === \"Free\" && (\r\n <>\r\n \r\n \r\n \r\n External collaborators\r\n \r\n\r\n \r\n \r\n \r\n Upgrade\r\n \r\n \r\n \r\n\r\n \r\n Invite people outside your team free of charge, with public\r\n board visitors on Starter Plan or secure guests on Business\r\n Plan.\r\n \r\n Learn more\r\n \r\n \r\n {\r\n setShowPlans(!showPlans);\r\n }}\r\n >\r\n \r\n Upgrade\r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* sharing setting */}\r\n\r\n \r\n \r\n \r\n Sharing Settings\r\n \r\n\r\n \r\n \r\n \r\n Upgrade\r\n \r\n \r\n \r\n\r\n \r\n Set up default access settings for boards and projects.\r\n \r\n Learn more\r\n \r\n \r\n \r\n Available one the starter plan.\r\n \r\n {\r\n setShowPlans(!showPlans);\r\n }}\r\n >\r\n \r\n Upgrade\r\n \r\n \r\n \r\n >\r\n )}\r\n \r\n {(currentSubscriptionData?.subscriptionData?.package?.includes(\r\n \"Professional\"\r\n ) ||\r\n currentSubscriptionData?.subscriptionData?.package?.includes(\r\n \"Business\"\r\n )) && (\r\n <>\r\n {/* \r\n \r\n Guests\r\n \r\n \r\n Invite people outside your team, without making your boards\r\n public. Upgrade to Business plan to invite guests securely,\r\n free of charge.\r\n \r\n Learn more\r\n \r\n \r\n {\r\n setShowPlans(!showPlans);\r\n }}\r\n >\r\n \r\n Upgrade to Business Plan\r\n \r\n \r\n */}\r\n\r\n \r\n \r\n \r\n \r\n Sharing Settings\r\n \r\n \r\n Set up default access settings for boards and projects.\r\n \r\n \r\n \r\n \r\n Default settings for board sharing\r\n \r\n \r\n Select default sharing settings for a`ll newly created\r\n boards in your team account.Sharing settings can be later\r\n changed for each individual board by board owners and\r\n editors.\r\n \r\n\r\n {\r\n const updatedSettings = {\r\n ...sharingSetting,\r\n boardSharing: value,\r\n };\r\n setAllState({\r\n ...allState,\r\n default_setting_for_board_share: value,\r\n });\r\n setSharingSetting(updatedSettings);\r\n updatePermissionsAPISelect(updatedSettings);\r\n }}\r\n options={defaultSettingForBoard}\r\n disabled={\r\n isAccountOwner !== \"Account Owner\" &&\r\n selectedTeamInfo?.data?.teamInfo?.role !== \"Admin\"\r\n }\r\n // mainSx={{\r\n // minWidth: matchDown950 ? \"100%\" : \"calc(50% - 18px)\",\r\n // \"& label\": {\r\n // mb: {\r\n // xs: \"5px\",\r\n // md: \"0px\",\r\n // xl: \"5px\",\r\n // },\r\n // },\r\n // }}\r\n />\r\n \r\n\r\n \r\n\r\n \r\n \r\n Invite to board and edit sharing settings - Default setting\r\n \r\n \r\n Select a default for who can invite users to a board and\r\n edit the board's sharing settings.\r\n \r\n {\r\n const updatedSettings = {\r\n ...sharingSetting,\r\n editSharing: value,\r\n };\r\n setSharingSetting(updatedSettings);\r\n updatePermissionsAPISelect(updatedSettings);\r\n }}\r\n options={boardAndEdit}\r\n // noOptionsText={\"No Display Language\"}\r\n disabled={\r\n isAccountOwner !== \"Account Owner\" &&\r\n selectedTeamInfo?.data?.teamInfo?.role !== \"Admin\"\r\n }\r\n // fullWidth={false}\r\n // mainSx={{\r\n // minWidth: matchDown950 ? \"100%\" : \"calc(50% - 18px)\",\r\n // \"& label\": {\r\n // mb: {\r\n // xs: \"5px\",\r\n // md: \"0px\",\r\n // xl: \"5px\",\r\n // },\r\n // },\r\n // }}\r\n />\r\n \r\n \r\n\r\n \r\n\r\n \r\n {/* content security */}\r\n \r\n \r\n Content security\r\n \r\n \r\n \r\n Copying board content\r\n \r\n \r\n Set who can be given permission to copy board content.\r\n \r\n \r\n Once set, board owners can configure this setting based on\r\n chosen option.\r\n \r\n \r\n \r\n \r\n \r\n }\r\n // label=\"Only team members\"\r\n label={\r\n \r\n Only team members\r\n \r\n }\r\n />\r\n \r\n }\r\n // label=\"Team members and users outside this team\"\r\n label={\r\n \r\n Team members and users outside this team\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {/* default board copying */}\r\n \r\n \r\n Default board copying\r\n \r\n \r\n Set who can copy board content on newly created boards.\r\n \r\n \r\n Board owners can change this setting separately for each of\r\n their boards.\r\n \r\n {\r\n const updatedSettings = {\r\n ...sharingSetting,\r\n copySharing: value,\r\n };\r\n setSharingSetting(updatedSettings);\r\n updatePermissionsAPISelect(updatedSettings);\r\n }}\r\n options={boardCopy}\r\n // noOptionsText={\"No Display Language\"}\r\n disabled={\r\n isAccountOwner !== \"Account Owner\" &&\r\n selectedTeamInfo?.data?.teamInfo?.role !== \"Admin\"\r\n }\r\n // fullWidth={false}\r\n // mainSx={{\r\n // minWidth: matchDown950 ? \"100%\" : \"calc(50% - 18px)\",\r\n // \"& label\": {\r\n // mb: {\r\n // xs: \"5px\",\r\n // md: \"0px\",\r\n // xl: \"5px\",\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 UserSectionPermissions;\r\n","import { Avatar, Box, Stack, Typography } from \"@mui/material\";\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { localDateFormat } from \"../../../CommanFunctions/commanFunctions\";\r\nimport Loader from \"../../../CommanUI/Loader/loader\";\r\nimport {\r\n useGetRequestControlListMutation,\r\n useRequestApproveMutation,\r\n useRequestRejectMutation,\r\n} from \"../../../Redux/api/teamsApi\";\r\nimport { errorToast, successToast } from \"../../../Redux/toastSlice\";\r\nimport { color } from \"../../../Utils/style/color/color\";\r\nimport { fontSizes } from \"../../../Utils/style/font/fontsizes\";\r\nimport { fontWeight } from \"../../../Utils/style/weight/fontWeight\";\r\nimport BtnColoredOutlined from \"../../../common-components/buttons/BtnColoredOutlined\";\r\nimport BtnGradient from \"../../../common-components/buttons/BtnGradient\";\r\nimport { subscriptionDataSelect } from \"../../../Redux/common-reducer\";\r\nimport UpgradeModel from \"./UpgradeModel\";\r\nimport CommonPlaceHolder from \"../../../common-components/commonPlaceholder/CommonPlaceHolder\";\r\nimport TableComponent from \"./TableComponent\";\r\nimport { useSelector } from \"react-redux\";\r\nimport {\r\n IcSortingTableAse,\r\n IcSortingTableDes,\r\n} from \"../../../assets/icon-components\";\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\nfunction UserSectionRequestControl() {\r\n // const globalTheme = useTheme();\r\n // const [value, setValue] = useState(0);\r\n const [iSubmitted, setIsSubmitted] = useState(false);\r\n const dispatch = useDispatch();\r\n const currentSubscription = subscriptionDataSelect();\r\n const userData = useSelector((state) => state.common.userData);\r\n\r\n const [\r\n getRequestControlList,\r\n { data: requestControlData = [], isLoading: requestIsLoading },\r\n ] = useGetRequestControlListMutation();\r\n\r\n const [requestReject] = useRequestRejectMutation();\r\n const [requestApprove] = useRequestApproveMutation();\r\n\r\n // for table\r\n const [tableHeight, setTableHeight] = useState(\"auto\");\r\n\r\n useEffect(() => {\r\n currentSubscription?.package !== \"Free\" && getRequestControlList();\r\n // Adjust table height based on screen size\r\n const adjustTableHeight = () => {\r\n const height = window.innerHeight * 0.6; // 60% of screen height\r\n setTableHeight(`${height}px`);\r\n };\r\n\r\n adjustTableHeight();\r\n window.addEventListener(\"resize\", adjustTableHeight);\r\n return () => window.removeEventListener(\"resize\", adjustTableHeight);\r\n }, []);\r\n\r\n // const handleChange = (event, newValue) => {\r\n // setValue(newValue);\r\n // };\r\n\r\n // const CustomTabPanel = ({ children, value, index, ...other }) => {\r\n // return (\r\n // \r\n // {value === index && {children}}\r\n //
\r\n // );\r\n // };\r\n\r\n const columns = useMemo(\r\n () => [\r\n {\r\n accessorKey: \"name\",\r\n header: \"Name\",\r\n // minWidth: 150,\r\n // maxWidth: 200,\r\n enableSorting: true,\r\n enableResizing: true,\r\n Cell: (row) => {\r\n let name = row?.first_name + \" \" + row?.last_name;\r\n return (\r\n \r\n \r\n {!row?.profile_picture &&\r\n name &&\r\n name\r\n .split(\" \")\r\n .map((word) => word[0]?.toUpperCase())\r\n .slice(0, 2)\r\n .join(\"\")}\r\n \r\n\r\n \r\n {row?.first_name + \" \" + row?.last_name}\r\n \r\n \r\n );\r\n },\r\n },\r\n {\r\n accessorKey: \"email_id\",\r\n header: \"Email\",\r\n // minWidth: 150,\r\n // maxWidth: 200,\r\n enableSorting: true,\r\n enableResizing: true,\r\n Cell: (row) => {\r\n return (\r\n \r\n {`${row?.email_id ?? \"-\"}`}\r\n \r\n );\r\n },\r\n },\r\n // {\r\n // accessorKey: \"team_name\", // Field name in your data (e.g., \"team\")\r\n // header: \"Team\",\r\n // minWidth: 150,\r\n // maxWidth: 200,\r\n // enableSorting: true,\r\n // Cell: (row) => {\r\n // return (\r\n // \r\n // {row?.team_name ?? \"-\"}\r\n // \r\n // );\r\n // },\r\n // },\r\n // {\r\n // accessorKey: \"architecture_name\",\r\n // header: \"Board Name\",\r\n // minWidth: 150,\r\n // maxWidth: 150,\r\n // // enableSorting: true,\r\n // // textCenter: true,\r\n // Cell: (row) => {\r\n // return (\r\n // \r\n // {row?.architecture_name ?? \"-\"}\r\n // \r\n // );\r\n // },\r\n // },\r\n\r\n {\r\n accessorKey: \"date\", // Field name for date\r\n header: \"Date\",\r\n // minWidth: 150,\r\n // maxWidth: 150,\r\n // enableSorting: true,\r\n // textCenter: true,\r\n enableResizing:\r\n userData?.role === \"Account Owner\" || userData?.is_admin\r\n ? true\r\n : false,\r\n Cell: (row) => {\r\n return (\r\n \r\n {/* {localDateFormat(row?.requested_on)} */}\r\n {row?.requested_on ? (\r\n localDateFormat(row?.requested_on)\r\n ) : (\r\n \r\n -\r\n \r\n )}\r\n \r\n );\r\n },\r\n },\r\n\r\n ...(userData?.role === \"Account Owner\" || userData?.is_admin\r\n ? [\r\n {\r\n accessorKey: \"action\", // This is just for the action column\r\n header: \"Action\",\r\n minWidth: 150,\r\n maxWidth: 150,\r\n // enableSorting: true,\r\n textCenter: true,\r\n // enableResizing: true,\r\n Cell: (row) => {\r\n return (\r\n \r\n handleReject(row)}\r\n >\r\n \r\n Decline\r\n \r\n \r\n {/* handleReject(row)}\r\n >\r\n \r\n Decline\r\n \r\n */}\r\n handleApprove(row)}\r\n >\r\n \r\n Approve\r\n \r\n \r\n \r\n );\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n [userData]\r\n );\r\n\r\n // const table = useMaterialReactTable({\r\n // columns,\r\n // data: requestControlData?.data ?? [],\r\n // enableTopToolbar: false,\r\n // enableBottomToolbar: false,\r\n // enableColumnResizing: true, // column resize\r\n // enableRowActions: false,\r\n // enableExpandAll: false,\r\n // enableColumnPinning: true,\r\n // layoutMode: \"grid\",\r\n // getSubRows: (row) => row.subRows, //default\r\n // initialState: {\r\n // expanded: false,\r\n // showColumnFilters: false,\r\n // }, //expand all rows by default\r\n // paginateExpandedRows: false, //When rows are expanded, do not count sub-rows as number of rows on the page towards pagination\r\n // enableColumnActions: false,\r\n // manualPagination: true,\r\n // enableStickyHeader: true,\r\n\r\n // muiTableBodyRowProps: ({ row }) => {\r\n // return {\r\n // sx: {\r\n // backgroundColor: \"#FFFFFF !important\",\r\n // \"&:hover td::after\": {\r\n // backgroundColor: \"transparent !important\",\r\n // },\r\n // },\r\n // };\r\n // },\r\n // muiTableHeadCellProps: {\r\n // sx: {\r\n // textTransform: \"uppercase\",\r\n // color: \"#848382\",\r\n // fontWeight: \"700\",\r\n // fontSize: `${{\r\n // xs: fontSizes.mediumFont,\r\n // md: fontSizes.fontSize13,\r\n // xl: fontSizes.fontSize14,\r\n // }} !important`,\r\n // },\r\n // },\r\n\r\n // // new code\r\n // muiTableContainerProps: {\r\n // sx: {\r\n // maxHeight: tableHeight, // Restrict vertical height\r\n // overflowY: \"auto\", // Enable vertical scrolling\r\n // overflowX: \"auto\", // Enable horizontal scrolling only when needed\r\n // \"&::-webkit-scrollbar\": {\r\n // height: \"8px\", // Optional: Customize scrollbar height\r\n // },\r\n // \"&::-webkit-scrollbar-thumb\": {\r\n // backgroundColor: \"#bdbdbd\", // Optional: Customize scrollbar color\r\n // borderRadius: \"4px\",\r\n // },\r\n // },\r\n // },\r\n // muiTablePaperProps: {\r\n // elevation: 0,\r\n // sx: {\r\n // border: \"1px solid #e1e1e1\",\r\n // borderRadius: \"12px 12px 0px 0px\",\r\n // // borderRadius: \"0\",\r\n // // border: \"0\",\r\n // overflow: \"hidden\",\r\n // width: \"100%\",\r\n // },\r\n // },\r\n // muiTableHeadProps: {\r\n // sx: {\r\n // position: \"sticky\",\r\n // top: 0,\r\n // zIndex: 2,\r\n // backgroundColor: \"#f7f7f7\", // Sticky header background\r\n // },\r\n // },\r\n // muiTableBodyProps: {\r\n // sx: {\r\n // overflow: \"visible\",\r\n // },\r\n // },\r\n // renderEmptyRowsFallback: () =>\r\n // !requestIsLoading &&\r\n // requestControlData?.data && (\r\n // \r\n // \r\n // \r\n // ),\r\n // icons: {\r\n // ...tableIcons,\r\n // },\r\n // });\r\n\r\n // const tableTheme = useMemo(\r\n // () =>\r\n // createTheme({\r\n // components: {\r\n // MuiPaper: {\r\n // styleOverrides: {\r\n // // elevation0: {\r\n // // paddingRight: \"32px\",\r\n // // paddingLeft: \"24px\",\r\n // // },\r\n // },\r\n // },\r\n // MuiTooltip: {\r\n // styleOverrides: {\r\n // tooltip: {\r\n // display: \"none\", //override to make tooltip font size larger\r\n // },\r\n // },\r\n // },\r\n // MuiTable: {\r\n // styleOverrides: {\r\n // root: {\r\n // borderRadius: \"12px 12px 0px 0px\",\r\n // border: \"1px solid #E1E1E1\",\r\n // boxShadow: \"0px 1px 2px 0px #1018280A\",\r\n // },\r\n // },\r\n // },\r\n // },\r\n // }),\r\n // [globalTheme]\r\n // );\r\n\r\n const handleReject = async (takeRecord) => {\r\n setIsSubmitted(true);\r\n const payload = {\r\n // architecture_id: takeRecord.architecture_id,\r\n user_id: takeRecord.user_id,\r\n };\r\n await requestReject(payload)\r\n .then((result) => {\r\n if (result?.error) {\r\n dispatch(\r\n errorToast({\r\n message: result?.error?.data?.message,\r\n })\r\n );\r\n } else if (result?.data?.status) {\r\n dispatch(\r\n successToast({\r\n message: result?.data?.message,\r\n })\r\n );\r\n getRequestControlList();\r\n }\r\n })\r\n .catch((error) => {});\r\n setIsSubmitted(false);\r\n };\r\n\r\n const handleApprove = async (takeRecord) => {\r\n setIsSubmitted(true);\r\n const payload = {\r\n // architecture_id: takeRecord.architecture_id,\r\n user_id: takeRecord.user_id,\r\n };\r\n await requestApprove(payload)\r\n .then((result) => {\r\n if (result?.error) {\r\n dispatch(\r\n errorToast({\r\n message: result?.error?.data?.message,\r\n })\r\n );\r\n } else if (result?.data?.status) {\r\n dispatch(\r\n successToast({\r\n message: result?.data?.message,\r\n })\r\n );\r\n getRequestControlList();\r\n }\r\n })\r\n .catch((error) => {});\r\n setIsSubmitted(false);\r\n };\r\n\r\n // if (currentSubscription?.package === \"Free\") {\r\n // return (\r\n // \r\n // \r\n // \r\n // );\r\n // }\r\n\r\n return (\r\n \r\n {iSubmitted || (requestIsLoading && )}\r\n\r\n \r\n {/* \r\n \r\n \r\n */}\r\n \r\n {/* */}\r\n {requestControlData?.data?.length === 0 && (\r\n \r\n \r\n \r\n {/* \r\n
\r\n \r\n \r\n No Pending Requests\r\n \r\n \r\n There are no pending access requests at the moment.\r\n */}\r\n \r\n \r\n )}\r\n \r\n \r\n {requestControlData?.data?.length > 0 && (\r\n ,\r\n descending: ,\r\n }}\r\n showSortingIconOnHover={false}\r\n // maxHeight={{\r\n // xs: \"calc(100vh - 188px)\",\r\n // sm: \"calc(100vh - 220px)\",\r\n // md: \"calc(100vh - 250px)\",\r\n // lg: \"calc(100vh - 270px)\",\r\n // xl: \"calc(100vh - 290px)\",\r\n // }}\r\n // emptyBoxHeight={{\r\n // xs: \"calc(100vh - 300px)\",\r\n // sm: \"calc(100vh - 340px)\",\r\n // md: \"calc(100vh - 340px)\",\r\n // lg: \"calc(100vh - 340px)\",\r\n // xl: \"calc(100vh - 360px)\",\r\n // }}\r\n />\r\n )}\r\n\r\n {/* {requestControlData?.data?.length > 0 && (\r\n \r\n \r\n \r\n )} */}\r\n {/* \r\n \r\n Showing 1 to 10 of 25 entries\r\n \r\n */}\r\n \r\n \r\n\r\n {currentSubscription?.package === \"Free\" && (\r\n \r\n \r\n \r\n )}\r\n\r\n {/* */}\r\n {/* \r\n \r\n \r\n \r\n Managing requests\r\n \r\n\r\n \r\n \r\n \r\n Control how user requests are managed in your organization,\r\n including license requests. You can also decide if requests are\r\n managed externally or directly, making it easy to keep all your\r\n admin work in one place.\r\n \r\n \r\n Available on the Business Plan\r\n \r\n \r\n Contact us\r\n \r\n \r\n */}\r\n \r\n );\r\n}\r\n\r\nexport default UserSectionRequestControl;\r\n","import {\r\n Box,\r\n Collapse,\r\n List,\r\n ListItem,\r\n Stack,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport React, { useContext, useEffect, useMemo, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLocation, useNavigate } from \"react-router-dom\";\r\nimport {\r\n IcBrandCenter,\r\n IcRequestControlOutlined,\r\n IcRightSingleArrow,\r\n IcSubscriptionOutlined,\r\n IcUserCircleOutlined2,\r\n IcUserVerifiedOutlined,\r\n IcWorkspace,\r\n} from \"../../../assets/icon-components\";\r\nimport IcManageTeam from \"../../../assets/icon-components/IcManageTeam\";\r\nimport commanService from \"../../../CommanFunctions/commanService\";\r\nimport { ModelContext } from \"../../../HOC/ModelContext\";\r\nimport { toggleLoadSidebarDocuments } from \"../../../Redux/sidebarSlice\";\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 InviteMultipleUserModel from \"../../Invite-User/components/InviteMultipleUserModel\";\r\nimport UpgradeModel from \"./UpgradeModel\";\r\nimport ChoosePlan from \"../../upgrade-plan/ChoosePlan\";\r\nimport WorkspaceSidebarDropDown from \"../../../common-components/WorkspaceSidebarDropDown\";\r\nimport { s3AssetsUrl } from \"../../DrawBoard/const\";\r\nimport { fontWeight } from \"../../../Utils/style/weight/fontWeight\";\r\n\r\nconst UserSectionSidebar = () => {\r\n const navigate = useNavigate();\r\n const dispatch = useDispatch();\r\n const userData = useSelector((state) => state.common.userData);\r\n const { pathname } = useLocation();\r\n const [openGroup, setOpenGroup] = useState([]);\r\n const [currentPlan, setCurrentPlan] = useState(null);\r\n const { createNewTeamModal, setCreateNewTeamModal, ...modelState } =\r\n useContext(ModelContext);\r\n const [openUpgradeModal, setOpenUpgradeModal] = useState(false);\r\n const [showPlans, setShowPlans] = useState(false);\r\n\r\n const [expandedSubChildren, setExpandedSubChildren] = useState(null);\r\n\r\n const takeBrandCenters = JSON.parse(\r\n localStorage.getItem(\"brandCenterAdministrators\")\r\n );\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 setCurrentPlan(response.data?.data);\r\n } catch (error) {\r\n } finally {\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getCurrentSubscription();\r\n return () => {\r\n dispatch(toggleLoadSidebarDocuments());\r\n };\r\n }, []);\r\n\r\n const handleToggleGroup = (groupName) => {\r\n if (typeof groupName === \"string\") {\r\n const opened = openGroup.includes(groupName);\r\n\r\n if (opened) {\r\n setOpenGroup((prev) => prev.filter((group) => group !== groupName));\r\n } else {\r\n setOpenGroup((prev) => [...prev, groupName]);\r\n }\r\n } else if (Array.isArray(groupName)) {\r\n const existingGroup = groupName.filter(\r\n (group) => !openGroup.includes(group)\r\n );\r\n\r\n if (existingGroup.length > 0) {\r\n setOpenGroup((prev) => [\r\n ...prev,\r\n\r\n ...groupName.filter((group) => !prev.includes(group)),\r\n ]);\r\n }\r\n }\r\n };\r\n\r\n const sidebarAccordionList = useMemo(() => {\r\n let freePlanLockedRoutes = [\r\n \"user/manage-domain\",\r\n\r\n // \"user/invitations\",\r\n \"user/manage-teams\",\r\n \"user/permissions\",\r\n \"user/workspace-users\",\r\n ];\r\n let isFreePlan = currentPlan?.subscriptionData?.package === \"Free\";\r\n let isProPlan =\r\n currentPlan?.subscriptionData?.package?.includes(\"Professional\");\r\n\r\n const mainData = [\r\n {\r\n // label: \"Profile Setting\",\r\n label: \"Settings\",\r\n value: \"profile-settings\",\r\n matchChildPaths: [\"/user/profile\", \"/user/security\"],\r\n children: [\r\n // {\r\n // Icon: IcUserCircleOutlined2,\r\n // // label: \"My Profile\",\r\n // label: \"User Profile\",\r\n // onClick: () => navigate(\"/user/profile\"),\r\n // route: \"/user/profile\",\r\n // matchPath: [\r\n // \"/user/profile\",\r\n // \"/user/profile/notifications\",\r\n // // \"/user/profile/integrations\",\r\n // \"/user/profile/user-info\",\r\n // ],\r\n // },\r\n {\r\n Icon: IcWorkspace,\r\n label: \"Workspace\",\r\n value: \"workspace\",\r\n route: \"/user/workspace\",\r\n RightArrow: IcRightSingleArrow,\r\n matchPath: [\"/user/workspace-profile\", \"/user/brand-center\"],\r\n subChildren: [\r\n {\r\n Icon: IcUserCircleOutlined2,\r\n label: \"Workspace Profile\",\r\n route: \"user/workspace-profile\",\r\n onClick: () => navigate(\"/user/workspace-profile\"),\r\n matchPath: [\"/user/workspace-profile\"],\r\n },\r\n {\r\n Icon: IcBrandCenter,\r\n label: \"Brand Center\",\r\n // isHidden:\r\n // takeBrandCenters || userData?.role !== \"Account Owner\"\r\n // ? true\r\n // : false,\r\n premiumBadge: isFreePlan,\r\n route: \"user/brand-center\",\r\n onClick: () => navigate(\"/user/brand-center\"),\r\n matchPath: [\"/user/brand-center\"],\r\n },\r\n ],\r\n // onClick: () => navigate(\"/user/workspace-profile\"),\r\n // matchPath: [\"/user/workspace-profile\"],\r\n },\r\n\r\n {\r\n Icon: IcSubscriptionOutlined,\r\n label: \"Subscription\",\r\n route: \"user/subscription\",\r\n onClick: () => navigate(\"/user/subscription\"),\r\n matchPath: [\"/user/subscription\"],\r\n },\r\n {\r\n Icon: IcUserVerifiedOutlined,\r\n RightArrow: IcRightSingleArrow,\r\n label: \"Users\",\r\n route: \"/user/users\",\r\n value: \"user\",\r\n matchPath: [\"/user/workspace-users\", \"/user/request-control\"],\r\n subChildren: [\r\n {\r\n Icon: IcUserCircleOutlined2,\r\n label: \"All users\",\r\n route: \"user/workspace-users\",\r\n onClick: () => navigate(\"/user/workspace-users\"),\r\n matchPath: [\"/user/workspace-users\"],\r\n },\r\n {\r\n Icon: IcRequestControlOutlined,\r\n label: \"Pending Requests\",\r\n route: \"user/request-control\",\r\n onClick: () => navigate(\"/user/request-control\"),\r\n matchPath: [\"/user/request-control\"],\r\n premiumBadge: isFreePlan,\r\n isHidden: userData?.role !== \"Account Owner\",\r\n },\r\n ],\r\n },\r\n {\r\n Icon: IcManageTeam,\r\n label: \"Teams\",\r\n isHidden:\r\n userData?.role !== \"Account Owner\" &&\r\n !currentPlan?.subscriptionData?.package?.includes(\"Business\"),\r\n premiumBadge: isFreePlan || isProPlan,\r\n onClick: () =>\r\n userData?.is_account_owner\r\n ? navigate(\"/user/manage-teams\")\r\n : navigate(\"/user/invited-users-team\"),\r\n matchPath: [\r\n \"/user/invited-users-team\",\r\n \"/user/manage-teams\",\r\n \"/user/manage-teams/team-profile\",\r\n \"/user/manage-teams/team-profile/team-user\",\r\n \"/user/manage-teams/team-profile/team-permissions\",\r\n ],\r\n badge: \"Upgrade\",\r\n },\r\n ],\r\n },\r\n\r\n // ...[\r\n // {\r\n // label: \"Users & Teams\",\r\n // value: \"workspace-users\",\r\n // children: [\r\n // {\r\n // Icon: IcUserVerifiedOutlined,\r\n // RightArrow: IcRightSingleArrow,\r\n // label: \"Users\",\r\n // route: \"/user/users\",\r\n // value: \"user\",\r\n // matchPath: [\"/user/workspace-users\", \"/user/request-control\"],\r\n // subChildren: [\r\n // {\r\n // Icon: IcUserCircleOutlined2,\r\n // label: \"All users\",\r\n // route: \"user/workspace-users\",\r\n // onClick: () => navigate(\"/user/workspace-users\"),\r\n // matchPath: [\"/user/workspace-users\"],\r\n // },\r\n // {\r\n // Icon: IcRequestControlOutlined,\r\n // label: \"Pending Requests\",\r\n // route: \"user/request-control\",\r\n // onClick: () => navigate(\"/user/request-control\"),\r\n // matchPath: [\"/user/request-control\"],\r\n // premiumBadge: isFreePlan,\r\n // },\r\n // ],\r\n // },\r\n\r\n // // {\r\n // // Icon: IcInvitations,\r\n // // // label: \"Invite People\",\r\n // // label: \"Invitations \",\r\n // // onClick: () => navigate(\"/user/invitations\"),\r\n // // route: \"user/invitations\",\r\n // // matchPath: [\"/user/invitations\"],\r\n // // },\r\n // {\r\n // Icon: IcManageTeam,\r\n // label: \"Teams\",\r\n // premiumBadge: isFreePlan || isProPlan,\r\n // onClick: () => navigate(\"/user/manage-teams\"),\r\n // matchPath: [\r\n // \"/user/manage-teams\",\r\n // \"/user/manage-teams/team-profile\",\r\n // \"/user/manage-teams/team-profile/team-user\",\r\n // \"/user/manage-teams/team-profile/team-permissions\",\r\n // ],\r\n // badge: \"Upgrade\",\r\n // },\r\n // ],\r\n // },\r\n // ],\r\n // ...[\r\n // {\r\n // label: \"User Management\",\r\n // value: \"invite-users\",\r\n // matchChildPaths: [\"/user/invite-user/members\"],\r\n // children: [\r\n // {\r\n // Icon: IcUserVerifiedOutlined,\r\n // label: \"Team Users\",\r\n // route: \"user/members\",\r\n // onClick: () => navigate(\"/user/invite-user/members\"),\r\n // matchPath: [\"/user/invite-user/members\"],\r\n // },\r\n // {\r\n // Icon: IcRequestControlOutlined,\r\n // label: \"Request Control\",\r\n // route: \"user/request-control\",\r\n // onClick: () => navigate(\"/user/request-control\"),\r\n // matchPath: [\"/user/request-control\"],\r\n // },\r\n // {\r\n // Icon: IcInvitations,\r\n // label: \"Invitations\",\r\n // onClick: () => navigate(\"/user/invitations\"),\r\n // route: \"user/invitations\",\r\n // matchPath: [\"/user/invitations\"],\r\n // },\r\n\r\n // {\r\n // Icon: IcSecurity,\r\n // label: \"Permissions\",\r\n // route: \"user/permissions\",\r\n // onClick: () => navigate(\"/user/permissions\"),\r\n // matchPath: [\"/user/permissions\"],\r\n // },\r\n // {\r\n // Icon: Ic4SquareOutlined,\r\n // label: \"Apps & Integrations\",\r\n // route: \"user/apps-integrations\",\r\n // onClick: () => navigate(\"/user/apps-integrations\"),\r\n // matchPath: [\"/user/apps-integrations\"],\r\n // },\r\n // ],\r\n // },\r\n // ],\r\n ];\r\n let filteredRoutes = mainData.map((item) => {\r\n // return {\r\n // ...item,\r\n // children: isFreePlan\r\n // ? item.children.filter(\r\n // (item) => !freePlanLockedRoutes.includes(item.route)\r\n // )\r\n // : item.children,\r\n // };\r\n return {\r\n ...item,\r\n children: item.children.filter((child) => {\r\n // Hide \"user/subscription\" if role is \"Account Owner\"\r\n if (\r\n child.route === \"user/subscription\" &&\r\n userData?.role !== \"Account Owner\"\r\n ) {\r\n return false;\r\n }\r\n\r\n // Show Brand Center based on user role and takeBrandCenters\r\n\r\n // if (\r\n // child.route === \"user/brand-center\" &&\r\n // !(userData?.role === \"Account Owner\" || !takeBrandCenters)\r\n // ) {\r\n // return false;\r\n // }\r\n\r\n // Additional filtering logic for freePlanLockedRoutes\r\n return !isFreePlan || !freePlanLockedRoutes.includes(child.route);\r\n }),\r\n };\r\n });\r\n\r\n return [...filteredRoutes];\r\n }, [currentPlan, navigate]);\r\n useEffect(() => {\r\n const openedGroupKey = sidebarAccordionList?.filter((group) =>\r\n group?.matchChildPaths?.includes(pathname)\r\n )[0]?.value;\r\n\r\n openedGroupKey ? setOpenGroup([openedGroupKey]) : setOpenGroup([]);\r\n }, [pathname, sidebarAccordionList]);\r\n\r\n const handleCloseInviteMember = () => {\r\n modelState.setInviteNewMembers(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n >\r\n );\r\n};\r\n\r\nexport default UserSectionSidebar;\r\n"],"names":["_ref","_window","_tableRef$current","_tableRef$current$get","mainBoxCss","columns","mainLoader","data","placeholder","maxWidth","showSortingIconOnHover","customSortIcons","headHeight","rowHeight","isTableLoading","maxHeight","emptyBoxHeight","enableColumnResizing","tableFullSpaceManage","userProfileSetting","tableFullEmptySpaceManage","sortConfig","setSortConfig","useState","key","direction","columnWidths","setColumnWidths","isResizing","setIsResizing","emptyPlaceholderHeigh","setEmptyPlaceholderHeigh","resizingColumn","useRef","startX","startWidth","tableRef","useEffect","calculateColumnWidths","widths","forEach","column","maxContentWidth","Math","max","getTextWidth","header","map","row","content","accessorKey","toString","minWidth","text","context","document","createElement","getContext","font","measureText","width","handleResizeStart","useCallback","e","enableResizing","preventDefault","current","pageX","handleResizeMove","diff","newWidth","prev","_objectSpread","handleResizeEnd","window","addEventListener","removeEventListener","windowHeight","innerHeight","tableTop","getBoundingClientRect","top","newHeight","emptyPlaceHolder","updateTableHeight","style","concat","sortedData","useMemo","sort","a","b","aValue","bValue","_jsx","Box","component","Paper","sx","overflow","lg","xl","overflowX","border","color","commonBorderColor","borderRadius","boxShadow","children","TableContainer","ref","theme","bgcolor","lightGridHover","borderBottom","padding","xs","breakpoints","down","overflowY","userSelect","_jsxs","Table","stickyHeader","tableLayout","TableHead","height","TableRow","index","TableCell","position","fontWeight","weight400","background","greyHover","fontSize","fontSizes","mediumFont","md","fontSize13","fontSize14","subTitle","paddingRight","paddingLeft","textAlign","textCenter","display","alignItems","justifyContent","enableSorting","IconButton","onClick","handleSort","prevConfig","size","opacity","backgroundColor","ascending","IcSortingTableAse","descending","IcSortingTableDes","onMouseDown","right","bottom","cursor","TableBody","colSpan","length","Stack","sm","AbsoluteLoader","zIndex","rowIndex","hover","colIndex","whiteSpace","textOverflow","Cell","undefined","CommonPlaceHolder","title","imgWidth","imgHeight","descFontSize","imageAndDescGapXl","imageAndDescGapXs","open","setOpen","subtitle","isNavigateOnClose","handleClose","handleChoosePlanClose","navigate","useNavigate","showPlans","setShowPlans","_Fragment","ChoosePlan","CustomModal","whiteColor","outline","commonStyles","borderRadius12","src","s3AssetsUrl","alt","transition","IcCloseThin","fill","p","pt","Typography","titleDark","weight600","modelTitle1","mt","my","BtnGradient","px","dispatch","useDispatch","useTheme","matchDown950","useMediaQuery","hexCode","setHexCode","colorName","setColorName","colors","setColors","anchorEl","setAnchorEl","regularFont","setRegularFont","regularFontFile","setRegularFontFile","regularFontName","setRegularFontName","fontTypeToDelete","setFontTypeToDelete","boldFont","setBoldFont","boldFontFile","setBoldFontFile","boldFontName","setBoldFontName","triggerDelete","setTriggerDelete","italicFont","setItalicFont","italicFontFile","setItalicFontFile","italicFontName","setItalicFontName","triggerSubmit","setTriggerSubmit","boldItalicFont","setBoldItalicFont","boldItalicFontFile","setBoldItalicFontFile","boldItalicFontName","setBoldItalicFontName","selectedIndex","setSelectedIndex","showDeleteBrand","setShowDeleteBrand","showDeleteFont","setShowDeleteFont","isSwitchOn","setIsSwitchOn","isSmallScreen","submitOnce","setSubmitOnce","userData","useSelector","state","common","currentSubscription","subscriptionDataSelect","getBrandCenter","brandCenter","isLoading","brandDataLoading","isFetching","brandDataFetching","useGetBrandCenterMutation","updateBrandCenter","updatingInProgress","useUpdateBrandCenterMutation","setHover","Regular","Bold","Italic","BoldItalic","hoverPlusIcon","setHoverPlusIcon","handleMouseEnter","type","handleMouseLeave","package","resetData","_brandCenter$data","_brandCenter$data$bra","_brandCenter$data3","_brandCenter$data3$br","_brandCenter$data$bra2","_brandCenter$data4","_brandCenter$data4$br","_brandCenter$data5","_brandCenter$data5$br","_brandCenter$data5$br2","_brandCenter$data5$br3","_brandCenter$data6","_brandCenter$data6$br","_brandCenter$data6$br2","_brandCenter$data6$br3","_brandCenter$data7","_brandCenter$data7$br","_brandCenter$data7$br2","_brandCenter$data7$br3","_brandCenter$data8","_brandCenter$data8$br","_brandCenter$data8$br2","_brandCenter$data8$br3","_brandCenter$data9","_brandCenter$data9$br","_brandCenter$data9$br2","_brandCenter$data9$br3","_brandCenter$data10","_brandCenter$data10$b","_brandCenter$data10$b2","_brandCenter$data10$b3","_brandCenter$data11","_brandCenter$data11$b","_brandCenter$data11$b2","_brandCenter$data11$b3","_brandCenter$data12","_brandCenter$data12$b","_brandCenter$data12$b2","_brandCenter$data12$b3","brand_center","colour","_brandCenter$data2","_brandCenter$data2$br","_brandCenter$data2$br2","defaultColors","color_code","color_name","only_admin","localStorage","setItem","fonts","find","font_type","font_url","font_name","async","payload","then","error","handleFileSubmit","performApiCall","handleFileChange","event","fontType","file","target","files","fileExtension","name","slice","lastIndexOf","includes","fontUrl","formData","FormData","append","_response$data$data$","commanService","uploadApi","location","uploadFont","handleToggleUploadRemove","colorValidation","colorCode","some","colorNameValidation","handleValidationForAddColorName","editValidation","filter","editColoNameValidation","handleClick","currentTarget","isValidHex","value","test","Boolean","id","gap","CommonDivider","darkGray","is_admin","role","mr","CommonSwitch","checked","onChange","check","mb","fontSize20","flexWrap","toLowerCase","isValid","primaryColor","onMouseEnter","onMouseLeave","IcPlus","strokeWidth","strokeIcon","stroke","Popover","onClose","anchorOrigin","vertical","horizontal","PaperProps","marginBottom","LargeSimpleInput","fullWidth","variant","newHexCode","updatedColors","handleHexCodeChange","errorMessage","startAdornment","onKeyPress","ctrlKey","metaKey","match","newColorName","Array","isArray","loading","darkPrimary","spacing","btnColor","errorColor","IcTrash","DeleteBrandColor","handleClickDelete","_","successToast","message","DeleteFont","Grid","container","item","IcFont","fontSize13px","fontSize12px","getElementById","click","accept","IcUploadFile","icons","msOverflowStyle","scrollbarWidth","UpgradeModel","defaultSettingForBoard","label","boardAndEdit","boardCopy","_currentSubscriptionD","_currentSubscriptionD2","_permission$data","_permission$data$perm","_permission$data2","_permission$data2$per","_permission$data3","_permission$data3$per","_permission$data4","_permission$data4$per","_permission$data5","_permission$data5$per","_permission$data6","_permission$data6$per","_permission$data8","_permission$data8$per","_selectedTeamInfo$dat","_selectedTeamInfo$dat2","_selectedTeamInfo$dat3","_selectedTeamInfo$dat4","_selectedTeamInfo$dat5","_selectedTeamInfo$dat6","_currentSubscriptionD3","_currentSubscriptionD4","_currentSubscriptionD5","_currentSubscriptionD6","_currentSubscriptionD7","_selectedTeamInfo$dat7","_selectedTeamInfo$dat8","_selectedTeamInfo$dat9","_selectedTeamInfo$dat10","_selectedTeamInfo$dat11","_selectedTeamInfo$dat12","_selectedTeamInfo$dat13","_selectedTeamInfo$dat14","_selectedTeamInfo$dat15","_selectedTeamInfo$dat16","sharingSetting","setSharingSetting","boardSharing","editSharing","copySharing","currentSubscriptionData","activeTeam","_state$sidebar","sidebar","currentTeam","selectedTeam","sessionStorage","getItem","selectedTeamId","selectedTeamName","JSON","parse","permission","useGetPermissionQuery","isProfessional","subscriptionData","initialState","enable_team_invite_link","team_invite_admin_only","copying_board_content","default_board_copying","default_setting_for_board_share","invite_to_board_and_edit_share_setting","allState","setAllState","isAccountOwner","selectedTeamInfo","refetch","teamIsFetching","useGetTeamProfileByTeamQuery","skip","_permission$data7","fetchedPermissions","copyingBoardContentRadio","updatePermission","errorInUpdate","updateData","useUpdatePermissionMutation","teamInvitationOnlyRadio","updatePermissionsAPISelect","response","teamId","updatedSettings","unwrap","_error$data","errorToast","fontSize18px","fontSize19","RadioGroup","defaultValue","isAdminSelected","_error$data3","FormControlLabel","control","Radio","ml","disabled","teamInfo","FormGroup","m","newIsChecked","_error$data2","pr","IcUpgrade","btnTextHeight","lineHeight","fontSize15","fontSize16","CustomAutoSelect","options","FormControl","newSelectedOptionCopyBoard","_error$data4","_requestControlData$d","_requestControlData$d2","_requestControlData$d3","iSubmitted","setIsSubmitted","getRequestControlList","requestControlData","requestIsLoading","useGetRequestControlListMutation","requestReject","useRequestRejectMutation","requestApprove","useRequestApproveMutation","tableHeight","setTableHeight","adjustTableHeight","first_name","last_name","flexDirection","Avatar","profile_picture","textTransform","boxSizing","profile_color","split","word","_word$","toUpperCase","join","_row$email_id","email_id","requested_on","localDateFormat","BtnColoredOutlined","borderColor","hoverSx","handleReject","handleApprove","user_id","takeRecord","result","_result$data","_result$error","_result$error$data","status","_result$data2","catch","_result$data3","_result$error2","_result$error2$data","_result$data4","Loader","desc","imgXsWidth","imgXsHeight","TableComponent","UserSectionSidebar","pathname","useLocation","openGroup","setOpenGroup","currentPlan","setCurrentPlan","_useContext","useContext","ModelContext","createNewTeamModal","setCreateNewTeamModal","modelState","_objectWithoutProperties","_excluded","openUpgradeModal","setOpenUpgradeModal","expandedSubChildren","setExpandedSubChildren","_response$data","getApi","getCurrentSubscription","toggleLoadSidebarDocuments","sidebarAccordionList","_currentPlan$subscrip","_currentPlan$subscrip2","_currentPlan$subscrip3","_currentPlan$subscrip4","_currentPlan$subscrip5","freePlanLockedRoutes","isFreePlan","isProPlan","matchChildPaths","Icon","IcWorkspace","route","RightArrow","IcRightSingleArrow","matchPath","subChildren","IcUserCircleOutlined2","IcBrandCenter","premiumBadge","IcSubscriptionOutlined","IcUserVerifiedOutlined","IcRequestControlOutlined","isHidden","IcManageTeam","is_account_owner","badge","child","_sidebarAccordionList","openedGroupKey","group","_group$matchChildPath","className","WorkspaceSidebarDropDown","i","List","_child$matchPath","_child$matchPath2","_child$matchPath3","_child$matchPath4","_child$matchPath5","ListItem","borderRadiusMD","lightPrimary","commonHover","weight500","rotate","Collapse","in","disablePadding","subChild","subIndex","_subChild$matchPath","_subChild$matchPath2","_subChild$matchPath3","_subChild$matchPath4","mx","InviteMultipleUserModel","inviteNewMembers","handleCloseInviteUserModal","handleCloseInviteMember","setInviteNewMembers","hidePermissions","modalTitle","modalSubTitle","showInvitedUser","isUserSettingInvite"],"sourceRoot":""}