{"version":3,"file":"KitsNavComponent--mV210xj.js","sources":["../../../app/javascript/components/MainSidebar/NavComponents/KitsNavComponent.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { NavItem } from \"playbook-ui\";\nimport { linkFormat } from \"../../../utilities/website_sidebar_helper\";\n\nconst currentURL = window.location.pathname + window.location.search;\n\nexport const kitsType = (type) => {\n if (type === null || type === undefined) {\n return \"react\";\n } else {\n return type;\n }\n};\n\nexport const KitsNavItem = ({\n link,\n kitIndex,\n collapsibles,\n category,\n type,\n dark,\n kit,\n isActive,\n setIsActive,\n updateTopLevelNav,\n parentIndex\n}) => {\n const [collapsed] = collapsibles[kitIndex];\n //set up custom toggling\n const handleMainClick = (index, categoryKey) => {\n collapsibles.forEach(([, , setCollapsed], idx) => {\n setIsActive(() => {\n const newIsActive = {};\n newIsActive[`${categoryKey}-${index}`] = true;\n return newIsActive;\n });\n if (idx === index) {\n setCollapsed(false);\n } else {\n setCollapsed(true);\n }\n updateTopLevelNav(parentIndex);\n });\n //return true at end to disable default collapsible behavior\n return true;\n };\n\n //make sure kits nav will stay toggled open when nested item is clicked\n const updateKitsNav = (index) => {\n collapsibles.forEach((collapsible, i) => {\n const [, , setCollapsed] = collapsible;\n if (i !== index) {\n setCollapsed(true);\n } else {\n setCollapsed(false);\n }\n });\n };\n\n //click on nested items\n const handleSubItemClick = (subLinkIndex, sublink, Index) => {\n setIsActive(() => {\n const newIsActive = {};\n newIsActive[`${sublink}-${subLinkIndex}`] = true;\n return newIsActive;\n });\n updateTopLevelNav(parentIndex);\n updateKitsNav(Index);\n };\n\n //click on non-collapsible navitem click\n const handleNonCollapseLinkClick = (link) => {\n setIsActive(() => {\n const newIsActive = {};\n newIsActive[link] = true;\n return newIsActive;\n });\n updateTopLevelNav(parentIndex);\n };\n\n const generateLink = (categoryKey, sublink, type) => {\n if (sublink) {\n const link = `/kits/${sublink}/${kitsType(type)}`;\n return currentURL === link ? \"\" : link;\n } else {\n const link = `/kit_category/${categoryKey}?type=${kitsType(type)}`;\n return currentURL === link ? \"\" : link;\n }\n };\n\n if (typeof link === \"object\") {\n const categoryKey = Object.keys(link)[0];\n const sublinks = link[categoryKey];\n const isActiveCategory = isActive[kitIndex]\n ? true\n : Object.keys(isActive).length === 0\n ? category === categoryKey\n : false;\n\n const hasActiveSublink = link[Object.keys(link)[0]].some(\n (sublink) => sublink === kit\n );\n\n //useState for handling collapsed state\n const [toggleNav, setToggleNav] = useState(\n isActiveCategory || hasActiveSublink ? false : true\n );\n //useEffect to handle toggle to consolidate logic\n useEffect(() => {\n // isActive will always be empty on first render due to rails navigation. Once we move to React router, this code will not be needed\n if (Object.keys(isActive).length === 0) {\n setToggleNav(isActiveCategory || hasActiveSublink ? false : collapsed);\n } else {\n setToggleNav(collapsed);\n }\n }, [collapsed, isActive]);\n\n //click event for right icon\n const handleIconClick = (index) => {\n collapsibles.forEach(([, ,], idx) => {\n if (idx === index) {\n toggleNav === true ? setToggleNav(false) : setToggleNav(true);\n }\n });\n };\n\n const calculateIsActiveCategory = (i, categoryKey, sublink) => {\n if (sublink) {\n return isActive[`${sublink}-${i}`]\n ? true\n : Object.keys(isActive).length === 0\n ? kit === sublink\n : false;\n } else {\n return isActive[`${categoryKey}-${i}`]\n ? true\n : Object.keys(isActive).length === 0\n ? category === categoryKey\n : false;\n }\n };\n\n return (\n handleMainClick(kitIndex, categoryKey)}\n onIconRightClick={() => handleIconClick(kitIndex)}\n paddingY=\"xxs\"\n text={linkFormat(categoryKey)}\n >\n {sublinks.map((sublink, j) => (\n handleSubItemClick(j, sublink, kitIndex)}\n paddingY=\"xxs\"\n text={linkFormat(sublink)}\n />\n ))}\n \n );\n } else {\n return (\n handleNonCollapseLinkClick(link)}\n text={linkFormat(link)}\n paddingY=\"xxs\"\n />\n );\n }\n};\n"],"names":["currentURL","kitsType","type","KitsNavItem","link","kitIndex","collapsibles","category","dark","kit","isActive","setIsActive","updateTopLevelNav","parentIndex","collapsed","handleMainClick","index","categoryKey","setCollapsed","idx","newIsActive","updateKitsNav","collapsible","i","handleSubItemClick","subLinkIndex","sublink","Index","handleNonCollapseLinkClick","generateLink","sublinks","isActiveCategory","hasActiveSublink","toggleNav","setToggleNav","useState","useEffect","handleIconClick","calculateIsActiveCategory","jsx","NavItem","linkFormat","j"],"mappings":"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"}