{"version":3,"sources":["assets/close.svg","assets/addIcon.svg","assets/openAsIcon.svg","assets/Run.svg","assets/Develop.svg","assets/tools.png","assets/Build.svg","assets/Evaluate.svg","assets/run-transparent.svg","assets/build-transparent.svg","assets/develop-transparent.svg","assets/evaluate-transparent.svg","assets/templateIcon.svg","assets/trash.svg","assets/warning.svg","assets/enisaHeader.png","assets/templates-icon.png","helpers/colors.jsx","components/blocks/Button.jsx","components/blocks/Image.jsx","components/blocks/Label.jsx","components/blocks/Text.jsx","components/blocks/View.jsx","helpers/constants.jsx","components/MenuButton.jsx","helpers/dimensionHook.jsx","actions/selectFolder.js","helpers/helpers.jsx","components/NavSitebar.jsx","actions/addTool.js","actions/notification.js","components/ToolModal.jsx","components/Notification.jsx","components/ToolCard.jsx","components/FolderCard.jsx","actions/downloadToolkit.js","components/ToolkitTool.jsx","components/Toolkit.jsx","actions/removeTool.js","helpers/surveyFeatures.jsx","components/SurveyFeature.jsx","components/SurveyCard.jsx","components/AreaContent.jsx","actions/getData.js","components/CardsContent.jsx","components/LabeledButton.jsx","components/CircularContent.jsx","components/StartPage.jsx","actions/downloadGlossary.js","actions/downloadRecomendations.js","components/ContentModalButton.jsx","components/SidebarModals.jsx","components/RoutedFolder.jsx","components/SidebarLabels.jsx","components/SideBar.jsx","components/Container.jsx","reducers/getData.js","reducers/selectFolder.js","reducers/toolkit.js","reducers/notification.js","reducers/index.js","store.js","App.jsx","serviceWorker.js","index.js"],"names":["module","exports","colors","warning","green","orange","purple","lightBlue","blue","navyBlue","darkBlue","darkerBlue","greyWhite","enisaBlue","Button","styled","div","props","themeColor","height","width","color","borderRadius","direction","alignItems","justifyContent","padding","margin","paddingTop","paddingBottom","paddingLeft","paddingRight","marginTop","marginBottom","marginLeft","marginRight","Image","img","cursor","border","Label","small","Text","p","textAlign","fontStyle","fontSize","fontWeight","View","minWidth","minHeight","maxWidth","maxHeight","wrap","position","display","responsiveDimensions","Icons","runIcon","require","developIcon","toolsIcon","buildIcon","evaluateIcon","closeIcon","runTransIcon","buildTransIcon","developTransIcon","evaluateTransIcon","MenuButton","type","buttonText","handleClick","selected","useLocation","pathname","includes","SideButton","isFull","theme","onClick","BackIcon","ButtonIcon","src","ButtonText","ArrowBackIcon","getWindowDimensions","window","innerWidth","innerHeight","useWindowDimensions","useState","windowDimensions","setWindowDimensions","useEffect","handleResize","addEventListener","removeEventListener","selectFolder","selectedFolder","dispatch","setLabelColor","label","transformFlags","flags","length","map","flag","makePaths","arr","forEach","elem","assignElemPath","pathString","path","children","child","id","makeToolkitCart","data","cart","getAllTools","array","item","push","allFlatTools","allTools","setAreaCardColor","area","setAreaChildColor","setAreaIcon","connect","state","description","resetSelectedFolder","location","selectedArea","setSelectedArea","value","areaDetected","isDesktop","history","useHistory","isStartPage","handleNavigate","route","replace","NavContainer","DescriptionContainer","DescriptionContent","dangerouslySetInnerHTML","__html","Fragment","OverviewNav","StyledSelect","onChange","e","target","toLowerCase","MenuItem","OptionContainer","bgColor","CloseIcon","Select","addTool","tool","setNotification","notification","addIcon","TypeIcon","isDefault","addItem","handleNotification","open","onClose","toolData","title","parent","body","areaIcon","setToolModalIcon","StyledModal","ModalCard","ModalHeader","AreaIcon","toUpperCase","BodyContents","ContentRow","key","kind","LinkButton","href","download_url","ButtonsRow","ModalAction","ButtonImage","updatedProduct","itemAdded","handleAdd","a","Modal","closeNotification","notificationText","setNotificationText","notificationTheme","setNotificationTheme","handleClose","StyledSnackbar","anchorOrigin","vertical","horizontal","autoHideDuration","message","action","IconButton","size","aria-label","Snackbar","openIcon","number","setOpen","toolFlags","ContentCard","ProductButton","onEscapeKeyDown","onBackdropClick","_","isEmpty","isLight","navigateFolder","modalData","setModalData","folderFlags","folderIcon","getNephewsCount","filter","nephew","FolderIcon","FolderChild","childData","handleChildClick","FlagsContainer","downloadToolkit","tools","toolkitCart","Axios","post","responseType","then","response","url","URL","createObjectURL","Blob","link","document","createElement","setAttribute","appendChild","click","trashIcon","dangerIcon","ToolkitTool","handleRemove","toolkit","dependencyTool","setDependencyTool","dependencyMet","setDependencyMet","setFadeOut","hasDependency","depends_on","tlpDisclaimer","depTool","find","updatedTool","isDepMet","verifyDepencency","dependency","Tool","DeleteItem","setTimeout","Dependency","strong","fade","exportIcon","closeButton","allData","removeItem","removeTool","checkError","setCheckError","ToolkitButton","Count","StyledDrawer","anchor","ToolkitContent","CloseButton","ToolkitTitle","index","toolId","ExportButton","ExportIcon","Drawer","surveyFeatures","name","initial","developing","defined","managed","optimised","RadioGrouped","handleChange","RadioGroup","RadioOption","control","RadioDot","SurveyFeature","feature","onResultChange","currentResult","setCurrentResult","nextYearResult","setNextYearResult","current","desired","List","ListElement","RadioForm","component","FormLabel","FormControl","FormControlLabel","Radio","ul","li","enisaHeader","ref","useRef","features","surveyData","setSurveyData","desiredData","setDesiredData","surveyPreview","setSurveyPreview","chartData","setChartData","submitError","setSubmitError","chartCaptions","newCaptions","getChartCaptions","isPreview","SurveyForm","SurveyInput","variant","currentPercent","desiredPercent","newSurveyData","newDesiredData","handleFormChange","sameArray","isEqual","Object","keys","sort","meta","handleSubmitResult","RadarView","captions","style","ColorDot","trigger","content","TextField","Dialog","folder","handleFolderNavigation","handleResetNav","areaData","dataChildren","renderChildren","withSurvey","AreaContainer","SectionBreadCrumbs","Title","NavTrace","StyledMasonry","columnClassName","breakpointCols","default","Masonry","Close","config","headers","accept","areas","ContentContainer","AreaBlock","StyledLink","to","BlockTitle","button","toolParent","childWithParent","Link","left","top","SatelliteButton","LabelsContainer","CircularContent","positionedSatellites","items","angle","step","Math","PI","positionedItem","round","containerWidth","cos","containerHeight","sin","setPosition","allChildren","newphews","parentId","newphew","markedChild","getAllChildren","CircleView","CenterView","AreasButton","bottom","right","sat","resetFolderNav","isCircular","CenteredFullView","downloadGlossary","get","downloadRecomendations","ContentModalButton","buttonImg","ModalButtonImg","StyledDialog","scroll","capitalize","LinkTitle","attachment","handleSave","SaveButton","templateIcon","glossary","recommendations","furtherReading","allToolsData","templates","glossaryContent","furtherReadingContent","recommendationsContent","templatesContent","flat","templatesGrouped","groupBy","n","setSelectedFolder","pathnameEdit","substr","searcher","findSelectedFolder","SidebarLabels","SideBar","SidebarContainer","getNewData","res","fetchDataSuccess","catch","error","console","log","ContainerView","hashType","exact","StartPage","render","match","addPathToTools","toolsChildren","getData","toolIndex","indexOf","slice","combineReducers","persistConfig","storage","persistedReducer","persistReducer","rootReducer","initialState","store","createStore","applyMiddleware","thunk","persistor","persistStore","configureStore","App","loading","Boolean","hostname","ReactDOM","StrictMode","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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N5L,GAAI,WACJgB,YACE,gKACF6K,QAAS,CACP,8CACA,uCACA,qBACA,kDAEFC,WAAY,CACV,2CACA,sCACA,qBACA,wDACA,kDAEFC,QAAS,CACP,0DACA,oDACA,wBACA,wDACA,uCAEFC,QAAS,CACP,gCACA,4BACA,sDACA,kBACA,wDACA,uCAEFC,UAAW,CACT,gCACA,sDACA,4BACA,kBACA,oDACA,sFAGJ,CACEL,KAAM,aACN5L,GAAI,WACJgB,YACE,wJACF6K,QAAS,CACP,4CACA,uBAEFC,WAAY,CACV,8CACA,uBAEFC,QAAS,CACP,8FACA,0BACA,6BAEFC,QAAS,CACP,8FACA,+BACA,6BAEFC,UAAW,CACT,8FACA,gCACA,kCAGJ,CACEL,KAAM,cACN5L,GAAI,WACJgB,YAAa,yCACb6K,QAAS,CACP,iDACA,6BACA,kCAEFC,WAAY,CACV,mDACA,4BACA,iCAEFC,QAAS,CACP,0CACA,2FACA,6BAEFC,QAAS,CACP,+DACA,qDACA,kCAEFC,UAAW,CACT,mIACA,oBAGJ,CACEL,KAAM,WACN5L,GAAI,WACJgB,YAAa,uDACb6K,QAAS,CACP,4EAEFC,WAAY,CACV,2HACA,iCAEFC,QAAS,CACP,qIACA,8GACA,iDACA,kDAEFC,QAAS,CACP,oDACA,8DACA,4CACA,wCACA,qDAEFC,UAAW,CACT,wEACA,iGACA,gCACA,6DAGJ,CACEL,KAAM,sBACN5L,GAAI,WACJgB,YAAa,sDACb6K,QAAS,CACP,iEACA,2DAEFC,WAAY,CACV,iDACA,qCACA,6CAEFC,QAAS,CACP,8CACA,qCACA,yCACA,oFAEFC,QAAS,CACP,8CACA,qCACA,+BACA,4EACA,+CAEFC,UAAW,CACT,8CACA,qCACA,sDACA,iDACA,yDAGJ,CACEL,KAAM,6BACN5L,GAAI,WACJgB,YACE,gEACF6K,QAAS,CACP,yBACA,2CACA,aAEFC,WAAY,CACV,yBACA,wEACA,mBAEFC,QAAS,CACP,yBACA,gEACA,0CACA,oDACA,yDACA,iBAEFC,QAAS,CACP,yBACA,qBACA,sCACA,sDACA,8CACA,oDACA,6DACA,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","file":"static/js/main.d13c608e.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/close.c53f9a53.svg\";","module.exports = __webpack_public_path__ + \"static/media/addIcon.aa0d8037.svg\";","module.exports = __webpack_public_path__ + \"static/media/openAsIcon.8d93eb61.svg\";","module.exports = __webpack_public_path__ + \"static/media/Run.20e76b82.svg\";","module.exports = __webpack_public_path__ + \"static/media/Develop.598f0fbf.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/Build.f0253307.svg\";","module.exports = __webpack_public_path__ + \"static/media/Evaluate.50722564.svg\";","module.exports = __webpack_public_path__ + \"static/media/run-transparent.335be421.svg\";","module.exports = __webpack_public_path__ + \"static/media/build-transparent.09fff0c2.svg\";","module.exports = __webpack_public_path__ + \"static/media/develop-transparent.8550b9fd.svg\";","module.exports = __webpack_public_path__ + \"static/media/evaluate-transparent.60209441.svg\";","module.exports = __webpack_public_path__ + \"static/media/templateIcon.8a7a3db1.svg\";","module.exports = __webpack_public_path__ + \"static/media/trash.0aadabe2.svg\";","module.exports = __webpack_public_path__ + \"static/media/warning.71bb5432.svg\";","module.exports = __webpack_public_path__ + \"static/media/enisaHeader.e6251b38.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAB+0lEQVRoge2azUocQRSFj0YUIeswMIpZZeciKzH6YNlkp46SB3AdwbxAshcyCVEQY0QY3Yig48JXiOHLwhscxvnprq7bXWh/0NDT1L33nOmquT10SU4Ar4HPwK0du8CCVz0XgDngmsdcAc2q9WUG2DbhX4CmHV/t2nbZYqaBLeBmwDeblWZPvvkCebpAC5gOMbJZoDDAtwE52wVzboQY6VrwcoaxAATUyBQHvLOh3bw1conzNpJl7FTe4uOKxcyXh8lIeb4XiG1H0jCY0OnixTg9se5I5dRGUqM2khq1EQ+ASSBIUzJGgFlJh5LOQswkY0TSmqS3kv5EzVpmZweWgTvgL7AaVc+wQOAlcJn1DwTQ7os/Ak6Ahn2eBc5t7Me8ev5TxtTqL/5C0qKkPTOzJumNpDNJH+JXd5paQAPoWPoLm053wJKLHs81ArwCTnumX8tNj/ditztzYmtmxk2Pt5G8pLDYS6E2khq1kVD6O7tdawCHwE+Pgl4N8bel7piB3gZ5BExE1VNSZ+/0nTdGxMU1QsGHxgFmxprIYqSKh8ZyefJTqyiMXuzH0fU4GjkAfvH45/cY2I+ux8tIKCks9lKojaRGbSQ1noWRG+n+HXdJWoYCrNjp0Pfso15P70h6L+lHQu3kU+4I7veitHjYAVEl18A6IXtRairiHwq7xG7eQPgsAAAAAElFTkSuQmCC\"","const colors = {\n warning: \"#c30734\",\n green: \"#55a75d\",\n orange: \"#fd6500\",\n purple: \"#6752ab\",\n lightBlue: \"#1a61b5\",\n blue: \"#083c7b\",\n navyBlue: \"#002149\",\n darkBlue: \"#00152c\",\n darkerBlue: \"#000C29\",\n greyWhite: \"#EFF2F7\",\n enisaBlue: '#004f9f'\n};\n\nexport default colors;\n","import React from 'react'\nimport styled from 'styled-components';\nimport colors from '../../helpers/colors';\n\nconst Button = styled.div`\n background-color: ${props => props.themeColor ? props.themeColor : colors.blue};\n height: ${props => props.height};\n width: ${props => props.width};\n text-align: center;\n\n\n cursor: pointer;\n color: ${props=> props.color? props.color : \"white\"};\n\n border-radius: ${props => props.borderRadius};\n\n display: flex;\n flex-direction: ${props => props.direction};\n align-items: ${props => props.alignItems ? props.alignItems : \"center\"};\n justify-content: ${props => props.justifyContent? props.justifyContent : 'center'};\n\n padding: ${props => props.padding};\n margin: ${props => props.margin};\n\n padding-top: ${props => props.paddingTop};\n padding-bottom: ${props => props.paddingBottom};\n padding-left: ${props => props.paddingLeft};\n padding-right: ${props => props.paddingRight};\n\n margin-top: ${props => props.marginTop};\n margin-bottom: ${props => props.marginBottom};\n margin-left: ${props => props.marginLeft};\n margin-right: ${props => props.marginRight};\n \n`\nexport default Button;","import React from 'react'\nimport styled from 'styled-components';\n\nconst Image = styled.img`\n height: ${props => props.height};\n width: ${props => props.width};\n cursor: ${props => props.cursor};\n\n border: ${props => props.border ? props.border : 'none'};\n\n margin: ${props => props.margin};\n\n margin-top: ${props => props.marginTop};\n margin-bottom: ${props => props.marginBottom};\n margin-left: ${props => props.marginLeft};\n margin-right: ${props => props.marginRight};\n \n`\nexport default Image;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Label = styled.div`\n height: ${(props) => (props.small ? \"18px\" : \"25px\")};\n width: ${(props) => (props.small ? \"18px\" : \"25px\")};;\n font-size: ${(props) => (props.small ? \"8px\" : \"10px\")};;\n\n display: flex;\n\n justify-content: center;\n\n align-items: center;\n border-radius: 30px;\n color: white;\n\n background-color: ${(props) => props.themeColor};\n\n margin: ${(props) => props.margin};\n\n margin-top: ${(props) => props.marginTop};\n margin-bottom: ${(props) => props.marginBottom};\n margin-left: ${(props) => props.marginLeft};\n margin-right: ${(props) => props.marginRight};\n\n color: ${(props) => props.color};\n font-weight: 700;\n`;\nexport default Label;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Text = styled.p`\n height: ${(props) => props.height};\n width: ${(props) => props.width};\n cursor: ${(props) => props.cursor};\n text-align: ${(props) => props.textAlign};\n\n font-style: ${(props) => props.fontStyle};\n\n border: ${(props) => (props.border ? props.border : \"none\")};\n\n margin: ${(props) => props.margin};\n\n margin-top: ${(props) =>\n props.marginTop ? props.marginTop : \"0\"} !important;\n margin-bottom: ${(props) =>\n props.marginBottom ? props.marginBottom : \"0\"} !important;\n \n margin-left: ${(props) => props.marginLeft};\n margin-right: ${(props) => props.marginRight};\n\n padding: ${(props) => props.padding};\n\n padding-top: ${(props) => props.paddingTop};\n padding-bottom: ${(props) => props.paddingBottom};\n padding-left: ${(props) => props.paddingLeft};\n padding-right: ${(props) => props.paddingRight};\n\n font-size: ${(props) => props.fontSize};\n\n color: ${(props) => props.color};\n font-weight: ${(props) => props.fontWeight};\n`;\nexport default Text;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst View = styled.div`\n background-color: ${(props) => props.themeColor};\n height: ${(props) => props.height};\n width: ${(props) => props.width};\n\n min-width: ${(props) => props.minWidth};\n min-height: ${(props) => props.minHeight};\n\n max-width: ${(props) => props.maxWidth};\n max-height: ${(props) => props.maxHeight};\n\n flex-wrap: ${(props) => props.wrap};\n\n border: ${(props) => props.border};\n position: ${props=> props.position};\n\n border-radius: ${(props) => props.borderRadius};\n\n display: ${(props) => props.display};\n flex-direction: ${(props) => props.direction};\n align-items: ${(props) => (props.alignItems ? props.alignItems : \"\")};\n justify-content: ${(props) => props.justifyContent};\n\n padding: ${(props) => props.padding};\n margin: ${(props) => props.margin};\n\n padding-top: ${(props) => props.paddingTop};\n padding-bottom: ${(props) => props.paddingBottom};\n padding-left: ${(props) => props.paddingLeft};\n padding-right: ${(props) => props.paddingRight};\n\n margin-top: ${(props) => props.marginTop};\n margin-bottom: ${(props) => props.marginBottom};\n margin-left: ${(props) => props.marginLeft};\n margin-right: ${(props) => props.marginRight};\n`;\nexport default View;\n","export const responsiveDimensions = {\n monitor: 1170,\n tablet: 600,\n phone: 400,\n};\n\nexport const Icons = {\n runIcon: require(\"../assets/Run.svg\"),\n developIcon: require(\"../assets/Develop.svg\"),\n toolsIcon: require(\"../assets/tools.png\"),\n buildIcon: require(\"../assets/Build.svg\"),\n evaluateIcon: require(\"../assets/Evaluate.svg\"),\n closeIcon: require(\"../assets/close.svg\"),\n runTransIcon: require(\"../assets/run-transparent.svg\"),\n buildTransIcon: require(\"../assets/build-transparent.svg\"),\n developTransIcon: require(\"../assets/develop-transparent.svg\"),\n evaluateTransIcon: require(\"../assets/evaluate-transparent.svg\"),\n};\n","import React from \"react\";\nimport Image from \"./blocks/Image\";\nimport Button from \"./blocks/Button\";\nimport Text from \"./blocks/Text\";\n\nimport styled from \"styled-components\";\n\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport { useLocation } from \"react-router-dom\";\nimport { Icons } from \"../helpers/constants\";\n\nconst MenuButton = ({ type, buttonText, color, handleClick }) => {\n const location = useLocation().pathname;\n const selected = location.includes(`/${type}`);\n\n\n return (\n handleClick()}>\n {type === \"back\" && }\n {type === \"run\" && }\n {type === \"build\" && }\n {type === \"develop\" && }\n {type === \"evaluate\" && }\n {buttonText}\n \n );\n};\n\nexport default MenuButton;\n\nconst SideButton = styled(Button)`\n padding: 5px 20px;\n border-radius: ${(props) => (props.isFull ? \"50px\" : \"100px 0 0 100px\")};\n width: ${(props) => (props.isFull ? \"170px\" : \"130px\")};\n padding-right: ${(props) => (props.isFull ? \"10px\" : \"\")};\n height: 50px;\n font-size: 13px;\n margin: 5px 0;\n position: relative;\n\n background-color: ${(props) => props.theme};\n\n ${({ isFull }) =>\n !isFull &&\n `\n right: 15px;\n `}\n`;\n\nconst BackIcon = styled(ArrowBackIcon)`\n padding: 12px;\n border-radius: 100px;\n position: absolute;\n left: 5px;\n`;\n\nconst ButtonIcon = styled(Image)`\n height: 50px;\n position: absolute;\n left: 5px;\n`;\n\nconst ButtonText = styled(Text)`\n font-size: 15px;\n width: 80px;\n margin-left: 40px;\n`;\n","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return windowDimensions;\n}","export default function selectFolder(selectedFolder) {\n return (dispatch) =>\n dispatch({\n type: \"SELECT_FOLDER\",\n selectedFolder,\n });\n}\n","import colors from \"./colors\";\nimport { Icons } from \"./constants\";\n\nexport const setLabelColor = (label) => {\n switch (label) {\n case \"N\":\n return colors.green;\n case \"E\":\n return colors.orange;\n case \"TLP\":\n return colors.purple;\n default:\n return \"\";\n }\n};\n\nexport const transformFlags = (flags) => {\n const newFlags =\n flags && flags.length > 0\n ? flags.map((flag) => {\n if (flag === \"established\") return \"E\";\n if (flag === \"new\") return \"N\";\n if (flag === \"tlp\") return \"TLP\";\n })\n : \"\";\n\n return newFlags;\n};\n\nexport const makePaths = (arr) => {\n function assignElemPath(elem, pathString) {\n elem.path = pathString;\n\n if (elem.children && elem.children.length) {\n elem.children &&\n elem.children.forEach((child) => {\n assignElemPath(child, `${elem.path}/${child.id}`);\n });\n }\n }\n\n arr &&\n arr.forEach((elem) => {\n assignElemPath(elem, elem.id);\n });\n return arr;\n};\n\nexport const makeToolkitCart = (data) => {\n var cart = [];\n\n const getAllTools = (array) => {\n array.forEach((item) => {\n if (item.type === \"tool\") {\n cart.push(item.path);\n }\n if (item.type === \"folder\") {\n getAllTools(item.children);\n }\n });\n return cart;\n };\n\n getAllTools(data);\n return cart;\n};\n\nexport const allFlatTools = (data) => {\n var allTools = [];\n\n const getAllTools = (array) => {\n array.forEach((item) => {\n if (item.type === \"tool\") {\n allTools.push(item);\n }\n if (item.type === \"folder\") {\n getAllTools(item.children);\n }\n });\n return allTools;\n };\n\n getAllTools(data);\n return allTools;\n};\n\nexport const setAreaCardColor = (area) => {\n switch (area) {\n case \"build\":\n return colors.lightBlue;\n case \"run\":\n return colors.blue;\n case \"develop\":\n return colors.darkBlue;\n case \"evaluate\":\n return colors.navyBlue;\n default:\n return colors.blue;\n }\n};\n\nexport const setAreaChildColor = (area) => {\n switch (area) {\n case \"build\":\n return colors.blue;\n case \"run\":\n return colors.navyBlue;\n case \"evaluate\":\n return colors.darkBlue;\n case \"develop\":\n return colors.darkerBlue;\n default:\n return \"\";\n }\n};\n\nexport const setAreaIcon = (path) => {\n if (path.includes(\"build/\")) return Icons.buildIcon;\n if (path.includes(\"run/\")) return Icons.runIcon;\n if (path.includes(\"develop/\")) return Icons.developIcon;\n if (path.includes(\"evaluate/\")) return Icons.evaluateIcon;\n};\n\nexport const setToolModalIcon = (path) => {\n if (path.includes(\"run\")) {\n return Icons.runIcon;\n }\n if (path.includes(\"build\")) {\n return Icons.buildIcon;\n }\n if (path.includes(\"develop\")) {\n return Icons.developIcon;\n }\n if (path.includes(\"evaluate\")) {\n return Icons.evaluateIcon;\n }\n};\n\nexport const findSelectedFolder = (path, data) => {\n var selectedFolder = {};\n const searcher = (data) => {\n data.forEach((item) => {\n if (item.path === path) {\n selectedFolder = item;\n }\n if (item.path !== path && item.children) {\n searcher(item.children);\n }\n });\n };\n searcher(data);\n return selectedFolder;\n};\n","import React, { useState, useEffect } from \"react\";\nimport MenuButton from \"../components/MenuButton\";\nimport colors from \"../helpers/colors\";\nimport { Label, Text, View, Image } from \"./blocks/index\";\nimport { useHistory, useLocation, Link } from \"react-router-dom\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { connect } from \"react-redux\";\nimport styled from \"styled-components\";\nimport CloseIcon from \"@material-ui/icons/Close\";\n\nimport useWindowDimensions from \"../helpers/dimensionHook\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport selectFolder from \"../actions/selectFolder\";\nimport { Icons, responsiveDimensions } from \"../helpers/constants\";\nimport { setAreaCardColor } from \"../helpers/helpers\";\n\nconst NavSitebar = ({ resetSelectedFolder, selectedFolder, description }) => {\n const location = useLocation();\n\n const { height, width } = useWindowDimensions();\n\n const detectLocation = (value) => {\n if (value.includes(\"/run\")) {\n return \"RUN\";\n }\n if (value.includes(\"/develop\")) {\n return \"DEVELOP\";\n }\n if (value.includes(\"/evaluate\")) {\n return \"EVALUATE\";\n }\n if (value.includes(\"/build\")) {\n return \"BUILD\";\n }\n };\n\n const [selectedArea, setSelectedArea] = useState(\"\");\n\n useEffect(() => {\n const areaDetected = detectLocation(location.pathname);\n setSelectedArea(areaDetected);\n }, [location, selectedArea]);\n\n const isDesktop = width > responsiveDimensions.monitor;\n\n const history = useHistory();\n\n const isStartPage = location.pathname === \"/\";\n\n const handleNavigate = (route) => {\n history.replace(\"\");\n history.replace(route);\n };\n\n const onSelectArea = (area) => {\n handleNavigate(area.toLowerCase());\n };\n return (\n \n \n {isStartPage && (\n \n )}\n {isStartPage && (\n \n \n \n \n = New ISAC\n \n \n \n \n \n = Established ISAC\n \n \n \n )}\n \n {!isStartPage && isDesktop && (\n \n handleNavigate(\"/\")}\n />\n handleNavigate(\"build\")}\n />\n handleNavigate(\"run\")}\n />\n handleNavigate(\"evaluate\")}\n />\n handleNavigate(\"develop\")}\n />\n \n )}\n {!isStartPage && !isDesktop && (\n \n handleNavigate(\"/\")}>\n \n OVERVIEW\n \n onSelectArea(e.target.value)}\n theme={\n selectedArea\n ? setAreaCardColor(selectedArea.toLowerCase())\n : colors.blue\n }\n value={selectedArea ? selectedArea : \"\"}\n >\n \n \n \n RUN\n \n \n \n \n \n BUILD\n \n \n \n \n \n DEVELOP\n \n \n \n \n \n EVALUATE\n \n \n \n \n )}\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n selectedFolder: state.selectedFolder,\n description: state.data ? state.data.description : \"\",\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n resetSelectedFolder: () => dispatch(selectFolder(\"\")),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavSitebar);\n\nconst DescriptionContent = styled.div`\n font-size: 14px;\n margin-top: 20px;\n`;\n\nconst DescriptionContainer = styled(View)`\n padding: 0 40px;\n\n @media (max-width: 800px) {\n padding: 0;\n }\n @media (max-width: ${responsiveDimensions.tablet}px) {\n padding: 0 40px;\n }\n`;\n\nconst Close = styled(CloseIcon)`\n position: absolute;\n right: 5px;\n`;\n\nconst ButtonIcon = styled(Image)`\n height: 40px;\n left: 5px;\n margin-right: 10px;\n`;\n\nconst OptionContainer = styled(View)`\n display: flex;\n align-items: center;\n width: 100%;\n background-color: ${(props) => props.bgColor};\n`;\n\nconst StyledSelect = styled(Select)`\n && {\n cursor: pointer;\n outline: none;\n font-size: 18px;\n width: 88%;\n padding: 5px 20px;\n border-radius: 20px;\n border: none;\n color: white;\n height: 50px;\n background-color: ${(props) => (props.theme ? props.theme : colors.blue)};\n position: relative;\n\n color: white;\n align-items: center;\n display: flex;\n justify-content: center;\n }\n &:before,\n :after {\n content: none !important;\n border-bottom: none !important;\n }\n svg {\n color: white !important;\n font-size: 40px;\n top: 6px;\n }\n`;\n\nconst ButtonText = styled(Text)`\n font-size: 18px;\n`;\n\nconst BackIcon = styled(ArrowBackIcon)`\n padding: 10px;\n margin-right: 10px;\n border-radius: 100px;\n`;\n\nconst OverviewNav = styled(View)`\n padding: 5px 20px;\n border-radius: 20px;\n width: 80%;\n height: 40px;\n font-size: 13px;\n margin: 5px 0;\n position: relative;\n color: white;\n display: flex;\n align-items: center;\n cursor: pointer;\n\n background-color: ${colors.warning};\n`;\n\nconst NavContainer = styled(View)`\n padding-top: 10px;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n","export default function addTool(tool) {\n return (dispatch) =>\n dispatch({\n type: \"ADD_TOOL\",\n tool,\n });\n }\n ","export default function setNotification(notification) {\n return (dispatch) =>\n dispatch({\n type: \"NOTIFICATION\",\n notification,\n });\n }\n ","import React from \"react\";\nimport { View, Text, Image, Button } from \"./blocks\";\nimport Modal from \"@material-ui/core/Modal\";\nimport styled from \"styled-components\";\nimport colors from \"../helpers/colors\";\nimport SaveOutlinedIcon from \"@material-ui/icons/SaveOutlined\";\nimport { connect } from \"react-redux\";\nimport addTool from \"../actions/addTool\";\nimport { setToolModalIcon } from \"../helpers/helpers\";\n\nimport PictureAsPdfOutlinedIcon from \"@material-ui/icons/PictureAsPdfOutlined\";\nimport DescriptionOutlinedIcon from \"@material-ui/icons/DescriptionOutlined\";\nimport SlideshowOutlinedIcon from \"@material-ui/icons/SlideshowOutlined\";\nimport TableChartOutlinedIcon from \"@material-ui/icons/TableChartOutlined\";\nimport AttachFileOutlinedIcon from \"@material-ui/icons/AttachFileOutlined\";\nimport setNotification from \"../actions/notification\";\nimport { Icons } from \"../helpers/constants\";\n\nconst { addIcon, closeIcon } = Icons;\n\nconst TypeIcon = ({ type }) => {\n const allTypes = [\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ];\n\n const isDefault = !allTypes.includes(type);\n\n return (\n \n {type === \"application/pdf\" && }\n {type === \"application/msword\" && }\n {type ===\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" && (\n \n )}\n {type === \"application/vnd.ms-powerpoint\" && }\n {type ===\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\" && (\n \n )}\n {type === \"application/vnd.ms-excel\" && }\n {type ===\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" && (\n \n )}\n {isDefault && }\n \n );\n};\n\nconst ToolModal = ({\n open,\n onClose,\n toolData,\n addItem,\n handleNotification,\n}) => {\n const { title, parent, body, children, path } = toolData;\n\n const areaIcon = setToolModalIcon(path);\n\n const handleAdd = () => {\n const updatedProduct = { ...toolData, parent };\n const notification = { type: \"success\", itemAdded: title };\n handleNotification(notification);\n addItem(updatedProduct);\n };\n\n const handleClose = () => {\n onClose();\n };\n\n return (\n onClose()}>\n \n \n \n ISAC\n \n - Information Sharing and Analysis Center\n \n \n {parent.toUpperCase()}\n \n {title.toUpperCase()}\n \n \n {children.length > 0 && (\n \n \n Attachments\n \n \n {children.map((item) => (\n \n \n \n {item.title}\n \n Type: {item.kind.toUpperCase()}\n \n \n \n \n SAVE AS\n \n \n ))}\n \n \n )}\n \n handleClose()}>\n \n \n CLOSE\n \n \n handleAdd()}>\n \n \n ADD TO TOOLKIT\n \n \n \n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n addItem: (tool) => dispatch(addTool(tool)),\n handleNotification: (notification) =>\n dispatch(setNotification(notification)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ToolModal);\n\nconst ButtonImage = styled(Image)`\n position: absolute;\n left: 5px;\n`;\n\nconst ModalAction = styled(View)`\n background-color: white;\n padding: 15px;\n color: black;\n width: 120px;\n border-radius: 50px;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n cursor: pointer;\n margin: 5px;\n border: 1px solid black;\n position: relative;\n`;\n\nconst ButtonsRow = styled(View)`\n display: flex;\n justify-content: space-around;\n`;\n\nconst SaveButton = styled(Button)`\n width: 100px;\n background-color: white;\n border: 1px solid black;\n border-radius: 30px;\n color: black;\n font-size: 12px;\n`;\n\nconst ContentRow = styled(View)`\n display: flex;\n border-top: 1px solid ${colors.navyBlue};\n`;\n\nconst LinkButton = styled.a`\n text-decoration: none;\n color: black;\n border: 1px solid black;\n width: 100px;\n height: 25px;\n text-align: center;\n font-size: 12px;\n border-radius: 50px;\n align-items: center;\n justify-content: center;\n display: flex;\n\n margin-left: auto;\n`;\n\nconst AreaIcon = styled(Image)`\n border: none;\n height: 40px;\n position: absolute;\n top: 55px;\n`;\n\nconst ModalCard = styled(View)`\n background-color: white;\n padding: 20px 50px;\n width: 700px;\n position: relative;\n`;\n\nconst StyledModal = styled(Modal)`\n align-items: center;\n justify-content: center;\n display: flex;\n`;\n\nconst BodyContents = styled.div`\n font-size: 14px;\n\n ul {\n list-style: disc !important;\n }\n`;\n\nconst ModalHeader = styled(View)`\n display: flex;\n align-items: center;\n justify-content: center;\n\n font-size: 15px;\n margin-bottom: 40px;\n border-bottom: 1px solid ${colors.blue};\n padding-bottom: 30px;\n`;\n","import React, { useState, useEffect } from \"react\";\nimport { Snackbar, Button, IconButton } from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { connect } from \"react-redux\";\nimport setNotification from \"../actions/notification\";\nimport styled from \"styled-components\";\nimport colors from \"../helpers/colors\";\n\nconst Notification = ({ open, notification, closeNotification }) => {\n const [notificationText, setNotificationText] = useState();\n const [notificationTheme, setNotificationTheme] = useState(colors.blue);\n\n const handleClose = () => {\n closeNotification();\n };\n\n useEffect(() => {\n if (notification.type === \"success\") {\n setNotificationText(`Successfuly added ${notification.itemAdded}!`);\n setNotificationTheme(colors.green);\n }\n });\n\n return (\n \n \n \n \n \n }\n />\n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n notification: state.notification,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n closeNotification: () => dispatch(setNotification({})),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Notification);\n\nconst StyledSnackbar = styled(Snackbar)`\n .MuiSnackbarContent-root {\n background-color: ${(props) => props.theme};\n font-size: 15px;\n }\n`;\n","import React, { useState } from \"react\";\nimport colors from \"../helpers/colors\";\nimport View from \"./blocks/View\";\nimport Text from \"./blocks/Text\";\nimport styled from \"styled-components\";\nimport Label from \"./blocks/Label\";\nimport { setLabelColor, transformFlags } from \"../helpers/helpers\";\nimport Image from \"./blocks/Image\";\nimport { connect } from \"react-redux\";\nimport addTool from \"../actions/addTool\";\nimport ToolModal from \"./ToolModal\";\nimport Notification from \"./Notification\";\nimport setNotification from \"../actions/notification\";\nimport _ from \"lodash\";\n\nconst addIcon = require(\"../assets/addIcon.svg\");\nconst openIcon = require(\"../assets/openAsIcon.svg\");\nconst templateIcon = require(\"../assets/templateIcon.svg\");\n\nconst ToolCard = ({\n flags,\n title,\n body,\n number,\n data,\n addItem,\n parent,\n handleNotification,\n notification,\n}) => {\n const [open, setOpen] = useState(false);\n const toolFlags = transformFlags(flags);\n\n const handleAdd = () => {\n const updatedProduct = { ...data, parent };\n addItem(updatedProduct);\n const notification = { type: \"success\", itemAdded: title };\n handleNotification(notification);\n };\n\n const handleView = () => {\n setOpen(true);\n };\n\n\n const handleCloseNotification = () => {\n handleNotification({});\n };\n\n return (\n \n \n \n {title.toUpperCase()}\n \n \n {toolFlags &&\n toolFlags.map((flag, id) => (\n \n ))}\n \n \n \n \n handleAdd()}>\n \n \n ADD TO TOOLKIT\n \n \n handleView()}>\n \n \n VIEW\n \n \n \n setOpen(false)}\n onBackdropClick={() => setOpen(false)}\n open={open}\n onClose={() => setOpen(false)}\n />\n {!_.isEmpty(notification) && (\n handleCloseNotification()}\n />\n )}\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n notification: state.notification,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n addItem: (tool) => dispatch(addTool(tool)),\n handleNotification: (notification) =>\n dispatch(setNotification(notification)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ToolCard);\n\nconst ContentCard = styled(View)`\n margin: 5px;\n padding: 15px 15px 30px 40px;\n background-color: ${(props) =>\n props.isLight ? colors.lightBlue : colors.enisaBlue};\n color: white;\n border-radius: 20px;\n`;\n\nconst ProductButton = styled(View)`\n background-color: white;\n padding: 5px;\n color: black;\n width: 120px;\n border-radius: 50px;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n cursor: pointer;\n margin: 5px;\n`;\n\nconst BodyContents = styled.div`\n font-size: 14px;\n margin-top: 30px;\n`;\n","import React, { useState } from \"react\";\nimport colors from \"../helpers/colors\";\nimport View from \"./blocks/View\";\nimport Text from \"./blocks/Text\";\nimport styled from \"styled-components\";\nimport Label from \"./blocks/Label\";\nimport {\n setLabelColor,\n transformFlags,\n allFlatTools,\n setAreaIcon,\n} from \"../helpers/helpers\";\nimport Image from \"./blocks/Image\";\nimport addTool from \"../actions/addTool\";\nimport { connect } from \"react-redux\";\nimport ToolModal from \"./ToolModal\";\nimport selectFolder from \"../actions/selectFolder\";\nimport Notification from \"./Notification\";\nimport setNotification from \"../actions/notification\";\nimport _ from \"lodash\";\nimport BubbleChartOutlinedIcon from \"@material-ui/icons/BubbleChartOutlined\";\n\nconst addIcon = require(\"../assets/addIcon.svg\");\n\nconst FolderCard = ({\n flags,\n title,\n body,\n children,\n handleClick,\n number,\n addItem,\n navigateFolder,\n parent,\n notification,\n handleNotification,\n data,\n}) => {\n const [modalData, setModalData] = useState(\"\");\n\n const folderFlags = transformFlags(flags);\n const isIdOdd = number % 2 !== 0;\n\n const handleAdd = () => {\n const allFolderTools = allFlatTools(children);\n allFolderTools.forEach((tool) => addItem({ ...tool, parent: title }));\n const notification = { type: \"success\", itemAdded: title };\n handleNotification(notification);\n };\n\n const handleChildClick = (child) => {\n const childData = { ...child, parent: title };\n\n if (child.type === \"tool\") {\n setModalData(childData);\n }\n if (child.type === \"folder\") {\n handleClick();\n }\n };\n\n const folderIcon = setAreaIcon(data.path);\n\n const getNephewsCount = (child) => {\n const nephewsCount = child.children.filter(\n (nephew) => nephew.type === (\"tool\" || \"folder\")\n ).length;\n\n return nephewsCount;\n };\n\n return (\n \n \n \n \n {title.toUpperCase()}\n \n \n {folderFlags &&\n folderFlags.map((flag, id) => (\n \n ))}\n \n \n \n \n {children &&\n children.length > 0 &&\n children.map((child) => (\n handleChildClick(child)} key={child.id}>\n \n {child.flags &&\n child.flags.length > 0 &&\n transformFlags(child.flags).map((flag, id) => (\n \n ))}\n \n \n {child.title}\n \n {child.children &&\n child.children.length > 0 &&\n getNephewsCount(child) > 0 && (\n \n \n {getNephewsCount(child)}\n \n )}\n \n ))}\n \n {children.length > 0 && (\n \n handleAdd()}>\n \n \n ADD TO TOOLKIT\n \n \n handleClick()}>\n \n VIEW ALL TOOLS\n \n \n \n )}\n {modalData && (\n setModalData(\"\")}\n onBackdropClick={() => setModalData(\"\")}\n open={modalData ? true : false}\n onClose={() => setModalData(\"\")}\n />\n )}\n {!_.isEmpty(notification) && (\n handleNotification({})}\n />\n )}\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n notification: state.notification,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n addItem: (tool) => dispatch(addTool(tool)),\n handleNotification: (notification) =>\n dispatch(setNotification(notification)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FolderCard);\n\nconst FlagsContainer = styled(View)`\n position: absolute;\n left: 10px;\n display: flex;\n flex-direction: column;\n`;\n\nconst ContentCard = styled(View)`\n margin: 5px;\n padding: 15px 15px 30px 40px;\n background-color: ${(props) =>\n props.isLight ? colors.lightBlue : colors.enisaBlue};\n color: white;\n border-radius: 20px;\n`;\n\nconst ProductButton = styled(View)`\n background-color: white;\n padding: 5px;\n color: black;\n width: 120px;\n border-radius: 50px;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n cursor: pointer;\n margin: 5px;\n`;\n\nconst FolderChild = styled(View)`\n font-size: 14px;\n width: 160px;\n min-height: 50px;\n border: 1px solid white;\n border-radius: 50px;\n align-items: center;\n justify-content: center;\n display: flex;\n margin: 5px;\n cursor: pointer;\n position: relative;\n`;\n\nconst BodyContents = styled.div`\n font-size: 14px;\n margin-top: 30px;\n`;\n\nconst FolderIcon = styled(Image)`\n width: 40px;\n margin-right: 20px;\n`;\n","import Axios from \"axios\";\nimport { makeToolkitCart } from \"../helpers/helpers\";\n\nconst downloadToolkit = (tools) => {\n const toolkitCart = makeToolkitCart(tools);\n\n Axios.post(\n \"./download_zipfile\",\n {\n tools: toolkitCart,\n },\n { responseType: \"blob\" }\n ).then((response) => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"MyTools.zip\");\n document.body.appendChild(link);\n link.click();\n });\n};\n\nexport default downloadToolkit;\n","import React, { useState, useEffect } from \"react\";\nimport {\n transformFlags,\n setLabelColor,\n makeToolkitCart,\n} from \"../helpers/helpers\";\nimport { Label, View, Text, Image } from \"./blocks\";\nimport styled from \"styled-components\";\nimport colors from \"../helpers/colors\";\nimport ToolModal from \"./ToolModal\";\n\nconst trashIcon = require(\"../assets/trash.svg\");\nconst dangerIcon = require(\"../assets/warning.svg\");\n\nconst ToolkitTool = ({ handleRemove, tool, allTools, toolkit }) => {\n const [dependencyTool, setDependencyTool] = useState(\"\");\n const [dependencyMet, setDependencyMet] = useState(\"\");\n\n const [modalData, setModalData] = useState(\"\");\n\n const [fadeOut, setFadeOut] = useState(false);\n\n const hasDependency = tool.depends_on ? true : false;\n\n const toolFlags = transformFlags(tool.flags);\n\n const tlpDisclaimer = toolFlags.includes(\"TLP\");\n\n useEffect(() => {\n if (hasDependency) {\n const depTool = allTools.find((item) => item.path === tool.depends_on);\n const updatedTool = { ...depTool, parent: tool.parent };\n setDependencyTool(updatedTool);\n\n const isDepMet = !verifyDepencency(toolkit, tool.depends_on);\n setDependencyMet(isDepMet);\n }\n }, [toolkit]);\n\n const verifyDepencency = (data, dependency) => {\n const flattenedTools = makeToolkitCart(data);\n\n const dependencyStatus = flattenedTools.includes(dependency);\n return dependencyStatus;\n };\n\n const handleDepModal = () => {\n setModalData(dependencyTool);\n };\n\n const handleRemoveBehav = (id) => {\n setFadeOut(true);\n setTimeout(handleRemove(id), 3000);\n };\n\n return (\n \n \n \n \n {tool.parent.toUpperCase()}\n \n {tool.title}\n \n {tool.flags &&\n toolFlags.map((label, id) => (\n \n ))}\n handleRemoveBehav(tool.id)}\n src={trashIcon}\n />\n \n {tlpDisclaimer && (\n \n \n \n \n \n Remember that you must specify the TLP level of the document you are\n creating\n \n \n )}\n {hasDependency && dependencyMet && (\n \n \n \n Mandatory: Don't forget to add\n handleDepModal()}>\n {\" \"}\n {dependencyTool.title}{\" \"}\n \n to your shopping cart.\n \n \n )}\n {modalData && (\n setModalData(\"\")}\n onBackdropClick={() => setModalData(\"\")}\n open={modalData ? true : false}\n onClose={() => setModalData(\"\")}\n />\n )}\n \n );\n};\n\nexport default ToolkitTool;\n\nconst Dependency = styled.strong`\n cursor: pointer;\n`;\n\nconst DeleteItem = styled(Image)`\n width: 30px;\n margin-left: auto;\n cursor: pointer;\n`;\n\nconst Tool = styled(View)`\n border-bottom: 1px solid ${colors.navyBlue};\n margin: 20px 0;\n padding-bottom: 10px;\n display: flex;\n flex-direction: column;\n\n ${({ fade }) =>\n fade &&\n `\n@keyframes fadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n`}\n`;\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport styled from \"styled-components\";\n\nimport Drawer from \"@material-ui/core/Drawer\";\nimport BuildOutlinedIcon from \"@material-ui/icons/BuildOutlined\";\n\nimport colors from \"../helpers/colors\";\nimport removeTool from \"../actions/removeTool\";\n\nimport { makeToolkitCart, allFlatTools } from \"../helpers/helpers\";\nimport { Text, Image, View } from \"./blocks/index\";\nimport downloadToolkit from \"../actions/downloadToolkit\";\nimport ToolkitTool from \"./ToolkitTool\";\nimport { responsiveDimensions } from \"../helpers/constants\";\n\nconst exportIcon = require(\"../assets/openAsIcon.svg\");\nconst closeButton = require(\"../assets/close.svg\");\n\nconst Toolkit = ({ toolkit, removeItem, allData }) => {\n const [open, setOpen] = useState(false);\n const [checkError, setCheckError] = useState(\"\");\n\n const allTools = allFlatTools(allData);\n\n useEffect(() => {\n setCheckError(\"\");\n }, [toolkit]);\n\n const handleExport = () => {\n const flatToolkit = allFlatTools(toolkit);\n\n const checkFailed = flatToolkit\n .map((tool) => {\n if (tool.depends_on === null) {\n return true;\n } else {\n const verif = verifyDepencency(toolkit, tool.depends_on);\n return verif;\n }\n })\n .includes(false);\n\n if (!checkFailed && toolkit.length > 0) {\n downloadToolkit(toolkit);\n } else {\n setCheckError(\"Not all dependencies are met!\");\n if (toolkit.length === 0) {\n setCheckError(\"You got to add something here!\");\n }\n }\n };\n\n const verifyDepencency = (data, dependency) => {\n const flattenedTools = makeToolkitCart(data);\n\n const dependencyStatus = flattenedTools.includes(dependency);\n return dependencyStatus;\n };\n\n return (\n \n setOpen(true)}>\n \n \n My Toolkit\n \n {toolkit.length > 0 && {toolkit.length}}\n \n setOpen(false)}>\n \n setOpen(false)} src={closeButton} />\n \n MY TOOLKIT\n \n \n {toolkit.map((tool, index) => (\n removeItem(toolId)}\n />\n ))}\n \n handleExport()}>\n \n EXPORT TOOLKIT\n \n {checkError && (\n \n {checkError}\n \n )}\n \n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n allData: state.data.tools ? state.data.tools.children : [],\n toolkit: state.toolkit,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n removeItem: (id) => dispatch(removeTool(id)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Toolkit);\n\nconst StyledDrawer = styled(Drawer)`\n @media (max-width: ${responsiveDimensions.tablet}px) {\n .MuiDrawer-paper {\n width: 100%;\n align-items: center;\n }\n }\n`;\n\nconst CloseButton = styled(Image)`\n height: 40px;\n cursor: pointer;\n position: absolute;\n\n top: 20px;\n right: 20px;\n`;\n\nconst ExportButton = styled(View)`\n cursor: pointer;\n padding: 8px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n border: 1px solid black;\n border-radius: 50px;\n position: relative;\n\n width: 300px;\n\n margin-left: auto;\n margin-right: auto;\n margin-top: auto;\n`;\n\nconst ExportIcon = styled(Image)`\n width: 30px;\n position: absolute;\n left: 10px;\n`;\n\nconst ToolkitTitle = styled(Text)`\n font-size: 20px;\n margin-top: 20px !important;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n span {\n margin: 0 20px;\n font-weight: 200;\n }\n\n &:after,\n :before {\n background-color: ${colors.navyBlue};\n height: 1px;\n flex: 1;\n content: \"\";\n }\n`;\n\nconst ToolkitContent = styled(View)`\n height: 100%;\n width: 350px;\n display: flex;\n flex-direction: column;\n padding: 50px;\n`;\n\nconst Count = styled(Text)`\n position: absolute;\n font-size: 10px;\n color: white;\n height: 10px;\n width: 10px;\n padding: 5px;\n border-radius: 20px;\n text-align: center;\n background-color: red;\n right: 0;\n top: -10px;\n line-height: normal !important;\n`;\n\nconst ToolkitButton = styled(View)`\n width: 100px;\n background-color: white;\n border: 1px solid black;\n border-radius: 30px;\n color: black;\n font-size: 12px;\n padding: 5px;\n display: flex;\n cursor: pointer;\n justify-content: center;\n align-items: center;\n margin-left: auto;\n position: relative;\n`;\n","export default function removeTool(id) {\n return (dispatch) =>\n dispatch({\n type: \"REMOVE_TOOL\",\n id,\n });\n}\n","export const surveyFeatures = [\n {\n name: \"Culture/Trust\",\n id: \"feature1\",\n description:\n \"The way trust between the ISAC members is being cultivated/enforced. Trust is the key factor within the ISAC, since this is the basis for Information Sharing\",\n initial: [\n \"Terms of Reference document exists as draft\",\n \"Membership guidelines exist as draft\",\n \"No NDA is in place\",\n \"Not all members participate equally active yet\",\n ],\n developing: [\n \"Terms of Reference document is finalized\",\n \"Membership guidelines are finalized\",\n \"No NDA is in place\",\n \"Face to face meetings are combined with social events\",\n \"Not all members participate equally active yet\",\n ],\n defined: [\n \"Terms of Reference document acknowledged by all members\",\n \"Membership guidelines acknowledged by all members\",\n \"NDA in place as draft\",\n \"Face to face meetings are combined with social events\",\n \"Active participation of all members\",\n ],\n managed: [\n \"ISAC is an official institute\",\n \"ISAC has paid memberships\",\n \"Contracts are signed between participating entities\",\n \"NDA is in place\",\n \"Face to face meetings are combined with social events\",\n \"Active participation of all members\",\n ],\n optimised: [\n \"ISAC is an official institute\",\n \"Contracts are signed between participating entities\",\n \"ISAC has paid memberships\",\n \"NDA is in place\",\n \"Face to face meetings combined with social events\",\n \"Active participation of all members, including partners from the external network\",\n ],\n },\n {\n name: \"Governance\",\n id: \"feature2\",\n description:\n \"he way the governance structure of the ISAC is built. This can range from informal to formal and from individual-based to supported by top management\",\n initial: [\n \"No clear governance structure is in place\",\n \"No KPIs are drafted\",\n ],\n developing: [\n \"ISAC Board is established from participants\",\n \"No KPIs are drafted\",\n ],\n defined: [\n \"Established governance structure, with a board existing of senior leadership of the members\",\n \"Basic KPIs are in place\",\n \"Ad hoc monitoring of KPIs\",\n ],\n managed: [\n \"Established governance structure, with a board existing of senior leadership of the members\",\n \"Full set of KPIs is in place\",\n \"Ad hoc monitoring of KPIs\",\n ],\n optimised: [\n \"Established governance structure, with a board existing of senior leadership of the members\",\n \"Full set of KPIs are in place\",\n \"Structural monitoring of KPIs\",\n ],\n },\n {\n name: \"Oganization\",\n id: \"feature3\",\n description: \"The way the ISAC organization is built\",\n initial: [\n \"Informal (participants are individual members)\",\n \"Rotating chair (voluntary)\",\n \"Rotating secretary (voluntary)\",\n ],\n developing: [\n \"Informal (participant represent their companies)\",\n \"Elected chair (voluntary)\",\n \"Elected secretary (voluntary)\",\n ],\n defined: [\n \"ISAC formalized (companies are members)\",\n \"Small central team (partially contracted staff) managing the ISAC, including secretariat\",\n \"Elected chair (voluntary)\",\n ],\n managed: [\n \"Strong central team managing the ISAC, including secretariat\",\n \"Chairman of the ISAC is on the payroll of the ISAC\",\n \"Operations during office hours\",\n ],\n optimised: [\n \"Mature ISAC organization with full time staff dealing with all aspects (secretariat, threat intelligence sharing, training, etc)\",\n \"24/7 operations\",\n ],\n },\n {\n name: \"Analysis\",\n id: \"feature4\",\n description: \"The way that information within the ISAC is analyzed\",\n initial: [\n \"No formal analysis function is made available by the ISAC is in progress\",\n ],\n developing: [\n \"Threat/vulnerability analysis reports created by individual members, from the individual organization’s perspective\",\n \"Collaborative analysis ad hoc\",\n ],\n defined: [\n \"Basic analyst capacity available in the members’ own organization that are part-time available to work dedicated for the ISAC\",\n \"Dedicated analysts create value for the ISAC: timely analytics about threats, vulnerabilities and incidents\",\n \"Structural analysis on strategic level is done\",\n \"Ad hoc sectoral analysis performed by the ISAC\",\n ],\n managed: [\n \"Team of analysts in central organization per ISAC\",\n \"Structural analysis on tactical and strategic level is done\",\n \"Trend reports on specific topics are made\",\n \"Quarterly threat report are published\",\n \"Creation of a yearly threat report is in progress\",\n ],\n optimised: [\n \"Dedicated team of full-time analysts in central organization per ISAC\",\n \"Tailor made reports/advisories for individual members (based on install base and threat level)\",\n \"Monthly threat reports shared\",\n \"Creation of yearly sectoral threat report is in progress\",\n ],\n },\n {\n name: \"Information Sharing\",\n id: \"feature5\",\n description: \"The way information is being shared within the ISAC\",\n initial: [\n \"Information is shared in face to face meetings between members\",\n \"Members Use Traffic Light Protocol to share information\",\n ],\n developing: [\n \"Information is shared in face to face meetings\",\n \"Membres use Traffic Light Protocol\",\n \"Secure E-mail list is used to communicate\",\n ],\n defined: [\n \"Information shared in face to face meetings\",\n \"Members use Traffic Light Protocol\",\n \"Secure E-mail list used to communicate\",\n \"First version of an information sharing and collaboration platform is being made\",\n ],\n managed: [\n \"Information shared in face to face meetings\",\n \"Members use Traffic Light Protocol\",\n \"Weekly members only meetings\",\n \"Trusted information sharing and collaboration platform exists and is live\",\n \"Ad hoc threat intelligence sharing in place\",\n ],\n optimised: [\n \"Information shared in Face to face meetings\",\n \"Members use Traffic Light Protocol\",\n \"Trusted information sharing platform is constructed\",\n \"Real-time threat intelligence exchange is live\",\n \"Joint Intelligence Sharing platform is in the making\",\n ],\n },\n {\n name: \"Type of information shared\",\n id: \"feature6\",\n description:\n \"The type of information that is being shared within the ISAC.\",\n initial: [\n \"Sharing Best practices\",\n \"Ad hoc sharing of incidents (no details)\",\n \"TLP GREEN\",\n ],\n developing: [\n \"Sharing Best practices\",\n \"Sharing of incidents after incidents are dealt with (limited details)\",\n \"TLP GREEN/AMBER\",\n ],\n defined: [\n \"Sharing Best practices\",\n \"Sharing of incidents shortly after they've happened (details)\",\n \"Ad hoc sharing of known vulnerabilities\",\n \"Results of penetration test or impact assessments\",\n \"Ad hoc benchmarking between members (self-assessments)\",\n \"TLP AMBER/RED\",\n ],\n managed: [\n \"Sharing Best practices\",\n \"Strategic analysis\",\n \"Basic threat intelligence (generic)\",\n \"Sharing of incidents shortly after they've happened\",\n \"Structural sharing of known vulnerabilities\",\n \"Results of penetration test or impact assessments\",\n \"Structural benchmarking between members (self-assessments)\",\n \"TLP RED (post-incident)\",\n ],\n optimised: [\n \"Sharing Best practices\",\n \"Strategic analysis (including yearly report)\",\n \"Detailed real-time threat intelligence (tailored to the individual member)\",\n \"Sharing of incidents while they're happening\",\n \"Structural sharing of known vulnerabilities\",\n \"Results of penetration test or impact assessments\",\n \"Structural benchmarking between members (external assessment)\",\n \"TLP RED (real-time)\",\n ],\n },\n {\n name: \"Outreach\",\n id: \"feature7\",\n description:\n \"The activities that the ISAC does in reaching out to the wider community\",\n initial: [\"No outreach activities\"],\n developing: [\"No outreach activities\", \"Ad hoc external communication\"],\n defined: [\n \"Ad hoc outreach activities\",\n \"Ad hoc external communication\",\n \"Ad hoc partner in e.g. National Awareness activities\",\n ],\n managed: [\n \"Outreach activities are a structural part of ISAC\",\n \"Ad hoc external communication\",\n \"Partner in e.g. National Awareness activities\",\n \"Yearly conference organized for the ISAC members and partners\",\n ],\n optimised: [\n \"Outreach activities are a structural part of the ISAC\",\n \"Active external communication\",\n \"Lobbying towards government\",\n \"Key partner in e.g. National Awareness activities\",\n \"Yearly conference organized for the ISAC members, partners and interested parties\",\n \"Hub for SMEs and start-ups to offer experience and knowledge\",\n ],\n },\n {\n name: \"IT Tools\",\n id: \"feature8\",\n description:\n \"The technological means that are used within the ISAC to share and analyze information\",\n initial: [\"E-mail list\"],\n developing: [\"Secure e-mail list\"],\n defined: [\"Information sharing and collaboration platform\"],\n managed: [\n \"Trusted and secure portal supporting collaboration in a virtual team environment\",\n ],\n optimised: [\"Trusted threat intelligence platform\"],\n },\n {\n name: \"Shared Services\",\n id: \"feature9\",\n description: \"Potential Shared Services that exist within the ISAC\",\n initial: [\"No shared services dedicated to the ISAC\"],\n developing: [\"Ad hoc activities coordinated within the ISAC\"],\n defined: [\"Members are developing best practices together\"],\n managed: [\"Ad hoc crisis response coordination on a timely base\"],\n optimised: [\n \"There is a joint crisis response coordination\",\n \"Joint R&D capabilities are in place\",\n ],\n },\n {\n name: \"Capacity Building\",\n id: \"feature10\",\n description:\n \"Training and exercise activities jointly conducted by the ISAC members. Potentially in cooperation with nonISAC members.\",\n initial: [\"No joint capacity building activities\"],\n developing: [\"Ad hoc capacity building activities\"],\n defined: [\n \"Regular capacity building activities\",\n \"Ad hoc participation in exercises\",\n ],\n managed: [\n \"Joint training curriculum\",\n \"Yearly exercise with participation of ISAC members only.\",\n ],\n optimised: [\n \"Training curriculum that is open for members but also for trusted third parties\",\n \"Yearly exercise with cooperation of (governmental) partners.\",\n ],\n },\n {\n name: \"Financial model\",\n id: \"feature11\",\n description: \"The way the budget for the ISAC is secured\",\n initial: [\"No central budget\"],\n developing: [\"Budget raised to run selected projects\"],\n defined: [\n \"Limited central budget available\",\n \"Most of the project budget raised if needed\",\n ],\n managed: [\"Central budget available\"],\n optimised: [\"Structural budget is available\"],\n },\n {\n name: \"Governmental involvement\",\n id: \"feature12\",\n description: \"The way in which the government participates in the ISAC\",\n initial: [\n \"Governmental agencies participate on an ad hoc basis and share intelligence on a regular basis.\",\n ],\n developing: [\n \"Governmental agencies are a regular member\",\n \"Governmental agencies actively share intelligence during the meetings and through the IT tools used.\",\n ],\n defined: [\n \"ISAC cooperates with national CSIRT, NCSC or equivalent organization\",\n \"Governmental agencies are contributing member of the ISAC\",\n \"Governmental agencies actively share intelligence during the meetings and through the IT tools used\",\n ],\n managed: [\"ISAC is a valued partner of the National CSIRT\"],\n optimised: [\"ISAC fully integrated into the National CSIRT ecosystem\"],\n },\n {\n name: \"External cooperation\",\n id: \"feature13\",\n description:\n \"The way the ISAC is cooperating with non-ISAC members, e.g., with suppliers/vendors, other ISACs, universities\",\n initial: [\"No external cooperation other than ad hoc\"],\n developing: [\"Limited external cooperation\"],\n defined: [\"Ad hoc cross-ISAC cooperation established\"],\n managed: [\"Regular cross-ISAC cooperation established.\"],\n optimised: [\n \"Structural relationships with external parties that add value to ISAC and vice versa\",\n ],\n },\n];\n","import React, { useState } from \"react\";\nimport { View, Text } from \"./blocks\";\nimport styled from \"styled-components\";\nimport {\n FormLabel,\n FormControl,\n FormControlLabel,\n RadioGroup,\n Radio,\n} from \"@material-ui/core\";\nimport { useEffect } from \"react\";\n\nconst RadioGrouped = ({ name, handleChange, value }) => {\n return (\n handleChange(e.target.value, name)}\n >\n }\n label=\"Initial\"\n />\n }\n label=\"Developing\"\n />\n }\n label=\"Defined\"\n />\n }\n label=\"Managed\"\n />\n }\n label=\"Optimized\"\n />\n \n );\n};\n\nconst SurveyFeature = ({ feature, onResultChange, id }) => {\n const [currentResult, setCurrentResult] = useState(0);\n const [nextYearResult, setNextYearResult] = useState(0);\n\n useEffect(() => {\n const result = { current: currentResult, desired: nextYearResult };\n onResultChange(result);\n }, [currentResult, nextYearResult]);\n\n return (\n \n \n Organisational feature {id + 1}: {feature.name}\n \n \n {feature.description}\n \n \n Initial:\n \n {feature.initial && (\n \n {feature.initial.map((item) => {\n return (\n \n - {item}\n \n );\n })}\n \n )}\n \n Developing:\n \n {feature.developing && (\n \n {feature.developing.map((item) => {\n return (\n \n - {item}\n \n );\n })}\n \n )}\n \n Defined:\n \n {feature.defined && (\n \n {feature.defined.map((item) => {\n return (\n \n - {item}\n \n );\n })}\n \n )}\n \n Managed:\n \n {feature.managed && (\n \n {feature.managed.map((item) => {\n return (\n \n - {item}\n \n );\n })}\n \n )}\n \n Optimised:\n \n {feature.optimised && (\n \n {feature.optimised.map((item) => {\n return (\n \n - {item}\n \n );\n })}\n \n )}\n\n \n \n Organisational feature {id + 1}: {feature.name}: I deem the current\n level of maturity:\n \n setCurrentResult(value)}\n />\n \n\n \n \n Organisational feature {id + 1}: {feature.name}: I think the level of\n maturity next year could be:\n \n setNextYearResult(value)}\n />\n \n \n );\n};\n\nexport default SurveyFeature;\n\nconst RadioForm = styled(FormControl)`\n margin: 30px 0 !important;\n`;\n\nconst RadioOption = styled(FormControlLabel)``;\n\nconst RadioDot = styled(Radio)`\n height: 10px;\n margin-left: 30px !important;\n`;\n\nconst List = styled.ul`\n list-style: none !important;\n`;\n\nconst ListElement = styled.li``;\n","import React, { useState } from \"react\";\nimport colors from \"../helpers/colors\";\nimport View from \"./blocks/View\";\nimport Text from \"./blocks/Text\";\nimport styled from \"styled-components\";\nimport Image from \"./blocks/Image\";\nimport { connect } from \"react-redux\";\nimport addTool from \"../actions/addTool\";\nimport setNotification from \"../actions/notification\";\nimport _ from \"lodash\";\nimport { Icons, responsiveDimensions } from \"../helpers/constants\";\n\nimport RadarChart from \"react-svg-radar-chart\";\nimport \"react-svg-radar-chart/build/css/index.css\";\n\nimport {\n TextField,\n Dialog,\n FormControl,\n FormControlLabel,\n} from \"@material-ui/core\";\nimport AssignmentOutlinedIcon from \"@material-ui/icons/AssignmentOutlined\";\nimport SubdirectoryArrowRightOutlinedIcon from \"@material-ui/icons/SubdirectoryArrowRightOutlined\";\nimport GetAppOutlinedIcon from \"@material-ui/icons/GetAppOutlined\";\nimport { surveyFeatures } from \"../helpers/surveyFeatures\";\nimport SurveyFeature from \"./SurveyFeature\";\nimport useWindowDimensions from \"../helpers/dimensionHook\";\nimport ReactToPrint from \"react-to-print\";\nimport { useRef } from \"react\";\n\nconst enisaHeader = require(\"../assets/enisaHeader.png\");\n\nconst SurveyCard = ({ title }) => {\n const ref = useRef();\n\n const { height, width } = useWindowDimensions();\n\n const features = surveyFeatures;\n\n const [open, setOpen] = useState(false);\n\n const [surveyData, setSurveyData] = useState(\"\");\n const [desiredData, setDesiredData] = useState(\"\");\n\n const [surveyPreview, setSurveyPreview] = useState(false);\n\n const [chartData, setChartData] = useState(\"\");\n\n const [submitError, setSubmitError] = useState(false);\n\n const handleView = () => {\n setOpen(true);\n };\n\n const handleControlInput = (text) => {\n //setSurveyData({ ...surveyData, control: text });\n };\n\n const handleFormChange = (data, feature) => {\n const { current, desired } = data;\n\n const currentPercent = current / 5;\n const desiredPercent = desired / 5;\n var newSurveyData = { ...surveyData, [`${feature}`]: currentPercent };\n var newDesiredData = { ...desiredData, [`${feature}`]: desiredPercent };\n setSurveyData(newSurveyData);\n setDesiredData(newDesiredData);\n setSubmitError(false);\n };\n\n const getChartCaptions = (data) => {\n var newCaptions = {};\n data.forEach(\n (feature) =>\n (newCaptions = { ...newCaptions, [`${feature.id}`]: feature.name })\n );\n return newCaptions;\n };\n\n const chartCaptions = getChartCaptions(features);\n\n const handleSubmitResult = () => {\n const sameArray = _.isEqual(\n Object.keys(surveyData).sort(),\n Object.keys(chartCaptions).sort()\n );\n if (sameArray) {\n setChartData([\n { data: surveyData, meta: { color: \"blue\" } },\n { data: desiredData, meta: { color: \"orange\" } },\n ]);\n setSurveyPreview(true);\n }\n if (!sameArray) {\n setSubmitError(true);\n }\n };\n\n return (\n \n \n \n {title}\n \n \n \n handleView()}>\n \n \n START SURVEY\n \n \n \n setOpen(false)}\n >\n \n \n \n ISAC\n \n - Information Sharing and Analysis Center\n \n \n {title.toUpperCase()}\n \n {!surveyPreview && (\n \n \n TLP: AMBER (only for use by the relevant ISAC community)\n \n \n This Maturity Framework for ISACs, developed by ENISA, allows an\n ISAC to self-assess its level of maturity on 13 distinct ISAC\n features. The model is about organizational maturity,\n collaboration and cyber security and it reflects the different\n maturity levels an ISAC goes through during its existence. In\n this survey, a question is asked about the current and desired\n level of maturity for each of the ISAC features. This will form\n the starting point for the consultation workshop with the\n Empowering EU ISACs project. In this workshop, the ISAC and the\n project team will jointly identify and detail the need for\n support from the project.\n \n \n Per question: please read the indicators and assess which\n maturity level fits best.\n \n \n The Empowering ISACs project team.\n \n \n The Maturity Framework for ISACs is an ENISA product. ENISA\n invites you to provide them with any feedback for the\n improvement of the framework\n \n \n Control question: which ISAC are you part of?\n \n handleControlInput(e.target.value)}\n label=\"Control question\"\n variant=\"outlined\"\n />\n {features.map((feature, index) => {\n return (\n \n handleFormChange(data, feature.id)\n }\n feature={feature}\n />\n );\n })}\n \n )}\n {submitError && (\n \n Please complete all the features in this form!\n \n )}\n {!surveyPreview && (\n \n setOpen(false)}>\n \n \n CLOSE\n \n \n handleSubmitResult()}>\n \n \n SUBMIT\n \n \n \n )}\n {surveyPreview && (\n \n \n \n \n \n \n \n \n - Maturity Score\n \n \n \n - Desired Score\n \n \n \n \n setOpen(false)}>\n \n \n CLOSE\n \n \n (\n \n \n \n PRINT RESULT\n \n \n )}\n content={() => ref.current}\n />\n \n \n \n )}\n \n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n notification: state.notification,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n addItem: (tool) => dispatch(addTool(tool)),\n handleNotification: (notification) =>\n dispatch(setNotification(notification)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SurveyCard);\n\nconst RadarView = styled(View)`\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n svg {\n width: 100% !important;\n }\n`;\n\nconst ColorDot = styled(View)`\n padding: 10px;\n border-radius: 30px;\n margin: 5px;\n background-color: ${(props) => props.color};\n height: 5px;\n width: 5px;\n`;\n\nconst SurveyInput = styled(TextField)`\n && {\n width: 100%;\n }\n`;\n\nconst SurveyForm = styled(View)`\n margin: 20px 0;\n display: flex;\n flex-direction: column;\n`;\n\nconst ButtonImage = styled(Image)`\n position: absolute;\n left: 5px;\n`;\n\nconst ModalAction = styled(View)`\n background-color: white;\n padding: 15px;\n color: black;\n width: 120px;\n border-radius: 50px;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n cursor: pointer;\n margin: 5px;\n border: 1px solid black;\n position: relative;\n`;\n\nconst ButtonsRow = styled(View)`\n display: flex;\n justify-content: space-around;\n`;\n\nconst ModalHeader = styled(View)`\n display: flex;\n align-items: center;\n justify-content: center;\n\n font-size: 15px;\n margin-bottom: 40px;\n border-bottom: 1px solid ${colors.blue};\n padding-bottom: 30px;\n`;\n\nconst StyledModal = styled(Dialog)`\n align-items: center;\n justify-content: center;\n display: flex;\n\n .MuiDialog-paperWidthSm {\n //max-width: ${(props) =>\n props.isPreview ? props.width + \"px\" : \"1000px\"};\n max-width: 1000px;\n width: ${(props) => (props.isPreview ? props.width + \"px\" : \"\")};\n @media (min-width: ${responsiveDimensions.monitor}px) {\n width: 900px;\n }\n }\n`;\n\nconst ModalCard = styled(View)`\n background-color: white;\n padding: 20px 50px;\n position: relative;\n`;\n\nconst ContentCard = styled(View)`\n margin: 5px;\n padding: 15px 15px 30px 40px;\n background-color: ${(props) =>\n props.isLight ? colors.lightBlue : colors.enisaBlue};\n color: white;\n border-radius: 20px;\n`;\n\nconst ProductButton = styled(View)`\n background-color: white;\n padding: 5px;\n color: black;\n width: 120px;\n border-radius: 50px;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n cursor: pointer;\n margin: 5px;\n`;\n","import React, { useEffect, useState } from \"react\";\nimport View from \"./blocks/View\";\nimport Text from \"./blocks/Text\";\nimport ToolCard from \"./ToolCard\";\nimport FolderCard from \"./FolderCard\";\nimport styled from \"styled-components\";\n\nimport selectFolder from \"../actions/selectFolder\";\nimport { connect } from \"react-redux\";\n\nimport Masonry from \"react-masonry-css\";\nimport colors from \"../helpers/colors\";\n\nimport Toolkit from \"./Toolkit\";\n\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { responsiveDimensions } from \"../helpers/constants\";\nimport { useHistory } from \"react-router-dom\";\nimport SurveyCard from \"./SurveyCard\";\nimport { Button } from \"./blocks\";\n\nconst AreaContent = ({ data, selectedFolder, area }) => {\n const history = useHistory();\n\n const handleFolderNavigation = (folder) => {\n handleResetNav(\"\");\n history.replace(folder.path);\n };\n\n const handleResetNav = () => {\n history.replace(\"\");\n };\n\n const areaData = data && data.filter((item) => item.title === area)[0];\n\n const dataChildren =\n areaData &&\n areaData.children &&\n areaData.children.length &&\n areaData.children.map((child) => {\n if (child.type === \"folder\") {\n return (\n handleFolderNavigation(child)}\n />\n );\n }\n if (child.type === \"tool\") {\n return (\n \n );\n }\n });\n\n var renderChildren =\n selectedFolder && selectedFolder.children\n ? selectedFolder.children.map((child) => {\n if (child.type === \"folder\") {\n return (\n handleFolderNavigation(child)}\n />\n );\n }\n if (child.type === \"tool\") {\n return (\n \n );\n }\n })\n : dataChildren;\n\n\n const withSurvey = [\n ...renderChildren || [],\n ,\n ];\n\n return (\n \n \n {area.toUpperCase()}\n {selectedFolder && (\n handleResetNav()}>\n {selectedFolder.title}\n \n \n )}\n \n \n \n {area === \"Evaluate\" ? withSurvey : renderChildren}\n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n data:\n state.data && state.data.tools && state.data.tools.children\n ? state.data.tools.children\n : [],\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n navigateFolder: (folder) => dispatch(selectFolder(folder)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AreaContent);\n\nconst AreaContainer = styled(View)`\n display: flex;\n width: 80%;\n padding: 10px 50px;\n flex-direction: column;\n\n @media (max-width: ${responsiveDimensions.monitor}px) {\n align-self: center;\n margin: 30px 0;\n }\n\n @media (max-width: ${responsiveDimensions.tablet}px) {\n align-self: center;\n margin: 30px 0;\n padding: 10px;\n width: 100%;\n }\n`;\n\nconst SectionBreadCrumbs = styled(View)`\n border-bottom: 1px solid black;\n padding-bottom: 30px;\n margin-bottom: 15px;\n margin-top: 20px;\n\n display: flex;\n align-items: center;\n`;\n\nconst Title = styled(Text)`\n margin-left: 20px;\n font-size: 25px;\n`;\n\nconst StyledMasonry = styled(Masonry)`\n display: flex;\n`;\n\nconst NavTrace = styled(Text)`\n font-size: 15px;\n padding: 5px 40px;\n border: 1px solid ${colors.blue};\n\n display: flex;\n align-items: center;\n\n cursor: pointer;\n margin-left: 10px;\n border-radius: 10px;\n position: relative;\n color: ${colors.blue};\n`;\n\nconst Close = styled(CloseIcon)`\n position: absolute;\n right: 5px;\n`;\n","import Axios from \"axios\";\n\nconst config = {\n headers: {\n accept: \"application/json\",\n },\n};\n\nfunction fetchDataSuccess(data) {\n return {\n type: \"GET_DATA\",\n data,\n };\n}\n\nexport function getData() {\n return (dispatch) => {\n Axios.get(\"./api_contents\", config)\n .then((res) => {\n const resData = res.data;\n return resData;\n })\n .then((data) => dispatch(fetchDataSuccess(data)))\n .catch((error) => console.log(\"oops\", error));\n };\n}\n","import React from \"react\";\nimport { View, Text, Image, Label } from \"./blocks\";\nimport styled from \"styled-components\";\nimport colors from \"../helpers/colors\";\nimport { Icons } from \"../helpers/constants\";\nimport {\n transformFlags,\n setLabelColor,\n setAreaCardColor,\n setAreaIcon,\n setAreaChildColor,\n} from \"../helpers/helpers\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport selectFolder from \"../actions/selectFolder\";\n\nconst CardsContent = ({ areas, navigateFolder }) => {\n const history = useHistory();\n\n const handleNavigate = (button) => {\n if (button.type === \"folder\") {\n history.replace(button.path);\n }\n if (button.type === \"tool\") {\n const toolParent = button.path.replace(button.id, \"\");\n history.replace(toolParent);\n }\n };\n\n const childWithParent = (child, parent) => {\n const newChild = { ...child, parent };\n\n return newChild;\n };\n\n return (\n \n {areas &&\n areas.map((area) => (\n \n \n \n \n \n \n {area.title.toUpperCase()}\n \n \n \n {area.children.map((child) => (\n \n handleNavigate(childWithParent(child, area.id))\n }\n key={child.id}\n theme={setAreaChildColor(area.id)}\n >\n {child.title}\n \n {child.flags &&\n child.flags.length > 0 &&\n transformFlags(child.flags).map((flag, id) => (\n \n ))}\n \n \n ))}\n \n \n ))}\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n navigateFolder: (folder) => dispatch(selectFolder(folder)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CardsContent);\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n border-bottom: none !important;\n`;\n\nconst BlockTitle = styled(Text)`\n color: white;\n font-size: 22px;\n margin-left: 10px;\n`;\n\nconst FlagsContainer = styled(View)`\n display: flex;\n`;\n\nconst FolderChild = styled(View)`\n background-color: ${(props) => props.theme};\n font-size: 14px;\n width: 95%;\n height: 50px;\n border-radius: 50px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n margin: 5px;\n cursor: pointer;\n padding: 0 20px;\n`;\n\nconst AreaBlock = styled(View)`\n background-color: ${(props) => props.theme};\n margin: 10px 0;\n padding: 10px 20px;\n color: white;\n width: 80%;\n border-radius: 20px;\n`;\n\nconst ContentContainer = styled(View)`\n width: 100%;\n align-items: center;\n display: flex;\n flex-direction: column;\n`;\n","import React from \"react\";\nimport View from \"./blocks/View\";\nimport Button from \"./blocks/Button\";\nimport Text from \"./blocks/Text\";\nimport colors from \"../helpers/colors\";\nimport Label from \"./blocks/Label\";\nimport styled from \"styled-components\";\nimport { setLabelColor, transformFlags } from \"../helpers/helpers\";\nimport { useHistory } from \"react-router-dom\";\nimport selectFolder from \"../actions/selectFolder\";\nimport { connect } from \"react-redux\";\n\nconst LabeledButton = ({ button, left, top }) => {\n const history = useHistory();\n\n const flags = transformFlags(button.flags);\n\n const handleNavigate = (button) => {\n if (button.type === \"folder\") {\n history.replace(button.path);\n }\n if (button.type === \"tool\") {\n const toolParent = button.path.replace(button.id, \"\");\n history.replace(toolParent);\n }\n };\n const buttonColor = () => {\n switch (button.parent) {\n case \"build\":\n return colors.lightBlue;\n case \"run\":\n return colors.blue;\n case \"develop\":\n return colors.darkBlue;\n case \"evaluate\":\n return colors.navyBlue;\n default:\n return colors.blue;\n }\n };\n\n return (\n handleNavigate(button)}\n >\n \n {flags.map((label, id) => (\n \n ))}\n \n {button.title}\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n navigateFolder: (folder) => dispatch(selectFolder(folder)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LabeledButton);\n\nconst LabelsContainer = styled(View)`\n position: absolute;\n top: -15px;\n display: flex;\n`;\n\nconst SatelliteButton = styled(Button)`\n background-color: ${(props) => props.theme};\n border-radius: 50px;\n padding: 10px;\n width: 130px;\n position: absolute;\n top: ${(props) => props.top};\n left: ${(props) => props.left};\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Image, Text, View, Button } from \"./blocks\";\nimport { Link } from \"react-router-dom\";\n\nimport { Icons } from \"../helpers/constants\";\nimport colors from \"../helpers/colors\";\nimport LabeledButton from \"./LabeledButton\";\n\nconst CircularContent = ({ children }) => {\n const setPosition = (items) => {\n const circleRadius = 350;\n\n const containerWidth = 135;\n\n const containerHeight = 280;\n\n var angle = 130.4;\n var step = (2 * Math.PI) / items.length;\n\n var positionedItems = items.map((item) => {\n const positionedItem = {\n ...item,\n left:\n Math.round(containerWidth / 2 + circleRadius * Math.cos(angle) - 40) +\n \"px\",\n top:\n Math.round(\n containerHeight / 2 + circleRadius * Math.sin(angle) - 40\n ) + \"px\",\n };\n angle += step;\n\n return positionedItem;\n });\n return positionedItems;\n };\n\n const getAllChildren = (parent) => {\n var allChildren = [];\n\n for (const area in parent) {\n const newphews = parent[`${area}`].children;\n const parentId = parent[`${area}`].id;\n\n for (const newphew in newphews) {\n const markedChild = { ...newphews[`${newphew}`], parent: parentId };\n allChildren.push(markedChild);\n }\n }\n return allChildren;\n };\n\n const satellites = getAllChildren(children);\n const positionedSatellites = setPosition(satellites);\n\n return (\n \n \n \n \n \n \n ISAC\n \n \n Information Sharing and Analysis Center\n \n\n \n \n \n \n BUILD\n \n \n \n\n \n \n \n \n RUN\n \n \n \n\n \n \n \n \n EVALUATE\n \n \n \n\n \n \n \n \n DEVELOP\n \n \n \n {positionedSatellites.map((sat, id) => (\n \n ))}\n \n \n \n \n );\n};\n\nexport default CircularContent;\n\nconst CircleView = styled(View)`\n padding: 60px;\n border-radius: 500px;\n box-shadow: 0px 0px 20px 20px #dee0e2, inset 0px 0px 30px 20px #dee0e2;\n border: 10px solid #eff2f7;\n`;\n\nconst AreasButton = styled(Button)`\n height: 120px;\n width: 120px;\n border-radius: 300px;\n cursor: pointer;\n position: absolute;\n top: ${(props) => props.top};\n bottom: ${(props) => props.bottom};\n left: ${(props) => props.left};\n right: ${(props) => props.right};\n\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n`;\n\nconst CenterView = styled(View)`\n background: #f1f4f9;\n box-shadow: 0px 0px 18px 0px #dee0e2;\n padding: 60px;\n height: 100px;\n width: 100px;\n border-radius: 400px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n position: relative;\n`;\n","import React, { useEffect } from \"react\";\n\nimport { View } from \"./blocks/index\";\n\nimport styled from \"styled-components\";\n\nimport { connect } from \"react-redux\";\n\nimport useWindowDimensions from \"../helpers/dimensionHook\";\n\nimport selectFolder from \"../actions/selectFolder\";\nimport { responsiveDimensions } from \"../helpers/constants\";\nimport CardsContent from \"./CardsContent\";\nimport CircularContent from \"./CircularContent\";\n\nconst StartPage = ({ data, resetFolderNav }) => {\n useEffect(() => {\n resetFolderNav();\n }, []);\n\n const { height, width } = useWindowDimensions();\n\n const isCircular = width > responsiveDimensions.monitor;\n\n const children =\n data && data.tools && data.tools.children.length > 0\n ? data.tools.children\n : \"\";\n return (\n \n {isCircular && }\n {!isCircular && }\n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n data: state.data,\n selectedFolder: state.selectedFolder,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n resetFolderNav: () => dispatch(selectFolder(\"\")),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StartPage);\n\nconst CenteredFullView = styled(View)`\n display: flex;\n align-items: start;\n justify-content: center;\n padding-top: 50px;\n padding-bottom: 80px;\n width: 80%;\n\n @media (max-width: ${responsiveDimensions.monitor}px) {\n width: 100%;\n }\n`;\n","import Axios from \"axios\";\n\nconst downloadGlossary = () => {\n Axios.get(\"./pdf_glossary\", { responseType: \"blob\" }).then((response) => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"GlossaryAndAcronyms.pdf\");\n document.body.appendChild(link);\n link.click();\n });\n};\n\nexport default downloadGlossary;\n","import Axios from \"axios\";\n\nconst downloadRecomendations = () => {\n Axios.get(\"./pdf_recommendations\", { responseType: \"blob\" }).then(\n (response) => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"Recommendations.pdf\");\n document.body.appendChild(link);\n link.click();\n }\n );\n};\n\nexport default downloadRecomendations;\n","import React, { Component, useState } from \"react\";\nimport { Image, Button, Text, View } from \"./blocks/index\";\nimport Modal from \"@material-ui/core/Modal\";\nimport styled from \"styled-components\";\nimport colors from \"../helpers/colors\";\nimport _ from \"lodash\";\nimport SaveOutlinedIcon from \"@material-ui/icons/SaveOutlined\";\nimport { responsiveDimensions } from \"../helpers/constants\";\nimport downloadGlossary from \"../actions/downloadGlossary\";\nimport downloadRecomendations from \"../actions/downloadRecomendations\";\nimport { useLocation } from \"react-router-dom\";\nimport { Dialog } from \"@material-ui/core\";\n\nconst closeButton = require(\"../assets/close.svg\");\n\nconst ContentModalButton = ({ buttonImg, buttonText, content, type }) => {\n const [open, setOpen] = useState(false);\n\n const location = useLocation();\n\n const isStartPage = location.pathname === \"/\";\n\n const handleSave = (type) => {\n if (type === \"glossary\") {\n downloadGlossary();\n }\n if (type === \"recommendations\") {\n downloadRecomendations();\n }\n };\n\n return (\n \n setOpen(true)}>\n {buttonImg && (\n \n )}\n {buttonText}\n \n setOpen(false)}\n onBackdropClick={() => setOpen(false)}\n handleClose={() => setOpen(false)}\n open={open}\n scroll=\"paper\"\n >\n \n setOpen(false)}\n height=\"30px\"\n cursor=\"pointer\"\n src={closeButton}\n />\n \n \n {_.capitalize(buttonText)}\n \n \n {content && type === \"glossary\" && (\n \n {content.map((item) => (\n \n \n {item.title}\n \n \n {item.body}\n \n \n ))}\n \n )}\n\n {content && type === \"furtherReading\" && (\n \n {content.map((item) => (\n \n \n \n {item.title}\n \n \n {item.body}\n \n \n READ MORE\n \n \n \n ))}\n \n )}\n\n {content && type === \"recommendations\" && (\n \n \n \n )}\n\n {content && type === \"templates\" && (\n \n {Object.keys(content).map((item, index) => (\n \n \n \n {item}\n \n {content[`${item}`] &&\n content[`${item}`].map((attachment, index) => (\n \n - {attachment.toolParent}\n \n ))}\n \n\n \n \n SAVE AS\n \n \n ))}\n \n )}\n\n \n {(type === \"recommendations\" || type === \"glossary\") && (\n handleSave(type)}>\n \n SAVE AS\n \n )}\n \n \n \n \n );\n};\n\nexport default ContentModalButton;\n\nconst CloseButton = styled(Image)`\n position: absolute;\n top: 10px;\n right: 10px;\n`;\n\nconst BodyContents = styled.div`\n font-size: 14px;\n`;\n\nconst LinkTitle = styled.a`\n font-size: 14px;\n`;\n\nconst LinkButton = styled.a`\n margin: ${(props) => props.margin};\n margin-left: auto;\n\n text-decoration: none;\n color: black;\n border: 1px solid black;\n width: 100px;\n height: 25px;\n text-align: center;\n font-size: 12px;\n border-radius: 50px;\n margin-bottom: 10px;\n align-items: center;\n justify-content: center;\n display: flex;\n`;\n\nconst SideButton = styled(Button)`\n padding: 5px 20px;\n border-radius: ${(props) => (props.isFull ? \"50px\" : \"100px 0 0 100px\")};\n width: ${(props) => (props.isFull ? \"160px\" : \"120px\")};\n height: 50px;\n font-size: 13px;\n margin: 5px 0;\n position: relative;\n padding-right: ${(props) => (props.isFull ? \"10px\" : \"\")};\n\n @media (min-width: ${responsiveDimensions.monitor}px) {\n ${({ isFull }) =>\n !isFull &&\n `\n right: 10px;\n `}\n }\n\n @media (max-width: ${responsiveDimensions.monitor}px) {\n width: 80%;\n border-radius: 50px;\n width: 80%;\n padding-right: 10px;\n }\n`;\n\nconst StyledDialog = styled(Dialog)`\n align-items: center;\n justify-content: center;\n display: flex;\n\n .MuiPaper-root {\n width: 600px;\n }\n`;\n\nconst ModalCard = styled(View)`\n background-color: white;\n padding: 20px 50px;\n position: relative;\n\n @media (max-width: ${responsiveDimensions.tablet}px) {\n width: 90%;\n padding: 10px;\n }\n`;\n\nconst SaveButton = styled(Button)`\n width: 100px;\n background-color: white;\n border: 1px solid black;\n border-radius: 30px;\n color: black;\n font-size: 12px;\n`;\n\nconst ModalButtonImg = styled(Image)`\n height: 30px;\n position: absolute;\n left: 5px;\n top: 5px;\n padding: 10px;\n border-radius: 100px;\n`;\n\nconst ContentRow = styled(View)`\n display: flex;\n border-top: 1px solid ${colors.navyBlue};\n`;\n","import React from \"react\";\nimport ContentModalButton from \"../components/ContentModalButton\";\nimport { View } from \"./blocks/index\";\nimport { connect } from \"react-redux\";\nimport { allFlatTools } from \"../helpers/helpers\";\nimport _ from \"lodash\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport useWindowDimensions from \"../helpers/dimensionHook\";\nimport { responsiveDimensions } from \"../helpers/constants\";\n\nconst templateIcon = require(\"../assets/templates-icon.png\");\n\nconst SidebarModals = ({\n glossary,\n recommendations,\n furtherReading,\n templates,\n allToolsData,\n}) => {\n const glossaryContent =\n glossary && glossary.children ? glossary.children : \"\";\n const furtherReadingContent =\n furtherReading && furtherReading.children ? furtherReading.children : \"\";\n const recommendationsContent =\n recommendations && recommendations.body ? recommendations.body : \"\";\n\n const location = useLocation();\n\n const isStartPage = location.pathname === \"/\";\n\n const { height, width } = useWindowDimensions();\n\n const isDesktop = width > responsiveDimensions.monitor;\n\n const templatesContent = allToolsData\n .map((tool) => {\n const toolParent = tool.title;\n return tool.children.map((attachment) => {\n if (attachment.kind === \"template\") {\n return { ...attachment, toolParent };\n }\n });\n })\n .flat()\n .filter((item) => item);\n\n const templatesGrouped = _.groupBy(templatesContent, (n) => {\n return n.title;\n });\n\n return (\n \n \n \n \n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n glossary: state.data.glossary,\n recommendations: state.data.recommendations,\n furtherReading: state.data[\"further-reading\"],\n allToolsData: state.data.tools\n ? allFlatTools(state.data.tools.children)\n : [],\n };\n};\n\nexport default connect(mapStateToProps)(SidebarModals);\n","import React, { useState } from \"react\";\nimport { View, Button } from \"./blocks\";\nimport selectFolder from \"../actions/selectFolder\";\nimport { findSelectedFolder } from \"../helpers/helpers\";\nimport { connect } from \"react-redux\";\nimport { useEffect } from \"react\";\nimport AreaContent from \"./AreaContent\";\n\nconst RoutedFolder = ({ pathname, data, area }) => {\n const [selectedFolder, setSelectedFolder] = useState(\"\");\n\n const pathnameEdit = pathname.substr(1);\n\n useEffect(() => {\n setSelectedFolder(findSelectedFolder(pathnameEdit, data));\n }, [pathname, data]);\n\n return ;\n};\n\nconst mapStateToProps = (state) => {\n return {\n data:\n state.data && state.data.tools && state.data.tools.children\n ? state.data.tools.children\n : [],\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n navigateFolder: (folder) => dispatch(selectFolder(folder)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RoutedFolder);\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport colors from \"../helpers/colors\";\nimport { Label, Text, View } from \"./blocks\";\n\nconst SidebarLabels = () => {\n const location = useLocation();\n\n const isStartPage = location.pathname === \"/\";\n if (!isStartPage)\n return (\n \n \n \n \n = New ISAC\n \n \n \n \n \n = Established ISAC\n \n \n \n \n \n = ISACs Traffic Light Protocol\n \n \n \n );\n if (isStartPage) return \"\";\n};\n\nexport default SidebarLabels;\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { responsiveDimensions } from \"../helpers/constants\";\nimport useWindowDimensions from \"../helpers/dimensionHook\";\nimport { View } from \"./blocks\";\nimport NavSitebar from \"./NavSitebar\";\nimport SidebarLabels from \"./SidebarLabels\";\nimport SidebarModals from \"./SidebarModals\";\n\nconst SideBar = () => {\n const { height, width } = useWindowDimensions();\n\n const isDesktop = width > responsiveDimensions.monitor;\n\n const location = useLocation();\n\n const isStartPage = location.pathname === \"/\";\n\n return (\n \n \n {isDesktop && (\n \n \n \n \n )}\n \n );\n};\n\nexport default SideBar;\n\nconst SidebarContainer = styled(View)`\n display: flex;\n flex-direction: column;\n width: 400px;\n\n @media (max-width: ${responsiveDimensions.monitor}px) {\n width: 50%;\n align-self: center;\n }\n\n @media (max-width: ${responsiveDimensions.tablet}px) {\n width: 100%;\n align-self: center;\n }\n`;\n","import React, { useEffect } from \"react\";\nimport { Route, HashRouter, Switch, useLocation } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\n\nimport { Label, Text, View } from \"../components/blocks/index\";\nimport NavSitebar from \"../components/NavSitebar\";\nimport AreaContent from \"./AreaContent\";\nimport { getData } from \"../actions/getData\";\nimport StartPage from \"./StartPage\";\nimport styled from \"styled-components\";\nimport { responsiveDimensions } from \"../helpers/constants\";\nimport SidebarModals from \"./SidebarModals\";\nimport useWindowDimensions from \"../helpers/dimensionHook\";\nimport RoutedFolder from \"./RoutedFolder\";\nimport colors from \"../helpers/colors\";\nimport SidebarLabels from \"./SidebarLabels\";\nimport SideBar from \"./SideBar\";\n\nconst Container = ({ state, getNewData }) => {\n useEffect(() => {\n getNewData();\n }, []);\n\n const { height, width } = useWindowDimensions();\n\n const isDesktop = width > responsiveDimensions.monitor;\n\n return (\n \n \n \n \n \n (\n <>\n }\n exact\n />\n (\n \n )}\n />\n >\n )}\n >\n (\n <>\n }\n exact\n />\n (\n \n )}\n />\n >\n )}\n >\n (\n <>\n }\n exact\n />\n (\n \n )}\n />\n >\n )}\n >\n (\n <>\n }\n exact\n />\n (\n \n )}\n />\n >\n )}\n >\n \n {!isDesktop && (\n \n \n \n \n )}\n \n \n );\n};\n\nconst mapStateToProps = (state) => {\n return {\n state,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n getNewData: () => dispatch(getData()),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Container);\n\nconst ContainerView = styled(View)`\n display: flex;\n @media (max-width: ${responsiveDimensions.monitor}px) {\n flex-direction: column;\n }\n`;\n","import { makePaths } from \"../helpers/helpers\";\n\nconst addPathToTools = (data) => {\n const toolsChildren = makePaths(data.tools.children);\n\n const tools = { ...data.tools, children: toolsChildren };\n\n const newData = { ...data, tools };\n\n return newData;\n};\n\nconst getData = (state = {}, action) => {\n switch (action.type) {\n case \"GET_DATA\":\n return addPathToTools(action.data);\n default:\n return state;\n }\n};\n\nexport default getData;\n","const selectFolder = (state = '', action) => {\n switch (action.type) {\n case \"SELECT_FOLDER\":\n return action.selectedFolder;\n default:\n return state;\n }\n};\n\nexport default selectFolder;\n","const removeTool = (state, id) => {\n const toolIndex = state.indexOf(\n state.find((item) => {\n return item.id === id;\n })\n );\n const newState = [\n ...state.slice(0, toolIndex),\n ...state.slice(toolIndex + 1),\n ];\n\n return newState;\n};\n\nconst addTool = (state, tool) => {\n const isDuplicate = state.filter((item) => item.id === tool.id).length > 0;\n var newState;\n\n if (isDuplicate) {\n newState = state;\n } else {\n newState = [...state, tool];\n }\n return newState;\n};\n\nconst toolkit = (state = [], action) => {\n switch (action.type) {\n case \"ADD_TOOL\":\n return addTool(state, action.tool);\n case \"REMOVE_TOOL\":\n return removeTool(state, action.id);\n default:\n return state;\n }\n};\n\nexport default toolkit;\n","const notification = (state = {}, action) => {\n switch (action.type) {\n case \"NOTIFICATION\":\n return action.notification;\n default:\n return state;\n }\n};\n\nexport default notification;\n","import { combineReducers } from \"redux\";\nimport selectFolder from \"./selectFolder\";\nimport getData from \"./getData\";\nimport toolkit from \"./toolkit\";\nimport notification from \"./notification\";\n\nexport default combineReducers({\n data: getData,\n selectedFolder: selectFolder,\n toolkit,\n notification,\n});\n","import getData from './reducers/getData';\nimport rootReducer from './reducers/index'\n\nimport { createStore, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk';\n\nimport { persistStore, persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nconst persistConfig = {\n key: 'root',\n storage,\n}\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer)\n\nexport default function configureStore(initialState) {\n let store = createStore(persistedReducer, initialState, applyMiddleware(thunk))\n let persistor = persistStore(store)\n return { store, persistor }\n}","import React, { useEffect, useState } from \"react\";\nimport { Provider } from \"react-redux\";\nimport Container from \"./components/Container\";\nimport { PersistGate } from \"redux-persist/integration/react\";\nimport configureStore from \"./store\";\n\nconst storage = configureStore();\n\nconst App = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App.jsx';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\nserviceWorker.unregister();\n"],"sourceRoot":""}