{"version":3,"sources":["libs/animations-lib.js","libs/team-lib.js","libs/notifications-lib.js","libs/error-lib.js","components/workshops/WorkshopProgressLabel.js","components/CollapsableSection.js","components/questions/QuestionAnswerItem.js","components/questions/QuestionBigCard.js","components/icons/StyledSVGBase.js","components/icons/AsteriskIcon.js","components/icons/CheckMark.js","components/icons/CollapseIcon.js","components/icons/CreateIcon.js","components/icons/CurveArrow.js","components/icons/DiscordIcon.js","components/icons/ExpandIcon.js","components/icons/InviteOnlyIcon.js","components/icons/LeftArrowHide.js","components/icons/LeftArrowShow.js","components/icons/RegularFrown.js","components/icons/RegularLaughBeam.js","components/icons/RegularMeh.js","components/icons/RegularSadTear.js","components/icons/RegularSmile.js","components/icons/RegularStar.js","components/icons/RightArrowHide.js","components/icons/RightArrowShow.js","components/icons/ShareIcon.js","components/icons/SolidFrown.js","components/icons/SolidLaughBeam.js","components/icons/SolidMeh.js","components/icons/SolidSadTear.js","components/icons/SolidSmile.js","components/icons/SolidStar.js","components/icons/SplunkIcon.js","components/icons/TimerIcon.js","components/icons/TopArrow.js","components/icons/WarningIcon.js","components/icons/WorkshopIcon.js","components/CountDown.js","components/teams/PointsCard.js","config.js","libs/context-lib.js","components/workshops/WorkshopVideoProgress.js","components/teams/AccessibilityToggle.js","components/cards/CardBody.js","components/cards/CardIconContainer.js","components/cards/CardDescription.js","components/cards/CardDate.js","components/cards/CardTitle.js","components/BossLabel.js","components/cards/BigCard.js","components/cards/BigCardSkeleton.js","components/nav/BreadcrumbNav.js","components/cards/CardImage.js","components/EventLabel.js","components/cards/CardLabel.js","components/cards/Card.js","components/cards/CardSkeleton.js","components/CollapsableSideMenu.js","components/DirectPointConceiver.js","components/ErrorBoundary.js","components/ScrolleableContainer.js","components/Text.js","components/workshops/WorkshopContent.js","components/TermsConditions.js","components/event/EventDetails.js","components/FloatingMessage.js","components/event/EventHome.js","components/event/EventMenu.js","components/Footer/styles.js","components/Footer/index.js","components/forms/FormInput.js","components/HistoryDetails.js","components/HovereableFlex.js","components/cards/LandscapeCard.js","components/ListHeader.js","components/notifications/NotificationsHandler.js","components/RadioButton.js","components/RestrictedEvents.js","components/ScrollTopButton.js","components/MemberState.js","components/SearchUsers.js","components/nav/SideMenu.js","libs/survey-lib.js","components/Survey/SurveyIntroduction/styles.js","components/Survey/SurveyIntroduction/index.js","components/Survey/questiontypes/NominalScaleQuestion.js","components/Survey/questiontypes/MixScaleQuestion.js","components/Survey/questiontypes/OpenQuestion.js","components/Survey/questiontypes/NumericScaleQuestion.js","components/Survey/questiontypes/StarQuestion.js","components/Survey/questiontypes/SmileQuestion.js","components/Survey/QuestionContainer/styles.js","components/Survey/QuestionContainer/index.js","components/Survey/styles.js","components/Survey/index.js","components/teams/TeamMembersState.js","components/teams/TeamListItem.js","components/teams/TeamListItemSkeleton.js","components/teams/TeamMembersTable.js","components/teams/TeamNameBadge.js","components/teams/TeamWizardModal.js","components/ToastContainerNotification.js","components/ToggleButton.js","components/teams/VisibilityToggle.js","components/workshops/WorkshopAdditionalInfoMenu.js","components/workshops/WorkshopContentMenu.js","components/workshops/WorkshopTabs.js","components/ContainerEvtPlayerMobile.js","components/event/EventFloatingBox.js","components/MalloryMessage.js","components/questions/QuestionAnswer.js","components/questions/QuestionState.js","components/questions/QuestionHistoryModal.js","components/questions/QuestionPointsTable.js","components/ResourcesTable.js","components/scenario/ScenarioStatusTable.js","components/questions/QuestionsGrid.js","components/questions/QuestionsList.js","components/questions/ScenarioQuestionsDisplaySelector.js","components/questions/ScenarioQuestions.js","components/hints/TimeBasedHint.js","components/hints/BuyBasedHint.js","components/hints/HintsTable.js","libs/utils-lib.js","../../../packages/boss-ui/src/hooks.js","../../../packages/boss-ui/src/components/AuthenticatedRoute/index.js","../../../packages/boss-ui/src/components/Breadcrumb/index.js","../../../packages/boss-ui/src/components/Button/index.js","../../../packages/boss-ui/src/icons/StyledSVGBase.js","../../../packages/boss-ui/src/icons/CheckMark/index.js","../../../packages/boss-ui/src/icons/SpinnerIcon/index.js","../../../packages/boss-ui/src/components/common/CenteredFlex.js","../../../packages/boss-ui/src/components/common/Space.js","../../../packages/boss-ui/src/components/Can/index.js","../../../packages/boss-ui/src/constants.js","../../../packages/boss-ui/src/components/Checkbox/index.js","../../../packages/boss-ui/src/components/Modal/index.js","../../../packages/boss-ui/src/components/ConfirmationModal/index.js","../../../packages/boss-ui/src/components/ContextMenu/index.js","../../../packages/boss-ui/src/components/ContextMenuItem/index.js","../../../packages/boss-ui/src/components/RegularText/index.js","../../../packages/boss-ui/src/components/Tooltip/index.js","../../../packages/boss-ui/src/icons/CopyClipboardIcon/index.js","../../../packages/boss-ui/src/components/CopyToClipboard/index.js","../../../packages/boss-ui/src/components/FormLeyend/index.js","../../../packages/boss-ui/src/components/LinkedText/index.js","../../../packages/boss-ui/src/components/Select/index.js","../../../packages/boss-ui/src/icons/UploadIcon/index.js","../../../packages/boss-ui/src/icons/FileIcon/index.js","../../../packages/boss-ui/src/components/DragDrop/index.js","../../../packages/boss-ui/src/icons/InfoIcon/index.js","../../../packages/boss-ui/src/components/CsvImportModal/index.js","../../../packages/boss-ui/src/components/Input/index.js","../../../packages/boss-ui/src/icons/CancelIcon/index.js","../../../packages/boss-ui/src/icons/CheckIcon/index.js","../../../packages/boss-ui/src/components/EditableInput/index.js","../../../packages/boss-ui/src/components/TableData/index.js","../../../packages/boss-ui/src/components/TableRow/index.js","../../../packages/boss-ui/src/icons/PencilIcon/index.js","../../../packages/boss-ui/src/icons/TrashCanIcon/index.js","../../../packages/boss-ui/src/components/TableItemSkeleton/index.js","../../../packages/boss-ui/src/components/EditableTableData/index.js","../../../packages/boss-ui/src/components/EventCredits/index.js","../../../packages/boss-ui/src/components/FloatingMenu/index.js","../../../packages/boss-ui/src/components/FloatingPanel/index.js","../../../packages/boss-ui/src/components/Form/index.js","../../../packages/boss-ui/src/components/FormLabel/index.js","../../../packages/boss-ui/src/components/common/HovereableFlex.js","../../../packages/boss-ui/src/components/Item/index.js","../../../packages/boss-ui/src/components/ListItem/index.js","../../../packages/boss-ui/src/components/ListTable/index.js","../../../packages/boss-ui/src/icons/BooIcon/index.js","../../../packages/boss-ui/src/icons/BotsIcon/index.js","../../../packages/boss-ui/src/components/LoaderIcon/index.js","../../../packages/boss-ui/src/components/Markdown/index.js","../../../packages/boss-ui/src/icons/ExpandIcon/index.js","../../../packages/boss-ui/src/icons/CollapseIcon/index.js","../../../packages/boss-ui/src/components/Menu/SubMenu.js","../../../packages/boss-ui/src/icons/TreeDotsIcon/index.js","../../../packages/boss-ui/src/components/Menu/index.js","../../../packages/boss-ui/src/icons/ProfileIcon/index.js","../../../packages/boss-ui/src/icons/NotificationIcon/index.js","../../../packages/boss-ui/src/components/Nav/NavContainer.js","../../../packages/boss-ui/src/components/Nav/NavGroup.js","../../../packages/boss-ui/src/components/Nav/NavTitle.js","../../../packages/boss-ui/src/icons/LogOutIcon/index.js","../../../packages/boss-ui/src/icons/AccountSettingsIcon/index.js","../../../packages/boss-ui/src/components/StyledText/index.js","../../../packages/boss-ui/src/utils.js","../../../packages/boss-ui/src/components/Nav/ProfileSection.js","../../../packages/boss-ui/src/components/UnregularButton/index.js","../../../packages/boss-ui/src/icons/CrossIcon/index.js","../../../packages/boss-ui/src/components/Nav/NotificationCard.js","../../../packages/boss-ui/src/components/Nav/NotificationList.js","../../../packages/boss-ui/src/components/Nav/index.js","../../../packages/boss-ui/src/icons/PrevIcon/index.js","../../../packages/boss-ui/src/icons/NextIcon/index.js","../../../packages/boss-ui/src/components/Paginator/index.js","../../../packages/boss-ui/src/icons/QuestionIcon/index.js","../../../packages/boss-ui/src/components/QuestionCard/QuestionState.js","../../../packages/boss-ui/src/components/QuestionCard/index.js","../../../packages/boss-ui/src/components/QuestionCardSkeleton/index.js","../../../packages/boss-ui/src/components/QuestionInLine/constants.js","../../../packages/boss-ui/src/components/QuestionInLine/index.js","../../../packages/boss-ui/src/components/QuestionInlineSkeleton/index.js","../../../packages/boss-ui/src/components/ResourcesList/index.js","../../../packages/boss-ui/src/components/ShakeContent/index.js","../../../packages/boss-ui/src/components/SwitchButton/index.js","../../../packages/boss-ui/src/components/TableHead/index.js","../../../packages/boss-ui/src/components/TableBody/index.js","../../../packages/boss-ui/src/components/Table/index.js","../../../packages/boss-ui/src/components/TableHeader/index.js","../../../packages/boss-ui/src/components/Tabs/index.js","../../../packages/boss-ui/src/components/TabScreen/index.js","../../../packages/boss-ui/src/components/TextArea/index.js","../../../packages/boss-ui/src/components/UnauthenticatedRoute/index.js","../../../packages/boss-ui/src/icons/AddIcon/index.js","../../../packages/boss-ui/src/icons/BlockIcon/index.js","../../../packages/boss-ui/src/icons/ClearIcon/index.js","../../../packages/boss-ui/src/icons/CloseIcon/index.js","../../../packages/boss-ui/src/icons/EnrollIcon/index.js","../../../packages/boss-ui/src/icons/ExportIcon/index.js","../../../packages/boss-ui/src/icons/GameIcon/index.js","../../../packages/boss-ui/src/icons/GridIcon/index.js","../../../packages/boss-ui/src/icons/ImportIcon/index.js","../../../packages/boss-ui/src/icons/LinkIcon/index.js","../../../packages/boss-ui/src/icons/ListIcon/index.js","../../../packages/boss-ui/src/icons/MinusIcon/index.js","../../../packages/boss-ui/src/icons/OpenIcon/index.js","../../../packages/boss-ui/src/icons/PrivateIcon/index.js","../../../packages/boss-ui/src/icons/PublicIcon/index.js","../../../packages/boss-ui/src/icons/QuestionCircleIcon/index.js","../../../packages/boss-ui/src/icons/RefreshIcon/index.js","../../../packages/boss-ui/src/icons/SandTimeIcon/index.js","../../../packages/boss-ui/src/icons/SearchIcon/index.js","../../../packages/boss-ui/src/icons/SpyIcon/index.js","../../../packages/boss-ui/src/icons/TeamIcon/index.js","../../../packages/boss-ui/src/icons/UnlockIcon/index.js","../../../packages/boss-ui/src/icons/UserSlashIcon/index.js","libs/roles-lib.js","libs/hooks-lib.js","components/scenario/Scenario.js","api.js","libs/dates-lib.js","libs/event-lib.js","libs/resource-lib.js","libs/scenario-lib.js","libs/constants.js","libs/cognito-lib.js","theme.js","containers/FirstSignIn/index.js","components/VerifyEmailForm.js","containers/Login/index.js","containers/Signup/index.js","containers/LoginSuccess/index.js","containers/Account/index.js","containers/NotFound.js","containers/PasswordRecovery/index.js","containers/History/index.js","containers/Home/index.js","../../../packages/boss-ui/src/FeatureFlagApiClient.js","containers/Event/index.js","containers/Logout/index.js","containers/EventDetails/index.js","containers/HistoryDetails/index.js","containers/WorkshopDetails/index.js","containers/Survey/index.js","containers/DiscordJoinRedirection/index.js","libs/user-lib.js","Routes.js","App.js","index.js","rum.js","components/websocket/index.js","libs/question-lib.js"],"names":["fadeIn","keyframes","heightEffect","VISIBILITY_RAW","PUBLIC","PRIVATE","VISIBILITY_VALUE","true","false","ACCESSIBILITY_RAW","OPEN","CLOSED","ACCESSIBILITY_VALUE","defineTeamMembers","team","maxNumberOfParticipants","full","numberOfParticipants","getTeamChanges","baseTeam","newTeam","changes","changedParticipants","name","match","TEAM_NAME_REGEXP","Error","validateChanges","participants","forEach","editedParticipant","dirty","originalParticipant","find","p","userId","state","push","omit","length","visibility","accessibility","getUserRoleInTeam","userInTeam","USER_INVITE_STATE","ACCEPTED","role","getContainerStyleMedia","matches","style","mx","width","s","getStyleMedia","boxWidth","boxPx","formWidth","flexWidth","flexPx","teamNameMobile","joinTeamFlexDirection","joinTeamWidth","joinTeamHeight","joinTeamInputWidth","joinTeamInputPX","joinTeamInputPY","joinTeamInputHeight","teamInvitationsWidth","switchButtonsFlex","switchButtonsWidth","btnSetJoinWidth","btnSetLeaveWidth","btnNewTeam","pointAdjustFlexDir","pointAdjustAlign","pointAdjustPy","pointAdjustAssignBtnWitdh","pointAdjustAssignReasonWitdh","l","m","xs","ALERTABLE_NOTIFICATIONS","ACTIONABLE_NOTIFICATIONS","NOTIFICATION_MESSAGE_BY_NAME","TEAM_INVITE_RECEIVED","TEAM_INVITE_REMOVED","TEAM_INVITE_ACCEPTED","n","get","TEAM_INVITE_REJECTED","TEAM_INVITE_CANCELLED","TEAM_INVITE_DISBAND","DEFAULT","formatNotificationMessage","notification","message","notificationType","onError","error","toString","ERROR_NAMES","ABORTED_REQUEST","response","errors","e","toast","getMessageError","SESSION_EXPIRED","ProgressLabel","styled","Flex","props","completed","css","theme","margin","displayName","WorkshopProgressLabel","stats","forceProgress","isWorkshopCompleted","progressPercentage","padding","backgroundColor","color","marginLeft","CollapsableSection","children","justify","expanded","showLabel","hideLabel","useState","visible","setVisible","flexDirection","mt","justifyContent","onClick","QuestionAnswerItem","text","createdAt","username","whiteSpace","mb","alignItems","mediumWeight","fontSize","format","Date","minWidth","wordBreak","Container","question_card","background","inactive","border","pending","correct","incorrect","getGridColumnsOnExpanded","media","gridColumnStart","gridColumnEnd","xl","API","Api","QuestionBigCard","question","onCloseCard","answer","points","gridNavigation","phrasing","base_point_value","question_id","external","required_resources","isPrev","isNext","goNext","goPrev","useScenarioContext","currentScenario","setScenarioQuestions","scenarioQuestions","useAppContext","event","user","history","useHistory","submittingAnswer","setSubmittingAnswer","showHistoryModal","setShowHistoryModal","questionPoints","setQuestionPoints","questionHistory","setQuestionHistory","lastQuestionAnswer","setLastAnswer","closing","setClosing","shaking","setShaking","questionRef","useRef","isQuestionCorrect","EVENT_QUESTION_STATUS","CORRECT","isQuestionIncorrect","INCORRECT","includeBackground","question_phrasing","externalURL","useMemo","resources","resourceId","first","resource_id","userResource","r","instance_url","useLayoutEffect","questionBoxPosition","current","getBoundingClientRect","window","scrollTo","top","pageYOffset","MENU_BAR_HEIGHT","useEffect","a","eventId","scenarioId","historyRequest","total","updateQuestionBy","getQuestion","abortCurrentRequest","isEmpty","answers","concat","submitAnswer","answerInput","post","body","phrasing_id","answerRequest","updateQuestionsWithAnswer","status","setTimeout","buyHint","hintId","hint_id","rq","questionRequest","hint","refreshHints","ref","minHeight","shake","answer_guidance","localStorageId","isExternal","onSubmitAnswer","isSubmittingAnswer","hints","hintsStrategy","hintScoring","totalHints","hints_count","onBuyHint","onRefreshHintsList","active","query","score","shakeTotal","ml","noPadding","disabled","className","DEFAULT_BOX_BORDER_STYLE","hide","secondary","Math","round","DEFAULT_BONUS_MULTIPLIER","onClose","questionId","svg","attrs","version","xmlns","xmlnsXlink","AsteriskSVG","svgBase","size","hover","AsteriskIcon","viewBox","fill","d","CheckIcon","Base","CheckMark","height","CollapsableIcon","transform","TopArrow","stroke","strokeLinecap","strokeWidth","strokeLinejoin","LeftArrow","CurveArrow","direction","DiscordSVG","DiscordIcon","ExpandIcon","InviteOnlyIcon","SIZE","Arrow","LeftArrowHide","LeftArrowShow","RegularFrown","RegularLaughBeam","RegularMeh","RegularSadTear","RegularSmile","RegularStar","RightArrowHide","RightArrowShow","SolidFrown","SolidLaughBeam","SolidMeh","SolidSadTear","SolidSmile","SolidStar","SplunkIcon","Timer","WarningSVG","WarningIcon","WorkshopIcon","CountDownBox","nav","startCountDownInterval","endCountDownInterval","padZeroStart","number","nroDigits","slice","getCountDownTime","hours","minutes","seconds","CountDown","endDate","startDate","allowStartingPreview","isAdminView","mobile","eventEndCountDown","setEndCountDown","eventStartCountDown","setStartCountDown","isEventHappening","isTodayBetween","isEndingEvent","Number","months","days","startEventCountDown","setInterval","intervalToDuration","start","end","clearInterval","endCountDownInDays","differenceInDays","display","light","startCountDownInDays","Box","$refreshing","BoxMobile","wsClient","WebSocketClient","PointsCard","teamPoints","loading","onRefresh","isOnDemandEvent","showRefresh","sessionId","theScore","setTheScore","useRefreshScore","refreshHover","setRefreshHover","getLastUpdatedLabel","resetLastUpdate","scoreUpdateHandler","useCallback","update","addListener","clearListener","medium","pr","cursor","onMouseEnter","onMouseLeave","rotate","my","borderBottom","envConfig","stringToBoolean","value","def","process","REACT_APP_ENABLE_LEGACY_RESOURCES","location","hostname","appType","termsConditionsUrl","enableLegacyResources","rum","deploymentEnvironment","apiGateway","REGION","URL","webSocket","cognito","SAML_LOGIN","MANDATORY_SIGN_IN","saml","IDP_NAME","IDP_RESPONSE_TYPE","IDP_LOGIN_URL","IDP_SCOPE","DOMAIN","USER_POOL_ID","APP_CLIENT_ID","IDENTITY_POOL_ID","SCOPE","REDIRECT_SIGN_IN","REDIRECT_SIGN_OUT","discord","REDIRECT_URI","merge","MAX_ATTACHMENT_SIZE","DISCORD_API_URL","GET_DISCORD_USER_PATH","DISCORD_OAUTH_URL","applicationName","beaconUrl","rumAccessToken","AppContext","createContext","useContext","TeamContext","useTeamContext","WorkshopContext","useWorkshopContext","ScenarioContext","WorkshopVideoProgress","fontFamily","textAlign","fontWeight","py","px","AccessibilityToggle","fieldValue","handleFieldChange","position","checked","handleToggle","id","onIcon","offIcon","onText","offText","data-tip","data-for","right","place","BodyContainer","card","classic","restricted","inprogress","CardIcon","div","CardDescription","description","climpAfterLine","animate","withTheme","date","dateObject","getDateComponents","stringMonth","toUpperCase","day","year","CardTitle","title","BOO_STYLE","BOTS_STYLE","BossLabel","type","rest","BOTS_TYPE","NOC","Image","img","MenuContainer","withRouter","crumbs","CardImage","EventLabel","enrolled","EnrolledLabel","TimeLeftLabel","timeLeft","CardLabel","eventType","isEventRunning","delivery","showProgressLabel","joinDate","duration","showEnrolledLabel","EVENT_TYPE","WORKSHOP","marginTop","EVENT_DELIVERY","ON_DEMAND","inProgressStartDate","inProgressEndDate","getTime","isOnDemandEventInsidePlayWindow","getDurationLabel","durationFormated","formatMinutes","hour","Card","activeEndDate","activeStartDate","imageURL","isScenario","onCardClick","registrationClosedDate","registrationOpenDate","registrationStatus","scenarioIdx","scenarioLabel","showDate","NORMAL","isNormalEventInsideActiveWindow","imgSize","imageSrc","getImageURLSized","titleRef","descriptionLines","setdescriptionLines","GAME","titleHeight","offsetHeight","CARD_MARGIN","maxWidth","src","alt","target","getNoImageUrl","CardBody","capitalize","removePlural","CardIconContainer","pl","CollapsableDescription","CardSkeletonBlock","SKELTELON_STYLE","COLOR","highlightColor","EFFECT","borderColor","CardSkeletonLandscapeBlock","paddingTop","marginBottom","CardSkeleton","landscape","queries","flexWrap","WorkshopMenuContent","form","CollapsableMenu","side","expandedWidth","collapsed","menuVisible","setMenuVisible","menuWidth","expectedWidth","getMenuWidth","toggleMenu","ErrorBoundary","hasError","errorMsg","errorMessage","errorInfo","console","this","ignoreMessage","React","Component","ScrolleableContainer","topMargin","setScrolled","maxHeight","onScroll","scrollHeight","scrollTop","clientHeight","overflowX","Text","WorkshopTopic","subTopics","progress","onTitleClick","v","map","st","TopicChildren","isDone","isCompleted","TopicTitle","showProgress","breadcrumb","WorkshopContent","content","c","TermsAndConditions","loadingTerms","setLoadingTerms","termsAndConditionsMD","setTermsAndConditionsMD","fetch","config","headers","ok","fetchTerms","md","EnrollComponent","onEnrollEvent","disableEnroll","requireConfirmationNumber","confirmationNumber","setConfirmationNumber","ackVisible","setAckVisible","shareInformationAccepted","setShareInformationAccepted","mr","onChange","placeholder","CONFIRMATION_NUMBER_REGEXP","onBackgroundClick","EnterEventComponent","eventDelivery","participantJoinDate","eventDuration","onPlayAgainEvent","validOnDemand","label","EventDetails","confirmationNumberRequired","inviteCode","details","setDetails","userInEvent","setUserInEvent","loadingDetails","setLoadingDetails","enrollingEvent","setEnrollingEvent","enrollForbiden","setEnrollForbidden","closedRegistrationMessage","setClosedRegistrationMessage","setEvent","getDetails","participant","workshop","isTodayAfterThan","acceptShareInformation","dynamoUser","email","attributes","inviteCodeId","isRestrictedEvent","accessType","EVENT_ACCESS_TYPE","RESTRICTED","userEnrolled","marginLop","paddingBottom","termsUrl","terms","labels","onTabChange","FloaitngMessage","left","colors","useTheme","floatingMessage","addScenarioIndex","scenarios","idx","getGridConfiguration","QUESTION_CARD_DEFAULT_WIDTH","EventHome","eventScenarios","isOnDemand","isUserWithOutTeam","eventDescription","eventRules","setScenarios","loadingScenarios","setLoadingScenarios","EVENT_WORDING","SCENARIO","getEventScenarios","scenariosWithIdx","eventIcon","SOC","getEventShortName","bottom","gridTemplateColumns","gridGap","gridAutoFlow","key","EventMenu","onLeaveEvent","onShowCredits","hideScoring","userWithoutTeam","menuItems","items","path","exact","rootPath","pathname","split","includes","calculateCompoundTeamPath","isEventStarted","subMenu","getMenuItems","auxiliaryItems","dangerTheme","eventCreditsMd","getAuxiliaryItems","FooterContainer","font","family","regular","Link","UnorderedList","ul","CopyrightText","span","FOOTER_LINKS","url","Footer","links","link","href","getCurrentYear","InputIcon","remove","InputValidation","valid","input","success","FormInput","search","available","validMessage","unavailableMessage","validate","validating","pattern","invalidPatternMessage","styleBox","inputType","DEFAULT_FORM_INPUT_TYPE","patternFulfilled","setPatternFulfilled","inputChange","undefined","INPUT_FORM_TYPE_TEXTAREA","transformEventStats","scenariosScores","transformedStats","scenario","totalScore","baseScore","base","bonusScore","bonus","penalty","average","median","scenarioStat","count","toFixed","max","min","HistoryDetails","globalTeamsCount","loadingData","setLoadingData","scenarioData","setScenarioData","setStats","workshopContentWithStats","setWorkshopContentWithStats","userTeamName","setUserTeamName","statsRq","getScenarioDetails","rank","pb","paddingLeft","borderRight","row","disable","MainContainer","ContainerBottom","calculateDescriptionLines","schema3Boxes","schema4Boxes","schema5Boxes","getWidthSchema","schema2Boxes","LandscapeCard","activeEvent","imageType","NotificationsHandler","userSession","setNotifications","eventRouteMatch","useRouteMatch","performNotificationAction","notificationEventId","pathEventId","u","wsMessageHandler","data","notif","notificationsRq","alertableNotifications","notifications","WEB_SOCKET_STATUS","RECONNECTING","getNotifications","open","authenticateRq","JSON","stringify","on","removeListener","RestrictedEvents","restrictedEvents","loadingRestrictedEvents","schemaSmall","schema1Boxes","re","justifySelf","ArrowBox","show","ScrollTopButton","showScroll","setShowScroll","insideBox","setInsideBox","checkScrollTop","addEventListener","removeEventListener","behavior","MemberState","center","invited","unavailable","public","SeatAvailables","seats","SearchUsers","addParticipants","screenWidthSchema","setSearch","setLoading","debounceSearching","setDebounceSearching","useDynamoPaginator","pages","currentPage","paginate","searchList","setSearchList","inviteUser","recentlyAdded","inviteState","USER_TEAM_STATE","INVITED","getUserState","hasTeam","AVAILABLE","prepareUserList","users","filterList","searchUser","q","page","lastEvaluatedKey","nextPagePointer","lastPagePointer","queryStringParameters","pageSize","result","pagination","boxShadow","debounce","refreshing","item","noBorder","button","TEAM_MEMBER_ROLE","CAPTAIN","REGULAR","onNext","onPrev","paginating","MenuLink","options","align","opt","to","route","isEmptyQuestion","required","SURVEY_QUESTIONS_TYPE","OPTIONS_AND_TEXT","option","SURVEY_QUESTION_OPTION_OTHER","checkIsPendingQuestions","x","scrolled","ContentContainer","Name","Description","RegularText","RequiredContainer","Star","Required","ActionsContainer","showOnDismiss","ButtonWrapper","Button","SurveyIntroduction","onDismiss","NominalScaleQuestion","letterSpacing","MixScaleQuestion","resize","OpenQuestion","DEFAULT_NUMERIC_SCALE","NumberCircle","filled","NumericScaleQuestion","o","DEFAULT_RANGE_OPTIONS","1","2","3","4","5","StarQuestion","initialState","Object","keys","k","calculateInitialState","stars","setStars","optionKey","clickedValue","prevStars","newStars","starKey","hoverEnterValue","regularIcon","solidIcon","getFace","SmileQuestion","opacity","SecondaryContainer","LineSep","QuestionCount","showQuestionWarning","QuestionTitle","NumericScaleQuestionContainer","StarQuestionContainer","SmileQuestionContainer","NominalScaleQuestionContainer","MixScaleQuestionContainer","OpenQuestionContainer","WarningIconWrapper","QuestionContainer","onAnswerQuestion","onQuestionChange","change","NUMERIC_SCALE","STAR_SCALE","SMILE_SCALE","JUST_OPTIONS","JUST_TEXT","TextIntroContainer","SubmitedSucess","PrevButton","SubmitButton","NextButton","prepareAnswers","tmpAnswers","setOpacity","currentIndex","Survey","campaignId","questions","showTextIntro","setAnswers","setCurrentIndex","showIntro","setShowIntro","submitSuccess","setSubmitSuccess","isPendingQuestions","setIsPendingQuestions","onSubmitSurvey","setShowQuestionWarning","handleClickNext","handleClickSubmit","setAnswerQuestion","TeamMembersState","teamMembersState","TEAM_VISIBILITY","icon","inverted","invertedColor","tooltipMessage","teamId","TeamAccessibility","onJoinTeam","isAnInvite","TEAM_ACCESSIBILITY","getAccessibility","TeamListItem","onTeamClicked","transparentBackground","themeColors","truncate","omission","TeamListItemSkeleton","TeamMembersTable","setParticipants","initialNroCaptains","loadingParticipants","contextAction","handleModal","isJoinView","addUserModalVisible","setAddUserModalVisible","filteredParticipants","setFilterdParticipants","nroCaptains","setNroCaptains","canEditTeam","removeTeamMember","member","teamMembers","cloneDeep","teamMember","filter","PENDING","REJECTED","CANCELLED","changeMemberRole","disableChangeMember","creator","disableRemoveMember","yes","perform","rules","numberOfCells","isCaptain","captain","toLower","onRemoveMemberClick","onChangeRoleMemberClick","newMember","members","TeamNameBadge","editionActive","activateEdition","saveHover","mouseHoverSave","cancelHover","mouseHoverCancel","editionAllowed","onNameChange","onNameReset","onNameChanged","validName","autoFocus","paddingRight","zIndex","ToastContainerNotification","ToastContainer","toastNotification","progressBar","Label","Input","ToggleButton","isOn","onToggle","htmlFor","VisibilityToggle","TABS_LABELS","classTranscript","classLinks","currentTabIdx","setCurrentTabIdx","transcript","setTranscript","tabsContent","0","server","credentials","getTabsContent","workshopAdditionalInfo","getClassTranscript","isVisibleSlug","activeClassSlug","slug","indexOf","WorkshopContentMenu","classesProgress","done","pt","borderTop","ceil","classesDone","innerLevel","menuPadding","classDone","isActive","PURPLE_COLOR","GREEN_COLOR","BLUE_COLOR","getTabsNames","arrNames","linksList","list","workshopLinks","WorkshopTabs","tabs","ContainerEvtPlayerMobile","navigationMenu","nowDate","EventFloatingBox","isAdmin","setTeamPoints","loadingTeamPoints","setLoadingTeamPoints","countDownStartDate","countDownEndDate","ONE_MINUTE_MS","DEFAULT_ON_DEMAND_EVENT_DURATION","getPoints","shouldRenderPointsBox","eventRunningTimeout","endDateInMs","MAX_INT32","log","isEventEnded","clearTimeout","startEventInterval","startDateInMs","NAV_MOBILE_MAXWIDTH","mobileScreen","messageCard","Message","MalloryMessage","AnswerCorrect","QuestionAnswer","useLocalStorage","setAnswerInput","incorrectAnswer","setIncorrectAnswer","isWebSocketAnswer","onKeyDown","trim","dangerBorder","isLoading","QuestionState","iconSize","table","Hint","QuestionHistoryModal","overflowY","Row","tr","Cell","td","TableHead","thead","ScoreTable","header","EMPTY_ANSWER_SCORE","PointsTable","ResourcesTable","ignoreTooltip","SKELETON_STYLE","skeleton","resourceBlock","resource","res","showCredentialsInTable","password","RESOURCES_COLORS","Table","IconInLine","LoadingPoint","circle","unanswered","QuestionsGrid","onQuestionCardClick","onQuestionCardClosed","onQuestionRemoved","focusedQuestionId","removingQuestionId","questionNavigation","isEditionView","isSelected","isQuestionBeingRemoving","Fragment","selectedCard","onSelectCard","onRemoveQuestion","removingQuestion","ScenarioQuestions","ScenarioQuestionsDisplaySelector","onSelected","selected","listHover","setListHover","gridHover","setGridHover","DISPLAY_QUESTIONS_MODE","LIST","onMouseOver","GRID","customMessageEvents","SELECT_FILTER_OPTIONS","filterQuestionsByState","loadingScenario","setFocusedQuestionId","filterQuestionValue","setFilterQuestionsValue","filterdScenarioQuestions","setFilteredScenarioQuestions","displayMode","setDisplayMode","getQuestionNavigation","questionIndex","intersectionBy","answerUpdateHandler","updatedQuestion","updateQuestionByWS","TimeBasedHint","releaseTimeOut","firstHintToRelease","reduce","selectedCandidate","candidate","closest","activation","closestCandidate","now","distanceToReleace","differenceInMilliseconds","releaseTime","getHourMinuteDifference","BuyBasedHint","hintBuyInformation","setHintBuyInformation","numberVisibleHints","sum","onAccept","onCancel","acceptLabel","hint_cost","HintsTable","SCENARIO_HINTS_STRATEGIES","TIME","DOMAINS","domain","getAppType","setUserHeaders","loggedUser","userName","deleteUserHeaders","string","endsWith","substr","NUMBERS","ZERO","ONE","reloadPage","reload","sendWarning","reloadpage","warn","parseJwt","token","base64","replace","jsonPayload","decodeURIComponent","atob","charCodeAt","join","parse","getHashObjectInURL","paramMap","hash","scrollToHash","element","document","getElementById","scroll","offsetTop","signRequest","params","Auth","currentCredentials","essentialCredentials","secret_key","secretAccessKey","access_key","accessKeyId","session_token","sessionToken","Signer","signUrl","formDataBody","json","prop","encodeURIComponent","getNewDate","args","MD_DEFAULT_OPTIONS","skipSanitize","markedOptions","sanitizeOptions","allowedTags","disallowedTagsMode","allowedAttributes","selfClosing","allowedSchemes","allowedSchemesByTag","allowedSchemesAppliedToAttributes","allowProtocolRelative","useQuery","URLSearchParams","useLocation","useMarked","markdown","html","setHtml","marked","setOptions","tokens","lexer","parser","sanitizeHTML","useCopyToClipboard","resetTimeOut","isCopied","setCopied","textCopied","setText","handleCopy","textField","createElement","innerText","appendChild","select","execCommand","timeout","AuthenticatedRoute","validateSession","fallbackRoute","skipRedirect","internalRedirect","Crumb","CrumbSpace","CrumbLine","Breadcrumb","last","staticFather","action","accept","default","reject","danger","SpinnerIcon","cx","cy","strokeDasharray","attributeName","repeatCount","dur","values","keyTimes","Can","permissions","toLowerCase","staticPermissions","static","dynamicPermissions","dynamic","permissionCondition","checkPermission","no","defaultProps","RESOURCE_STATE","RESOURCE_TYPE","CHECKBOX_STATUS","HiddenCheckbox","Icon","StyledCheckbox","checkbox","CheckboxContainer","Checkbox","Background","hideScroll","Modal","stopPropagation","ConfirmationModal","cancelLabel","dangerDialog","Menu","ButtonMenu","unregular","ContextMenu","setMenuVisibility","menuTop","setMenuTop","rect","currentTarget","err","pageY","preventDefault","Item","breakAll","weight","Tooltip","textColor","tooltip","arrowColor","ClipBoardSVG","CopyClipboardIcon","CopiedLabel","hidden","CopyToClipboard","copiedText","indexCopied","setIndexCopied","FormLeyend","legend","LinkedText","hoverColor","StyledSelect","ReactSelect","components","IndicatorSeparator","marginRight","Select","getStyles","control","provided","borderRadius","menu","singleValue","valueContainer","indicatorsContainer","indicatorContainer","styles","UploadSVG","FileSVG","dragDrop","draggedOn","draggedOff","InfoSVG","InfoIcon","modal","placeholderColor","focused","CrossIcon","SquareIcon","CancelIcon","Check","TableData","colSpan","colspan","nowrap","TableRow","borderIncorrect","borderTransparent","mouseOver","PencilSVG","fillHover","PencilIcon","TrashIcon","TrashCanIcon","TableItemSkeleton","CreditsContainer","Title","h1","CreditsLine","StartLabel","TitleContent","Credits","contentUrl","creditsMd","setCreditsMd","containerWidth","setContainerWidth","fetchCredits","innerWidth","creditsText","dangerouslySetInnerHTML","__html","profile","FloatingMenu","parentRef","floatingLeftMargin","documentElement","clientWidth","FloatingPanel","Form","main","FormLabel","HovereableFlex","ListBody","tbody","List","ListContainer","ListTable","BooIcon","gradientUnits","x1","y1","x2","y2","offset","stopColor","rx","ry","BotsIcon","animBOTSLogo","animBOOLogo","IconFrameBOTS","IconFrameBOO","LoaderIcon","Markdown","eventRulesHtml","NavLink","isHover","LabelIcon","isOpen","iconColor","SubMenu","optionsVisible","setOptionsVisible","setHover","matchRoute","closeMenu","sm","DotsSVG","TreeDots","NavHashLink","menuHeight","scrollLimit","mobileMaxWidth","handleScroll","scrollOffset","scrollY","screenSize","i","elementId","el","dispatchEvent","Event","menuItem","isLinkActive","TreeDotsIcon","auxItem","ContextMenuItem","ProfileSVG","ProfileIcon","NotificationIcon","showDot","NavContainer","NavGroup","NavTitle","navTitle","DoorIcon","LogOutIcon","AccountSVG","AccountSettingsIcon","StyledText","truncateString","str","num","ProfileSection","hideSettings","onLogOut","onAccountGo","UnregularButton","saw","NotificationCard","notificationBody","onRemoveNotification","lastItem","navigateTo","read","isRemoving","setRemoving","notificationList","container","NotificationsList","onHideList","onRemoveAllNotifications","onNavigation","HomeLink","iconType","blockNavigation","Nav","breadcrumbs","userDisplayName","userEmail","loggedIn","hideUserSettings","hideUserNotifications","userNotifications","onOpenNotifications","onCloseNotifications","profileVisible","setProfileVisible","notificationsVisible","setNotificationsVisible","areNewNotifications","setNewNotificationsMark","profileRef","notififcationRef","some","hideSections","onNotificationIconClick","onCloseNotificationsClick","PrevSVG","PrevIcon","NextSVG","NextIcon","small","Paginator","QuestionMark","highLigted","QuestionCard","isCardHover","setIsCardHover","isCorrect","isIncorrect","textOverflow","textDecoration","overflowWrap","QuestionCardBlock","QuestionCardSkeleton","QuestionInLine","overflow","QuestionInLineBlock","containerRef","skeletonWidth","setSkeletonWidth","QuestionInLineCardSkeleton","UNASSIGNED_GROUP_KEY","ResourcesGroup","dependencyObj","showFinishedLabel","colorIdx","styleFlexDirection","extraSmall","stateMessage","resourcesLines","resourceSpecSrn","ResourcesList","resourcesGroupedByDependency","groupBy","isDependency","groupedResources","groupKey","resourceCollection","filteredGeneralItems","generalResources","generalDependency","getGeneralItems","resourceObj","ShakeContent","SwitchBackgorund","SwitchIcon","SwitchButton","aria-hidden","TableBody","fixed","noDataPadding","dataPadding","oddBackground","TableHeader","noWrap","xpadding","ypadding","Tab","TabContainer","Tabs","TabButton","fontColor","TabScreen","activeScreenIdx","setActiveScreen","hashMatchIdx","findIndex","t","Textarea","textarea","UnauthenticatedRoute","redirectRoute","AddSVG","AddIcon","BlockSVG","CloseIcon","EnrollSVG","Export","GameIcon","fillColor","Grid","GridIcon","Import","ListIcon","MinusSVG","MinusIcon","OpenIcon","access","highlight","PrivateIcon","EyeSVG","PublicIcon","QuestionMarkSVG","QuestionCircleIcon","rotate360","SVG","$hover","$rotate","RefreshIcon","SandTimeSVG","SandTimeIcon","data-name","SearchIcon","SpyIcon","TeamIcon","UnlockSVG","UserSlashIcon","isolation","player","admin","superadmin","useFormFields","fields","setValues","setPages","setCurrentPage","paginationResponse","targetPage","newPage","pagesCopy","more","LastEvaluatedKey","nextPage","useBreadcrumb","setBc","routes","force","param","lastUpdate","setLastUpdate","initialValue","localStorage","getItem","storedValue","setStoredValue","valueToStore","Function","setItem","Scenario","scenarioResources","answersStatus","setAnswersStatus","userResources","setUserResources","loadingResources","setLoadingResources","showResources","setShowResources","getAnswersStatus","getSpecs","groupId","getSrnGroupId","Promise","all","specs","allocations","joinSpecsAndAllocationsData","scenarioUserResources","filteredResources","getUserScenarioResources","scenarioError","apiRequestPendingPromises","method","promiseIdx","splice","isCancel","statusCode","pushState","apiRequest","requestPromise","cancel","isDate","today","compareAsc","myDate","getDate","month","getMonth","getFullYear","minutesDiff","floor","differenceInMinutes","registrationCloseDate","EVENT_REGISTRATION_STATUS","allocs","tmpArr","requiredSpec","srn","tmpObj","resourceDependencyId","specSrn","slot","getScenariosNavigation","nextScenarioId","prevScenarioId","isScenarioPartOfEvent","getResourceAndDependency","matchedResources","matchedResource","USER_ACKSTATEMENT","SERVER","CREDENTIALS","DISPLAY_NAME_REGEXP","PURCHASE","USER_ROLES","ADMIN","SUPERADMIN","PLAYER","MAXLEN_BIGCARD_TEXT_COLLAPSE","WS_SCENARIO_MESSAGES_TYPES","ACTIVATE","DEACTIVATE","formatLoggedInUser","cognitoUser","parsedToken","signInUserSession","idToken","payload","bodyObject","grant_type","client_id","refresh_token","tokenRq","id_token","expires_in","expires_at","Theme","dark","warning","guidance","boards","activeLight","FirstSignIn","ack","setIsLoading","ackScrolled","setAckScrolled","availableName","setNameAvailable","searchLoading","setSearchLoading","checkDisplayName","delayedSearch","handleUserAttributesSubmit","ackStatement","handleAcceptACK","VerifyEmailForm","confirmationCode","confirmSignUp","signIn","code","resendSignUp","onSubmit","Login","showVerifyEmail","setShowVerifyEmail","labelName","setDynamoUser","registeredUser","SplunkRum","setGlobalAttributes","handleSubmit","assign","FederatedLogin","Signup","confirmPassword","newUser","setNewUser","signUp","redirect_uri","LoginSuccess","validateUserSession","authCode","tokensRq","federatedSignIn","currentAuthenticatedUser","setUserSession","Account","currentName","confirmationModalVisible","setConfirmationModalVisible","patch","editedUser","deleteAccount","del","NotFound","PasswordRecovery","verificationCode","newPassword","newPasswordConfirmation","setFields","codeSent","setCodeSent","handleSendRecoveryCode","forgotPassword","handleResetPassword","forgotPasswordSubmit","History","setLoadingHistory","historyEvents","setHistoryEvents","getUserEvents","events","w","model","alignSelf","index","workshopId","EMPTY_LIST_MESSAGE","MENU_ITEMS","Home","loadingEvents","setLoadingEvents","setLoadingRestrictedEvents","loadingOnDemandEvents","setLoadingOnDemandEvents","onDemandEvents","setOnDemandEvents","loadingWorkshops","setLoadingWorkshops","filteredWorkshops","setFilteredWorkshops","filteredEvents","setFilteredEvents","filteredRestrictedEvents","setFilteredRestrictedEvents","ignoreType","setIgnoreType","hasUserScrolled","setHasUserScrolled","inviteCodeModalVisible","setInviteCodeModalVisible","inviteCodeValue","setInviteCodeValue","loadingInviteCodeEvent","setLoadingInviteCodeEvent","eventsWithType","getOnDemandEvents","getRestrictedEvents","getEvents","workshopsWithType","workshops","getWorkshops","onCardClicked","onInviteCodeSubmit","onUserScrolled","prev","assertFeatureFlagIdIsNotEmpty","featureFlagId","getFeatureFlag","api","shouldHideScoringForEventId","resp","eventIdsToHide","hiddenForEventIds","EventPlayer","lazy","catch","setNavTitle","creditsModalVisible","setCreditsModalVisible","loadingUserInEvent","setLoadingUser","loadingEvent","setLoadingEvent","routeMatch","setHideScoring","then","getUserInEvent","userInSession","getEventByPathId","leaveEvent","fallback","Logout","signOut","close","handleLogout","Details","inviteCodeFromQuery","isRestricted","setBreadcrumbs","getEvent","workshopRouteMatch","historyRouteMatch","linkType","itemId","SurveyContainer","loadingSurvey","setLoadingSurvey","showSurvey","setShowSurvey","survey","setSurvey","surveyRouteMatch","viewMode","getSurvey","surveyId","DiscordJoinRedirection","interval","setCallInterval","loadingText","setLoadingText","getDiscordUser","access_token","withCredentials","Authorization","discordUser","redirectPath","inviteUrl","discordUserId","discordAccessToken","isUndefined","isNull","validateCognitoUserExists","validateDynamoUserExists","Workshop","Routes","isUserSessionValid","isCognitoUserValid","App","isAuthenticating","setIsAuthenticating","setLoggedInUser","hideUserProfileActions","notificationsPromises","readedNotifications","notificationsBase","removeNotificationsPromises","autoClose","hideProgressBar","newestOnTop","closeOnClick","pauseOnFocusLoss","draggable","pauseOnHover","Provider","require","NO_HEADER_VALUE","init","customHeaders","Amplify","configure","mandatorySignIn","region","oauth","scope","redirectSignIn","redirectSignOut","responseType","RESPONSE_TYPE","userPoolId","identityPoolId","userPoolWebClientId","refreshHandlers","endpoints","endpoint","custom_header","ReactDOM","render","autoReconnectInterval","instance","autoReconnectIntervalBase","retryCount","channelsSubscriptions","channels","connectionRequest","WebSocket","onopen","subscriptionMessage","channelKey","subscribe","onmessage","flags","emit","onclose","reconnect","onerror","listener","messageEvent","resolve","currentAttempt","SEND_REINTENT_MAX_ATTEMPTS","waitForOpenConnection","send","channel","unsubscriptionMessage","that","EventEmitter","answerResponse","helper","newQuestionArray","updated","previousQuestion"],"mappings":"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","file":"static/js/main.b4ef43cd.chunk.js","sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const fadeIn = keyframes`\n0% {\n opacity: 0;\n}\n100% {\n opacity: 0.5;\n}\n`;\n\nexport const animBOTSLogo = keyframes`\n0% {\n box-shadow: 0 0 red;\n}\n100% {\n box-shadow: 0 0 100px 80px transparent;\n border-width: 2px;\n}\n`;\n\nexport const animBOOLogo = keyframes`\n0% {\n box-shadow: 0 0 #e9a000;\n}\n100% {\n box-shadow: 0 0 90px 90px transparent;\n border-width: 2px;\n}\n`;\n\nexport const heightEffect = keyframes`\n from {height: 0; color: #1D1D1D;}\n to {height: 100%;}\n`;\n\nexport const rotate360 = keyframes`\n\t0% {\n\t\ttransform: rotate(0deg);\n\t}\n\n 5% {\n\t\ttransform: rotate(0deg);\n\t}\n\n 50% {\n\t\ttransform: rotate(180deg);\n\t}\n\n 55% {\n\t\ttransform: rotate(180deg);\n\t}\n\n\t100% {\n\t\ttransform: rotate(360deg);\n\t}\n`;\n","import omit from 'lodash/omit';\nimport find from 'lodash/find';\nimport { TEAM_NAME_REGEXP, USER_INVITE_STATE } from './constants';\n\nconst VISIBILITY_RAW = {\n PUBLIC: true,\n PRIVATE: false,\n};\nexport const VISIBILITY_VALUE = {\n true: 'PUBLIC',\n false: 'PRIVATE',\n};\nconst ACCESSIBILITY_RAW = { OPEN: true, CLOSED: false };\nexport const ACCESSIBILITY_VALUE = { true: 'OPEN', false: 'CLOSED' };\n\nexport const defineTeamMembers = (team, maxNumberOfParticipants) => ({\n ...team,\n full: maxNumberOfParticipants === team.numberOfParticipants,\n});\n\nconst validateChanges = (team) => {\n if (!team.name.match(TEAM_NAME_REGEXP)) {\n throw new Error('Check on your team name!');\n }\n};\n\nexport const getTeamChanges = (baseTeam, newTeam) => {\n const changes = {};\n const changedParticipants = [];\n validateChanges(newTeam);\n newTeam.participants.forEach((editedParticipant) => {\n if (editedParticipant.dirty) {\n const originalParticipant = find(\n baseTeam.participants,\n (p) => p.userId === editedParticipant.userId\n );\n if (originalParticipant && originalParticipant.state === editedParticipant.state) {\n changedParticipants.push(omit(editedParticipant, 'state'));\n return;\n }\n changedParticipants.push(editedParticipant);\n }\n });\n if (changedParticipants.length > 0) {\n changes.participants = changedParticipants;\n }\n if (newTeam.name !== baseTeam.name) {\n changes.name = newTeam.name;\n }\n if (newTeam.visibility !== VISIBILITY_RAW[baseTeam.visibility]) {\n changes.visibility = VISIBILITY_VALUE[newTeam.visibility];\n }\n if (newTeam.accessibility !== ACCESSIBILITY_RAW[baseTeam.accessibility]) {\n changes.accessibility = ACCESSIBILITY_VALUE[newTeam.accessibility];\n }\n return changes;\n};\n\nexport const getUserRoleInTeam = (participants = [], userId) => {\n const userInTeam = participants.find((p) => p.userId === userId && p.state === USER_INVITE_STATE.ACCEPTED);\n if (userInTeam) {\n return userInTeam.role;\n }\n throw new Error('User is not in the team');\n};\n\nexport const getContainerStyleMedia = (matches) => {\n const style = { mx: '10%', width: '' };\n if (matches.s) {\n style.mx = '0px';\n style.width = '100%';\n }\n return style;\n};\n\nexport const getStyleMedia = (matches) => {\n const style = {\n boxWidth: '766px',\n boxPx: '60px',\n formWidth: '',\n flexWidth: '',\n flexPx: '',\n teamNameMobile: false,\n joinTeamFlexDirection: 'column',\n joinTeamWidth: '750px',\n joinTeamHeight: '530px',\n joinTeamInputWidth: '66%',\n joinTeamInputPX: '45px',\n joinTeamInputPY: '40px',\n joinTeamInputHeight: '130px',\n teamInvitationsWidth: '300px',\n switchButtonsFlex: 'row',\n switchButtonsWidth: '67%',\n btnSetJoinWidth: '25%',\n btnSetLeaveWidth: '50%',\n btnNewTeam: '50%',\n pointAdjustFlexDir: 'row',\n pointAdjustAlign: 'center',\n pointAdjustPy: '',\n pointAdjustAssignBtnWitdh: '25%',\n pointAdjustAssignReasonWitdh: '400px',\n };\n\n if (matches && matches.l) {\n style.joinTeamWidth = '100%';\n style.joinTeamHeight = '100%';\n style.joinTeamInputWidth = '100%';\n style.joinTeamInputPX = '20px';\n style.joinTeamInputPY = '10px';\n style.joinTeamInputHeight = '90px';\n style.teamInvitationsWidth = '100%';\n }\n if (matches && matches.m) {\n style.flexPx = '10px';\n style.flexWidth = '100%';\n style.formWidth = '100%';\n style.boxWidth = '100%';\n style.boxPx = '20px';\n style.btnSetJoinWidth = '100%';\n style.btnSetLeaveWidth = '100%';\n style.joinTeamWidth = '100%';\n style.joinTeamHeight = '100%';\n style.joinTeamInputWidth = '100%';\n style.joinTeamInputPX = '20px';\n style.joinTeamInputPY = '10px';\n style.joinTeamInputHeight = '90px';\n style.teamInvitationsWidth = '100%';\n }\n\n if (matches && matches.s) {\n style.teamNameMobile = true;\n style.boxWidth = '100%';\n style.switchButtonsFlex = 'column';\n style.switchButtonsWidth = '170px';\n style.btnNewTeam = '100%';\n style.pointAdjustFlexDir = 'column';\n style.pointAdjustAlign = 'flex-start';\n style.pointAdjustPy = '5px';\n style.pointAdjustAssignBtnWitdh = '100%';\n style.pointAdjustAssignReasonWitdh = '100%';\n style.joinTeamWidth = '100%';\n style.joinTeamHeight = '100%';\n style.joinTeamInputWidth = '100%';\n style.joinTeamInputPX = '20px';\n style.joinTeamInputPY = '10px';\n style.joinTeamInputHeight = '90px';\n style.teamInvitationsWidth = '100%';\n }\n if (matches && matches.xs) {\n style.boxWidth = '100%';\n }\n return style;\n};\n","import { get } from 'lodash';\n\nexport const ALERTABLE_NOTIFICATIONS = [\n 'TEAM_INVITE_RECEIVED',\n 'TEAM_INVITE_REMOVED',\n 'TEAM_INVITE_ACCEPTED',\n 'TEAM_INVITE_REJECTED',\n 'TEAM_INVITE_CANCELLED',\n 'TEAM_INVITE_DISBAND',\n];\n\nexport const ACTIONABLE_NOTIFICATIONS = [\n 'TEAM_INVITE_REMOVED',\n 'TEAM_INVITE_DISBAND',\n];\n\nconst NOTIFICATION_MESSAGE_BY_NAME = {\n TEAM_INVITE_RECEIVED: () => 'You received a team invitation',\n TEAM_INVITE_REMOVED: () => 'You were removed from your team',\n TEAM_INVITE_ACCEPTED: (n) => `${get(n, 'notification.name', 'Someone')} joined the team`,\n TEAM_INVITE_REJECTED: () => 'Your team invite was rejected',\n TEAM_INVITE_CANCELLED: (n) => `${get(n, 'notification.name', 'Someone')} left the team`,\n TEAM_INVITE_DISBAND: () => 'Your team was disbanded',\n DEFAULT: () => 'New notification received',\n};\n\nexport function formatNotificationMessage(notification) {\n const message = NOTIFICATION_MESSAGE_BY_NAME[notification.notificationType](notification);\n if (message) {\n return message;\n }\n return NOTIFICATION_MESSAGE_BY_NAME.DEFAULT;\n}\n","import get from 'lodash/get';\nimport { toast } from 'react-toastify';\n\nexport function onError(error = {}) {\n let message = error.toString();\n if (error.message === ERROR_NAMES.ABORTED_REQUEST) {\n return;\n }\n if (error.message) {\n message = error.message;\n }\n if (error && error.response) {\n const errors = get(error, 'response.data.errors', []);\n if (errors.length > 0) {\n errors.forEach((e) => toast(e.message));\n return;\n }\n message = get(error, 'response.data.message');\n }\n toast(message);\n}\n\nexport function getMessageError(error) {\n let message = error.toString();\n\n if (error.message) {\n message = error.message;\n }\n if (error && error.response) {\n const errors = get(error, 'response.data.errors', []);\n if (errors.length > 0) {\n message = '';\n errors.forEach((e) => {\n message += e.message;\n });\n return message;\n }\n message = get(error, 'response.data.message');\n }\n return message;\n}\n\nexport const ERROR_NAMES = {\n ABORTED_REQUEST: 'Request aborted',\n SESSION_EXPIRED: 'Session expired',\n};\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { SandTimeIcon } from 'boss-ui';\n\nconst ProgressLabel = styled(Flex)`\n font-family: 'Roboto Mono';\n font-weight: normal;\n font-size: 16px;\n position: absolute;\n padding: 0px;\n width: 205px;\n background-color: #45a647;\n ${(props) =>\n props.completed &&\n css`\n padding: ${props.theme.margin.xs};\n width: 115px;\n background-color: #a088a4;\n `};\n`;\nProgressLabel.displayName = 'WorkshopProgressLabel-ProgressLabel';\n\nfunction WorkshopProgressLabel({ stats = {}, style = {}, forceProgress = false }) {\n if (\n stats &&\n (stats.isWorkshopCompleted || stats.progressPercentage || stats.progressPercentage === 0)\n ) {\n return (\n <>\n {stats.isWorkshopCompleted && !forceProgress ? (\n <ProgressLabel style={style} completed>\n Completed\n </ProgressLabel>\n ) : (\n <ProgressLabel style={style}>\n <Flex style={{ padding: '6px', backgroundColor: 'black' }}>\n <SandTimeIcon color=\"#d0d0d0\" />\n </Flex>\n <Flex style={{ padding: '6px', marginLeft: '6px' }}>\n {stats.progressPercentage}% completed\n </Flex>\n </ProgressLabel>\n )}\n </>\n );\n }\n return null;\n}\n\nexport default WorkshopProgressLabel;\n","import React, { useState } from 'react';\nimport { UnregularButton } from 'boss-ui';\nimport { Flex } from 'reflexbox';\n\nexport default function CollapsableSection({\n children,\n justify = 'left',\n expanded = true,\n showLabel = 'Show more',\n hideLabel = 'Show less',\n}) {\n const [visible, setVisible] = useState(expanded);\n return (\n <Flex flexDirection=\"column\" width={1}>\n {visible && <>{children}</>}\n <Flex mt=\"12px\" justifyContent={justify} width={1}>\n <UnregularButton onClick={() => setVisible((visible) => !visible)}>\n {visible ? hideLabel : showLabel}\n </UnregularButton>\n </Flex>\n </Flex>\n );\n}\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport format from 'date-fns/format';\nimport { RegularText } from 'boss-ui';\n\nexport default function QuestionAnswerItem({ text, createdAt, state, username }) {\n return (\n <Box p=\"4px\" style={{ whiteSpace: 'break-spaces' }}>\n <Flex mb=\"6px\" alignItems=\"center\">\n <RegularText mediumWeight fontSize=\"13px\">\n Time:{' '}\n </RegularText>\n <RegularText fontSize=\"12px\">{format(new Date(createdAt), 'PPpp')}</RegularText>\n </Flex>\n <Flex mb=\"6px\" alignItems=\"center\">\n <RegularText mediumWeight fontSize=\"13px\">\n User:{' '}\n </RegularText>\n <RegularText fontSize=\"12px\">{username}</RegularText>\n </Flex>\n <Flex mb=\"6px\" alignItems=\"start\">\n <RegularText mediumWeight fontSize=\"13px\" minWidth=\"68px\">\n Answer:{' '}\n </RegularText>\n <RegularText fontSize=\"12px\" style={{ wordBreak: 'break-all' }}>\n {text}\n </RegularText>\n </Flex>\n <Flex mb=\"6px\" alignItems=\"center\">\n <RegularText mediumWeight fontSize=\"13px\">\n Result:{' '}\n </RegularText>\n <RegularText fontSize=\"12px\">{state}</RegularText>\n </Flex>\n </Box>\n );\n}\n","import React, { useState, useLayoutEffect, useRef, useEffect, useMemo } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport isEmpty from 'lodash/isEmpty';\nimport get from 'lodash/get';\nimport first from 'lodash/first';\nimport Media from 'react-media';\nimport {\n Button,\n RegularText,\n UnregularButton,\n PrevIcon,\n NextIcon,\n EVENT_QUESTION_STATUS,\n ShakeContent,\n} from 'boss-ui';\nimport Api from '../../api';\nimport QuestionState from './QuestionState';\nimport HintsTable from '../hints/HintsTable';\nimport QuestionAnswer from './QuestionAnswer';\nimport QuestionAnswerItem from './QuestionAnswerItem';\nimport QuestionHistoryModal from './QuestionHistoryModal';\nimport QuestionPointsTable from './QuestionPointsTable';\nimport {\n DEFAULT_BOX_BORDER_STYLE,\n DEFAULT_BONUS_MULTIPLIER,\n MENU_BAR_HEIGHT,\n} from '../../libs/constants';\nimport { useScenarioContext, useAppContext } from '../../libs/context-lib';\nimport { updateQuestionBy, updateQuestionsWithAnswer } from '../../libs/question-lib';\nimport { onError } from '../../libs/error-lib';\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.question_card.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n border: 2px solid;\n margin: ${(props) => props.theme.margin.s} 0 ${(props) => props.theme.margin.s} 0;\n border-color: ${(props) => props.theme.color.question_card.border.pending};\n box-shadow: 0px 12px 16px #0000004d;\n width: 100%;\n max-width: 1000px;\n ${(props) =>\n props.correct &&\n css`\n border-color: ${props.theme.color.question_card.border.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n border-color: ${props.theme.color.question_card.border.incorrect};\n `}\n`;\nContainer.displayName = 'QuestionBigCard-Container';\n\nconst getGridColumnsOnExpanded = (media) => {\n if (media.s) {\n return { gridColumnStart: 1, gridColumnEnd: 2 };\n }\n if (media.xl) {\n return { gridColumnStart: 1, gridColumnEnd: 4 };\n }\n return { gridColumnStart: 1, gridColumnEnd: 3 };\n};\n\nconst API = new Api();\n\nexport default function QuestionBigCard({\n question,\n media = {},\n onCloseCard,\n answer = {},\n points,\n gridNavigation = {},\n}) {\n const { phrasing, base_point_value, question_id, external, required_resources, background } =\n question;\n const { isPrev, isNext, goNext, goPrev } = gridNavigation;\n const { currentScenario, setScenarioQuestions, scenarioQuestions } = useScenarioContext();\n const { event, user } = useAppContext();\n const history = useHistory();\n const [submittingAnswer, setSubmittingAnswer] = useState(false);\n const [showHistoryModal, setShowHistoryModal] = useState(false);\n const [questionPoints, setQuestionPoints] = useState(points);\n const [questionHistory, setQuestionHistory] = useState([]);\n const [lastQuestionAnswer, setLastAnswer] = useState(answer);\n const [closing, setClosing] = useState(false);\n const [shaking, setShaking] = useState(false);\n const questionRef = useRef(null);\n const isQuestionCorrect = lastQuestionAnswer.state === EVENT_QUESTION_STATUS.CORRECT;\n const isQuestionIncorrect = lastQuestionAnswer.state === EVENT_QUESTION_STATUS.INCORRECT;\n const includeBackground = background !== phrasing.question_phrasing;\n /**\n * Provides the external url of the required resource to answer the question\n */\n const externalURL = useMemo(() => {\n if (!required_resources || !required_resources.length || !user.userInTeam.resources) {\n return null;\n }\n const resourceId = first(required_resources).resource_id;\n if (resourceId && user.userInTeam.resources && user.userInTeam.resources.length) {\n const userResource = user.userInTeam.resources.find((r) => r.name === resourceId);\n return userResource ? userResource.instance_url : null;\n }\n return null;\n }, [required_resources, user.userInTeam]);\n\n useLayoutEffect(() => {\n const questionBoxPosition = questionRef.current.getBoundingClientRect();\n window.scrollTo(0, questionBoxPosition.top + window.pageYOffset - MENU_BAR_HEIGHT);\n }, []);\n\n useEffect(() => {\n const getQuestion = async () => {\n try {\n const historyRequest = await API.get(\n 'users',\n `/user/events/${currentScenario.eventId}/scenarios/${currentScenario.scenarioId}/questions/${question_id}`\n );\n setQuestionHistory(get(historyRequest, 'question.activity', []));\n setQuestionPoints(historyRequest.question.total);\n setLastAnswer(historyRequest.question.answer);\n setScenarioQuestions((scenarioQuestions) =>\n updateQuestionBy(\n scenarioQuestions,\n {\n question: historyRequest.question.question,\n total: historyRequest.question.total,\n answer: historyRequest.question.answer,\n },\n question_id\n )\n );\n } catch (e) {\n onError(e);\n }\n };\n\n getQuestion();\n return () => API.abortCurrentRequest();\n }, []);\n\n // update answer and points state variables if there is a prop change\n useEffect(() => {\n setLastAnswer(answer);\n setQuestionPoints(points);\n }, [answer, points]);\n\n // update questionHistory state if there is a new answer\n useEffect(() => {\n // prevent modifications in history for lastQuestionAnswer default value\n if (isEmpty(lastQuestionAnswer)) {\n return;\n }\n if (!questionHistory[0]) {\n setQuestionHistory([lastQuestionAnswer]);\n return;\n }\n // update history if history is empty (first condition) or history is not empty and last item is different than lastQuestionAnswer\n if (questionHistory[0] && questionHistory[0].createdAt !== lastQuestionAnswer.createdAt) {\n setQuestionHistory((answers) => [lastQuestionAnswer].concat(answers));\n }\n }, [lastQuestionAnswer]);\n\n const onClose = () => {\n if (!submittingAnswer) {\n setClosing(true);\n window.scrollTo(0, window.pageYOffset - 720);\n onCloseCard();\n }\n };\n\n const shakeComponents = () => {\n setShaking(true);\n setTimeout(() => setShaking(false), 1000);\n };\n\n const submitAnswer = async (answerInput) => {\n setSubmittingAnswer(true);\n try {\n const answerRequest = await API.post(\n 'users',\n `/user/events/${currentScenario.eventId}/scenarios/${currentScenario.scenarioId}/questions/${question_id}/answer`,\n {\n body: {\n answer: answerInput,\n phrasing_id: phrasing.phrasing_id,\n },\n }\n );\n setQuestionPoints(answerRequest.total);\n setLastAnswer(answerRequest.answer);\n setScenarioQuestions(\n updateQuestionBy(scenarioQuestions, answerRequest, question_id, updateQuestionsWithAnswer)\n );\n } catch (e) {\n onError(e);\n if (e.response && e.response.status === 403) {\n history.push('/');\n }\n } finally {\n setSubmittingAnswer(false);\n shakeComponents();\n }\n };\n\n const buyHint = async (hintId) => {\n try {\n const rq = await API.post(\n 'events',\n `/user/events/${currentScenario.eventId}/scenarios/${currentScenario.scenarioId}/questions/${question_id}/hints`,\n {\n body: {\n hint_id: hintId,\n phrasing_id: phrasing.phrasing_id,\n },\n }\n );\n const questionRequest = await API.get(\n 'users',\n `/user/events/${currentScenario.eventId}/scenarios/${currentScenario.scenarioId}/questions/${question_id}`\n );\n // update question in question list\n setScenarioQuestions(\n updateQuestionBy(scenarioQuestions, questionRequest.question, question_id)\n );\n // update question points\n setQuestionPoints(rq.total);\n // update question history with the hint\n setQuestionHistory((answers) => [{ ...rq.hint }, ...answers]);\n } catch (e) {\n onError(e);\n }\n };\n\n const refreshHints = async () => {\n try {\n const questionRequest = await API.get(\n 'users',\n `/user/events/${currentScenario.eventId}/scenarios/${currentScenario.scenarioId}/questions/${question_id}`\n );\n // update question in question list\n setScenarioQuestions(\n updateQuestionBy(scenarioQuestions, questionRequest.question, question_id)\n );\n } catch (e) {\n onError(e);\n }\n };\n\n return (\n <Flex\n justifyContent=\"center\"\n width={1}\n style={getGridColumnsOnExpanded(media)}\n ref={questionRef}\n >\n <Container\n minHeight=\"620px\"\n closing={closing}\n correct={isQuestionCorrect}\n incorrect={isQuestionIncorrect}\n >\n <Flex flexDirection=\"column\" width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"space-between\">\n <RegularText fontSize=\"24px\" mediumWeight>\n #{question_id}\n </RegularText>\n <ShakeContent shake={shaking}>\n <QuestionState status={lastQuestionAnswer.state} />\n </ShakeContent>\n <Flex>\n <UnregularButton onClick={onClose}>Close</UnregularButton>\n </Flex>\n </Flex>\n {includeBackground && (\n <Flex mt=\"10px\">\n <RegularText color=\"#979797\" fontSize=\"14px\">\n {background}\n </RegularText>\n </Flex>\n )}\n <Box mt=\"10px\">\n <RegularText fontSize=\"18px\" mediumWeight>\n Question:\n </RegularText>\n <RegularText fontSize=\"18px\" mediumWeight>\n {phrasing.question_phrasing}\n </RegularText>\n {phrasing.answer_guidance && (\n <Flex mt=\"6px\">\n <RegularText color=\"#81A2BE\" style={{ wordBreak: 'break-word' }}>\n Answer guidance: {phrasing.answer_guidance}\n </RegularText>\n </Flex>\n )}\n </Box>\n <QuestionAnswer\n localStorageId={`${currentScenario.eventId}${currentScenario.scenarioId}${question_id}`}\n isExternal={external}\n externalURL={externalURL}\n lastQuestionAnswer={lastQuestionAnswer}\n onSubmitAnswer={submitAnswer}\n isQuestionCorrect={isQuestionCorrect}\n isSubmittingAnswer={submittingAnswer}\n />\n <Flex mt=\"40px\" flexDirection=\"column\">\n <HintsTable\n hints={phrasing.hints}\n hintsStrategy={event.hintScoring}\n totalHints={phrasing.hints_count}\n onBuyHint={buyHint}\n onRefreshHintsList={refreshHints}\n active={!isQuestionCorrect}\n />\n </Flex>\n <Media query=\"(max-width: 750px)\">\n {(matches) => (\n <Flex mt=\"40px\" mb=\"20px\">\n <Box minWidth=\"200px\">\n <Flex mb=\"4px\">\n <RegularText mediumWeight fontSize=\"14px\">\n Points earned\n </RegularText>\n </Flex>\n <QuestionPointsTable score={questionPoints} shakeTotal={shaking} />\n </Box>\n {matches ? (\n <Flex ml=\"auto\">\n <UnregularButton\n noPadding\n onClick={() => setShowHistoryModal(true)}\n disabled={isEmpty(lastQuestionAnswer)}\n className=\"QuestionBigCard-openActivity\"\n >\n View Details\n </UnregularButton>\n </Flex>\n ) : (\n <Box width={1} ml=\"12px\">\n <Flex mb=\"4px\">\n <RegularText mediumWeight fontSize=\"14px\">\n Submission history\n </RegularText>\n <Flex ml=\"auto\">\n <UnregularButton\n noPadding\n onClick={() => setShowHistoryModal(true)}\n disabled={isEmpty(lastQuestionAnswer)}\n className=\"QuestionBigCard-openActivity\"\n >\n View Details\n </UnregularButton>\n </Flex>\n </Flex>\n <Box p=\"6px\" style={DEFAULT_BOX_BORDER_STYLE} minHeight=\"126px\">\n {isEmpty(lastQuestionAnswer) ? (\n <RegularText fontSize=\"12px\">No answer so far</RegularText>\n ) : (\n <QuestionAnswerItem {...lastQuestionAnswer} />\n )}\n </Box>\n </Box>\n )}\n </Flex>\n )}\n </Media>\n <Flex mt=\"auto\" justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <Button\n hide={!isPrev}\n disabled={submittingAnswer}\n onClick={goPrev}\n className=\"QuestionBigCard-PrevQuestionButton\"\n secondary\n >\n <PrevIcon />\n </Button>\n </Box>\n {isQuestionCorrect ? (\n <RegularText fontSize=\"20px\" mediumWeight style={{ whiteSpace: 'break-spaces' }}>\n Points Earned:{' '}\n <RegularText fontSize=\"20px\" mediumWeight color=\"#81C784\">\n {questionPoints.total}{' '}\n </RegularText>\n / {Math.round(base_point_value * DEFAULT_BONUS_MULTIPLIER)}\n </RegularText>\n ) : (\n <RegularText fontSize=\"20px\" mediumWeight>\n Base Points: {base_point_value}\n </RegularText>\n )}\n <Box>\n <Button\n hide={!isNext}\n disabled={submittingAnswer}\n onClick={goNext}\n className=\"QuestionBigCard-NextQuestionButton\"\n secondary\n >\n <NextIcon />\n </Button>\n </Box>\n </Flex>\n </Flex>\n </Container>\n {showHistoryModal && (\n <QuestionHistoryModal\n onClose={() => setShowHistoryModal(false)}\n answers={questionHistory}\n questionId={question_id}\n />\n )}\n </Flex>\n );\n}\n","import styled from 'styled-components';\n\nexport default styled.svg.attrs({\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n})``;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst AsteriskSVG = styled(svgBase)`\n width: ${(props) => props.size || '14px'};\n height: ${(props) => props.size || '14px'};\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\nAsteriskSVG.displayName = 'AsteriskSVG';\n\nexport default function AsteriskIcon(props) {\n return (\n <AsteriskSVG viewBox=\"0 0 512 512\" {...props}>\n <path\n fill={props.color ? props.color : '#898989'}\n d=\"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"\n />\n </AsteriskSVG>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from './StyledSVGBase';\n\nconst CheckIcon = styled(Base)`\n fill: #81c784;\n &:hover {\n fill: #2ab800;\n }\n`;\n\nCheckIcon.displayName = 'CheckMark-CheckIcon';\n\nexport default function CheckMark(props) {\n return (\n <CheckIcon {...props} width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M10,15.172l9.192-9.193,1.415,1.414L10,18,3.636,11.636,5.05,10.222Z\" />\n </CheckIcon>\n );\n}\n","import React from 'react';\n\nexport default function CollapsableIcon(props) {\n return (\n <svg width={props.size || 12} height={props.size || 20} viewBox=\"0 0 12 20\">\n <g transform=\"translate(0)\">\n <rect fill=\"none\" width=\"12\" height=\"20\" />\n <path\n fill={props.color || '#de935f'}\n d=\"M10.666,11.636,15.333,16.3,14,17.636l-6-6,6-6,1.333,1.333Z\"\n transform=\"translate(17.636 -2) rotate(90)\"\n />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nconst SIZE = '24px';\n\nconst CreateIcon = (props) => (\n <svg width={props.size || SIZE} height={props.size || SIZE} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill=\"#898989\"\n d=\"M4,3H20a1,1,0,0,1,1,1V20a1,1,0,0,1-1,1H4a1,1,0,0,1-1-1V4A1,1,0,0,1,4,3Zm7,8H7v2h4v4h2V13h4V11H13V7H11Z\"\n />\n </svg>\n);\n\nexport default CreateIcon;\n","import React from 'react';\n\nconst TopArrow = ({ color }) => (\n <svg width=\"45.884\" height=\"48.271\" viewBox=\"0 0 45.884 48.271\">\n <g transform=\"translate(1.489 1.518)\">\n <g transform=\"matrix(0.891, -0.454, 0.454, 0.891, -405.631, -151.72)\">\n <path\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth=\"2px\"\n d=\"M8245.836-1287.49c21.407-8.244,27.031-23.4,26.964-33.679\"\n transform=\"translate(-7960 1653.93)\"\n />\n <path\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth=\"2px\"\n strokeLinejoin=\"round\"\n d=\"M8268.6-1316.858l9-4.648,5.514,8.608\"\n transform=\"translate(-7964.738 1654)\"\n />\n </g>\n </g>\n </svg>\n);\n\nconst LeftArrow = ({ color }) => (\n <svg width=\"103.292\" height=\"113.602\" viewBox=\"0 0 103.292 113.602\">\n <g transform=\"translate(1.68 1.532)\">\n <path\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth=\"2px\"\n d=\"M-13.436,96.138C33.916,84.041,41.93,16.413,41.823,0\"\n transform=\"matrix(-0.899, -0.438, 0.438, -0.899, 45.765, 104.743)\"\n />\n <path\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth=\"2px\"\n strokeLinejoin=\"round\"\n d=\"M0,7.422,14.364,0l8.8,13.746\"\n transform=\"matrix(-0.899, -0.438, 0.438, -0.899, 20.824, 93.051)\"\n />\n </g>\n </svg>\n);\n\nfunction CurveArrow({ color = '#535353', direction = 'top' }) {\n switch (direction) {\n case 'top':\n return <TopArrow color={color} />;\n case 'left':\n return <LeftArrow color={color} />;\n default:\n return <TopArrow color={color} />;\n }\n}\nexport default CurveArrow;\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst DiscordSVG = styled(svgBase)`\n width: ${(props) => props.size || '120px'};\n height: ${(props) => props.size || '40px'};\n fill: #7289da;\n opacity: 0.6;\n &:hover {\n opacity: 1;\n cursor: pointer;\n }\n`;\n\nexport default function DiscordIcon(props) {\n return (\n <DiscordSVG viewBox=\"0 0 727 200\" {...props}>\n <path d=\"M106.8,84.1 C101.1,84.1 96.6,89 96.6,95.1 C96.6,101.2 101.2,106.1 106.8,106.1 C112.5,106.1 117,101.2 117,95.1 C117,89 112.4,84.1 106.8,84.1 Z M70.3,84.1 C64.6,84.1 60.1,89 60.1,95.1 C60.1,101.2 64.7,106.1 70.3,106.1 C76,106.1 80.5,101.2 80.5,95.1 C80.6,89 76,84.1 70.3,84.1 Z\" />\n <path d=\"M155.4,0.9 L21.4,0.9 C10.1,0.9 0.9,10.1 0.9,21.4 L0.9,155.4 C0.9,166.7 10.1,175.9 21.4,175.9 L134.8,175.9 L129.5,157.6 L142.3,169.4 L154.4,180.5 L176,199.2 L176,21.4 C175.9,10.1 166.7,0.9 155.4,0.9 Z M116.8,130.4 C116.8,130.4 113.2,126.1 110.2,122.4 C123.3,118.7 128.3,110.6 128.3,110.6 C124.2,113.3 120.3,115.2 116.8,116.5 C111.8,118.6 107,119.9 102.3,120.8 C92.7,122.6 83.9,122.1 76.4,120.7 C70.7,119.6 65.8,118.1 61.7,116.4 C59.4,115.5 56.9,114.4 54.4,113 C54.1,112.8 53.8,112.7 53.5,112.5 C53.3,112.4 53.2,112.3 53.1,112.3 C51.3,111.3 50.3,110.6 50.3,110.6 C50.3,110.6 55.1,118.5 67.8,122.3 C64.8,126.1 61.1,130.5 61.1,130.5 C39,129.8 30.6,115.4 30.6,115.4 C30.6,83.5 45,57.6 45,57.6 C59.4,46.9 73,47.2 73,47.2 L74,48.4 C56,53.5 47.8,61.4 47.8,61.4 C47.8,61.4 50,60.2 53.7,58.6 C64.4,53.9 72.9,52.7 76.4,52.3 C77,52.2 77.5,52.1 78.1,52.1 C84.2,51.3 91.1,51.1 98.3,51.9 C107.8,53 118,55.8 128.4,61.4 C128.4,61.4 120.5,53.9 103.5,48.8 L104.9,47.2 C104.9,47.2 118.6,46.9 132.9,57.6 C132.9,57.6 147.3,83.5 147.3,115.4 C147.3,115.3 138.9,129.7 116.8,130.4 L116.8,130.4 Z M267.8,43.7 L234.6,43.7 L234.6,81 L256.7,100.9 L256.7,64.7 L268.5,64.7 C276,64.7 279.7,68.3 279.7,74.1 L279.7,101.8 C279.7,107.6 276.2,111.5 268.5,111.5 L234.5,111.5 L234.5,132.6 L267.7,132.6 C285.5,132.7 302.2,123.8 302.2,103.4 L302.2,73.6 C302.3,52.8 285.6,43.7 267.8,43.7 L267.8,43.7 Z M441.8,103.4 L441.8,72.8 C441.8,61.8 461.6,59.3 467.6,70.3 L485.9,62.9 C478.7,47.1 465.6,42.5 454.7,42.5 C436.9,42.5 419.3,52.8 419.3,72.8 L419.3,103.4 C419.3,123.6 436.9,133.7 454.3,133.7 C465.5,133.7 478.9,128.2 486.3,113.8 L466.7,104.8 C461.9,117.1 441.8,114.1 441.8,103.4 Z M381.3,77 C374.4,75.5 369.8,73 369.5,68.7 C369.9,58.4 385.8,58 395.1,67.9 L409.8,56.6 C400.6,45.4 390.2,42.4 379.5,42.4 C363.2,42.4 347.4,51.6 347.4,69 C347.4,85.9 360.4,95 374.7,97.2 C382,98.2 390.1,101.1 389.9,106.1 C389.3,115.6 369.7,115.1 360.8,104.3 L346.6,117.6 C354.9,128.3 366.2,133.7 376.8,133.7 C393.1,133.7 411.2,124.3 411.9,107.1 C412.9,85.4 397.1,79.9 381.3,77 Z M314.3,132.5 L336.7,132.5 L336.7,43.7 L314.3,43.7 L314.3,132.5 Z M692,43.7 L658.8,43.7 L658.8,81 L680.9,100.9 L680.9,64.7 L692.7,64.7 C700.2,64.7 703.9,68.3 703.9,74.1 L703.9,101.8 C703.9,107.6 700.4,111.5 692.7,111.5 L658.7,111.5 L658.7,132.6 L692,132.6 C709.8,132.7 726.5,123.8 726.5,103.4 L726.5,73.6 C726.5,52.8 709.8,43.7 692,43.7 Z M529.1,42.5 C510.7,42.5 492.4,52.5 492.4,73 L492.4,103.3 C492.4,123.6 510.8,133.8 529.3,133.8 C547.7,133.8 566,123.6 566,103.3 L566,73 C566,52.6 547.5,42.5 529.1,42.5 Z M543.5,103.3 C543.5,109.7 536.3,113 529.2,113 C522,113 514.8,109.9 514.8,103.3 L514.8,73 C514.8,66.5 521.8,63 528.8,63 C536.1,63 543.5,66.1 543.5,73 L543.5,103.3 L543.5,103.3 Z M646.4,73 C645.9,52.2 631.7,43.8 613.4,43.8 L577.9,43.8 L577.9,132.6 L600.6,132.6 L600.6,104.4 L604.6,104.4 L625.2,132.6 L653.2,132.6 L629,102.1 C639.7,98.7 646.4,89.4 646.4,73 Z M613.8,85 L600.6,85 L600.6,64.7 L613.8,64.7 C627.9,64.7 627.9,85 613.8,85 Z\" />\n </DiscordSVG>\n );\n}\n","import React from 'react';\n\nexport default function ExpandIcon(props) {\n return (\n <svg width={props.size || 12} height={props.size || 20} viewBox=\"0 0 12 20\">\n <rect fill=\"none\" width=\"12\" height=\"20\" />\n <path\n fill={props.color || '#de935f'}\n d=\"M10.666,11.636,15.333,16.3,14,17.636l-6-6,6-6,1.333,1.333Z\"\n transform=\"translate(-5.636 21.333) rotate(-90)\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function InviteOnlyIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} {...props} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill=\"#fff\"\n d=\"M3.783,2.826,12,1l8.217,1.826A1,1,0,0,1,21,3.8v9.987a6,6,0,0,1-2.672,4.992L12,23,5.672,18.781A6,6,0,0,1,3,13.79V3.8a1,1,0,0,1,.783-.976ZM12,13.5l2.939,1.545-.561-3.272,2.377-2.318-3.286-.478L12,6,10.53,8.977l-3.285.478,2.377,2.318-.56,3.272Z\"\n />\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst Arrow = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #1d1d1d;\n &:hover {\n fill: #2c2c2c;\n cursor: pointer;\n }\n`;\n\nexport default function LeftArrowHide() {\n return (\n <Arrow viewBox=\"0 0 40 40\">\n <rect width=\"40\" height=\"40\" />\n <g transform=\"translate(8 8)\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path fill=\"#535353\" d=\"M12,14v6L4,12l8-8v6h8v4Z\" transform=\"translate(3)\" />\n <rect fill=\"#535353\" width=\"4\" height=\"24\" />\n </g>\n </Arrow>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst Arrow = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #1d1d1d;\n &:hover {\n fill: #2c2c2c;\n cursor: pointer;\n }\n`;\n\nexport default function LeftArrowShow() {\n return (\n <Arrow viewBox=\"0 0 40 40\">\n <rect width=\"40\" height=\"40\" />\n <g transform=\"translate(8 8)\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path fill=\"#535353\" d=\"M12,14H4V10h8V4l8,8-8,8Z\" transform=\"translate(3)\" />\n <rect fill=\"#535353\" width=\"4\" height=\"24\" />\n </g>\n </Arrow>\n );\n}\n","import React from 'react';\n\nexport default function RegularFrown(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#535353\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function RegularLaughBeam(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#535353\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function RegularMeh(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#535353\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function RegularSadTear(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#535353\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function RegularSmile(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#535353\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function RegularStar(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 576 512\">\n <path\n fill=\"#535353\"\n d=\"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z\"\n />\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst Arrow = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #1d1d1d;\n &:hover {\n fill: #2c2c2c;\n cursor: pointer;\n }\n`;\n\nexport default function RightArrowHide() {\n return (\n <Arrow viewBox=\"0 0 40 40\">\n <rect width=\"40\" height=\"40\" />\n <g transform=\"translate(8 8)\">\n <path fill=\"none\" d=\"M24,0H0V24H24Z\" />\n <path fill=\"#535353\" d=\"M12,14v6l8-8L12,4v6H4v4Z\" transform=\"translate(-3)\" />\n <rect fill=\"#535353\" width=\"4\" height=\"24\" transform=\"translate(20)\" />\n </g>\n </Arrow>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst Arrow = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #1d1d1d;\n &:hover {\n fill: #2c2c2c;\n cursor: pointer;\n }\n`;\n\nexport default function RightArrowShow() {\n return (\n <Arrow viewBox=\"0 0 40 40\">\n <rect width=\"40\" height=\"40\" />\n <g transform=\"translate(8 8)\">\n <path fill=\"none\" d=\"M24,0H0V24H24Z\" />\n <path fill=\"#535353\" d=\"M12,14h8V10H12V4L4,12l8,8Z\" transform=\"translate(-3)\" />\n <rect fill=\"#535353\" width=\"4\" height=\"24\" transform=\"translate(20)\" />\n </g>\n </Arrow>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst ShareSVG = styled(svgBase)`\n width: ${(props) => props.size || '20px'};\n height: ${(props) => props.size || '20px'};\n fill: #898989;\n &:hover {\n fill: #66bb6a;\n }\n`;\n\nexport default function ShareIcon(props) {\n return (\n <ShareSVG viewBox=\"0 0 515.556 515.556\" {...props}>\n <path d=\"m354.445 161.111v64.444h32.222v225.556h-257.778v-225.555h32.222v-64.444h-96.667v354.445h386.667v-354.446z\" />\n <path d=\"m225.556 123.351v166.649h64.444v-166.65l41.662 41.662 45.564-45.564-119.448-119.448-119.449 119.449 45.564 45.564z\" />\n </ShareSVG>\n );\n}\n","import React from 'react';\n\nexport default function SolidFrown(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#66bb6a\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SolidLaughBeam(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#66bb6a\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SolidMeh(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#66bb6a\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SolidSadTear(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#66bb6a\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SolidSmile(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 496 512\">\n <path\n fill=\"#66bb6a\"\n d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SolidStar(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 576 512\">\n <path\n fill=\"#66BB6A\"\n d=\"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nconst WIDTH = 100;\nconst HEIGHT = 25;\nfunction SplunkIcon(props) {\n return (\n <svg width={props.size || WIDTH} height={props.size || HEIGHT} viewBox=\"0 0 100 30\">\n <g fill={props.color || '#d0d0d0'}>\n <path d=\"M9.981 16.96a3.955 3.955 0 01-.353 1.767 3.3 3.3 0 01-1.148 1.325 6.108 6.108 0 01-1.68.882 8.867 8.867 0 01-2.12.353 7.62 7.62 0 01-2.473-.353A5.686 5.686 0 010 19.609l1.237-2.032a8.3 8.3 0 001.59 1.06 1.9 1.9 0 001.413.353 2.978 2.978 0 001.5-.442 1.448 1.448 0 00.53-1.237 1.5 1.5 0 00-.088-.618 1.424 1.424 0 00-.353-.618c-.265-.265-.53-.442-.795-.707-.353-.265-.707-.53-1.237-.883-.353-.265-.795-.618-1.148-.883a4.63 4.63 0 01-.972-.883 7.368 7.368 0 01-.707-1.06 3.662 3.662 0 01-.265-1.413A3.234 3.234 0 011.06 8.66a4.648 4.648 0 011.06-1.24 4.91 4.91 0 011.5-.795 7.357 7.357 0 011.945-.265 9.433 9.433 0 012.208.265 7.732 7.732 0 011.943.883L8.568 9.275a3.876 3.876 0 00-2.385-.795 2.028 2.028 0 00-1.237.353 1.221 1.221 0 00-.53.972 1.63 1.63 0 00.442 1.06 10.168 10.168 0 001.5 1.237 17.553 17.553 0 011.767 1.413 7.06 7.06 0 011.149 1.145 2.985 2.985 0 01.53 1.06 2.118 2.118 0 01.177 1.237M22.612 13.603a6.176 6.176 0 00-.972-3.71 2.713 2.713 0 00-2.562-1.325 3.39 3.39 0 00-2.737 1.415 6.724 6.724 0 00-.972 3.886 6.447 6.447 0 00.972 3.8 3 3 0 002.738 1.325 2.718 2.718 0 001.678-.53 3.911 3.911 0 001.06-1.325 10.391 10.391 0 00.618-1.767 11.971 11.971 0 00.177-1.767m3.975-.177a9.1 9.1 0 01-.53 3.091 8.572 8.572 0 01-1.409 2.472 6.443 6.443 0 01-4.858 2.208 5.831 5.831 0 01-1.237-.088 4.98 4.98 0 01-1.06-.353 3.922 3.922 0 01-.972-.707l-1.06-1.06V28h-3.713V6.625h3.71v2.032a6.369 6.369 0 012.208-1.855 5.918 5.918 0 012.738-.619 6.336 6.336 0 012.562.53 6.471 6.471 0 012.032 1.413 5.425 5.425 0 011.325 2.3c.088 1.06.265 2.032.265 3M28.265 0h3.71v20.934h-3.71zM44.248 20.934v-1.943a8.461 8.461 0 01-2.2 1.766 6.759 6.759 0 01-2.65.53 5.383 5.383 0 01-2.826-.707 3.994 3.994 0 01-1.678-1.943 1.638 1.638 0 01-.177-.618c-.088-.265-.088-.53-.177-.795 0-.353-.088-.707-.088-.972V6.625h3.71v8.126a10.69 10.69 0 00.086 1.674 4.98 4.98 0 00.353 1.06 2.482 2.482 0 002.3 1.237 2.91 2.91 0 002.915-1.767 2.3 2.3 0 00.265-.972 9.6 9.6 0 00.088-1.59V6.625h3.71v14.309h-3.631zM60.505 20.933v-8.214a10.69 10.69 0 00-.093-1.678 4.98 4.98 0 00-.353-1.06 2.482 2.482 0 00-2.3-1.237 4.747 4.747 0 00-1.855.442 2.811 2.811 0 00-1.148 1.325 2.352 2.352 0 00-.258 1.06 9.6 9.6 0 00-.088 1.59v7.685h-3.798V6.624h3.8v1.947a8.461 8.461 0 012.206-1.77 6.759 6.759 0 012.65-.53 5.383 5.383 0 012.826.707 3.994 3.994 0 011.678 1.943 1.638 1.638 0 01.177.618c.088.265.088.53.177.795 0 .353.088.707.088.972v9.539zM76.315 21.2l-5.651-7.862v7.6h-3.8V0h3.8v12.278h.353l5.035-5.83 2.826 1.237-4.77 5.123 5.656 7.154zM83.028 20.492v-2.473l8.833-4.328-8.833-4.328V6.801l11.394 5.741v2.3zM84.177 3.091a1.282 1.282 0 11-.088 2.562 1.208 1.208 0 01-1.237-1.237 1.3 1.3 0 011.325-1.325zm0 .177a1.074 1.074 0 00-1.06 1.06 1.06 1.06 0 002.12 0 1.218 1.218 0 00-1.06-1.06zm-.265 1.855h-.265V3.709h.442a.8.8 0 01.442.088c.088.088.177.177.088.265 0 .177-.088.353-.265.353.177 0 .265.177.265.353a.531.531 0 00.088.353h-.265a.531.531 0 01-.088-.353.234.234 0 00-.265-.265h-.177zm0-.795h.177c.177 0 .353-.088.353-.265s-.088-.177-.353-.177h-.177v.442z\" />\n </g>\n </svg>\n );\n}\n\nexport default SplunkIcon;\n","import React from 'react';\n\nconst SIZE = '24px';\n\nexport const Timer = (props) => (\n <svg viewBox=\"0 0 24 24\" width={props.size || SIZE} height={props.size || SIZE}>\n <path\n fill=\"#81a2be\"\n d=\"M14.063,0H.938A.937.937,0,0,0,0,.938v.625A.937.937,0,0,0,.938,2.5c0,3.553,1.993,6.552,4.72,7.5-2.728.948-4.72,3.947-4.72,7.5A.937.937,0,0,0,0,18.438v.625A.937.937,0,0,0,.938,20H14.063A.937.937,0,0,0,15,19.063v-.625a.937.937,0,0,0-.937-.937c0-3.553-1.993-6.552-4.72-7.5,2.728-.948,4.72-3.947,4.72-7.5A.937.937,0,0,0,15,1.563V.938A.937.937,0,0,0,14.063,0ZM11.13,15H3.87c.666-1.828,2.035-3.125,3.63-3.125S10.463,13.172,11.13,15Zm0-10H3.87a7.329,7.329,0,0,1-.433-2.5h8.125A7.329,7.329,0,0,1,11.131,5Z\"\n transform=\"translate(5 2)\"\n />\n <rect fill=\"none\" width=\"24\" height=\"24\" />\n </svg>\n);\n\nexport default Timer;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst Arrow = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #535353;\n ${(props) =>\n props.hover &&\n css`\n fill: #81c784;\n cursor: pointer;\n `}\n`;\n\nexport default function TopArrow(props) {\n return (\n <Arrow viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M13,7.828V20H11V7.828L5.636,13.192,4.222,11.778,12,4l7.778,7.778-1.414,1.414Z\" />\n </Arrow>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from './StyledSVGBase';\n\nconst WarningSVG = styled(svgBase)`\n width: ${(props) => props.size || '24px'};\n height: ${(props) => props.size || '24px'};\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\nWarningSVG.displayName = 'WarningSVG';\n\nexport default function WarningIcon(props) {\n return (\n <WarningSVG viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill={props.color ? props.color : '#e06c75'}\n d=\"M12.866,3l9.526,16.5a1,1,0,0,1-.866,1.5H2.474a1,1,0,0,1-.866-1.5L11.134,3a1,1,0,0,1,1.732,0ZM11,16v2h2V16Zm0-7v5h2V9Z\"\n />\n </WarningSVG>\n );\n}\n","import React from 'react';\n\nexport default function WorkshopIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path fill=\"#d0d0d0\" d=\"M5,13.18v4L12,21l7-3.82v-4L12,17ZM12,3,1,9l11,6,9-4.91V17h2V9Z\" />\n </svg>\n );\n}\n","import React, { useMemo, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport intervalToDuration from 'date-fns/intervalToDuration';\nimport { Flex } from 'reflexbox';\nimport { differenceInDays } from 'date-fns';\nimport { isTodayBetween } from '../libs/dates-lib';\nimport { fadeIn } from '../libs/animations-lib';\nimport { RegularText, ShakeContent, SandTimeIcon } from 'boss-ui';\n\nconst FIVE_MINUTES = 500;\n\nconst CountDownBox = styled(Flex)`\n height: ${(props) => (props.height ? props.height : '84px')};\n width: 210px;\n justify-content: flex-start;\n padding: 8px;\n z-index: 100;\n cursor: default;\n display: flex;\n flex-direction: column;\n animation: ${fadeIn} 0.3s;\n border: 1px solid #1d1d1d;\n box-shadow: -3px 3px 3px #00000029;\n background-color: ${(props) => props.theme.color.nav.background};\n`;\nCountDownBox.displayName = 'CountDownBox';\n\nconst padZeroStart = (number, nroDigits = 2) => `0${number}`.slice(-nroDigits);\nconst getCountDownTime = (event) => {\n return (\n <>\n {padZeroStart(event.hours)}:{padZeroStart(event.minutes)}:{padZeroStart(event.seconds)}\n </>\n );\n};\n\nlet startCountDownInterval;\nlet endCountDownInterval;\nexport default function CountDown({\n endDate,\n startDate,\n allowStartingPreview = false,\n isAdminView = false,\n mobile = false,\n}) {\n const [eventEndCountDown, setEndCountDown] = useState();\n const [eventStartCountDown, setStartCountDown] = useState();\n const isEventHappening = useMemo(\n () => isTodayBetween(startDate, endDate),\n [startDate, endDate, eventEndCountDown]\n );\n\n const isEndingEvent = useMemo(() => {\n if (eventEndCountDown) {\n return (\n Number(\n `${padZeroStart(eventEndCountDown.months)}${padZeroStart(\n eventEndCountDown.days\n )}${padZeroStart(eventEndCountDown.hours)}${padZeroStart(\n eventEndCountDown.minutes\n )}${padZeroStart(eventEndCountDown.seconds)}`\n ) < FIVE_MINUTES\n );\n }\n return false;\n }, [eventEndCountDown]);\n\n const startEventCountDown = () =>\n setInterval(() => {\n setEndCountDown(\n intervalToDuration({\n start: new Date(),\n end: new Date(endDate),\n })\n );\n }, 1000);\n\n // eslint-disable-next-line consistent-return\n useEffect(() => {\n if (!endDate) {\n return;\n }\n // event is happening: set end count down interval\n if (isEventHappening) {\n clearInterval(endCountDownInterval);\n endCountDownInterval = startEventCountDown();\n return;\n }\n // event is not happening: disable end count down interval and set start count down interval\n clearInterval(endCountDownInterval);\n setEndCountDown(null);\n clearInterval(startCountDownInterval);\n startCountDownInterval = setInterval(() => {\n setStartCountDown(\n intervalToDuration({\n start: new Date(),\n end: new Date(startDate),\n })\n );\n }, 1000);\n }, [startDate, endDate, isEventHappening]);\n\n // unmount function\n useEffect(\n () => () => {\n clearInterval(endCountDownInterval);\n clearInterval(startCountDownInterval);\n },\n []\n );\n\n // check if event starts\n useEffect(() => {\n // clear start count down interval and set end count down interval\n if (new Date() > new Date(startDate) && endDate) {\n clearInterval(startCountDownInterval);\n setStartCountDown(null);\n clearInterval(endCountDownInterval);\n endCountDownInterval = startEventCountDown();\n }\n }, [eventStartCountDown]);\n\n if (eventEndCountDown) {\n const endCountDownInDays = differenceInDays(new Date(endDate), new Date());\n if (isEventHappening) {\n return mobile ? (\n <div className=\"CountDown-mobileContainer\" style={{ display: 'flex' }}>\n <SandTimeIcon />\n <RegularText light style={{ marginLeft: '8px' }}>\n {getCountDownTime(eventEndCountDown)}\n </RegularText>\n </div>\n ) : (\n <CountDownBox>\n <Flex mb=\"4px\" className=\"CountDown-finishingLabel\">\n <RegularText fontSize=\"14px\">Finishing in:</RegularText>\n </Flex>\n {isEndingEvent ? (\n <ShakeContent shake>\n <RegularText fontSize=\"28px\" mediumWeight color=\"#E06C75\">\n {getCountDownTime(eventEndCountDown)}\n </RegularText>\n </ShakeContent>\n ) : endCountDownInDays > 0 ? (\n <RegularText\n fontSize=\"28px\"\n mediumWeight\n {...(isAdminView ? { color: '#66bb6a' } : { light: true })}\n >{`${endCountDownInDays} ${endCountDownInDays > 1 ? 'days' : 'day'}`}</RegularText>\n ) : (\n <RegularText\n fontSize=\"28px\"\n mediumWeight\n {...(isAdminView ? { color: '#66bb6a' } : { light: true })}\n >\n {getCountDownTime(eventEndCountDown)}\n </RegularText>\n )}\n </CountDownBox>\n );\n }\n return (\n <CountDownBox height=\"40px\">\n <Flex mb=\"4px\" className=\"CountDown-endedLabel\">\n <RegularText fontSize=\"14px\">Event has ended</RegularText>\n </Flex>\n </CountDownBox>\n );\n }\n\n if (eventStartCountDown && (allowStartingPreview || isAdminView)) {\n const startCountDownInDays = differenceInDays(new Date(startDate), new Date());\n return (\n <CountDownBox>\n <Flex mb=\"4px\" className=\"CountDown-startingLabel\">\n <RegularText fontSize=\"14px\">Starting in:</RegularText>\n </Flex>\n <Flex>\n {startCountDownInDays > 0 ? (\n <RegularText fontSize=\"28px\" mediumWeight light>{`${startCountDownInDays} ${\n startCountDownInDays > 1 ? 'days' : 'day'\n }`}</RegularText>\n ) : (\n <RegularText fontSize=\"28px\" mediumWeight light>\n {getCountDownTime(eventStartCountDown)}\n </RegularText>\n )}\n </Flex>\n </CountDownBox>\n );\n }\n\n return null;\n}\n","import React, { useEffect, useState, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { RegularText, RefreshIcon } from 'boss-ui';\nimport { fadeIn } from '../../libs/animations-lib';\nimport { useRefreshScore } from '../../libs/hooks-lib';\nimport WebSocketClient from '../websocket';\n\nconst Box = styled(Flex)`\n width: 210px;\n justify-content: flex-start;\n padding: 8px;\n z-index: 100;\n cursor: default;\n display: flex;\n flex-direction: column;\n animation: ${fadeIn} 0.3s;\n border: 1px solid #1d1d1d;\n box-shadow: -3px 3px 3px #00000029;\n background-color: #121212;\n filter: ${(props) => (props.$refreshing ? 'blur(1px)' : 'none')};\n white-space: break-spaces;\n`;\nBox.displayName = 'PointsCardBox';\n\nconst BoxMobile = styled(Flex)`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n width: 100%;\n`;\nBoxMobile.displayName = 'PointsCardBoxMobile';\n\nconst wsClient = new WebSocketClient();\n\nexport default function PointsCard({\n teamPoints = 0,\n loading = false,\n mobile = false,\n onRefresh = () => {},\n isOnDemandEvent = false,\n showRefresh = true,\n sessionId,\n}) {\n const [theScore, setTheScore] = useState(teamPoints);\n const [refreshHover, setRefreshHover, getLastUpdatedLabel, resetLastUpdate] =\n useRefreshScore(loading);\n\n const scoreUpdateHandler = useCallback((update) => {\n if (isOnDemandEvent && update.sessionId !== sessionId) {\n return;\n }\n setTheScore(update.total);\n resetLastUpdate();\n }, []);\n\n useEffect(() => {\n if (isOnDemandEvent) {\n wsClient.addListener('USER_SCORE_UPDATE', scoreUpdateHandler);\n } else {\n wsClient.addListener('TEAM_SCORE_UPDATE', scoreUpdateHandler);\n }\n return () => {\n if (isOnDemandEvent) {\n wsClient.clearListener('USER_SCORE_UPDATE', scoreUpdateHandler);\n } else {\n wsClient.clearListener('TEAM_SCORE_UPDATE', scoreUpdateHandler);\n }\n };\n }, [scoreUpdateHandler, isOnDemandEvent]);\n\n useEffect(() => {\n setTheScore(teamPoints);\n }, [teamPoints]);\n\n return (\n <>\n {mobile ? (\n <BoxMobile>\n <Flex>\n <RegularText medium fontSize=\"13px\">\n Team score:\n </RegularText>\n <RegularText light fontSize=\"13px\" ml=\"6px\">\n {theScore}\n </RegularText>\n </Flex>\n {showRefresh && (\n <Flex\n pr=\"12px\"\n alignItems=\"center\"\n onClick={() => onRefresh()}\n style={{ cursor: 'pointer' }}\n onMouseEnter={() => setRefreshHover(true)}\n onMouseLeave={() => setRefreshHover(false)}\n >\n <RefreshIcon rotate={loading} hover={refreshHover} />\n </Flex>\n )}\n </BoxMobile>\n ) : (\n <Box $refreshing={loading}>\n <RegularText fontSize=\"12px\" color=\"#D0D0D0\">\n {isOnDemandEvent ? 'Your score: ' : 'Your team score: '}\n <Flex ml=\"auto\">\n <RegularText fontSize=\"12px\" color=\"#D0D0D0\" mediumWeight>\n {theScore}\n </RegularText>\n </Flex>\n </RegularText>\n {showRefresh && (\n <>\n <Flex my=\"4px\" style={{ borderBottom: '0.3px solid #2C2C2C' }} />\n <Flex\n alignItems=\"center\"\n onClick={() => onRefresh()}\n style={{ cursor: 'pointer' }}\n onMouseEnter={() => setRefreshHover(true)}\n onMouseLeave={() => setRefreshHover(false)}\n >\n <RefreshIcon rotate={loading} hover={refreshHover} />\n <RegularText fontSize=\"12px\" marginLeft=\"3px\">\n {refreshHover ? (\n <RegularText fontSize=\"12px\" color=\"#66bb6a\">\n Refresh score\n </RegularText>\n ) : (\n getLastUpdatedLabel()\n )}\n </RegularText>\n </Flex>\n </>\n )}\n </Box>\n )}\n </>\n );\n}\n","import merge from 'lodash/merge';\n// env variables are set as String\nconst stringToBoolean = (value, def) => (value ? value === 'true' : def);\n\nconst common = {\n MAX_ATTACHMENT_SIZE: 5000000,\n discord: {\n DISCORD_API_URL: 'https://discord.com/api',\n GET_DISCORD_USER_PATH: 'users/@me',\n DISCORD_OAUTH_URL: 'https://discord.com/oauth2/authorize',\n },\n rum: {\n version: '0.9.1.869a8372', // metadata env variable replaced by sed on build\n applicationName: 'boss-client',\n beaconUrl: 'https://rum-ingest.us1.signalfx.com/v1/rum',\n rumAccessToken: 'rrUwCjYZvdjw07-NE-zKMQ',\n },\n};\n\nconst local = {\n appType: 'boo', // metadata env variable replaced by sed on build\n termsConditionsUrl:\n 'https://d1zkmo2j4fq30f.cloudfront.net/botstermsandconditions/termsandconditions.md',\n enableLegacyResources: false,\n rum: {\n deploymentEnvironment: 'local',\n },\n apiGateway: {\n REGION: 'us-east-1',\n URL: 'https://2idxhrkpmb.execute-api.us-east-1.amazonaws.com/develop',\n },\n webSocket: {\n REGION: 'us-east-1',\n URL: 'wss://42reyy8t14.execute-api.us-east-1.amazonaws.com/develop',\n },\n cognito: {\n SAML_LOGIN: false,\n MANDATORY_SIGN_IN: true,\n REGION: 'us-east-1',\n saml: {\n IDP_NAME: 'CustomerIdentity',\n IDP_RESPONSE_TYPE: 'code',\n IDP_LOGIN_URL: 'https://boss-api-develop.auth.us-east-1.amazoncognito.com/oauth2/authorize',\n IDP_SCOPE: 'phone+email+profile+openid',\n DOMAIN: 'boss-api-develop.auth.us-east-1.amazoncognito.com',\n USER_POOL_ID: 'us-east-1_rh3cfaJbC',\n APP_CLIENT_ID: '3hqhb85a85kbsc3l8idj0o26r',\n IDENTITY_POOL_ID: 'us-east-1:743db18d-2c5e-4323-a63f-1abfefa88c12',\n SCOPE: ['phone', 'email', 'profile', 'openid'],\n REDIRECT_SIGN_IN: 'http://localhost:3000/successLogin',\n REDIRECT_SIGN_OUT: 'http://localhost:3000/logout',\n },\n USER_POOL_ID: 'us-east-1_shYX7ir2r',\n APP_CLIENT_ID: '4eucr0h58r0j822or0ms18rai0',\n IDENTITY_POOL_ID: 'us-east-1:0e4bf22f-2058-4182-91cc-4b4e1cca2704',\n },\n discord: {\n APP_CLIENT_ID: '788401823337152545',\n REDIRECT_URI: 'http://localhost:3000/discordJoin',\n },\n};\n\nconst dev = {\n appType: 'boo', // metadata env variable replaced by sed on build\n termsConditionsUrl:\n 'https://d1zkmo2j4fq30f.cloudfront.net/botstermsandconditions/termsandconditions.md',\n enableLegacyResources: stringToBoolean(process.env.REACT_APP_ENABLE_LEGACY_RESOURCES, false),\n rum: {\n deploymentEnvironment: 'development',\n },\n apiGateway: {\n REGION: 'us-east-1',\n URL: 'https://2idxhrkpmb.execute-api.us-east-1.amazonaws.com/develop',\n },\n webSocket: {\n REGION: 'us-east-1',\n URL: 'wss://42reyy8t14.execute-api.us-east-1.amazonaws.com/develop',\n },\n cognito: {\n SAML_LOGIN: stringToBoolean(process.env.REACT_APP_SAML_LOGIN, false),\n MANDATORY_SIGN_IN: true,\n REGION: 'us-east-1',\n saml: {\n IDP_NAME: 'CustomerIdentity',\n IDP_RESPONSE_TYPE: 'code',\n IDP_LOGIN_URL: 'https://boss-api-develop.auth.us-east-1.amazoncognito.com/oauth2/authorize',\n IDP_SCOPE: 'phone+email+profile+openid',\n DOMAIN: 'boss-api-develop.auth.us-east-1.amazoncognito.com',\n USER_POOL_ID: 'us-east-1_rh3cfaJbC',\n APP_CLIENT_ID: '3hqhb85a85kbsc3l8idj0o26r',\n IDENTITY_POOL_ID: 'us-east-1:743db18d-2c5e-4323-a63f-1abfefa88c12',\n SCOPE: ['phone', 'email', 'profile', 'openid'],\n REDIRECT_SIGN_IN: `https://${window.location.hostname}/successLogin`,\n REDIRECT_SIGN_OUT: `https://${window.location.hostname}/logout`,\n },\n USER_POOL_ID: 'us-east-1_shYX7ir2r',\n APP_CLIENT_ID: '4eucr0h58r0j822or0ms18rai0',\n IDENTITY_POOL_ID: 'us-east-1:0e4bf22f-2058-4182-91cc-4b4e1cca2704',\n },\n discord: {\n APP_CLIENT_ID: '788401823337152545',\n REDIRECT_URI: `https://${window.location.hostname}/discordJoin`,\n },\n};\n\nconst staging = {\n appType: 'boo', // metadata env variable replaced by sed on build\n termsConditionsUrl:\n 'https://d16kbpb7pfvyj.cloudfront.net/botstermsandconditions/termsandconditions.md',\n enableLegacyResources: stringToBoolean(\n process.env.REACT_APP_ENABLE_LEGACY_RESOURCES,\n false\n ),\n rum: {\n deploymentEnvironment: 'staging',\n },\n apiGateway: {\n REGION: 'us-east-1',\n URL: 'https://kmj2q119td.execute-api.us-east-1.amazonaws.com/staging',\n },\n webSocket: {\n REGION: 'us-east-1',\n URL: 'wss://mjcr2ltev5.execute-api.us-east-1.amazonaws.com/staging',\n },\n cognito: {\n SAML_LOGIN: stringToBoolean(process.env.REACT_APP_SAML_LOGIN, false),\n MANDATORY_SIGN_IN: true,\n REGION: 'us-east-1',\n saml: {\n IDP_NAME: 'CustomerIdentity',\n IDP_RESPONSE_TYPE: 'code',\n IDP_LOGIN_URL: 'https://boss-staging.auth.us-east-1.amazoncognito.com/oauth2/authorize',\n IDP_SCOPE: 'phone+email+profile+openid',\n DOMAIN: 'boss-staging.auth.us-east-1.amazoncognito.com',\n USER_POOL_ID: 'us-east-1_0WkinfHRM',\n APP_CLIENT_ID: '3p4g690821jo030d8tbe5eon9t',\n IDENTITY_POOL_ID: 'us-east-1:b86cf4f8-cc9e-4289-b23d-568483a565af',\n SCOPE: ['phone', 'email', 'profile', 'openid'],\n REDIRECT_SIGN_IN: `https://${window.location.hostname}/successLogin`,\n REDIRECT_SIGN_OUT: `https://${window.location.hostname}/logout`,\n },\n USER_POOL_ID: 'us-east-1_ITabwycJx',\n APP_CLIENT_ID: '1ferfi9h7roogvdgcjrrd6glv5',\n IDENTITY_POOL_ID: 'us-east-1:d4d93b6b-c9d0-4519-99a8-1876e2821e82',\n },\n discord: {\n APP_CLIENT_ID: '788401823337152545',\n REDIRECT_URI: `https://${window.location.hostname}/discordJoin`,\n },\n};\n\nconst prod = {\n appType: 'boo', // metadata env variable replaced by sed on build\n termsConditionsUrl:\n 'https://dzetsalzmzpda.cloudfront.net/botstermsandconditions/termsandconditions.md',\n enableLegacyResources: stringToBoolean(process.env.REACT_APP_ENABLE_LEGACY_RESOURCES, false),\n rum: {\n deploymentEnvironment: 'production',\n },\n apiGateway: {\n REGION: 'us-east-1',\n URL: 'https://bxqghv1wo2.execute-api.us-east-1.amazonaws.com/prod',\n },\n webSocket: {\n REGION: 'us-east-1',\n URL: 'wss://v6du3la6n5.execute-api.us-east-1.amazonaws.com/prod',\n },\n cognito: {\n SAML_LOGIN: stringToBoolean(process.env.REACT_APP_SAML_LOGIN, false),\n MANDATORY_SIGN_IN: true,\n REGION: 'us-east-1',\n saml: {\n IDP_NAME: 'CustomerIdentity',\n IDP_RESPONSE_TYPE: 'code',\n IDP_LOGIN_URL: 'https://boss-prod.auth.us-east-1.amazoncognito.com/oauth2/authorize',\n IDP_SCOPE: 'phone+email+profile+openid',\n DOMAIN: 'boss-prod.auth.us-east-1.amazoncognito.com',\n USER_POOL_ID: 'us-east-1_UWJXZZ769',\n APP_CLIENT_ID: '3qrbmuielqsdls85jojnvjpp4p',\n IDENTITY_POOL_ID: 'us-east-1:ae09d2ef-1a1a-4dd3-9918-9e2decabe130',\n SCOPE: ['phone', 'email', 'profile', 'openid'],\n REDIRECT_SIGN_IN: `https://${window.location.hostname}/successLogin`,\n REDIRECT_SIGN_OUT: `https://${window.location.hostname}/logout`,\n },\n USER_POOL_ID: 'us-east-1_UOCAR2JT0',\n APP_CLIENT_ID: '1hsik0vuvsusg9iunipekheekq',\n IDENTITY_POOL_ID: 'us-east-1:9a4a7263-d922-4c96-a115-d5213d381ad5',\n },\n discord: {\n APP_CLIENT_ID: '801446750190567440',\n REDIRECT_URI: `https://${window.location.hostname}/discordJoin`,\n },\n};\nlet envConfig;\n\n// Default to dev if not set\nif (process.env.REACT_APP_STAGE === 'prod') {\n envConfig = prod;\n} else if (process.env.REACT_APP_STAGE === 'staging') {\n envConfig = staging;\n} else if (process.env.REACT_APP_STAGE === 'dev') {\n envConfig = dev;\n} else {\n envConfig = local;\n}\n\nexport default merge(common, envConfig);\n","import { useContext, createContext } from 'react';\n\nexport const AppContext = createContext(null);\n\nexport function useAppContext() {\n return useContext(AppContext);\n}\n\nexport const TeamContext = createContext(null);\nexport function useTeamContext() {\n return useContext(TeamContext);\n}\n\nexport const HomeContext = createContext(null);\nexport function useHomeContext() {\n return useContext(HomeContext);\n}\n\nexport const WorkshopContext = createContext(null);\nexport function useWorkshopContext() {\n return useContext(WorkshopContext);\n}\n\nexport const ScenarioContext = createContext(null);\nexport function useScenarioContext() {\n return useContext(ScenarioContext);\n}\nexport const AdminQuestionContext = createContext(null);\nexport function useAdminQuestionContext() {\n return useContext(AdminQuestionContext);\n}\n","import React from 'react';\nimport { Box } from 'reflexbox';\n\nconst GREEN_COLOR = '#61ADA1';\nconst ORANGE_COLOR = '#DE935F';\n\nfunction WorkshopVideoProgress({ stats = {}, style }) {\n if (stats && stats.completed && stats.total) {\n return (\n <Box\n style={{\n border: '1px solid #2C2C2C',\n color: '#D0D0D0',\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n textAlign: 'left',\n fontWeight: 400,\n ...style,\n }}\n py=\"12px\"\n px=\"22px\"\n className=\"WorkshopVideoProgress-Box\"\n >\n <p className=\"WorkshopVideoProgress-VideosSeen\">\n Videos seen: <span style={{ color: GREEN_COLOR }}>{stats.completed}</span>\n </p>\n <p className=\"WorkshopVideoProgress-RemainingVideos\">\n Remaining videos:{' '}\n <span style={{ color: ORANGE_COLOR }}>{stats.total - stats.completed}</span>\n </p>\n </Box>\n );\n }\n return null;\n}\n\nexport default WorkshopVideoProgress;\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { FormLabel, Tooltip, OpenIcon, CloseIcon, SwitchButton, QuestionCircleIcon } from 'boss-ui';\n\nexport default function AccessibilityToggle(props) {\n const { fieldValue, handleFieldChange } = props;\n return (\n <Box style={{ position: 'relative' }}>\n <FormLabel>Team Access</FormLabel>\n <SwitchButton\n checked={fieldValue}\n handleToggle={handleFieldChange}\n id=\"accessibility\"\n onIcon={<OpenIcon />}\n offIcon={<CloseIcon />}\n onText=\"Open\"\n offText=\"Closed\"\n />\n <Flex\n data-tip\n data-for=\"open_question\"\n style={{\n position: 'absolute',\n right: '-30px',\n top: '26px',\n }}\n >\n <QuestionCircleIcon />\n </Flex>\n <Tooltip id=\"open_question\" place=\"right\">\n Open: Allow others to join your team without approval. Closed: You must invite others to\n join your team.\n </Tooltip>\n </Box>\n );\n}\n","import styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst BodyContainer = styled(Flex)`\n padding: ${(props) => props.theme.margin.s};\n font-family: 'Roboto Mono';\n font-weight: normal;\n border: 1px solid\n ${(props) =>\n props.active\n ? props.theme.color.card.classic.border.active\n : props.theme.color.card.classic.border.inactive};\n ${(props) =>\n props.restricted &&\n css`\n border: 1px solid ${props.theme.color.card.restricted.border};\n `};\n ${(props) =>\n props.inprogress &&\n css`\n border: 1px solid ${props.theme.color.card.classic.border.inprogress};\n `};\n ${(props) =>\n props.completed &&\n css`\n border: 1px solid ${props.theme.color.card.classic.border.completed};\n `};\n ${(props) =>\n props.history &&\n css`\n border: 1px solid ${props.theme.color.card.classic.border.history};\n `};\n border-top-color: transparent;\n`;\n\nBodyContainer.displayName = 'CardBody';\nexport default BodyContainer;\n","import styled from 'styled-components';\n\nconst CardIcon = styled.div`\n background-color: ${(props) => props.theme.color.background};\n align-items: center;\n width: 26px;\n height: 26px;\n`;\n\nCardIcon.displayName = 'CardIconContainer';\nexport default CardIcon;\n","import styled, { css } from 'styled-components';\nimport { heightEffect } from '../../libs/animations-lib';\n\nconst CardDescription = styled.div`\n font-size: 16px;\n color: ${(props) => props.theme.color.card.classic.description};\n text-align: left;\n overflow: hidden;\n font-weight: 300;\n font-size: 14px;\n font-family: 'Roboto Mono';\n word-break: break-word;\n ${(props) =>\n props.climpAfterLine &&\n css`\n -webkit-line-clamp: ${props.climpAfterLine};\n -webkit-box-orient: vertical;\n display: -webkit-box;\n `}\n ${(props) =>\n props.animate &&\n css`\n animation: ${heightEffect} 2s ease-out;\n -moz-animation: ${heightEffect} 2s ease-out;\n -webkit-animation: ${heightEffect} 2s ease-out;\n `};\n ${(props) =>\n props.minHeight &&\n css`\n min-height: ${props.minHeight};\n `};\n ${(props) =>\n props.restricted &&\n css`\n color: ${props.theme.color.card.restricted.description};\n `};\n`;\n\nCardDescription.displayName = 'CardDescription';\nexport default CardDescription;\n","import React from 'react';\nimport { withTheme } from 'styled-components';\nimport { getDateComponents } from '../../libs/dates-lib';\nimport { RegularText } from 'boss-ui';\n\nfunction CardDate({ date, theme, style }) {\n const dateObject = getDateComponents(date);\n return (\n <RegularText color={theme.color.text.light.color} {...style} mediumWeight>\n {`${dateObject.stringMonth.toUpperCase()}${dateObject.day},${dateObject.year}`}\n </RegularText>\n );\n}\n\nexport default withTheme(CardDate);\n","import styled, { css } from 'styled-components';\n\nconst CardTitle = styled.div`\n color: ${(props) =>\n props.active\n ? props.theme.color.card.classic.title.active\n : props.theme.color.card.classic.title.inactive};\n font-size: 20px;\n text-align: left;\n height: ${(props) => props.height};\n margin-top: ${(props) => props.theme.margin.s};\n margin-bottom: ${(props) => props.theme.margin.s};\n ${(props) =>\n props.restricted &&\n css`\n color: ${props.theme.color.card.restricted.title};\n `};\n ${(props) =>\n props.inprogress &&\n css`\n color: ${props.theme.color.card.classic.title.inprogress};\n `};\n ${(props) =>\n props.completed &&\n css`\n color: ${props.theme.color.card.classic.title.completed};\n `};\n ${(props) =>\n props.history &&\n css`\n color: ${props.theme.color.card.classic.title.history};\n `};\n`;\n\nCardTitle.displayName = 'CardTitle';\nexport default CardTitle;\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport { BOTS_TYPE } from '../libs/constants';\n\nconst BOO_STYLE = {\n color: '#81A2BE',\n};\n\nconst BOTS_STYLE = {\n color: '#A5D6A7',\n};\n\nexport default function BossLabel({ type, ...rest }) {\n if (type === BOTS_TYPE.NOC) {\n return (\n <Flex {...rest} style={BOO_STYLE}>\n BOO\n </Flex>\n );\n }\n return (\n <Flex {...rest} style={BOTS_STYLE}>\n BOTS\n </Flex>\n );\n}\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport { Button, UnregularButton, GameIcon } from 'boss-ui';\nimport { getImageURLSized } from '../../libs/utils-lib';\nimport CardBody from './CardBody';\nimport CardIconContainer from './CardIconContainer';\nimport CardDescription from './CardDescription';\nimport CardDate from './CardDate';\nimport CardTitle from './CardTitle';\nimport BossLabel from '../BossLabel';\nimport { WorkshopIcon } from '../icons';\nimport { EVENT_TYPE, MAXLEN_BIGCARD_TEXT_COLLAPSE, EVENT_DELIVERY } from '../../libs/constants';\nimport { useAppContext } from '../../libs/context-lib';\nimport { isTodayBetween } from '../../libs/dates-lib';\nimport { getNoImageUrl } from '../../libs/event-lib';\n\nconst Image = styled.img`\n object-fit: cover;\n width: 100%;\n height: 310px;\n`;\nImage.displayName = 'BigCardImage';\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n height: fit-content;\n`;\nContainer.displayName = 'BigCardContainer';\n\nconst CollapsableDescription = ({ children = [] }) => {\n const [visible, setVisible] = useState(children.length < MAXLEN_BIGCARD_TEXT_COLLAPSE);\n return (\n <>\n {visible ? (\n <CardDescription animate minHeight=\"38px\">\n {children}\n </CardDescription>\n ) : (\n <CardDescription climpAfterLine={2} minHeight=\"38px\">\n {children}\n </CardDescription>\n )}\n {children.length > MAXLEN_BIGCARD_TEXT_COLLAPSE && (\n <Flex mt=\"12px\" justifyContent=\"center\" width={1}>\n <UnregularButton onClick={() => setVisible((visible) => !visible)}>\n {visible ? 'Show less' : 'Show more'}\n </UnregularButton>\n </Flex>\n )}\n </>\n );\n};\n\nexport default function BigCard({ event, mobile }) {\n const {\n imageURL,\n type,\n eventType,\n name,\n description,\n startDate,\n activeStartDate,\n activeEndDate,\n delivery,\n } = event;\n const { setEvent } = useAppContext();\n const imgSize = 'medium';\n const imageSrc = getImageURLSized(imageURL, imgSize);\n const history = useHistory();\n const activeEvent = isTodayBetween(new Date(activeStartDate), new Date(activeEndDate));\n const showDate = delivery === EVENT_DELIVERY.NORMAL;\n\n const onEnter = () => {\n setEvent(event);\n if (eventType === EVENT_TYPE.WORKSHOP) {\n history.push(`/workshop/${event.workshopId}`);\n return;\n }\n history.push(`/event/${event.eventId}`);\n };\n\n return (\n <Container width=\"550px\" flexDirection=\"column\" mb=\"20px\">\n <Image\n src={imageSrc}\n alt=\"event image\"\n onError={(e) => {\n e.target.src = getNoImageUrl(type, imgSize);\n }}\n />\n <CardBody\n active={activeEvent}\n alignItems=\"start\"\n flexDirection=\"column\"\n py={mobile ? '10px' : '25px'}\n px={mobile ? '15px' : '40px'}\n minHeight=\"317px\"\n >\n <Flex alignItems=\"center\" width={1}>\n <CardIconContainer>\n {eventType === EVENT_TYPE.WORKSHOP ? <WorkshopIcon /> : <GameIcon />}\n </CardIconContainer>\n <BossLabel type={type} ml=\"6px\" />\n {showDate && startDate && (\n <Flex ml=\"auto\">\n <CardDate date={startDate} />\n </Flex>\n )}\n </Flex>\n <CardTitle height=\"52px\" active={activeEvent}>\n {name}\n </CardTitle>\n <CollapsableDescription>{description}</CollapsableDescription>\n <Flex mt=\"40px\" ml=\"auto\" minWidth=\"100px\">\n <Button onClick={onEnter} disabled={!activeEvent}>\n ENTER\n </Button>\n </Flex>\n </CardBody>\n </Container>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { Button, UnregularButton } from 'boss-ui';\nimport CardBody from './CardBody';\nimport CardTitle from './CardTitle';\nimport { SKELTELON_STYLE } from '../../libs/constants';\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n box-shadow: '0px 3px 6px #00000029';\n height: 627px;\n`;\nContainer.displayName = 'BigCardSkeletonContainer';\n\nconst CollapsableDescription = () => {\n return (\n <>\n <UnregularButton disabled>\n <Skeleton width={100} />\n </UnregularButton>\n </>\n );\n};\n\nexport default function BigCardSkeleton({ mobile }) {\n return (\n <Container width=\"100%\" maxWidth=\"550px\" flexDirection=\"column\" mb=\"20px\">\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton height=\"320px\" width=\"100%\" />\n </SkeletonTheme>\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <CardBody\n alignItems=\"start\"\n flexDirection=\"column\"\n height=\"100%\"\n py=\"45px\"\n px=\"60px\"\n style={{\n borderColor: 'transparent',\n }}\n >\n <CardTitle>\n <Skeleton width={mobile ? '200px' : '400px'} />\n </CardTitle>\n <CollapsableDescription />\n <Flex mt=\"66px\" ml=\"auto\" minWidth=\"100px\">\n <Button disabled>ENTER</Button>\n </Flex>\n </CardBody>\n </SkeletonTheme>\n </Container>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { withRouter } from 'react-router-dom';\nimport { Breadcrumb } from 'boss-ui';\n\nconst MenuContainer = styled.div`\n display: flex;\n align-items: center;\n overflow-x: auto;\n padding: 0 0 0 20px;\n white-space: nowrap;\n height: 50px;\n background-color: #1d1d1d;\n box-shadow: 0px 3px 6px #00000029;\n`;\n\nfunction Menu(props) {\n const { crumbs } = props;\n return (\n <MenuContainer>\n <Breadcrumb crumbs={crumbs} />\n </MenuContainer>\n );\n}\n\nexport default withRouter(Menu);\n","import styled from 'styled-components';\n\nconst CardImage = styled.img`\n object-fit: cover;\n width: 100%;\n height: 186px;\n`;\nCardImage.displayName = 'CardImageImg';\n\nexport default CardImage;\n","import styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst EventLabel = styled(Flex)`\n font-family: 'Roboto Mono';\n font-weight: normal;\n font-size: 16px;\n width: 160px;\n height: 36px;\n background-color: #ffffff;\n padding-left: 10px;\n padding-top: 7px;\n padding-bottom: 8px;\n ${(props) =>\n props.enrolled &&\n props.active &&\n css`\n background-color: ${props.theme.color.card.restricted.active};\n `};\n ${(props) =>\n props.enrolled &&\n !props.active &&\n css`\n background-color: ${props.theme.color.card.restricted.inactive};\n `};\n`;\nEventLabel.displayName = 'EventLabel';\n\nexport default EventLabel;\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport intervalToDuration from 'date-fns/intervalToDuration';\nimport styled, { css } from 'styled-components';\nimport { SandTimeIcon } from 'boss-ui';\nimport WorkshopProgressLabel from '../workshops/WorkshopProgressLabel';\nimport { EVENT_TYPE, EVENT_DELIVERY } from '../../libs/constants';\nimport { isOnDemandEventInsidePlayWindow } from '../../libs/event-lib';\nimport EventLabel from '../EventLabel';\n\nconst EnrolledLabel = styled(Flex)`\n font-family: 'Roboto Mono';\n font-weight: normal;\n font-size: 16px;\n position: absolute;\n margin-top: -18px;\n background-color: ${(props) => props.theme.color.card.classic.border.inactive};\n ${(props) =>\n props.active &&\n css`\n background-color: ${props.theme.color.card.classic.border.active};\n `};\n ${(props) =>\n props.inprogress &&\n css`\n background-color: ${props.theme.color.card.classic.border.inprogress};\n `};\n ${(props) =>\n props.completed &&\n css`\n background-color: ${props.theme.color.card.classic.border.completed};\n `};\n`;\nEnrolledLabel.displayName = 'Card-EnrolledLabel';\n\nconst padZeroStart = (number, nroDigits = 2) => `0${number}`.slice(-nroDigits);\n\nconst TimeLeftLabel = ({ timeLeft = {} }) => {\n return (\n <EnrolledLabel inprogress>\n <Flex style={{ backgroundColor: 'black' }} p=\"6px\">\n <SandTimeIcon color=\"#d0d0d0\" />\n </Flex>\n <Flex ml=\"6px\" p=\"6px\">\n {padZeroStart(timeLeft.hours)}h {padZeroStart(timeLeft.minutes)}m left\n </Flex>\n </EnrolledLabel>\n );\n};\n\n/**\n * @param {String} eventType WORKSHOP / GAME for icons\n * @param {boolean} history\n * @param {object} stats workshop progress stats\n * @param {boolean} isEventRunning\n * @param {String} delivery NORMAL / ON_DEMAND\n * @param {boolean} showProgressLabel\n * @param {Boolean} enrolled\n * @param {String} joinDate date of joining to the event\n * @param {String} duration event duration in minutes\n * @param {Boolean} showEnrolledLabel\n * @param {Boolean} restricted\n */\nexport default function CardLabel({\n eventType,\n history,\n stats,\n isEventRunning,\n delivery,\n showProgressLabel,\n enrolled,\n joinDate,\n duration,\n showEnrolledLabel,\n restricted = false,\n}) {\n if (!history) {\n if (eventType === EVENT_TYPE.WORKSHOP) {\n return stats.progressPercentage ? (\n <WorkshopProgressLabel stats={stats} style={{ marginTop: '-18px' }} />\n ) : (\n enrolled && (\n <EnrolledLabel active={isEventRunning} p=\"6px\">\n Enrolled\n </EnrolledLabel>\n )\n );\n }\n if (delivery === EVENT_DELIVERY.ON_DEMAND) {\n if (showProgressLabel) {\n const inProgressStartDate = new Date(joinDate);\n const inProgressEndDate = new Date(inProgressStartDate.getTime() + duration * 60000);\n return (\n <TimeLeftLabel\n timeLeft={intervalToDuration({ start: new Date(), end: inProgressEndDate })}\n />\n );\n }\n if (enrolled && !isOnDemandEventInsidePlayWindow(joinDate, duration)) {\n return (\n <EnrolledLabel completed p=\"6px\">\n Play Again\n </EnrolledLabel>\n );\n }\n return (\n <EnrolledLabel active p=\"6px\">\n Play Now\n </EnrolledLabel>\n );\n }\n if (restricted) {\n return (\n <EventLabel enrolled={enrolled} active={isEventRunning}>\n {enrolled ? 'Enrolled' : 'Private Event'}\n </EventLabel>\n );\n }\n return showEnrolledLabel ? (\n <EnrolledLabel active={isEventRunning} p=\"6px\">\n Enrolled\n </EnrolledLabel>\n ) : null;\n }\n return null;\n}\n","import React, { useRef, useLayoutEffect, useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport capitalize from 'lodash/capitalize';\nimport { RegularText, Tooltip, GameIcon } from 'boss-ui';\nimport { WorkshopIcon, InviteOnlyIcon } from '../icons';\nimport { getImageURLSized, removePlural } from '../../libs/utils-lib';\nimport CardBody from './CardBody';\nimport CardDescription from './CardDescription';\nimport CardIconContainer from './CardIconContainer';\nimport CardTitle from './CardTitle';\nimport CardImage from './CardImage';\nimport CardDate from './CardDate';\nimport CardLabel from './CardLabel';\nimport BossLabel from '../BossLabel';\nimport { isTodayBetween, formatMinutes } from '../../libs/dates-lib';\nimport {\n isOnDemandEventInsidePlayWindow,\n getNoImageUrl,\n isNormalEventInsideActiveWindow,\n} from '../../libs/event-lib';\nimport { EVENT_TYPE, EVENT_DELIVERY } from '../../libs/constants';\n\nconst ICON_SIZE = 26;\nconst CARD_MARGIN = 20;\nconst DESCRIPTION_LINE_HEIGHT = 23;\n\nconst Container = styled(Flex)`\n width: 330px;\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n &:hover {\n background-color: ${(props) => props.theme.color.card.classic.background.hover};\n cursor: pointer;\n }\n`;\nContainer.displayName = 'Card-Container';\n\nconst calculateDescriptionLines = (titleHeight) => {\n return Math.round((300 - titleHeight - ICON_SIZE - CARD_MARGIN * 2) / DESCRIPTION_LINE_HEIGHT);\n};\n\nconst getDurationLabel = (duration) => {\n const durationFormated = formatMinutes(duration);\n return (\n <RegularText light fontSize=\"14px\" className=\"Card-DurationLabel\">\n {`Duration: ${durationFormated.hour}h ${durationFormated.minutes}m `}\n </RegularText>\n );\n};\n\n/**\n * @param {String} activeEndDate event active end date\n * @param {String} activeStartDate event active start date\n * @param {String} delivery NORMAL / ON_DEMAND\n * @param {String} description card description\n * @param {String} duration event duration in minutes\n * @param {Boolean} enrolled\n * @param {String} eventType WORKSHOP / GAME for icons\n * @param {boolean} history\n * @param {String} id event id\n * @param {String} imageURL image url of card\n * @param {boolean} isScenario\n * @param {String} joinDate date of joining to the event\n * @param {function} onCardClick on click function\n * @param {String} registrationClosedDate event registration end date\n * @param {String} registrationOpenDate event registration start date\n * @param {String} registrationStatus OPEN / CLOSED\n * @param {Boolean} restricted\n * @param {String} scenarioIdx scenario idx to use with label\n * @param {String} scenarioLabel scenario label\n * @param {boolean} showDate\n * @param {String} startDate event start date\n * @param {object} stats workshop progress stats\n * @param {String} title card title\n * @param {String} type SOC/NOC for labels\n */\nexport default function Card({\n activeEndDate,\n activeStartDate,\n delivery,\n description,\n duration = 90,\n enrolled = false,\n eventType,\n history = false,\n id,\n imageURL,\n isScenario = false,\n joinDate,\n onCardClick,\n registrationClosedDate,\n registrationOpenDate,\n registrationStatus,\n restricted,\n scenarioIdx,\n scenarioLabel,\n showDate,\n startDate,\n stats = {},\n title,\n type,\n}) {\n const isEventRunning =\n eventType === EVENT_TYPE.WORKSHOP\n ? isTodayBetween(new Date(activeStartDate), new Date(activeEndDate))\n : delivery === EVENT_DELIVERY.NORMAL\n ? isNormalEventInsideActiveWindow(\n activeStartDate,\n activeEndDate,\n registrationOpenDate,\n registrationClosedDate,\n registrationStatus\n )\n : isOnDemandEventInsidePlayWindow(joinDate, duration);\n const imgSize = 'small';\n const imageSrc = getImageURLSized(imageURL, imgSize);\n const titleRef = useRef(title);\n const [descriptionLines, setdescriptionLines] = useState(0);\n const showEnrolledLabel = enrolled && !isScenario;\n const isWorkshopCompleted =\n eventType === EVENT_TYPE.WORKSHOP && stats && stats.isWorkshopCompleted;\n\n const showProgressLabel =\n (eventType === EVENT_TYPE.WORKSHOP && stats.progressPercentage) ||\n (isEventRunning &&\n eventType === EVENT_TYPE.GAME &&\n delivery === EVENT_DELIVERY.ON_DEMAND &&\n enrolled);\n\n useLayoutEffect(() => {\n if (titleRef.current) {\n setdescriptionLines(calculateDescriptionLines(titleRef.current.offsetHeight));\n }\n }, []);\n\n useEffect(() => {\n if (!title && !description) {\n throw new Error('missing title/description');\n }\n }, []);\n\n return (\n <Container\n maxWidth=\"330px\"\n flexDirection=\"column\"\n onClick={onCardClick}\n className=\"Card-Container\"\n >\n <CardImage\n src={imageSrc}\n alt=\"card image\"\n onError={(e) => {\n e.target.src = getNoImageUrl(type, imgSize);\n }}\n />\n <Flex justifyContent=\"flex-end\" width={1}>\n <CardLabel\n eventType={eventType}\n history={history}\n stats={stats}\n isEventRunning={isEventRunning}\n delivery={delivery}\n showProgressLabel={showProgressLabel}\n enrolled={enrolled}\n joinDate={joinDate}\n duration={duration}\n showEnrolledLabel={showEnrolledLabel}\n restricted={restricted}\n />\n </Flex>\n <CardBody\n active={\n isEventRunning || (!enrolled && delivery === EVENT_DELIVERY.ON_DEMAND) || isScenario\n }\n alignItems=\"start\"\n flexDirection=\"column\"\n height=\"300px\"\n restricted={restricted}\n completed={\n isWorkshopCompleted ||\n (!isEventRunning && delivery === EVENT_DELIVERY.ON_DEMAND && enrolled)\n }\n inprogress={showProgressLabel}\n history={history}\n >\n <Flex alignItems=\"center\" width={1}>\n {isScenario ? (\n <RegularText light mediumWeight fontSize=\"14px\" className=\"Card-ScenarioLabel\">\n {capitalize(removePlural(scenarioLabel))} {scenarioIdx}\n </RegularText>\n ) : (\n <>\n <CardIconContainer>\n {eventType === EVENT_TYPE.WORKSHOP ? <WorkshopIcon /> : <GameIcon />}\n </CardIconContainer>\n {restricted && (\n <>\n <Flex data-tip data-for=\"inviteOnlyIcon\" pl=\"8px\" pr=\"4px\">\n <InviteOnlyIcon />\n </Flex>\n <Tooltip id=\"inviteOnlyIcon\">INVITE ONLY</Tooltip>\n </>\n )}\n <BossLabel type={type} ml=\"6px\" />\n <Flex ml=\"auto\">\n {delivery === EVENT_DELIVERY.ON_DEMAND\n ? getDurationLabel(duration)\n : showDate && startDate && <CardDate date={startDate} />}\n </Flex>\n </>\n )}\n </Flex>\n <div ref={titleRef} style={{ display: 'content' }}>\n <CardTitle\n active={\n isEventRunning || (!enrolled && delivery === EVENT_DELIVERY.ON_DEMAND) || isScenario\n }\n id={id}\n restricted={restricted}\n completed={\n isWorkshopCompleted ||\n (!isEventRunning && delivery === EVENT_DELIVERY.ON_DEMAND && enrolled)\n }\n history={history}\n inprogress={showProgressLabel}\n >\n {title}\n </CardTitle>\n </div>\n <Flex mt=\"auto\">\n <CardDescription climpAfterLine={descriptionLines}>{description}</CardDescription>\n </Flex>\n </CardBody>\n </Container>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { Button, UnregularButton } from 'boss-ui';\nimport CardBody from './CardBody';\nimport CardTitle from './CardTitle';\nimport { SKELTELON_STYLE } from '../../libs/constants';\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n box-shadow: '0px 3px 6px #00000029';\n`;\nContainer.displayName = 'CardSkeletonContainer';\n\nconst CollapsableDescription = () => {\n return (\n <>\n <UnregularButton disabled>\n <Skeleton width={100} />\n </UnregularButton>\n </>\n );\n};\n\nfunction CardSkeletonBlock() {\n return (\n <Container width=\"330px\" flexDirection=\"column\" margin=\"15px 30px 15px 0\">\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton height=\"186px\" width=\"100%\" />\n </SkeletonTheme>\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <CardBody\n alignItems=\"start\"\n flexDirection=\"column\"\n height=\"100%\"\n py=\"45px\"\n px=\"60px\"\n width=\"330px\"\n style={{\n borderColor: 'transparent',\n }}\n >\n <CardTitle>\n <Skeleton width=\"285px\" />\n </CardTitle>\n <CollapsableDescription />\n <Flex mt=\"66px\" ml=\"auto\" minWidth=\"100px\">\n <Button disabled>ENTER</Button>\n </Flex>\n </CardBody>\n </SkeletonTheme>\n </Container>\n );\n}\n\nfunction CardSkeletonLandscapeBlock() {\n return (\n <Container flexDirection=\"column\" margin=\"15px 30px 15px 0\">\n <Flex width={1} flexDirection=\"row\">\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton height=\"186px\" width=\"330px\" />\n </SkeletonTheme>\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <CardBody\n alignItems=\"start\"\n flexDirection=\"column\"\n height=\"100%\"\n px=\"60px\"\n style={{\n borderColor: 'transparent',\n width: '600px',\n paddingTop: '2px',\n }}\n >\n <CardTitle>\n <Skeleton width=\"300px\" />\n </CardTitle>\n </CardBody>\n </SkeletonTheme>\n </Flex>\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton height=\"25px\" width=\"100%\" style={{ marginTop: '20px', marginBottom: '20px' }} />\n </SkeletonTheme>\n </Container>\n );\n}\n\nexport default function CardSkeleton({ landscape, style }) {\n return (\n <Media\n queries={{\n s: '(min-width: 760px)',\n m: '(min-width: 1350px)',\n l: '(min-width: 1800px)',\n }}\n >\n {(matches) => (\n <Flex style={style}>\n {landscape ? (\n <CardSkeletonLandscapeBlock />\n ) : (\n <Flex flexDirection=\"row\" alignItems=\"flex-start\" flexWrap=\"wrap\">\n <CardSkeletonBlock />\n {matches.s && <CardSkeletonBlock />}\n {matches.m && <CardSkeletonBlock />}\n {matches.l && <CardSkeletonBlock />}\n </Flex>\n )}\n </Flex>\n )}\n </Media>\n );\n}\n","import React, { useState } from 'react';\nimport { Box } from 'reflexbox';\nimport styled, { css } from 'styled-components';\nimport { RightArrowHide, RightArrowShow, LeftArrowHide, LeftArrowShow } from './icons';\n\nconst COLLAPSED_WIDTH = '20px';\nconst MenuContainer = styled.div`\n display: flex;\n z-index: 10;\n ${(props) =>\n props.mobile && props.visible\n ? css`\n width: 100%;\n position: absolute;\n z-index: 11;\n `\n : css`\n max-width: 500px;\n `}\n`;\n\nconst WorkshopMenuContent = styled(Box)`\n color: transparent;\n background-color: ${(props) => props.theme.color.form.background};\n text-align: left;\n`;\n\nexport default function CollapsableMenu({\n side = 'left',\n expandedWidth = '300px',\n children,\n collapsed = false,\n mobile,\n}) {\n const [menuVisible, setMenuVisible] = useState(!collapsed);\n const getMenuWidth = (expectedWidth, mobile, menuVisible) => {\n if (mobile) {\n return menuVisible ? '100%' : '0';\n }\n return menuVisible ? expectedWidth : COLLAPSED_WIDTH;\n };\n const menuWidth = getMenuWidth(expandedWidth, mobile, menuVisible);\n\n return (\n <MenuContainer mobile={mobile} visible={menuVisible}>\n {side === 'right' && (\n <Box onClick={() => setMenuVisible((toggleMenu) => !toggleMenu)}>\n {menuVisible ? <RightArrowHide /> : <RightArrowShow />}\n </Box>\n )}\n <WorkshopMenuContent width={menuWidth}>{menuVisible && children}</WorkshopMenuContent>\n {side === 'left' && (\n <Box onClick={() => setMenuVisible((toggleMenu) => !toggleMenu)} height=\"40px\">\n {menuVisible ? <LeftArrowHide /> : <LeftArrowShow />}\n </Box>\n )}\n </MenuContainer>\n );\n}\n","import React, { useState, useLayoutEffect } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport format from 'date-fns/format';\nimport {\n Button,\n ConfirmationModal,\n Input,\n Modal,\n RegularText,\n Table,\n TableBody,\n TableData,\n TableRow,\n UnregularButton,\n} from 'boss-ui';\nimport { DEFAULT_BOX_BORDER_STYLE } from '../libs/constants';\nimport { useFormFields } from '../libs/hooks-lib';\nimport { getStyleMedia } from '../libs/team-lib';\n\nconst DEFAULT_POINTS_RECEIVER_LABEL = 'the team';\nexport default function DirectPointConceiver({\n onSend = () => {},\n pointsHistory = {},\n loading,\n receiverLabel = DEFAULT_POINTS_RECEIVER_LABEL,\n screenWidthSchema,\n}) {\n const [fields, onFieldChange] = useFormFields({ reason: '', points: 0 });\n const [confirmationModalVisible, setConfirmationModalVisible] = useState(false);\n const [activityModalVisible, setActivityModalVisible] = useState(false);\n\n const disableButtons = !Number(fields.points) || !fields.reason.length;\n\n const assignPoints = () => {\n setConfirmationModalVisible(false);\n onSend(fields);\n };\n\n useLayoutEffect(() => {\n // reset values after points request ends\n if (!loading) {\n onFieldChange({\n target: {\n value: 0,\n id: 'points',\n },\n });\n onFieldChange({\n target: {\n value: '',\n id: 'reason',\n },\n });\n }\n }, [loading]);\n\n return (\n <>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"14px\" mediumWeight>\n Point adjustment\n </RegularText>\n {pointsHistory && pointsHistory.activity && (\n <Flex ml=\"auto\">\n <UnregularButton noPadding onClick={() => setActivityModalVisible(true)}>\n Activity\n </UnregularButton>\n </Flex>\n )}\n </Flex>\n <Flex\n style={DEFAULT_BOX_BORDER_STYLE}\n p=\"12px\"\n flexDirection={getStyleMedia(screenWidthSchema).pointAdjustFlexDir}\n alignItems={getStyleMedia(screenWidthSchema).pointAdjustAlign}\n >\n <Box width=\"60px\" mr=\"6px\" py={getStyleMedia(screenWidthSchema).pointAdjustPy}>\n <Input\n value={fields.points}\n onChange={onFieldChange}\n height=\"28px\"\n id=\"points\"\n type=\"number\"\n />\n </Box>\n <Box\n mr=\"6px\"\n py={getStyleMedia(screenWidthSchema).pointAdjustPy}\n width={getStyleMedia(screenWidthSchema).pointAdjustAssignReasonWitdh}\n >\n <Input\n value={fields.reason}\n onChange={onFieldChange}\n placeholder=\"Enter a reason\"\n height=\"28px\"\n id=\"reason\"\n />\n </Box>\n <Flex\n ml=\"auto\"\n py={getStyleMedia(screenWidthSchema).pointAdjustPy}\n width={getStyleMedia(screenWidthSchema).pointAdjustAssignBtnWitdh}\n >\n <Button\n disabled={disableButtons || loading}\n onClick={() => setConfirmationModalVisible(true)}\n >\n ASSIGN\n </Button>\n </Flex>\n </Flex>\n {confirmationModalVisible && (\n <ConfirmationModal\n onCancel={() => setConfirmationModalVisible(false)}\n onAccept={assignPoints}\n >\n <RegularText>\n Are you sure applying {fields.points} points on{' '}\n {Number(fields.points) > 0 ? 'bonus' : 'penalty'} to {receiverLabel}?\n </RegularText>\n </ConfirmationModal>\n )}\n {activityModalVisible && (\n <Modal margin=\"10% auto auto auto\" onBackgroundClick={() => setActivityModalVisible(false)}>\n <Flex\n px=\"40px\"\n py=\"60px\"\n width=\"640px\"\n backgroundColor=\"#1D1D1D\"\n flexDirection=\"column\"\n maxHeight=\"460px\"\n >\n <Flex height=\"0px\">\n <Flex ml=\"auto\" style={{ position: 'relative', top: '-40px', left: '30px' }}>\n <UnregularButton onClick={() => setActivityModalVisible(false)}>\n Close Activity\n </UnregularButton>\n </Flex>\n </Flex>\n <RegularText fontSize=\"14px\">Points Assigned History</RegularText>\n <Flex style={{ overflowY: 'auto' }} mt=\"6px\" mb=\"24px\">\n <Table>\n <TableBody>\n {pointsHistory.activity.map((activity) => {\n return (\n <TableRow key={activity.description}>\n <TableData>\n <PointItem {...activity} />\n </TableData>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </Flex>\n <RegularText fontSize=\"14px\">Total Points Assigned</RegularText>\n <Box style={DEFAULT_BOX_BORDER_STYLE} p=\"12px\" mt=\"6px\">\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Bonus: </RegularText>\n <RegularText fontSize=\"12px\">{pointsHistory.total.bonus}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Penalty: </RegularText>\n <RegularText fontSize=\"12px\">{pointsHistory.total.penalty}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Resultant Score: </RegularText>\n <RegularText fontSize=\"12px\">{pointsHistory.total.total}</RegularText>\n </Flex>\n </Box>\n </Flex>\n </Modal>\n )}\n </>\n );\n}\n\nconst PointItem = ({ score = {}, username, description, updatedAt = new Date() }) => {\n const isBonus = score.bonus > 0;\n return (\n <Box p=\"4px\" style={{ whiteSpace: 'break-spaces' }}>\n <RegularText mediumWeight fontSize=\"13px\" mb=\"6px\">\n {isBonus ? 'BONUS' : 'PENALTY'}\n </RegularText>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Assigned by: </RegularText>\n <RegularText fontSize=\"12px\">{username}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Reason: </RegularText>\n <RegularText fontSize=\"12px\">{description}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Time: </RegularText>\n <RegularText fontSize=\"12px\">{format(new Date(updatedAt), 'PPpp')}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Assigned: </RegularText>\n <RegularText fontSize=\"12px\">{isBonus ? score.bonus : score.penalty}</RegularText>\n </Flex>\n </Box>\n );\n};\n","import React from 'react';\n\nconst DEFAULT_ERROR_MSG = 'Something went wrong';\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false, errorMsg: props.errorMessage };\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error, errorInfo) {\n // You can also log the error to an error reporting service\n console.error(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n if (this.props.ignoreMessage) {\n return null;\n }\n // You can render any custom fallback UI\n return <>{this.state.errorMsg || DEFAULT_ERROR_MSG}</>;\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React from 'react';\nimport { Flex } from 'reflexbox';\n\nconst SCROLL_MARGIN = 10;\n\nexport default function ScrolleableContainer({\n topMargin = SCROLL_MARGIN,\n children,\n setScrolled = () => {},\n}) {\n const handleScroll = (e) => {\n if (e.target.scrollHeight - e.target.scrollTop < e.target.clientHeight + topMargin) {\n setScrolled(true);\n }\n };\n\n return (\n <Flex maxHeight=\"600px\" onScroll={handleScroll} style={{ overflowX: 'auto' }}>\n {children}\n </Flex>\n );\n}\n","import styled from 'styled-components';\n\nconst Text = styled.div`\n overflow-y: auto;\n text-align: left;\n font-family: 'Roboto Mono';\n font-weight: 300;\n font-size: 16px;\n letter-spacing: 0.28px;\n color: #a0a0a0;\n opacity: 1;\n padding: ${(props) => (props.p ? props.p : '40px')};\n`;\nText.displayName = 'Text';\n\nexport default Text;\n","import React, { useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport styled, { css } from 'styled-components';\nimport { ExpandIcon, CollapseIcon, CheckMark } from '../icons';\n\nconst WorkshopTopic = ({ title, subTopics, progress }) => {\n const [visible, setVisible] = useState(false);\n return (\n <Box width={1}>\n <TopicTitle onTitleClick={() => setVisible((v) => !v)} visible={visible} progress={progress}>\n {title}\n </TopicTitle>\n {visible &&\n subTopics.map((st) => {\n if (st.children.length) {\n return (\n <WorkshopTopic\n title={st.title}\n subTopics={st.children}\n key={st.title}\n progress={st.stats}\n />\n );\n }\n return (\n <TopicChildren key={st.title} isDone={st.isCompleted}>\n {st.isCompleted && (\n <Box minWidth=\"24px\">\n <CheckMark />\n </Box>\n )}\n <Flex ml=\"6px\">{st.title}</Flex>\n </TopicChildren>\n );\n })}\n </Box>\n );\n};\n\nconst TopicTitle = ({ visible, children, onTitleClick, progress = {} }) => {\n const showProgress = progress.total > 0;\n return (\n <Flex\n style={{ color: '#DE935F', cursor: 'pointer', fontSize: '14px' }}\n onClick={onTitleClick}\n width={1}\n p=\"22px\"\n textAlign=\"left\"\n >\n <div>{visible ? <CollapseIcon /> : <ExpandIcon />}</div>\n <Flex mx=\"6px\" style={{ whiteSpace: 'break-spaces' }}>\n {children}\n </Flex>\n {!visible && showProgress && (\n <Box ml=\"auto\" width=\"40px\" display=\"table\" className=\"WorkshopContent-TopicTitleProgress\">\n {progress.progressPercentage}%\n </Box>\n )}\n </Flex>\n );\n};\n\nconst TopicChildren = styled(Flex)`\n font-size: 14px;\n color: ${(props) => props.theme.color.card.classic.description};\n text-align: left;\n font-weight: 300;\n padding: 22px;\n &:hover {\n background-color: #2c2c2c;\n }\n ${(props) =>\n props.isDone &&\n css`\n background-color: #1d1d1d;\n color: ${props.theme.color.breadcrumb.active};\n `}\n`;\n\nexport default function WorkshopContent({ content = [] }) {\n return (\n <Box width={1}>\n {content.map((c) => (\n <Flex\n my=\"6px\"\n style={{ border: '1px solid #2C2C2C', fontFamily: 'Roboto Mono' }}\n width={1}\n key={c.title}\n >\n <WorkshopTopic title={c.title} subTopics={c.children} progress={c.stats} />\n </Flex>\n ))}\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Flex } from 'reflexbox';\nimport { SpinnerIcon, Markdown } from 'boss-ui';\nimport { onError } from '../libs/error-lib';\nimport config from '../config';\n\nexport default function TermsAndConditions() {\n const [loadingTerms, setLoadingTerms] = useState(true);\n const [termsAndConditionsMD, setTermsAndConditionsMD] = useState(null);\n\n useEffect(() => {\n const fetchTerms = async () => {\n setLoadingTerms(true);\n try {\n const rq = await fetch(config.termsConditionsUrl, {\n headers: { 'Cache-Control': 'max-age=0, must-revalidate' },\n });\n if (rq.ok) {\n setTermsAndConditionsMD(await rq.text());\n }\n } catch (e) {\n onError(e);\n setTermsAndConditionsMD(\n 'Something went wrong getting the terms and conditions, please try again'\n );\n } finally {\n setLoadingTerms(false);\n }\n };\n\n fetchTerms();\n }, []);\n\n if (loadingTerms) {\n return (\n <Flex width={1} justifyContent=\"center\">\n <SpinnerIcon />\n </Flex>\n );\n }\n\n return <Markdown md={termsAndConditionsMD} />;\n}\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport {\n Button,\n Checkbox,\n Form,\n FormLeyend,\n GameIcon,\n Input,\n LinkedText,\n Markdown,\n Modal,\n QuestionCircleIcon,\n Tabs,\n Tooltip,\n} from 'boss-ui';\nimport Api from '../../api';\nimport { WorkshopIcon, InviteOnlyIcon } from '../icons';\nimport BossLabel from '../BossLabel';\nimport CardBody from '../cards/CardBody';\nimport CardDate from '../cards/CardDate';\nimport CardDescription from '../cards/CardDescription';\nimport CardIconContainer from '../cards/CardIconContainer';\nimport CardTitle from '../cards/CardTitle';\nimport EventLabel from '../EventLabel';\nimport ScrolleableContainer from '../ScrolleableContainer';\nimport Text from '../Text';\nimport WorkshopContent from '../workshops/WorkshopContent';\nimport { onError } from '../../libs/error-lib';\nimport { getImageURLSized } from '../../libs/utils-lib';\nimport {\n EVENT_TYPE,\n CONFIRMATION_NUMBER_REGEXP,\n SKELTELON_STYLE,\n EVENT_DELIVERY,\n EVENT_ACCESS_TYPE,\n DEFAULT_BOX_BORDER_STYLE,\n} from '../../libs/constants';\nimport { useAppContext } from '../../libs/context-lib';\nimport { isTodayBetween, isTodayAfterThan } from '../../libs/dates-lib';\nimport {\n getNoImageUrl,\n isOnDemandEventInsidePlayWindow,\n isNormalEventInsideActiveWindow,\n} from '../../libs/event-lib';\nimport TermsAndConditions from '../TermsConditions';\n\nconst Image = styled.img`\n object-fit: cover;\n width: 100%;\n height: 432px;\n`;\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n`;\n\nconst API = new Api();\n\nconst EnrollComponent = ({ onEnrollEvent, disableEnroll, requireConfirmationNumber, delivery }) => {\n const [confirmationNumber, setConfirmationNumber] = useState('');\n const [ackVisible, setAckVisible] = useState(false);\n const [shareInformationAccepted, setShareInformationAccepted] = useState(false);\n\n if (requireConfirmationNumber) {\n return (\n <>\n <Box my=\"20px\">\n <Flex>\n <Box mr=\"6px\" className=\"EventDetail-FlexCheckbox\" minWidth=\"auto\">\n <label className=\"EventDetail-LblCheckbox\">\n <Checkbox\n checked={shareInformationAccepted}\n onChange={(e) => setShareInformationAccepted(e.target.checked)}\n id=\"ack\"\n className=\"EventDetail-Checkbox\"\n />\n </label>\n </Box>\n <Box>\n <FormLeyend size=\"10px\">\n I would like Splunk to share my contact information with the sponsors and\n co-presenters identified on this page so they can contact me by email, post or phone\n about their news, information, events and offers, subject to privacy policies\n available on their websites.\n </FormLeyend>\n <FormLeyend size=\"10px\">\n <LinkedText onClick={() => setAckVisible(true)}>\n Check Terms and conditions.\n </LinkedText>\n </FormLeyend>\n </Box>\n </Flex>\n <Flex mt=\"6px\" alignItems=\"center\" justifyContent=\"space-between\" width={1}>\n <Box style={{ position: 'relative' }} width=\"285px\">\n <Flex width={1} mt=\"6px\">\n <Input\n value={confirmationNumber}\n onChange={(e) => setConfirmationNumber(e.target.value)}\n placeholder=\"Enter your Confirmation Number\"\n height=\"25px\"\n />\n <Flex data-tip data-for=\"confirmationNumber\" ml=\"4px\">\n <QuestionCircleIcon />\n </Flex>\n </Flex>\n <Tooltip id=\"confirmationNumber\">\n You must enter a confimation number to continue. You should have got this number by\n email.\n </Tooltip>\n </Box>\n <Box mt=\"10px\">\n <Button\n id=\"EventDetails-btnEnroll\"\n onClick={() => onEnrollEvent(shareInformationAccepted, confirmationNumber)}\n disabled={!confirmationNumber.match(CONFIRMATION_NUMBER_REGEXP) || disableEnroll}\n >\n {delivery === EVENT_DELIVERY.ON_DEMAND ? 'PLAY NOW' : 'ENROLL NOW'}\n </Button>\n </Box>\n </Flex>\n </Box>\n {ackVisible && (\n <Flex>\n <Modal onBackgroundClick={() => setAckVisible(false)} margin=\"5% auto\">\n <Form>\n <Box maxWidth=\"600px\">\n <Flex justifyContent=\"center\" width=\"600px\" py=\"15px\" backgroundColor=\"#2C2C2C\">\n <FormLeyend size=\"20px\">Splunk Terms and Conditions</FormLeyend>\n </Flex>\n <ScrolleableContainer>\n <Flex py=\"12px\" px=\"8px\" width={1}>\n <TermsAndConditions />\n </Flex>\n </ScrolleableContainer>\n </Box>\n </Form>\n </Modal>\n </Flex>\n )}\n </>\n );\n }\n\n return (\n <>\n <Box mt=\"10px\" my=\"20px\">\n <Flex>\n <Box mr=\"6px\" className=\"EventDetail-FlexCheckbox\" minWidth=\"auto\">\n <label className=\"EventDetail-LblCheckbox\">\n <Checkbox\n checked={shareInformationAccepted}\n onChange={(e) => setShareInformationAccepted(e.target.checked)}\n id=\"ack\"\n className=\"EventDetail-Checkbox\"\n />\n </label>\n </Box>\n <Box>\n <FormLeyend size=\"10px\">\n I would like Splunk to share my contact information with the sponsors and\n co-presenters identified on this page so they can contact me by email, post or phone\n about their news, information, events and offers, subject to privacy policies\n available on their websites.\n </FormLeyend>\n <FormLeyend size=\"10px\">\n <LinkedText onClick={() => setAckVisible(true)}>\n Check Terms and conditions.\n </LinkedText>\n </FormLeyend>\n </Box>\n </Flex>\n <Box mt=\"6px\" ml=\"auto\" width=\"150px\">\n <Button\n id=\"EventDetails-btnEnroll\"\n onClick={() => onEnrollEvent(shareInformationAccepted)}\n disabled={disableEnroll}\n >\n {delivery === EVENT_DELIVERY.ON_DEMAND ? 'PLAY NOW' : 'ENROLL NOW'}\n </Button>\n </Box>\n </Box>\n {ackVisible && (\n <Flex>\n <Modal onBackgroundClick={() => setAckVisible(false)} margin=\"5% auto\">\n <Form>\n <Box maxWidth=\"600px\">\n <Flex justifyContent=\"center\" width=\"600px\" py=\"15px\" backgroundColor=\"#2C2C2C\">\n <FormLeyend size=\"20px\">Splunk Terms and Conditions</FormLeyend>\n </Flex>\n <ScrolleableContainer>\n <Flex py=\"12px\" px=\"8px\" width={1}>\n <TermsAndConditions />\n </Flex>\n </ScrolleableContainer>\n </Box>\n </Form>\n </Modal>\n </Flex>\n )}\n </>\n );\n};\n\nconst EnterEventComponent = ({\n eventId,\n eventType,\n eventDelivery,\n participantJoinDate,\n eventDuration,\n onPlayAgainEvent,\n loading = false,\n}) => {\n const history = useHistory();\n const validOnDemand = isOnDemandEventInsidePlayWindow(participantJoinDate, eventDuration);\n\n const onClick = () => {\n if (eventType === EVENT_TYPE.GAME) {\n if (eventDelivery === EVENT_DELIVERY.ON_DEMAND) {\n if (validOnDemand) {\n history.push(`/event/${eventId}`);\n return;\n }\n onPlayAgainEvent();\n return;\n }\n history.push(`/event/${eventId}`);\n return;\n }\n history.push(`/workshop/${eventId}`);\n };\n\n const label =\n eventDelivery === EVENT_DELIVERY.ON_DEMAND\n ? validOnDemand\n ? 'CONTINUE'\n : 'PLAY AGAIN'\n : 'ENTER';\n\n return (\n <Box ml=\"auto\" mb=\"20px\" width=\"110px\">\n <Button onClick={onClick} id=\"EventDetails-btnEnter\" disabled={loading}>\n {label}\n </Button>\n </Box>\n );\n};\n\nexport default function EventDetails({\n id,\n imageURL,\n type,\n eventType,\n name,\n description,\n confirmationNumberRequired,\n startDate,\n delivery,\n registrationStatus,\n registrationOpenDate,\n registrationClosedDate,\n inviteCode,\n activeStartDate,\n activeEndDate,\n}) {\n const [details, setDetails] = useState(null);\n const [userInEvent, setUserInEvent] = useState(null);\n const [loadingDetails, setLoadingDetails] = useState(true);\n const [enrollingEvent, setEnrollingEvent] = useState(false);\n const [enrollForbiden, setEnrollForbidden] = useState(false);\n const [closedRegistrationMessage, setClosedRegistrationMessage] = useState(null);\n const { user, setEvent, event } = useAppContext();\n const history = useHistory();\n const isEventRunning =\n eventType === EVENT_TYPE.WORKSHOP\n ? isTodayBetween(new Date(activeStartDate), new Date(activeEndDate))\n : delivery === EVENT_DELIVERY.NORMAL\n ? isNormalEventInsideActiveWindow(\n activeStartDate,\n activeEndDate,\n registrationOpenDate,\n registrationClosedDate,\n registrationStatus\n )\n : // on-demand event gets active style\n true;\n\n useEffect(() => {\n const getDetails = async () => {\n setLoadingDetails(true);\n try {\n if (eventType === EVENT_TYPE.GAME) {\n const rq = await API.get('events', `/events/${id}`);\n setEvent(rq.event);\n setUserInEvent(rq.participant);\n } else {\n const rq = await API.get('workshops', `/workshops/${id}`);\n setEvent(rq.workshop);\n setDetails(rq.workshop.content);\n setUserInEvent(rq.participant);\n }\n } catch (e) {\n if (e.response && e.response.status === 403) {\n setEnrollForbidden(true);\n }\n onError(e);\n } finally {\n setLoadingDetails(false);\n }\n };\n const checkEventRegistration = () => {\n if (eventType === EVENT_TYPE.GAME && delivery !== EVENT_DELIVERY.ON_DEMAND) {\n if (!registrationStatus) {\n setClosedRegistrationMessage('Registration for this event is not open yet.');\n } else if (registrationStatus === 'CLOSED') {\n setClosedRegistrationMessage('Registration for this event has been closed.');\n } else if (!isTodayAfterThan(registrationOpenDate)) {\n setClosedRegistrationMessage('Registration for this event has not started yet.');\n } else if (isTodayAfterThan(registrationClosedDate) || !isEventRunning) {\n setClosedRegistrationMessage('Registration for this event has ended.');\n }\n }\n };\n if (event && event.participant) {\n setUserInEvent(event.participant);\n setLoadingDetails(false);\n } else {\n getDetails();\n }\n checkEventRegistration();\n return () => API.abortCurrentRequest();\n }, []);\n\n const onEnrollEvent = async (acceptShareInformation = false, confirmationNumber) => {\n setEnrollingEvent(true);\n try {\n if (eventType === EVENT_TYPE.GAME) {\n await API.post('events', `/events/${id}/join`, {\n body: {\n name: user.dynamoUser.displayName,\n email: user.attributes.email,\n confirmationNumber,\n inviteCodeId: inviteCode,\n acceptShareInformation,\n },\n });\n // an event fetch is needed in order to refresh participant information of the join\n if (delivery === EVENT_DELIVERY.ON_DEMAND) {\n const rq = await API.get('events', `/events/${id}`);\n setEvent({ ...rq.event, participant: rq.participant });\n }\n history.push(`/event/${id}`);\n } else {\n await API.post('workshops', `/workshops/${id}/join`, {\n body: {\n name: user.dynamoUser.displayName,\n email: user.attributes.email,\n inviteCodeId: inviteCode,\n acceptShareInformation,\n },\n });\n history.push(`/workshop/${id}`);\n }\n } catch (e) {\n setEnrollingEvent(false);\n onError(e);\n }\n };\n\n if (!id) {\n history.push('/');\n return null;\n }\n const showDate = delivery === EVENT_DELIVERY.NORMAL;\n const imgSize = 'large';\n const imageSrc = getImageURLSized(imageURL, imgSize);\n const isRestrictedEvent = event && event.accessType === EVENT_ACCESS_TYPE.RESTRICTED;\n const userEnrolled = userInEvent && userInEvent.enrolled;\n\n return (\n <Container maxWidth=\"766px\" flexDirection=\"column\">\n <Image\n src={imageSrc}\n alt=\"Event detail image\"\n onError={(e) => {\n e.target.src = getNoImageUrl(type, imgSize);\n }}\n />\n <CardBody\n active={isEventRunning}\n alignItems=\"start\"\n flexDirection=\"column\"\n height=\"100%\"\n restricted={isRestrictedEvent}\n >\n <Flex width={1} alignItems=\"center\">\n <CardIconContainer>\n {eventType === EVENT_TYPE.WORKSHOP ? <WorkshopIcon /> : <GameIcon />}\n </CardIconContainer>\n {isRestrictedEvent && (\n <>\n <Flex data-tip data-for=\"inviteOnlyIcon\" pl=\"8px\" pr=\"4px\">\n <InviteOnlyIcon />\n </Flex>\n <Tooltip id=\"inviteOnlyIcon\">INVITE ONLY</Tooltip>\n </>\n )}\n <BossLabel type={type} ml=\"6px\" />\n {showDate && startDate && (\n <Flex ml=\"auto\">\n <CardDate date={startDate} />\n </Flex>\n )}\n </Flex>\n {isRestrictedEvent && (\n <Flex\n style={{\n width: '100%',\n flexDirection: 'row',\n justifyContent: 'flex-end',\n marginLeft: '22px',\n marginLop: '1px',\n }}\n >\n <EventLabel style={{ position: 'absolute', marginTop: '-67px' }}>\n Private Event\n </EventLabel>\n </Flex>\n )}\n <CardTitle active={isEventRunning} restricted={isRestrictedEvent}>\n {name}\n </CardTitle>\n <CardDescription>\n <Markdown md={description} />\n </CardDescription>\n {loadingDetails ? (\n <Flex ml=\"auto\" mb=\"20px\">\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton width=\"100px\" height=\"30px\" />\n </SkeletonTheme>\n </Flex>\n ) : (\n !enrollForbiden &&\n (userEnrolled ? (\n <EnterEventComponent\n eventDelivery={delivery}\n participantJoinDate={userInEvent.joinDate}\n eventDuration={event.duration}\n eventId={id}\n eventType={eventType}\n onPlayAgainEvent={onEnrollEvent}\n loading={enrollingEvent}\n />\n ) : closedRegistrationMessage ? (\n <Flex width={1} mt=\"16px\" style={DEFAULT_BOX_BORDER_STYLE}>\n <Text\n style={{\n fontWeight: '400',\n fontSize: '18px',\n paddingTop: '20px',\n paddingBottom: '20px',\n color: '#E5C07B',\n }}\n className=\"EventDetails-RegistrationMessage\"\n >\n {closedRegistrationMessage}\n </Text>\n </Flex>\n ) : (\n <EnrollComponent\n onEnrollEvent={onEnrollEvent}\n disableEnroll={enrollingEvent || loadingDetails || !isEventRunning}\n requireConfirmationNumber={confirmationNumberRequired}\n termsUrl={event.terms}\n delivery={delivery}\n />\n ))\n )}\n {details && (\n <Box mt=\"66px\" width={1}>\n <Tabs current={0} labels={['SUMMARY']} onTabChange={() => {}} />\n <WorkshopContent content={details.workshop} />\n </Box>\n )}\n </CardBody>\n </Container>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\nimport { CurveArrow } from './icons';\n\nexport default function FloaitngMessage({\n top = 0,\n left = 0,\n active = false,\n direction = 'top',\n children,\n}) {\n const colors = useTheme().color.text.floatingMessage;\n const color = active ? colors.active : colors.inactive;\n\n return (\n <div\n style={{\n color,\n position: 'absolute',\n top,\n left,\n ...(direction === 'left' && { display: 'flex' }),\n }}\n >\n <CurveArrow direction={direction} color={color} />\n {children}\n </div>\n );\n}\n","import React, { useMemo, useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport Media from 'react-media';\nimport { Box, Flex } from 'reflexbox';\nimport get from 'lodash/get';\nimport { RegularText, StyledText, BotsIcon, BooIcon, QUESTION_CARD_DEFAULT_WIDTH, Markdown } from 'boss-ui';\nimport Api from '../../api';\nimport { onError } from '../../libs/error-lib';\nimport Card from '../cards/Card';\nimport CardSkeleton from '../cards/CardSkeleton';\nimport CollapsableSection from '../CollapsableSection';\nimport ErrorBoundary from '../ErrorBoundary';\nimport FloatingMessage from '../FloatingMessage';\nimport { BOTS_TYPE, DEFAULT_BOX_BORDER_STYLE, EVENT_WORDING } from '../../libs/constants';\nimport { getEventShortName } from '../../libs/event-lib';\n\nconst addScenarioIndex = (scenarios = []) => {\n if (!scenarios.length) {\n return [];\n }\n return scenarios.map((s, idx) => ({\n ...s,\n idx: idx + 1,\n }));\n};\n\nconst getGridConfiguration = (matches) => {\n if (matches.s) {\n return '1fr';\n }\n if (matches.m) {\n return '1fr 1fr';\n }\n if (matches.l) {\n return '1fr 1fr 1fr';\n }\n if (matches.xl) {\n return '1fr 1fr 1fr 1fr';\n }\n return `${QUESTION_CARD_DEFAULT_WIDTH} ${QUESTION_CARD_DEFAULT_WIDTH} ${QUESTION_CARD_DEFAULT_WIDTH}`;\n};\n\nconst API = new Api();\n\nexport default function EventHome({\n eventScenarios,\n eventType,\n eventId,\n isOnDemand,\n isUserWithOutTeam,\n eventDescription,\n eventRules,\n appType,\n}) {\n const [scenarios, setScenarios] = useState([]);\n const [loadingScenarios, setLoadingScenarios] = useState(true);\n const history = useHistory();\n const scenarioLabel = useMemo(() => EVENT_WORDING.SCENARIO[eventType], [eventType]);\n\n useEffect(() => {\n // keep this in order to replace the call when scenarios have his own endpoint\n const getEventScenarios = async () => {\n setLoadingScenarios(true);\n try {\n const rq = await API.get('events', `/events/${eventId}`);\n const scenariosWithIdx = addScenarioIndex(get(rq, 'event.scenarios'));\n setScenarios(scenariosWithIdx);\n } catch (e) {\n onError(e);\n } finally {\n setLoadingScenarios(false);\n }\n };\n\n if (!eventScenarios.length) {\n getEventScenarios();\n } else {\n const scenariosWithIdx = addScenarioIndex(eventScenarios);\n setScenarios(scenariosWithIdx);\n setLoadingScenarios(false);\n }\n }, [eventScenarios]);\n\n const eventIcon = useMemo(\n () => (eventType === BOTS_TYPE.SOC ? <BotsIcon size={200} /> : <BooIcon size={130} />),\n [eventType]\n );\n\n return (\n <Media\n queries={{\n s: '(max-width: 1000px)',\n m: '(max-width: 1290px)',\n l: '(max-width: 1540px)',\n xl: '(min-width: 1880px)',\n }}\n >\n {(matches) => (\n <>\n {isUserWithOutTeam && !isOnDemand && !matches.s && (\n <FloatingMessage top=\"120px\" left=\"40px\" active>\n <p>Start by creating your team!</p>\n <p>Or join an existing one.</p>\n </FloatingMessage>\n )}\n <Box mx={matches.s ? '20px' : '10%'} mt={matches.s ? '20px' : '40px'} mb=\"5%\">\n <Flex mx={matches.s ? 0 : '20%'} my=\"22px\" style={{ position: 'relative' }}>\n {!matches.s && (\n <Box\n style={{\n position: 'absolute',\n left: '-66px',\n top: '80px',\n }}\n >\n {eventIcon}\n </Box>\n )}\n <Box>\n <StyledText light size=\"28px\">\n Welcome to {getEventShortName(eventType)}\n </StyledText>\n <Box\n style={DEFAULT_BOX_BORDER_STYLE}\n mt=\"16px\"\n p={matches.s ? '10px' : '40px'}\n pl={matches.s ? '15px' : '90px'}\n pr={matches.s ? '15px' : '60px'}\n textAlign=\"left\"\n >\n <RegularText light mediumWeight fontSize=\"16px\">\n <Markdown md={eventDescription} light mediumWeight fontSize=\"16px\" />\n </RegularText>\n <Flex mt=\"30px\" flexDirection=\"column\">\n {eventRules && (\n <Flex ml=\"auto\">\n <CollapsableSection\n justify=\"flex-end\"\n expanded={false}\n showLabel=\"Show Rules\"\n hideLabel=\"Hide Rules\"\n >\n <RegularText fontSize=\"16px\" color=\"#A5D6A7\">\n RULES\n </RegularText>\n <Markdown md={eventRules} />\n {!matches.s && (\n <Box\n style={{\n position: 'absolute',\n right: '-66px',\n bottom: '40px',\n }}\n >\n <img\n src={`${process.env.PUBLIC_URL}/alice_workshops_mobile@2x.png`}\n alt=\"alice\"\n height=\"200px\"\n />\n </Box>\n )}\n </CollapsableSection>\n </Flex>\n )}\n </Flex>\n </Box>\n </Box>\n </Flex>\n <Flex mt=\"60px\" mb=\"22px\" ml={matches.s ? 0 : '52px'}>\n <StyledText light size=\"28px\">\n {scenarioLabel} {!loadingScenarios && `[${scenarios.length}]`}\n </StyledText>\n </Flex>\n <Flex flexDirection=\"column\" width={1}>\n <Flex justifyContent=\"center\">\n {loadingScenarios ? (\n <CardSkeleton />\n ) : (\n <Flex\n style={{\n display: 'grid',\n gridTemplateColumns: getGridConfiguration(matches),\n gridGap: '22px',\n gridAutoFlow: 'dense',\n }}\n className=\"EventPlayer-FlexScenarios\"\n >\n <ErrorBoundary ignoreMessage>\n {scenarios.map((e, idx) => {\n const key = get(e, 'id', idx);\n return (\n <Card\n {...e}\n key={key}\n onCardClick={() =>\n history.push(`/event/${eventId}/scenario/${e.scenarioId}`)\n }\n isScenario\n scenarioLabel={scenarioLabel}\n scenarioIdx={idx + 1}\n type={appType}\n />\n );\n })}\n ;\n </ErrorBoundary>\n </Flex>\n )}\n </Flex>\n </Flex>\n </Box>\n </>\n )}\n </Media>\n );\n}\n","import React from 'react';\nimport isEmpty from 'lodash/isEmpty';\nimport { Menu } from 'boss-ui';\nimport { useAppContext } from '../../libs/context-lib';\nimport { EVENT_WORDING, EVENT_DELIVERY } from '../../libs/constants';\n\nconst calculateCompoundTeamPath = (location, id) => {\n const splittedPathName = location && location.pathname.split('/');\n if (splittedPathName.includes('team')) {\n return location.pathname;\n }\n return `/event/${id}/team/join`;\n};\n\nexport default function EventMenu({ onLeaveEvent = () => {}, onShowCredits = () => {}, hideScoring = false }) {\n const { event, user } = useAppContext();\n const scenarioLabel = EVENT_WORDING.SCENARIO[event.type];\n const userWithoutTeam = isEmpty(user.userInTeam);\n const isOnDemandEvent = event.delivery === EVENT_DELIVERY.ON_DEMAND;\n\n const getTeamMenu = (id) =>\n userWithoutTeam\n ? {\n path: (location) => calculateCompoundTeamPath(location, id),\n }\n : { path: `/event/${id}/team` };\n\n const getMenuItems = () => {\n const items = [\n {\n path: `/event/${event.eventId}`,\n label: scenarioLabel,\n id: 'menuScenario',\n exact: true,\n },\n ];\n // ON DEMAND EVENTS DO NOT HAVE TEAMS\n if (!isOnDemandEvent) {\n items.push({\n rootPath: `/event/${event.eventId}/team`,\n label: 'TEAM',\n id: 'menuTeam',\n ...getTeamMenu(event.eventId),\n });\n }\n\n // ON DEMAND EVENTS DO NOT HAVE SCORING SECTION\n if (!hideScoring && event.isEventStarted && !isOnDemandEvent) {\n items.push({\n label: 'SCORING',\n id: 'menuScoring',\n rootPath: `/event/${event.eventId}/scoring`,\n subMenu: [\n {\n path: `/event/${event.eventId}/scoring/top10`,\n label: 'Top 10 teams',\n id: 'subMenuTop10',\n },\n {\n path: `/event/${event.eventId}/scoring/top`,\n label: 'All teams score',\n id: 'subMenuAllScore',\n },\n {\n path: `/event/${event.eventId}/scoring/scoreLine`,\n label: 'Score timeline [Top 5]',\n id: 'subMenuTop5',\n },\n ],\n });\n }\n return items;\n };\n\n const getAuxiliaryItems = () => {\n const items = [];\n if (event.isEventRunning || !event.isEventStarted) {\n items.push({\n label: 'BACK TO HOME',\n id: 'leaveEventLinkedText',\n onClick: onLeaveEvent,\n dangerTheme: true,\n });\n }\n if (event.eventCreditsMd) {\n items.push({\n label: 'CREDITS',\n id: 'creditsLinkedText',\n onClick: onShowCredits,\n });\n }\n return items;\n };\n\n return <Menu menuItems={getMenuItems()} auxiliaryItems={getAuxiliaryItems()} />;\n}\n","import styled from 'styled-components';\n\nconst FooterContainer = styled.div`\n text-align: center;\n margin-top: ${props => props.theme.margin.l};\n margin-bottom: ${props => props.theme.margin.s};\n font-family: ${props => props.theme.font.family};\n font-size: 14px;\n color: ${props => props.theme.color.text.regular.color};\n line-height: normal;\n`;\nFooterContainer.displayName = 'Footer-FooterContainer';\n\nconst Link = styled.a`\n color: ${props => props.theme.color.text.regular.color};\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n`;\nLink.displayName = 'Footer-Link';\n\nconst UnorderedList = styled.ul`\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n @media (width >= 600px) {\n & > li {\n display: inline-block;\n border-right: 1px solid ${props => props.theme.color.text.regular.color};\n margin-right: 0.5em;\n padding-right: 0.5em;\n }\n\n & > li:last-child {\n border-right: none;\n margin-right: 0;\n padding-right: 0;\n }\n }\n`;\nUnorderedList.displayName = 'Footer-UnorderedList';\n\nconst CopyrightText = styled.span`\n color: ${props => props.theme.color.text.medium.color};\n`;\nCopyrightText.displayName = 'Footer-CopyrightText';\n\nexport { Link, FooterContainer, UnorderedList, CopyrightText };","import { FooterContainer, Link, UnorderedList, CopyrightText } from './styles';\nimport { getCurrentYear } from '../../libs/dates-lib';\n\nconst FOOTER_LINKS = [\n { title: 'Legal', url: 'https://www.splunk.com/en_us/legal.html' },\n { title: 'Privacy', url: 'https://www.splunk.com/view/SP-CAAAAAG' },\n {\n title: 'Splunk Licensing Terms',\n url: 'https://www.splunk.com/en_us/legal/splunk-terms-overview.html'\n },\n { title: 'Website Terms of Use', url: 'https://www.splunk.com/view/SP-CAAAAAH' }\n];\nconst COPYRIGHT_UNICODE = '\\u00A9';\n\nfunction generateCopyrightText() {\n return `${COPYRIGHT_UNICODE} 2005-${getCurrentYear()} Splunk Inc. All rights reserved.`;\n}\n\nexport default function Footer() {\n const links = FOOTER_LINKS.map(link =>\n <li>\n <Link target=\"_blank\" href={link.url}>{link.title}</Link>\n </li>\n );\n return (<FooterContainer>\n <nav>\n <UnorderedList>{links}</UnorderedList>\n </nav>\n <CopyrightText>{generateCopyrightText()}</CopyrightText>\n </FooterContainer>\n );\n}","import React, { useState, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport { Input, TextArea, CrossIcon as RemoveIcon, SearchIcon } from 'boss-ui';\nimport { DEFAULT_FORM_INPUT_TYPE, INPUT_FORM_TYPE_TEXTAREA } from '../../libs/constants';\n\nconst InputIcon = styled.div`\n position: absolute;\n margin-top: 2.5px;\n margin-left: 5px;\n ${(props) =>\n props.remove &&\n css`\n margin-top: 0px;\n margin-right: 5px;\n margin-left: auto;\n position: relative;\n top: -34px;\n cursor: pointer;\n `};\n`;\n\nconst InputValidation = styled.div`\n color: ${(props) =>\n props.valid ? props.theme.color.input.success.border : props.theme.color.input.error.border};\n font-size: 16px;\n opacity: 92%;\n`;\n\nfunction FormInput(props) {\n const {\n search,\n remove,\n available,\n validMessage,\n unavailableMessage,\n validate,\n validating,\n pattern,\n invalidPatternMessage,\n onChange,\n value,\n styleBox,\n inputType = DEFAULT_FORM_INPUT_TYPE,\n } = props;\n const [patternFulfilled, setPatternFulfilled] = useState(true);\n\n const inputChange = (e) => {\n onChange(e);\n };\n\n const getMessage = () => {\n if (!patternFulfilled) {\n return invalidPatternMessage;\n }\n if (validating) {\n return null;\n }\n if (!available) {\n return unavailableMessage;\n }\n return validMessage;\n };\n\n useEffect(() => {\n if (pattern && value !== null && value !== undefined) {\n if (value.toString().match(pattern)) {\n setPatternFulfilled(true);\n } else {\n setPatternFulfilled(false);\n }\n }\n }, [value]);\n\n return (\n <Box style={styleBox} width={1}>\n <Flex my=\"6px\" alignItems=\"center\" width={1}>\n {search && (\n <InputIcon>\n <SearchIcon />\n </InputIcon>\n )}\n {inputType === DEFAULT_FORM_INPUT_TYPE && (\n <Input\n {...props}\n valid={available && patternFulfilled}\n onChange={inputChange}\n height=\"32px\"\n />\n )}\n {inputType === INPUT_FORM_TYPE_TEXTAREA && (\n <TextArea\n {...props}\n valid={available && patternFulfilled}\n onChange={inputChange}\n height=\"32px\"\n />\n )}\n </Flex>\n {validate && (\n <Flex minHeight=\"24px\">\n <InputValidation valid={available && patternFulfilled}>{getMessage()}</InputValidation>\n </Flex>\n )}\n {remove && (\n <Flex height=\"0px\">\n <InputIcon remove onClick={remove}>\n <RemoveIcon size={16} />\n </InputIcon>\n </Flex>\n )}\n </Box>\n );\n}\n\nexport default FormInput;\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { WorkshopIcon, InviteOnlyIcon } from './icons';\nimport Api from '../api';\nimport {\n RegularText,\n Table,\n TableBody,\n TableData,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n GameIcon,\n} from 'boss-ui';\nimport BossLabel from './BossLabel';\nimport WorkshopContent from './workshops/WorkshopContent';\nimport WorkshopVideoProgress from './workshops/WorkshopVideoProgress';\nimport WorkshopProgressLabel from './workshops/WorkshopProgressLabel';\nimport CardDate from './cards/CardDate';\nimport CardDescription from './cards/CardDescription';\nimport CardIconContainer from './cards/CardIconContainer';\nimport CardTitle from './cards/CardTitle';\nimport EventLabel from './EventLabel';\nimport { onError } from '../libs/error-lib';\nimport { formatMinutes } from '../libs/dates-lib';\nimport { EVENT_TYPE, EVENT_DELIVERY, SKELTELON_STYLE } from '../libs/constants';\n\nconst BodyContainer = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n font-family: 'Roboto Mono';\n font-weight: normal;\n border: 1px solid #a088a4;\n width: 100%;\n`;\nBodyContainer.displayName = 'HistoryDetails-BodyContainer';\n\nconst transformEventStats = (stats, scenarios = [], scenariosScores = {}, isOnDemand = false) => {\n if (!stats || isEmpty(stats)) {\n return [];\n }\n const transformedStats = [\n {\n id: 0,\n scenario: 'Overall',\n totalScore: stats.total || 0,\n baseScore: stats.base || 0,\n bonusScore: stats.bonus || 0,\n penalty: -stats.penalty || 0,\n average: 0,\n median: 0,\n },\n ];\n // on-demand event has not scenarios\n if (stats.scenarios) {\n scenarios.forEach((s, id) => {\n const scenarioStat = stats.scenarios[s.scenarioId];\n if (!isOnDemand && scenariosScores && scenariosScores[s.scenarioId]) {\n const average =\n (scenariosScores[s.scenarioId].total || scenariosScores[s.scenarioId].total === 0) &&\n scenariosScores[s.scenarioId].count\n ? Number(\n scenariosScores[s.scenarioId].total / scenariosScores[s.scenarioId].count\n ).toFixed(0)\n : 0;\n const median =\n (scenariosScores[s.scenarioId].max || scenariosScores[s.scenarioId].max === 0) &&\n (scenariosScores[s.scenarioId].min || scenariosScores[s.scenarioId].min === 0)\n ? Number(\n (scenariosScores[s.scenarioId].max + scenariosScores[s.scenarioId].min) / 2\n ).toFixed(0)\n : 0;\n transformedStats[0].average += Number(average);\n transformedStats[0].median += Number(median);\n transformedStats.push({\n id: id + 1,\n scenario: s.title,\n totalScore: get(scenarioStat, 'total', 0),\n baseScore: get(scenarioStat, 'base', 0),\n bonusScore: get(scenarioStat, 'bonus', 0),\n penalty: -get(scenarioStat, 'penalty', 0),\n average: Number(average),\n median: Number(median),\n });\n } else if (isOnDemand) {\n transformedStats.push({\n id: id + 1,\n scenario: s.title,\n totalScore: get(scenarioStat, 'total', 0),\n baseScore: get(scenarioStat, 'base', 0),\n bonusScore: get(scenarioStat, 'bonus', 0),\n penalty: -get(scenarioStat, 'penalty', 0),\n average: 0,\n median: 0,\n });\n }\n });\n }\n if (transformedStats[0].average === 0) {\n transformedStats[0].average = '-';\n }\n if (transformedStats[0].median === 0) {\n transformedStats[0].median = '-';\n }\n return transformedStats;\n};\n\nconst API = new Api();\n\nexport default function HistoryDetails({\n id,\n type,\n eventType,\n name,\n description,\n startDate,\n delivery,\n isRestrictedEvent = false,\n duration = 0,\n scenarios = [],\n scenariosScores = {},\n globalTeamsCount,\n}) {\n const [loadingData, setLoadingData] = useState(false);\n const [scenarioData, setScenarioData] = useState([]);\n const [stats, setStats] = useState({});\n const [workshopContentWithStats, setWorkshopContentWithStats] = useState([]);\n const [userTeamName, setUserTeamName] = useState('');\n const history = useHistory();\n const showDate = delivery === EVENT_DELIVERY.NORMAL;\n const isOnDemand = delivery === EVENT_DELIVERY.ON_DEMAND;\n\n useEffect(() => {\n setLoadingData(true);\n const getScenarioDetails = async () => {\n try {\n if (eventType === EVENT_TYPE.GAME) {\n const statsRq = await API.get('users', `/user/events/${id}/stats`);\n setScenarioData(\n transformEventStats(statsRq.stats, scenarios, scenariosScores, isOnDemand)\n );\n if (!isOnDemand) {\n setUserTeamName(get(statsRq, 'stats.team.name'));\n }\n setStats(statsRq.stats);\n } else {\n const rq = await API.get('users', `/user/workshops/${id}`);\n setStats(rq.stats);\n setWorkshopContentWithStats(get(rq, 'workshop.content.workshop', []));\n }\n } catch (e) {\n onError(e);\n history.push('/history');\n } finally {\n setLoadingData(false);\n }\n };\n getScenarioDetails();\n }, []);\n\n if (!id) {\n history.push('/');\n return null;\n }\n\n return (\n <BodyContainer alignItems=\"start\" maxWidth=\"924px\" flexDirection=\"column\" height=\"100%\">\n <Flex width={1} alignItems=\"center\">\n <CardIconContainer>\n {eventType === EVENT_TYPE.WORKSHOP ? <WorkshopIcon /> : <GameIcon />}\n </CardIconContainer>\n {isRestrictedEvent && (\n <>\n <Flex data-tip data-for=\"inviteOnlyIcon\" pl=\"8px\" pr=\"4px\">\n <InviteOnlyIcon />\n </Flex>\n <Tooltip id=\"inviteOnlyIcon\">INVITE ONLY</Tooltip>\n </>\n )}\n <BossLabel type={type} ml=\"6px\" />\n {eventType === EVENT_TYPE.WORKSHOP ? (\n <Flex ml=\"auto\">\n <WorkshopProgressLabel stats={stats} style={{ position: 'static' }} forceProgress />\n </Flex>\n ) : (\n <>\n {showDate && startDate && (\n <Flex ml=\"auto\">\n <CardDate date={startDate} />\n </Flex>\n )}\n </>\n )}\n </Flex>\n {isRestrictedEvent && (\n <Flex\n style={{\n width: '100%',\n flexDirection: 'row',\n justifyContent: 'flex-end',\n marginLeft: '22px',\n marginLop: '1px',\n }}\n >\n <EventLabel style={{ position: 'absolute', marginTop: '-67px' }}>\n Private Event\n </EventLabel>\n </Flex>\n )}\n <CardTitle style={{ color: '#A088A4' }}>{name}</CardTitle>\n <CardDescription style={{ marginBottom: '20px' }}>{description}</CardDescription>\n {loadingData ? (\n <Box style={{ width: '100%' }}>\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Skeleton />\n </SkeletonTheme>\n </Box>\n ) : (\n <>\n {eventType === EVENT_TYPE.WORKSHOP ? (\n <Flex\n width={1}\n style={{ wordBreak: 'break-all' }}\n flexDirection=\"column\"\n className=\"HistoryDetails-WorkshopContainer\"\n >\n <WorkshopVideoProgress stats={stats} style={{ width: '250px' }} />\n <WorkshopContent content={workshopContentWithStats} />\n </Flex>\n ) : (\n <>\n {isOnDemand ? (\n <Flex color=\"#81A2BE\" className=\"HistoryDetails-Duration\">\n Event Duration: {formatMinutes(duration).hour}h {formatMinutes(duration).minutes}m\n </Flex>\n ) : (\n <>\n {stats && stats.rank && globalTeamsCount && (\n <Flex color=\"#A5D6A7\" pb=\"8px\">\n Place: {stats.rank}/{globalTeamsCount}\n </Flex>\n )}\n {userTeamName && (\n <Flex color=\"#D0D0D0\" pb=\"8px\">\n Team: {userTeamName}\n </Flex>\n )}\n </>\n )}\n {scenarioData.length ? (\n <Table style={{ marginTop: '40px' }}>\n <TableHead>\n <TableRow style={{ height: '60px' }}>\n <TableHeader\n style={{ paddingLeft: '20px', borderRight: '1px solid #1D1D1D' }}\n >\n Scenario\n </TableHeader>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Total Score\n </TableHeader>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Base Score\n </TableHeader>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Bonus Score\n </TableHeader>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Penalty\n </TableHeader>\n {!isOnDemand && (\n <>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Average\n </TableHeader>\n <TableHeader\n width=\"60px\"\n style={{ paddingLeft: '10px', borderRight: '1px solid #1D1D1D' }}\n >\n Median\n </TableHeader>\n </>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {scenarioData.map((row, idx) => {\n const key = get(row, 'id', idx);\n return (\n <TableRow\n key={key}\n style={\n key === 0\n ? { height: '50px', border: '1px solid #A5D6A7', color: '#A5D6A7' }\n : { height: '50px' }\n }\n >\n <TableData\n style={{ paddingLeft: '20px', borderRight: '1px solid #2C2C2C' }}\n >\n {row.scenario}\n </TableData>\n <TableData\n style={{ paddingLeft: '10px', borderRight: '1px solid #2C2C2C' }}\n >\n {row.totalScore}\n </TableData>\n <TableData\n style={{ paddingLeft: '10px', borderRight: '1px solid #2C2C2C' }}\n >\n {row.baseScore}\n </TableData>\n <TableData\n style={{ paddingLeft: '10px', borderRight: '1px solid #2C2C2C' }}\n >\n {row.bonusScore}\n </TableData>\n <TableData\n style={\n isOnDemand\n ? { paddingLeft: '10px' }\n : { paddingLeft: '10px', borderRight: '1px solid #2C2C2C' }\n }\n >\n {row.penalty}\n </TableData>\n {!isOnDemand && (\n <>\n <TableData\n style={{ paddingLeft: '10px', borderRight: '1px solid #2C2C2C' }}\n >\n {row.average}\n </TableData>\n <TableData style={{ paddingLeft: '10px' }}>{row.median}</TableData>\n </>\n )}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n ) : (\n <Flex\n mt=\"20px\"\n width={1}\n p=\"8px\"\n style={{\n border: '1px solid #898989',\n }}\n >\n <RegularText>No statistical data for this event</RegularText>\n </Flex>\n )}\n </>\n )}\n </>\n )}\n </BodyContainer>\n );\n}\n","import { Flex } from 'reflexbox';\nimport styled from 'styled-components';\n\nconst HovereableFlex = styled(Flex)`\n &:hover {\n cursor: ${(props) => (props.disable ? 'not-allowed' : 'pointer')};\n }\n`;\n\nexport default HovereableFlex;\n","import React, { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { Tooltip, GameIcon } from 'boss-ui';\nimport { InviteOnlyIcon } from '../icons';\nimport { getImageURLSized } from '../../libs/utils-lib';\nimport CardDescription from './CardDescription';\nimport CardIconContainer from './CardIconContainer';\nimport CardTitle from './CardTitle';\nimport CardImage from './CardImage';\nimport CardDate from './CardDate';\nimport BossLabel from '../BossLabel';\nimport EventLabel from '../EventLabel';\nimport { isTodayBetween } from '../../libs/dates-lib';\nimport { getNoImageUrl, isNormalEventInsideActiveWindow } from '../../libs/event-lib';\n\nconst MainContainer = styled(Flex)`\n font-family: 'Roboto Mono';\n font-weight: normal;\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n border: 1px solid ${(props) => props.theme.color.card.restricted.border};\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n`;\nMainContainer.displayName = 'LandscapeCard-MainContainer';\n\nconst Container = styled(Flex)`\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n`;\nContainer.displayName = 'LandscapeCard-Container';\n\nconst ContainerBottom = styled(Flex)`\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 62px;\n background-color: #121212;\n padding-left: 20px;\n`;\nContainer.displayName = 'LandscapeCard-ContainerBottom';\n\nconst CardBody = styled(Flex)`\n &:hover {\n background-color: ${(props) => props.theme.color.card.classic.background.hover};\n cursor: pointer;\n }\n padding: ${(props) => props.theme.margin.s};\n padding-top: 0px;\n background-color: #1d1d1d;\n`;\nCardBody.displayName = 'LandscapeCard-CardBody';\n\nconst calculateDescriptionLines = (matches) => {\n if (!matches.schema3Boxes && !matches.schema4Boxes && !matches.schema5Boxes) {\n return 3;\n }\n return 4;\n};\n\nconst getWidthSchema = (matches) => {\n if (matches.schema2Boxes) {\n return '690px';\n }\n if (matches.schema3Boxes) {\n return '1050px';\n }\n if (matches.schema4Boxes) {\n return '1415px';\n }\n if (matches.schema5Boxes) {\n return '1770px';\n }\n return '1050px';\n};\n\n/**\n * @param {String} imageURL image url of card\n * @param {String} type SOC/NOC for labels\n * @param {String} title card title\n * @param {String} description card description\n * @param {function} onCardClick on click function\n * @param {String} activeStartDate event active start date\n * @param {String} startDate event start date\n * @param {String} activeEndDate event active end date\n * @param {String} registrationClosedDate event registration end date\n * @param {String} registrationOpenDate event registration start date\n * @param {String} registrationStatus OPEN / CLOSED\n * @param {boolean} showDate\n * @param {String} id event id\n * @param {object} matches width schema\n * @param {Boolean} enrolled\n */\nexport default function LandscapeCard(props) {\n const {\n imageURL,\n type,\n title,\n description,\n onCardClick,\n activeStartDate,\n startDate,\n activeEndDate,\n registrationClosedDate,\n registrationOpenDate,\n registrationStatus,\n showDate,\n id,\n matches,\n enrolled = false,\n } = props;\n const activeEvent = isTodayBetween(new Date(activeStartDate), new Date(activeEndDate));\n const imgSize = 'small';\n const imageSrc = getImageURLSized(imageURL, imgSize);\n const imageType = type;\n const isEventRunning = isNormalEventInsideActiveWindow(\n activeStartDate,\n activeEndDate,\n registrationOpenDate,\n registrationClosedDate,\n registrationStatus\n );\n\n useEffect(() => {\n if (!title && !description) {\n throw new Error('missing title/description');\n }\n });\n\n return (\n <MainContainer\n maxWidth={getWidthSchema(matches)}\n flexDirection=\"column\"\n onClick={onCardClick}\n className=\"LandscapeCard-Container\"\n active={activeEvent}\n mt=\"10px\"\n mb=\"10px\"\n >\n <Container>\n <CardImage\n src={imageSrc}\n alt=\"card image\"\n onError={(e) => {\n e.target.src = getNoImageUrl(imageType, imgSize);\n }}\n style={{ marginTop: '-1px', marginLeft: '-1px' }}\n />\n <CardBody alignItems=\"start\" flexDirection=\"column\" height=\"185px\">\n <div style={{ display: 'content' }}>\n <CardTitle restricted active={activeEvent} id={id}>\n {title}\n </CardTitle>\n </div>\n <Flex>\n <CardDescription restricted climpAfterLine={calculateDescriptionLines(matches)}>\n {description}\n </CardDescription>\n </Flex>\n </CardBody>\n </Container>\n <ContainerBottom>\n <Flex width=\"50%\">\n <CardIconContainer>\n <GameIcon />\n </CardIconContainer>\n <Flex data-tip data-for=\"inviteOnlyIcon\" px=\"8px\">\n <InviteOnlyIcon />\n </Flex>\n <Tooltip id=\"inviteOnlyIcon\">INVITE ONLY</Tooltip>\n <BossLabel type={type} ml=\"6px\" fontSize=\"18px\" />\n {showDate && startDate && (\n <Flex pl=\"55px\">\n <CardDate date={startDate} style={{ color: '#D0D0D0' }} />\n </Flex>\n )}\n </Flex>\n <Flex\n width=\"50%\"\n flexDirection=\"row\"\n justifyContent=\"flex-end\"\n alignItems=\"center\"\n mt=\"-65px\"\n >\n <EventLabel enrolled={enrolled} active={isEventRunning}>\n {enrolled ? 'Enrolled' : 'Private Event'}\n </EventLabel>\n </Flex>\n </ContainerBottom>\n </MainContainer>\n );\n}\n","import styled from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst ListHeader = styled(Flex)`\n box-shadow: 0px 3px 6px #00000029;\n background-color: #2c2c2c;\n height: 130px;\n padding: 40px 45px 40px 45px;\n align-items: center;\n`;\n\nexport default ListHeader;\n","import { useEffect } from 'react';\nimport get from 'lodash/get';\nimport { toast } from 'react-toastify';\nimport { useRouteMatch } from 'react-router-dom';\nimport { API } from 'aws-amplify';\nimport { useAppContext } from '../../libs/context-lib';\nimport WebSocketClient, { WEB_SOCKET_STATUS } from '../websocket/index';\nimport {\n ALERTABLE_NOTIFICATIONS,\n formatNotificationMessage,\n ACTIONABLE_NOTIFICATIONS,\n} from '../../libs/notifications-lib';\nimport config from '../../config';\nimport { onError } from '../../libs/error-lib';\n\nconst wsClient = new WebSocketClient();\n\nexport default function NotificationsHandler() {\n const { user, userSession, setNotifications } = useAppContext();\n const eventRouteMatch = useRouteMatch('/event/:eventId');\n\n async function performNotificationAction(notification) {\n const notificationEventId = get(notification, 'notification.eventId');\n const pathEventId = get(eventRouteMatch, 'params.eventId');\n if (!notificationEventId || !pathEventId || notificationEventId !== pathEventId) {\n return;\n }\n switch (notification.notificationType) {\n case 'TEAM_INVITE_DISBAND':\n userSession((u) => ({ ...u, userInTeam: null }));\n break;\n case 'TEAM_INVITE_REMOVED':\n userSession((u) => ({ ...u, userInTeam: null }));\n break;\n default:\n }\n }\n\n const wsMessageHandler = (e = {}) => {\n const { data } = e;\n if (!data) {\n return;\n }\n if (ALERTABLE_NOTIFICATIONS.includes(data.notificationType)) {\n toast(formatNotificationMessage(data));\n setNotifications((notif) => [data].concat(notif));\n }\n if (ACTIONABLE_NOTIFICATIONS.includes(data.notificationType)) {\n performNotificationAction(data);\n }\n };\n\n useEffect(() => {\n async function getNotifications() {\n try {\n const notificationsRq = await API.get('users', '/user/notifications');\n // this need to handle pagination\n const alertableNotifications = [];\n notificationsRq.notifications.forEach((n) => {\n if (ALERTABLE_NOTIFICATIONS.includes(n.notificationType)) {\n alertableNotifications.push(n);\n }\n });\n setNotifications(alertableNotifications);\n } catch (e) {\n onError(e);\n }\n }\n // prevent the notifications operations if there is no logged in user and the socket is OPEN / RECONNECTING\n if (\n user &&\n user.dynamoUser &&\n wsClient.state !== WEB_SOCKET_STATUS.OPEN &&\n wsClient.state !== WEB_SOCKET_STATUS.RECONNECTING\n ) {\n getNotifications();\n try {\n wsClient.open({ url: config.webSocket.URL, authenticateRq: true });\n } catch (e) {\n console.error('WS ERROR', JSON.stringify(e));\n }\n }\n if (wsClient.state === WEB_SOCKET_STATUS.OPEN) {\n wsClient.on('message', wsMessageHandler);\n }\n return () => {\n wsClient.removeListener('message', wsMessageHandler);\n };\n }, [user, wsClient.state]);\n\n return null;\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst HiddenButton = styled.input.attrs({ type: 'radio' })`\n // Hide radio visually but remain accessible to screen readers.\n // Source: https://polished.js.org/docs/#hidevisually\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n`;\n\nconst StyledRadioButton = styled.div`\n display: inline-block;\n border-radius: 100%;\n width: 10px;\n height: 10px;\n color: #4caf50;\n border: 2px solid #4caf50;\n ${(props) =>\n props.checked &&\n css`\n background-color: #4caf50;\n `}\n opacity: 1;\n transition: all 150ms;\n`;\n\nconst Container = styled.div`\n display: inline-block;\n vertical-align: middle;\n`;\n\nconst RadioButton = ({ checked, ...props }) => {\n return (\n <Container>\n <HiddenButton {...props} />\n <StyledRadioButton checked={checked} />\n </Container>\n );\n};\n\nexport default RadioButton;\n","import React from 'react';\nimport Media from 'react-media';\nimport get from 'lodash/get';\nimport { Flex } from 'reflexbox';\nimport LandscapeCard from './cards/LandscapeCard';\nimport CardSkeleton from './cards/CardSkeleton';\nimport Card from './cards/Card';\nimport { EVENT_DELIVERY } from '../libs/constants';\n\nexport default function RestrictedEvents(props) {\n const { onCardClick, restrictedEvents, loadingRestrictedEvents } = props;\n\n return (\n <>\n <Media\n queries={{\n schemaSmall: '(max-width: 759px)',\n schema1Boxes: '(min-width: 1px) and (max-width: 948px)',\n schema2Boxes: '(min-width: 948px) and (max-width: 1420px)',\n schema3Boxes: '(min-width: 1421px) and (max-width: 1894px)',\n schema4Boxes: '(min-width: 1895px) and (max-width: 2368px)',\n schema5Boxes: '(min-width: 2369px)',\n }}\n >\n {(matches) => (\n <>\n {loadingRestrictedEvents ? (\n <CardSkeleton landscape={!matches.schema1Boxes} />\n ) : (\n <>\n {matches.schema1Boxes ? (\n <>\n <Flex\n flexDirection=\"row\"\n justifyContent={matches.schemaSmall ? 'center' : 'flex-start'}\n alignItems=\"flex-start\"\n flexWrap=\"wrap\"\n className=\"RestrictedEvents-Flex\"\n >\n {restrictedEvents.map((e, idx) => {\n const key = get(e, 'id', idx);\n const title = get(e, 'name');\n const showDate = e && e.delivery === EVENT_DELIVERY.NORMAL;\n return (\n <Flex\n key={key}\n style={{\n minWidth: '330px',\n padding: '15px',\n }}\n >\n <Card\n {...e}\n title={title}\n onCardClick={() => onCardClick(e)}\n showDate={showDate}\n restricted\n matches={matches}\n enrolled={get(e, 'participant.enrolled')}\n />\n </Flex>\n );\n })}\n </Flex>\n </>\n ) : (\n <>\n {restrictedEvents.map((re, idx) => {\n const key = get(re, 'id', idx);\n const title = get(re, 'name');\n const showDate = re && re.delivery === EVENT_DELIVERY.NORMAL;\n return (\n <LandscapeCard\n key={key}\n {...re}\n title={title}\n onCardClick={() => onCardClick(re)}\n showDate={showDate}\n style={{ justifySelf: 'center' }}\n matches={matches}\n enrolled={get(re, 'participant.enrolled')}\n />\n );\n })}\n </>\n )}\n </>\n )}\n </>\n )}\n </Media>\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { TopArrow } from './icons';\nimport { RegularText } from 'boss-ui';\nimport { fadeIn } from '../libs/animations-lib';\n\nconst ArrowBox = styled(Flex)`\n position: fixed;\n align-items: center;\n height: 52px;\n width: 172px;\n bottom: 100px;\n justify-content: center;\n z-index: 1000;\n cursor: pointer;\n animation: ${fadeIn} 0.3s;\n display: ${(props) => (props.show ? 'flex' : 'none')};\n border: 1px solid #1d1d1d;\n box-shadow: -3px 3px 3px #00000029;\n background-color: ${(props) => props.theme.color.background};\n`;\n\nconst ScrollTopButton = () => {\n const [showScroll, setShowScroll] = useState(false);\n const [insideBox, setInsideBox] = useState(false);\n\n const scrollTop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n useEffect(() => {\n const checkScrollTop = () => {\n if (!showScroll && window.pageYOffset > 400) {\n setShowScroll(true);\n return;\n }\n if (showScroll && window.pageYOffset <= 400) {\n setShowScroll(false);\n }\n };\n\n window.addEventListener('scroll', checkScrollTop);\n return () => window.removeEventListener('scroll', checkScrollTop);\n });\n\n return (\n <ArrowBox\n onClick={scrollTop}\n show={showScroll}\n onMouseEnter={() => setInsideBox(true)}\n onMouseLeave={() => setInsideBox(false)}\n >\n <TopArrow hover={insideBox} />\n <Flex ml=\"6px\">\n <RegularText mediumWeight fontSize=\"14px\" color={insideBox ? '#81C784' : '#535353'}>\n Back to top\n </RegularText>\n </Flex>\n </ArrowBox>\n );\n};\n\nexport default ScrollTopButton;\n","import styled, { css } from 'styled-components';\n\nconst MemberState = styled.span`\n font-family: 'Roboto Mono';\n font-size: 14px;\n color: #d0d0d0;\n text-align: ${(props) => (props.center ? 'center' : 'left')};\n ${(props) =>\n props.available &&\n css`\n color: #a5d6a7;\n `}\n ${(props) =>\n props.invited &&\n css`\n color: #e5c07b;\n `}\n ${(props) =>\n props.unavailable &&\n css`\n color: #a088a4;\n `}\n ${(props) =>\n props.public &&\n css`\n color: #81a2be;\n `}\n ${(props) =>\n props.full &&\n css`\n color: #a088a4;\n `}\n width: ${(props) => props.width || 'auto'};\n`;\nMemberState.displayName = 'MemberState';\n\nexport default MemberState;\n","import React, { useState, useEffect } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport find from 'lodash/find';\nimport { \nLinkedText, \nUnregularButton, \nModal, \nCrossIcon, \nFormLabel, \nContextMenuItem, \nContextMenu, \nPaginator, \nSpyIcon, \nListTable,\nListItem,\nItem\n} from 'boss-ui';\nimport debounce from 'lodash/debounce';\nimport Api from '../api';\nimport FormInput from './forms/FormInput';\nimport MemberState from './MemberState';\nimport { TEAM_MEMBER_ROLE, USER_TEAM_STATE } from '../libs/constants';\nimport { useAppContext } from '../libs/context-lib';\nimport { useDynamoPaginator } from '../libs/hooks-lib';\nimport { onError } from '../libs/error-lib';\n\nconst DEFAULT_PAGE_SIZE = 5;\nconst ZERO = 0;\nconst PAGE_STEP = 1;\n\nconst SeatAvailables = ({ seats, mobile = false }) => {\n if (!mobile) {\n return (\n <>\n <FormLabel>Seats left</FormLabel>\n <div\n style={{\n fontFamily: 'Roboto Mono',\n color: '#D0D0D0',\n fontSize: 24,\n borderBottom: '1px solid #1D1D1D',\n marginTop: '5px',\n }}\n >\n {seats}\n </div>\n </>\n );\n }\n return <span style={{ color: '#D0D0D0' }}>Seats left {seats}</span>;\n};\n\nconst API = new Api();\n\nexport default function SearchUsers(props) {\n const { onClose, event, participants, addParticipants, screenWidthSchema } = props;\n const { user } = useAppContext();\n const [search, setSearch] = useState('');\n const [loading, setLoading] = useState(false);\n const [debounceSearching, setDebounceSearching] = useState(false);\n const [{ pages, currentPage }, paginate] = useDynamoPaginator();\n const [searchList, setSearchList] = useState([]);\n\n const inviteUser = (user, role) => {\n if (event.maxNumberOfParticipants - participants.length > 0) {\n user.recentlyAdded = true;\n addParticipants(user, role);\n const invited = find(searchList, (u) => u.userId === user.userId);\n invited.inviteState = USER_TEAM_STATE.INVITED;\n }\n };\n\n const getUserState = (user) => {\n if (user.hasTeam) {\n return 'member of another team';\n }\n const invitationSent = find(participants, (u) => u.userId === user.userId);\n return invitationSent ? USER_TEAM_STATE.INVITED : USER_TEAM_STATE.AVAILABLE;\n };\n\n const prepareUserList = (users) => {\n const filterList = [];\n users.forEach((u) => {\n if (u.userId !== user.dynamoUser.userId) {\n filterList.push({\n ...u,\n inviteState: getUserState(u),\n });\n }\n });\n return filterList;\n };\n\n const searchUser = async (q, page = ZERO) => {\n setLoading(true);\n let lastEvaluatedKey;\n if (page > ZERO) {\n lastEvaluatedKey =\n page > currentPage\n ? pages[currentPage].nextPagePointer\n : pages[currentPage].lastPagePointer;\n }\n try {\n const result = await API.get('events', `/events/${event.eventId}/member-sugestions`, {\n queryStringParameters: {\n pageSize: DEFAULT_PAGE_SIZE,\n q,\n ...(lastEvaluatedKey && {\n ...lastEvaluatedKey,\n }),\n },\n });\n setSearchList(prepareUserList(result.participants));\n paginate(result.pagination, page);\n } catch (e) {\n onError(e);\n } finally {\n setLoading(false);\n setDebounceSearching(false);\n }\n };\n\n const delayedQuery = (q) => {\n setDebounceSearching(true);\n debounce(() => searchUser(q), 500)();\n };\n\n useEffect(() => {\n searchUser('');\n }, []);\n\n const cleanBox = () => {\n setSearch('');\n searchUser('');\n };\n\n const onNextPage = () => {\n if (!debounceSearching) {\n searchUser(search, currentPage + PAGE_STEP);\n }\n };\n\n const onPrevPage = () => {\n if (!debounceSearching) {\n searchUser(search, currentPage - PAGE_STEP);\n }\n };\n\n return (\n <Modal\n active\n onBackgroundClick={onClose}\n style={\n screenWidthSchema && screenWidthSchema.l\n ? {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n marginTop: '100px',\n minWidth: '96%',\n top: '-100px',\n }\n : { margin: '100px auto auto auto', top: '-100px' }\n }\n >\n <Flex\n width={screenWidthSchema && screenWidthSchema.l ? '100%' : '920px'}\n backgroundColor=\"#2C2C2C\"\n flexDirection=\"column\"\n >\n <Flex\n mr=\"10px\"\n mt=\"6px\"\n ml=\"auto\"\n css={{\n cursor: 'pointer',\n }}\n onClick={onClose}\n >\n <CrossIcon />\n </Flex>\n <Flex height=\"113px\" alignItems=\"center\" style={{ boxShadow: '0px 3px 6px #00000029' }}>\n <Box\n mx={screenWidthSchema && screenWidthSchema.s ? '0px' : '58px'}\n px={screenWidthSchema && screenWidthSchema.s ? '20px' : '0px'}\n width={screenWidthSchema && screenWidthSchema.s ? '100%' : '66.6%'}\n >\n <FormLabel>Find a member for your team</FormLabel>\n <FormInput\n search\n remove={search.length > ZERO && cleanBox}\n onChange={(e) => {\n setSearch(e.target.value);\n delayedQuery(e.target.value);\n }}\n value={search}\n placeholder=\"Search by email address or by profile Display Name\"\n />\n {screenWidthSchema && screenWidthSchema.s && (\n <Box>\n <SeatAvailables\n seats={event.maxNumberOfParticipants - participants.length}\n mobile\n />\n </Box>\n )}\n </Box>\n {!(screenWidthSchema && screenWidthSchema.s) && (\n <Box>\n <SeatAvailables seats={event.maxNumberOfParticipants - participants.length} />\n </Box>\n )}\n </Flex>\n <Flex height=\"400px\" flexDirection=\"column\">\n <ListTable refreshing={loading} mobile={screenWidthSchema && screenWidthSchema.s}>\n {searchList.map((item) => (\n <ListItem key={item.userId}>\n {screenWidthSchema && screenWidthSchema.s ? (\n <Item>\n <Flex flexDirection=\"column\" justifyContent=\"center\" alignItems=\"flex-start\">\n <Flex>{item.name}</Flex>\n <Flex>\n <MemberState\n available={item.inviteState === USER_TEAM_STATE.AVAILABLE}\n invited={item.inviteState === USER_TEAM_STATE.INVITED}\n unavailable={\n item.inviteState !== USER_TEAM_STATE.AVAILABLE &&\n item.inviteState !== USER_TEAM_STATE.INVITED\n }\n >\n {item.inviteState}\n </MemberState>\n </Flex>\n </Flex>\n </Item>\n ) : (\n <>\n <Item noBorder width=\"10%\">\n <SpyIcon />\n </Item>\n <Item>{item.name}</Item>\n <Item\n available={item.inviteState === USER_TEAM_STATE.AVAILABLE}\n invited={item.inviteState === USER_TEAM_STATE.INVITED}\n unavailable={\n item.inviteState !== USER_TEAM_STATE.AVAILABLE &&\n item.inviteState !== USER_TEAM_STATE.INVITED\n }\n >\n {item.inviteState}\n </Item>\n </>\n )}\n <Item width={screenWidthSchema && screenWidthSchema.s ? '' : '15%'}>\n {item.inviteState === USER_TEAM_STATE.AVAILABLE && (\n <ContextMenu\n button={\n <UnregularButton active>\n +{screenWidthSchema && screenWidthSchema.s ? '' : ' invite'}\n </UnregularButton>\n }\n >\n <ContextMenuItem>\n <LinkedText onClick={() => inviteUser(item, TEAM_MEMBER_ROLE.CAPTAIN)}>\n As captain\n </LinkedText>\n </ContextMenuItem>\n <ContextMenuItem>\n <LinkedText onClick={() => inviteUser(item, TEAM_MEMBER_ROLE.REGULAR)}>\n As regular member\n </LinkedText>\n </ContextMenuItem>\n </ContextMenu>\n )}\n </Item>\n </ListItem>\n ))}\n {search.length > 3 && searchList.length === ZERO && !loading && (\n <ListItem>\n <Item>No users found</Item>\n </ListItem>\n )}\n </ListTable>\n <Paginator\n isNext={pages[currentPage] && pages[currentPage].nextPagePointer}\n onNext={onNextPage}\n isPrev={currentPage > 0}\n onPrev={onPrevPage}\n paginating={loading || debounceSearching}\n />\n </Flex>\n </Flex>\n </Modal>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { withRouter, NavLink } from 'react-router-dom';\nimport { Box } from 'reflexbox';\n\nfunction IconLink(props) {\n const { children, ...rest } = props;\n return <NavLink {...rest}>{children}</NavLink>;\n}\n\nconst MenuLink = styled(IconLink)`\n position: relative;\n align-items: center;\n display: block;\n padding: 14px 10px 14px 10px;\n margin-bottom: 8px;\n font-family: Roboto Mono;\n font-size: 14px;\n letter-spacing: 0.72px;\n text-decoration: none;\n background-color: #2c2c2c;\n color: #a0a0a0;\n border-left: 1px solid transparent;\n box-shadow: 0px 3px 6px #00000029;\n\n &.active {\n color: #66bb6a;\n border-left-color: #66bb6a;\n }\n\n &:hover,\n &:focus {\n background-color: #373737;\n border-left-color: #66bb6a;\n }\n`;\n\nconst MenuContainer = styled(Box)`\n overflow: hidden;\n width: 100%;\n`;\n\nfunction SideMenu(props) {\n const { options } = props;\n return (\n <MenuContainer justifyContent=\"center\" align=\"center\">\n {options.map((opt) => (\n <MenuLink key={opt.key} exact to={opt.route}>\n {opt.label}\n </MenuLink>\n ))}\n </MenuContainer>\n );\n}\n\nexport default withRouter(SideMenu);\n","import { SURVEY_QUESTIONS_TYPE, SURVEY_QUESTION_OPTION_OTHER } from './constants';\n\nexport const isEmptyQuestion = (question) => {\n if (\n question &&\n question.required &&\n ((question.type[0] !== SURVEY_QUESTIONS_TYPE.OPTIONS_AND_TEXT && !question.answer) ||\n (question.type[0] === SURVEY_QUESTIONS_TYPE.OPTIONS_AND_TEXT &&\n (!question.answer ||\n (question.answer.option === SURVEY_QUESTION_OPTION_OTHER && !question.answer.text))))\n ) {\n return true;\n }\n return false;\n};\n\nexport const checkIsPendingQuestions = (answers) => {\n for (let x = 0; x < answers.length; x++) {\n if (isEmptyQuestion(answers[x])) {\n return true;\n }\n }\n return false;\n};","import styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { RegularText } from 'boss-ui';\nimport { Button } from 'boss-ui';\n\nconst MainContainer = styled(Flex)`\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n padding-left: 60px;\n padding-right: 60px;\n height: ${(props) => props.scrolled ? {} : '350px'}\n`;\nMainContainer.displayName = 'SurveyIntroduction-MainContainer';\n\nconst ContentContainer = styled(Flex)`\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n`;\nContentContainer.displayName = 'SurveyIntroduction-ContentContainer';\n\nconst Name = styled(Flex)`\n font-size: 28px;\n color: #D0D0D0;\n margin-bottom: 23px;\n`;\nName.displayName = 'SurveyIntroduction-Name';\n\nconst Description = styled(RegularText)`\n color: #D0D0D0;\n letter-spacing: 0px;\n line-height: 27px;\n`;\nDescription.displayName = 'SurveyIntroduction-Description';\n\nconst RequiredContainer = styled(Flex)`\n flex-direction: row;\n width: 100%;\n margin-top: 15px;\n`;\nRequiredContainer.displayName = 'SurveyIntroduction-RequiredContainer';\n\nconst Star = styled(RegularText)`\n color: #e06c75;\n position: relative;\n top: -5px;\n`;\nStar.displayName = 'SurveyIntroduction-Star';\n\nconst Required = styled(RegularText)`\n color: #e06c75;\n margin-left: 3px;\n`;\nRequired.displayName = 'SurveyIntroduction-Required';\n\nconst ActionsContainer = styled(Flex)`\n width: 100%;\n flex-direction: row;\n justify-content: ${props => props.showOnDismiss ? 'space-between' : 'flex-end'};\n align-items: center;\n`;\nActionsContainer.displayName = 'SurveyIntroduction-ActionsContainer';\n\nconst ButtonWrapper = styled(Button)`\n width: 170px;\n height: 40px;\n`;\nButtonWrapper.displayName = 'SurveyIntroduction-ButtonWrapper';\n\nexport {\n MainContainer,\n ContentContainer,\n Name,\n Description,\n RequiredContainer,\n Star,\n Required,\n ActionsContainer,\n ButtonWrapper\n};","import {\n MainContainer,\n ContentContainer,\n Name,\n Description,\n RequiredContainer,\n Star,\n Required,\n ActionsContainer,\n ButtonWrapper\n} from './styles';\nimport { UnregularButton } from 'boss-ui';\n\nexport default function SurveyIntroduction({ scrolled, showOnDismiss, onDismiss, onNext, name = '', description = '' }) {\n return (\n <MainContainer scrolled={scrolled}>\n <ContentContainer>\n <Name>{name}</Name>\n <Description align=\"left\">{description}</Description>\n <RequiredContainer>\n <Star align=\"center\" mediumWeight>*</Star>\n <Required align=\"center\" mediumWeight>Required</Required>\n </RequiredContainer>\n </ContentContainer>\n <ActionsContainer showOnDismiss={showOnDismiss}>\n {showOnDismiss && (\n <UnregularButton id=\"test-Survey-ButtonDismiss\" onClick={onDismiss}>\n Dismiss Survey\n </UnregularButton>\n )}\n <ButtonWrapper onClick={onNext}>TAKE THE SURVEY</ButtonWrapper>\n </ActionsContainer>\n </MainContainer>\n )\n}","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport { UnregularButton, RegularText } from 'boss-ui';\nimport { AsteriskIcon } from '../../icons';\n\nexport default function NominalScaleQuestion({ value = '', options = [], onChange = () => {} }) {\n return (\n <>\n {options && (\n <Flex\n className=\"NominalScaleQuestion-FlexContainer\"\n flexDirection=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {options.map((row) => {\n return (\n <Flex\n key={row}\n onClick={() => {\n onChange(row);\n }}\n style={{ cursor: 'pointer' }}\n >\n <UnregularButton>\n {value === row ? (\n <AsteriskIcon color=\"#81C784\" />\n ) : (\n <AsteriskIcon style={{ visibility: 'hidden' }} color=\"#81C784\" />\n )}\n </UnregularButton>\n <RegularText\n color=\"#81C784\"\n align=\"left\"\n style={{ letterSpacing: '0px', paddingTop: '6px' }}\n mediumWeight\n >\n {row}\n </RegularText>\n </Flex>\n );\n })}\n </Flex>\n )}\n </>\n );\n}\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport { UnregularButton, RegularText } from 'boss-ui';\nimport { AsteriskIcon } from '../../icons';\nimport { SURVEY_QUESTION_OPTION_OTHER } from '../../../libs/constants';\n\nexport default function MixScaleQuestion({\n value = { text: '', option: '' },\n options = [],\n onChange = () => {},\n}) {\n return (\n <>\n {options && (\n <Flex\n className=\"MixScaleQuestion-FlexContainer\"\n flexDirection=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n width=\"100%\"\n >\n {options.map((row) => {\n return (\n <Flex\n key={row}\n onClick={() => {\n onChange({ option: row });\n }}\n style={{ cursor: 'pointer' }}\n className=\"MixScaleQuestion-Option\"\n >\n <UnregularButton>\n {value.option === row ? (\n <AsteriskIcon color=\"#81C784\" className=\"MixScaleQuestion-AsteriskSelected\" />\n ) : (\n <AsteriskIcon\n style={{ visibility: 'hidden' }}\n color=\"#81C784\"\n className=\"MixScaleQuestion-AsteriskNotSelected\"\n />\n )}\n </UnregularButton>\n <RegularText\n color=\"#81C784\"\n align=\"left\"\n style={{ letterSpacing: '0px', paddingTop: '6px' }}\n mediumWeight\n >\n {row}\n </RegularText>\n </Flex>\n );\n })}\n <Flex\n onClick={() => {\n onChange({ option: SURVEY_QUESTION_OPTION_OTHER });\n }}\n style={{ cursor: 'pointer' }}\n className=\"MixScaleQuestion-Option MixScaleQuestion-OptionOther\"\n >\n <UnregularButton>\n {value.option === SURVEY_QUESTION_OPTION_OTHER ? (\n <AsteriskIcon color=\"#81C784\" />\n ) : (\n <AsteriskIcon style={{ visibility: 'hidden' }} color=\"#81C784\" />\n )}\n </UnregularButton>\n <RegularText\n color=\"#81C784\"\n align=\"left\"\n style={{ letterSpacing: '0px', paddingTop: '6px' }}\n mediumWeight\n >\n Other\n </RegularText>\n </Flex>\n {value.option === SURVEY_QUESTION_OPTION_OTHER && (\n <Flex width=\"100%\" p=\"10px\">\n <textarea\n placeholder=\"Enter specification\"\n style={{\n backgroundColor: '#2c2c2c',\n border: '1px solid #535353',\n width: '100%',\n height: '100px',\n color: '#D0D0D0',\n resize: 'none',\n fontSize: '14px',\n fontFamily: 'Roboto Mono',\n padding: '5px',\n letterSpacing: '0px',\n }}\n className=\"MixScaleQuestion-text\"\n onChange={(e) => {\n onChange({ option: SURVEY_QUESTION_OPTION_OTHER, text: e.target.value });\n }}\n value={value.text}\n />\n </Flex>\n )}\n </Flex>\n )}\n </>\n );\n}\n","import React from 'react';\n\nexport default function OpenQuestion({ value = '', onChange = () => {} }) {\n return (\n <textarea\n placeholder=\"Enter specification\"\n style={{\n backgroundColor: '#2c2c2c',\n border: '1px solid #535353',\n width: '100%',\n height: '100px',\n color: '#D0D0D0',\n resize: 'none',\n fontSize: '14px',\n fontFamily: 'Roboto Mono',\n padding: '5px',\n letterSpacing: '0px',\n marginBottom: '15px',\n }}\n className=\"OpenQuestion-text\"\n onChange={(e) => {\n onChange(e.target.value);\n }}\n value={value}\n />\n );\n}\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport styled, { css } from 'styled-components';\nimport { RegularText } from 'boss-ui';\n\nconst DEFAULT_NUMERIC_SCALE = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nconst NumberCircle = styled(Flex)`\n color: #898989;\n border: 2px solid #373737;\n border-radius: 100%;\n width: 30px;\n height: 30px;\n justify-content: center;\n align-items: center;\n font-family: 'Roboto Mono';\n font-size: 14px;\n padding-left: 1px;\n ${(props) =>\n props.filled &&\n css`\n color: #1d1d1d;\n background-color: #66bb6a;\n border-color: #66bb6a;\n `}\n &:hover {\n cursor: pointer;\n background-color: #2c2c2c;\n }\n`;\n\nexport default function NumericScaleQuestion({\n value,\n options = DEFAULT_NUMERIC_SCALE,\n onChange = () => {},\n}) {\n return (\n <Flex width=\"600px\" justifyContent=\"space-evenly\" alignItems=\"center\">\n <RegularText color=\"#A5D6A7\" mediumWeight fontSize=\"14px\">\n Worst\n </RegularText>\n {options.map((o) => (\n <NumberCircle key={o} filled={value === o} onClick={() => onChange(o)}>\n {o}\n </NumberCircle>\n ))}\n <RegularText color=\"#A5D6A7\" mediumWeight fontSize=\"14px\">\n Best\n </RegularText>\n </Flex>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport { RegularStar, SolidStar } from '../../icons';\nimport { RegularText } from 'boss-ui';\n\nconst DEFAULT_RANGE_OPTIONS = { 1: 'Bad', 2: 'Regular', 3: 'Good', 4: 'Very good', 5: 'Excelent' };\n\nconst Star = ({ filled = false }) => {\n if (filled) {\n return <SolidStar />;\n }\n return <RegularStar />;\n};\n\nconst calculateInitialState = (options, value = 0) => {\n const initialState = {};\n Object.keys(options).forEach((k) => {\n initialState[k] = { value: k, label: options[k], filled: k <= value };\n });\n return initialState;\n};\n\nexport default function StarQuestion({\n value,\n onChange = () => {},\n options = DEFAULT_RANGE_OPTIONS,\n}) {\n const [stars, setStars] = useState(calculateInitialState(options, value));\n\n const onStarClicked = (clickedValue) => {\n setStars((prevStars) => {\n const newStars = {};\n Object.keys(prevStars).forEach((starKey) => {\n if (prevStars[starKey].value <= clickedValue) {\n newStars[starKey] = { ...prevStars[starKey], filled: true };\n } else {\n newStars[starKey] = { ...prevStars[starKey], filled: false };\n }\n });\n return newStars;\n });\n onChange(clickedValue);\n };\n\n const onStarHoverEnter = (hoverEnterValue) => {\n setStars((prevStars) => {\n const newStars = {};\n Object.keys(prevStars).forEach((starKey) => {\n if (prevStars[starKey].value <= hoverEnterValue) {\n newStars[starKey] = { ...prevStars[starKey], filled: true };\n } else {\n newStars[starKey] = { ...prevStars[starKey], filled: false };\n }\n });\n return newStars;\n });\n };\n\n const onStarHoverLeave = () => {\n setStars((prevStars) => {\n const newStars = {};\n Object.keys(prevStars).forEach((starKey) => {\n newStars[starKey] = {\n ...prevStars[starKey],\n filled: prevStars[starKey].value <= value,\n };\n });\n return newStars;\n });\n };\n\n return (\n <Box>\n <Flex width=\"300px\">\n {Object.keys(stars).map((optionKey) => {\n return (\n <Flex\n style={{ cursor: 'pointer' }}\n key={stars[optionKey].value}\n onClick={() => onStarClicked(stars[optionKey].value)}\n onMouseEnter={() => onStarHoverEnter(stars[optionKey].value)}\n onMouseLeave={() => onStarHoverLeave(stars[optionKey].value)}\n >\n <Star filled={stars[optionKey].filled} />\n </Flex>\n );\n })}\n </Flex>\n <RegularText\n color=\"#A5D6A7\"\n mediumWeight\n fontSize=\"14px\"\n style={{ height: '25px', paddingTop: '5px' }}\n >\n {value && stars[value].label}\n </RegularText>\n </Box>\n );\n}\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport {\n RegularFrown,\n RegularSmile,\n RegularSadTear,\n RegularMeh,\n RegularLaughBeam,\n SolidSmile,\n SolidSadTear,\n SolidMeh,\n SolidLaughBeam,\n SolidFrown,\n} from '../../icons';\nimport { RegularText } from 'boss-ui';\n\nconst DEFAULT_RANGE_OPTIONS = [\n { value: 1, label: 'Sad', regularIcon: <RegularSadTear />, solidIcon: <SolidSadTear /> },\n { value: 2, label: 'Frown', regularIcon: <RegularFrown />, solidIcon: <SolidFrown /> },\n { value: 3, label: 'Meh', regularIcon: <RegularMeh />, solidIcon: <SolidMeh /> },\n { value: 4, label: 'Smile', regularIcon: <RegularSmile />, solidIcon: <SolidSmile /> },\n { value: 5, label: 'Laugh', regularIcon: <RegularLaughBeam />, solidIcon: <SolidLaughBeam /> },\n];\n\nconst getFace = (filled = false, solidIcon, regularIcon) => {\n if (filled) {\n return solidIcon;\n }\n return regularIcon;\n};\n\nexport default function SmileQuestion({ value, onChange = () => {} }) {\n return (\n <Flex width=\"320px\" alignItems=\"center\" justifyContent=\"space-between\">\n <RegularText color=\"#A5D6A7\" mediumWeight fontSize=\"14px\">\n Sadness\n </RegularText>\n <Flex>\n {DEFAULT_RANGE_OPTIONS.map((option) => {\n return (\n <Flex\n style={{ cursor: 'pointer' }}\n key={option.value}\n onClick={() => onChange(option.value)}\n width=\"30px\"\n >\n {getFace(value === option.value, option.solidIcon, option.regularIcon)}\n </Flex>\n );\n })}\n </Flex>\n <RegularText color=\"#A5D6A7\" mediumWeight fontSize=\"14px\">\n Total Joy!\n </RegularText>\n </Flex>\n );\n}\n","import styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { RegularText } from 'boss-ui';\nimport { WarningIcon } from '../../icons';\n\nconst MainContainer = styled(Flex)`\n flexd-irection: column;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n transition: all 400ms;\n opacity: ${(props) => props.question.opacity};\n`;\nMainContainer.displayName = 'QuestionContainer-MainContainer';\n\nconst SecondaryContainer = styled(Flex)`\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n`;\nSecondaryContainer.displayName = 'QuestionContainer-SecondaryContainer';\n\nconst RequiredContainer = styled(Flex)`\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n color: #e06c75;\n`;\nRequiredContainer.displayName = 'QuestionContainer-RequiredContainer';\n\nconst LineSep = styled(Flex)`\n border: 1px solid #2c2c2c;\n width: 100%;\n height: 1px;\n margin-top: 15px;\n margin-bottom: 15px;\n`;\nLineSep.displayName = 'QuestionContainer-LineSep';\n\nconst QuestionCount = styled(RegularText)`\n color: ${(props) => props.question.showQuestionWarning ? '#e06c75' : '#81C784'};\n letter-spacing: 0px;\n`;\nQuestionCount.displayName = 'QuestionContainer-QuestionCount';\n\nconst Star = styled(RegularText)`\n color: #e06c75;\n position: relative;\n top: -5px;\n left: 3px;\n`;\nStar.displayName = 'QuestionContainer-Star';\n\nconst QuestionTitle = styled(RegularText)`\n color: #D0D0D0;\n letter-spacing: 0px;\n margin-top: 8px;\n margin-bottom: 32px;\n`;\nQuestionTitle.displayName = 'QuestionContainer-QuestionTitle';\n\nconst NumericScaleQuestionContainer = styled(Flex)`\n margin-bottom: 12px;\n width: 100%;\n`;\nNumericScaleQuestionContainer.displayName = 'QuestionContainer-NumericScaleQuestionContainer';\n\nconst StarQuestionContainer = styled(Flex)`\n margin-bottom: 12px;\n width: 100%;\n`;\nStarQuestionContainer.displayName = 'QuestionContainer-StarQuestionContainer';\n\nconst SmileQuestionContainer = styled(Flex)`\n margin-bottom: 12px;\n width: 100%;\n`;\nSmileQuestionContainer.displayName = 'QuestionContainer-SmileQuestionContainer';\n\nconst NominalScaleQuestionContainer = styled(Flex)`\n margin-bottom: 12px;\n width: 100%;\n margin-left: -12px;\n`;\nNominalScaleQuestionContainer.displayName = 'QuestionContainer-NominalScaleQuestionContainer';\n\nconst MixScaleQuestionContainer = styled(Flex)`\n margin-bottom: 12px;\n width: 100%;\n margin-left: -12px;\n`;\nMixScaleQuestionContainer.displayName = 'QuestionContainer-MixScaleQuestionContainer';\n\nconst OpenQuestionContainer = styled(Flex)`\n width: 100%;\n`;\nOpenQuestionContainer.displayName = 'QuestionContainer-OpenQuestionContainer';\n\nconst WarningIconWrapper = styled(WarningIcon)`\n margin-right: 5px;\n`;\nWarningIconWrapper.displayName = 'QuestionContainer-WarningIconWrapper';\n\nconst Required = styled(RegularText)`\n color: #e06c75;\n font-size: 14px;\n`;\nRequired.displayName = 'QuestionContainer-Required';\n\nexport {\n MainContainer,\n SecondaryContainer,\n RequiredContainer,\n LineSep,\n QuestionCount,\n Star,\n QuestionTitle,\n NumericScaleQuestionContainer,\n StarQuestionContainer,\n SmileQuestionContainer,\n NominalScaleQuestionContainer,\n MixScaleQuestionContainer,\n OpenQuestionContainer,\n WarningIconWrapper,\n Required\n};","import { useCallback } from 'react';\nimport NominalScaleQuestion from '../questiontypes/NominalScaleQuestion';\nimport MixScaleQuestion from '../questiontypes/MixScaleQuestion';\nimport OpenQuestion from '../questiontypes/OpenQuestion';\nimport NumericScaleQuestion from '../questiontypes/NumericScaleQuestion';\nimport StarQuestion from '../questiontypes/StarQuestion';\nimport SmileQuestion from '../questiontypes/SmileQuestion';\nimport { SURVEY_QUESTIONS_TYPE } from '../../../libs/constants';\nimport {\n MainContainer,\n SecondaryContainer,\n RequiredContainer,\n LineSep,\n QuestionCount,\n Star,\n QuestionTitle,\n NumericScaleQuestionContainer,\n StarQuestionContainer,\n SmileQuestionContainer,\n NominalScaleQuestionContainer,\n MixScaleQuestionContainer,\n OpenQuestionContainer,\n WarningIconWrapper,\n Required\n} from './styles';\n\nexport default function QuestionContainer({ scrolled, question, idx, answers, onAnswerQuestion }) {\n const onQuestionChange = useCallback(change => onAnswerQuestion(idx, change), [idx]);\n\n return (\n <MainContainer question={question}>\n <SecondaryContainer>\n {scrolled && <LineSep />}\n <QuestionCount align=\"left\" mediumWeight id=\"test-Survey-CurrentPageLabel\" question={question}>\n Q {idx + 1}/{answers.length}\n {question.required && (\n <Star align=\"center\" mediumWeight>*</Star>\n )}\n </QuestionCount>\n <QuestionTitle align=\"left\" mediumWeight>{question.text}</QuestionTitle>\n {question.type[0] === SURVEY_QUESTIONS_TYPE.NUMERIC_SCALE && (\n <NumericScaleQuestionContainer>\n <NumericScaleQuestion\n value={question.answer}\n options={question.options}\n onChange={onQuestionChange}\n />\n </NumericScaleQuestionContainer>\n )}\n {question.type[0] === SURVEY_QUESTIONS_TYPE.STAR_SCALE && (\n <StarQuestionContainer>\n <StarQuestion\n value={question.answer}\n onChange={onQuestionChange}\n />\n </StarQuestionContainer>\n )}\n {question.type[0] === SURVEY_QUESTIONS_TYPE.SMILE_SCALE && (\n <SmileQuestionContainer>\n <SmileQuestion\n value={question.answer}\n onChange={onQuestionChange}\n />\n </SmileQuestionContainer>\n )}\n {question.type[0] === SURVEY_QUESTIONS_TYPE.JUST_OPTIONS &&\n question.options && (\n <NominalScaleQuestionContainer>\n <NominalScaleQuestion\n options={question.options}\n value={question.answer}\n onChange={onQuestionChange}\n />\n </NominalScaleQuestionContainer>\n )}\n {question.type[0] === SURVEY_QUESTIONS_TYPE.OPTIONS_AND_TEXT &&\n question.options && (\n <MixScaleQuestionContainer>\n <MixScaleQuestion\n options={question.options}\n value={question.answer}\n onChange={onQuestionChange}\n />\n </MixScaleQuestionContainer>\n )}\n {question.type[0] === SURVEY_QUESTIONS_TYPE.JUST_TEXT && (\n <OpenQuestionContainer>\n <OpenQuestion\n value={question.answer}\n onChange={onQuestionChange}\n />\n </OpenQuestionContainer>\n )}\n {question.showQuestionWarning && (\n <RequiredContainer>\n <WarningIconWrapper />\n <Required align=\"center\" mediumWeight>\n This question is required\n </Required>\n </RequiredContainer>\n )}\n </SecondaryContainer>\n </MainContainer>\n )\n}","import styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { Button } from 'boss-ui';\n\nconst BodyContainer = styled(Flex)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n padding-top: 30px;\n padding-bottom: 30px;\n font-weight: normal;\n border: 1px solid #81c784;\n width: 608px;\n min-height: 400px;\n align-items: center;\n max-width: 924px;\n flex-direction: column;\n height: 100%;\n ${(props) =>\n props.required &&\n css`\n border: 1px solid #e06c75;\n `}\n`;\nBodyContainer.displayName = 'Survey-BodyContainer';\n\nconst MainContainer = styled(Flex)`\n flex-direction: column;\n justifycontent: space-between;\n align-items: flex-start;\n padding-left: 60px;\n padding-right: 60px;\n width: 100%;\n`;\nMainContainer.displayName = 'Survey-MainContainer';\n\nconst SecondaryContainer = styled(Flex)`\n width: 100%;\n min-height: 480px;\n flex-direction: column;\n justify-content: space-between;\n`;\nSecondaryContainer.displayName = 'Survey-SecondaryContainer';\n\nconst TextIntroContainer = styled(Flex)`\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 20px;\n`;\nTextIntroContainer.displayName = 'Survey-TextIntroContainer';\n\nconst SubmitedSucess = styled(Flex)`\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 370px;\n font-size: 40px;\n color: #D0D0D0;\n margin-bottom: 23px;\n`;\nSubmitedSucess.displayName = 'Survey-SubmitedSucess';\n\nconst ActionsContainer = styled(Flex)`\n width: 100%;\n flex-direction: row;\n justify-content: ${props => props.showOnDismiss ? 'space-between' : 'flex-end'};\n align-items: center;\n margin-top: 25px;\n`;\nActionsContainer.displayName = 'Survey-ActionsContainer';\n\nconst PrevButton = styled(Button)`\n width: 100px;\n height: 40px;\n margin-right: 32px;\n`;\nPrevButton.displayName = 'Survey-PrevButton';\n\nconst SubmitButton = styled(Button)`\n width: 170px;\n height: 40px;\n`;\nSubmitButton.displayName = 'Survey-SubmitButton';\n\nconst NextButton = styled(Button)`\n width: 100px;\n height: 40px;\n`;\nNextButton.displayName = 'Survey-NextButton';\n\nexport {\n BodyContainer,\n MainContainer,\n SecondaryContainer,\n TextIntroContainer,\n SubmitedSucess,\n ActionsContainer,\n PrevButton,\n SubmitButton,\n NextButton,\n};","import React, { useState, useEffect, useCallback } from 'react';\nimport { Flex } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport get from 'lodash/get';\nimport { UnregularButton } from 'boss-ui';\nimport Api from '../../api';\nimport { onError } from '../../libs/error-lib';\nimport { isEmptyQuestion, checkIsPendingQuestions } from '../../libs/survey-lib';\nimport { SURVEY_QUESTIONS_TYPE, SURVEY_QUESTION_OPTION_OTHER } from '../../libs/constants';\nimport SurveyIntroduction from './SurveyIntroduction';\nimport QuestionContainer from './QuestionContainer';\nimport {\n BodyContainer,\n MainContainer,\n SecondaryContainer,\n TextIntroContainer,\n SubmitedSucess,\n ActionsContainer,\n PrevButton,\n NextButton,\n SubmitButton\n} from './styles';\n\nconst prepareAnswers = (answers) => {\n const tmpAnswers = [];\n for (let x = 0; x < answers.length; x++) {\n tmpAnswers[x] = {\n id: answers[x].id,\n name: answers[x].name,\n text: answers[x].text,\n type: answers[x].type,\n required: answers[x].required,\n options: answers[x].options ? answers[x].options : null,\n answer: answers[x].answer ? answers[x].answer : '',\n };\n // case OPTIONS_AND_TEXT is more complex to set answer, can set from options array or textarea\n if (answers[x].type[0] === SURVEY_QUESTIONS_TYPE.OPTIONS_AND_TEXT) {\n tmpAnswers[x].answer =\n answers[x].answer.option === SURVEY_QUESTION_OPTION_OTHER\n ? answers[x].answer.text\n : answers[x].answer.option;\n }\n }\n return tmpAnswers;\n};\n\nconst setOpacity = (answers, currentIndex = 0) => {\n if (answers && answers.length > 0) {\n const tmpAnswers = [...answers];\n for (let x = 0; x < tmpAnswers.length; x++) {\n tmpAnswers[x].opacity = 0;\n }\n if (currentIndex === 0 || currentIndex !== null) {\n tmpAnswers[currentIndex].opacity = 1;\n }\n return tmpAnswers;\n }\n return answers;\n};\n\nconst API = new Api();\n\nexport default function Survey({\n id,\n campaignId,\n name,\n description = '',\n questions = [],\n showOnDismiss = true,\n showTextIntro = true,\n scrolled = false,\n onDismiss,\n}) {\n const [loadingData, setLoadingData] = useState(false);\n const [answers, setAnswers] = useState(questions);\n const [currentIndex, setCurrentIndex] = useState(0);\n const [showIntro, setShowIntro] = useState(showTextIntro && !scrolled);\n const [submitSuccess, setSubmitSuccess] = useState(false);\n const [isPendingQuestions, setIsPendingQuestions] = useState(false);\n const history = useHistory();\n\n const onSubmitSurvey = async () => {\n setLoadingData(true);\n try {\n let url = `/user/surveys/${id}/submissions`;\n if (campaignId) {\n url += `?cid=${campaignId}`;\n }\n await API.post('users', url, {\n body: { name, description, questions: prepareAnswers(answers) },\n });\n setSubmitSuccess(true);\n if (showOnDismiss) {\n setTimeout(onDismiss, 1500);\n }\n } catch (e) {\n onError(e);\n } finally {\n setLoadingData(false);\n }\n };\n\n const setAnswerQuestion = (idx, answer) => {\n const tmpAnswers = [...answers];\n tmpAnswers[idx].answer = answer;\n tmpAnswers[idx].showQuestionWarning = false;\n // when you answer a single question and you arent on scroll mode, the container border must be green (not required warning).\n if (!scrolled) {\n setIsPendingQuestions(false);\n }\n // check if there is not some pending question to answer on scroll mode\n if (!checkIsPendingQuestions(tmpAnswers) && scrolled) {\n setIsPendingQuestions(false);\n }\n setAnswers(tmpAnswers);\n }\n\n const setShowQuestionWarning = (idx) => {\n const tmpAnswers = [...answers];\n if (idx || idx === 0) {\n tmpAnswers[idx].showQuestionWarning = true;\n } else {\n for (let x = 0; x < tmpAnswers.length; x++) {\n tmpAnswers[x].showQuestionWarning = isEmptyQuestion(tmpAnswers[x]);\n }\n }\n setAnswers(tmpAnswers);\n }\n\n const handleClickNext = useCallback(() => {\n if (isEmptyQuestion(answers[currentIndex])) {\n setShowQuestionWarning(currentIndex);\n setIsPendingQuestions(true);\n } else {\n setCurrentIndex(currentIndex + 1);\n }\n }, [answers, currentIndex]);\n\n const handleClickSubmit = useCallback(() => {\n if (checkIsPendingQuestions(answers)) {\n setShowQuestionWarning();\n setIsPendingQuestions(true);\n } else {\n setIsPendingQuestions(false);\n onSubmitSurvey();\n }\n }, [answers]);\n\n useEffect(() => {\n // for opacity effect on pagination only\n if (!scrolled && answers.length > 0) {\n setAnswers(setOpacity([...answers], null));\n setTimeout(() => {\n setAnswers(setOpacity([...answers], currentIndex));\n }, 100);\n }\n }, [currentIndex]);\n\n if (!id) {\n history.push('/');\n return null;\n }\n\n return (\n <BodyContainer required={isPendingQuestions}>\n {submitSuccess ? (\n <SubmitedSucess>Thank you!</SubmitedSucess>\n ) : (\n <>\n {showIntro ? (\n <SurveyIntroduction\n scrolled={scrolled}\n showOnDismiss={showOnDismiss}\n onDismiss={onDismiss}\n onNext={() => setShowIntro(false)}\n name={name}\n description={description} />\n ) : (\n <MainContainer>\n <SecondaryContainer>\n {scrolled && showTextIntro && (\n <TextIntroContainer>\n <SurveyIntroduction name={name} description={description} />\n </TextIntroContainer>\n )}\n {answers.map((question, idx) => {\n const key = get(question, 'name', idx);\n\n if (idx === currentIndex || scrolled) {\n return <QuestionContainer\n key={key}\n scrolled={scrolled}\n question={question}\n idx={idx}\n answers={answers}\n onAnswerQuestion={(idx, change) => setAnswerQuestion(idx, change)} />\n }\n })}\n <ActionsContainer showOnDismiss={showOnDismiss}>\n {showOnDismiss && (\n <UnregularButton id=\"test-Survey-ButtonDismiss\" onClick={onDismiss}>\n Dismiss Survey\n </UnregularButton>\n )}\n <Flex>\n {currentIndex > 0 && !scrolled && (\n <PrevButton\n onClick={() => setCurrentIndex(currentIndex - 1)}\n >\n {'< PREV'}\n </PrevButton>\n )}\n {currentIndex + 1 === answers.length || scrolled ? (\n <SubmitButton\n disabled={loadingData}\n onClick={handleClickSubmit}\n id=\"test-Survey-ButtonSubmit\"\n >\n SUBMIT SURVEY\n </SubmitButton>\n ) : (\n <>\n {!scrolled && (\n <NextButton\n onClick={handleClickNext}\n id=\"test-Survey-ButtonNext\"\n >\n {'NEXT >'}\n </NextButton>\n )}\n </>\n )}\n </Flex>\n </ActionsContainer>\n </SecondaryContainer>\n </MainContainer>\n )}\n </>\n )}\n </BodyContainer>\n );\n}\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport { Tooltip, PublicIcon, PrivateIcon } from 'boss-ui';\nimport { TEAM_VISIBILITY } from '../../libs/constants';\n\nconst PUBLIC_VISIBILITY_MESSAGE = `This team is public you can see its members clicking in the team's name`;\nconst PRIVATE_VISIBILITY_MESSAGE = `This team is private you can't see its members`;\n\nexport default function TeamMembersState(props) {\n const { team } = props;\n const teamMembersState =\n team.visibility === TEAM_VISIBILITY.PUBLIC\n ? {\n icon: <PublicIcon inverted invertedColor=\"#A5D6A7\" />,\n color: '#81a2be',\n tooltipMessage: PUBLIC_VISIBILITY_MESSAGE,\n }\n : {\n icon: <PrivateIcon inverted />,\n tooltipMessage: PRIVATE_VISIBILITY_MESSAGE,\n color: '#A0A0A0',\n };\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"flex-end\">\n <Flex\n mr=\"10px\"\n style={{\n color: teamMembersState.color,\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n whiteSpace: 'nowrap',\n }}\n >\n {team.numberOfParticipants ? `${team.numberOfParticipants} Members` : null}\n </Flex>\n <Flex data-tip data-for={`visibility-${team.teamId}`}>\n {teamMembersState.icon}\n </Flex>\n <Tooltip id={`visibility-${team.teamId}`} place=\"right\">\n {teamMembersState.tooltipMessage}\n </Tooltip>\n </Flex>\n );\n}\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport truncate from 'lodash/truncate';\nimport { LinkedText, UnregularButton, TeamIcon, Item, ListItem } from 'boss-ui';\nimport { useTheme } from 'styled-components';\nimport { TEAM_VISIBILITY, TEAM_ACCESSIBILITY } from '../../libs/constants';\nimport TeamMembersState from './TeamMembersState';\n\nconst TeamAccessibility = ({ team, onJoinTeam, isAnInvite }) => {\n const getAccessibility = () => {\n if (team.full) {\n return 'Team is full';\n }\n if (isAnInvite) {\n return (\n <Flex>\n <UnregularButton active onClick={onJoinTeam}>\n Join Team\n </UnregularButton>\n </Flex>\n );\n }\n switch (team.accessibility) {\n case TEAM_ACCESSIBILITY.CLOSED: {\n return null;\n }\n case TEAM_ACCESSIBILITY.OPEN: {\n return (\n <Flex>\n <UnregularButton active onClick={onJoinTeam}>\n Join Team\n </UnregularButton>\n </Flex>\n );\n }\n default:\n return null;\n }\n };\n\n return <Flex justifyContent=\"flex-end\">{getAccessibility()}</Flex>;\n};\n\nexport default function TeamListItem({\n mobile = false,\n item = {},\n onTeamClicked = () => {},\n onJoinTeam = () => {},\n transparentBackground = false,\n isAnInvite = false,\n}) {\n const themeColors = useTheme().color;\n\n if (mobile) {\n return (\n <Box width={1}>\n <Flex my=\"10px\" width={1} alignItems=\"center\">\n <ListItem>\n <Item noBorder width=\"20%\">\n <TeamIcon\n backgroundColor={\n transparentBackground ? themeColors.background : themeColors.form.background\n }\n />\n </Item>\n <Item noBorder width=\"80%\">\n <LinkedText onClick={onTeamClicked}>\n {truncate(item.name, { length: 19, omission: '...' })}\n </LinkedText>\n </Item>\n </ListItem>\n </Flex>\n <Flex\n noBorder\n width={1}\n alignItems=\"center\"\n style={{ borderBottom: '1px solid #2c2c2c' }}\n justifyContent=\"flex-end\"\n >\n <ListItem>\n <Item noBorder public={item.visibility === TEAM_VISIBILITY.PUBLIC} width=\"35%\" center>\n <TeamMembersState team={item} />\n </Item>\n <Item noBorder full={item.full} width=\"55%\">\n <TeamAccessibility team={item} onJoinTeam={onJoinTeam} isAnInvite={isAnInvite} />\n </Item>\n </ListItem>\n </Flex>\n </Box>\n );\n }\n\n return (\n <ListItem>\n <Item noBorder width=\"10%\">\n <TeamIcon\n backgroundColor={\n transparentBackground ? themeColors.background : themeColors.form.background\n }\n />\n </Item>\n <Item width=\"45%\">\n <LinkedText onClick={onTeamClicked}>\n {truncate(item.name, { length: 19, omission: '...' })}\n </LinkedText>\n </Item>\n <Item public={item.visibility === TEAM_VISIBILITY.PUBLIC} width=\"20%\" center>\n <TeamMembersState team={item} />\n </Item>\n <Item center full={item.full} width=\"25%\">\n <TeamAccessibility team={item} onJoinTeam={onJoinTeam} isAnInvite={isAnInvite} />\n </Item>\n </ListItem>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { TeamIcon, Item, ListItem } from 'boss-ui';\nimport { SKELTELON_STYLE } from '../../libs/constants';\n\nexport default function TeamListItemSkeleton({ mobile = false, transparentBackground = false }) {\n const themeColors = useTheme().color;\n\n return (\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <ListItem style={{ display: 'flex' }}>\n {!mobile && (\n <Item noBorder width=\"10%\">\n <TeamIcon\n backgroundColor={\n transparentBackground ? themeColors.background : themeColors.form.background\n }\n />\n </Item>\n )}\n <Item noBorder width=\"100%\">\n <Skeleton width=\"100%\" height=\"30px\" />\n </Item>\n </ListItem>\n </SkeletonTheme>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport toLower from 'lodash/toLower';\nimport cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport {\n ContextMenu,\n ContextMenuItem,\n LinkedText,\n RegularText,\n Table,\n TableBody,\n TableData,\n TableHead,\n TableHeader,\n TableItemSkeleton,\n TableRow,\n Tooltip,\n UnregularButton,\n InfoIcon,\n TreeDotsIcon,\n Can,\n} from 'boss-ui';\nimport { Flex } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport SearchUsers from '../SearchUsers';\nimport { TEAM_MEMBER_ROLE, USER_INVITE_STATE } from '../../libs/constants';\nimport { useAppContext } from '../../libs/context-lib';\nimport { rules } from '../../libs/roles-lib';\n\nfunction TeamMembersTable(props) {\n const {\n participants,\n setParticipants,\n initialNroCaptains,\n loadingParticipants,\n contextAction,\n handleModal,\n screenWidthSchema,\n isJoinView = false,\n } = props;\n const { event, user } = useAppContext();\n const [addUserModalVisible, setAddUserModalVisible] = useState(false);\n const [filteredParticipants, setFilterdParticipants] = useState([]);\n const [nroCaptains, setNroCaptains] = useState(initialNroCaptains);\n const history = useHistory();\n const canEditTeam = !event.isEventStarted || event.isEventRunning;\n\n const addMember = (newMember, role) => {\n if (role === TEAM_MEMBER_ROLE.CAPTAIN && user.state === USER_INVITE_STATE.ACCEPTED) {\n setNroCaptains(nroCaptains + 1);\n }\n setParticipants((members) => [\n ...members,\n { ...{ state: USER_INVITE_STATE.PENDING, dirty: true, ...newMember }, role },\n ]);\n };\n\n const removeTeamMember = (member) => {\n const teamMembers = cloneDeep(participants);\n const teamMember = find(\n teamMembers,\n (p) => p.userId === member.userId && p.state === member.state\n );\n if (!teamMember) {\n return;\n }\n if (\n teamMember.role === TEAM_MEMBER_ROLE.CAPTAIN &&\n teamMember.state === USER_INVITE_STATE.ACCEPTED\n ) {\n setNroCaptains(nroCaptains - 1);\n }\n if (teamMember.recentlyAdded) {\n setParticipants(teamMembers.filter((u) => u.userId !== teamMember.userId));\n } else {\n // if the user hasn't accepted the invitation invite should be canceled otherwise rejected\n teamMember.state =\n teamMember.state === USER_INVITE_STATE.PENDING\n ? USER_INVITE_STATE.REJECTED\n : USER_INVITE_STATE.CANCELLED;\n teamMember.dirty = true;\n setParticipants(teamMembers);\n }\n };\n\n const changeMemberRole = (member, role) => {\n const teamMembers = cloneDeep(participants);\n const teamMember = find(\n teamMembers,\n (p) => p.userId === member.userId && p.state === member.state\n );\n if (!teamMember) {\n return;\n }\n if (teamMember.state === USER_INVITE_STATE.ACCEPTED) {\n if (role === TEAM_MEMBER_ROLE.CAPTAIN) {\n setNroCaptains(nroCaptains + 1);\n } else {\n setNroCaptains(nroCaptains - 1);\n }\n }\n teamMember.role = role;\n teamMember.dirty = true;\n setParticipants(teamMembers);\n };\n\n const onRemoveMemberClick = (member) => {\n if (disableRemoveMember(member)) {\n return;\n }\n if (member.role === TEAM_MEMBER_ROLE.CAPTAIN) {\n if (nroCaptains > 1 || member.state === USER_INVITE_STATE.PENDING) {\n removeTeamMember(member);\n }\n } else {\n removeTeamMember(member);\n }\n };\n\n const onChangeRoleMemberClick = (member) => {\n if (member.role === TEAM_MEMBER_ROLE.CAPTAIN) {\n if (nroCaptains > 1 || member.state === USER_INVITE_STATE.PENDING) {\n changeMemberRole(member, TEAM_MEMBER_ROLE.REGULAR);\n }\n } else {\n changeMemberRole(member, TEAM_MEMBER_ROLE.CAPTAIN);\n }\n };\n\n const disableChangeMember = (member) => {\n if (member.role !== TEAM_MEMBER_ROLE.CAPTAIN) {\n return false;\n }\n if (member.state === USER_INVITE_STATE.ACCEPTED && (nroCaptains === 1 || member.creator)) {\n return true;\n }\n return false;\n };\n\n const disableRemoveMember = (member) => {\n if (member.role !== TEAM_MEMBER_ROLE.CAPTAIN) {\n return false;\n }\n if (member.state === USER_INVITE_STATE.ACCEPTED && (nroCaptains === 1 || member.creator)) {\n return true;\n }\n if (user.dynamoUser.userId === member.userId) {\n return true;\n }\n return false;\n };\n\n useEffect(() => {\n setFilterdParticipants(\n participants.filter(\n (p) => !(p.state === USER_INVITE_STATE.CANCELLED || p.state === USER_INVITE_STATE.REJECTED)\n )\n );\n }, [participants]);\n\n useEffect(() => {\n if (handleModal) {\n handleModal(addUserModalVisible);\n }\n }, [addUserModalVisible]);\n\n useEffect(() => {\n setNroCaptains(initialNroCaptains);\n }, [initialNroCaptains]);\n\n return (\n <>\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Members</TableHeader>\n <TableHeader>Role</TableHeader>\n <Can\n yes={() =>\n canEditTeam && !isJoinView ? (\n <TableHeader center width=\"5%\">\n <UnregularButton onClick={() => setAddUserModalVisible(true)} active>\n +\n </UnregularButton>\n </TableHeader>\n ) : (\n <TableHeader width=\"5%\" />\n )\n }\n data={user.userInTeam}\n perform={contextAction}\n role={user.role}\n rules={rules}\n />\n </TableRow>\n </TableHead>\n <TableBody>\n {loadingParticipants ? (\n <TableItemSkeleton numberOfCells={3} />\n ) : (\n filteredParticipants.map((member) => {\n const isCaptain = member.role === TEAM_MEMBER_ROLE.CAPTAIN;\n return (\n <TableRow captain={isCaptain} key={member.name}>\n <TableData>\n <Flex style={{ position: 'relative' }} alignItems=\"center\">\n {member.state === USER_INVITE_STATE.PENDING ? (\n <>\n <Flex\n alignItems=\"center\"\n data-tip\n data-for={member.name}\n style={{\n position: 'absolute',\n }}\n >\n {member.name}\n <Flex ml=\"6px\">\n <InfoIcon size=\"16px\" />\n </Flex>\n </Flex>\n <Tooltip id={member.name} place=\"right\">\n {member.name} has not confirmed yet\n </Tooltip>\n </>\n ) : (\n <RegularText mediumWeight fontSize=\"14px\">\n {member.name}\n </RegularText>\n )}\n </Flex>\n </TableData>\n <TableData>{toLower(member.role)}</TableData>\n <Can\n yes={() => (\n <TableData>\n {canEditTeam && !isJoinView && (\n <ContextMenu button={<TreeDotsIcon />}>\n <>\n <ContextMenuItem>\n <LinkedText\n disabled={disableRemoveMember(member)}\n onClick={() => onRemoveMemberClick(member)}\n >\n Remove {toLower(member.role)}\n </LinkedText>\n </ContextMenuItem>\n <ContextMenuItem>\n <LinkedText\n disabled={disableChangeMember(member)}\n onClick={() => onChangeRoleMemberClick(member)}\n >\n {isCaptain ? 'Demote to member' : 'Promote to captain'}\n </LinkedText>\n </ContextMenuItem>\n </>\n </ContextMenu>\n )}\n </TableData>\n )}\n data={user.userInTeam}\n perform={contextAction}\n role={user.role}\n rules={rules}\n />\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n\n {addUserModalVisible && (\n <SearchUsers\n onClose={() => setAddUserModalVisible(false)}\n event={event}\n participants={filteredParticipants}\n addParticipants={addMember}\n screenWidthSchema={screenWidthSchema}\n />\n )}\n </>\n );\n}\n\nexport default TeamMembersTable;\n","import React, { useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport truncate from 'lodash/truncate';\nimport { StyledText, FormLabel, Tooltip, CancelIcon, PencilIcon, InfoIcon, CheckIcon, TeamIcon } from 'boss-ui';\nimport FormInput from '../forms/FormInput';\nimport { TEAM_NAME_REGEXP } from '../../libs/constants';\n\nexport default function TeamNameBadge(props) {\n const [editionActive, activateEdition] = useState(false);\n const [saveHover, mouseHoverSave] = useState(false);\n const [cancelHover, mouseHoverCancel] = useState(false);\n const {\n name,\n editionAllowed,\n onNameChange,\n available,\n validating,\n onNameReset,\n onNameChanged,\n mobile,\n } = props;\n\n const validName = available && name.match(TEAM_NAME_REGEXP);\n\n return (\n <Flex alignItems={mobile ? 'flex-start' : 'center'} flexDirection={mobile ? 'column' : 'row'}>\n {!mobile && <TeamIcon size=\"100px\" backgroundColor=\"#535353\" />}\n {editionActive ? (\n <Box style={{ position: 'relative' }} width={mobile ? '90%' : '60%'}>\n <FormLabel>Team Name</FormLabel>\n <FormInput\n id=\"name\"\n autoFocus\n placeholder=\"Enter a name for your team\"\n value={name}\n onChange={onNameChange}\n validate={name}\n validating={validating}\n available={available}\n pattern={TEAM_NAME_REGEXP}\n unavailableMessage=\"This name was already taken!\"\n invalidPatternMessage=\"From 3 to 30 length, spaces, a-z, 0-9 and _ allowed\"\n validMessage=\"Team name is available\"\n />\n <Flex\n data-tip\n data-for=\"name_info\"\n style={{\n position: 'absolute',\n right: '-30px',\n top: '33px',\n }}\n >\n <InfoIcon />\n </Flex>\n <Tooltip id=\"name_info\" place=\"right\">\n The team name you choose will be visible to all other BOTS participants. You may wish to\n avoid identifying yourself or your organization by name! (3 characters at least,\n alphanumerics, spaces and underscores allowed)\n </Tooltip>\n </Box>\n ) : (\n <Flex ml=\"16px\">\n <StyledText size=\"40px\" light>\n {truncate(name, { length: 22, omission: '...' })}\n </StyledText>\n </Flex>\n )}\n {editionAllowed && (\n <Flex\n style={\n mobile\n ? {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n paddingRight: '10%',\n marginTop: '-30px',\n zIndex: '1',\n }\n : { marginLeft: 'auto' }\n }\n >\n {editionActive ? (\n <Flex>\n <Flex\n onMouseLeave={() => mouseHoverSave(false)}\n onMouseEnter={() => mouseHoverSave(true)}\n onClick={() => {\n if (validName && !validating) {\n onNameChanged();\n activateEdition(false);\n }\n }}\n >\n <CheckIcon hover={saveHover} disabled={!validName} />\n </Flex>\n <Flex\n ml=\"10px\"\n onMouseLeave={() => mouseHoverCancel(false)}\n onMouseEnter={() => mouseHoverCancel(true)}\n onClick={() => {\n onNameReset();\n activateEdition(false);\n }}\n >\n <CancelIcon hover={cancelHover} />\n </Flex>\n </Flex>\n ) : (\n <Flex\n onClick={() => activateEdition(true)}\n ml={mobile ? '10px' : ''}\n mt={mobile ? '-5px' : ''}\n >\n <PencilIcon />\n </Flex>\n )}\n </Flex>\n )}\n </Flex>\n );\n}\n","import React, { useMemo, useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport styled from 'styled-components';\nimport { Button, Modal, RegularText, StyledText, BotsIcon, BooIcon, Paginator, PublicIcon, PrivateIcon, OpenIcon, CloseIcon } from 'boss-ui';\nimport { BOTS_TYPE, DEFAULT_BOX_BORDER_STYLE } from '../../libs/constants';\nimport { getEventShortName } from '../../libs/event-lib';\n\nconst Image = styled.img`\n object-fit: cover;\n width: 100%;\n`;\n\nexport default function TeamWizardModal({\n onClose = () => {},\n eventType = BOTS_TYPE.SOC,\n mobile = false,\n}) {\n const [currentPage, setCurrentPage] = useState(0);\n const eventShortName = getEventShortName(eventType);\n const eventIcon = useMemo(\n () => (eventType === BOTS_TYPE.SOC ? <BotsIcon size={300} /> : <BooIcon size={200} />),\n [eventType]\n );\n\n const pages = [\n <>\n <Flex my=\"16px\">\n <StyledText light>Welcome to {eventShortName}!</StyledText>\n </Flex>\n <Flex>{eventIcon}</Flex>\n <Flex>\n <RegularText>\n For playing {eventShortName} you need to be part of a team. You can create your own team\n and send invites to your mates or join to a formed team.\n </RegularText>\n </Flex>\n </>,\n <>\n <Flex my=\"16px\">\n <StyledText light>Creating a new team</StyledText>\n </Flex>\n <Flex style={DEFAULT_BOX_BORDER_STYLE}>\n <Image src={`${process.env.PUBLIC_URL}/wizard_create_team_screen.png`} alt=\"create_team\" />\n </Flex>\n <Flex my=\"10px\">\n <RegularText>\n Go to the Team tab and choose to CREATE A NEW TEAM, think about the coolest name possible\n and then send invites to your friends. You can always change your team name or send other\n invites after creation\n </RegularText>\n </Flex>\n </>,\n <>\n <Flex my=\"16px\">\n <StyledText light>Joining a created team</StyledText>\n </Flex>\n <Flex style={DEFAULT_BOX_BORDER_STYLE}>\n <Image src={`${process.env.PUBLIC_URL}/wizard_join_team_screen.png`} alt=\"join_team\" />\n </Flex>\n <Flex my=\"10px\">\n <RegularText>\n Go to the Team tab and choose to JOIN A TEAM, search for a team by name. You can see the\n team formation as long as the team is public and / or join to the team if is open. You can\n also accept or reject invitations from here\n </RegularText>\n </Flex>\n <Flex width={1} mb=\"20px\">\n <Flex justifyContent=\"center\" alignItems=\"center\" width={1 / 4}>\n <OpenIcon inverted />\n <RegularText mediumWeight fontSize=\"11px\">\n Open team\n </RegularText>\n </Flex>\n <Flex justifyContent=\"center\" alignItems=\"center\" width={1 / 4}>\n <CloseIcon inverted />\n <RegularText mediumWeight fontSize=\"11px\">\n Closed team\n </RegularText>\n </Flex>\n <Flex justifyContent=\"center\" alignItems=\"center\" width={1 / 4}>\n <PublicIcon inverted />\n <RegularText mediumWeight fontSize=\"11px\">\n Public team\n </RegularText>\n </Flex>\n <Flex justifyContent=\"center\" alignItems=\"center\" width={1 / 4}>\n <PrivateIcon inverted />\n <RegularText mediumWeight fontSize=\"11px\">\n Private team\n </RegularText>\n </Flex>\n </Flex>\n </>,\n ];\n\n return (\n <Modal\n active\n onBackgroundClick={onClose}\n margin={mobile ? '10% 2% auto 2%' : '10% 25% 10% 25%'}\n hideScroll\n mobile={mobile}\n >\n <Flex\n p={mobile ? '10px' : '40px'}\n flexDirection=\"column\"\n alignItems=\"center\"\n backgroundColor=\"#1d1d1d\"\n >\n {pages[currentPage]}\n <Flex justifyContent=\"space-between\" width={1} alignItems=\"center\">\n <Box>\n <Button id=\"dismissBtn\" onClick={onClose} secondary>\n Dismiss\n </Button>\n </Box>\n <Paginator\n isNext={pages.length > currentPage + 1}\n onNext={() => setCurrentPage((current) => current + 1)}\n isPrev={currentPage > 0}\n onPrev={() => setCurrentPage((current) => current - 1)}\n />\n </Flex>\n </Flex>\n </Modal>\n );\n}\n","import styled from 'styled-components';\nimport { ToastContainer } from 'react-toastify';\n\nconst ToastContainerNotification = styled(ToastContainer)`\n .Toastify__toast-container {\n }\n .Toastify__toast {\n background: ${(props) => props.theme.color.toastNotification.toast.background};\n box-shadow: 0px 4px 10px ${(props) => props.theme.color.toastNotification.toast.boxShadow};\n }\n .Toastify__toast--error {\n justify-content: center;\n }\n .Toastify__toast--warning {\n }\n .Toastify__toast--success {\n }\n .Toastify__toast-body {\n }\n .Toastify__progress-bar {\n background: ${(props) => props.theme.color.toastNotification.progressBar.background};\n }\n`;\n\nexport default ToastContainerNotification;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst Button = styled.span`\n content: '';\n position: absolute;\n left: 2px;\n top: 2px;\n width: 18px;\n height: 18px;\n border-radius: 12px;\n transition: 0.2s;\n background: #d0d0d0;\n box-shadow: 0 0 2px 0 rgba(10, 10, 10, 0.29);\n`;\n\nconst Label = styled.label`\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n width: 38px;\n height: 22px;\n background: #535353;\n border-radius: 50px;\n position: relative;\n &:active ${Button} {\n width: 10px;\n }\n`;\n\nconst Input = styled.input`\n height: 0;\n width: 0;\n visibility: hidden;\n &:checked + ${Label} ${Button} {\n left: calc(100% - 2px);\n transform: translateX(-100%);\n }\n &:checked + ${Label} {\n background-color: #66bb6a;\n }\n`;\n\nexport default function ToggleButton({ isOn, onToggle }) {\n return (\n <Flex mx=\"5px\" align=\"center\" className=\"ToggleButton-FlexToggle\">\n <Input\n checked={isOn}\n onChange={onToggle}\n id=\"react-switch-new\"\n className=\"ToggleButton-Input\"\n type=\"checkbox\"\n />\n <Label htmlFor=\"react-switch-new\" id=\"labelToggleButton\">\n <Button />\n </Label>\n </Flex>\n );\n}\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { FormLabel, Tooltip, PublicIcon, PrivateIcon, SwitchButton, QuestionCircleIcon } from 'boss-ui';\n\nexport default function VisibilityToggle(props) {\n const { fieldValue, handleFieldChange } = props;\n return (\n <Box style={{ position: 'relative' }}>\n <FormLabel>Team Visibility</FormLabel>\n <SwitchButton\n checked={fieldValue}\n handleToggle={handleFieldChange}\n id=\"visibility\"\n onIcon={<PublicIcon />}\n offIcon={<PrivateIcon />}\n onText=\"Public\"\n offText=\"Private\"\n />\n <Flex\n data-tip\n data-for=\"visibility_question\"\n style={{\n position: 'absolute',\n right: '-30px',\n top: '26px',\n }}\n >\n <QuestionCircleIcon />\n </Flex>\n <Tooltip id=\"visibility_question\" place=\"right\">\n Set the team visibility to public if you want the team members' names to appear to others during the team formation process.\n </Tooltip>\n </Box>\n );\n}\n","import React, { useState, useMemo, useEffect } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport { withTheme } from 'styled-components';\nimport get from 'lodash/get';\nimport { LinkedText, Tabs } from 'boss-ui';\nimport Text from '../Text';\n\nconst TABS_LABELS = ['MORE INFO', 'RESOURCES', 'TRANSCRIPTION'];\n\nconst getTabsContent = (workshop, transcript = '', classLinks = [], colors) => ({\n 0: (\n <Box\n width={1}\n mt=\"20px\"\n style={{\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n textAlign: 'left',\n color: colors.regular,\n fontWeight: 400,\n wordBreak: 'break-all',\n }}\n >\n <>\n Access the <span style={{ color: colors.server }}>Splunk Server</span> to answer questions\n throughout this workshop, using the below shown{' '}\n <span style={{ color: colors.server }}>server</span> and{' '}\n <span style={{ color: colors.credentials }}>credentials:</span>\n </>\n <Box\n style={{ border: '1px solid #2C2C2C', wordBreak: 'break-all' }}\n my=\"16px\"\n width=\"400px\"\n p=\"16px\"\n >\n <p>\n SplunkServer:{' '}\n <span style={{ color: colors.server }}>\n <LinkedText onClick={() => window.open(get(workshop, 'serverUrl', ''), '_blank')}>\n {get(workshop, 'serverUrl', '-')}\n </LinkedText>\n </span>\n </p>\n <p>\n User ID:{' '}\n <span style={{ color: colors.credentials }}>{get(workshop, 'serverUsername', '-')}</span>\n </p>\n <p>\n Password:{' '}\n <span style={{ color: colors.credentials }}>{get(workshop, 'serverPassword', '-')}</span>\n </p>\n </Box>\n </Box>\n ),\n 1: (\n <Box\n width={1}\n mt=\"20px\"\n style={{\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n textAlign: 'left',\n color: colors.regular,\n fontWeight: 400,\n wordBreak: 'break-all',\n }}\n >\n {!!classLinks.length && <p>Links for further reading:</p>}\n {classLinks.map((link) => (\n <p key={link}>\n <LinkedText onClick={() => window.open(link, '_blank')} color={colors.links}>\n {link}\n </LinkedText>\n </p>\n ))}\n </Box>\n ),\n 2: (\n <Text p=\"0\" style={{ whiteSpace: 'pre-wrap' }}>\n {transcript}\n </Text>\n ),\n});\n\nfunction WorkshopAdditionalInfoMenu(props) {\n const { workshop, classTranscript, classLinks, theme } = props;\n const [currentTabIdx, setCurrentTabIdx] = useState(0);\n const [transcript, setTranscript] = useState('');\n\n const tabsContent = useMemo(\n () => getTabsContent(workshop, transcript, classLinks, theme.color.workshopAdditionalInfo),\n [workshop, transcript, classLinks, theme]\n );\n\n useEffect(() => {\n const getClassTranscript = async () => {\n try {\n if (!classTranscript || classTranscript.url === '') {\n setTranscript('');\n return;\n }\n const rq = await fetch(`${classTranscript.url}`, {\n headers: { 'Cache-Control': 'max-age=0, must-revalidate' },\n });\n if (rq.ok) {\n setTranscript(await rq.text());\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n };\n\n getClassTranscript();\n }, [classTranscript]);\n\n return (\n <Box px=\"24px\" minHeight=\"500px\">\n <Tabs current={currentTabIdx} onTabChange={setCurrentTabIdx} labels={TABS_LABELS} />\n <Flex mt=\"26px\">{tabsContent[currentTabIdx]}</Flex>\n </Box>\n );\n}\n\nexport default withTheme(WorkshopAdditionalInfoMenu);\n","import React, { useState, useEffect } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport styled, { css } from 'styled-components';\nimport { useHistory } from 'react-router-dom';\nimport { StyledText } from 'boss-ui';\nimport { ExpandIcon, CollapseIcon, CheckMark, TimerIcon } from '../icons';\n\nconst isVisibleSlug = (activeClassSlug, slug) => {\n if (activeClassSlug.indexOf(slug) > -1) {\n return true;\n }\n return false;\n};\n\nexport default function WorkshopContentMenu({ content, title, activeClassSlug, classesProgress }) {\n const { done, total, completed } = classesProgress;\n\n return (\n <>\n <Box pt=\"24px\" pb=\"12px\" px=\"20px\" style={{ borderBottom: 'solid 1px #2C2C2C' }}>\n <StyledText light size=\"20px\">\n {title}\n </StyledText>\n <Flex\n style={{\n borderTop: 'solid 1px #2C2C2C',\n color: '#81a2be',\n fontFamily: 'Roboto Mono',\n }}\n mt=\"12px\"\n py=\"6px\"\n alignItems=\"center\"\n >\n <TimerIcon />\n <Flex mx=\"3px\" />\n {Math.ceil((completed / total) * 100)}%\n </Flex>\n </Box>\n {content.map((c) => (\n <Flex my=\"2px\" style={{ fontFamily: 'Roboto Mono' }} width={1} key={c.slug}>\n <WorkshopTopic\n title={c.title}\n slug={c.slug}\n subTopics={c.children}\n activeClassSlug={activeClassSlug}\n classesDone={done}\n />\n </Flex>\n ))}\n </>\n );\n}\n\nconst WorkshopTopic = ({\n title = '',\n slug = '',\n subTopics,\n activeClassSlug = '',\n classesDone = [],\n innerLevel = 1,\n}) => {\n const history = useHistory();\n const [visible, setVisible] = useState(isVisibleSlug(activeClassSlug, slug));\n const menuPadding = 18 * innerLevel;\n\n useEffect(() => {\n setVisible(isVisibleSlug(activeClassSlug, slug));\n }, [activeClassSlug]);\n\n return (\n <Box width={1}>\n <TopicTitle\n visible={visible}\n onTitleClick={() => setVisible((visible) => !visible)}\n menuPadding={menuPadding}\n >\n {title}\n </TopicTitle>\n <Box>\n {visible &&\n subTopics.map((st) => {\n if (st.children.length) {\n return (\n <WorkshopTopic\n title={st.title}\n subTopics={st.children}\n activeClassSlug={activeClassSlug}\n key={st.slug}\n slug={st.slug}\n classesDone={classesDone}\n innerLevel={innerLevel + 1}\n />\n );\n }\n const classDone = classesDone[st.slug];\n return (\n <TopicChildren\n key={st.slug}\n isActive={st.slug === activeClassSlug}\n onClick={() => history.push(st.slug)}\n isDone={classDone}\n menuPadding={menuPadding}\n >\n {classDone && (\n <Box minWidth=\"24px\">\n <CheckMark />\n </Box>\n )}\n <Flex ml=\"6px\">{st.title}</Flex>\n </TopicChildren>\n );\n })}\n </Box>\n </Box>\n );\n};\n\nconst TopicTitle = ({ visible, children, onTitleClick, menuPadding }) => {\n return (\n <Flex\n style={{ color: '#DE935F', cursor: 'pointer', fontSize: '12px' }}\n onClick={onTitleClick}\n width={1}\n py=\"17px\"\n pr=\"20px\"\n pl={`${menuPadding}px`}\n >\n <Box minWidth=\"15px\">{visible ? <CollapseIcon /> : <ExpandIcon />}</Box>\n <Flex ml=\"4px\">{children}</Flex>\n </Flex>\n );\n};\n\nconst TopicChildren = styled.div`\n font-size: 12px;\n display: flex;\n align-items: center;\n color: ${(props) => props.theme.color.card.classic.description};\n text-align: left;\n font-weight: 300;\n padding: 17px 17px 17px 0px;\n padding-left: ${(props) => `${props.menuPadding + 15}px`};\n background-color: #252525;\n cursor: pointer;\n &:hover {\n background-color: #2c2c2c;\n }\n ${(props) =>\n props.isDone &&\n css`\n background-color: #1d1d1d;\n color: ${props.theme.color.breadcrumb.active};\n `}\n ${(props) =>\n props.isActive &&\n css`\n background-color: #2c2c2c;\n color: ${props.theme.color.breadcrumb.active};\n `}\n`;\n","import React from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport get from 'lodash/get';\nimport WorkshopContent from './WorkshopContent';\nimport { LinkedText, TabScreen } from 'boss-ui';\n\nconst PURPLE_COLOR = '#A088A4';\nconst GREEN_COLOR = '#61ADA1';\nconst BLUE_COLOR = '#81A2BE';\n\nconst getTabsNames = (workshop) => {\n const arrNames = [{ label: 'SUMMARY' }, { label: 'RESOURCES' }];\n if (workshop.linksList && workshop.linksList.list) {\n arrNames.push({ label: 'MORE INFO' });\n }\n return arrNames;\n};\n\nconst getTabsContent = (workshop, workshopLinks = { list: [] }) => ({\n 0: (\n <Flex width={1} mt=\"20px\" style={{ wordBreak: 'break-all' }}>\n <WorkshopContent content={workshop.content.workshop} />\n </Flex>\n ),\n 1: (\n <Box\n width={1}\n mt=\"20px\"\n style={{\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n textAlign: 'left',\n color: '#A0A0A0',\n fontWeight: 400,\n wordBreak: 'break-all',\n }}\n >\n <>\n Access the <span style={{ color: GREEN_COLOR }}>Splunk Server</span> to answer questions\n throughout this workshop, using the below shown{' '}\n <span style={{ color: GREEN_COLOR }}>server</span> and{' '}\n <span style={{ color: PURPLE_COLOR }}>credentials:</span>\n </>\n <Box style={{ border: '1px solid #2C2C2C', wordBreak: 'break-all' }} my=\"16px\" p=\"16px\">\n <p>\n SplunkServer:{' '}\n <span style={{ color: GREEN_COLOR }}>\n <LinkedText onClick={() => window.open(get(workshop, 'serverUrl', ''), '_blank')}>\n {get(workshop, 'serverUrl', '-')}\n </LinkedText>\n </span>\n </p>\n <p>\n User ID:{' '}\n <span style={{ color: PURPLE_COLOR }}>{get(workshop, 'serverUsername', '-')}</span>\n </p>\n <p>\n Password:{' '}\n <span style={{ color: PURPLE_COLOR }}>{get(workshop, 'serverPassword', '-')}</span>\n </p>\n </Box>\n </Box>\n ),\n 2: (\n <Box\n width={1}\n mt=\"20px\"\n style={{\n fontFamily: 'Roboto Mono',\n fontSize: '14px',\n textAlign: 'left',\n color: '#A0A0A0',\n fontWeight: 400,\n wordBreak: 'break-all',\n }}\n >\n <p>Links for further reading:</p>\n {workshopLinks.list.map((item) => {\n return (\n <p key={item.url}>\n <LinkedText onClick={() => window.open(item.url, '_blank')} color={BLUE_COLOR}>\n {item.title}\n </LinkedText>\n </p>\n );\n })}\n </Box>\n ),\n});\n\nexport default function WorkshopTabs({ workshop = {} }) {\n return (\n <Box mt=\"66px\" width={1}>\n <TabScreen\n tabs={getTabsNames(workshop)}\n tabsContent={getTabsContent(workshop, workshop.linksList)}\n />\n </Box>\n );\n}\n","import styled from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst ContainerEvtPlayerMobile = styled(Flex)`\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n height: 40px;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n border-top: 2px solid #121212;\n`;\nContainerEvtPlayerMobile.displayName = 'ContainerEvtPlayerMobile';\n\nexport default ContainerEvtPlayerMobile;\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport Media from 'react-media';\nimport { Box, Flex } from 'reflexbox';\nimport isEmpty from 'lodash/isEmpty';\nimport get from 'lodash/get';\nimport Api from '../../api';\nimport ContainerEvtPlayerMobile from '../ContainerEvtPlayerMobile';\nimport CountDown from '../CountDown';\nimport { FloatingPanel } from 'boss-ui';\nimport PointsCard from '../teams/PointsCard';\nimport {\n NAV_MOBILE_MAXWIDTH,\n EVENT_DELIVERY,\n DEFAULT_ON_DEMAND_EVENT_DURATION,\n ONE_MINUTE_MS,\n MAX_INT32,\n} from '../../libs/constants';\nimport { useAppContext } from '../../libs/context-lib';\nimport { isTodayAfterThan, isTodayBetween } from '../../libs/dates-lib';\nimport { onError } from '../../libs/error-lib';\n\nconst nowDate = new Date();\nconst API = new Api();\n\nexport default function EventFloatingBox({ isAdmin = false, hideScoring = false }) {\n const { event, setEvent, user } = useAppContext();\n const [teamPoints, setTeamPoints] = useState(0);\n const [loadingTeamPoints, setLoadingTeamPoints] = useState(false);\n const isOnDemandEvent = useMemo(\n () => event.delivery === EVENT_DELIVERY.ON_DEMAND,\n [event.delivery]\n );\n const userWithoutTeam = useMemo(() => isEmpty(user.userInTeam), [user.userInTeam]);\n\n const countDownStartDate = useMemo(() => {\n if (!isOnDemandEvent) {\n return event.startDate;\n }\n if (event.participant && event.participant.joinDate) {\n return event.participant.joinDate;\n }\n return nowDate;\n }, [isOnDemandEvent, event.startDate, event.participant]);\n\n const countDownEndDate = useMemo(() => {\n if (!isOnDemandEvent) {\n return event.endDate;\n }\n if (event.duration) {\n if (event.participant && event.participant.joinDate) {\n const joinDate = new Date(event.participant.joinDate);\n return new Date(joinDate.getTime() + event.duration * ONE_MINUTE_MS);\n }\n return new Date(nowDate.getTime() + event.duration * ONE_MINUTE_MS);\n }\n return new Date(nowDate.getTime() + DEFAULT_ON_DEMAND_EVENT_DURATION * ONE_MINUTE_MS);\n }, [isOnDemandEvent, event.endDate, event.participant, event.duration]);\n\n const getPoints = useCallback(async () => {\n setLoadingTeamPoints(true);\n try {\n const rq = await API.get('events', `/events/${event.eventId}/score`);\n setTeamPoints(get(rq, 'score.total', 0));\n } catch (e) {\n onError(e);\n } finally {\n setLoadingTeamPoints(false);\n }\n }, [event.eventId]);\n const shouldRenderPointsBox = !hideScoring && (!userWithoutTeam || isOnDemandEvent);\n\n useEffect(() => {\n if (isOnDemandEvent || !userWithoutTeam) {\n getPoints();\n }\n }, [getPoints, isOnDemandEvent, userWithoutTeam]);\n\n // set isEventRunning to false in order to block some UI actions\n useEffect(() => {\n const endDateInMs = new Date(countDownEndDate).getTime() - new Date().getTime();\n let eventRunningTimeout;\n // setTimeout limit is MAX_INT32 if end date in ms is bigger avoid timeout\n if (endDateInMs < MAX_INT32) {\n eventRunningTimeout = setTimeout(() => {\n console.log(\n `EVENT-END-TIMEOUT countDownEndDate: ${countDownEndDate}, isEventRunning: false, isEventEnded: true`\n );\n setEvent((e) => ({ ...e, isEventRunning: false, isEventEnded: true }));\n }, endDateInMs);\n }\n return () => clearTimeout(eventRunningTimeout);\n }, [countDownEndDate, setEvent]);\n\n // set isEventStarted to true in order to show up the scoring in the menu\n useEffect(() => {\n let startEventInterval;\n const startDateInMs = new Date(countDownStartDate).getTime() - new Date().getTime();\n // setTimeout limit is MAX_INT32 if start date in ms is bigger avoid timeout\n if (startDateInMs < MAX_INT32) {\n startEventInterval = setTimeout(() => {\n console.log(\n `EVENT-START-TIMEOUT countDownStartDate: ${countDownStartDate}, countDownEndDate: ${countDownEndDate}, isEventStarted: true, isEventRunning: ${isTodayBetween(\n countDownStartDate,\n countDownEndDate\n )}, isEventEnded: ${isTodayAfterThan(countDownEndDate)}`\n );\n setEvent((e) => ({\n ...e,\n isEventStarted: true,\n isEventRunning: isTodayBetween(countDownStartDate, countDownEndDate),\n isEventEnded: isTodayAfterThan(countDownEndDate),\n }));\n }, startDateInMs);\n }\n return () => clearTimeout(startEventInterval);\n }, [countDownStartDate, countDownEndDate, setEvent]);\n\n useEffect(() => {\n console.log(\n `EFFECT countDownStartDate: ${countDownStartDate}, countDownEndDate: ${countDownEndDate}, isEventStarted: ${isTodayAfterThan(\n countDownStartDate\n )}, isEventRunning: ${isTodayBetween(\n countDownStartDate,\n countDownEndDate\n )}, isEventEnded: ${isTodayAfterThan(countDownEndDate)}`\n );\n setEvent((e) => ({\n ...e,\n isEventRunning: isTodayBetween(countDownStartDate, countDownEndDate),\n isEventStarted: isTodayAfterThan(countDownStartDate),\n isEventEnded: isTodayAfterThan(countDownEndDate),\n }));\n }, [countDownStartDate, countDownEndDate, setEvent]);\n\n return (\n <Media query={`(max-width: ${NAV_MOBILE_MAXWIDTH})`}>\n {(mobileScreen) => (\n <>\n {mobileScreen ? (\n <ContainerEvtPlayerMobile>\n <Flex pl=\"12px\">\n <CountDown\n isAdminView={isAdmin}\n endDate={countDownEndDate}\n startDate={countDownStartDate}\n mobile\n />\n </Flex>\n <Flex style={{ minWidth: '185px' }}>\n {shouldRenderPointsBox && (\n <PointsCard\n showRefresh={event.isEventRunning}\n teamPoints={teamPoints}\n onRefresh={getPoints}\n loading={loadingTeamPoints}\n isOnDemandEvent={isOnDemandEvent}\n sessionId={get(event, 'participant.sessionId')}\n mobile\n />\n )}\n </Flex>\n </ContainerEvtPlayerMobile>\n ) : (\n <FloatingPanel>\n <Box style={{ position: 'fixed', top: '130px', zIndex: '100' }}>\n <CountDown\n isAdminView={isAdmin}\n endDate={countDownEndDate}\n startDate={countDownStartDate}\n />\n {shouldRenderPointsBox && (\n <PointsCard\n showRefresh={event.isEventRunning}\n teamPoints={teamPoints}\n onRefresh={getPoints}\n loading={loadingTeamPoints}\n isOnDemandEvent={isOnDemandEvent}\n sessionId={get(event, 'participant.sessionId')}\n />\n )}\n </Box>\n </FloatingPanel>\n )}\n </>\n )}\n </Media>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport Media from 'react-media';\n\nconst Container = styled(Flex)`\n border: 1px solid ${(props) => props.theme.color.messageCard.border};\n width: 100%;\n align-items: center;\n`;\n\nconst Image = styled.img`\n height: 200px;\n`;\n\nconst Message = styled(Flex)`\n font-size: 20px;\n font-family: 'Roboto Mono';\n font-weight: normal;\n color: ${(props) => props.theme.color.text.medium.color};\n text-align: left;\n overflow: hidden;\n font-weight: 300;\n`;\n\nexport default function MalloryMessage({ message }) {\n return (\n <Media query=\"(max-width:640px)\">\n {(matches) => (\n <Container flexDirection={matches ? 'column' : 'row'}>\n <Box ml={matches ? 0 : '50px'}>\n <Image\n src={`${process.env.PUBLIC_URL}/mallory_workshops_desktop@2x.png`}\n alt=\"mallory\"\n />\n </Box>\n <Message width={matches ? 1 : 3 / 4} p={matches ? '20px' : 0}>\n {message}\n </Message>\n </Container>\n )}\n </Media>\n );\n}\n","import React, { useState, useLayoutEffect } from 'react';\nimport trim from 'lodash/trim';\nimport { Flex, Box } from 'reflexbox';\nimport { Button, RegularText, LinkedText, FormLabel, Input, EVENT_QUESTION_STATUS } from 'boss-ui';\nimport { CheckMark } from '../icons';\nimport { useLocalStorage } from '../../libs/hooks-lib';\n\nconst AnswerCorrect = ({ answer }) => (\n <Flex alignItems=\"center\">\n <RegularText color=\"#81C784\" mediumWeight style={{ wordBreak: 'break-all' }}>\n {answer}\n </RegularText>\n <Flex minWidth=\"24px\">\n <CheckMark />\n </Flex>\n </Flex>\n);\n\nexport default function QuestionAnswer({\n localStorageId,\n isExternal,\n externalURL,\n isQuestionCorrect,\n lastQuestionAnswer,\n onSubmitAnswer,\n isSubmittingAnswer,\n}) {\n const [answerInput, setAnswerInput] = useLocalStorage(localStorageId, '');\n const [incorrectAnswer, setIncorrectAnswer] = useState(false);\n\n useLayoutEffect(() => {\n if (\n lastQuestionAnswer.state === EVENT_QUESTION_STATUS.INCORRECT &&\n !lastQuestionAnswer.isWebSocketAnswer\n ) {\n setIncorrectAnswer(true);\n }\n }, [lastQuestionAnswer]);\n\n const handleEnterSubmit = (e) => {\n if (e.key === 'Enter' && trim(answerInput) !== '') {\n onSubmitAnswer(answerInput);\n }\n };\n\n if (isExternal) {\n return isQuestionCorrect ? (\n <AnswerCorrect answer={lastQuestionAnswer.text} />\n ) : (\n <Flex mt=\"12px\" style={{ whiteSpace: 'break-spaces' }}>\n <RegularText>Answer this question in </RegularText>\n <RegularText>\n {externalURL ? (\n <LinkedText\n className=\"QuestionAnswerExternalURL\"\n onClick={() => window.open(externalURL, '_blank')}\n >\n this external server\n </LinkedText>\n ) : (\n 'the external server'\n )}\n </RegularText>\n </Flex>\n );\n }\n\n return (\n <Box mt=\"20px\">\n <Flex mb=\"4px\">\n <FormLabel>Answer</FormLabel>\n </Flex>\n <Flex alignItems=\"baseline\" width={1}>\n {isQuestionCorrect ? (\n <AnswerCorrect answer={lastQuestionAnswer.text} />\n ) : (\n <>\n <Input\n className=\"QuestionAnswerInputAnswer\"\n onChange={(e) => {\n setIncorrectAnswer(false);\n setAnswerInput(e.target.value);\n }}\n value={answerInput}\n placeholder=\"Enter your answer\"\n height=\"28px\"\n onKeyDown={handleEnterSubmit}\n id=\"QuestionAnswer-Input\"\n dangerBorder={incorrectAnswer}\n />\n <Box ml=\"6px\" width=\"200px\">\n <Button\n className=\"QuestionAnswerSubmitAnswer\"\n onClick={() => onSubmitAnswer(answerInput)}\n isLoading={isSubmittingAnswer}\n disabled={!answerInput.length || trim(answerInput) === ''}\n id=\"QuestionAnswer-Button\"\n >\n SUBMIT\n </Button>\n </Box>\n </>\n )}\n </Flex>\n </Box>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { CheckMark } from '../icons';\nimport { RegularText, CrossIcon, QuestionIcon as QuestionMark, EVENT_QUESTION_STATUS } from 'boss-ui';\n\nfunction QuestionState({ status, iconSize = 24 }) {\n const theme = useTheme();\n switch (status) {\n case EVENT_QUESTION_STATUS.CORRECT:\n return (\n <Flex alignItems=\"center\">\n <CheckMark size={iconSize} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.correct}>\n Correct\n </RegularText>\n </Flex>\n );\n case EVENT_QUESTION_STATUS.INCORRECT:\n return (\n <Flex alignItems=\"center\">\n <CrossIcon size={iconSize} color={theme.color.table.row.incorrect} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.incorrect}>\n Incorrect\n </RegularText>\n </Flex>\n );\n default:\n return (\n <Flex alignItems=\"center\">\n <QuestionMark size={iconSize} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.pending}>\n Not Answered\n </RegularText>\n </Flex>\n );\n }\n}\n\nexport default QuestionState;","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport format from 'date-fns/format';\nimport {\n RegularText,\n Modal,\n UnregularButton,\n Table,\n TableBody,\n TableRow,\n TableData,\n} from 'boss-ui';\nimport QuestionAnswerItem from './QuestionAnswerItem';\n\nconst Hint = ({ createdAt, username, score }) => {\n return (\n <Box p=\"4px\" style={{ whiteSpace: 'break-spaces' }}>\n <RegularText mediumWeight fontSize=\"13px\" mb=\"6px\">\n HINT PURCHASE{' '}\n </RegularText>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Time: </RegularText>\n <RegularText fontSize=\"12px\">{format(new Date(createdAt), 'PPpp')}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">User: </RegularText>\n <RegularText fontSize=\"12px\">{username}</RegularText>\n </Flex>\n <Flex mb=\"4px\" alignItems=\"center\">\n <RegularText fontSize=\"13px\">Hint cost: </RegularText>\n <RegularText fontSize=\"12px\">{score.total}</RegularText>\n </Flex>\n </Box>\n );\n};\n\nexport default function QuestionHistoryModal({ answers = [], onClose, questionId }) {\n return (\n <Modal margin=\"10% auto auto auto\" onBackgroundClick={onClose}>\n <Flex\n px=\"40px\"\n py=\"60px\"\n width=\"640px\"\n backgroundColor=\"#1D1D1D\"\n flexDirection=\"column\"\n maxHeight=\"360px\"\n >\n <Flex height=\"0px\">\n <Flex ml=\"auto\" style={{ position: 'relative', top: '-40px', left: '30px' }}>\n <UnregularButton onClick={onClose}>Close Details</UnregularButton>\n </Flex>\n </Flex>\n <Flex mb=\"8px\">\n <RegularText mediumWeight fontSize=\"14px\">\n #{questionId}\n </RegularText>\n </Flex>\n <RegularText fontSize=\"14px\">Question Activity</RegularText>\n <Flex style={{ overflowY: 'auto' }} mt=\"6px\">\n <Table>\n <TableBody>\n {answers.map((answer) => {\n return (\n <TableRow key={answer.createdAt}>\n <TableData>\n {answer.type === 'HINT' ? (\n <Hint {...answer} />\n ) : (\n <>\n <RegularText mediumWeight fontSize=\"13px\" mb=\"2px\" ml=\"4px\">\n ANSWER SUBMIT\n </RegularText>\n <QuestionAnswerItem {...answer} />\n </>\n )}\n </TableData>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </Flex>\n </Flex>\n </Modal>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport isEmpty from 'lodash/isEmpty';\nimport { ShakeContent } from 'boss-ui';\nimport { DEFAULT_BOX_BORDER_STYLE } from '../../libs/constants';\n\nconst Row = styled.tr`\n margin: 6px;\n height: 20px;\n ${(props) =>\n props.correct &&\n css`\n color: ${props.theme.color.table.row.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n color: ${props.theme.color.table.row.incorrect};\n `}\n`;\nconst Cell = styled.td`\n ${(props) =>\n props.right &&\n css`\n text-align: right;\n `}\n`;\nconst TableHead = styled.thead``;\nconst ScoreTable = styled.table`\n border: ${DEFAULT_BOX_BORDER_STYLE.border};\n font-family: 'Roboto Mono';\n font-size: 14px;\n color: ${(props) => props.theme.color.text.regular.color};\n border-collapse: collapse;\n white-space: nowrap;\n ${TableHead} {\n background-color: ${(props) => props.theme.color.table.header.background};\n color: ${(props) => props.theme.color.text.light.color};\n }\n ${Cell} {\n padding: ${(props) => props.theme.margin.xs};\n }\n`;\n\nconst EMPTY_ANSWER_SCORE = { total: 0, base: 0, bonus: 0, penalty: 0 };\n\nexport default function PointsTable({ score, shakeTotal }) {\n const { total, base, bonus, penalty } = isEmpty(score) ? EMPTY_ANSWER_SCORE : score;\n return (\n <ScoreTable>\n <TableHead>\n <Row>\n <Cell>Total Points:</Cell>\n <Cell right>\n <ShakeContent shake={shakeTotal} justifyContent=\"flex-end\">\n {total}\n </ShakeContent>\n </Cell>\n </Row>\n </TableHead>\n <tbody>\n <Row correct>\n <Cell>Base points:</Cell>\n <Cell right>{Math.round(base)}</Cell>\n </Row>\n <Row correct>\n <Cell>Bonus points:</Cell>\n <Cell right>{Math.round(bonus)}</Cell>\n </Row>\n <Row incorrect>\n <Cell>Penalty points:</Cell>\n <Cell right>{-Math.round(penalty)}</Cell>\n </Row>\n </tbody>\n </ScoreTable>\n );\n}\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { useTheme } from 'styled-components';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { \nCopyClipboardIcon, \nQuestionCircleIcon, \nTooltip, \nRegularText, \nLinkedText, \nContextMenu, \nContextMenuItem, \nCopyToClipboard,\n} \nfrom 'boss-ui';\nimport { DEFAULT_BOX_BORDER_STYLE, RESOURCES_COLORS } from '../libs/constants';\n\nconst showCredentials = (res) => {\n if (\n res.username !== undefined &&\n res.username !== null &&\n res.username !== '' &&\n res.password !== undefined &&\n res.password !== null &&\n res.password !== ''\n ) {\n return true;\n }\n return false;\n};\n\nexport default function ResourcesTable({\n loading = false,\n resources = [],\n ignoreTooltip = false,\n errorMsg = null,\n mobile,\n}) {\n const SKELETON_STYLE = {\n COLOR: useTheme().color.skeleton.color,\n EFFECT: useTheme().color.skeleton.highlightColor,\n }; \n let resourceBlock = null;\n\n if (!loading && errorMsg && errorMsg !== null) {\n resourceBlock = (\n <Flex style={DEFAULT_BOX_BORDER_STYLE} p=\"8px\" justifyContent=\"space-between\">\n <RegularText mediumWeight fontSize=\"14px\" color=\"#A0A0A0\">\n {errorMsg}\n </RegularText>\n </Flex>\n );\n } else if (!loading && errorMsg === null && resources) {\n resourceBlock = resources.map((resource, idx) => {\n const showCredentialsInTable = showCredentials(resource);\n return (\n <Flex\n style={DEFAULT_BOX_BORDER_STYLE}\n p=\"8px\"\n key={resource.name}\n className=\"ResourcesTable-resourceBox\"\n flexDirection={mobile ? 'column' : 'row'}\n alignItems={mobile ? 'flex-end' : ''}\n width={1}\n >\n <RegularText\n width={1}\n mediumWeight\n fontSize=\"14px\"\n color={RESOURCES_COLORS[idx]}\n textAlign=\"left\"\n style={{ wordBreak: 'break-all' }}\n >\n <LinkedText onClick={() => window.open(resource.instance_url, '_blank')}>\n {resource.instance_url}\n </LinkedText>\n </RegularText>\n <Flex justifyContent=\"flex-end\">\n {showCredentialsInTable ? (\n <Flex width={1}>\n {!mobile && (\n <RegularText\n mediumWeight\n mr=\"10px\"\n fontSize=\"14px\"\n style={{\n display: showCredentialsInTable ? '' : 'none',\n wordBreak: 'break-all',\n }}\n color=\"#A5D6A7\"\n textAlign=\"right\"\n className=\"ResourcesTable-credentials\"\n >\n {resource.username} / {resource.password}\n </RegularText>\n )}\n <Flex width=\"35px\">\n <ContextMenu width=\"20px\" mobile button={<CopyClipboardIcon />}>\n <ContextMenuItem>\n <Flex justifyContent=\"space-between\" width={1}>\n <RegularText mediumWeight fontSize=\"12px\" light>\n Username\n </RegularText>\n <CopyToClipboard value={resource.username} idx={idx} />\n </Flex>\n </ContextMenuItem>\n <ContextMenuItem>\n <Flex justifyContent=\"space-between\" width={1}>\n <RegularText mediumWeight fontSize=\"12px\" light>\n Password\n </RegularText>\n <CopyToClipboard value={resource.password} idx={idx} />\n </Flex>\n </ContextMenuItem>\n <ContextMenuItem>\n <Flex justifyContent=\"space-between\" width={1}>\n <RegularText mediumWeight fontSize=\"12px\" light>\n Url\n </RegularText>\n <CopyToClipboard value={resource.instance_url} idx={idx} />\n </Flex>\n </ContextMenuItem>\n </ContextMenu>\n </Flex>\n </Flex>\n ) : (\n <Flex width=\"33px\">\n <CopyToClipboard idx={idx} mobile={mobile} />\n </Flex>\n )}\n </Flex>\n </Flex>\n );\n });\n }\n\n return (\n <>\n <Flex mb=\"4px\" alignItems=\"center\">\n {!ignoreTooltip && (\n <>\n <Flex ml=\"6px\" data-tip data-for=\"resources\">\n <QuestionCircleIcon size=\"20px\" />\n </Flex>\n <Tooltip id=\"resources\" place=\"right\">\n Use these resources to complete the scenario. In light green the username/password to\n login to the server.\n </Tooltip>\n </>\n )}\n </Flex>\n <Box>\n {loading ? (\n <SkeletonTheme color={SKELETON_STYLE.COLOR} highlightColor={SKELETON_STYLE.EFFECT}>\n <Skeleton count={3} />\n </SkeletonTheme>\n ) : (\n resourceBlock\n )}\n </Box>\n </>\n );\n}\n","import React from 'react';\nimport styled, { css, withTheme } from 'styled-components';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { Flex } from 'reflexbox';\nimport { QuestionIcon as QuestionMark, CrossIcon } from 'boss-ui';\nimport { CheckMark } from '../icons';\nimport { DEFAULT_BOX_BORDER_STYLE, SKELTELON_STYLE } from '../../libs/constants';\n\nconst Row = styled.tr`\n margin: 6px;\n height: 20px;\n ${(props) =>\n props.correct &&\n css`\n color: ${props.theme.color.table.row.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n color: ${props.theme.color.table.row.incorrect};\n `}\n`;\n\nconst Cell = styled.td`\n ${(props) =>\n props.right &&\n css`\n text-align: right;\n `}\n`;\nconst TableHead = styled.thead``;\nconst Table = styled.table`\n border: ${DEFAULT_BOX_BORDER_STYLE.border};\n font-family: 'Roboto Mono';\n font-size: 14px;\n color: ${(props) => props.theme.color.text.regular.color};\n width: 200px;\n border-collapse: collapse;\n ${TableHead} {\n background-color: ${(props) => props.theme.color.table.header.background};\n color: ${(props) => props.theme.color.text.light.color};\n }\n ${Cell} {\n padding: ${(props) => props.theme.margin.xs};\n }\n`;\n\nconst IconInLine = ({ icon }) => <Flex mr=\"6px\">{icon}</Flex>;\nconst LoadingPoint = <Skeleton circle width=\"15px\" height=\"15px\" />;\n\nconst StatusTable = ({ loading, score = {}, theme }) => {\n const { total, unanswered, correct, incorrect } = score;\n return (\n <SkeletonTheme color={SKELTELON_STYLE.COLOR} highlightColor={SKELTELON_STYLE.EFFECT}>\n <Table>\n <TableHead>\n <Row>\n <Cell>Total Questions:</Cell>\n <Cell right> {loading ? LoadingPoint : total}</Cell>\n </Row>\n </TableHead>\n <tbody>\n <Row>\n <Cell>\n <Flex alignItems=\"center\">\n <IconInLine icon={<QuestionMark />} />\n Unanswered:\n </Flex>\n </Cell>\n <Cell right>{loading ? LoadingPoint : unanswered}</Cell>\n </Row>\n <Row correct>\n <Cell>\n <Flex alignItems=\"center\">\n <IconInLine icon={<CheckMark />} />\n Correct:\n </Flex>\n </Cell>\n <Cell right>{loading ? LoadingPoint : correct}</Cell>\n </Row>\n <Row incorrect>\n <Cell>\n <Flex alignItems=\"center\">\n <IconInLine icon={<CrossIcon color={theme.color.table.row.incorrect} />} />\n Incorrect:\n </Flex>\n </Cell>\n <Cell right>{loading ? LoadingPoint : incorrect}</Cell>\n </Row>\n </tbody>\n </Table>\n </SkeletonTheme>\n );\n};\n\nexport default withTheme(StatusTable);\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport { QuestionCard, QUESTION_CARD_DEFAULT_WIDTH } from 'boss-ui';\nimport QuestionBigCard from './QuestionBigCard';\n\nconst getGridConfiguration = (matches) => {\n if (matches.s) {\n return '1fr';\n }\n if (matches.xl) {\n return '1fr 1fr 1fr';\n }\n return `${QUESTION_CARD_DEFAULT_WIDTH} ${QUESTION_CARD_DEFAULT_WIDTH}`;\n};\n\nexport default function QuestionsGrid({\n questions,\n onQuestionCardClick = () => {},\n onQuestionCardClosed = () => {},\n onQuestionRemoved = () => {},\n focusedQuestionId,\n removingQuestionId,\n questionNavigation,\n isEditionView = false,\n}) {\n return (\n <Media\n queries={{\n s: '(max-width: 1000px)',\n m: '(max-width: 1290px)',\n l: '(max-width: 1540px)',\n xl: '(min-width: 1880px)',\n }}\n >\n {(matches) => (\n <Flex\n style={{\n display: 'grid',\n gridTemplateColumns: getGridConfiguration(matches),\n gridGap: '22px',\n gridAutoFlow: 'dense',\n }}\n className=\"ScenarioQuestions-Questions\"\n >\n {questions.map((q, idx) => {\n const isSelected = focusedQuestionId === q.question.question_id;\n const isQuestionBeingRemoving = removingQuestionId === q.question.question_id;\n return (\n <React.Fragment key={q.question.question_id}>\n <QuestionCard\n selectedCard={isSelected}\n question={q.question}\n answer={q.answer}\n points={q.total}\n onSelectCard={() => onQuestionCardClick(q.question)}\n isEditionView={isEditionView}\n onRemoveQuestion={() => onQuestionRemoved(q.question.question_id)}\n removingQuestion={isQuestionBeingRemoving}\n />\n {isSelected &&\n <QuestionBigCard\n question={q.question}\n answer={q.answer}\n points={q.total}\n media={matches}\n onCloseCard={onQuestionCardClosed}\n gridNavigation={questionNavigation(idx)}\n />\n }\n </React.Fragment>\n );\n })}\n </Flex>\n )}\n </Media>\n );\n}\n","import React from 'react';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport { QuestionInLine } from 'boss-ui';\nimport QuestionBigCard from './QuestionBigCard';\n\nexport default function ScenarioQuestions({\n questions,\n onQuestionCardClick = () => {},\n onQuestionCardClosed = () => {},\n onQuestionRemoved = () => {},\n focusedQuestionId,\n removingQuestionId,\n questionNavigation,\n isEditionView = false,\n}) {\n return (\n <Media\n queries={{\n s: '(max-width: 1000px)',\n m: '(max-width: 1290px)',\n l: '(max-width: 1540px)',\n xl: '(min-width: 1880px)',\n }}\n >\n {(matches) => (\n <Flex width={1} flexDirection=\"column\">\n {questions.map((q, idx) => {\n const isSelected = focusedQuestionId === q.question.question_id;\n const isQuestionBeingRemoving = removingQuestionId === q.question.question_id;\n return (\n <React.Fragment key={q.question.question_id}>\n <QuestionInLine\n selectedCard={isSelected}\n question={q.question}\n answer={q.answer}\n points={q.total}\n onSelectCard={() => onQuestionCardClick(q.question)}\n isEditionView={isEditionView}\n onRemoveQuestion={() => onQuestionRemoved(q.question.question_id)}\n removingQuestion={isQuestionBeingRemoving}\n />\n {isSelected &&\n <QuestionBigCard\n question={q.question}\n answer={q.answer}\n points={q.total}\n media={matches}\n onCloseCard={onQuestionCardClosed}\n gridNavigation={questionNavigation(idx)}\n />\n }\n </React.Fragment>\n );\n })}\n </Flex>\n )}\n </Media>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex } from 'reflexbox';\nimport { GridIcon, ListIcon } from 'boss-ui';\nimport { DISPLAY_QUESTIONS_MODE } from '../../libs/constants';\n\nexport default function ScenarioQuestionsDisplaySelector({ onSelected, selected }) {\n const [listHover, setListHover] = useState(false);\n const [gridHover, setGridHover] = useState(false);\n return (\n <Flex ml=\"auto\" width=\"60px\" justifyContent=\"space-between\">\n <Flex\n onMouseEnter={() => setListHover(true)}\n onMouseLeave={() => setListHover(false)}\n onClick={() => onSelected(DISPLAY_QUESTIONS_MODE.LIST)}\n className=\"ScenarioQuestionsDisplaySelector-ListIcon\"\n >\n <ListIcon hover={listHover} selected={selected === DISPLAY_QUESTIONS_MODE.LIST} />\n </Flex>\n <Flex\n onMouseOver={() => setGridHover(true)}\n onMouseLeave={() => setGridHover(false)}\n onClick={() => onSelected(DISPLAY_QUESTIONS_MODE.GRID)}\n className=\"ScenarioQuestionsDisplaySelector-GridIcon\"\n >\n <GridIcon hover={gridHover} selected={selected === DISPLAY_QUESTIONS_MODE.GRID} />\n </Flex>\n </Flex>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport intersectionBy from 'lodash/intersectionBy';\nimport isEmpty from 'lodash/isEmpty';\nimport QuestionsGrid from './QuestionsGrid';\nimport QuestionsList from './QuestionsList';\nimport {\n RegularText,\n Select,\n QuestionCardSkeleton,\n QuestionInlineSkeleton,\n EVENT_QUESTION_STATUS,\n} from 'boss-ui';\nimport { DISPLAY_QUESTIONS_MODE } from '../../libs/constants';\nimport WebSocketClient from '../websocket';\nimport { updateQuestionBy, updateQuestionByWS } from '../../libs/question-lib';\nimport { useScenarioContext } from '../../libs/context-lib';\nimport { useLocalStorage } from '../../libs/hooks-lib';\nimport Api from '../../api';\nimport ScenarioQuestionsDisplaySelector from './ScenarioQuestionsDisplaySelector';\n\nconst wsClient = new WebSocketClient({ customMessageEvents: ['TEAM_ANSWER_UPDATE'] });\n\nconst SELECT_FILTER_OPTIONS = [\n { value: 'ALL', label: 'Show All' },\n { value: 'INCORRECT', label: 'Attempted' },\n { value: 'CORRECT', label: 'Answered Correctly' },\n { value: 'PENDING', label: 'Not Answered' },\n];\n\nconst filterQuestionsByState = (state, questions) => {\n if (state === 'ALL') {\n return questions;\n }\n return questions.filter((q) => {\n if (state === EVENT_QUESTION_STATUS.PENDING && isEmpty(q.answer)) {\n return true;\n }\n if (q.answer && state === q.answer.state) {\n return true;\n }\n return false;\n });\n};\n\nconst API = new Api();\n\nexport default function ScenarioQuestions() {\n const { setScenarioQuestions, scenarioQuestions, loadingScenario, currentScenario } =\n useScenarioContext();\n const [focusedQuestionId, setFocusedQuestionId] = useState(null);\n const [filterQuestionValue, setFilterQuestionsValue] = useState(SELECT_FILTER_OPTIONS[0]);\n const [filterdScenarioQuestions, setFilteredScenarioQuestions] = useState(scenarioQuestions);\n const [displayMode, setDisplayMode] = useLocalStorage(\n `${currentScenario.scenarioId}-display`,\n DISPLAY_QUESTIONS_MODE.GRID\n );\n\n const onQuestionCardClick = (question) => {\n const questionId = question.question_id;\n if (focusedQuestionId === questionId) {\n setFocusedQuestionId(null);\n } else {\n setFocusedQuestionId(questionId);\n }\n };\n\n const onFilterChange = (selected) => {\n setFilterQuestionsValue(selected);\n setFilteredScenarioQuestions(filterQuestionsByState(selected.value, scenarioQuestions));\n };\n\n const getQuestionNavigation = useCallback(\n (questionIndex) => ({\n goNext: () =>\n setFocusedQuestionId(filterdScenarioQuestions[questionIndex + 1].question.question_id),\n goPrev: () =>\n setFocusedQuestionId(filterdScenarioQuestions[questionIndex - 1].question.question_id),\n isNext: questionIndex + 1 < filterdScenarioQuestions.length,\n isPrev: questionIndex > 0,\n }),\n [filterdScenarioQuestions]\n );\n\n /*\n When the source list changes or the selected card does, \n update the grid with the filtered values only if there is no selected card,\n */\n useEffect(() => {\n if (!focusedQuestionId) {\n setFilteredScenarioQuestions(\n filterQuestionsByState(filterQuestionValue.value, scenarioQuestions)\n );\n }\n }, [focusedQuestionId, scenarioQuestions]);\n\n /*\n Updates the grid with the updated values only if there is a selected card\n */\n useEffect(() => {\n if (focusedQuestionId) {\n setFilteredScenarioQuestions((filterdScenarioQuestions) =>\n intersectionBy(scenarioQuestions, filterdScenarioQuestions, 'question.question_id')\n );\n }\n }, [scenarioQuestions]);\n\n const answerUpdateHandler = useCallback(\n async (update) => {\n const { questionId, scenarioId, eventId } = update;\n if (currentScenario?.scenarioId === scenarioId) {\n const updatedQuestion = await API.get(\n 'users',\n `/user/events/${eventId}/scenarios/${scenarioId}/questions/${questionId}`\n );\n setScenarioQuestions(\n updateQuestionBy(\n scenarioQuestions,\n updatedQuestion.question,\n questionId,\n updateQuestionByWS\n )\n );\n }\n },\n [scenarioQuestions, currentScenario?.scenarioId, setScenarioQuestions]\n );\n\n useEffect(() => {\n wsClient.on('TEAM_ANSWER_UPDATE', answerUpdateHandler);\n return () => wsClient.removeListener('TEAM_ANSWER_UPDATE', answerUpdateHandler);\n }, [answerUpdateHandler]);\n\n // Clean focused question if scenario is changed\n useEffect(() => {\n setFocusedQuestionId(null);\n }, [currentScenario.scenarioId]);\n\n return (\n <Flex flexDirection=\"column\" width={1}>\n <Flex alignItems=\"center\">\n <Box my=\"12px\" width=\"300px\">\n <Flex>\n <RegularText fontSize=\"14px\">Filter by:</RegularText>\n </Flex>\n <Select\n value={filterQuestionValue}\n onChange={onFilterChange}\n options={SELECT_FILTER_OPTIONS}\n />\n </Box>\n <ScenarioQuestionsDisplaySelector\n onSelected={(v) => setDisplayMode(v)}\n selected={displayMode}\n />\n </Flex>\n <Flex justifyContent=\"center\">\n {loadingScenario ? (\n displayMode === DISPLAY_QUESTIONS_MODE.GRID ? (\n <QuestionCardSkeleton />\n ) : (\n <QuestionInlineSkeleton />\n )\n ) : displayMode === DISPLAY_QUESTIONS_MODE.GRID ? (\n <QuestionsGrid\n questions={filterdScenarioQuestions}\n onQuestionCardClick={onQuestionCardClick}\n onQuestionCardClosed={() => setFocusedQuestionId(null)}\n focusedQuestionId={focusedQuestionId}\n questionNavigation={getQuestionNavigation}\n />\n ) : (\n <QuestionsList\n questions={filterdScenarioQuestions}\n onQuestionCardClick={onQuestionCardClick}\n onQuestionCardClosed={() => setFocusedQuestionId(null)}\n focusedQuestionId={focusedQuestionId}\n questionNavigation={getQuestionNavigation}\n />\n )}\n </Flex>\n </Flex>\n );\n}\n","import React, { useEffect } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport differenceInMilliseconds from 'date-fns/differenceInMilliseconds';\nimport { DEFAULT_BOX_BORDER_STYLE } from '../../libs/constants';\nimport { Tooltip, RegularText, InfoIcon } from 'boss-ui';\nimport { getHourMinuteDifference } from '../../libs/dates-lib';\n\nconst formatReleaseDate = (releaseTime) => {\n if (releaseTime.minutes > 1) {\n if (releaseTime.hour === 0) {\n return `${releaseTime.minutes} minutes`;\n }\n if (releaseTime.hour > 1) {\n return `${releaseTime.hour} hours and ${releaseTime.minutes} minutes`;\n }\n return `${releaseTime.hour} hour and ${releaseTime.minutes} minutes`;\n }\n if (releaseTime.hour === 0) {\n return `${releaseTime.minutes} minute`;\n }\n if (releaseTime.hour > 1) {\n return `${releaseTime.hour} hours and ${releaseTime.minutes} minute`;\n }\n return `${releaseTime.hour} hour and ${releaseTime.minutes} minute`;\n};\n\nexport default function TimeBasedHint({ hints = [], totalHints, onRefreshHintsList }) {\n let releaseTimeOut;\n useEffect(() => {\n // avoid process if there is no hints\n if (hints.length) {\n // get the activation date of the closest one\n const firstHintToRelease = hints.reduce((selectedCandidate, candidate) => {\n const closest = new Date(selectedCandidate.activation);\n const closestCandidate = new Date(candidate.activation);\n const now = new Date();\n if (closest < now) {\n return candidate;\n }\n if (closest > closestCandidate && closestCandidate > now) {\n return candidate;\n }\n return selectedCandidate;\n });\n const distanceToReleace = differenceInMilliseconds(\n new Date(firstHintToRelease.activation),\n new Date()\n );\n if (distanceToReleace) {\n releaseTimeOut = setTimeout(() => onRefreshHintsList(), distanceToReleace);\n }\n }\n return () => clearTimeout(releaseTimeOut);\n }, []);\n\n return (\n <>\n <Flex mb=\"4px\">\n <RegularText mediumWeight fontSize=\"14px\">\n {`Hints [${totalHints}]`}\n </RegularText>\n <Flex data-tip data-for=\"hints\" ml=\"6px\">\n <InfoIcon />\n <Tooltip id=\"hints\">The hints will be released as time goes by..</Tooltip>\n </Flex>\n </Flex>\n {hints.map((hint) => (\n <Box p=\"10px\" style={DEFAULT_BOX_BORDER_STYLE} key={hint.hint_id}>\n {hint.hint ? (\n <RegularText fontSize=\"14px\" color=\"#E5C07B\">\n {hint.hint}\n </RegularText>\n ) : (\n <RegularText fontSize=\"14px\">\n Hint will be released in{' '}\n {formatReleaseDate(getHourMinuteDifference(new Date(hint.activation), new Date()))}\n </RegularText>\n )}\n </Box>\n ))}\n </>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport { DEFAULT_BOX_BORDER_STYLE } from '../../libs/constants';\nimport { ConfirmationModal, Tooltip, RegularText, UnregularButton, InfoIcon } from 'boss-ui';\n\nexport default function BuyBasedHint({ hints = [], totalHints, onBuyHint, active = true }) {\n const [hintBuyInformation, setHintBuyInformation] = useState(null);\n const [loading, setLoading] = useState(false);\n const numberVisibleHints = useMemo(\n () => hints.reduce((sum, hint) => (hint.hint ? sum + 1 : sum), 0),\n [hints]\n );\n\n const buyHint = async () => {\n setLoading(true);\n await onBuyHint(hintBuyInformation.hint_id);\n setHintBuyInformation(null);\n setLoading(false);\n };\n\n return (\n <>\n {hintBuyInformation && (\n <ConfirmationModal\n onAccept={buyHint}\n onCancel={() => setHintBuyInformation(null)}\n loading={loading}\n acceptLabel=\"PURCHASE\"\n >\n <Flex width=\"300px\" alignItems=\"center\" flexDirection=\"column\">\n <RegularText light>Purchase hint?</RegularText>\n <RegularText light>Cost: {hintBuyInformation.hint_cost}</RegularText>\n </Flex>\n </ConfirmationModal>\n )}\n <Flex mb=\"4px\">\n <RegularText mediumWeight fontSize=\"14px\">\n {`Hints purchased [${numberVisibleHints} / ${totalHints}]`}\n </RegularText>\n <Flex data-tip data-for=\"hints\" ml=\"6px\">\n <InfoIcon />\n <Tooltip id=\"hints\">Buy hints using your team points..</Tooltip>\n </Flex>\n </Flex>\n {hints.map((hint) => (\n <Flex width={1} key={hint.hint_id}>\n <Box p=\"10px\" style={DEFAULT_BOX_BORDER_STYLE} width={1 / 5}>\n <RegularText color={hint.hint ? '#E06C75' : '#D0D0D0'} fontSize=\"14px\">\n - {hint.hint_cost} points\n </RegularText>\n </Box>\n <Box p=\"10px\" style={DEFAULT_BOX_BORDER_STYLE} width={4 / 5}>\n <RegularText fontSize=\"14px\" color=\"#E5C07B\">\n {hint.hint ? (\n hint.hint\n ) : (\n <UnregularButton\n onClick={() => {\n setHintBuyInformation(hint);\n }}\n disabled={!active}\n >\n Purchase Hint\n </UnregularButton>\n )}\n </RegularText>\n </Box>\n </Flex>\n ))}\n </>\n );\n}\n","import React from 'react';\nimport { SCENARIO_HINTS_STRATEGIES } from '../../libs/constants';\nimport TimeBasedHint from './TimeBasedHint';\nimport BuyBasedHint from './BuyBasedHint';\n\nexport default function HintsTable(props) {\n return props.hintsStrategy === SCENARIO_HINTS_STRATEGIES.TIME ? (\n <TimeBasedHint {...props} />\n ) : (\n <BuyBasedHint {...props} />\n );\n}\n","import endsWith from 'lodash/endsWith';\nimport get from 'lodash/get';\nimport { Auth, Signer } from 'aws-amplify';\nimport { BOTS_TYPE, NUMBERS } from './constants';\nimport config from './../config';\n\nconst DOMAINS = [\n { domain: 'bots', type: BOTS_TYPE.SOC },\n { domain: 'boo', type: BOTS_TYPE.NOC },\n { domain: 'botn', type: BOTS_TYPE.NOC },\n { domain: 'playbots', type: BOTS_TYPE.SOC },\n { domain: 'playbotn', type: BOTS_TYPE.NOC },\n { domain: 'localhost', type: BOTS_TYPE.SOC },\n];\n\nexport const getAppType = () => {\n let type = BOTS_TYPE.SOC;\n DOMAINS.forEach((d) => {\n if (config.appType.includes(d.domain)) {\n type = d.type;\n }\n });\n return type;\n};\n\nexport const setUserHeaders = (loggedUser = {}) => {\n try {\n window.user = {\n email: get(loggedUser, 'dynamoUser.email'),\n displayName: get(loggedUser, 'dynamoUser.displayName'),\n userName: loggedUser.username,\n };\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Unable to set user headers', e);\n }\n};\n\nexport const deleteUserHeaders = () => delete window.user;\n\nexport const getImageURLSized = (url, size) => {\n switch (size) {\n case 'small': {\n return `https:${url}?fit=fill&w=330&h=186`;\n }\n case 'medium': {\n return `https:${url}?fit=fill&w=550&h=310`;\n }\n case 'large': {\n return `https:${url}?fit=fill&w=766&h=432`;\n }\n default:\n return `https:${url}?fit=fill&w=330`;\n }\n};\n\nexport const getFaviconEl = () => document.getElementById('favicon');\n\nexport function removePlural(string) {\n if (endsWith(string, 's')) {\n return string.substr(NUMBERS.ZERO, string.length - NUMBERS.ONE);\n }\n return string;\n}\n\nexport function reloadPage() {\n window.location.reload();\n}\n\nexport function sendWarning(text = '', reloadpage = false) {\n console.warn(text);\n if (reloadpage) {\n setTimeout(() => {\n reloadPage();\n }, 600);\n }\n}\n\nexport const isValidPattern = (text, pattern) => {\n return pattern.test(text);\n};\n\nexport function isNumeric(value) {\n return /^\\d+$/.test(value);\n}\n\nexport function parseJwt(token) {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map(function (c) {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join('')\n );\n\n return JSON.parse(jsonPayload);\n}\n\nexport function getHashObjectInURL(location) {\n const lochash = location.hash.substr(1);\n const paramMap = {};\n lochash.split('&').reduce((o, current) => {\n const split = current.split('=');\n o[split[0]] = split[1];\n return o;\n }, paramMap);\n return paramMap;\n}\n\nexport function scrollToHash(location) {\n const hash = location.hash;\n if (hash) {\n const element = document.getElementById(hash.split('#').join(''));\n if (element) {\n window.scroll({ top: element.offsetTop - 115 });\n return;\n }\n }\n // If element not present, scroll to the top\n window.scrollTo(0, 0);\n}\n\n// sign a request using Amplify Auth and Signer\nexport async function signRequest(params) {\n const essentialCredentials = Auth.essentialCredentials(await Auth.currentCredentials());\n\n const credentials = {\n secret_key: essentialCredentials.secretAccessKey,\n access_key: essentialCredentials.accessKeyId,\n session_token: essentialCredentials.sessionToken,\n };\n // Signer.signUrl returns a Signature V4 signed URL\n return Signer.signUrl(params, credentials);\n}\n\nexport function formDataBody(json) {\n const props = Object.keys(json);\n return props\n .map((prop) => `${encodeURIComponent(prop)}=${encodeURIComponent(json[prop])}`)\n .join('&');\n}\n/**\n * Use this function in order to be able to mock the Date() constructor it for testing\n * @param {...any} args\n * @returns Date: new Date(args)\n */\nexport function getNewDate(...args) {\n return new Date(...args);\n}\n\nexport const promiseToObject = (promise) => {\n return promise\n .then((result) => ({ success: true, result }))\n .catch((error) => ({ success: false, error }));\n};\n\nexport const setSessionStorageItem = (eventId, data) => {\n sessionStorage.setItem(`data2Import${eventId}`, JSON.stringify(data));\n};\n\nexport const removeSessionStorageItem = (eventId) => {\n sessionStorage.removeItem(`data2Import${eventId}`);\n};\n\nexport const getSessionStorageItem = (eventId) => {\n return sessionStorage.getItem(`data2Import${eventId}`);\n};\n\nexport const replaceAll = (originalText, findText = '', replaceText = '') => {\n return originalText.replace(new RegExp(findText, 'g'), replaceText);\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport marked from 'marked';\nimport sanitizeHTML from 'sanitize-html';\n\nconst MD_DEFAULT_OPTIONS = {\n skipSanitize: false,\n markedOptions: null,\n sanitizeOptions: {\n allowedTags: [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'p',\n 'a',\n 'ul',\n 'ol',\n 'nl',\n 'li',\n 'b',\n 'i',\n 'strong',\n 'em',\n 'strike',\n 'code',\n 'hr',\n 'br',\n 'div',\n 'table',\n 'thead',\n 'caption',\n 'tbody',\n 'tr',\n 'th',\n 'td',\n 'pre',\n 'iframe',\n ],\n disallowedTagsMode: 'discard',\n allowedAttributes: {\n a: ['href', 'name', 'target'],\n img: ['src'],\n },\n selfClosing: ['img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta'],\n allowedSchemes: ['http', 'https', 'ftp', 'mailto'],\n allowedSchemesByTag: {},\n allowedSchemesAppliedToAttributes: ['href', 'src', 'cite'],\n allowProtocolRelative: true,\n },\n};\n\nexport function useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n\nexport function useMarked(markdown, options = MD_DEFAULT_OPTIONS) {\n const [html, setHtml] = useState(markdown);\n\n useEffect(() => {\n if (options.markedOptions) {\n marked.setOptions(options.markedOptions);\n }\n const tokens = marked.lexer(markdown);\n const html = marked.parser(tokens);\n setHtml(options.skipSanitize ? html : sanitizeHTML(html, options.sanitizeOptions));\n }, [markdown, options]);\n\n return html;\n}\n\nexport function useCopyToClipboard(params = { resetTimeOut: null }) {\n const [isCopied, setCopied] = useState(false);\n const [textCopied, setText] = useState(null);\n\n const handleCopy = useCallback((text) => {\n const textField = document.createElement('textarea');\n textField.innerText = text;\n document.body.appendChild(textField);\n textField.select();\n document.execCommand('copy');\n textField.remove();\n setCopied(true);\n setText(text);\n }, []);\n\n useEffect(() => {\n let timeout;\n if (isCopied && params && params.resetTimeOut) {\n timeout = setTimeout(() => setCopied(false), params.resetTimeOut);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isCopied, params]);\n\n return [handleCopy, isCopied, textCopied];\n}\n\nexport default { useQuery, useMarked, useCopyToClipboard };\n","import React from 'react';\nimport { Route, Redirect, useLocation } from 'react-router-dom';\nimport { useQuery } from '../../hooks';\n\nexport default function AuthenticatedRoute({\n children,\n validateSession = () => true,\n fallbackRoute = '/login',\n skipRedirect = false,\n ...rest\n}) {\n const { pathname, search } = useLocation();\n const query = useQuery();\n const internalRedirect = query.get('redirect');\n\n return (\n <>\n {validateSession() ? (\n <>\n <Route {...rest}>{children}</Route>\n </>\n ) : (\n <Route {...rest}>\n <Redirect\n to={\n internalRedirect\n ? `${fallbackRoute}?redirect=${internalRedirect}`\n : skipRedirect ? fallbackRoute\n : `${fallbackRoute}?redirect=${pathname}${search}`\n }\n />\n </Route>\n )}\n </>\n );\n}","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst Crumb = styled.a`\n color: ${(props) => props.theme.color.breadcrumb.inactive};\n cursor: pointer;\n font-size: 14px;\n font-family: 'Roboto Mono';\n ${(props) =>\n props.active &&\n css`\n cursor: default;\n color: ${(props) => props.theme.color.breadcrumb.active};\n `};\n`;\n\nconst CrumbSpace = styled.div`\n font-size: 14px;\n font-family: 'Roboto Mono';\n margin: 0 6px 0 6px;\n color: ${(props) => props.theme.color.breadcrumb.inactive};\n`;\n\nconst CrumbLine = styled.div`\n display: flex;\n overflow-x: auto;\n`;\n\nexport default function Breadcrumb({ crumbs = [] }) {\n const last = crumbs.length - 1;\n return (\n <CrumbLine>\n {crumbs.map((p, idx) => (\n <div key={p.path ? p.path : p.name} style={{ display: 'flex' }}>\n {p.staticFather && (\n <>\n <Crumb onClick={p.staticFather.action}>{p.staticFather.name}</Crumb>\n <CrumbSpace>{'>'}</CrumbSpace>\n </>\n )}\n <Crumb onClick={p.action} active={last === idx}>\n {p.name}\n </Crumb>\n {last > idx && <CrumbSpace>{'>'}</CrumbSpace>}\n </div>\n ))}\n </CrumbLine>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nfunction BaseButton({\n children,\n className,\n disabled = false,\n id,\n isLoading,\n onClick = () => {},\n style,\n type,\n}) {\n return (\n <button\n className={className}\n disabled={disabled || isLoading}\n id={id}\n onClick={onClick}\n style={style}\n type={type || 'button'}\n >\n {children}\n </button>\n );\n}\n\nconst Button = styled(BaseButton)`\n opacity: 1;\n font-family: 'Roboto Mono';\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.56px;\n background: ${(props) => props.theme.color.button.regular.accept.disabled.background};\n border: 1px solid ${(props) => props.theme.color.button.regular.accept.disabled.border};\n opacity: 1;\n color: ${(props) => props.theme.color.button.regular.accept.disabled.color};\n height: ${(props) => props.height ? props.height : '32px'};\n width: -webkit-fill-available;\n width: -moz-available;\n cursor: not-allowed;\n ${(props) =>\n !(props.disabled || props.isLoading) &&\n !props.secondary &&\n css`\n cursor: pointer;\n color: ${props.theme.color.button.regular.accept.default.color};\n background: ${props.theme.color.button.regular.accept.default.background};\n box-shadow: 0px 3px 6px #00000029;\n border: 1px solid ${props.theme.color.button.regular.accept.default.border};\n &:hover,\n &:focus {\n background: ${props.theme.color.button.regular.accept.hover.background};\n box-shadow: 0px 4px 10px #00000040;\n }\n `}\n ${(props) =>\n !props.disabled &&\n props.secondary &&\n css`\n background: ${props.theme.color.button.regular.reject.default.background};\n cursor: pointer;\n border: 1px solid ${props.theme.color.button.regular.reject.default.border};\n color: ${props.theme.color.button.regular.reject.default.color};\n &:hover,\n &:focus {\n background: ${props.theme.color.button.regular.reject.hover.background};\n box-shadow: 0px 4px 10px #00000040;\n }\n `}\n ${(props) =>\n props.hide &&\n css`\n display: none;\n `}\n ${(props) =>\n !props.disabled &&\n props.danger &&\n css`\n background: ${props.theme.color.button.regular.danger.default.background};\n cursor: pointer;\n border: 1px solid ${props.theme.color.button.regular.danger.default.border};\n color: ${props.theme.color.button.regular.danger.default.color};\n &:hover,\n &:focus {\n background: ${props.theme.color.button.regular.danger.hover.background};\n box-shadow: 0px 4px 10px #00000040;\n }\n `}\n`;\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import styled from 'styled-components';\n\nexport default styled.svg.attrs({\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n})``;\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst CheckIcon = styled(Base)`\n fill: #81c784;\n &:hover {\n fill: #2ab800;\n }\n`;\nCheckIcon.displayName = 'CheckMark-CheckIcon';\n\nexport default function CheckMark(props) {\n return (\n <CheckIcon {...props} width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M10,15.172l9.192-9.193,1.415,1.414L10,18,3.636,11.636,5.05,10.222Z\" />\n </CheckIcon>\n );\n}\n","import React from 'react';\n\nconst SIZE = 50;\nexport default function SpinnerIcon(props) {\n return (\n <svg width={props.size || SIZE} height={props.size || SIZE} viewBox=\"0 0 100 100\">\n <circle\n cx=\"50\"\n cy=\"50\"\n fill=\"none\"\n stroke={props.color || '#66bb6a'}\n strokeWidth=\"10\"\n r=\"35\"\n strokeDasharray=\"164.93361431346415 56.97787143782138\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n repeatCount=\"indefinite\"\n dur=\"1s\"\n values=\"0 50 50;360 50 50\"\n keyTimes=\"0;1\"\n />\n </circle>\n </svg>\n );\n}\n","\nimport { Flex } from 'reflexbox';\nimport styled from 'styled-components';\n\nconst CenteredFlex = styled(Flex)`\n align-items: center;\n justify-content: center;\n`;\n\nexport default CenteredFlex;\n","\nimport { Box } from \"reflexbox\";\nimport styled from \"styled-components\";\n\nconst Space = styled(Box)`\n padding: 0 4px;\n`;\n\nexport default Space;","const checkPermission = (rules = [], role = '', action, data) => {\n const permissions = rules[role.toLowerCase()];\n if (!permissions) {\n // role is not present in the rules\n return false;\n }\n\n const staticPermissions = permissions.static;\n\n if (staticPermissions && staticPermissions.includes(action)) {\n // static rule not provided for action\n return true;\n }\n\n const dynamicPermissions = permissions.dynamic;\n\n if (dynamicPermissions) {\n const permissionCondition = dynamicPermissions[action];\n if (!permissionCondition) {\n // dynamic rule not provided for action\n return false;\n }\n\n return permissionCondition(data);\n }\n return false;\n};\n\nconst Can = (props) =>\n checkPermission(props.rules, props.role, props.perform, props.data) ? props.yes() : props.no();\n\nCan.defaultProps = {\n yes: () => null,\n no: () => null,\n};\n\nexport default Can;\n","export const EVENT_QUESTION_STATUS = {\n CORRECT: 'CORRECT',\n INCORRECT: 'INCORRECT',\n PENDING: 'PENDING',\n};\nexport const DEFAULT_FORM_INPUT_TYPE = 'input';\nexport const INPUT_FORM_TYPE_TEXTAREA = 'textarea';\nexport const DEFAULT_BONUS_MULTIPLIER = 2;\nexport const QUESTION_CARD_DEFAULT_WIDTH = '380px';\n\nexport const RESOURCE_STATE = {\n ASSIGNED: 'ASSIGNED',\n UNASSIGNED: 'UNASSIGNED',\n PROVISIONING: 'PROVISIONING',\n};\n\nexport const RESOURCE_TYPE = {\n SERVER: 'server',\n URL: 'url',\n CREDENTIALS: 'credentials',\n};\n\nexport const RESOURCES_COLORS = ['#61ADA1', '#81A2BE', '#E5C07B', '#A088A4'];\n\nexport const CHECKBOX_STATUS = {\n CHECKED: 'checked',\n MIXED: 'mixed'\n}","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { CHECKBOX_STATUS } from '../../constants';\n\nconst HiddenCheckbox = styled.input.attrs({ type: 'checkbox' })`\n // Hide checkbox visually but remain accessible to screen readers.\n // Source: https://polished.js.org/docs/#hidevisually\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n`;\nHiddenCheckbox.displayName = 'Checkbox-HiddenCheckbox';\n\nconst Icon = styled.svg`\n stroke: white;\n fill: transparent;\n stroke-width: 3px;\n display: block;\n`;\nIcon.displayName = 'Checkbox-Icon';\n\nconst StyledCheckbox = styled.div`\n display: inline-block;\n width: 10px;\n height: 10px;\n color: ${(props) => props.theme.color.checkbox.color};\n border: 2px solid ${(props) => props.theme.color.checkbox.border};\n ${(props) =>\n props.checked &&\n css`\n background-color: ${props.theme.color.checkbox.background};\n `}\n opacity: 1;\n transition: all 150ms;\n ${Icon} {\n visibility: ${(props) => (props.checked ? 'visible' : 'hidden')};\n }\n`;\nStyledCheckbox.displayName = 'Checkbox-StyledCheckbox';\n\nconst CheckboxContainer = styled.div`\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n`;\n\nconst Checkbox = ({ className, checked, status = CHECKBOX_STATUS.CHECKED, ...props }) => (\n <CheckboxContainer className={className}>\n <HiddenCheckbox checked={checked} {...props} />\n <StyledCheckbox checked={checked} className=\"Checkbox-StyledCheckbox\">\n <Icon viewBox=\"0 0 24 24\">\n {status === CHECKBOX_STATUS.CHECKED && <polyline points=\"20 6 9 17 4 12\" />}\n {status === CHECKBOX_STATUS.MIXED && <polyline points=\"4 12 20 12\" />}\n </Icon>\n </StyledCheckbox>\n </CheckboxContainer>\n);\n\nexport default Checkbox;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst Box = styled.div`\n border: 1px solid ${(props) => (props.active ? '#81C784' : '#888')};\n z-index: 999;\n max-width: ${(props) => (props.mobile ? null : 'max-content')};\n margin: ${(props) => (props.margin ? props.margin : '15% auto')};\n`;\n\nconst Background = styled.div`\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: ${(props) => (props.hideScroll ? 'hidden' : 'auto')};\n background-color: rgba(0, 0, 0, 0.4);\n`;\nBackground.displayName = 'ModalBackground';\n\nfunction Modal(props) {\n const { mobile, onBackgroundClick, margin, ...rest } = props;\n\n return (\n <Background onClick={() => onBackgroundClick && onBackgroundClick()} {...rest}>\n <Box margin={margin} mobile={mobile} onClick={(e) => e.stopPropagation()} {...rest} />\n </Background>\n );\n}\n\nexport default Modal;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport Button from '../Button';\nimport Modal from '../Modal';\n\nconst Background = styled(Flex)`\n background-color: ${(props) => props.theme.color.form.background};\n padding-top: ${(props) => props.theme.margin.m};\n padding-bottom: ${(props) => props.theme.margin.s};\n padding-left: ${(props) => props.theme.margin.s};\n padding-right: ${(props) => props.theme.margin.s};\n`;\n\nconst DEFAULT_ACCEPT_LABEL = 'ACCEPT';\nconst DEFAULT_CANCEL_LABEL = 'CANCEL';\n\nfunction ConfirmationModal(props) {\n const {\n onAccept,\n onCancel,\n children,\n loading,\n acceptLabel,\n cancelLabel,\n dangerDialog = false,\n } = props;\n return (\n <Modal active={!dangerDialog}>\n <Background justifyContent=\"center\" flexDirection=\"column\">\n {children}\n <Flex justifyContent=\"space-around\" mt=\"40px\">\n <Flex width={1 / 3}>\n <Button onClick={onCancel} secondary className=\"ConfirmarionModal-cancel\">\n {cancelLabel || DEFAULT_CANCEL_LABEL}\n </Button>\n </Flex>\n <Flex width={1 / 3}>\n <Button\n onClick={onAccept}\n disabled={loading}\n danger={dangerDialog}\n className=\"ConfirmationModal-accept\"\n >\n {acceptLabel || DEFAULT_ACCEPT_LABEL}\n </Button>\n </Flex>\n </Flex>\n </Background>\n </Modal>\n );\n}\nConfirmationModal.displayName = 'ConfirmationModal';\n\nexport default ConfirmationModal;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Box, Flex } from 'reflexbox';\n\nconst Menu = styled.div`\n font-family: 'Roboto Mono';\n background: #373737 0% 0% no-repeat padding-box;\n opacity: 1;\n width: max-content;\n text-align: left;\n padding: 6px 2px 6px 2px;\n border: transparent;\n font-size: 14px;\n z-index: 10;\n`;\nMenu.displayName = 'Menu';\n\nconst ButtonMenu = styled.button`\n background-color: transparent;\n border: transparent;\n height: max-content;\n width: max-content;\n cursor: pointer;\n`;\nButtonMenu.displayName = 'ButtonMenu';\n\nconst Background = styled(Box)`\n position: relative;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n &:hover {\n background: ${(props) => props.theme.color.button.unregular.active.hover.background};\n }\n`;\nBackground.displayName = 'Background';\n\nfunction ContextMenu(props) {\n const { button, children, id } = props;\n const [menuVisible, setMenuVisibility] = useState(false);\n const [menuTop, setMenuTop] = useState('0px');\n const onContextClick = (e) => {\n try {\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuTop(`${rect.top + rect.height}px`);\n } catch (err) {\n setMenuTop(e.pageY);\n }\n e.preventDefault();\n setMenuVisibility(true);\n };\n\n return (\n <Background onMouseLeave={() => setMenuVisibility(false)}>\n <ButtonMenu onClick={onContextClick} id={id}>\n {button}\n </ButtonMenu>\n <Flex\n style={{\n position: 'fixed',\n top: menuTop,\n zIndex: 15,\n }}\n onClick={() => setMenuVisibility(false)}\n >\n {menuVisible && <Menu>{children}</Menu>}\n </Flex>\n </Background>\n );\n}\n\nexport default ContextMenu;\n","import styled from 'styled-components';\n\nconst Item = styled.div`\n padding: 10px 12px 10px 12px;\n color: ${(props) => props.theme.color.text.regular.color};\n &:hover {\n cursor: pointer;\n color: ${(props) => props.theme.color.text.light.color};\n }\n`;\nItem.displayName = 'Item';\n\nexport default Item;\n","import styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst RegularText = styled(Flex)`\n color: ${(props) => (props.color ? props.color : props.theme.color.text.regular.color)};\n ${(props) =>\n props.light &&\n css`\n color: ${props.theme.color.text.light.color};\n `}\n ${(props) =>\n props.medium &&\n css`\n color: ${props.theme.color.text.medium.color};\n `}\n ${(props) =>\n props.regular &&\n css`\n color: ${props.theme.color.text.regular.color};\n `}\n ${(props) =>\n props.align &&\n css`\n text-align: ${props.align};\n `}\n ${(props) =>\n props.breakAll &&\n css`\n word-break: break-all;\n `}\n font-family: ${(props) => props.theme.font.family};\n font-size: ${(props) => props.fontSize};\n font-weight: ${(props) => (props.mediumWeight ? 500 : props.weight)};\n`;\nRegularText.displayName = 'RegularText';\n\nRegularText.defaultProps = {\n fontSize: '16px',\n weight: 400,\n};\nexport default RegularText;\n","import React from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport ReactTooltip from 'react-tooltip';\n\nconst CustomTooltip = (props) => {\n const theme = useTheme();\n\n return (\n <ReactTooltip\n textColor={theme.color.tooltip.textColor}\n backgroundColor={theme.color.tooltip.backgroundColor}\n borderColor={theme.color.tooltip.borderColor}\n arrowColor={theme.color.tooltip.arrowColor}\n border\n {...props}\n />\n );\n};\n\nconst Tooltip = styled(CustomTooltip)`\n box-shadow: 0px 3px 6px #00000033 !important;\n font-family: ${(props) => props.theme.font.family};\n font-size: 12px;\n max-width: 340px;\n`;\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst ClipBoardSVG = styled(svgBase)`\n width: ${(props) => props.size || '20px'};\n height: ${(props) => props.size || '20px'};\n fill: #898989;\n &:hover {\n fill: #66bb6a;\n }\n`;\n\nexport default function CopyClipboardIcon(props) {\n return (\n <ClipBoardSVG viewBox=\"0 0 448 512\" {...props}>\n <path d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\" />\n </ClipBoardSVG>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex } from 'reflexbox';\nimport styled, { css } from 'styled-components';\nimport { useCopyToClipboard } from '../../hooks';\nimport RegularText from '../RegularText';\nimport Tooltip from '../Tooltip';\nimport CopyClipboardIcon from '../../icons/CopyClipboardIcon';\n\nconst CopiedLabel = styled(Flex)`\n border: 1px solid;\n position: absolute;\n transition: opacity 1s;\n margin-top: -30px;\n margin-left: ${(props) => (props.mobile ? '-60px' : '-23px')};\n height: 30px;\n padding-left: 7px;\n padding-right: 7px;\n align-items: center;\n justify-content: center;\n background-color: #1d1d1d;\n color: #81c784;\n ${(props) =>\n props.hidden &&\n css`\n opacity: 0;\n z-index: -1000;\n `}\n`;\n\nCopiedLabel.displayName = 'CopyToClipboard-copiedLabel';\n\nexport default function CopyToClipboard({\n value = '',\n idx = 0,\n mobile = false,\n tooltip = null,\n copiedText = 'Copied!',\n}) {\n const [handleCopy, isCopied] = useCopyToClipboard({ resetTimeOut: 2000 });\n const [indexCopied, setIndexCopied] = useState(-1);\n\n return (\n <Flex mx=\"6px\" alignItems=\"center\">\n <Flex data-tip data-for=\"copyLinkClipIcon\">\n <Flex\n onClick={() => {\n setIndexCopied(idx);\n handleCopy(value);\n }}\n width=\"24px\"\n style={{ cursor: 'pointer' }}\n className=\"CopyToClipboard-copyContainer\"\n >\n <CopyClipboardIcon />\n </Flex>\n </Flex>\n {tooltip && !isCopied && <Tooltip id=\"copyLinkClipIcon\">{tooltip}</Tooltip>}\n <CopiedLabel hidden={!isCopied || idx !== indexCopied} mobile={mobile}>\n <RegularText mediumWeight>{copiedText}</RegularText>\n </CopiedLabel>\n </Flex>\n );\n}\n","import styled from 'styled-components';\n\nconst FormLeyend = styled.div`\n text-align: left;\n font-family: 'Roboto Mono';\n font-size: ${(props) => (props.size ? props.size : '12px')};\n letter-spacing: 0.24px;\n color: ${(props) => props.theme.color.form.legend.color};\n opacity: 1;\n`;\n\nexport default FormLeyend;\n","import styled, { css } from 'styled-components';\n\nconst LinkedText = styled.span`\n cursor: not-allowed;\n\n ${(props) =>\n !props.disabled &&\n css`\n cursor: pointer;\n\n &:hover {\n color: ${props.hoverColor || '#d0d0d0'};\n text-decoration: underline;\n }\n `}\n ${(props) =>\n props.font &&\n css`\n font-family: ${props.font};\n `}\n ${(props) =>\n props.fontSize &&\n css`\n font-size: ${props.fontSize};\n `}\n ${(props) =>\n props.color &&\n css`\n color: ${props.color};\n `}\n`;\nLinkedText.displayName = 'LinkedText';\n\nexport default LinkedText;\n","import React from 'react';\nimport ReactSelect from 'react-select';\nimport styled, { useTheme } from 'styled-components';\n\nconst StyledSelect = styled(ReactSelect).attrs({\n components: { IndicatorSeparator: null },\n})`\n font-family: ${(props) => props.theme.font.family};\n font-size: 14px;\n margin-top: ${props => props.marginTop || '6px'};\n margin-right: ${props => props.marginRight};\n width: -webkit-fill-available;\n`;\nStyledSelect.displayName = 'Select-StyledSelect';\n\nfunction Select(props) {\n const theme = useTheme();\n\n // react-select allows passing style function for nested components inside the select component\n const getStyles = {\n control: (provided) => ({\n ...provided,\n background: theme.color.select.control.background.inactive,\n border: `${theme.color.select.control.border} 1px solid`,\n borderRadius: '0px',\n color: theme.color.select.control.color,\n boxShadow: '0',\n '&:hover': {\n background: theme.color.select.control.background.active,\n },\n height: props.height || provided.height,\n minHeight: props.minHeight || provided.minHeight\n }),\n option: (provided) => ({\n ...provided,\n background: theme.color.select.option.background.inactive,\n '&:hover': {\n background: theme.color.select.option.background.active,\n },\n }),\n menu: (provided) => ({\n ...provided,\n background: theme.color.select.menu.background,\n border: `${theme.color.select.menu.border} 1px solid`,\n color: theme.color.select.menu.color,\n borderRadius: '0px',\n }),\n singleValue: (provided) => ({\n ...provided,\n color: theme.color.select.singleValue.color,\n height: props.height || provided.height\n }),\n valueContainer: (provided) => ({\n ...provided,\n height: props.height || provided.height\n }),\n indicatorsContainer: (provided) => ({\n ...provided,\n height: props.height || provided.height\n }),\n indicatorContainer: (provided) => ({\n ...provided,\n height: props.height || provided.height\n }),\n };\n return <StyledSelect {...props} styles={getStyles} />;\n}\n\nexport default Select;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst UploadSVG = styled(svgBase)`\n width: ${(props) => props.size || '20px'};\n height: ${(props) => props.size || '20px'};\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\nUploadSVG.displayName = 'UploadIcon-UploadSVG';\n\nexport default function UploadIcon(props) {\n return (\n <UploadSVG viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M12,12.586l4.243,4.242-1.415,1.415L13,16.415V22H11V16.413l-1.828,1.83L7.757,16.828ZM12,2a7,7,0,0,1,6.954,6.194A5.5,5.5,0,0,1,18,18.978V16.964a3.5,3.5,0,1,0-1.112-6.911,5,5,0,1,0-9.777,0,3.5,3.5,0,0,0-1.292,6.88l.18.03v2.014A5.5,5.5,0,0,1,5.046,8.194,7,7,0,0,1,12,2Z\" />\n </UploadSVG>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst FileSVG = styled(svgBase)`\n width: ${(props) => props.size || '20px'};\n height: ${(props) => props.size || '20px'};\n fill: ${(props) => props.color || '#A5D6A7'};\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\nFileSVG.displayName = 'FileIcon-FileSVG';\n\nexport default function FileIcon(props) {\n return (\n <FileSVG viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M21,9V20.993A1,1,0,0,1,20.007,22H3.993A.993.993,0,0,1,3,21.008V2.992A1,1,0,0,1,4,2H14V8a1,1,0,0,0,1,1Zm0-2H16V2ZM8,7V9h3V7Zm0,4v2h8V11Zm0,4v2h8V15Z\" />\n </FileSVG>\n );\n}\n","import React, { useState, useRef } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport styled, { useTheme } from 'styled-components';\nimport RegularText from '../RegularText';\nimport UploadIcon from '../../icons/UploadIcon';\nimport FileIcon from '../../icons/FileIcon';\n\nconst Container = styled(Flex)`\n max-width: 488px;\n height: 137px;\n padding: 20px;\n background-color: ${(props) => props.theme.color.dragDrop.background};\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border: 2px dashed\n ${(props) =>\n props.draggedOn\n ? props.theme.color.dragDrop.border.draggedOn\n : props.theme.color.dragDrop.border.draggedOff};\n margin-top: 6px;\n`;\nContainer.displayName = 'DragDrop-Container';\n\nexport default function DragDrop({ onFileChange }) {\n const theme = useTheme();\n const [draggedOn, setDraggedOn] = useState(false);\n const [fileName, setFileName] = useState(null);\n const hiddenFileInput = useRef(null);\n\n const dragOver = (e) => {\n e.preventDefault();\n setDraggedOn(true);\n };\n\n const dragEnter = (e) => {\n e.preventDefault();\n setDraggedOn(true);\n };\n\n const dragLeave = (e) => {\n e.preventDefault();\n setDraggedOn(false);\n };\n\n const fileDrop = (e) => {\n e.preventDefault();\n setDraggedOn(false);\n const files = e.dataTransfer.files;\n if (files.length && files[0].name) {\n setFileName(files[0].name);\n onFileChange(files[0]);\n }\n };\n\n const handleClick = () => {\n hiddenFileInput.current.click();\n };\n\n const onChangeFile = async (evt) => {\n if (evt.target.files && evt.target.files[0]) {\n setFileName(evt.target.files[0].name);\n onFileChange(evt.target.files[0]);\n }\n };\n\n return (\n <>\n <Container\n draggedOn={draggedOn}\n onDragOver={dragOver}\n onDragEnter={dragEnter}\n onDragLeave={dragLeave}\n onDrop={fileDrop}\n >\n <Flex mb=\"4px\">\n <UploadIcon />\n </Flex>\n <RegularText mediumWeight fontSize=\"14px\">\n Drag & Drop\n </RegularText>\n <RegularText mediumWeight fontSize=\"14px\" my=\"6px\">\n or\n </RegularText>\n <RegularText\n onClick={handleClick}\n mediumWeight\n fontSize=\"14px\"\n style={{ cursor: 'pointer', textDecoration: 'underline' }}\n >\n Browse file\n </RegularText>\n <input\n type=\"file\"\n onChange={onChangeFile}\n onClick={(evt) => {\n // eslint-disable-next-line no-param-reassign\n evt.target.value = null;\n }}\n ref={hiddenFileInput}\n style={{ display: 'none' }}\n multiple={false}\n />\n </Container>\n {fileName && (\n <Flex mt=\"20px\" width={1} alignItems=\"center\">\n <Box>\n <FileIcon />\n </Box>\n <RegularText\n mediumWeight\n fontSize=\"14px\"\n ml=\"10px\"\n pt=\"4px\"\n color={theme.color.dragDrop.color}\n >\n {fileName}\n </RegularText>\n </Flex>\n )}\n </>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '20px';\nconst FILL = '#535353';\n\nconst InfoSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: ${(props) => props.fill || FILL};\n &:hover {\n fill: #81a2be;\n }\n`;\nInfoSVG.displayName = 'InfoIcon-InfoSVG';\n\nfunction InfoIcon(props) {\n return (\n <InfoSVG viewBox=\"0 0 416 416\" {...props}>\n <g>\n <path\n d=\"M356.004,61.156c-81.37-81.47-213.377-81.551-294.848-0.182c-81.47,81.371-81.552,213.379-0.181,294.85\n c81.369,81.47,213.378,81.551,294.849,0.181C437.293,274.636,437.375,142.626,356.004,61.156z M237.6,340.786\n c0,3.217-2.607,5.822-5.822,5.822h-46.576c-3.215,0-5.822-2.605-5.822-5.822V167.885c0-3.217,2.607-5.822,5.822-5.822h46.576\n c3.215,0,5.822,2.604,5.822,5.822V340.786z M208.49,137.901c-18.618,0-33.766-15.146-33.766-33.765\n c0-18.617,15.147-33.766,33.766-33.766c18.619,0,33.766,15.148,33.766,33.766C242.256,122.755,227.107,137.901,208.49,137.901z\"\n />\n </g>\n </InfoSVG>\n );\n}\n\nexport default InfoIcon;\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport Button from '../Button';\nimport Modal from '../Modal';\nimport FormLeyend from '../FormLeyend';\nimport LinkedText from '../LinkedText';\nimport Tooltip from '../Tooltip';\nimport Select from '../Select';\nimport DragDrop from '../DragDrop';\nimport InfoIcon from '../../icons/InfoIcon';\n\nconst Background = styled(Flex)`\n background-color: ${(props) => props.theme.color.form.background};\n padding-top: ${(props) => props.theme.margin.m};\n padding-bottom: ${(props) => props.theme.margin.s};\n padding-left: ${(props) => props.theme.margin.s};\n padding-right: ${(props) => props.theme.margin.s};\n border: 1px solid ${(props) => props.theme.color.form.border.modal};\n flex-direction: column;\n`;\nBackground.displayName = 'CsvImportModal-Background';\n\nexport default function CsvImportModal({\n filterLeyend = '',\n filterOptions = [],\n filterTooltipText = '',\n onImport,\n onCancel,\n enableCSVTemplate = false,\n onDownloadTemplate,\n}) {\n const theme = useTheme();\n const [file, setFile] = useState(null);\n\n const enableFilterSection =\n filterLeyend !== null &&\n filterLeyend.length > 0 &&\n filterOptions.length > 0 &&\n filterTooltipText !== null &&\n filterTooltipText.length > 0;\n\n const [filterValue, setFilterValue] = useState(enableFilterSection && filterOptions[0]);\n\n return (\n <Modal style={{ overflow: 'hidden' }}>\n <Background width=\"500px\">\n <FormLeyend>{filterLeyend}</FormLeyend>\n {enableFilterSection && (\n <Flex width={1} alignItems=\"center\">\n <Flex width={1}>\n <Select options={filterOptions} value={filterValue} onChange={setFilterValue} />\n </Flex>\n <Flex ml=\"8px\" data-tip data-for=\"filterSelect\">\n <InfoIcon />\n </Flex>\n <Tooltip id=\"filterSelect\">{filterTooltipText}</Tooltip>\n </Flex>\n )}\n <Flex mt=\"20px\" mb=\"10px\" flexDirection=\"column\">\n <DragDrop onFileChange={setFile} />\n </Flex>\n {enableCSVTemplate && (\n <Flex>\n <LinkedText\n color={theme.color.form.legend.color}\n fontSize=\"14px\"\n onClick={onDownloadTemplate}\n >\n Use a template as base for your csv file\n </LinkedText>\n </Flex>\n )}\n <Flex justifyContent=\"flex-end\" mt=\"40px\">\n <Flex width=\"150px\">\n <Button\n onClick={() => {\n setFile(null);\n onCancel();\n }}\n secondary\n >\n CANCEL\n </Button>\n </Flex>\n <Flex width=\"150px\" ml=\"20px\">\n <Button disabled={!file} onClick={() => onImport(file, filterValue.value)}>\n IMPORT FILE\n </Button>\n </Flex>\n </Flex>\n </Background>\n </Modal>\n );\n}\n","import styled, { css } from 'styled-components';\n\nconst Input = styled.input`\n background: ${(props) => props.theme.color.input.default.background} 0% 0% no-repeat padding-box;\n border: 1px solid ${(props) => props.theme.color.input.default.border};\n opacity: 1;\n color: ${(props) => props.theme.color.input.default.color};\n letter-spacing: 0px;\n font-family: 'Roboto Mono';\n font-size: 14px;\n display: block;\n width: -webkit-fill-available;\n width: -moz-available;\n height: ${(props) => (props.height ? props.height : '')};\n ${(props) =>\n props.search &&\n css`\n padding-left: 30px;\n background-color: #373737;\n `}\n &::placeholder {\n color: ${(props) => props.theme.color.input.default.placeholderColor};\n }\n &:hover {\n background: ${(props) => props.theme.color.input.hover.background} 0% 0% no-repeat padding-box;\n border: 1px solid ${(props) => props.theme.color.input.hover.border};\n opacity: 1;\n }\n &:focus {\n background: ${(props) => props.theme.color.input.focused.background} 0% 0% no-repeat padding-box;\n ${(props) =>\n props.search &&\n css`\n background-color: #454545;\n `}\n border: 1px solid ${(props) =>\n props.dangerBorder\n ? props.theme.color.input.error.border\n : props.theme.color.input.focused.border};\n opacity: 1;\n }\n ${(props) =>\n props.validate &&\n !props.validating &&\n css`\n box-shadow: none;\n border: 1px solid\n ${props.valid\n ? props.theme.color.input.success.border\n : props.theme.color.input.error.border};\n `}\n ${(props) =>\n props.dangerBorder &&\n css`\n box-shadow: none;\n border: 1px solid ${props.theme.color.input.error.border};\n `}\n`;\nInput.displayName = 'Input';\n\nexport default Input;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst CrossIcon = styled(Base)`\n fill: #e06c75;\n ${(props) =>\n props.hover &&\n css`\n fill: #ff5733;\n `}\n`;\n\nconst SquareIcon = styled(Base)`\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `}\n`;\nexport default function CancelIcon(props) {\n return (\n <SquareIcon width={props.size || 34} height={props.size || 32} viewBox=\"0 0 34 32\" {...props}>\n <rect fill=\"none\" width=\"34\" height=\"32\" />\n <path\n fill=\"#6c6c6c\"\n d=\"M-9.566-13.087h-1.705V1.2h1.705V2.839h-3.753V-14.739h3.753Zm19.2-1.652H13.4V2.839H9.637V1.2H11.35V-13.087H9.637Z\"\n transform=\"translate(17 22)\"\n />\n <CrossIcon {...props}>\n <path\n d=\"M12,10.586l4.95-4.95L18.364,7.05,13.414,12l4.95,4.95L16.95,18.364,12,13.414l-4.95,4.95L5.636,16.95,10.586,12,5.636,7.05,7.05,5.636Z\"\n transform=\"translate(5 4.364)\"\n />\n </CrossIcon>\n </SquareIcon>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst Check = styled(Base)`\n fill: #66bb6a;\n ${(props) =>\n props.hover &&\n !props.disabled &&\n css`\n fill: #2ab800;\n `}\n`;\nCheck.displayName = 'CheckIcon-Check';\n\nconst SquareIcon = styled(Base)`\n ${(props) =>\n props.hover &&\n css`\n cursor: ${props.disabled ? 'not-allowed' : 'pointer'};\n `}\n`;\nSquareIcon.displayName = 'CheckIcon-SquareIcon';\n\nexport default function CheckIcon(props) {\n return (\n <SquareIcon width={props.size || 34} height={props.size || 32} viewBox=\"0 0 34 32\" {...props}>\n <rect fill=\"none\" width=\"34\" height=\"32\" />\n <path\n fill=\"#6c6c6c\"\n d=\"M-9.566-13.087h-1.705V1.2h1.705V2.839h-3.753V-14.739h3.753Zm19.2-1.652H13.4V2.839H9.637V1.2H11.35V-13.087H9.637Z\"\n transform=\"translate(17 22)\"\n />\n <Check {...props}>\n <path\n d=\"M10,15.172l8.533-8.616L19.948,7.97,10,18,4.5,12.746l1.414-1.414Z\"\n transform=\"translate(4.364 4.021)\"\n />\n </Check>\n </SquareIcon>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Flex } from 'reflexbox';\nimport map from 'lodash.map';\nimport Input from '../Input';\nimport CancelIcon from '../../icons/CancelIcon';\nimport CheckIcon from '../../icons/CheckIcon';\n\nconst areValidChanges = (valuesOnEdition, matchRegExp) => {\n if (!matchRegExp) {\n return true;\n }\n const validations = map(\n valuesOnEdition,\n (value) => value !== undefined && value !== null && value.toString().match(matchRegExp)\n );\n return !validations.some((v) => v === false || v === null);\n};\n\nexport default function EditableInput({\n valueObject = {},\n onValueChanged = () => {},\n edit = false,\n setEditionActive = () => {},\n matchRegExp,\n}) {\n const [valuesOnEdition, _setEditionValues] = useState({});\n const valuesOnEditionRef = React.useRef(valuesOnEdition);\n const [valueOnView, setViewValue] = useState('');\n const [saveHover, mouseHoverSave] = useState(false);\n const [cancelHover, mouseHoverCancel] = useState(false);\n\n const onCancelChange = () => {\n setEditionActive(false);\n };\n\n // work around to get state values on event handler\n const setEditionValues = (data) => {\n _setEditionValues(data);\n valuesOnEditionRef.current = data;\n };\n\n const getDisplayableValue = (objectValue) => {\n // reverse in order to have username field first\n const keys = Object.keys(objectValue).sort().reverse();\n let displayableValue = objectValue[keys[0]];\n for (let idx = 1; idx < keys.length; idx++) {\n displayableValue = displayableValue.concat(` / ${objectValue[keys[idx]]}`);\n }\n return displayableValue;\n };\n\n const onSaveChange = (change = valuesOnEdition) => {\n if (areValidChanges(change, matchRegExp)) {\n onValueChanged(change);\n }\n };\n\n useEffect(() => {\n const handleEnter = (event) => {\n if (event.key === 'Enter') {\n // work around to get state values on event handler\n onSaveChange(valuesOnEditionRef.current);\n event.preventDefault();\n }\n };\n if (edit) {\n window.addEventListener('keydown', handleEnter);\n setEditionValues(valueObject);\n }\n return () => window.removeEventListener('keydown', handleEnter);\n }, [edit]);\n\n useEffect(() => {\n setViewValue(getDisplayableValue(valueObject));\n }, [valueObject]);\n\n if (edit) {\n return (\n <Flex>\n <Flex width=\"-webkit-fill-available\">\n {map(valuesOnEdition, (valueOnEdition, valueKey) => {\n return (\n <Input\n key={valueKey}\n id={valueKey}\n autoFocus\n value={valueOnEdition}\n onChange={(e) => {\n const newValue = e.target.value;\n setEditionValues(\n (function () {\n return {\n ...valuesOnEdition,\n [valueKey]: newValue,\n };\n })()\n );\n }}\n />\n );\n })}\n </Flex>\n <Flex width=\"70px\">\n <Flex\n onMouseLeave={() => mouseHoverSave(false)}\n onMouseEnter={() => mouseHoverSave(true)}\n onClick={() => onSaveChange()}\n >\n <CheckIcon\n hover={saveHover}\n disabled={!areValidChanges(valuesOnEdition, matchRegExp)}\n />\n </Flex>\n <Flex\n ml=\"10px\"\n onMouseLeave={() => mouseHoverCancel(false)}\n onMouseEnter={() => mouseHoverCancel(true)}\n onClick={onCancelChange}\n >\n <CancelIcon hover={cancelHover} />\n </Flex>\n </Flex>\n </Flex>\n );\n }\n\n return (\n <Flex py=\"6px\" pl=\"10px\">\n {valueOnView}\n </Flex>\n );\n}\n","import styled, { css } from 'styled-components';\n\nconst TableData = styled.td.attrs((props) => ({\n colSpan: props.colspan || 1,\n}))`\n vertical-align: middle;\n width: ${(props) => props.width || 'auto'};\n ${(props) =>\n props.minWidth &&\n css`\n min-width: ${props.minWidth};\n `};\n\n ${(props) =>\n props.maxWidth &&\n css`\n max-width: ${props.maxWidth};\n `};\n\n ${(props) =>\n props.center &&\n css`\n text-align: center;\n `};\n\n ${(props) =>\n props.right &&\n css`\n text-align: right;\n `};\n\n ${(props) =>\n props.nowrap &&\n css`\n white-space: nowrap;\n `};\n\n ${(props) =>\n props.onClick &&\n css`\n cursor: pointer;\n `}\n`;\n\nexport default TableData;\n","import styled, { css } from 'styled-components';\n\nconst TableRow = styled.tr`\n height: ${(props) => props.height ? props.height : 'auto'};\n background-color: ${(props) => props.theme.color.table.row.background.inactive};\n color: ${(props) => props.theme.color.table.row.color};\n ${(props) =>\n props.selected &&\n css`\n background-color: ${props.theme.color.table.row.background.active};\n `};\n\n ${(props) =>\n props.captain &&\n css`\n color: ${props.theme.color.table.row.captain};\n `};\n\n ${(props) =>\n props.onClick &&\n css`\n cursor: pointer;\n `};\n\n ${(props) =>\n props.border &&\n css`\n border: ${props.border};\n `}\n\n ${(props) =>\n props.borderIncorrect &&\n css`\n border: 1.1px solid ${props.theme.color.table.row.incorrect};\n `};\n\n ${(props) =>\n props.borderTransparent &&\n css`\n border: 1px solid transparent;\n `};\n \n ${(props) =>\n props.mouseOver &&\n css` \n border: 1px solid ${props.theme.color.table.row.hover};\n border-top: 1.1px solid ${props.theme.color.table.row.hover};\n `};\n \n &:hover {\n ${(props) =>\n props.onClick &&\n css`\n background-color: ${props.theme.color.table.row.background.active};\n `};\n }\n`;\nTableRow.displayName = 'TableRow';\n\nexport default TableRow;\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst PencilSVG = styled(svgBase)`\n fill: ${(props) => props.fill || '#535353'};\n &:hover {\n fill: ${(props) => props.fillHover || '#81a2be'};\n cursor: pointer;\n }\n`;\nPencilSVG.displayName = 'PencilIcon-PencilSVG';\n\nconst PencilIcon = (props) => (\n <svg width={props.size || SIZE} height={props.size || SIZE} viewBox=\"0 0 24 24\">\n <PencilSVG viewBox=\"0 0 20 20\" {...props}>\n <path d=\"M7.243,18H3V13.757L14.435,2.322a1,1,0,0,1,1.414,0l2.829,2.829a1,1,0,0,1,0,1.414ZM3,20H21v2H3Z\" />\n </PencilSVG>\n </svg>\n);\n\nexport default PencilIcon;\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '32px';\n\nconst TrashIcon = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: ${(props) => props.color || '#898989'};\n &:hover {\n fill: #e06c75;\n }\n`;\nTrashIcon.displayName = 'TrashCanIcon-TrashIcon';\n\nexport default function TrashCanIcon(props) {\n return (\n <TrashIcon viewBox=\"0 0 32 32\" {...props}>\n <path\n d=\"M7,6V3A1,1,0,0,1,8,2h8a1,1,0,0,1,1,1V6h5V8H20V21a1,1,0,0,1-1,1H5a1,1,0,0,1-1-1V8H2V6Zm6.414,8,1.768-1.768-1.414-1.414L12,12.586l-1.768-1.768L8.818,12.232,10.586,14,8.818,15.768l1.414,1.414L12,15.414l1.768,1.768,1.414-1.414ZM9,4V6h6V4Z\"\n transform=\"translate(4 4)\"\n />\n <rect fill=\"none\" width=\"32\" height=\"32\" />\n </TrashIcon>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport TableRow from '../TableRow';\nimport TableData from '../TableData';\n\nexport default function TableItemSkeleton({ numberOfCells = 1, height = '25px' }) {\n const theme = useTheme();\n\n return (\n <TableRow>\n <TableData colspan={numberOfCells}>\n <SkeletonTheme\n color={theme.color.skeleton.color}\n highlightColor={theme.color.skeleton.highlightColor}\n >\n <Skeleton height={height} />\n </SkeletonTheme>\n </TableData>\n </TableRow>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex } from 'reflexbox';\nimport styled from 'styled-components';\nimport TableData from '../TableData';\nimport TableRow from '../TableRow';\nimport PencilIcon from '../../icons/PencilIcon';\nimport TrashCanIcon from '../../icons/TrashCanIcon';\nimport TableItemSkeleton from '../TableItemSkeleton';\nimport EditableInput from '../EditableInput';\nimport { Checkbox } from 'boss-ui';\n\nconst HovereableFlex = styled(Flex)`\n &:hover {\n cursor: pointer;\n }\n`;\n\nexport default function EditableTableData({ itemData, itemRegExp, isChecked, onItemDelete, onItemChanged, onSelectionChange }) {\n const [editionActive, setActiveEdition] = useState(false);\n const [loadingItem, setLoadingItem] = useState(false);\n\n if (loadingItem) {\n return <TableItemSkeleton numberOfCells={3} />;\n }\n\n const onItemDeleteClicked = (...args) => {\n setLoadingItem(true);\n onItemDelete(...args);\n };\n\n const onItemEdited = (...args) => {\n setLoadingItem(true);\n onItemChanged(...args);\n };\n\n if (editionActive) {\n return (\n <TableRow>\n <TableData colspan={3}>\n <EditableInput\n valueObject={itemData}\n edit\n onValueChanged={onItemEdited}\n setEditionActive={setActiveEdition}\n matchRegExp={itemRegExp}\n />\n </TableData>\n </TableRow>\n );\n }\n\n return (\n <TableRow>\n <TableData width=\"20px\" style={{ paddingLeft: '10px' }}>\n <label>\n <Checkbox checked={isChecked} onChange={onSelectionChange} />\n </label>\n </TableData>\n <TableData>\n <EditableInput\n valueObject={itemData}\n onValueChanged={onItemEdited}\n setEditionActive={setActiveEdition}\n matchRegExp={itemRegExp}\n />\n </TableData>\n <TableData>\n <Flex alignItems=\"center\" width={1} justifyContent=\"flex-end\">\n <HovereableFlex onClick={() => setActiveEdition(true)}>\n <PencilIcon fill=\"#898989\" size=\"18px\" />\n </HovereableFlex>\n <HovereableFlex ml=\"8px\" onClick={onItemDeleteClicked}>\n <TrashCanIcon size=\"22px\" />\n </HovereableFlex>\n </Flex>\n </TableData>\n </TableRow>\n );\n}\n","import React, { useEffect, useState, useLayoutEffect } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { useMarked } from '../../hooks';\nimport './index.css';\n\nconst CreditsContainer = styled(Flex)`\n position: relative;\n justify-content: center;\n height: 80vh;\n font-family: 'Droid Sans', arial, verdana, sans-serif;\n font-weight: 700;\n color: #ff6;\n background-color: #000;\n overflow: hidden;\n`;\n\nconst Title = styled.h1`\n position: absolute;\n width: 2.6em;\n left: 50%;\n top: 25%;\n font-size: 10em;\n text-align: center;\n margin-left: -1.3em;\n line-height: 0.8em;\n letter-spacing: -0.05em;\n color: #000;\n text-shadow: -2px -2px 0 #ff6, 2px -2px 0 #ff6, -2px 2px 0 #ff6, 2px 2px 0 #ff6;\n opacity: 0;\n z-index: 1;\n -webkit-animation: logo 5s ease-out 5s;\n -moz-animation: logo 5s ease-out 5s;\n -ms-animation: logo 5s ease-out 5s;\n -o-animation: logo 5s ease-out 5s;\n animation: logo 5s ease-out 5s;\n`;\n\nconst CreditsLine = styled(Flex)`\n position: absolute;\n display: flex;\n height: 250%;\n bottom: 12%;\n font-size: 44px;\n text-align: justify;\n overflow: hidden;\n -webkit-transform-origin: 50% 100%;\n -moz-transform-origin: 50% 100%;\n -ms-transform-origin: 50% 100%;\n -o-transform-origin: 50% 100%;\n transform-origin: 50% 100%;\n -webkit-transform: perspective(350px) rotateX(25deg);\n -moz-transform: perspective(350px) rotateX(25deg);\n -ms-transform: perspective(350px) rotateX(25deg);\n -o-transform: perspective(350px) rotateX(25deg);\n transform: perspective(350px) rotateX(25deg);\n &::after {\n position: absolute;\n content: ' ';\n left: 0;\n right: 0;\n top: 0;\n bottom: 60%;\n background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 1) 0%, transparent 100%);\n background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 1) 0%, transparent 100%);\n background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 1) 0%, transparent 100%);\n background-image: -o-linear-gradient(top, rgba(0, 0, 0, 1) 0%, transparent 100%);\n background-image: linear-gradient(top, rgba(0, 0, 0, 1) 0%, transparent 100%);\n pointer-events: none;\n }\n p {\n text-align: justify;\n margin: 0.8em 0;\n }\n p.center {\n text-align: center;\n }\n a {\n color: #ff6;\n text-decoration: underline;\n }\n`;\n\nconst StartLabel = styled.div`\n align-self: center;\n width: 16em;\n font-size: 200%;\n font-weight: 400;\n color: #4ee;\n opacity: 0;\n z-index: 1;\n -webkit-animation: intro 4s ease-out;\n -moz-animation: intro 4s ease-out;\n -ms-animation: intro 4s ease-out;\n -o-animation: intro 4s ease-out;\n animation: intro 4s ease-out;\n`;\n\nconst TitleContent = styled.div`\n position: absolute;\n top: 100%;\n -webkit-animation: scroll 90s linear 6s infinite;\n -moz-animation: scroll 90s linear 6s infinite;\n -ms-animation: scroll 90s linear 6s infinite;\n -o-animation: scroll 90s linear 6s infinite;\n animation: scroll 90s linear 6s infinite;\n`;\n\nexport default function Credits({ contentUrl = '', title = '' }) {\n const [creditsMd, setCreditsMd] = useState('');\n const [containerWidth, setContainerWidth] = useState(0);\n\n useEffect(() => {\n const fetchCredits = async () => {\n try {\n const rq = await fetch(`https://${contentUrl}`);\n if (rq.ok) {\n setCreditsMd(await rq.text());\n }\n } catch (e) {\n console.log(e);\n }\n };\n fetchCredits();\n });\n\n useLayoutEffect(() => {\n setContainerWidth(window.innerWidth * 0.9);\n }, []);\n\n const creditsText = useMarked(creditsMd);\n\n return (\n <CreditsContainer width={`${containerWidth}px`}>\n <StartLabel>A short time ago in a Splunk instance very, very close…</StartLabel>\n <Title>{title}</Title>\n <CreditsLine width={`${containerWidth * 0.7}px`}>\n <TitleContent\n dangerouslySetInnerHTML={{\n __html: creditsText,\n }}\n />\n </CreditsLine>\n </CreditsContainer>\n );\n}\n","import React from 'react';\nimport { Box } from 'reflexbox';\nimport styled from 'styled-components';\n\nconst PROFILE_BOX_WIDTH_REGULAR = 420;\nconst PROFILE_BOX_WIDTH_MOBILE = 320;\n\nconst Background = styled.div`\n position: fixed;\n z-index: 900;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n background-color: transparent;\n`;\n\nconst Arrow = styled.div`\n width: 0;\n height: 0;\n margin-left: ${(props) => (props.mobile ? '270px' : '370px')};\n border-left: 10px solid transparent;\n border-right: 10px solid transparent;\n box-shadow: 0px 4px 10px #00000059;\n border-bottom: 13px solid ${(props) => props.theme.color.profile.border};\n`;\n\nexport default function FloatingMenu({ onBackgroundClick, mobile, children, parentRef = null }) {\n let floatingLeftMargin = document.documentElement.clientWidth;\n\n if (parentRef && parentRef.current) {\n floatingLeftMargin = parentRef.current.getBoundingClientRect().x + 60;\n }\n\n return (\n <Background onClick={() => onBackgroundClick && onBackgroundClick()}>\n <Box\n ml={\n mobile\n ? floatingLeftMargin - PROFILE_BOX_WIDTH_MOBILE\n : floatingLeftMargin - PROFILE_BOX_WIDTH_REGULAR\n }\n mt=\"48px\"\n style={{ position: 'absolute' }}\n justifyContent=\"right\"\n onClick={(e) => e.stopPropagation()}\n >\n <Arrow mobile={mobile} />\n {children}\n </Box>\n </Background>\n );\n}\n","import React from 'react';\n\nexport default function FloatingPanel(props) {\n const { children } = props;\n return (\n <div\n style={{\n position: 'absolute',\n right: 0,\n minWidth: '200px',\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n >\n {children}\n </div>\n );\n}\n","import styled from 'styled-components';\n\nconst Form = styled.form`\n background: ${(props) => props.theme.color.form.background} 0% 0% no-repeat padding-box;\n border: ${(props) => (props.noBorder ? '' : `2px solid ${props.theme.color.form.border.main}`)};\n filter: ${(props) => (props.refreshing ? 'blur(1px)' : 'none')};\n height: ${(props) => props.height};\n`;\n\nForm.displayName = 'Form';\n\nexport default Form;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst Label = styled.div`\n color: ${(props) =>\n props.light ? props.theme.color.text.light.color : props.theme.color.text.medium.color};\n text-align: left;\n font-family: 'Roboto Mono';\n font-size: 14px;\n letter-spacing: 0.56px;\n opacity: 1;\n`;\n\nconst Required = styled.div`\n color: red;\n`;\n\nfunction FormLabel(props) {\n const { required, children, light, style } = props;\n return (\n <Flex style={style}>\n <Label light={light}>{children}</Label>\n {required && <Required title=\"This field is required\">*</Required>}\n </Flex>\n );\n}\n\nexport default FormLabel;\n","import { Flex } from 'reflexbox';\nimport styled from 'styled-components';\n\nconst HovereableFlex = styled(Flex)`\n &:hover {\n cursor: ${(props) => (props.disable ? 'not-allowed' : 'pointer')};\n }\n`;\n\nexport default HovereableFlex;\n","import styled, { css } from 'styled-components';\n\nexport default styled.td`\n font-family: 'Roboto Mono';\n font-size: 14px;\n color: #d0d0d0;\n text-align: ${(props) => (props.center ? 'center' : 'left')};\n ${(props) =>\n props.available &&\n css`\n color: #a5d6a7;\n `}\n ${(props) =>\n props.invited &&\n css`\n color: #e5c07b;\n `}\n ${(props) =>\n props.unavailable &&\n css`\n color: #a088a4;\n `}\n ${(props) =>\n props.public &&\n css`\n color: #81a2be;\n `}\n ${(props) =>\n props.full &&\n css`\n color: #a088a4;\n `}\n width: ${(props) => props.width || 'auto'};\n ${(props) =>\n !props.noBorder &&\n css`\n border-bottom: 1px solid #2c2c2c;\n `}\n`;\n","import styled from 'styled-components';\n\nconst Row = styled.tr`\n height: 52px;\n vertical-align: middle;\n`;\n\nexport default Row;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst ListBody = styled.tbody``;\n\nconst List = styled.table`\n padding: ${(props) => (props.mobile ? '20px 0px 0px 20px' : '35px 45px 0px 45px')};\n width: 100%;\n`;\nList.displayName = 'ListTableList';\n\nconst ListContainer = styled.div`\n ${(props) =>\n props.refreshing &&\n css`\n opacity: 0.8;\n cursor: not-allowed;\n `}\n background-color: ${(props) => (props.transparentBackground ? 'transparent' : '#1d1d1d')};\n width: 100%;\n height: 100%;\n`;\nListContainer.displayName = 'ListTableListContainer';\n\nexport default function ListTable({\n refreshing = false,\n mobile,\n children,\n transparentBackground = false,\n}) {\n return (\n <ListContainer\n refreshing={refreshing}\n mobile={mobile}\n transparentBackground={transparentBackground}\n >\n <List mobile={mobile}>\n <ListBody mobile={mobile}>{children}</ListBody>\n </List>\n </ListContainer>\n );\n}\n","import React from 'react';\n\nconst WIDTH = 30;\nconst HEIGHT = 40;\nfunction BooIcon(props) {\n return (\n <svg\n width={props.size || WIDTH}\n height={props.size || HEIGHT}\n viewBox=\"0 0 337.0914307 384.1937256\"\n >\n <g id=\"BOO\">\n <linearGradient\n id=\"SVGID_1_\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"62.776226\"\n y1=\"287.4862366\"\n x2=\"282.8515015\"\n y2=\"97.5329742\"\n >\n <stop offset=\"0%\" style={{ stopColor: '#ED0080' }} />\n <stop offset=\"6%\" style={{ stopColor: '#ED0D72' }} />\n <stop offset=\"34%\" style={{ stopColor: '#EF4538' }} />\n <stop offset=\"47%\" style={{ stopColor: '#F05A22' }} />\n <stop offset=\"99%\" style={{ stopColor: '#F99D1C' }} />\n </linearGradient>\n <circle\n style={{ fill: 'url(#SVGID_1_)' }}\n cx=\"169.7421875\"\n cy=\"195.1609955\"\n r=\"166.3019257\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M169.7421875,39.2599564c-86.1018677,0-155.9011841,69.7992935-155.9011841,155.901123\n\t\ts69.799324,155.9011993,155.9011841,155.9011993s155.901123-69.7993774,155.901123-155.9011993\n\t\tS255.8439789,39.2599564,169.7421875,39.2599564L169.7421875,39.2599564z\"\n />\n <path\n d=\"M169.7421875,44.2700043c40.3044281,0,78.1965179,15.6954041,106.696106,44.1949921\n\t\tc28.4996033,28.499527,44.1950073,66.3916473,44.1950073,106.6960907s-15.6954041,78.196579-44.1950073,106.6961823\n\t\tc-28.499588,28.4995422-66.3916779,44.1949463-106.696106,44.1949463c-40.3045044,0-78.1965942-15.6954041-106.6961823-44.1949463\n\t\tc-28.4995842-28.4996033-44.194931-66.3916626-44.194931-106.6961823s15.6953449-78.1965637,44.194931-106.6960907\n\t\tC91.5455933,59.9654083,129.4376831,44.2700043,169.7421875,44.2700043\"\n />\n <g>\n <polygon\n fill=\"#363C44\"\n points=\"-6.0573277,283.6479492 342.6569214,209.4478302 342.6569214,114.4594345 -6.0573277,188.6595459 \t\t\n\t\t\t\"\n />\n </g>\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M82.4019775,222.8423462c-1.5776443-1.7671509-3.4988708-3.0991669-5.7376022-3.982254\n\t\t\tc3.1208344-2.2997589,5.3433151-5.1035919,6.6260986-8.3661804c1.6253967-4.1387939,2.0403595-8.3445282,1.2340622-12.503006\n\t\t\tc-1.0627594-5.4727631-4.1151657-9.6696472-9.0725555-12.4724884c-4.8771515-2.7585297-11.4968529-3.3502045-19.6745071-1.7641907\n\t\t\tl-28.237587,5.4786682l-0.0103378,80.4484406l32.5949326-6.3253174c6.8889618-1.335968,12.5207214-3.5924072,16.7397461-6.7053528\n\t\t\tc4.2731781-3.1523285,7.2645416-6.9485168,8.8894424-11.2802734c1.6199722-4.3179626,1.9832535-8.8653107,1.0804749-13.5170288\n\t\t\tC86.170105,228.4312897,84.6791,225.4000397,82.4019775,222.8423462z M45.9670486,249.5682526l-0.0669479-16.9765167\n\t\t\tl11.8448715-2.2987823c3.1301804-0.6074219,5.4929543-0.4459686,7.0169449,0.4794464\n\t\t\tc1.4983902,0.9126282,2.411499,2.3066559,2.7910233,4.2618561c0.5355606,2.760498,0.1629333,5.2414093-1.1385651,7.5825195\n\t\t\tc-1.235527,2.2190399-4.1013756,3.7794495-8.5172997,4.6369476L45.9670486,249.5682526z M63.6907921,200.3753357\n\t\t\tc1.3206902,0.7944794,2.1196022,1.9896545,2.4420204,3.6524506c0.4479446,2.3086243,0.0708847,4.4302063-1.1543121,6.4858093\n\t\t\tc-1.1725235,1.9689789-3.8335953,3.368927-7.9098701,4.1604462L45.9069939,216.83992l0.0300255-14.6413116l11.9605484-2.3204346\n\t\t\tC60.3868484,199.3928223,62.3351517,199.562149,63.6907921,200.3753357z\"\n />\n </g>\n <path\n fill=\"#FFFFFF\"\n d=\"M233.493988,186.0044403c-4.026062-3.0154877-9.8852386-4.7865906-17.4116516-5.2630768l-6.4848328-0.425293\n\t\tc-3.0199127-0.1772156-5.2935944-0.656662-6.7609711-1.4275208c-1.2453766-0.6507416-1.9975281-1.724823-2.2992706-3.2822723\n\t\tc-0.4804382-2.4730377,0.1161652-4.5650787,1.8242493-6.3952484c1.8345947-1.9689636,4.2298584-3.2182922,7.3221436-3.8188171\n\t\tc2.8727264-0.5572205,5.394989-0.2992859,7.7105103,0.7875824c2.1678467,1.0179596,3.5879669,3.0686493,4.3420868,6.2702026\n\t\tl0.333252,1.4147186l18.268158-3.5461273l-0.3047028-1.4954376c-1.6824799-8.260849-5.5662842-14.0712891-11.5440979-17.2708893\n\t\tc-5.8773956-3.144455-13.0331573-3.9251404-21.2693787-2.3292847c-5.4294586,1.0533905-10.3228607,3.0243378-14.544342,5.8586884\n\t\tc-4.2707062,2.8727264-7.4978638,6.4730072-9.5923615,10.7003937c-2.1284637,4.2953339-2.6955261,9.1143951-1.6849518,14.3233337\n\t\tc1.123291,5.7887878,3.8429413,10.1727142,8.0821533,13.0306854c4.1186066,2.7811737,9.8222351,4.4311829,16.9592896,4.9037323\n\t\tl6.5640717,0.4036407c4.1712799,0.305191,6.095459,1.0986938,6.9746094,1.7100525\n\t\tc1.1877899,0.8259888,1.9325562,2.0910492,2.2766266,3.8670654c0.5207977,2.6797791-0.1776886,4.9697113-2.1348572,7.0016937\n\t\tc-2.0698853,2.150116-4.9253998,3.5904236-8.4862976,4.2815399c-3.2000732,0.6221924-6.1407318,0.3278351-8.7452087-0.8722687\n\t\tc-2.4882812-1.1449585-4.0979309-3.4309387-4.9199677-6.986908l-0.3288269-1.4216003l-18.2730865,3.5451355l0.3032227,1.4954376\n\t\tc1.7514038,8.6270752,5.8370361,14.6846313,12.1426849,18.0043335c4.1072845,2.1629181,8.7855682,3.247818,13.9762878,3.247818\n\t\tc2.6398926,0,5.413208-0.2805786,8.3095703-0.8427124c5.7927246-1.1242828,10.9676971-3.1867981,15.3831177-6.1304169\n\t\tc4.4676056-2.9800415,7.8581848-6.7023926,10.0772247-11.0636749c2.2569427-4.4341431,2.8742218-9.3999023,1.8345947-14.7584686\n\t\tC240.2475891,193.6194611,237.5899506,189.0711212,233.493988,186.0044403z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M310.4928284,184.498642c-1.1454468-5.9020081-3.8035583-10.4493713-7.8990479-13.5150604\n\t\tc-4.026062-3.0154877-9.8852539-4.7865906-17.4116516-5.2630768l-6.4848328-0.425293\n\t\tc-3.0194092-0.1772156-5.2930908-0.656662-6.7604675-1.4275208c-1.2458801-0.6517181-1.9980469-1.724823-2.2997742-3.2822723\n\t\tc-0.47995-2.4730377,0.1161804-4.5650787,1.823761-6.396225c1.835083-1.9679871,4.2303467-3.2173157,7.3226318-3.8178406\n\t\tc2.8722229-0.5582123,5.394989-0.3002777,7.710022,0.7866058c2.168335,1.0189362,3.5884399,3.0696259,4.3425598,6.2702026\n\t\tl0.333252,1.4147034l18.2681885-3.5441589l-0.304718-1.4964142c-1.6820068-8.2598572-5.5662842-14.0712891-11.5440979-17.2708893\n\t\tc-5.8778992-3.144455-13.0336609-3.9261322-21.2693787-2.3292999c-5.4289551,1.0534058-10.3218689,3.024353-14.544342,5.8587036\n\t\tc-4.2707214,2.8727264-7.4978638,6.4720154-9.5923615,10.6994171c-2.1284637,4.2963104-2.6950378,9.1153717-1.6849518,14.3233185\n\t\tc1.123291,5.7878113,3.842453,10.1727142,8.0821533,13.0316772c4.1185913,2.7811737,9.8222351,4.4311829,16.9597778,4.9037323\n\t\tl6.5640869,0.4026489c4.1712646,0.3071594,6.095459,1.0996857,6.9736023,1.7100677\n\t\tc1.1882935,0.8269653,1.9330444,2.0920258,2.2771301,3.868042c0.5207825,2.6797791-0.1777039,4.9697113-2.1348572,7.0016937\n\t\tc-2.0698853,2.150116-4.9253845,3.5904236-8.4862976,4.2815399c-3.2000732,0.6221924-6.1412354,0.3268433-8.7452087-0.8722687\n\t\tc-2.4882812-1.1449585-4.0979309-3.4309387-4.9199829-6.9878845l-0.3288269-1.4216156l-18.2730713,3.5461273l0.3032227,1.4954376\n\t\tc1.7514038,8.6270752,5.8370209,14.6846313,12.1426697,18.0033417c4.1068115,2.1639099,8.7860718,3.2488098,13.9772644,3.2488098\n\t\tc2.6399231,0,5.4122314-0.2805786,8.3085938-0.8427124c5.7902832-1.1242828,10.9657288-3.1867981,15.3831482-6.1304169\n\t\tc4.4675903-2.9800415,7.8581848-6.7023926,10.0772095-11.0636749\n\t\tC310.9151611,194.8229675,311.5324402,189.8581848,310.4928284,184.498642z\"\n />\n <path\n id=\"Logo_17_\"\n fill=\"#FFFFFF\"\n d=\"M114.0024033,107.6023178c0,0.9661255-0.2053833,1.8580017-0.6135559,2.6774368\n\t\tc-0.4089203,0.8199081-0.9794159,1.514389-1.7098618,2.0842056c-0.7304993,0.5707245-1.5991058,1.016983-2.6069107,1.3387833\n\t\tc-1.0080261,0.3213501-2.1111908,0.4810791-3.3089523,0.4810791c-1.4328156,0-2.7174377-0.195694-3.8575058-0.5882263\n\t\tc-1.1391144-0.3933029-2.2772903-1.0418625-3.4166412-1.9453354l1.8840179-3.0633545\n\t\tc0.9053268,0.7583694,1.7226181,1.3137283,2.4533386,1.6641846c0.7292786,0.3511581,1.4751129,0.5248566,2.2356415,0.5248566\n\t\tc0.9344177,0,1.6859589-0.2394562,2.2560043-0.7224197c0.5697708-0.4827194,0.8551559-1.1332016,0.8551559-1.9514694\n\t\tc0-0.3509064-0.0518112-0.6814728-0.1535873-0.987442c-0.1017609-0.3066711-0.2915192-0.6218567-0.5693207-0.943634\n\t\tc-0.2766037-0.3209076-0.655426-0.671814-1.1374588-1.0515976c-0.4817581-0.3799896-1.1017227-0.8487473-1.8596649-1.4034424\n\t\tc-0.583519-0.4095993-1.1523361-0.8333817-1.7065277-1.2716141c-0.55513-0.4389114-1.0581818-0.9072418-1.5106201-1.4045944\n\t\tc-0.4519424-0.496933-0.8165817-1.0515518-1.094635-1.665596c-0.2770767-0.6157074-0.4147873-1.3168411-0.4147873-2.105545\n\t\tc0-0.9060287,0.1890488-1.7325745,0.5679016-2.4788818c0.3781281-0.745369,0.8951569-1.3806992,1.5520096-1.9067459\n\t\tc0.6554718-0.5267181,1.4413071-0.9358292,2.3600998-1.2278519c0.9179001-0.2931519,1.9157639-0.4396362,2.9933472-0.4396362\n\t\tc1.1381531,0,2.2391739,0.1526489,3.3065948,0.4574127c1.0650711,0.3052139,2.0513458,0.7472763,2.9573822,1.3276901\n\t\tl-1.7089386,2.7512817c-1.1681976-0.8175888-2.3951492-1.2266998-3.6811905-1.2266998\n\t\tc-0.7874985,0-1.4386597,0.2053909-1.9493027,0.6145325c-0.5113602,0.4095993-0.7664566,0.9204788-0.7664566,1.5356903\n\t\tc0,0.5851746,0.225296,1.1126175,0.6772385,1.5802002c0.4493332,0.4680481,1.2282944,1.1265793,2.3357162,1.9739227\n\t\tc1.1145096,0.8199081,2.0383301,1.5361633,2.7711639,2.1507111c0.73349,0.6145325,1.3120728,1.1930542,1.7372589,1.7332535\n\t\tc0.4259262,0.541893,0.7191238,1.091095,0.880249,1.6464615\n\t\tC113.9200668,106.3160172,114.0024033,106.9298401,114.0024033,107.6023178 M139.5061798,102.2174301\n\t\tc0-1.6355591-0.2346954-3.1253815-0.702301-4.4696579c-0.4687653-1.3449783-1.1352997-2.4982986-1.9973602-3.4639511\n\t\tc-0.8641663-0.9645004-1.8884888-1.7172089-3.0732574-2.2574005c-1.1855011-0.5402451-2.4938049-0.8109436-3.9284973-0.8109436\n\t\tc-1.5799255,0-2.9708557,0.2993469-4.17099,0.8979797c-1.1994553,0.5994034-2.3111572,1.5418854-3.3361969,2.826973\n\t\tl-0.0305252-3.1986694h-5.6319504v32.865921h5.6319504V110.716774c0.5567703,0.6431656,1.091774,1.1852417,1.6047745,1.6241989\n\t\tc0.5127716,0.4401245,1.0333862,0.7985992,1.5607834,1.0764313c0.5281754,0.2768631,1.084465,0.4744339,1.6710968,0.5924835\n\t\tc0.586319,0.1166992,1.217186,0.1739349,1.8915634,0.1739349c1.4950256,0,2.8878021-0.2993469,4.1773987-0.8968277\n\t\tc1.2910309-0.5993652,2.4039001-1.4393845,3.3428345-2.5214767c0.938446-1.0802002,1.6705475-2.3444901,2.1984863-3.7912064\n\t\tC139.2423553,105.5282898,139.5061798,103.9421539,139.5061798,102.2174301 M133.381134,102.4393845\n\t\tc0,0.8492279-0.089447,1.7630615-0.2652588,2.7431793c-0.1767426,0.9798813-0.4782257,1.8875656-0.9046326,2.7209473\n\t\tc-0.4268494,0.8331909-0.9855499,1.5203705-1.6766968,2.0617218c-0.6923676,0.5411682-1.5662689,0.8107147-2.6248932,0.8107147\n\t\tc-1.7654877,0-3.1556931-0.7004166-4.1707993-2.1062241c-1.0141907-1.4034271-1.5217285-3.3340759-1.5217285-5.7914352\n\t\tc0-2.5145874,0.515152-4.5112762,1.5449371-5.9889908c1.0293121-1.4777298,2.4263535-2.2159882,4.1913528-2.2159882\n\t\tc1.6767426,0,3.0001678,0.6956635,3.9706116,2.084404C132.8955536,98.1476746,133.381134,100.041626,133.381134,102.4393845\n\t\t M142.0127716,81.4811554v32.161972h5.779953v-32.161972H142.0127716L142.0127716,81.4811554z M166.699295,113.652153h5.7799377\n\t\tV91.709343h-5.7799377v11.8085403c0,1.0539322-0.0431213,1.8653564-0.1322937,2.4353561\n\t\tc-0.0881958,0.5712128-0.2350464,1.0906219-0.440506,1.5588913c-0.8209381,1.8147202-2.3183746,2.7212296-4.4913635,2.7212296\n\t\tc-1.7024536,0-2.8926544-0.6137924-3.5672302-1.8447495c-0.2645874-0.4663925-0.4482574-0.9942856-0.5509949-1.5787659\n\t\tc-0.1027374-0.5858917-0.1541138-1.4332352-0.1541138-2.54702V91.709343h-5.7794495v12.466835\n\t\tc0,0.8492813,0.0072632,1.5667496,0.0222778,2.1514206c0.0145416,0.5851746,0.0513763,1.1045685,0.1095276,1.5586548\n\t\tc0.0586395,0.4543228,0.1245422,0.8561096,0.1982117,1.2070312c0.0726929,0.3511353,0.1822205,0.6883316,0.3290405,1.0096817\n\t\tc0.5262909,1.3459549,1.3821259,2.3634338,2.5674744,3.0517807c1.1863251,0.6864548,2.6416016,1.0290756,4.3677979,1.0290756\n\t\tc1.551712,0,2.9125061-0.2694931,4.083313-0.8109055c1.1708221-0.541893,2.3120728-1.4270782,3.4242554-2.6561432\n\t\tL166.699295,113.652153L166.699295,113.652153z M191.6281281,113.6424026h5.7809143v-12.439888\n\t\tc0-0.8468552-0.008728-1.5693207-0.0232697-2.1684418c-0.0145264-0.5986328-0.0499115-1.1168747-0.1095123-1.5551224\n\t\tc-0.0586395-0.4377289-0.1308441-0.8236771-0.2195282-1.1601486c-0.0867462-0.3360214-0.1904449-0.6639557-0.3072357-0.9865189\n\t\tc-0.5267792-1.3137207-1.3830872-2.3274231-2.5679626-3.043251c-1.1863251-0.7155304-2.6420898-1.073555-4.3697205-1.073555\n\t\tc-1.5507507,0-2.9125061,0.2706985-4.08284,0.8128357c-1.1717987,0.5406799-2.3120728,1.4275665-3.4252167,2.6554184\n\t\tl-0.0106659-2.9346466h-5.8298645v21.8933182h5.8298645v-11.8210983c0-1.0213089,0.0363312-1.8168411,0.1090393-2.3861618\n\t\tc0.0736542-0.56884,0.212738-1.1009979,0.4196777-1.597908c0.3804016-0.8748093,0.9609833-1.5392685,1.7382812-1.9914474\n\t\tc0.7782898-0.452446,1.7111511-0.6786575,2.7976532-0.6786575c1.7029266,0,2.8921509,0.6133194,3.567215,1.8386154\n\t\tc0.2621765,0.4670715,0.4472961,0.993782,0.548584,1.5766373c0.1036987,0.583252,0.1545868,1.4301224,0.1545868,2.5389557\n\t\tV113.6424026L191.6281281,113.6424026z M215.9511871,114.0863571l5.3903351-1.8845062l-8.8092499-10.9536362l7.4499207-7.9745636\n\t\tl-4.3823395-1.8837662l-7.7542419,8.9816132h-0.6130371V81.4873047h-5.8293762v32.1612625h5.8293762v-11.6554718\n\t\tL215.9511871,114.0863571L215.9511871,114.0863571z M226.3451233,113.0491943l17.526886-8.7090225v-3.5882111l-17.526886-8.7956085\n\t\tv3.9381638l13.5826263,6.6082458l-13.5826263,6.6955795V113.0491943L226.3451233,113.0491943z M227.674408,88.1760025v-0.7432022\n\t\tc0.0605621-0.0090027,0.1400299-0.01754,0.2539215-0.01754c0.3935089,0,0.5335541,0.1919022,0.5335541,0.3845291\n\t\tc0,0.2714005-0.2451935,0.3762131-0.5335541,0.3762131H227.674408L227.674408,88.1760025z M227.674408,89.3915482V88.446701\n\t\th0.2447052c0.2791595,0,0.419693,0.105545,0.4720306,0.3852539c0.0440826,0.2884598,0.0964355,0.489563,0.1487579,0.5595932\n\t\th0.3668671c-0.0339355-0.0700302-0.0867615-0.2011185-0.1386108-0.542572\n\t\tc-0.0440826-0.3229904-0.175415-0.4980774-0.3682861-0.533371v-0.0170059\n\t\tc0.236496-0.0700684,0.4288788-0.2451553,0.4288788-0.5333557c0-0.2103729-0.070282-0.3585129-0.2011261-0.4548111\n\t\tc-0.1318054-0.0965271-0.3498688-0.1665649-0.682312-0.1665649c-0.262207,0-0.4371338,0.0262604-0.6207886,0.0525284v2.1951523\n\t\tH227.674408L227.674408,89.3915482z M228.0412445,86.5842438h0.0101929c0.8737488,0,1.5725403,0.7432556,1.5725403,1.6703568\n\t\tc0,0.9266129-0.6987915,1.6703033-1.5725403,1.6613388c-0.8757019,0-1.584198-0.734726-1.584198-1.6698685\n\t\tC226.4672394,87.3274994,227.1757355,86.5842438,228.0412445,86.5842438L228.0412445,86.5842438z M228.0514374,86.2782745\n\t\th-0.0101929c-1.0753326,0-1.9490814,0.8748016-1.9490814,1.9677963c0,1.1102448,0.8737488,1.9757996,1.9490814,1.9757996\n\t\tc1.0850372,0,1.942337-0.8655548,1.942337-1.9757996C229.9835815,87.1530762,229.1262817,86.2782745,228.0514374,86.2782745\n\t\tL228.0514374,86.2782745z\"\n />\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M112.1307602,304.6702576c-2.2314453,0.4707031-4.0341797,0.2333984-5.4091797-0.7128906\n\t\t\tc-1.3759766-0.9462891-2.28125-2.4570312-2.71875-4.5317383c-0.2568359-1.2133789-0.2998047-2.409668-0.1289062-3.5908203\n\t\t\tc0.1689453-1.1801758,0.5351562-2.2744141,1.1005859-3.2832031c0.5634766-1.0078125,1.3173828-1.8666992,2.2617188-2.5771484\n\t\t\tc0.9423828-0.7099609,2.0605469-1.2016602,3.3525391-1.4741211c2.2304688-0.4707031,4.03125-0.2382812,5.4052734,0.6982422\n\t\t\tc1.3740234,0.9375,2.28125,2.4526367,2.7226562,4.5458984c0.2558594,1.2138672,0.2978516,2.4116211,0.1289062,3.5908203\n\t\t\tc-0.1699219,1.1806641-0.5371094,2.2753906-1.1005859,3.2832031c-0.5644531,1.0087891-1.3183594,1.8686523-2.2617188,2.5776367\n\t\t\tC114.5399399,303.9065857,113.4217758,304.3977966,112.1307602,304.6702576z M111.698143,301.0208435\n\t\t\tc0.8007812-0.1694336,1.4511719-0.5507812,1.9492188-1.1474609c0.4980469-0.5947266,0.8271484-1.3339844,0.9882812-2.2163086\n\t\t\tc0.1611328-0.8828125,0.1357422-1.8320312-0.0791016-2.8500977c-0.21875-1.0375977-0.6279297-1.7890625-1.2275391-2.2548828\n\t\t\tc-0.5996094-0.4663086-1.3681641-0.6005859-2.3076172-0.4023438c-0.8027344,0.1689453-1.4521484,0.5512695-1.9501953,1.1474609\n\t\t\tc-0.4980469,0.5947266-0.8271484,1.3349609-0.9882812,2.2167969s-0.1347656,1.8325195,0.0800781,2.8491211\n\t\t\tc0.2148438,1.0185547,0.6220703,1.7651367,1.2246094,2.2407227\n\t\t\tC109.9881821,301.0799255,110.7586899,301.2185974,111.698143,301.0208435z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M122.9315414,307.9095154l-0.2929688-18.2421875l-2.3183594,0.4892578l-0.0712891-3.3881836\n\t\t\tl2.3476562-0.4956055l-0.0107422-0.487793c-0.03125-2.1811523,0.4052734-3.7963867,1.3076172-4.8452148\n\t\t\ts2.234375-1.7587891,3.9960938-2.1308594c0.4492264-0.0947266,0.8955154-0.1630859,1.3359451-0.2055664\n\t\t\tc0.4414062-0.0419922,0.8242188-0.0668945,1.1494141-0.0737305l0.0585938,3.1767578l-1.1152344,0.2353516\n\t\t\tc-1.0185547,0.2148438-1.708992,0.5488281-2.0732498,1.0043945s-0.5429688,1.1826172-0.5361328,2.1831055l-0.0029297,0.2763672\n\t\t\tl3.2002029-0.675293l0.0996094,3.3823242l-3.2285233,0.6811523l0.2646484,18.2485352L122.9315414,307.9095154z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M147.9657288,297.2303162c-2.4853516,0.5244141-4.609375,0.2211914-6.3701172-0.9091797\n\t\t\tc-1.7617188-1.1308594-2.9316406-3.0649414-3.5097656-5.8061523c-0.3427734-1.6230469-0.4375-3.237793-0.2871094-4.8447266\n\t\t\tc0.1523438-1.605957,0.5654297-3.1083984,1.2412109-4.5073242c0.6748047-1.4003906,1.6162109-2.5898438,2.8193359-3.5693359\n\t\t\tc1.203125-0.9799805,2.6855469-1.6557617,4.4462891-2.0273438c2.5048828-0.5288086,4.6337891-0.2260742,6.3847656,0.90625\n\t\t\tc1.7519531,1.1323242,2.9169922,3.0693359,3.4951172,5.8085938c0.3427734,1.6245117,0.4384766,3.2387695,0.2871094,4.8447266\n\t\t\tc-0.1523438,1.605957-0.5654297,3.1088867-1.2412109,4.5092773c-0.6757812,1.3984375-1.6152344,2.5893555-2.8193359,3.5688477\n\t\t\tC151.2088928,296.1824646,149.7264709,296.8587341,147.9657288,297.2303162z M147.5711975,293.3269958\n\t\t\tc1.2519531-0.2641602,2.25-0.8876953,2.9921875-1.8725586c0.7431641-0.984375,1.2207031-2.1845703,1.4326172-3.5986328\n\t\t\tc0.2128906-1.4135742,0.1601562-2.8740234-0.1582031-4.3818359c-0.3173828-1.5068359-0.9160156-2.6220703-1.7949219-3.3457031\n\t\t\tc-0.8779297-0.7241211-1.9921875-0.9438477-3.3427734-0.6591797c-1.2519531,0.2646484-2.25,0.8881836-2.9921875,1.8730469\n\t\t\tc-0.7431641,0.984375-1.2216797,2.1791992-1.4355469,3.5839844c-0.2148438,1.4047852-0.1611328,2.8701172,0.1611328,4.3959961\n\t\t\tc0.3173828,1.5068359,0.9150391,2.6225586,1.7949219,3.3461914\n\t\t\tC145.1053772,293.3934021,146.2206116,293.6121521,147.5711975,293.3269958z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M159.8280334,300.1233826l-0.3349609-21.637207l3.6396484-0.7680664l0.3320312,1.8608398\n\t\t\tc0.3486328-0.7680664,0.8789062-1.4267578,1.5908203-1.9750977c0.7128906-0.5488281,1.5087891-0.9165039,2.3896484-1.1025391\n\t\t\tc1.6621094-0.3505859,3.0703125-0.0703125,4.2246094,0.8413086c1.1523438,0.9116211,1.9394531,2.3647461,2.3613281,4.3608398\n\t\t\tc0.4130859,1.9570312,0.4160156,3.7192383,0.0117188,5.2866211c-0.40625,1.5678711-1.1103516,2.8554688-2.1132812,3.8642578\n\t\t\tc-1.0029297,1.0092773-2.2089844,1.6621094-3.6181641,1.9594727c-0.9980469,0.2109375-1.8789062,0.2021484-2.6425781-0.0244141\n\t\t\tc-0.7626953-0.2265625-1.3857422-0.6171875-1.8710938-1.1689453l0.1396484,7.6357422L159.8280334,300.1233826z\n\t\t\t M163.7079163,284.2200623l0.0351562,2.1987305c0.0068359,0.3261719,0.0439453,0.6455078,0.1103516,0.9580078\n\t\t\tc0.1855469,0.8808594,0.5654297,1.4707031,1.1396484,1.7685547c0.5722656,0.2983398,1.203125,0.3740234,1.8886719,0.2294922\n\t\t\tc0.859375-0.1816406,1.5488281-0.5761719,2.0634766-1.1860352s0.8564453-1.3662109,1.0224609-2.2709961\n\t\t\tc0.1669922-0.9033203,0.1416016-1.8745117-0.0771484-2.9106445c-0.2226562-1.0576172-0.6289062-1.7939453-1.2177734-2.2119141\n\t\t\tc-0.5888672-0.4169922-1.2841797-0.5410156-2.0869141-0.3720703c-0.8212891,0.1738281-1.5126953,0.5800781-2.0732422,1.2197266\n\t\t\tC163.9530334,282.2815857,163.6835022,283.1409607,163.7079163,284.2200623z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M175.9325256,286.2078552l3.875-0.8173828c0.1445312,0.5009766,0.4638672,0.8520508,0.9570312,1.0541992\n\t\t\tc0.4921875,0.2041016,1.1005859,0.2280273,1.8251953,0.0751953c0.8017578-0.1694336,1.4052734-0.4604492,1.8085938-0.8720703\n\t\t\tc0.4033203-0.4121094,0.5498047-0.8818359,0.4384766-1.4106445c-0.0869141-0.4106445-0.2724609-0.6791992-0.5537109-0.8032227\n\t\t\tc-0.2822266-0.1245117-0.8085938-0.1767578-1.5810547-0.1567383l-0.9111328,0.0385742\n\t\t\tc-1.6630859,0.0644531-2.9345703-0.171875-3.8154297-0.7128906c-0.8798828-0.5385742-1.4501953-1.425293-1.7109375-2.6586914\n\t\t\tc-0.2148438-1.0166016-0.1279297-1.965332,0.2597656-2.8447266c0.3857422-0.878418,1.0234375-1.6313477,1.9140625-2.2592773\n\t\t\tc0.8896484-0.6269531,1.9902344-1.0786133,3.3017578-1.3554688c1.8193359-0.3837891,3.3330078-0.2592773,4.5400391,0.375\n\t\t\tc1.2070312,0.6347656,1.9785156,1.7036133,2.3164062,3.206543l-3.7871094,0.7993164\n\t\t\tc-0.1464844-0.5004883-0.4472656-0.8613281-0.9013672-1.0825195c-0.4560547-0.2202148-1.0068359-0.2626953-1.6533203-0.1264648\n\t\t\tc-0.7226562,0.1523438-1.2695312,0.4267578-1.6347656,0.8203125c-0.3671875,0.3945312-0.4970703,0.8466797-0.3896484,1.3544922\n\t\t\tc0.078125,0.3720703,0.2783203,0.6162109,0.6005859,0.7319336c0.3193359,0.1162109,0.8857422,0.1616211,1.6982422,0.1328125\n\t\t\tl0.9111328-0.0395508c1.6201172-0.0756836,2.8681641,0.1508789,3.7460938,0.6811523\n\t\t\tc0.8789062,0.5297852,1.4453125,1.4018555,1.7021484,2.6152344c0.21875,1.0366211,0.1201172,2.019043-0.2988281,2.9443359\n\t\t\tc-0.4179688,0.9262695-1.0986328,1.71875-2.0419922,2.378418c-0.9443359,0.659668-2.1123047,1.1352539-3.5019531,1.4287109\n\t\t\tc-1.8974609,0.4003906-3.46875,0.2973633-4.7089844-0.3085938\n\t\t\tC177.094635,288.7884216,176.2919006,287.7264099,175.9325256,286.2078552z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M200.2176819,283.1678162l-0.0888672-5.0712891l-4.6386719,0.9790039l-0.0664062-3.512207\n\t\t\tl4.6376953-0.9790039l-0.0888672-5.0703125l3.6396484-0.7680664l0.0888672,5.0703125l4.6376953-0.9790039l0.0673828,3.5126953\n\t\t\tl-4.6386719,0.9785156l0.0898438,5.0712891L200.2176819,283.1678162z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M225.5760803,280.8514099c-2.4853516,0.5249023-4.6103516,0.2216797-6.3701172-0.9086914\n\t\t\tc-1.7617188-1.1308594-2.9326172-3.0654297-3.5107422-5.8061523c-0.3427734-1.6230469-0.4375-3.2382812-0.2871094-4.8452148\n\t\t\tc0.1533203-1.605957,0.5664062-3.1083984,1.2421875-4.5073242c0.6748047-1.3999023,1.6152344-2.5893555,2.8193359-3.5693359\n\t\t\tc1.203125-0.9794922,2.6845703-1.6557617,4.4462891-2.0273438c2.5039062-0.5283203,4.6337891-0.2260742,6.3857422,0.90625\n\t\t\tc1.75,1.1323242,2.9160156,3.0698242,3.4941406,5.809082c0.3427734,1.6240234,0.4375,3.2387695,0.2871094,4.8447266\n\t\t\tc-0.1533203,1.605957-0.5664062,3.1083984-1.2421875,4.5087891c-0.6757812,1.3989258-1.6142578,2.5898438-2.8183594,3.5688477\n\t\t\tC228.8192444,279.8040466,227.3368225,280.4798279,225.5760803,280.8514099z M225.1805725,276.9485779\n\t\t\tc1.2519531-0.2641602,2.2509766-0.8881836,2.9921875-1.8730469c0.7441406-0.984375,1.2216797-2.184082,1.4335938-3.5981445\n\t\t\tc0.2128906-1.4140625,0.1601562-2.8745117-0.1582031-4.3823242c-0.3183594-1.5068359-0.9169922-2.621582-1.7949219-3.3457031\n\t\t\tc-0.8789062-0.7241211-1.9921875-0.9438477-3.3427734-0.6586914c-1.2529297,0.2641602-2.25,0.8876953-2.9921875,1.8725586\n\t\t\tc-0.7431641,0.984375-1.2226562,2.1791992-1.4365234,3.5844727c-0.2138672,1.4042969-0.1611328,2.8701172,0.1611328,4.3959961\n\t\t\tc0.3183594,1.5068359,0.9160156,2.6225586,1.7958984,3.3457031\n\t\t\tC222.7157288,277.0149841,223.8309631,277.2332458,225.1805725,276.9485779z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M240.6053772,277.250824l-0.2001953-14.4609375l-4.0800781,0.8608398l-0.0976562-3.6582031\n\t\t\tl2.4365234-0.5141602c0.6650391-0.1401367,1.125-0.3344727,1.3789062-0.5820312\n\t\t\tc0.2548828-0.2475586,0.4248047-0.6977539,0.5126953-1.3500977l0.1513672-1.1669922l3.6992188-0.7807617l0.3085938,20.7851562\n\t\t\tL240.6053772,277.250824z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M252.3465881,274.7727966l-0.2011719-14.4609375l-4.0800781,0.8613281l-0.0966797-3.6582031\n\t\t\tl2.4365234-0.5146484c0.6650391-0.1401367,1.125-0.3339844,1.3789062-0.5820312\n\t\t\tc0.2548828-0.2475586,0.4248047-0.6977539,0.5126953-1.3500977l0.1523438-1.1669922l3.6982422-0.7807617l0.3085938,20.7851562\n\t\t\tL252.3465881,274.7727966z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M263.4481506,278.5618591c-0.4296875,0.0908203-0.8515625,0.1538086-1.2617188,0.1894531\n\t\t\tc-0.4121094,0.0366211-0.7607422,0.0537109-1.0478516,0.0527344l-0.0283203-3.3354492l0.8203125-0.1733398\n\t\t\tc0.7050781-0.1484375,1.2421875-0.3139648,1.6132812-0.4941406c0.3710938-0.1811523,0.6660156-0.4521484,0.8857422-0.8154297\n\t\t\ts0.4296875-0.8935547,0.6308594-1.5893555l0.1591797-0.5546875l-0.9394531,0.1982422l-5.1621094-14.578125l4.3447266-0.9169922\n\t\t\tl2.8603516,10.0668945c0.0878906,0.328125,0.2128906,0.4755859,0.3691406,0.4423828\n\t\t\tc0.1367188-0.0288086,0.2480469-0.2255859,0.3349609-0.5913086l2.4521484-11.1879883l4.5800781-0.9663086l-5.0908203,18.3061523\n\t\t\tc-0.3476562,1.2573242-0.7480469,2.2885742-1.2021484,3.0888672c-0.4541016,0.8017578-1.0234375,1.421875-1.7060547,1.8632812\n\t\t\tC265.3749084,278.0066833,264.5057678,278.3392029,263.4481506,278.5618591z\"\n />\n </g>\n <path\n fill=\"#FFFFFF\"\n d=\"M155.9682922,168.7668762c-6.6743317-4.4725189-14.9174652-5.7966614-24.4980011-3.9349976\n\t\tc-6.6910782,1.2985382-12.4385223,3.8109589-17.0833435,7.4663696c-4.6310272,3.6445618-8.3218765,8.1643524-10.9701538,13.4323578\n\t\tc-2.6310425,5.2305756-4.3046722,10.9425812-4.9736328,16.9784851c-0.666008,6.0053711-0.4036407,12.1446381,0.7797165,18.2465057\n\t\tc2.0280457,10.4483795,6.4602127,18.0121918,13.1739273,22.4788208c4.7506485,3.160202,10.2632904,4.7472076,16.4571991,4.7472076\n\t\tc2.5473633,0,5.2099152-0.2687683,7.9822388-0.8063049c6.6910706-1.2985382,12.4385071-3.8109436,17.0833282-7.4663544\n\t\tc4.6261139-3.6386719,8.3169556-8.1584625,10.9706421-13.4323578c2.631546-5.2355194,4.3046875-10.9475098,4.9731445-16.9784851\n\t\tc0.6665039-6.0053864,0.4046326-12.1436615-0.7792206-18.2455292\n\t\tC167.0565796,180.8052063,162.6436157,173.2394104,155.9682922,168.7668762z\"\n />\n <path\n fill=\"#F99D1C\"\n d=\"M175.2409973,185.0733337c-1.4769287,0-8.072876,1.6964111-8.9215088,1.9952393\n\t\tc0.2823486-1.5506592,0.4938965-3.0592041,0.6252441-4.5023193c1.1948242-13.1304932-7.4289551-21.2738037-7.4289551-21.2738037\n\t\ts4.1044922-1.9810791,2.7744141-5.8234863c-1.0744629-3.1037598-14.4443359-11.4599609-29.7888184,0.0828857\n\t\tc-6.6945877,5.0361328-10.2294998,10.9489746-12.0678787,16.2026367c-1.1491699,2.3345947-2.3098145,4.8626709-3.4667969,7.5244141\n\t\tc-3.0808105-1.5146484-16.5266113-4.9711914-19.1413574-3.4141846c-3.5302734,2.1022949-5.3587646,6.1466064-3.6567383,9.4085693\n\t\tc1.5985107,3.0638428,4.8703613,3.2241211,9.0065918,2.5458984c1.659668,2.5576172,4.2420654,4.9812012,7.2827148,7.7412109\n\t\tc-4.1992188,11.265625-7.8918457,22.5231934-10.1704102,29.8361816c1.8952637,6.6408691,4.9350586,11.8825684,9.078125,15.6561279\n\t\tc1.354248-0.9876709,2.6309814-2.0610352,3.694458-2.9971924c1.7489014-1.5397949,4.8201904-3.4902344,8.1300049-4.9259033\n\t\tc5.1750488-0.5292969,1.7415771,17.0531006,18.8403397,10.4342041c15.8342285-6.1293945,17.5422363,5.4348145,25.6580811,6.7875977\n\t\tc8.1158447,1.3525391,0.6824951-23.8896484,0.6824951-23.8896484l-3.2958984-23.4599609\n\t\tc2.9753418-1.0893555,6.246582-2.7944336,9.3728027-5.465332c0.8630371,0.5209961,1.8044434,0.861084,2.7930908,0.861084\n\t\tc4.1087646,0,7.4395752-2.982666,7.4395752-6.6621094C182.6805725,188.0561218,179.349762,185.0733337,175.2409973,185.0733337z\"\n />\n <path\n fill=\"#363C44\"\n d=\"M143.7261353,172.6383057c-0.1422577,1.3496399-5.9734039,3.4104156-8.461441,3.5505676\n\t\tc-3.6855621,0.2076263-3.2058105,0.2076263-2.0391846-4.8630676c0.9090881-3.9513855,3.5093994-6.7713318,6.2706146-6.4928284\n\t\tS144.1511841,168.6060486,143.7261353,172.6383057z\"\n />\n <path\n fill=\"#363C44\"\n d=\"M158.1520233,171.2974701c2.0688934,6.6545105-1.8656616,5.7335358-6.4378662,3.7437744\n\t\tc-2.5452881-1.1076813-4.0703278,0.1783142-4.0703278-3.8753204s2.7062531-7.2082062,5.4821167-7.2082062\n\t\tC155.9017944,163.9577179,156.9485321,167.4266052,158.1520233,171.2974701z\"\n />\n\n <ellipse\n transform=\"matrix(0.3693524 -0.9292894 0.9292894 0.3693524 -82.7924576 250.9849243)\"\n fill=\"#363C44\"\n cx=\"143.5229187\"\n cy=\"186.4917908\"\n rx=\"6.7473221\"\n ry=\"3.6142423\"\n />\n </g>\n </svg>\n );\n}\n\nexport default BooIcon;\n","import React from 'react';\n\nconst WIDTH = 30;\nconst HEIGHT = 40;\nfunction BotsIcon(props) {\n return (\n <svg\n width={props.size * (2 / 3) || WIDTH}\n height={props.size || HEIGHT}\n viewBox=\"0 0 308.8658752 384.1937561\"\n >\n <g id=\"BOTS\">\n <g id=\"Shield_17_\">\n <linearGradient\n id=\"SVGID_1_\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"44.59478\"\n y1=\"289.3757935\"\n x2=\"288.3210449\"\n y2=\"38.7516212\"\n >\n <stop offset=\"0%\" style={{ stopColor: '#ED0080' }} />\n <stop offset=\"6%\" style={{ stopColor: '#ED0D72' }} />\n <stop offset=\"34%\" style={{ stopColor: '#EF4538' }} />\n <stop offset=\"47%\" style={{ stopColor: '#F05A22' }} />\n <stop offset=\"99%\" style={{ stopColor: '#F99D1C' }} />\n </linearGradient>\n <path\n style={{ fill: 'url(#SVGID_1_)' }}\n d=\"M154.1914215,384.1937561c-4.8541565,0-9.4589844-4.3339844-9.4589844-4.3339844\n\t\t\tc-8.5078125-7.7949219-27.5136719-14.9316406-44.2822266-21.2285156\n\t\t\tc-17.7988281-6.6835938-36.1948242-13.5908203-49.4165039-23.0527344\n\t\t\tc-20.1577168-13.296875-30.3793964-29.3115234-30.3793964-47.6005859V45.829483l14.6513691,0.6821289\n\t\t\tc34.1162109,1.590332,85.4516602-11.5727539,108.8535156-35.6113281l10.0307617-10.3027344l10.0317383,10.3017578\n\t\t\tc23.4042969,24.0351562,74.7324219,37.2021484,108.8554535,35.6123047l14.6503906-0.6821289v242.1484528\n\t\t\tc0,18.2734375-10.2207031,34.28125-30.3789062,47.5820312c-13.2031097,9.4550781-31.6113129,16.3740234-49.4160004,23.0664062\n\t\t\tc-16.7929688,6.3115234-35.8046875,13.4580078-44.2832031,21.2304688\n\t\t\tC163.6494293,379.856842,159.045578,384.1937561,154.1914215,384.1937561z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M154.1899567,375.6400452l-3.0405273-2.7851562\n\t\t\tc-9.8642578-9.0380859-28.9282227-16.1962891-47.3642578-23.1191406\n\t\t\tc-17.2866211-6.4912109-35.1611328-13.203125-47.3686523-21.9873047\n\t\t\tc-17.6713867-11.6123047-26.2622089-24.6220703-26.2622089-39.7705078V55.7821198l4.7094746,0.2192383\n\t\t\tc36.9790039,1.7226562,90.5209961-12.1962891,116.1025391-38.4746094l3.2241211-3.3115234l3.2246094,3.3115234\n\t\t\tc25.5839844,26.2739258,79.1054688,40.1953125,116.1035004,38.4746094l4.7089844-0.2192383v232.195816\n\t\t\tc0,15.1337891-8.5917969,28.1376953-26.2636566,39.7539062c-12.1914062,8.7783203-30.0810547,15.5019531-47.3818359,22.0048828\n\t\t\tc-18.4433594,6.9326172-37.515625,14.1005859-47.3520508,23.1171875L154.1899567,375.6400452z\"\n />\n <path\n d=\"M154.1907806,20.6660767c25.5326233,26.2215652,78.8926392,41.7213516,119.5364838,39.8306122v227.4815216\n\t\t\tc0,13.5227966-7.9538269,25.3136902-24.3159332,36.0464172c-24.7911377,17.9065857-75.3698273,27.3158264-95.2217102,45.512207\n\t\t\tc-19.8999329-18.2325134-70.3897324-27.5717773-95.2212372-45.4962463\n\t\t\tc-16.3611565-10.730072-24.3142204-22.5266418-24.3142204-36.0623779V60.4966888\n\t\t\tC75.2896881,62.3900986,128.6676331,46.8842773,154.1907806,20.6660767\"\n />\n </g>\n <g id=\"Banner_6_\">\n <polygon\n fill=\"#363C44\"\n points=\"0.5164844,279.240387 309.2883911,217.1207275 309.2883911,116.8810043 0.5164844,179.0006409 \t\t\"\n />\n </g>\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M73.8512802,217.6542969c-1.5776367-1.7671509-3.4988708-3.0991669-5.7375946-3.982254\n\t\t\tc3.1208267-2.2997742,5.3433075-5.1035919,6.6260986-8.3661804c1.6253891-4.1387939,2.0403519-8.3445282,1.2340546-12.503006\n\t\t\tc-1.0627518-5.4727783-4.1151581-9.6696472-9.0725555-12.4724884c-4.8771515-2.7585297-11.4968529-3.3502045-19.6745033-1.7642059\n\t\t\tl-28.2375889,5.4786835l-0.0103359,80.4484406l32.5949326-6.3253174c6.888958-1.335968,12.5207253-3.5924072,16.7397499-6.7053528\n\t\t\tc4.2731705-3.1523438,7.264534-6.9485168,8.8894348-11.2802734c1.6199799-4.3179626,1.9832535-8.8653107,1.0804749-13.5170288\n\t\t\tC77.6194153,223.2432404,76.1284027,220.2119904,73.8512802,217.6542969z M37.4163513,244.3802032l-0.0669441-16.9765167\n\t\t\tl11.8448715-2.2987823c3.1301804-0.6074371,5.4929543-0.4459686,7.0169411,0.4794464\n\t\t\tc1.4983902,0.9126129,2.4115028,2.3066559,2.7910233,4.2618561c0.5355644,2.760498,0.1629333,5.2414093-1.1385574,7.5825195\n\t\t\tc-1.2355347,2.2190399-4.1013794,3.7794495-8.5173035,4.6369476L37.4163513,244.3802032z M55.1400948,195.1872864\n\t\t\tc1.320694,0.7944794,2.119606,1.9896545,2.4420242,3.6524506c0.4479446,2.3086243,0.0708847,4.4302063-1.1543121,6.4858093\n\t\t\tc-1.1725235,1.9689789-3.8335953,3.368927-7.9098701,4.1604462l-11.1616364,2.1658783l0.0300255-14.6413116l11.9605484-2.3204346\n\t\t\tC51.8361549,194.2047729,53.7844543,194.3740997,55.1400948,195.1872864z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M142.7462769,167.1490631c-6.6743469-4.4725342-14.9174652-5.7966766-24.4980164-3.9349976\n\t\t\tc-6.6910706,1.2985382-12.4385147,3.8109436-17.0833359,7.4663544c-4.6310272,3.644577-8.3218765,8.1643524-10.9701538,13.4323578\n\t\t\tc-2.6310425,5.2305908-4.3046722,10.9425812-4.9736328,16.9784851c-0.666008,6.0053864-0.4036407,12.1446533,0.7797165,18.2465057\n\t\t\tc2.0280457,10.4483795,6.4602127,18.012207,13.1739273,22.4788208c4.7506485,3.1602173,10.2632904,4.7472076,16.4571991,4.7472076\n\t\t\tc2.5473709,0,5.2099152-0.2687683,7.9822388-0.8062897c6.6910782-1.2985535,12.4385147-3.8109589,17.0833359-7.4663696\n\t\t\tc4.6260986-3.6386719,8.3169556-8.1584473,10.9706421-13.4323578c2.6315308-5.2355042,4.3046722-10.9475098,4.9731445-16.9784851\n\t\t\tc0.6664886-6.0053711,0.4046173-12.1436615-0.7792206-18.2455292\n\t\t\tC153.8345642,179.1873779,149.4216003,171.621582,142.7462769,167.1490631z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M216.3786163,186.051239c-4.026062-3.0154877-9.8852539-4.7865906-17.4116669-5.2630768l-6.4848175-0.4253082\n\t\t\tc-3.0199127-0.1772003-5.2935944-0.6566467-6.7609711-1.4275055c-1.2453766-0.6507416-1.9975281-1.724823-2.2992706-3.2822876\n\t\t\tc-0.4804382-2.4730225,0.1161652-4.5650635,1.8242493-6.3952332c1.8345947-1.9689789,4.2298584-3.2182922,7.3221283-3.8188324\n\t\t\tc2.8727417-0.5572205,5.3950043-0.2992706,7.7105255,0.7875977c2.1678314,1.0179596,3.5879669,3.0686493,4.3420868,6.2702026\n\t\t\tl0.3332367,1.4147186l18.2681732-3.5461273l-0.3047028-1.4954376c-1.6824951-8.260849-5.5662994-14.0713043-11.5441132-17.2708893\n\t\t\tc-5.8773956-3.144455-13.0331421-3.9251556-21.2693787-2.3292999c-5.4294434,1.0534058-10.3228455,3.024353-14.544342,5.8586884\n\t\t\tc-4.2707062,2.8727417-7.4978638,6.4730225-9.5923615,10.7004089c-2.1284637,4.2953186-2.6955261,9.1143951-1.6849518,14.3233185\n\t\t\tc1.1233063,5.7888031,3.8429565,10.1727295,8.0821686,13.0306854c4.1186066,2.781189,9.8222351,4.4311829,16.9592896,4.9037476\n\t\t\tl6.5640717,0.4036407c4.1712799,0.305191,6.095459,1.0986786,6.9746094,1.7100525\n\t\t\tc1.1877899,0.8259888,1.9325409,2.0910492,2.2766266,3.8670654c0.5207977,2.6797791-0.1777039,4.969696-2.1348572,7.0016785\n\t\t\tc-2.0698853,2.1501312-4.9253998,3.5904388-8.4862976,4.2815399c-3.2000732,0.6222076-6.1407471,0.3278351-8.7452087-0.8722534\n\t\t\tc-2.4882965-1.1449585-4.0979309-3.4309387-4.9199829-6.986908l-0.3288116-1.4216003l-18.2730865,3.5451355l0.3032227,1.4954376\n\t\t\tc1.7514038,8.6270752,5.8370209,14.6846313,12.1426697,18.0043335c4.1072845,2.1629181,8.7855835,3.247818,13.9762878,3.247818\n\t\t\tc2.6399078,0,5.413208-0.2805786,8.3095856-0.8427124c5.7927246-1.1242981,10.9676819-3.1867981,15.3831177-6.1304169\n\t\t\tc4.4676056-2.9800415,7.8581848-6.7023926,10.0772247-11.0636749c2.2569427-4.4341431,2.8742065-9.3999023,1.8345947-14.7584686\n\t\t\tC223.1322021,193.6662598,220.4745789,189.1179199,216.3786163,186.051239z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M291.3774414,186.5454407c-1.1454468-5.9020081-3.8035889-10.4493561-7.8990479-13.5150452\n\t\t\tc-4.026062-3.0154877-9.8852539-4.7865906-17.4116516-5.2630768l-6.4848328-0.4253082\n\t\t\tc-3.0194397-0.1772003-5.2931061-0.6566467-6.7604828-1.4275055c-1.2458801-0.6517334-1.9980164-1.724823-2.2997742-3.2822723\n\t\t\tc-0.4799347-2.4730377,0.1161804-4.5650787,1.8237762-6.396225c1.835083-1.9680023,4.2303467-3.2173157,7.3226318-3.8178558\n\t\t\tc2.8722229-0.558197,5.394989-0.3002625,7.710022,0.7866058c2.168335,1.0189514,3.5884399,3.0696411,4.3425598,6.2702179\n\t\t\tl0.333252,1.4147034l18.268158-3.5441589l-0.3046875-1.4964142c-1.6820068-8.2598572-5.5662842-14.0713043-11.5440979-17.2708893\n\t\t\tc-5.8778992-3.144455-13.0336609-3.9261322-21.2693787-2.3292999c-5.4289703,1.0534058-10.3218842,3.024353-14.5443573,5.8586884\n\t\t\tc-4.2707062,2.8727417-7.4978638,6.4720306-9.5923615,10.6994324c-2.1284637,4.2962952-2.6950378,9.1153717-1.6849518,14.3233185\n\t\t\tc1.1233063,5.7878113,3.8424683,10.1727142,8.0821533,13.031662c4.1186066,2.781189,9.8222504,4.4311829,16.9597931,4.9037476\n\t\t\tl6.5640564,0.4026489c4.1712952,0.3071594,6.095459,1.0996704,6.9736328,1.7100525\n\t\t\tc1.1882935,0.8269806,1.9330444,2.092041,2.2771301,3.8680573c0.5207825,2.6797791-0.1777039,4.969696-2.1348572,7.0016785\n\t\t\tc-2.0698853,2.1501312-4.925415,3.5904388-8.4862976,4.2815399c-3.2000732,0.6222076-6.1412354,0.3268585-8.7452087-0.8722534\n\t\t\tc-2.4882965-1.1449585-4.0979309-3.4309387-4.9199829-6.9878998l-0.3288269-1.4216003l-18.2730865,3.5461273l0.3032227,1.4954376\n\t\t\tc1.7514038,8.6270752,5.8370361,14.6846313,12.1426849,18.0033417c4.1067963,2.1639099,8.7860718,3.2488098,13.9772797,3.2488098\n\t\t\tc2.6399078,0,5.4122162-0.2805786,8.3085785-0.8427124c5.7902832-1.1242981,10.9657288-3.1867981,15.3831177-6.1304169\n\t\t\tc4.4676208-2.9800415,7.8581848-6.7023926,10.07724-11.0636749\n\t\t\tC291.7997742,196.8697815,292.4170532,191.9049988,291.3774414,186.5454407z\"\n />\n </g>\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M97.3587341,312.4327087c-2.2363281,0.4428711-4.0361328,0.1826172-5.4003906-0.7802734\n\t\t\tc-1.3632812-0.9633789-2.25-2.4853516-2.6621094-4.5649414c-0.2402344-1.2167969-0.2685547-2.4135742-0.0839844-3.5922852\n\t\t\tc0.1835938-1.1777344,0.5644531-2.2680664,1.1416016-3.2695312c0.5761719-1.0009766,1.3408203-1.8500977,2.2929688-2.5483398\n\t\t\tc0.9521484-0.6987305,2.0761719-1.1757812,3.3710938-1.4326172c2.2363281-0.4428711,4.0341797-0.1879883,5.3964844,0.7661133\n\t\t\tc1.3613281,0.9541016,2.25,2.4804688,2.6660156,4.5791016c0.2412109,1.2167969,0.2685547,2.4150391,0.0839844,3.5917969\n\t\t\tc-0.1845703,1.1787109-0.5644531,2.2685547-1.1416016,3.2695312s-1.3408203,1.8515625-2.2929688,2.5488281\n\t\t\tC99.7767029,311.698822,98.6526794,312.1758728,97.3587341,312.4327087z M96.9720154,308.7779236\n\t\t\tc0.8027344-0.1591797,1.4580078-0.5327148,1.9628906-1.1225586c0.5058594-0.5888672,0.8447266-1.3242188,1.015625-2.2041016\n\t\t\tc0.1728516-0.8803711,0.1582031-1.8305664-0.0439453-2.8505859c-0.2060547-1.0405273-0.6054688-1.796875-1.1982422-2.2705078\n\t\t\tc-0.59375-0.4736328-1.3613281-0.6171875-2.3027344-0.4306641c-0.8046875,0.1591797-1.4589844,0.5332031-1.9648438,1.1225586\n\t\t\tc-0.5058594,0.5888672-0.84375,1.3251953-1.015625,2.2041016c-0.171875,0.8803711-0.1572266,1.8310547,0.0449219,2.8505859\n\t\t\tc0.2021484,1.0209961,0.5996094,1.7724609,1.1962891,2.2553711\n\t\t\tC95.2610779,308.8160095,96.0296326,308.964447,96.9720154,308.7779236z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M108.1194763,315.8067322l-0.0673828-18.2451172l-2.3242188,0.4604492l-0.0283203-3.3891602\n\t\t\tl2.3535156-0.4663086l-0.0048828-0.487793c-0.0039062-2.1816406,0.4521484-3.7905273,1.3681641-4.8286133\n\t\t\tc0.9150391-1.0371094,2.2558594-1.730957,4.0224609-2.0805664c0.4501953-0.0888672,0.8964844-0.1518555,1.3378906-0.1884766\n\t\t\ts0.8242188-0.0566406,1.1503906-0.0595703l0.0185547,3.1767578l-1.1181641,0.2216797\n\t\t\tc-1.0214844,0.2021484-1.7148438,0.527832-2.0849609,0.9785156c-0.3701172,0.4501953-0.5576172,1.1757812-0.5634766,2.1762695\n\t\t\tl-0.0058594,0.2758789l3.2080078-0.6352539l0.0576172,3.3833008l-3.2373047,0.6411133l0.0380859,18.2504883\n\t\t\tL108.1194763,315.8067322z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M124.5296326,301.2398376l-0.0458984-6.8720703l-2.3535156,0.4663086l-0.0175781-3.3291016\n\t\t\tl1.5009766-0.2973633c0.3925781-0.0776367,0.6640625-0.1977539,0.8154297-0.3608398\n\t\t\tc0.1513672-0.1625977,0.2519531-0.4736328,0.3046875-0.9316406l0.4248047-3.7236328l3.4140625-0.6762695l0.0205078,4.5830078\n\t\t\tl3.1484375-0.6235352l0.0410156,3.4477539l-3.1787109,0.6293945l0.0458984,6.871582\n\t\t\tc0,0.3071289,0.0214844,0.5678711,0.0634766,0.7832031c0.0976562,0.4902344,0.3193359,0.8139648,0.6660156,0.9692383\n\t\t\tc0.3466797,0.15625,0.8632812,0.1655273,1.5498047,0.0292969l1.1777344-0.2329102l-0.0058594,3.3647461\n\t\t\tc-0.3222656,0.1259766-0.6708984,0.2446289-1.0458984,0.3603516c-0.3740234,0.1152344-0.7587891,0.2109375-1.1503906,0.2890625\n\t\t\tc-1.4326172,0.2836914-2.5908203,0.2226562-3.4765625-0.1826172c-0.8857422-0.4057617-1.4648438-1.2949219-1.7373047-2.668457\n\t\t\tc-0.0546875-0.2749023-0.0966797-0.5722656-0.1308594-0.8920898\n\t\t\tC124.528656,301.9239197,124.5179138,301.5899353,124.5296326,301.2398376z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M134.9964294,304.6724548l-0.078125-21.8515625l4.1201172-0.8164062l0.0224609,7.519043\n\t\t\tc0.3808594-0.6455078,0.8896484-1.1894531,1.5263672-1.6323242c0.6357422-0.4414062,1.3554688-0.7426758,2.1601562-0.9018555\n\t\t\tc1.3349609-0.2641602,2.4648438-0.0649414,3.3916016,0.5976562c0.9257812,0.6625977,1.5371094,1.7392578,1.8320312,3.2299805\n\t\t\tc0.109375,0.5498047,0.1689453,1.1591797,0.1787109,1.8300781l0.0302734,9.4140625l-4.1201172,0.815918l-0.0244141-9.0786133\n\t\t\tc0-0.4072266-0.0292969-0.7685547-0.0917969-1.0825195c-0.1279297-0.6479492-0.3964844-1.1196289-0.8007812-1.4165039\n\t\t\tc-0.4052734-0.2973633-0.9130859-0.3842773-1.5205078-0.2641602c-0.7851562,0.1552734-1.4042969,0.5527344-1.859375,1.1933594\n\t\t\tc-0.453125,0.640625-0.6787109,1.4296875-0.6777344,2.3671875l0.03125,9.2607422L134.9964294,304.6724548z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M165.3333435,293.861908c-0.0673828,0.890625-0.3378906,1.769043-0.8085938,2.637207\n\t\t\tc-0.4697266,0.8686523-1.1484375,1.6342773-2.0371094,2.2998047c-0.8867188,0.6645508-2.0078125,1.1313477-3.3613281,1.3994141\n\t\t\tc-2.2763672,0.4511719-4.0888672,0.1787109-5.4375-0.8188477c-1.3496094-0.996582-2.21875-2.4760742-2.6074219-4.4379883\n\t\t\tc-0.3535156-1.784668-0.3046875-3.4458008,0.1445312-4.9833984c0.4501953-1.5366211,1.2236328-2.8266602,2.3222656-3.8696289\n\t\t\ts2.4423828-1.722168,4.03125-2.0366211c2.0205078-0.4003906,3.7158203-0.1542969,5.0849609,0.7358398\n\t\t\tc1.3691406,0.890625,2.2402344,2.277832,2.6132812,4.1616211c0.1005859,0.5107422,0.1533203,1.0341797,0.1582031,1.5742188\n\t\t\tc0.0048828,0.5395508-0.03125,1.0209961-0.1113281,1.4433594l-10.1240234,2.0053711\n\t\t\tc0.2578125,1.1933594,0.6787109,2.0327148,1.2636719,2.5170898c0.5859375,0.4863281,1.2714844,0.6518555,2.0566406,0.4960938\n\t\t\tc0.7646484-0.1513672,1.3720703-0.4301758,1.8212891-0.8349609c0.4501953-0.4052734,0.75-0.8984375,0.8994141-1.4785156\n\t\t\tL165.3333435,293.861908z M158.0384216,287.1416931c-0.9414062,0.1865234-1.6582031,0.6337891-2.1503906,1.3427734\n\t\t\tc-0.4921875,0.7094727-0.7822266,1.5615234-0.8691406,2.5576172l5.2382812-1.0375977\n\t\t\tc0.3125-0.0620117,0.5273438-0.1704102,0.6396484-0.3251953c0.1113281-0.1547852,0.1328125-0.4086914,0.0634766-0.762207\n\t\t\tc-0.1367188-0.6855469-0.4716797-1.190918-1.0048828-1.5131836\n\t\t\tC159.4231873,287.0811462,158.7835388,286.9937439,158.0384216,287.1416931z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M173.8587341,290.4302673l4.1787109-0.8276367c0.2568359,1.0908203,0.7822266,1.8173828,1.5791016,2.1801758\n\t\t\tc0.7949219,0.3618164,1.6728516,0.4477539,2.6347656,0.2573242c1.0595703-0.2099609,1.9003906-0.6411133,2.5263672-1.2958984\n\t\t\tc0.6240234-0.652832,0.8515625-1.4121094,0.6806641-2.2753906c-0.1171875-0.5888672-0.3818359-1.0253906-0.7958984-1.3105469\n\t\t\tc-0.4121094-0.2841797-1.1152344-0.4619141-2.1064453-0.5302734l-1.7949219-0.1035156\n\t\t\tc-1.8789062-0.1171875-3.3525391-0.5336914-4.421875-1.2495117c-1.0703125-0.7163086-1.7509766-1.8100586-2.0419922-3.28125\n\t\t\tc-0.2646484-1.3334961-0.1269531-2.5483398,0.4111328-3.644043c0.5351562-1.0952148,1.3574219-2.0166016,2.4638672-2.765625\n\t\t\tc1.1044922-0.7490234,2.375-1.2661133,3.8066406-1.5498047c2.1572266-0.4272461,4-0.2363281,5.5263672,0.5717773\n\t\t\tc1.5253906,0.8100586,2.5107422,2.28125,2.9541016,4.4155273l-4.1787109,0.828125\n\t\t\tc-0.2373047-0.9921875-0.7099609-1.6538086-1.4169922-1.9829102c-0.7070312-0.3286133-1.4931641-0.4077148-2.3564453-0.2368164\n\t\t\tc-0.921875,0.1826172-1.6591797,0.5737305-2.2138672,1.1728516c-0.5546875,0.5986328-0.7519531,1.3012695-0.5927734,2.1049805\n\t\t\tc0.109375,0.5498047,0.390625,0.9428711,0.8457031,1.1787109c0.453125,0.2363281,1.1240234,0.378418,2.0107422,0.4267578\n\t\t\tl1.7646484,0.1088867c1.9804688,0.1181641,3.4902344,0.5634766,4.5302734,1.3359375s1.7109375,1.9145508,2.0097656,3.425293\n\t\t\tc0.2724609,1.3735352,0.1210938,2.6254883-0.4482422,3.7578125c-0.5703125,1.1337891-1.4365234,2.0898438-2.5976562,2.8701172\n\t\t\tc-1.1601562,0.7802734-2.5058594,1.3212891-4.0361328,1.6245117c-2.2558594,0.4467773-4.1914062,0.2490234-5.8046875-0.5932617\n\t\t\tC175.3587341,294.2002869,174.3206482,292.6631775,173.8587341,290.4302673z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M202.4964294,291.7305603c-2.4912109,0.4936523-4.6113281,0.1640625-6.3583984-0.9887695\n\t\t\tc-1.7470703-1.1518555-2.8925781-3.1010742-3.4365234-5.8486328c-0.3222656-1.6274414-0.3974609-3.2431641-0.2265625-4.8481445\n\t\t\tc0.1728516-1.6040039,0.6044922-3.1010742,1.2978516-4.4916992c0.6923828-1.3916016,1.6474609-2.5693359,2.8632812-3.5341797\n\t\t\tc1.2148438-0.9643555,2.7060547-1.6220703,4.4716797-1.9716797c2.5107422-0.4970703,4.6347656-0.168457,6.3720703,0.9858398\n\t\t\tc1.7382812,1.1542969,2.8789062,3.1049805,3.4228516,5.8515625c0.3222656,1.628418,0.3974609,3.2446289,0.2265625,4.8486328\n\t\t\tc-0.171875,1.6035156-0.6035156,3.1005859-1.2978516,4.4921875c-0.6923828,1.390625-1.6474609,2.5693359-2.8632812,3.5341797\n\t\t\tC205.7522888,290.7232361,204.2620544,291.3809509,202.4964294,291.7305603z M202.1507263,287.8228455\n\t\t\tc1.2548828-0.2485352,2.2617188-0.8598633,3.0146484-1.8354492c0.7558594-0.9750977,1.2480469-2.1689453,1.4794922-3.5800781\n\t\t\tc0.2294922-1.4111328,0.1953125-2.8720703-0.1044922-4.3837891c-0.2988281-1.5102539-0.8837891-2.6328125-1.7529297-3.3676758\n\t\t\ts-1.9804688-0.96875-3.3339844-0.7006836c-1.2558594,0.2490234-2.2617188,0.8598633-3.015625,1.8354492\n\t\t\tc-0.7558594,0.9750977-1.2490234,2.1640625-1.4814453,3.565918c-0.2314453,1.4018555-0.1962891,2.8681641,0.1074219,4.3979492\n\t\t\tc0.2988281,1.5107422,0.8828125,2.6333008,1.7519531,3.3681641\n\t\t\tC199.6858826,287.85849,200.7972107,288.0909119,202.1507263,287.8228455z\"\n />\n <path\n fill=\"#FFFFFF\"\n d=\"M227.2132263,278.9444275l4.3837891-0.8681641c-0.0322266,1.4750977-0.34375,2.8662109-0.9306641,4.1757812\n\t\t\tc-0.5869141,1.3085938-1.4560547,2.4296875-2.6064453,3.3603516c-1.1523438,0.9321289-2.5908203,1.5683594-4.3164062,1.9101562\n\t\t\tc-2.4326172,0.4814453-4.5087891,0.1435547-6.2255859-1.0151367c-1.71875-1.1577148-2.8583984-3.1586914-3.421875-6.0043945\n\t\t\tc-0.3339844-1.6865234-0.4101562-3.3330078-0.2294922-4.9399414c0.1816406-1.6049805,0.6191406-3.078125,1.3115234-4.4179688\n\t\t\tc0.6933594-1.3413086,1.6357422-2.4750977,2.828125-3.4042969s2.6210938-1.5595703,4.2890625-1.8901367\n\t\t\tc1.7070312-0.3378906,3.1933594-0.2958984,4.4599609,0.1259766c1.265625,0.4228516,2.3007812,1.1455078,3.1054688,2.1679688\n\t\t\tc0.8046875,1.0234375,1.3535156,2.28125,1.6494141,3.7719727l-4.3564453,0.862793\n\t\t\tc-0.3349609-1.1777344-0.8769531-2.0336914-1.6240234-2.5683594c-0.7490234-0.534668-1.6416016-0.6992188-2.6826172-0.4931641\n\t\t\tc-0.9414062,0.1865234-1.7441406,0.5888672-2.4052734,1.2099609c-0.6630859,0.6210938-1.1708984,1.3935547-1.5283203,2.3212891\n\t\t\ts-0.5693359,1.9375-0.6376953,3.0317383c-0.0693359,1.0952148,0.0087891,2.2099609,0.234375,3.3481445\n\t\t\tc0.2998047,1.5107422,0.8642578,2.6171875,1.6982422,3.3183594c0.8320312,0.7021484,1.8261719,0.9375,2.9833984,0.7080078\n\t\t\tc1.2363281-0.2451172,2.1904297-0.8095703,2.859375-1.6972656\n\t\t\tC226.7210388,281.0713806,227.1087341,280.0664978,227.2132263,278.9444275z\"\n />\n </g>\n <path\n id=\"Logo_18_\"\n fill=\"#FFFFFF\"\n d=\"M100.6281662,107.128952c0,0.9661255-0.2053757,1.8580017-0.6135559,2.6774368\n\t\tc-0.4089203,0.8199081-0.9794083,1.514389-1.7098618,2.0842056c-0.7304916,0.5707245-1.5991058,1.016983-2.6069107,1.3387833\n\t\tc-1.0080261,0.3213501-2.1111908,0.4810715-3.3089447,0.4810715c-1.4328156,0-2.7174454-0.1956863-3.8575058-0.5882187\n\t\tc-1.139122-0.3933029-2.2772903-1.0418625-3.4166489-1.9453354l1.8840179-3.0633621\n\t\tc0.9053345,0.7583771,1.7226257,1.313736,2.4533386,1.6641922c0.7292786,0.3511581,1.4751129,0.5248566,2.2356415,0.5248566\n\t\tc0.9344254,0,1.6859589-0.2394562,2.256012-0.7224197c0.5697632-0.4827194,0.8551483-1.1332016,0.8551483-1.9514694\n\t\tc0-0.3509064-0.0518036-0.6814728-0.1535873-0.987442c-0.1017609-0.3066711-0.2915192-0.6218567-0.5693207-0.943634\n\t\tc-0.2765961-0.3209152-0.655426-0.671814-1.1374588-1.0515976c-0.4817581-0.3799896-1.1017151-0.8487473-1.8596573-1.4034424\n\t\tc-0.583519-0.4095993-1.1523438-0.8333817-1.7065353-1.2716141c-0.5551224-0.4389114-1.0581741-0.9072418-1.5106201-1.4046021\n\t\tc-0.4519424-0.4969254-0.8165817-1.0515518-1.094635-1.665596c-0.2770691-0.6156998-0.4147873-1.3168335-0.4147873-2.1055374\n\t\tc0-0.9060287,0.1890488-1.7325821,0.5679016-2.4788818c0.3781281-0.745369,0.8951569-1.3806992,1.5520172-1.9067459\n\t\tc0.6554642-0.5267181,1.4412994-0.9358292,2.3600922-1.2278519c0.9179001-0.2931519,1.9157715-0.4396362,2.9933472-0.4396362\n\t\tc1.1381607,0,2.2391815,0.1526489,3.3066025,0.4574127c1.0650635,0.3052139,2.0513382,0.7472763,2.9573822,1.3276901\n\t\tl-1.7089462,2.7512817c-1.16819-0.8175888-2.3951416-1.2266998-3.6811905-1.2266998\n\t\tc-0.7874908,0-1.4386597,0.2053909-1.949295,0.6145325c-0.5113678,0.4095993-0.7664642,0.9204788-0.7664642,1.5356903\n\t\tc0,0.5851746,0.225296,1.1126175,0.6772385,1.5802002c0.4493408,0.4680481,1.2282944,1.1265793,2.3357239,1.9739227\n\t\tc1.1145096,0.8199081,2.0383224,1.5361633,2.7711563,2.1507111c0.7334976,0.6145325,1.3120728,1.1930542,1.7372665,1.7332535\n\t\tc0.4259262,0.5418854,0.7191162,1.091095,0.880249,1.6464615\n\t\tC100.5458374,105.8426514,100.6281662,106.4564743,100.6281662,107.128952 M126.1319504,101.7440643\n\t\tc0-1.6355591-0.2347031-3.1253815-0.7023087-4.4696579c-0.4687653-1.3449783-1.1352921-2.4982986-1.9973602-3.4639511\n\t\tc-0.8641663-0.9645081-1.8884888-1.7172089-3.0732574-2.2574005c-1.1855011-0.5402451-2.4938049-0.8109436-3.9284973-0.8109436\n\t\tc-1.5799179,0-2.9708557,0.2993469-4.1709824,0.8979797c-1.1994629,0.5994034-2.3111572,1.5418854-3.3362045,2.826973\n\t\tl-0.0305252-3.1986694h-5.6319504v32.865921h5.6319504v-13.8909073c0.5567703,0.6431656,1.091774,1.1852417,1.6047821,1.6241989\n\t\tc0.512764,0.4401245,1.0333786,0.7985992,1.5607758,1.0764313c0.5281754,0.2768631,1.084465,0.4744339,1.6710968,0.5924759\n\t\tc0.586319,0.1167068,1.217186,0.1739349,1.8915634,0.1739349c1.4950256,0,2.8878021-0.2993469,4.1773987-0.8968277\n\t\tc1.2910385-0.5993576,2.4039001-1.4393768,3.3428421-2.5214691c0.938446-1.0802002,1.6705399-2.3444901,2.1984787-3.7912064\n\t\tC125.8681183,105.054924,126.1319504,103.4687881,126.1319504,101.7440643 M120.0069046,101.9660187\n\t\tc0,0.8492203-0.0894547,1.7630615-0.265274,2.7431793c-0.1767349,0.9798813-0.4782104,1.8875656-0.9046173,2.7209473\n\t\tc-0.4268494,0.8331909-0.9855652,1.5203705-1.6767044,2.0617218c-0.6923676,0.5411682-1.5662613,0.8107147-2.6248932,0.8107147\n\t\tc-1.7654877,0-3.1556854-0.7004166-4.1707993-2.1062241c-1.014183-1.4034348-1.5217285-3.3340759-1.5217285-5.7914429\n\t\tc0-2.5145798,0.515152-4.5112686,1.5449448-5.9889908c1.0293045-1.4777222,2.4263458-2.2159882,4.1913452-2.2159882\n\t\tc1.6767502,0,3.0001755,0.6956711,3.9706116,2.0844116C119.5213242,97.6743088,120.0069046,99.5682602,120.0069046,101.9660187\n\t\t M128.6385498,81.0077896v32.161972h5.7799377v-32.161972H128.6385498L128.6385498,81.0077896z M153.3250732,113.1787796h5.7799377\n\t\tV91.2359772h-5.7799377v11.8085403c0,1.0539322-0.0431366,1.8653564-0.132309,2.4353561\n\t\tc-0.0881958,0.5712128-0.2350311,1.0906219-0.440506,1.5588913c-0.8209381,1.8147125-2.3183746,2.7212296-4.4913635,2.7212296\n\t\tc-1.7024384,0-2.8926392-0.6137924-3.567215-1.8447495c-0.2646027-0.4663925-0.4482574-0.9942856-0.5510101-1.5787735\n\t\tc-0.1027374-0.5858841-0.1540985-1.4332275-0.1540985-2.5470123V91.2359772h-5.7794647v12.466835\n\t\tc0,0.8492813,0.0072632,1.5667419,0.0222931,2.1514206c0.0145264,0.5851746,0.0513611,1.1045685,0.1095123,1.5586548\n\t\tc0.0586548,0.4543228,0.1245422,0.8561096,0.1982117,1.2070312c0.0726929,0.3511353,0.1822205,0.688324,0.3290405,1.0096817\n\t\tc0.5263062,1.3459549,1.3821259,2.3634338,2.5674744,3.0517807c1.1863251,0.6864548,2.6416168,1.029068,4.3677979,1.029068\n\t\tc1.551712,0,2.9125061-0.2694855,4.0833282-0.8108978c1.1708069-0.541893,2.3120728-1.4270782,3.4242401-2.6561432\n\t\tL153.3250732,113.1787796L153.3250732,113.1787796z M178.253891,113.1690369h5.7809143v-12.439888\n\t\tc0-0.8468552-0.008728-1.5693207-0.0232544-2.1684418c-0.0145416-0.5986328-0.0499115-1.1168747-0.1095276-1.5551224\n\t\tc-0.0586243-0.4377289-0.1308441-0.8236771-0.2195282-1.1601486c-0.0867462-0.3360214-0.1904449-0.6639557-0.3072357-0.9865189\n\t\tc-0.5267792-1.3137207-1.3830872-2.3274307-2.5679626-3.043251c-1.1863251-0.7155304-2.6420898-1.073555-4.3697205-1.073555\n\t\tc-1.5507507,0-2.9125061,0.2706985-4.08284,0.8128357c-1.1717834,0.5406799-2.3120728,1.4275665-3.4252167,2.6554184\n\t\tl-0.0106659-2.9346466h-5.8298645v21.8933182h5.8298645v-11.8210983c0-1.0213089,0.0363464-1.8168411,0.1090393-2.3861694\n\t\tc0.0736542-0.5688324,0.212738-1.1009903,0.4196777-1.5979004c0.3804169-0.8748093,0.9609833-1.5392685,1.7382812-1.9914474\n\t\tc0.7782898-0.452446,1.7111664-0.6786575,2.7976532-0.6786575c1.7029266,0,2.8921661,0.6133194,3.567215,1.8386154\n\t\tc0.2621765,0.4670715,0.4472961,0.993782,0.548584,1.5766373c0.103714,0.583252,0.1545868,1.4301224,0.1545868,2.5389557\n\t\tV113.1690369L178.253891,113.1690369z M202.5769653,113.6129913l5.3903198-1.8845062l-8.8092499-10.9536362l7.4499207-7.9745636\n\t\tl-4.3823395-1.8837662l-7.7542419,8.9816132h-0.6130371V81.0139389h-5.8293762v32.1612625h5.8293762v-11.6554718\n\t\tL202.5769653,113.6129913L202.5769653,113.6129913z M212.9708862,112.5758286l17.5269012-8.7090225v-3.5882111\n\t\tl-17.5269012-8.7956085v3.9381638l13.5826416,6.6082458l-13.5826416,6.6955795V112.5758286L212.9708862,112.5758286z\n\t\t M214.3001709,87.7026291v-0.7431946c0.0605621-0.0090103,0.1400299-0.01754,0.2539215-0.01754\n\t\tc0.3935089,0,0.5335541,0.1919022,0.5335541,0.3845291c0,0.2714005-0.2451935,0.3762054-0.5335541,0.3762054H214.3001709\n\t\tL214.3001709,87.7026291z M214.3001709,88.9181824v-0.9448471h0.2447052c0.2791595,0,0.419693,0.105545,0.4720306,0.3852539\n\t\tc0.0440826,0.2884598,0.0964355,0.489563,0.1487579,0.5595932h0.3668671\n\t\tc-0.0339203-0.0700302-0.0867615-0.2011185-0.1386108-0.542572c-0.0440826-0.3229904-0.175415-0.498085-0.3682861-0.533371\n\t\tv-0.0170059c0.236496-0.0700684,0.4288788-0.2451553,0.4288788-0.5333557c0-0.2103729-0.0702667-0.3585205-0.2011261-0.4548111\n\t\tc-0.1318054-0.0965271-0.3498688-0.1665649-0.682312-0.1665649c-0.2621918,0-0.4371338,0.0262604-0.6207886,0.0525284v2.1951523\n\t\tH214.3001709L214.3001709,88.9181824z M214.6670074,86.110878h0.0101929c0.873764,0,1.5725403,0.7432556,1.5725403,1.6703568\n\t\tc0,0.9266129-0.6987762,1.6703033-1.5725403,1.6613388c-0.8756866,0-1.584198-0.734726-1.584198-1.6698685\n\t\tC213.0930023,86.8541336,213.8015137,86.110878,214.6670074,86.110878L214.6670074,86.110878z M214.6772003,85.8049088h-0.0101929\n\t\tc-1.0753326,0-1.9490814,0.8748016-1.9490814,1.9677963c0,1.1102448,0.8737488,1.9757996,1.9490814,1.9757996\n\t\tc1.0850372,0,1.942337-0.8655548,1.942337-1.9757996C216.6093445,86.6797104,215.7520447,85.8049088,214.6772003,85.8049088\n\t\tL214.6772003,85.8049088z\"\n />\n <polygon\n fill=\"#ED0080\"\n points=\"150.9542542,191.598465 122.9864578,255.1326752 114.6809998,267.1361084 114.7703323,254.7952881 \n\t\t118.451683,221.1851959 92.0922318,225.9848633 107.5346985,171.443161 135.011322,167.3153992 127.6015472,195.6269836 \t\"\n />\n </g>\n </svg>\n );\n}\n\nexport default BotsIcon;\n","import React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport BooIcon from '../../icons/BooIcon';\nimport BotsIcon from '../../icons/BotsIcon';\n\nconst BOTS_TYPE = {\n SOC: 'SOC',\n NOC: 'NOC',\n};\n\nconst animBOTSLogo = keyframes`\n0% {\n box-shadow: 0 0 red;\n}\n100% {\n box-shadow: 0 0 100px 80px transparent;\n border-width: 2px;\n}\n`;\n\nconst animBOOLogo = keyframes`\n0% {\n box-shadow: 0 0 #e9a000;\n}\n100% {\n box-shadow: 0 0 90px 90px transparent;\n border-width: 2px;\n}\n`;\n\nconst IconFrameBOTS = styled.div`\n border-radius: 30%;\n width: ${(props) => (props.size ? `${props.size / 3}px` : '10px')};\n height: ${(props) => (props.size ? `${props.size / 2}px` : '10px')};\n position: absolute;\n animation: ${animBOTSLogo} 1s ease infinite;\n z-index: -1;\n`;\n\nconst IconFrameBOO = styled.div`\n border-radius: 100%;\n width: ${(props) => (props.size ? `${props.size / 2}px` : '10px')};\n height: ${(props) => (props.size ? `${props.size / 2}px` : '10px')};\n position: absolute;\n animation: ${animBOOLogo} 1s ease infinite;\n z-index: -1;\n`;\n\nfunction LoaderIcon({ size = 300, appType }) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" width={1} style={{ opacity: 0.4 }}>\n {appType === BOTS_TYPE.SOC ? (\n <>\n <BotsIcon size={size} />\n <IconFrameBOTS size={size} />\n </>\n ) : (\n <>\n <BooIcon size={size} />\n <IconFrameBOO size={size} />\n </>\n )}\n </Flex>\n );\n}\n\nexport default LoaderIcon;\n","import React from 'react';\nimport { useMarked } from '../../hooks';\nimport RegularText from '../RegularText';\n\nconst Markdown = ({ md = '', ...args }) => {\n const eventRulesHtml = useMarked(md);\n return (\n <RegularText {...args}>\n <div\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: eventRulesHtml,\n }}\n />\n </RegularText>\n );\n};\n\nexport default Markdown;\n","import React from 'react';\n\nexport default function ExpandIcon(props) {\n return (\n <svg width={props.size || 12} height={props.size || 20} viewBox=\"0 0 12 20\">\n <rect fill=\"none\" width=\"12\" height=\"20\" />\n <path\n fill={props.color || '#de935f'}\n d=\"M10.666,11.636,15.333,16.3,14,17.636l-6-6,6-6,1.333,1.333Z\"\n transform=\"translate(-5.636 21.333) rotate(-90)\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function CollapsableIcon(props) {\n return (\n <svg width={props.size || 12} height={props.size || 20} viewBox=\"0 0 12 20\">\n <g transform=\"translate(0)\">\n <rect fill=\"none\" width=\"12\" height=\"20\" />\n <path\n fill={props.color || '#de935f'}\n d=\"M10.666,11.636,15.333,16.3,14,17.636l-6-6,6-6,1.333,1.333Z\"\n transform=\"translate(17.636 -2) rotate(90)\"\n />\n </g>\n </svg>\n );\n}\n","import React, { useState } from 'react';\nimport styled, { css, useTheme } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { NavLink, useRouteMatch } from 'react-router-dom';\nimport ExpandIcon from '../../icons/ExpandIcon';\nimport CollapseIcon from '../../icons/CollapseIcon';\n\nconst Container = styled(Flex)`\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n box-shadow: 0px 3px 6px #00000029;\n flex-direction: column;\n width: max-content;\n min-width: 150px;\n padding-bottom: ${(props) => props.theme.margin.xs};\n padding-top: ${(props) => props.theme.margin.xs};\n text-align: left;\n border-top: 1px solid ${(props) => props.theme.color.navigationMenu.border.active};\n`;\nContainer.displayName = 'SubMenu-Container';\n\nconst Link = styled(NavLink)`\n font-family: ${(props) => props.theme.font.family};\n font-size: 14px;\n position: relative;\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n color: ${(props) => props.theme.color.navigationMenu.color.inactive};\n text-decoration: none;\n padding: ${(props) => props.theme.margin.s};\n\n &.active {\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n }\n\n &:hover,\n &:focus {\n background-color: ${(props) => props.theme.color.navigationMenu.background.active};\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n }\n`;\nLink.displayName = 'SubMenu-Link';\n\nconst Label = styled(Flex)`\n align-items: center;\n margin-right: 20px;\n font-family: ${(props) => props.theme.font.family};\n font-size: 14px;\n position: relative;\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n color: ${(props) => props.theme.color.navigationMenu.color.inactive};\n text-decoration: none;\n padding-bottom: 15px;\n border-bottom: 1px solid transparent;\n\n &:focus {\n border-bottom: 1px solid;\n border-bottom-color: ${(props) => props.theme.color.navigationMenu.border.active};\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n cursor: pointer;\n }\n\n ${(props) =>\n props.active &&\n css`\n border-bottom: 1px solid;\n border-bottom-color: ${props.theme.color.navigationMenu.border.active};\n `}\n\n ${(props) =>\n props.isHover &&\n css`\n border-bottom: 1px solid;\n border-bottom-color: ${props.theme.color.navigationMenu.border.active};\n color: ${props.theme.color.navigationMenu.color.active};\n cursor: pointer;\n `}\n`;\nLabel.displayName = 'SubMenu-Label';\n\nconst LabelIcon = ({ isOpen, isHover }) => {\n const theme = useTheme();\n const iconColor = isHover\n ? theme.color.navigationMenu.color.active\n : theme.color.navigationMenu.color.inactive;\n\n return (\n <Flex ml=\"4px\" alignItems=\"center\">\n {isOpen ? <CollapseIcon color={iconColor} /> : <ExpandIcon color={iconColor} />}\n </Flex>\n );\n};\n\nexport default function SubMenu({ items = [], label, rootPath = '', id = '' }) {\n const [optionsVisible, setOptionsVisible] = useState(false);\n const [menuTop, setMenuTop] = useState('0px');\n const [hover, setHover] = useState(false);\n const matchRoute = useRouteMatch(rootPath);\n\n const onContextClick = (e) => {\n try {\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuTop(`${rect.top + rect.height - 1}px`);\n } catch (err) {\n setMenuTop(e.pageY);\n }\n e.preventDefault();\n setOptionsVisible(true);\n };\n\n const closeMenu = () => {\n setOptionsVisible(false);\n setHover(false);\n };\n\n return (\n <Flex\n style={{ position: 'relative' }}\n onMouseLeave={closeMenu}\n onMouseEnter={() => setHover(true)}\n flexDirection=\"column\"\n >\n <Label onClick={onContextClick} isHover={hover} active={matchRoute} id={id}>\n {label}\n <LabelIcon isOpen={optionsVisible} isHover={hover} />\n </Label>\n <Flex\n style={{\n position: 'fixed',\n top: menuTop,\n zIndex: 15,\n }}\n onClick={closeMenu}\n className={label}\n >\n {optionsVisible && (\n <Container>\n {items.map((sm) => (\n <Link to={sm.path} exact={sm.exact} key={sm.path} id={sm.id}>\n {sm.label}\n </Link>\n ))}\n </Container>\n )}\n </Flex>\n </Flex>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst DotsSVG = styled(svgBase)`\n width: ${(props) => props.size || '34px'};\n height: ${(props) => props.size || '22px'};\n fill: #898989;\n &:hover {\n fill: #66bb6a;\n }\n ${(props) =>\n props.disabled &&\n css`\n &:hover {\n fill: #898989;\n }\n cursor: not-allowed;\n `};\n`;\nDotsSVG.displayName = 'DotsSVG';\n\nexport const TreeDots = (props) => (\n <DotsSVG viewBox=\"0 0 44 32\" {...props}>\n <g transform=\"translate(10 4)\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M4.5,10.5A1.5,1.5,0,1,0,6,12,1.5,1.5,0,0,0,4.5,10.5Zm15,0A1.5,1.5,0,1,0,21,12,1.5,1.5,0,0,0,19.5,10.5Zm-7.5,0A1.5,1.5,0,1,0,13.5,12,1.5,1.5,0,0,0,12,10.5Z\" />\n </g>\n </DotsSVG>\n);\n\nexport default TreeDots;\n","import React, { useState, useEffect } from 'react';\nimport styled, { css, keyframes, useTheme } from 'styled-components';\nimport { withRouter } from 'react-router-dom';\nimport { NavHashLink } from 'react-router-hash-link';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport LinkedText from '../LinkedText';\nimport SubMenu from './SubMenu';\nimport ContextMenu from '../ContextMenu';\nimport ContextMenuItem from '../ContextMenuItem';\nimport TreeDotsIcon from '../../icons/TreeDotsIcon';\n\nconst DEFAULT_MENU_HEIGHT = 50;\nconst DEFAULT_SCROLL_OFFSET_LIMIT = 170;\nconst DEFAULT_MOBILE_MAX_WIDTH = '600px';\n\nconst fadeIn = keyframes`\n0% {\n opacity: 0;\n}\n100% {\n opacity: 0.5;\n}\n`;\n\nconst Link = styled(NavHashLink)`\n align-items: center;\n margin-right: 20px;\n font-family: ${(props) => props.theme.font.family};\n font-size: 14px;\n position: relative;\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n color: ${(props) => props.theme.color.navigationMenu.color.inactive};\n text-decoration: none;\n padding-bottom: 15px;\n\n &.active {\n border-bottom: 1px solid;\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n border-bottom-color: ${(props) => props.theme.color.navigationMenu.border.active};\n }\n\n &:hover,\n &:focus {\n border-bottom: 1px solid;\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n border-bottom-color: ${(props) => props.theme.color.navigationMenu.border.active};\n }\n`;\nLink.displayName = 'Menu-Link';\n\nconst Container = styled(Flex)`\n overflow: hidden;\n ${(props) =>\n props.scrolled &&\n css`\n position: fixed;\n width: 100%;\n width: -moz-available; /* WebKit-based browsers will ignore this. */\n z-index: 1000;\n top: 0;\n animation: ${fadeIn} 0.5s ease;\n -moz-animation: ${fadeIn} 0.5s ease;\n -webkit-animation: ${fadeIn} 0.5s ease;\n `}\n height: ${(props) => props.menuHeight}px;\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n box-shadow: 0px 3px 6px #00000029;\n`;\nContainer.displayName = 'Menu-Container';\n\nconst isLinkActive = (match = false, menuItem = {}, location = {}) => {\n if (!match) {\n return false;\n }\n // location hash is empty && menuItem hash is undefined\n if (location.hash === '' && menuItem.path && !menuItem.path.hash) {\n return true;\n }\n // location hash is different than menuItem hash\n if (menuItem.path && location.hash !== menuItem.path.hash) {\n return false;\n }\n return true;\n};\n\nfunction Menu({\n menuItems = [],\n auxiliaryItems = [],\n menuHeight = DEFAULT_MENU_HEIGHT,\n scrollLimit = DEFAULT_SCROLL_OFFSET_LIMIT,\n mobileMaxWidth = DEFAULT_MOBILE_MAX_WIDTH,\n}) {\n const theme = useTheme();\n const [scrolled, setScrolled] = useState(false);\n\n const handleScroll = () => {\n const scrollOffset = scrolled ? window.scrollY + menuHeight : window.scrollY;\n if (scrollOffset > scrollLimit) {\n setScrolled(true);\n } else {\n setScrolled(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n });\n\n return (\n <Media\n queries={{\n s: `(max-width: ${mobileMaxWidth})`,\n }}\n >\n {(screenSize) => (\n <Container\n alignItems=\"flex-end\"\n justifyContent=\"space-between\"\n menuHeight={menuHeight}\n width={1}\n px=\"20px\"\n scrolled={scrolled}\n >\n <Flex>\n {menuItems.map((i) =>\n i.subMenu ? (\n <SubMenu\n items={i.subMenu}\n label={i.label.toUpperCase()}\n rootPath={i.rootPath}\n key={`${i.label}${i.rootPath}`}\n id={i.id}\n />\n ) : (\n <Link\n to={i.path}\n key={i.id}\n elementId={i.elementId}\n // custom implementation of scroll to take into account the header height\n scroll={(el) => {\n // dispatch a custom event in order to disable Home auto scroll\n window.dispatchEvent(new Event('menu-fired-scroll'));\n window.scroll({ top: el.offsetTop - 115 });\n }}\n exact={i.exact}\n isActive={(match, location) => isLinkActive(match, i, location)}\n >\n {i.label.toUpperCase()}\n </Link>\n )\n )}\n </Flex>\n {screenSize.s ? (\n <Flex mr=\"-12px\">\n {!!auxiliaryItems.length && (\n <ContextMenu button={<TreeDotsIcon size=\"40px\" />}>\n {auxiliaryItems.map((auxItem) => (\n <ContextMenuItem key={auxItem.id}>\n <LinkedText\n font={theme.font.family}\n color={\n auxItem.dangerTheme\n ? theme.color.navigationMenu.color.inactive\n : theme.color.navigationMenu.color.active\n }\n hoverColor={\n auxItem.dangerTheme\n ? theme.color.navigationMenu.hover.danger\n : theme.color.navigationMenu.hover.inactive\n }\n fontSize=\"10px\"\n onClick={auxItem.onClick}\n id={auxItem.id}\n >\n {auxItem.label}\n </LinkedText>\n </ContextMenuItem>\n ))}\n </ContextMenu>\n )}\n </Flex>\n ) : (\n <Flex>\n {auxiliaryItems.map((auxItem) => (\n <Flex key={auxItem.id} pb=\"15px\" ml=\"20px\" style={{ fontSize: '14px' }}>\n <LinkedText\n font={theme.font.family}\n color={\n auxItem.dangerTheme\n ? theme.color.navigationMenu.color.inactive\n : theme.color.navigationMenu.color.active\n }\n hoverColor={\n auxItem.dangerTheme\n ? theme.color.navigationMenu.hover.danger\n : theme.color.navigationMenu.hover.inactive\n }\n fontSize=\"14px\"\n onClick={auxItem.onClick}\n id={auxItem.id}\n >\n {auxItem.label}\n </LinkedText>\n </Flex>\n ))}\n </Flex>\n )}\n </Container>\n )}\n </Media>\n );\n}\n\nexport default withRouter(Menu);\n","import React, { useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst ProfileSVG = styled(svgBase)`\n fill: #d0d0d0;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n fill: #66bb6a;\n `};\n`;\n\nexport default function ProfileIcon(props) {\n const [hover, setHover] = useState(false);\n const { active } = props;\n return (\n <Flex onMouseLeave={() => setHover(false)} onMouseEnter={() => setHover(true)} {...props}>\n <svg width={props.size || SIZE} height={props.size || SIZE} viewBox=\"0 0 40 40\">\n <g>\n <path fill=\"none\" d=\"M0,0H40V40H0Z\" />\n <ProfileSVG viewBox=\"0 0 40 40\" hover={hover || active}>\n <path\n d=\"M16,2A14,14,0,1,1,2,16,14.005,14.005,0,0,1,16,2ZM7.632,20.782A10.469,10.469,0,0,0,16.224,25.8a10.463,10.463,0,0,0,8.59-5.018,12.6,12.6,0,0,0-17.182,0ZM16,14.6a4.2,4.2,0,1,0-4.2-4.2A4.2,4.2,0,0,0,16,14.6Z\"\n transform=\"translate(4.333 4.333)\"\n />\n </ProfileSVG>\n </g>\n </svg>\n </Flex>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '40px';\n\nconst Base = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #d0d0d0;\n &:hover {\n fill: #66bb6a;\n }\n`;\n\nexport default function NotificationIcon({ showDot = false }) {\n return (\n <Base viewBox=\"0 0 40 40\">\n <g transform=\"translate(8 8)\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M22,20H2V18H3V11.031a9,9,0,1,1,18,0V18h1ZM9.5,21h5a2.5,2.5,0,1,1-5,0Z\" />\n {showDot && <circle cx=\"28\" cy=\"5\" r=\"4\" fill=\"#66bb6a\" />}\n </g>\n </Base>\n );\n}\n","import styled from 'styled-components';\n\nconst NavContainer = styled.div`\n padding: 0 20px 0 20px;\n height: 60px;\n background-color: #1d1d1d;\n`;\n\nexport default NavContainer;\n","import styled, { css } from 'styled-components';\n\nconst NavGroup = styled.div`\n display: flex;\n float: left;\n align-items: center;\n height: 100%;\n ${(props) =>\n props.right &&\n css`\n float: right;\n `};\n`;\n\nexport default NavGroup;\n","import styled from 'styled-components';\n\nconst NavTitle = styled.div`\n cursor: default;\n color: ${(props) => props.theme.color.navTitle.color};\n font-size: 19px;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 60px;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n`;\n\nexport default NavTitle;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst DoorIcon = styled(Base)`\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\n\nexport default function LogOutIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <DoorIcon {...props}>\n <path d=\"M4,18H6v2H18V4H6V6H4V3A1,1,0,0,1,5,2H19a1,1,0,0,1,1,1V21a1,1,0,0,1-1,1H5a1,1,0,0,1-1-1Zm2-7h7v2H6v3L1,12,6,8Z\" />\n </DoorIcon>\n </svg>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst AccountSVG = styled(svgBase)`\n width: ${(props) => props.size || '24px'};\n height: ${(props) => props.size || '24px'};\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\n\nexport default function AccountSettingsIcon(props) {\n return (\n <AccountSVG viewBox=\"0 0 448 512\" {...props}>\n <path d=\"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\" />\n </AccountSVG>\n );\n}\n","import styled, { css } from 'styled-components';\n\nconst StyledText = styled.div`\n color: ${(props) =>\n props.light\n ? props.theme.color.text.light.color\n : props.medium\n ? props.theme.color.text.medium.color\n : props.theme.color.text.default.color};\n\n ${(props) =>\n props.color &&\n css`\n color: ${props.color};\n `};\n\n ${(props) =>\n props.size &&\n css`\n font-size: ${props.size};\n `};\n`;\n\nexport default StyledText;\n","export function truncateString(str = '', num) {\n if (str === null) {\n return '';\n }\n if (str.length <= num) {\n return str;\n }\n return `${str.slice(0, num)}...`;\n}\n\nexport default { truncateString };\n","import React from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport styled from 'styled-components';\nimport LogOutIcon from '../../icons/LogOutIcon';\nimport AccountSettingsIcon from '../../icons/AccountSettingsIcon';\nimport StyledText from '../StyledText';\nimport FormLabel from '../FormLabel';\nimport LinkedText from '../LinkedText';\nimport { truncateString } from '../../utils';\n\nconst Card = styled(Box)`\n position: absolute;\n padding: 40px;\n width: 100%;\n background-color: ${(props) => props.theme.color.profile.background};\n border: solid 1px ${(props) => props.theme.color.profile.border};\n text-align: left;\n box-shadow: 0px 4px 10px #00000059;\n`;\n\nexport default function ProfileSection({\n displayName = '',\n email = '',\n hideSettings = true,\n onLogOut,\n onAccountGo,\n}) {\n const INSIDE_MARGIN = '16px';\n return (\n <Card justifyContent=\"left\">\n <StyledText light size=\"28px\" textAlign=\"left\">\n {truncateString(displayName, 19)}\n </StyledText>\n <Box mt={INSIDE_MARGIN}>\n <FormLabel style={{ wordBreak: 'break-all' }}>{email}</FormLabel>\n </Box>\n {hideSettings ? null : (\n <Flex\n mt=\"46px\"\n ml=\"10px\"\n onClick={onAccountGo}\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n style={{ cursor: 'pointer' }}\n >\n <AccountSettingsIcon size=\"18px\" />\n <LinkedText\n font=\"Roboto Mono\"\n color=\"#A0A0A0\"\n style={{ marginLeft: '20px', fontSize: '14px' }}\n >\n Account Settings\n </LinkedText>\n </Flex>\n )}\n <Flex\n mt=\"46px\"\n ml=\"10px\"\n onClick={onLogOut}\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n style={{ cursor: 'pointer' }}\n >\n <LogOutIcon size=\"20px\" />\n <LinkedText\n font=\"Roboto Mono\"\n color=\"#A0A0A0\"\n style={{ marginLeft: '20px', fontSize: '14px' }}\n >\n Sign Out\n </LinkedText>\n </Flex>\n </Card>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nconst Button = styled.div`\n background-color: transparent;\n border: transparent;\n font-family: 'Roboto Mono';\n font-size: 14px;\n white-space: nowrap;\n padding: ${(props) => (props.noPadding ? 0 : '8px')};\n color: ${(props) => props.theme.color.table.header.color};\n cursor: pointer;\n\n &:hover {\n ${(props) =>\n props.active\n ? css`\n background: ${props.theme.color.button.unregular.active.hover.background};\n color: ${props.theme.color.button.unregular.active.hover.color};\n border-color: ${props.theme.color.button.unregular.active.hover.border};\n `\n : css`\n color: ${props.theme.color.button.unregular.inactive.hover.color};\n border-color: ${props.theme.color.button.unregular.inactive.hover.border};\n `}\n ${(props) =>\n props.disabled &&\n css`\n background: ${props.theme.color.button.regular.accept.disabled.background};\n border-color: ${props.theme.color.button.regular.accept.disabled.border};\n cursor: not-allowed;\n `}\n }\n`;\n\nconst Text = styled.span`\n color: ${(props) =>\n props.active\n ? props.theme.color.button.unregular.active.default.color\n : props.theme.color.button.unregular.inactive.default.color};\n &:hover {\n ${(props) =>\n !props.disabled &&\n css`\n color: ${props.theme.color.button.unregular.active.hover.color};\n `}\n }\n`;\n\nfunction UnregularButton(props) {\n const { children, onClick, ...rest } = props;\n return (\n <Button onClick={rest.disabled ? () => {} : onClick} {...rest}>\n [<Text {...rest}>{props.children}</Text>]\n </Button>\n );\n}\n\nexport default UnregularButton;\n","import React from 'react';\n\nexport default function CrossIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"2 2 20 20\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill={props.color ? props.color : '#898989'}\n d=\"M12,10.586l4.95-4.95L18.364,7.05,13.414,12l4.95,4.95L16.95,18.364,12,13.414l-4.95,4.95L5.636,16.95,10.586,12,5.636,7.05,7.05,5.636Z\"\n />\n </svg>\n );\n}\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport get from 'lodash.get';\nimport CrossIcon from '../../icons/CrossIcon';\nimport StyledText from '../StyledText';\nimport RegularText from '../RegularText';\nimport LinkedText from '../LinkedText';\n\nconst Card = styled(Flex)`\n width: 100%;\n flex-direction: column;\n padding: 20px 0 20px;\n opacity: ${(props) => (props.saw ? 0.4 : 1)};\n filter: ${(props) => (props.loading ? 'blur(1px)' : 'none')};\n`;\n\nfunction NotificationCard({\n data = {},\n onRemoveNotification = () => {},\n lastItem = false,\n navigateTo = () => {},\n}) {\n const { notificationType, notification, read } = data;\n const [isRemoving, setRemoving] = useState(false);\n\n let notificationBody;\n let title;\n switch (notificationType) {\n case 'TEAM_INVITE_RECEIVED':\n notificationBody = (\n <Flex style={{ whiteSpace: 'break-spaces' }} flexDirection=\"column\">\n <RegularText style={{ whiteSpace: 'break-spaces' }}>\n {get(notification, 'team.name', 'A team')} wants you in their lines 💪\n </RegularText>\n <Flex ml=\"auto\" mt=\"16px\">\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team/join`)}>\n <RegularText mediumWeight>See invitation</RegularText>\n </LinkedText>\n </Flex>\n </Flex>\n );\n title = 'You have been invited';\n break;\n case 'TEAM_INVITE_CANCELLED':\n title = `${get(notification, 'updatedByUser.displayName', 'A user')} left the team`;\n notificationBody = (\n <Flex>\n <RegularText style={{ whiteSpace: 'break-spaces' }}>Check your team </RegularText>\n <Flex>\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team`)}>\n <RegularText mediumWeight>crew</RegularText>\n </LinkedText>\n </Flex>\n </Flex>\n );\n break;\n case 'TEAM_INVITE_REMOVED':\n title = 'You were removed from your team';\n notificationBody = (\n <Flex flexDirection=\"column\">\n <RegularText>\n You are not longer part of {get(notification, 'team.name', 'the team')}\n </RegularText>\n <Flex ml=\"auto\" mt=\"16px\">\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team/join`)}>\n <RegularText mediumWeight>Join another team</RegularText>\n </LinkedText>\n </Flex>\n </Flex>\n );\n break;\n case 'TEAM_INVITE_ACCEPTED':\n title = `${get(\n notification,\n 'updatedByUser.displayName',\n 'A user'\n )} accepted the team invitation`;\n notificationBody = (\n <Flex>\n <RegularText style={{ whiteSpace: 'break-spaces' }}>Check your team </RegularText>\n <Flex>\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team`)}>\n <RegularText mediumWeight>crew</RegularText>\n </LinkedText>\n </Flex>\n </Flex>\n );\n break;\n case 'TEAM_INVITE_REJECTED':\n title = 'Your team invite was rejected';\n notificationBody = (\n <Flex ml=\"auto\" mt=\"16px\">\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team/join`)}>\n <RegularText mediumWeight>Join another team</RegularText>\n </LinkedText>\n </Flex>\n );\n break;\n case 'TEAM_LEAVE':\n title = `${get(notification, 'updatedByUser.displayName', 'A user')} left the team`;\n notificationBody = (\n <Flex>\n <RegularText style={{ whiteSpace: 'break-spaces' }}>Check your team </RegularText>\n <Flex>\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team`)}>\n <RegularText mediumWeight>crew</RegularText>\n </LinkedText>\n </Flex>\n </Flex>\n );\n break;\n case 'TEAM_INVITE_DISBAND':\n title = 'Your team was disbanded';\n notificationBody = (\n <Flex ml=\"auto\" mt=\"16px\">\n <LinkedText onClick={() => navigateTo(`/event/${notification.eventId}/team/join`)}>\n <RegularText mediumWeight>Join another team</RegularText>\n </LinkedText>\n </Flex>\n );\n break;\n default:\n title = 'Check this out';\n }\n return (\n <>\n <Card saw={read} loading={isRemoving ? 1 : 0}>\n <Flex mb=\"8px\">\n <StyledText size=\"20px\" light>\n {title}\n </StyledText>\n <Flex\n ml=\"auto\"\n onClick={() => {\n setRemoving(true);\n onRemoveNotification();\n }}\n style={{ cursor: 'pointer' }}\n >\n <CrossIcon />\n </Flex>\n </Flex>\n {notificationBody}\n </Card>\n {!lastItem && <Flex style={{ borderBottom: '1px solid #535353' }} />}\n </>\n );\n}\n\nexport default NotificationCard;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Box, Flex } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport StyledText from '../StyledText';\nimport UnregularButton from '../UnregularButton';\nimport Notification from './NotificationCard';\n\nconst Container = styled(Box)`\n width: 100%;\n max-width: 420px;\n max-height: 700px;\n overflow-y: auto;\n padding: 40px 20px 40px 20px;\n background-color: ${(props) => props.theme.color.notificationList.container.background};\n border: solid 1px ${(props) => props.theme.color.notificationList.container.border};\n text-align: left;\n box-shadow: 0px 4px 10px ${(props) => props.theme.color.notificationList.container.boxShadow};\n filter: ${(props) => (props.loading ? 'blur(1px)' : 'none')};\n`;\n\nexport default function NotificationsList({\n onHideList = () => {},\n notifications = [],\n onRemoveNotification,\n onRemoveAllNotifications,\n}) {\n const history = useHistory();\n\n const onNavigation = (path) => {\n history.push(path);\n onHideList();\n };\n\n if (notifications.length === 0) {\n return (\n <Container>\n <StyledText size=\"20px\" light>\n All clear here...\n </StyledText>\n </Container>\n );\n }\n return (\n <Container>\n <Flex>\n <Flex ml=\"auto\" mt=\"-30px\" mr=\"-20px\">\n <UnregularButton onClick={onRemoveAllNotifications}>clear all</UnregularButton>\n </Flex>\n </Flex>\n {notifications.map((n, idx) => (\n <Notification\n key={n.createdAt}\n data={n}\n onRemoveNotification={() => onRemoveNotification(n)}\n lastItem={idx === notifications.length - 1}\n navigateTo={onNavigation}\n />\n ))}\n </Container>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport { useHistory } from 'react-router-dom';\nimport BotsIcon from '../../icons/BotsIcon';\nimport BooIcon from '../../icons/BooIcon';\nimport ProfileIcon from '../../icons/ProfileIcon';\nimport NotificationIcon from '../../icons/NotificationIcon';\nimport NavContainer from './NavContainer';\nimport NavGroup from './NavGroup';\nimport NavTitle from './NavTitle';\nimport ProfileSection from './ProfileSection';\nimport FloatingMenu from '../FloatingMenu';\nimport NotificationsList from './NotificationList';\nimport HovereableFlex from '../common/HovereableFlex';\nimport Breadcrumb from '../Breadcrumb';\n\nconst BOTS_TYPE = {\n SOC: 'SOC',\n NOC: 'NOC',\n};\nconst NAV_MOBILE_MAXWIDTH = '600px';\n\nconst HomeLink = ({ iconType, blockNavigation = false }) => {\n const history = useHistory();\n const homeNavigation = () => {\n if (!blockNavigation) {\n history.push('/');\n }\n };\n return (\n <Flex style={{ cursor: 'pointer' }} onClick={homeNavigation}>\n {iconType === BOTS_TYPE.NOC ? <BooIcon size={40} /> : <BotsIcon size={40} />}\n </Flex>\n );\n};\n\nfunction Nav({\n title = '',\n breadcrumbs = [],\n appType,\n onLogOut = () => {},\n userDisplayName = '',\n userEmail = '',\n loggedIn = false,\n hideUserSettings = false,\n hideUserNotifications = false,\n userNotifications = [],\n onOpenNotifications = () => {},\n onCloseNotifications = () => {},\n onRemoveNotification = () => {},\n onRemoveAllNotifications = () => {},\n}) {\n const [profileVisible, setProfileVisible] = useState(false);\n const [notificationsVisible, setNotificationsVisible] = useState(false);\n const [areNewNotifications, setNewNotificationsMark] = useState(false);\n const history = useHistory();\n const profileRef = useRef(null);\n const notififcationRef = useRef(null);\n\n useEffect(() => {\n if (!notificationsVisible) {\n setNewNotificationsMark(userNotifications.some((n) => n.read === null));\n }\n }, [userNotifications]);\n\n const hideSections = () => {\n setNotificationsVisible(false);\n setProfileVisible(false);\n };\n\n useEffect(() => {\n if (profileVisible || notificationsVisible) {\n window.addEventListener('scroll', hideSections);\n } else {\n window.removeEventListener('scroll', hideSections);\n }\n return () => window.removeEventListener('scroll', hideSections);\n }, [profileVisible, notificationsVisible]);\n\n const onNotificationIconClick = () => {\n setNewNotificationsMark(false);\n setNotificationsVisible(true);\n onOpenNotifications();\n };\n\n const onCloseNotificationsClick = () => {\n setNotificationsVisible(false);\n onCloseNotifications();\n };\n\n return (\n <Media\n queries={{\n s: `(max-width: ${NAV_MOBILE_MAXWIDTH})`,\n m: '(max-width: 900px)',\n }}\n >\n {(screenSize) => (\n <>\n <NavContainer>\n <NavGroup>\n <HomeLink iconType={appType} />\n {!screenSize.s && breadcrumbs.length > 0 && (\n <Flex ml=\"20px\">\n <Breadcrumb crumbs={breadcrumbs} />\n </Flex>\n )}\n </NavGroup>\n {!screenSize.s && <NavTitle>{title}</NavTitle>}\n <NavGroup right>\n {loggedIn && (\n <>\n <HovereableFlex\n mr=\"20px\"\n onClick={!hideUserNotifications && onNotificationIconClick}\n ref={notififcationRef}\n disable={hideUserNotifications}\n >\n <NotificationIcon showDot={areNewNotifications} />\n </HovereableFlex>\n <Flex onClick={() => setProfileVisible(true)} ref={profileRef}>\n <ProfileIcon active={profileVisible} />\n </Flex>\n </>\n )}\n </NavGroup>\n </NavContainer>\n {screenSize.s && title && (\n <Flex\n style={{\n color: '#898989',\n fontSize: '16px',\n width: '100%',\n height: '30px',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n backgroundColor: '#1d1d1d',\n paddingLeft: '20px',\n paddingRight: '5px',\n wordBreak: 'break-all',\n textAlign: 'left',\n }}\n >\n {title.substr(0, 70)}\n </Flex>\n )}\n {profileVisible && (\n <FloatingMenu\n onBackgroundClick={() => setProfileVisible(false)}\n mobile={screenSize.m}\n parentRef={profileRef}\n >\n <ProfileSection\n displayName={userDisplayName}\n email={userEmail}\n hideSettings={hideUserSettings}\n onLogOut={() => {\n setProfileVisible(false);\n onLogOut();\n }}\n onAccountGo={() => {\n setProfileVisible(false);\n history.push('/account');\n }}\n />\n </FloatingMenu>\n )}\n {notificationsVisible && (\n <FloatingMenu\n onBackgroundClick={onCloseNotificationsClick}\n mobile={screenSize.m}\n parentRef={notififcationRef}\n >\n <NotificationsList\n onHideList={() => setNotificationsVisible(false)}\n notifications={userNotifications}\n onRemoveNotification={onRemoveNotification}\n onRemoveAllNotifications={onRemoveAllNotifications}\n />\n </FloatingMenu>\n )}\n </>\n )}\n </Media>\n );\n}\n\nexport default Nav;\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst PrevSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #898989;\n &:hover {\n fill: #66bb6a;\n }\n`;\n\nexport default function PrevIcon() {\n return (\n <PrevSVG viewBox=\"0 0 24 24\">\n <g>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M10.828,12l4.95,4.95-1.414,1.414L8,12l6.364-6.364L15.778,7.05Z\" />\n </g>\n </PrevSVG>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst NextSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #898989;\n &:hover {\n fill: #66bb6a;\n }\n`;\n\nexport default function NextIcon() {\n return (\n <NextSVG viewBox=\"0 0 24 24\">\n <g>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M13.172,12,8.222,7.05,9.636,5.636,16,12,9.636,18.364,8.222,16.95Z\" />\n </g>\n </NextSVG>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport PrevIcon from '../../icons/PrevIcon';\nimport NextIcon from '../../icons/NextIcon';\n\nconst Button = styled.button`\n border: 1px solid ${(props) => props.theme.color.button.small.border};\n box-shadow: 0px 3px 6px #00000029;\n background: ${(props) => props.theme.color.button.small.background};\n &:hover,\n &:focus {\n background: ${(props) => props.theme.color.button.regular.accept.hover.background};\n box-shadow: 0px 4px 10px #00000040;\n }\n margin-left: 8px;\n margin-right: 8px;\n ${(props) =>\n props.disabled &&\n css`\n background: ${props.theme.color.button.regular.accept.disabled.background};\n border: 1px solid ${props.theme.color.button.regular.accept.disabled.border};\n color: ${props.theme.color.button.regular.accept.disabled.color};\n cursor: not-allowed;\n opacity: 0.4;\n `}\n`;\n\nexport default function Paginator({\n onNext,\n onPrev,\n isNext = false,\n isPrev = false,\n paginating = false,\n backgroundColor = '#1d1d1d',\n}) {\n const goPrev = (e) => {\n e.preventDefault();\n if (isPrev && !paginating) {\n onPrev();\n }\n };\n const goNext = (e) => {\n e.preventDefault();\n if (isNext && !paginating) {\n onNext();\n }\n };\n return (\n <Flex alignItems=\"center\" py=\"16px\" justifyContent=\"center\" backgroundColor={backgroundColor}>\n <Button disabled={!isPrev || paginating} onClick={goPrev}>\n <PrevIcon />\n </Button>\n <Button disabled={!isNext || paginating} onClick={goNext}>\n <NextIcon />\n </Button>\n </Flex>\n );\n}\n","import React from 'react';\n\nexport default function QuestionMark(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 26 26\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill=\"#a0a0a0\"\n d=\"M12.493,20.218h3.228v3.228H12.493Zm3.228-2.655V18.6H12.493V16.184a1.614,1.614,0,0,1,1.614-1.614,2.421,2.421,0,1,0-2.374-2.9L8.567,11.04a5.65,5.65,0,1,1,7.154,6.523Z\"\n transform=\"translate(-2.128 -3.223)\"\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport CheckMark from '../../icons/CheckMark';\nimport RegularText from '../RegularText';\nimport CrossIcon from '../../icons/CrossIcon';\nimport QuestionMark from '../../icons/QuestionIcon';\nimport { EVENT_QUESTION_STATUS } from '../../constants';\n\nfunction QuestionState({ status, iconSize = 24 }) {\n const theme = useTheme();\n switch (status) {\n case EVENT_QUESTION_STATUS.CORRECT:\n return (\n <Flex alignItems=\"center\">\n <CheckMark size={iconSize} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.correct}>\n Correct\n </RegularText>\n </Flex>\n );\n case EVENT_QUESTION_STATUS.INCORRECT:\n return (\n <Flex alignItems=\"center\">\n <CrossIcon size={iconSize} color={theme.color.table.row.incorrect} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.incorrect}>\n Incorrect\n </RegularText>\n </Flex>\n );\n default:\n return (\n <Flex alignItems=\"center\">\n <QuestionMark size={iconSize} />\n <RegularText fontSize=\"14px\" color={theme.color.question_card.color.pending}>\n Not Answered\n </RegularText>\n </Flex>\n );\n }\n}\n\nexport default QuestionState;\n","import React, { useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport { truncateString } from '../../utils';\nimport QuestionState from './QuestionState';\nimport RegularText from '../RegularText';\nimport {\n EVENT_QUESTION_STATUS,\n DEFAULT_BONUS_MULTIPLIER,\n QUESTION_CARD_DEFAULT_WIDTH,\n} from '../../constants';\nimport SpinnerIcon from '../../icons/SpinnerIcon';\nimport TrashCanIcon from '../../icons/TrashCanIcon';\n\nconst QUESTION_MAX_LENGHT = 520;\nconst QUESTION_TITLE_MAX_LENGHT = 33;\n\nconst Container = styled(Flex)`\n width: ${QUESTION_CARD_DEFAULT_WIDTH};\n height: 620px;\n background-color: ${(props) => props.theme.color.question_card.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n border: 2px solid;\n margin-bottom: ${(props) => props.theme.margin.s};\n border-color: ${(props) => props.theme.color.question_card.border.pending};\n ${(props) =>\n props.correct &&\n css`\n border-color: ${props.theme.color.question_card.border.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n border-color: ${props.theme.color.question_card.border.incorrect};\n `}\n \n &:hover {\n background-color: ${(props) => props.theme.color.question_card.background.active};\n cursor: pointer;\n }\n ${(props) =>\n props.highLigted &&\n css`\n background-color: ${props.theme.color.question_card.background.active};\n cursor: default;\n `}\n`;\n\nContainer.displayName = 'QuestionCard-Container';\n\nexport default function QuestionCard({\n question,\n answer = {},\n onSelectCard,\n selectedCard,\n points,\n isEditionView = false,\n removingQuestion = false,\n onRemoveQuestion = () => {},\n error = null,\n}) {\n const [isCardHover, setIsCardHover] = useState(false);\n const { base_point_value, question_id, background, title } = question;\n const isCorrect = answer.state === EVENT_QUESTION_STATUS.CORRECT;\n const isIncorrect = answer.state === EVENT_QUESTION_STATUS.INCORRECT || error !== null;\n\n const onRemoveQuestionClick = (e) => {\n e && e.stopPropagation();\n if (!removingQuestion) {\n onRemoveQuestion();\n }\n };\n\n return (\n <Flex justifyContent=\"center\" width=\"fit-content\">\n <Container\n highLigted={selectedCard}\n correct={isCorrect}\n incorrect={isIncorrect}\n onMouseEnter={() => setIsCardHover(true)}\n onMouseLeave={() => setIsCardHover(false)}\n >\n <Flex\n onClick={onSelectCard}\n flexDirection=\"column\"\n width={1}\n className=\"QuestionCard-clickeableContainer\"\n >\n <Flex alignItems=\"center\">\n <RegularText fontSize=\"24px\" mediumWeight>\n #{question_id}\n </RegularText>\n <Flex ml=\"auto\">\n <QuestionState status={answer.state} iconSize={19} />\n </Flex>\n </Flex>\n <Flex my=\"20px\">\n <RegularText\n fontSize=\"24px\"\n mediumWeight\n style={{\n textOverflow: 'ellipsis',\n textDecoration: isCardHover && 'underline solid 0.5px',\n }}\n >\n {truncateString(title, QUESTION_TITLE_MAX_LENGHT)}\n </RegularText>\n </Flex>\n <Box mt=\"20px\">\n <RegularText style={{ overflowWrap: 'anywhere' }}>\n {truncateString(background, QUESTION_MAX_LENGHT)}\n </RegularText>\n </Box>\n <Flex mt=\"auto\" alignItems=\"center\">\n {isCorrect ? (\n <RegularText fontSize=\"20px\" mediumWeight style={{ whiteSpace: 'break-spaces' }}>\n Points Earned:{' '}\n <RegularText fontSize=\"20px\" mediumWeight color=\"#81C784\">\n {points.total}{' '}\n </RegularText>\n / {Math.round(base_point_value * DEFAULT_BONUS_MULTIPLIER)}\n </RegularText>\n ) : (\n <RegularText fontSize=\"20px\" mediumWeight>\n Base Points: {base_point_value}\n </RegularText>\n )}\n {isEditionView && (\n <Flex\n className=\"QuestionCard-removeButton\"\n ml=\"auto\"\n height=\"30px\"\n onClick={onRemoveQuestionClick}\n >\n {removingQuestion ? (\n <SpinnerIcon size=\"30px\" color=\"#ba0816\" />\n ) : (\n isCardHover && <TrashCanIcon />\n )}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Container>\n </Flex>\n );\n}\n","import React from 'react';\nimport styled, { css, useTheme } from 'styled-components';\nimport Media from 'react-media';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { Flex } from 'reflexbox';\nimport { QUESTION_CARD_DEFAULT_WIDTH } from '../../constants';\n\nconst Container = styled(Flex)`\n width: ${QUESTION_CARD_DEFAULT_WIDTH};\n height: 620px;\n background-color: ${(props) => props.theme.color.question_card.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n border: 2px solid;\n margin: ${(props) => props.theme.margin.s} 0 ${(props) => props.theme.margin.s} 0;\n border-color: ${(props) => props.theme.color.question_card.border.pending};\n ${(props) =>\n props.correct &&\n css`\n border-color: ${props.theme.color.question_card.border.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n border-color: ${props.theme.color.question_card.border.incorrect};\n `}\n \n &:hover {\n background-color: ${(props) => props.theme.color.question_card.background.active};\n cursor: pointer;\n }\n ${(props) =>\n props.highLigted &&\n css`\n background-color: ${props.theme.color.question_card.background.active};\n cursor: default;\n `}\n`;\n\nconst getGridConfiguration = (matches) => {\n if (matches.m) {\n return '1fr 1fr 1fr';\n }\n if (matches.s) {\n return '1fr 1fr';\n }\n return `${QUESTION_CARD_DEFAULT_WIDTH}`;\n};\n\nconst DESCRIPTION_SKELETON_LINES = 10;\nfunction QuestionCardBlock() {\n const theme = useTheme();\n return (\n <Container>\n <Flex flexDirection=\"column\">\n <SkeletonTheme\n color={theme.color.skeleton.color}\n highlightColor={theme.color.skeleton.highlightColor}\n >\n <Skeleton height=\"30px\" width=\"330px\" />\n </SkeletonTheme>\n <Flex my=\"30px\" />\n <SkeletonTheme\n color={theme.color.skeleton.color}\n highlightColor={theme.color.skeleton.highlightColor}\n >\n <Skeleton height=\"20px\" width=\"330px\" count={DESCRIPTION_SKELETON_LINES} />\n </SkeletonTheme>\n <Flex my=\"110px\" />\n <SkeletonTheme\n color={theme.color.skeleton.color}\n highlightColor={theme.color.skeleton.highlightColor}\n >\n <Skeleton height=\"24px\" width=\"330px\" />\n </SkeletonTheme>\n </Flex>\n </Container>\n );\n}\n\nexport default function QuestionCardSkeleton() {\n return (\n <Media\n queries={{\n s: '(min-width: 1000px)',\n m: '(min-width: 1880px)',\n }}\n >\n {(matches) => (\n <Flex\n width={1}\n style={{\n display: 'grid',\n gridTemplateColumns: getGridConfiguration(matches),\n gridGap: '22px',\n gridAutoFlow: 'dense',\n }}\n >\n <QuestionCardBlock />\n {matches.s && <QuestionCardBlock />}\n {matches.m && <QuestionCardBlock />}\n </Flex>\n )}\n </Media>\n );\n}\n","export const EVENT_QUESTION_STATUS = {\n CORRECT: 'CORRECT',\n INCORRECT: 'INCORRECT',\n PENDING: 'PENDING',\n};\nexport const DEFAULT_BONUS_MULTIPLIER = 2;\n","import React, { useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex, Box } from 'reflexbox';\nimport RegularText from '../RegularText';\nimport { EVENT_QUESTION_STATUS } from './constants';\nimport SpinnerIcon from '../../icons/SpinnerIcon';\nimport TrashCanIcon from '../../icons/TrashCanIcon';\n\nconst Container = styled(Flex)`\n width: 100%;\n height: 60px;\n background-color: ${(props) => props.theme.color.question_card.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n border: 2px solid;\n margin-bottom: ${(props) => props.theme.margin.s};\n border-color: ${(props) => props.theme.color.question_card.border.pending};\n ${(props) =>\n props.correct &&\n css`\n border-color: ${props.theme.color.question_card.border.correct};\n `}\n ${(props) =>\n props.incorrect &&\n css`\n border-color: ${props.theme.color.question_card.border.incorrect};\n `}\n \n &:hover {\n background-color: ${(props) => props.theme.color.question_card.background.active};\n cursor: pointer;\n }\n ${(props) =>\n props.highLigted &&\n css`\n background-color: ${props.theme.color.question_card.background.active};\n cursor: default;\n `}\n`;\nContainer.displayName = 'QuestionInLine-Container';\n\nexport default function QuestionInLine({\n question,\n answer = {},\n onSelectCard,\n selectedCard,\n points,\n isEditionView = false,\n removingQuestion = false,\n onRemoveQuestion = () => {},\n error = null,\n}) {\n const [isCardHover, setIsCardHover] = useState(false);\n const { base_point_value, question_id, title } = question;\n const isCorrect = answer.state === EVENT_QUESTION_STATUS.CORRECT;\n\n const onRemoveQuestionClick = (e) => {\n e && e.stopPropagation();\n if (!removingQuestion) {\n onRemoveQuestion();\n }\n };\n\n return (\n <Container\n highLigted={selectedCard}\n correct={isCorrect}\n incorrect={answer.state === EVENT_QUESTION_STATUS.INCORRECT || error}\n onClick={onSelectCard}\n onMouseEnter={() => setIsCardHover(true)}\n onMouseLeave={() => setIsCardHover(false)}\n >\n <Flex alignItems=\"center\" width={1}>\n <Box style={{ whiteSpace: 'nowrap' }}>\n <RegularText fontSize=\"24px\" mediumWeight style={{ display: 'contents' }}>\n # {question_id}\n </RegularText>\n </Box>\n <Box\n ml=\"30px\"\n mr=\"12px\"\n style={{ whiteSpace: 'nowrap', overflow: 'hidden' }}\n width=\"-webkit-fill-available\"\n >\n <RegularText\n fontSize=\"20px\"\n style={{\n textOverflow: 'ellipsis',\n textDecoration: isCardHover && 'underline solid 0.5px',\n }}\n >\n {title}\n </RegularText>\n </Box>\n {isEditionView ? (\n <Box ml=\"auto\" onClick={onRemoveQuestionClick} width=\"24px\">\n {removingQuestion ? (\n <SpinnerIcon size=\"30px\" color=\"#ba0816\" />\n ) : (\n isCardHover && <TrashCanIcon />\n )}\n </Box>\n ) : (\n <Box ml=\"auto\" justifyContent=\"flex-end\" width=\"70px\">\n {isCorrect ? (\n <RegularText fontSize=\"20px\" mediumWeight color=\"#81C784\">\n {points.total}\n </RegularText>\n ) : (\n <RegularText fontSize=\"20px\" mediumWeight>\n {base_point_value}\n </RegularText>\n )}\n </Box>\n )}\n </Flex>\n </Container>\n );\n}\n","import React, { useRef, useLayoutEffect, useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { Flex } from 'reflexbox';\n\nconst Container = styled(Flex)`\n width: 100%;\n height: 60px;\n background-color: ${(props) => props.theme.color.question_card.background.inactive};\n padding: ${(props) => props.theme.margin.s};\n border: 2px solid;\n margin-bottom: ${(props) => props.theme.margin.s};\n border-color: ${(props) => props.theme.color.question_card.border.pending};\n`;\n\nconst DEFUALT_SKELETON_WIDTH = '300px';\nfunction QuestionInLineBlock() {\n const containerRef = useRef(null);\n const theme = useTheme();\n const [skeletonWidth, setSkeletonWidth] = useState(DEFUALT_SKELETON_WIDTH);\n\n useLayoutEffect(() => {\n if (containerRef && containerRef.current) {\n setSkeletonWidth(\n containerRef.current.getBoundingClientRect().width - theme.margin.s.replace(/px/, '') * 2\n );\n }\n }, [containerRef]);\n\n return (\n <Container ref={containerRef}>\n <SkeletonTheme\n color={theme.color.skeleton.color}\n highlightColor={theme.color.skeleton.highlightColor}\n >\n <Skeleton height=\"20px\" width={skeletonWidth} />\n </SkeletonTheme>\n </Container>\n );\n}\n\nexport default function QuestionInLineCardSkeleton() {\n return (\n <Flex flexDirection=\"column\" width={1}>\n <QuestionInLineBlock />\n <QuestionInLineBlock />\n <QuestionInLineBlock />\n </Flex>\n );\n}\n","import React from 'react';\nimport styled, { css, useTheme } from 'styled-components';\nimport groupBy from 'lodash/groupBy';\nimport map from 'lodash.map';\nimport capitalize from 'lodash.capitalize';\nimport { Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\nimport { RegularText, LinkedText, CopyToClipboard } from '../../index';\nimport { RESOURCE_STATE, RESOURCE_TYPE, RESOURCES_COLORS } from '../../constants';\n\nconst UNASSIGNED_GROUP_KEY = 'undefined';\n\nconst Row = styled(Flex)`\n font-size: 14px;\n padding: 4px;\n color: #d0d0d0;\n word-break: break-all;\n font-family: Roboto Mono;\n ${(props) =>\n props.border &&\n css`\n padding: 6px 4px 6px 4px;\n border-top: 1px solid #2c2c2c;\n `};\n`;\nRow.displayName = 'ResourcesList-Row';\n\nconst Table = styled(Flex)`\n border: 1px solid #2c2c2c;\n width: 100%;\n flex-direction: column;\n color: ${(props) => props.theme.color.text.light.color};\n`;\nTable.displayName = 'ResourcesList-Table';\n\nconst ResourcesGroup = ({\n resources = [],\n dependencyObj = {},\n matches = {},\n showFinishedLabel = false,\n}) => {\n let colorIdx = 0;\n let styleFlexDirection = {};\n\n if (matches.extraSmall || matches.small) {\n styleFlexDirection = { flexDirection: 'column', alignItems: 'flex-start' };\n }\n\n const stateMessage = showFinishedLabel ? 'Finished' : 'Pending assignment...';\n\n const resourcesLines = resources.map((r) => {\n colorIdx++;\n return (\n <Row style={{ styleFlexDirection }} key={r.resourceSpecSrn} className=\"ResourcesList-Row\">\n <Flex ml=\"5px\" mr=\"10px\">\n {capitalize(r.name)}:\n </Flex>\n <Flex className=\"ResourcesList-UriItem\" ml={(matches.extraSmall || matches.small) && '5px'}>\n {r.url ? (\n <LinkedText\n onClick={() => window.open(r.url, '_blank')}\n color={RESOURCES_COLORS[colorIdx]}\n >\n {r.url}\n </LinkedText>\n ) : (\n <Flex className=\"ResourcesList-StateMessage\" color={RESOURCES_COLORS[colorIdx]}>\n {stateMessage}\n </Flex>\n )}\n </Flex>\n </Row>\n );\n });\n return (\n <Flex width={1} mb=\"10px\">\n <Table className=\"ResourcesList-Table\">\n {resourcesLines}\n {dependencyObj && dependencyObj.type && (\n <Row border className=\"ResourcesList-Row\">\n {dependencyObj.type === RESOURCE_TYPE.CREDENTIALS && (\n <Flex\n className=\"ResourcesList-DependencyCredentials\"\n style={{ wordBreak: 'break-all', ...styleFlexDirection }}\n >\n <Flex ml=\"5px\" mr=\"10px\">\n Credentials:\n </Flex>\n {dependencyObj.state === RESOURCE_STATE.ASSIGNED ? (\n <>\n {matches.extraSmall ? (\n <Flex ml=\"5px\" style={{ flexDirection: 'column', alignItems: 'flex-start' }}>\n <Flex>\n <RegularText fontSize=\"14px\" color=\"#A5D6A7\" mediumWeight>\n {dependencyObj.user}\n </RegularText>\n <CopyToClipboard value={dependencyObj.user} />\n </Flex>\n <Flex>\n <RegularText fontSize=\"14px\" color=\"#A5D6A7\" mediumWeight>\n {dependencyObj.password}\n </RegularText>\n <CopyToClipboard value={dependencyObj.password} />\n </Flex>\n </Flex>\n ) : (\n <Flex ml={matches.small && '5px'}>\n <RegularText fontSize=\"14px\" color=\"#A5D6A7\" mediumWeight>\n {dependencyObj.user}\n </RegularText>\n <CopyToClipboard value={dependencyObj.user} />\n <Flex mr=\"10px\">/</Flex>\n <RegularText fontSize=\"14px\" color=\"#A5D6A7\" mediumWeight>\n {dependencyObj.password}\n </RegularText>\n <CopyToClipboard value={dependencyObj.password} />\n </Flex>\n )}\n </>\n ) : (\n <Flex className=\"ResourcesList-StateMessage\" color=\"#A5D6A7\">\n {stateMessage}\n </Flex>\n )}\n </Flex>\n )}\n {(dependencyObj.type === RESOURCE_TYPE.SERVER ||\n dependencyObj.type === RESOURCE_TYPE.URL) && (\n <Flex\n className=\"ResourcesList-DependencyServer\"\n style={{ wordBreak: 'break-all', ...styleFlexDirection }}\n >\n <Flex ml=\"5px\" mr=\"10px\">\n Server:\n </Flex>\n <Flex\n className=\"ResourcesList-UriItem \"\n ml={(matches.extraSmall || matches.small) && '5px'}\n >\n {dependencyObj.state === RESOURCE_STATE.ASSIGNED ? (\n <>\n <RegularText fontSize=\"14px\" color=\"#A5D6A7\" mediumWeight>\n {dependencyObj.url}\n </RegularText>\n <CopyToClipboard value={dependencyObj.url} />\n </>\n ) : (\n <Flex className=\"ResourcesList-StateMessage\" color=\"#A5D6A7\">\n {stateMessage}\n </Flex>\n )}\n </Flex>\n </Flex>\n )}\n </Row>\n )}\n </Table>\n </Flex>\n );\n};\n\nconst getGeneralItems = (generalResources = [], resourceCollection = {}) => {\n const filteredGeneralItems = generalResources.filter(\n (resource) => !(resource.resourceSpecSrn in resourceCollection)\n );\n return {\n generalResources: filteredGeneralItems.filter(\n (resource) =>\n (resource.type === RESOURCE_TYPE.SERVER || resource.type === RESOURCE_TYPE.URL) &&\n !resource.isDependency\n ),\n generalDependency: filteredGeneralItems.find(\n (resource) => resource.type === RESOURCE_TYPE.CREDENTIALS && !resource.isDependency\n ),\n };\n};\n\nexport default function ResourcesList({\n loading = false,\n resources = [],\n showFinishedLabel = false,\n}) {\n const SKELETON_STYLE = {\n COLOR: useTheme().color.skeleton.color,\n EFFECT: useTheme().color.skeleton.highlightColor,\n };\n if (loading) {\n return (\n <SkeletonTheme color={SKELETON_STYLE.COLOR} highlightColor={SKELETON_STYLE.EFFECT}>\n <Skeleton count={3} />\n </SkeletonTheme>\n );\n }\n const resourcesGroupedByDependency = groupBy(resources, 'resourceDependencyId');\n // clean the unassigned resources index, check if there is only dependencyResources\n if (\n resourcesGroupedByDependency[UNASSIGNED_GROUP_KEY] &&\n resourcesGroupedByDependency[UNASSIGNED_GROUP_KEY].length > 0\n ) {\n // only get the resources that has not resourceDependencyId\n const unAssignedRes = resourcesGroupedByDependency[UNASSIGNED_GROUP_KEY].filter(\n (r) => !r.isDependency\n );\n if (unAssignedRes.length === 0) {\n delete resourcesGroupedByDependency[UNASSIGNED_GROUP_KEY];\n }\n }\n return (\n <Media\n queries={{\n extraSmall: '(max-width: 510px)',\n small: '(min-width: 511px) and (max-width: 566px)',\n }}\n >\n {(matches) => (\n <>\n {map(resourcesGroupedByDependency, (groupedResources, groupKey, resourceCollection) => {\n if (groupKey === UNASSIGNED_GROUP_KEY) {\n const { generalResources, generalDependency } = getGeneralItems(\n groupedResources,\n resourceCollection\n );\n return (\n <ResourcesGroup\n key={groupKey}\n resources={generalResources}\n dependencyObj={generalDependency}\n matches={matches}\n showFinishedLabel={showFinishedLabel}\n />\n );\n }\n const resourceObj = resources.find((r) => r.resourceSpecSrn === groupKey);\n return (\n <ResourcesGroup\n key={groupKey}\n resources={groupedResources}\n dependencyObj={resourceObj}\n matches={matches}\n showFinishedLabel={showFinishedLabel}\n />\n );\n })}\n </>\n )}\n </Media>\n );\n}\n","import styled, { keyframes, css } from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst shaking = keyframes`\n 0% { transform: translate(1px, 1px) rotate(0deg); }\n 10% { transform: translate(-1px, -2px) rotate(-1deg); }\n 20% { transform: translate(-3px, 0px) rotate(1deg); }\n 30% { transform: translate(3px, 2px) rotate(0deg); }\n 40% { transform: translate(1px, -1px) rotate(1deg); }\n 50% { transform: translate(-1px, 2px) rotate(-1deg); }\n 60% { transform: translate(-3px, 1px) rotate(0deg); }\n 70% { transform: translate(3px, 1px) rotate(-1deg); }\n 80% { transform: translate(-1px, -1px) rotate(1deg); }\n 90% { transform: translate(1px, 2px) rotate(0deg); }\n 100% { transform: translate(1px, -2px) rotate(-1deg); }\n`;\n\nconst ShakeContent = styled(Flex)`\n ${(props) =>\n props.shake &&\n css`\n animation: ${shaking} 700ms ease;\n transform: translate(0, 0);\n `}\n`;\n\nexport default ShakeContent;\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst SwitchBackgorund = styled(Flex)`\n width: 150px;\n cursor: pointer;\n height: 28px;\n background-color: ${(props) => (props.checked ? '#81C784' : '#FFCC66')};\n font-family: Roboto Mono;\n letter-spacing: 0px;\n color: #1d1d1d;\n`;\nSwitchBackgorund.displayName = 'SwitchButton-SwitchBackgorund';\n\nconst SwitchIcon = styled.div`\n width: 30px;\n height: 30px;\n top: -29px;\n cursor: pointer;\n left: ${(props) => (!props.checked ? '0px' : '120px')};\n position: relative;\n z-index: 1;\n transition: all 300ms ease;\n`;\nSwitchIcon.displayName = 'SwitchButton-SwitchIcon';\n\nfunction SwitchButton(props) {\n const { checked, handleToggle, id, onIcon, offIcon, onText, offText } = props;\n const changeInput = () => {\n handleToggle({\n target: {\n value: !checked,\n id,\n },\n });\n };\n return (\n <div onClick={changeInput} aria-hidden>\n <SwitchBackgorund checked={checked} alignItems=\"center\" justifyContent=\"center\" mt=\"6px\">\n {checked ? onText : offText}\n </SwitchBackgorund>\n <SwitchIcon checked={checked}>{checked ? onIcon : offIcon}</SwitchIcon>\n </div>\n );\n}\nexport default SwitchButton;\n","import styled from 'styled-components';\n\nconst TableHead = styled.thead`\n height: ${(props) => props.height};\n background-color: ${(props) => props.backgroundColor};\n`;\n\nexport default TableHead;\n","import styled from 'styled-components';\n\nconst TableBody = styled.tbody``;\n\nexport default TableBody;\n","import styled, { css } from 'styled-components';\nimport TableHead from '../TableHead';\nimport TableBody from '../TableBody';\nimport TableRow from '../TableRow';\nimport TableData from '../TableData';\n\nconst Table = styled.table`\n width: 100%;\n border-collapse: collapse;\n background: ${(props) => props.theme.color.background};\n text-align: left;\n font-family: ${(props) => props.theme.font.family};\n font-size: 14px;\n border: 1px solid ${(props) => props.theme.color.table.border};\n ${(props) =>\n props.fixed &&\n css`\n table-layout: fixed;\n `}\n\n ${TableData} {\n padding: ${(props) => !props.noDataPadding && '4px'};\n ${(props) =>\n props.dataPadding &&\n css`\n padding: ${props.dataPadding};\n `}\n }\n\n ${TableHead} {\n padding: 4px;\n ${TableRow} {\n background-color: ${(props) =>\n props.backgroundColor\n ? props.backgroundColor\n : props.theme.color.table.header.background.inactive};\n color: ${(props) => props.theme.color.table.header.color};\n }\n }\n ${TableBody} {\n ${TableRow}:nth-child(odd) {\n background-color: ${(props) =>\n props.backgroundColor ? props.backgroundColor : props.theme.color.table.row.oddBackground};\n }\n\n ${TableRow} {\n ${(props) =>\n props.backgroundColor &&\n css`\n background-color: ${props.backgroundColor};\n `}\n }\n }\n`;\n\nexport default Table;\n","import React from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport TableData from '../TableData';\n\nfunction TableHeader({ children, onClick, noWrap, xpadding, ypadding, justify, ...rest }) {\n return (\n <TableData {...rest} onClick={onClick}>\n <Flex alignItems=\"center\" justifyContent={justify} px={xpadding} py={ypadding}>\n <Box css={noWrap ? { whiteSpace: 'nowrap' } : {}}>{children}</Box>\n </Flex>\n </TableData>\n );\n}\n\nexport default TableHeader;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\n\nconst Tab = styled.div`\n align-items: center;\n margin-right: 20px;\n font-family: Roboto Mono;\n font-size: 14px;\n position: relative;\n background-color: #1d1d1d;\n color: #898989;\n text-decoration: none;\n padding-bottom: 15px;\n\n ${(props) =>\n props.active &&\n css`\n border-bottom: 1px solid;\n color: #66bb6a;\n border-bottom-color: #66bb6a;\n `}\n\n &:hover,\n &:focus {\n border-bottom: 1px solid;\n border-bottom-color: #66bb6a;\n cursor: pointer;\n }\n`;\n\nconst TabContainer = styled(Flex)`\n height: 20px;\n background-color: #1d1d1d;\n overflow-x: auto;\n`;\n\nconst Tabs = ({ current, labels, onTabChange }) => {\n return (\n <TabContainer>\n {labels.map((l, idx) => (\n <Tab key={l} active={idx === current} onClick={() => onTabChange(idx)}>\n {l.toUpperCase()}\n </Tab>\n ))}\n </TabContainer>\n );\n};\n\nexport default Tabs;\n","import React, { useState, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Flex } from 'reflexbox';\nimport { useLocation } from 'react-router-dom';\n\nconst TabButton = styled(Flex)`\n align-items: center;\n font-family: Roboto Mono;\n font-size: 14px;\n position: relative;\n background-color: ${(props) => props.theme.color.navigationMenu.background.inactive};\n color: ${(props) => props.theme.color.navigationMenu.color.inactive};\n text-decoration: none;\n padding: 15px;\n border-bottom: 1px solid transparent;\n box-shadow: inset 3px 2px 20px 1px #00000029;\n opacity: 0.8;\n\n ${(props) =>\n props.active &&\n css`\n color: ${props.theme.color.navigationMenu.color.active};\n border-bottom-color: ${props.theme.color.navigationMenu.border.active};\n border-bottom: 1px solid;\n box-shadow: -1px -6px 3px #00000029;\n opacity: 1;\n `}\n\n &:hover,\n &:focus {\n border-bottom: 1px solid;\n color: ${(props) => props.theme.color.navigationMenu.color.active};\n border-bottom-color: ${(props) => props.theme.color.navigationMenu.border.active};\n cursor: pointer;\n }\n\n ${(props) =>\n props.fontColor &&\n css`\n color: ${props.fontColor};\n `}\n`;\n\nconst NOT_FOUND_IDX = -1;\nexport default function TabScreen({ tabs = [], tabsContent = [] }) {\n const [activeScreenIdx, setActiveScreen] = useState(0);\n const location = useLocation();\n\n useEffect(() => {\n const hashMatchIdx = tabs.findIndex((t) => t.hash === location.hash);\n if (hashMatchIdx !== NOT_FOUND_IDX) {\n setActiveScreen(hashMatchIdx);\n }\n }, [location.hash]);\n\n return (\n <Flex flexDirection=\"column\">\n <Flex>\n {tabs.map((t, idx) => (\n <TabButton\n key={t.label}\n active={idx === activeScreenIdx}\n fontColor={t.fontColor}\n onClick={() => setActiveScreen(idx)}\n >\n {t.label}\n </TabButton>\n ))}\n </Flex>\n {tabsContent[activeScreenIdx]}\n </Flex>\n );\n}\n","import styled, { css } from 'styled-components';\n\nconst Textarea = styled.textarea`\n background: ${(props) => props.theme.color.input.default.background} 0% 0% no-repeat padding-box;\n border: 1px solid ${(props) => props.theme.color.input.default.border};\n opacity: 1;\n resize: none;\n overflow: hidden;\n color: ${(props) => props.theme.color.input.default.color};\n letter-spacing: 0px;\n font-family: 'Roboto Mono';\n font-size: 14px;\n display: block;\n width: -webkit-fill-available;\n width: -moz-available;\n height: ${(props) => (props.height ? props.height : '')};\n ${(props) =>\n props.search &&\n css`\n padding-left: 30px;\n background-color: #373737;\n `}\n &::placeholder {\n color: ${(props) => props.theme.color.input.default.placeholderColor};\n }\n &:hover {\n background: ${(props) => props.theme.color.input.hover.background} 0% 0% no-repeat padding-box;\n border: 1px solid ${(props) => props.theme.color.input.hover.border};\n opacity: 1;\n }\n &:focus {\n background: ${(props) => props.theme.color.input.focused.background} 0% 0% no-repeat padding-box;\n ${(props) =>\n props.search &&\n css`\n background-color: #454545;\n `}\n border: 1px solid ${(props) =>\n props.dangerBorder\n ? props.theme.color.input.error.border\n : props.theme.color.input.focused.border};\n opacity: 1;\n }\n ${(props) =>\n props.validate &&\n !props.validating &&\n css`\n box-shadow: none;\n border: 1px solid\n ${props.valid\n ? props.theme.color.input.success.border\n : props.theme.color.input.error.border};\n `}\n ${(props) =>\n props.dangerBorder &&\n css`\n box-shadow: none;\n border: 1px solid ${props.theme.color.input.error.border};\n `}\n`;\nTextarea.displayName = 'Textarea';\n\nexport default Textarea;\n","import React from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { useQuery } from '../../hooks';\n\nexport default function UnauthenticatedRoute({ children, validateSession = () => true, ...rest }) {\n const query = useQuery();\n const redirectRoute = query.get('redirect');\n\n return (\n <Route {...rest}>\n {!validateSession() ? (\n children\n ) : (\n <Redirect to={redirectRoute === '' || redirectRoute === null ? '/' : redirectRoute} />\n )}\n </Route>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst AddSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #373737;\n\n &:hover {\n fill: #66bb6a;\n }\n\n ${(props) =>\n props.hover &&\n css`\n fill: #66bb6a;\n `}\n`;\nAddSVG.displayName = 'AddIcon-AddSVG';\n\nexport default function AddIcon(props) {\n return (\n <AddSVG viewBox=\"0 0 512 512\" {...props}>\n <g>\n <g>\n <path\n d=\"M256,0C114.84,0,0,114.84,0,256s114.84,256,256,256s256-114.84,256-256S397.16,0,256,0z M256,475.429\n\t\t\tc-120.997,0-219.429-98.432-219.429-219.429S135.003,36.571,256,36.571S475.429,135.003,475.429,256S376.997,475.429,256,475.429z\n\t\t\t\"\n />\n </g>\n </g>\n <g>\n <g>\n <path\n d=\"M256,134.095c-10.1,0-18.286,8.186-18.286,18.286v207.238c0,10.1,8.186,18.286,18.286,18.286\n\t\t\tc10.1,0,18.286-8.186,18.286-18.286V152.381C274.286,142.281,266.1,134.095,256,134.095z\"\n />\n </g>\n </g>\n <g>\n <g>\n <path\n d=\"M359.619,237.714H152.381c-10.1,0-18.286,8.186-18.286,18.286c0,10.1,8.186,18.286,18.286,18.286h207.238\n\t\t\tc10.1,0,18.286-8.186,18.286-18.286C377.905,245.9,369.719,237.714,359.619,237.714z\"\n />\n </g>\n </g>\n </AddSVG>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst BlockSVG = styled(Base)`\n fill: #898989;\n pointer-events: all;\n &:hover {\n fill: #e06c75;\n }\n`;\nBlockSVG.displayName = 'BlockIcon-BlockSVG';\n\nexport default function BlockIcon(props) {\n return (\n <BlockSVG width={props.size || 32} height={props.size || 32} viewBox=\"0 0 32 32\" {...props}>\n <path style={{isolation: 'isolate'}} d=\"M242.983-62.55a10,10,0,0,0-10,10,10,10,0,0,0,10,10,10,10,0,0,0,10-10A10.011,10.011,0,0,0,242.983-62.55Zm-7.5,10a7.487,7.487,0,0,1,7.475-7.5,7.487,7.487,0,0,1,4.364,1.394L236.877-48.211A7.452,7.452,0,0,1,235.483-52.55Zm11.864,6.106a7.486,7.486,0,0,1-4.364,1.395,7.454,7.454,0,0,1-4.339-1.394l10.445-10.445A7.487,7.487,0,0,1,247.347-46.444Z\" transform=\"translate(-226.983 68.551)\"/>\n </BlockSVG>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst CheckIcon = styled(Base)`\n fill: #a0a0a0;\n &:hover {\n fill: #e06c75;\n cursor: pointer;\n }\n`;\nCheckIcon.displayName = 'ClearIcon-CheckIcon';\n\nexport default function CheckMark(props) {\n return (\n <CheckIcon {...props} width={props.size || 24} height={props.size || 24} viewBox=\"0 0 28 28\">\n <rect fill=\"none\" width=\"24\" height=\"24\" />\n <path\n d=\"M6.535,3H21a1,1,0,0,1,1,1V20a1,1,0,0,1-1,1H6.535a1,1,0,0,1-.832-.445l-5.333-8a1,1,0,0,1,0-1.11l5.333-8A1,1,0,0,1,6.535,3ZM13,10.586,10.172,7.757,8.757,9.172,11.586,12,8.757,14.828l1.415,1.415L13,13.414l2.828,2.829,1.415-1.415L14.414,12l2.829-2.828L15.828,7.757Z\"\n transform=\"translate(4 4)\"\n />\n </CheckIcon>\n );\n}\n","import React from 'react';\n\nexport default function CloseIcon(props) {\n return (\n <svg width={props.size || 30} height={props.size || 30} viewBox=\"1 7 30 20\">\n <rect fill={props.inverted ? 'none' : '#535353'} width=\"32\" height=\"32\" />\n <g transform=\"translate(4 4)\">\n <path fill={props.inverted ? 'none' : '#535353'} d=\"M0,0H24V24H0Z\" />\n <path\n fill={props.inverted ? '#535353' : '#1d1d1d'}\n d=\"M19,10h1a1,1,0,0,1,1,1V21a1,1,0,0,1-1,1H4a1,1,0,0,1-1-1V11a1,1,0,0,1,1-1H5V9A7,7,0,1,1,19,9Zm-2,0V9A5,5,0,1,0,7,9v1Zm-6,4v4h2V14Z\"\n />\n </g>\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst EnrollSVG = styled(Base)`\n width: ${(props) => props.size || '32px'};\n height: ${(props) => props.size || '32px'};\n cursor: ${(props) => props.cursor || 'pointer'};\n`;\nEnrollSVG.displayName = 'EnrollIcon-EnrollSVG';\n\nexport default function EnrollIcon(props) {\n return (\n <EnrollSVG fill={props.fill ? props.fill : '#898989'} height={props.size || 32} viewBox=\"0 0 512 512\" {...props}>\n <path d=\"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"></path>\n </EnrollSVG>\n );\n}","import React from 'react';\nimport styled from 'styled-components';\n\nimport Base from '../StyledSVGBase';\n\nconst Export = styled(Base)`\n fill: ${(props) => props.color || '#a0a0a0'};\n &:hover {\n fill: ${(props) => props.hoverColor || '#66bb6a'};\n cursor: pointer;\n }\n`;\nExport.displayName = 'ExportIcon-Export';\n\nexport default function ExportIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <Export {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M4,19H20V12h2v8a1,1,0,0,1-1,1H3a1,1,0,0,1-1-1V12H4ZM14,9v6H10V9H5l7-7,7,7Z\" />\n </Export>\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function GameIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill={props.fillColor || '#d0d0d0'}\n d=\"M7.05,13.406l3.534,3.536L9.171,18.356l1.415,1.415L9.172,21.185,6.7,18.71,3.868,21.539,2.454,20.125,5.283,17.3,2.808,14.821l1.414-1.414L5.636,14.82l1.413-1.414ZM3,3,6.546,3,18.363,14.821l1.415-1.414,1.414,1.414L18.718,17.3l2.828,2.829-1.414,1.414L17.3,18.71l-2.475,2.475-1.414-1.414,1.414-1.415L3,6.531ZM17.457,3,21,3l0,3.523-4.053,4.052L13.413,7.043Z\"\n />\n </svg>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst Grid = styled(Base)`\n fill: #535353;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n fill: #d0d0d0;\n `};\n ${(props) =>\n props.selected &&\n css`\n fill: #d0d0d0;\n `};\n`;\nGrid.displayName = 'GridIcon-Grid';\n\nexport default function GridIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <Grid {...props}>\n <path d=\"M9.333,11h5.334V3H9.333Zm0,10h5.334V13H9.333ZM21,3H16.667v8H22V4A1,1,0,0,0,21,3ZM2,4v7H7.333V3H3A1,1,0,0,0,2,4ZM16.667,21H21a1,1,0,0,0,1-1V13H16.667ZM2,20a1,1,0,0,0,1,1H7.333V13H2Z\" />\n <rect fill=\"none\" width=\"24\" height=\"24\" />\n </Grid>\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Base from '../StyledSVGBase';\n\nconst Import = styled(Base)`\n fill: ${(props) => props.color || '#a0a0a0'};\n &:hover {\n fill: ${(props) => props.hoverColor || '#66bb6a'};\n cursor: pointer;\n }\n`;\nImport.displayName = 'ImportIcon-Import';\n\nexport default function ImportIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <Import {...props}>\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path d=\"M4,19H20V12h2v8a1,1,0,0,1-1,1H3a1,1,0,0,1-1-1V12H4ZM14,9h5l-7,7L5,9h5V3h4Z\" />\n </Import>\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst Icon = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: ${(props) => props.color || '#989898'};\n &:hover {\n fill: #81c784;\n cursor: pointer;\n }\n`;\nIcon.displayName = 'LinkIcon-Icon';\n\nexport default function LinkIcon(props) {\n return (\n <Icon viewBox=\"0 0 482.8 482.8\" {...props}>\n <g>\n <path\n d=\"M255.2,209.3c-5.3,5.3-5.3,13.8,0,19.1c21.9,21.9,21.9,57.5,0,79.4l-115,115c-21.9,21.9-57.5,21.9-79.4,0l-17.3-17.3\n\t\t\tc-21.9-21.9-21.9-57.5,0-79.4l115-115c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-115,115C8.7,322.7,0,343.6,0,365.8\n\t\t\tc0,22.2,8.6,43.1,24.4,58.8l17.3,17.3c16.2,16.2,37.5,24.3,58.8,24.3s42.6-8.1,58.8-24.3l115-115c32.4-32.4,32.4-85.2,0-117.6\n\t\t\tC269.1,204,260.5,204,255.2,209.3z\"\n />\n <path\n d=\"M458.5,58.2l-17.3-17.3c-32.4-32.4-85.2-32.4-117.6,0l-115,115c-32.4,32.4-32.4,85.2,0,117.6c5.3,5.3,13.8,5.3,19.1,0\n\t\t\ts5.3-13.8,0-19.1c-21.9-21.9-21.9-57.5,0-79.4l115-115c21.9-21.9,57.5-21.9,79.4,0l17.3,17.3c21.9,21.9,21.9,57.5,0,79.4l-115,115\n\t\t\tc-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4l115-115c15.7-15.7,24.4-36.6,24.4-58.8\n\t\t\tC482.8,94.8,474.2,73.9,458.5,58.2z\"\n />\n </g>\n </Icon>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst List = styled(Base)`\n fill: #535353;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n fill: #d0d0d0;\n `};\n ${(props) =>\n props.selected &&\n css`\n fill: #d0d0d0;\n `};\n`;\nList.displayName = 'ListIcon-List';\n\nexport default function ListIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <List {...props}>\n <rect fill=\"none\" width=\"24\" height=\"24\" />\n <path d=\"M2,14.134H22V9.865H2ZM21,3H3A1,1,0,0,0,2,4V7.468H22V4A1,1,0,0,0,21,3ZM2,20a1,1,0,0,0,1,1H21a1,1,0,0,0,1-1V16.533H2Z\" />\n </List>\n </svg>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '24px';\n\nconst MinusSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #373737;\n\n &:hover {\n fill: #e06c75;\n }\n\n ${(props) =>\n props.hover &&\n css`\n fill: #e06c75;\n `}\n`;\nMinusSVG.displayName = 'MinusIcon-MinusSVG';\n\nexport default function MinusIcon(props) {\n return (\n <MinusSVG viewBox=\"0 0 512 512\" {...props}>\n <path d=\"m256 512c-141.164062 0-256-114.835938-256-256s114.835938-256 256-256 256 114.835938 256 256-114.835938 256-256 256zm0-480c-123.519531 0-224 100.480469-224 224s100.480469 224 224 224 224-100.480469 224-224-100.480469-224-224-224zm0 0\" />\n <path d=\"m368 272h-224c-8.832031 0-16-7.167969-16-16s7.167969-16 16-16h224c8.832031 0 16 7.167969 16 16s-7.167969 16-16 16zm0 0\" />\n </MinusSVG>\n );\n}\n","import React from 'react';\nimport { useTheme } from 'styled-components';\n\nexport default function OpenIcon(props) {\n const highlightColor = useTheme().color.team.access.open;\n\n return (\n <svg width={props.size || 30} height={props.size || 30} viewBox=\"10 12 30 20\">\n <g transform=\"translate(9 6)\">\n <g transform=\"matrix(1, 0, 0, 1, -9, -6)\">\n <rect\n fill={props.inverted ? 'none' : '#535353'}\n width=\"32\"\n height=\"32\"\n transform=\"translate(9 6)\"\n />\n </g>\n <g transform=\"translate(4 4)\">\n <path fill={props.inverted ? 'none' : '#535353'} d=\"M0,0H24V24H0Z\" />\n <path\n fill={props.highlight ? highlightColor : props.inverted ? '#535353' : '#1d1d1d'}\n d=\"M7,10H20a1,1,0,0,1,1,1V21a1,1,0,0,1-1,1H4a1,1,0,0,1-1-1V11a1,1,0,0,1,1-1H5V9A7,7,0,0,1,18.262,5.869l-1.789.894A5,5,0,0,0,7,9Zm3,5v2h4V15Z\"\n />\n </g>\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function PrivateIcon(props) {\n return (\n <svg width={props.size || 30} height={props.size || 30} viewBox=\"10 12 30 20\">\n <g transform=\"translate(9 6)\">\n <g transform=\"matrix(1, 0, 0, 1, -9, -6)\">\n <rect\n fill={props.inverted ? 'none' : '#535353'}\n width=\"32\"\n height=\"32\"\n transform=\"translate(9 6)\"\n />\n </g>\n <g transform=\"translate(4 4)\">\n <path\n fill={props.inverted ? '#535353' : '#1d1d1d'}\n d=\"M4.52,5.934,1.393,2.808,2.808,1.393l19.8,19.8-1.415,1.414-3.31-3.31A11,11,0,0,1,1.181,12a10.982,10.982,0,0,1,3.34-6.066ZM14.757,16.172l-1.464-1.464a3,3,0,0,1-4-4L7.828,9.243a5,5,0,0,0,6.929,6.929ZM7.974,3.76A11.01,11.01,0,0,1,22.819,12a10.947,10.947,0,0,1-2.012,4.592l-3.86-3.86a5,5,0,0,0-5.68-5.68L7.974,3.761Z\"\n />\n </g>\n </g>\n </svg>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '30px';\n\nconst EyeSVG = styled(svgBase)`\n fill: ${(props) =>\n props.inverted ? (props.invertedColor ? props.invertedColor : '#535353') : '#1d1d1d'};\n ${(props) =>\n props.inverted &&\n props.hover &&\n css`\n fill: #81a2be;\n `};\n`;\nEyeSVG.displayName = 'PublicIcon-EyeSVG';\n\nexport default function PublicIcon(props) {\n return (\n <svg width={props.size || SIZE} height={props.size || SIZE} viewBox=\"10 10 30 20\">\n <g transform=\"translate(9 6)\">\n <g transform=\"matrix(1, 0, 0, 1, -9, -6)\">\n <rect\n fill={props.inverted ? 'none' : '#535353'}\n width=\"32\"\n height=\"32\"\n transform=\"translate(9 6)\"\n />\n </g>\n <g transform=\"translate(4 4)\">\n <EyeSVG viewBox=\"0 1 30 20\" {...props}>\n <path d=\"M1.181,12a11,11,0,0,1,21.638,0A11,11,0,0,1,1.181,12ZM12,17a5,5,0,1,0-5-5A5,5,0,0,0,12,17Zm0-2a3,3,0,1,1,3-3A3,3,0,0,1,12,15Z\" />\n </EyeSVG>\n </g>\n </g>\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '25px';\n\nconst QuestionMarkSVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: #535353;\n &:hover {\n fill: #81a2be;\n }\n`;\nQuestionMarkSVG.displayName = 'QuestionCircleIcon-QuestionMarkSVG';\n\nexport const QuestionCircleIcon = (props) => (\n <QuestionMarkSVG viewBox=\"0 0 20 20\" {...props}>\n <path d=\"M11 3A8 8 0 0 0 3 11 8 8 0 0 0 11 19 8 8 0 0 0 19 11 8 8 0 0 0 11 3M10.994 6.5C11.758 6.5 12.379 6.719 12.857 7.158 13.336 7.589 13.576 8.142 13.576 8.816 13.576 9.109 13.495 9.406 13.336 9.707 13.176 10.01 13.03 10.223 12.908 10.354 12.791 10.475 12.623 10.635 12.404 10.83L12.342 10.891C11.83 11.338 11.572 11.785 11.572 12.232V12.719H10.389V12.146C10.389 11.781 10.469 11.467 10.629 11.207 10.788 10.939 11.07 10.625 11.473 10.268 11.699 10.06 11.859 9.914 11.951 9.816 12.05 9.711 12.148 9.569 12.24 9.391 12.341 9.204 12.393 9.01 12.393 8.816 12.393 8.442 12.266 8.142 12.01 7.914 11.77 7.686 11.431 7.572 10.994 7.572 10.272 7.572 9.776 7.964 9.508 8.744L8.424 8.305C8.6 7.841 8.904 7.426 9.332 7.06 9.769 6.687 10.322 6.5 10.994 6.5M10.98 13.842C11.224 13.842 11.426 13.923 11.586 14.09 11.754 14.249 11.838 14.442 11.838 14.67 11.838 14.898 11.754 15.09 11.586 15.256 11.426 15.418 11.224 15.5 10.98 15.5 10.737 15.5 10.531 15.418 10.363 15.256 10.204 15.09 10.125 14.898 10.125 14.67 10.125 14.442 10.204 14.249 10.363 14.09 10.531 13.923 10.737 13.842 10.98 13.842\" />\n </QuestionMarkSVG>\n);\n\nexport default QuestionCircleIcon;","import React from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SIZE = '20px';\n\nexport const rotate360 = keyframes`\n\t0% {\n\t\ttransform: rotate(0deg);\n\t}\n\n 5% {\n\t\ttransform: rotate(0deg);\n\t}\n\n 50% {\n\t\ttransform: rotate(180deg);\n\t}\n\n 55% {\n\t\ttransform: rotate(180deg);\n\t}\n\n\t100% {\n\t\ttransform: rotate(360deg);\n\t}\n`;\n\nconst SVG = styled(svgBase)`\n width: ${(props) => props.size || SIZE};\n height: ${(props) => props.size || SIZE};\n fill: ${(props) => props.color || '#535353'};\n &:hover {\n fill:${(props) => props.hoverColor || '#66bb6a'};\n }\n ${(props) =>\n props.$hover &&\n css`\n fill: #66bb6a;\n `}\n ${(props) =>\n props.$rotate &&\n css`\n animation: ${rotate360} 1s ease infinite;\n `}\n`;\n\nexport default function RefreshIcon({ rotate, hover, ...rest }) {\n return (\n <SVG viewBox=\"0 0 24 24\" $rotate={rotate} $hover={hover} {...rest}>\n <rect width=\"24\" height=\"24\" opacity=\"0\" />\n <path d=\"M20.3 13.43a1 1 0 0 0-1.25.65A7.14 7.14 0 0 1 12.18 19 7.1 7.1 0 0 1 5 12a7.1 7.1 0 0 1 7.18-7 7.26 7.26 0 0 1 4.65 1.67l-2.17-.36a1 1 0 0 0-1.15.83 1 1 0 0 0 .83 1.15l4.24.7h.17a1 1 0 0 0 .34-.06.33.33 0 0 0 .1-.06.78.78 0 0 0 .2-.11l.09-.11c0-.05.09-.09.13-.15s0-.1.05-.14a1.34 1.34 0 0 0 .07-.18l.75-4a1 1 0 0 0-2-.38l-.27 1.45A9.21 9.21 0 0 0 12.18 3 9.1 9.1 0 0 0 3 12a9.1 9.1 0 0 0 9.18 9A9.12 9.12 0 0 0 21 14.68a1 1 0 0 0-.7-1.25z\" />\n </SVG>\n );\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport svgBase from '../StyledSVGBase';\n\nconst SandTimeSVG = styled(svgBase)`\n width: ${(props) => props.size || '24px'};\n height: ${(props) => props.size || '24px'};\n fill: #898989;\n ${(props) =>\n props.hover &&\n css`\n cursor: pointer;\n `};\n`;\nSandTimeSVG.displayName = 'SandTimeSVG';\n\nexport default function SandTimeIcon(props) {\n return (\n <SandTimeSVG viewBox=\"0 0 24 24\" {...props}>\n <path\n id=\"hourglass-half\"\n d=\"M14.063,0H.938A.937.937,0,0,0,0,.938v.625A.937.937,0,0,0,.938,2.5c0,3.553,1.993,6.552,4.72,7.5-2.728.948-4.72,3.947-4.72,7.5A.937.937,0,0,0,0,18.438v.625A.937.937,0,0,0,.938,20H14.063A.937.937,0,0,0,15,19.063v-.625a.937.937,0,0,0-.937-.937c0-3.553-1.993-6.552-4.72-7.5,2.728-.948,4.72-3.947,4.72-7.5A.937.937,0,0,0,15,1.563V.938A.937.937,0,0,0,14.063,0ZM11.13,15H3.87c.666-1.828,2.035-3.125,3.63-3.125S10.463,13.172,11.13,15Zm0-10H3.87a7.329,7.329,0,0,1-.433-2.5h8.125A7.329,7.329,0,0,1,11.131,5Z\"\n transform=\"translate(5 2)\"\n fill={props.color ? props.color : '#898989'}\n />\n <rect id=\"Rectangle_2354\" data-name=\"Rectangle 2354\" width=\"24\" height=\"24\" fill=\"none\" />\n </SandTimeSVG>\n );\n}\n","import React from 'react';\n\nexport default function SearchIcon(props) {\n return (\n <svg width={props.size || 24} height={props.size || 24} viewBox=\"0 0 24 24\">\n <path fill=\"none\" d=\"M0,0H24V24H0Z\" />\n <path\n fill=\"#6c6c6c\"\n d=\"M18.031,16.617,22.314,20.9,20.9,22.314l-4.282-4.283a9,9,0,1,1,1.414-1.414Zm-2.006-.742a7,7,0,1,0-.15.15l.15-.15Z\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function SpyIcon(props) {\n return (\n <svg width={props.size || 50} height={props.size || 50} viewBox=\"-10 -10 50 50\">\n <circle cx=\"15.5\" cy=\"15.5\" r=\"23\" fill=\"#2C2C2C\" />\n <path\n fill=\"#1d1d1d\"\n d=\"M21.5,16a5.2,5.2,0,1,1,0,10.4,5.256,5.256,0,0,1-5.2-5.2H13.7a5.2,5.2,0,1,1-.7-2.6H17A5.2,5.2,0,0,1,21.5,16ZM2,14.7V12.1H4.6V8.2A5.2,5.2,0,0,1,9.8,3H20.2a5.2,5.2,0,0,1,5.2,5.2v3.9H28v2.6Z\"\n transform=\"translate(0.6 0.9)\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport default function TeamIcon(props) {\n return (\n <svg width={props.size || 52} height={props.size || 52} viewBox=\"0 0 52 52\">\n <rect fill=\"none\" width=\"52\" height=\"52\" transform=\"translate(0 0)\" />\n <path\n fill={props.color ? props.color : '#2c2c2c'}\n d=\"M4.914,5.316,25,1,45.086,5.316A2.383,2.383,0,0,1,47,7.623V31.229a14.063,14.063,0,0,1-6.531,11.8L25,53,9.532,43.028A14.063,14.063,0,0,1,3,31.231V7.623A2.383,2.383,0,0,1,4.914,5.316Z\"\n transform=\"translate(1 -1)\"\n />\n <path\n fill={props.backgroundColor ? props.backgroundColor : '#1d1d1d'}\n d=\"M14,12.8a6,6,0,0,1,6,6V26H8V18.8a6,6,0,0,1,6-6ZM5.946,16.407a8.38,8.38,0,0,0-.336,1.98L5.6,18.8V26H2V20.6a4.2,4.2,0,0,1,3.744-4.176l.2-.017Zm16.109,0A4.2,4.2,0,0,1,26,20.6V26H22.4V18.8A8.378,8.378,0,0,0,22.054,16.407ZM6.2,9.2a3,3,0,1,1-3,3,3,3,0,0,1,3-3Zm15.6,0a3,3,0,1,1-3,3,3,3,0,0,1,3-3ZM14,2A4.8,4.8,0,1,1,9.2,6.8,4.8,4.8,0,0,1,14,2Z\"\n transform=\"translate(12 9)\"\n />\n </svg>\n );\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport Base from '../StyledSVGBase';\n\nconst UnlockSVG = styled(Base)`\n width: ${(props) => props.size || '32px'};\n height: ${(props) => props.size || '32px'};\n pointer-events: all;\n`;\nUnlockSVG.displayName = 'UnlockIcon-UnlockSVG';\n\nexport default function UnlockIcon(props) {\n return (\n <UnlockSVG fill={props.fill ? props.fill : '#66bb6a'} height={props.size || 32} viewBox=\"0 0 448 512\" {...props}>\n <path d=\"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\" />\n </UnlockSVG>\n );\n}\n","import React from 'react';\n\nexport default function UserSlashIcon(props) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={props.size || 50}\n height={props.size || 50}\n viewBox=\"0 0 120 120\"\n >\n <g transform=\"translate(-150.515 145.018)\">\n <circle\n fill=\"#e06c75\"\n opacity=\"0.25\"\n cx=\"60\"\n cy=\"60\"\n r=\"60\"\n transform=\"translate(150.515 -145.018)\"\n />\n <path fill=\"none\" d=\"M174.515-121.018h72v72h-72Z\" />\n <path\n fill=\"#1d1d1d\"\n d=\"M225.515-82.018a12,12,0,0,1,12,12,12,12,0,0,1-12,12,12.13,12.13,0,0,1-12-12h-6A12,12,0,0,1,195.5-58.031a12,12,0,0,1-11.987-12.014,12,12,0,0,1,12.014-11.986,12,12,0,0,1,10.386,6.013h9.2A11.994,11.994,0,0,1,225.515-82.018Zm-45-3v-6h6v-9a12,12,0,0,1,12-12h24a12,12,0,0,1,12,12v9h6v6Z\"\n />\n <path\n fill=\"#af585e\"\n isolation=\"isolate\"\n d=\"M251.749-62.55a18.766,18.766,0,0,0-18.766,18.766,18.766,18.766,0,0,0,18.766,18.766,18.766,18.766,0,0,0,18.766-18.766A18.787,18.787,0,0,0,251.749-62.55ZM237.675-43.784A14.05,14.05,0,0,1,251.7-57.859a14.051,14.051,0,0,1,8.189,2.616l-19.6,19.6A13.985,13.985,0,0,1,237.675-43.784Zm22.264,11.458a14.048,14.048,0,0,1-8.19,2.617,13.988,13.988,0,0,1-8.142-2.616l19.6-19.6A14.05,14.05,0,0,1,259.939-32.326Z\"\n />\n </g>\n </svg>\n );\n}\n","import { TEAM_MEMBER_ROLE } from './constants';\n\nexport const rules = {\n player: {\n dynamic: {\n 'team-page:edit': (participant) => participant.role === TEAM_MEMBER_ROLE.CAPTAIN,\n },\n static: ['team-page:create'],\n },\n admin: {\n static: ['admin-page:visit', 'team-page:edit', 'team-page:create', 'team-page:navigate-user'],\n },\n superadmin: {\n static: [],\n },\n};\n\nexport const checkPermission = (rules, role = 'player', action, data) => {\n const permissions = rules[role.toLowerCase()];\n if (!permissions) {\n // role is not present in the rules\n return false;\n }\n\n const staticPermissions = permissions.static;\n\n if (staticPermissions && staticPermissions.includes(action)) {\n // static rule not provided for action\n return true;\n }\n\n const dynamicPermissions = permissions.dynamic;\n\n if (dynamicPermissions) {\n const permissionCondition = dynamicPermissions[action];\n if (!permissionCondition) {\n // dynamic rule not provided for action\n return false;\n }\n\n return permissionCondition(data);\n }\n return false;\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport marked from 'marked';\nimport sanitizeHTML from 'sanitize-html';\n\nconst MD_DEFAULT_OPTIONS = {\n skipSanitize: false,\n markedOptions: null,\n sanitizeOptions: {\n allowedTags: [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'p',\n 'a',\n 'ul',\n 'ol',\n 'nl',\n 'li',\n 'b',\n 'i',\n 'strong',\n 'em',\n 'strike',\n 'code',\n 'hr',\n 'br',\n 'div',\n 'table',\n 'thead',\n 'caption',\n 'tbody',\n 'tr',\n 'th',\n 'td',\n 'pre',\n 'iframe',\n ],\n disallowedTagsMode: 'discard',\n allowedAttributes: {\n a: ['href', 'name', 'target'],\n img: ['src'],\n },\n selfClosing: ['img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta'],\n allowedSchemes: ['http', 'https', 'ftp', 'mailto'],\n allowedSchemesByTag: {},\n allowedSchemesAppliedToAttributes: ['href', 'src', 'cite'],\n allowProtocolRelative: true,\n },\n};\n\nexport function useFormFields(initialState) {\n const [fields, setValues] = useState(initialState);\n return [\n fields,\n function (event) {\n const value = event.target.value;\n const id = event.target.id;\n setValues((fields) => ({\n ...fields,\n [id]: value,\n }));\n },\n ];\n}\n\nexport function useDynamoPaginator() {\n const [pages, setPages] = useState([]);\n const [currentPage, setCurrentPage] = useState(0);\n return [\n { pages, currentPage },\n function (paginationResponse, targetPage) {\n const newPage = {};\n const pagesCopy = [...pages];\n if (paginationResponse.more) {\n newPage.nextPagePointer = paginationResponse.LastEvaluatedKey;\n newPage.lastPagePointer = targetPage < 2 ? null : pages[targetPage - 2].nextPagePointer;\n pagesCopy[targetPage] = newPage;\n setPages(pagesCopy);\n } else if (targetPage !== 0) {\n newPage.lastPagePointer = targetPage < 2 ? null : pages[targetPage - 2].nextPagePointer;\n pagesCopy[targetPage] = newPage;\n setPages(pagesCopy);\n } else {\n setPages([]);\n }\n setCurrentPage(targetPage);\n },\n function (nextPage) {\n if (nextPage > 0) {\n if (nextPage === currentPage) {\n return pages[currentPage - 1].nextPagePointer;\n }\n if (nextPage > currentPage) {\n return pages[currentPage].nextPagePointer;\n }\n return pages[currentPage].lastPagePointer;\n }\n return null;\n },\n ];\n}\n\nexport function useBreadcrumb() {\n const [breadcrumbs, setBc] = useState([]);\n const history = useHistory();\n const setBreadcrumbs = (routes, match) => {\n const crumbs = routes\n .filter(({ path, force }) => match.path.includes(path) || force)\n .map(({ path, hash, ...rest }) => ({\n path: Object.keys(match.params).length\n ? Object.keys(match.params).reduce(\n (path, param) => path.replace(`:${param}`, match.params[param]),\n path\n )\n : path,\n action: () => history.push(hash ? `${path}${hash}` : path),\n ...rest,\n }));\n setBc(crumbs);\n };\n\n return [breadcrumbs, setBreadcrumbs];\n}\n\n// TODO: this one is duplicated in boss-ui consider using that one\nexport function useMarked(markdown, options = MD_DEFAULT_OPTIONS) {\n const [html, setHtml] = useState(markdown);\n\n useEffect(() => {\n if (options.markedOptions) {\n marked.setOptions(options.markedOptions);\n }\n const tokens = marked.lexer(markdown);\n const html = marked.parser(tokens);\n setHtml(options.skipSanitize ? html : sanitizeHTML(html, options.sanitizeOptions));\n }, [markdown, options]);\n\n return html;\n}\n\nexport function useRefreshScore(loading = false) {\n const [refreshHover, setRefreshHover] = useState(false);\n const [lastUpdate, setLastUpdate] = useState(0);\n const resetLastUpdate = () => setLastUpdate(0);\n\n const getLastUpdatedLabel = () => {\n if (lastUpdate < 1) {\n return 'seconds ago';\n }\n if (lastUpdate === 1) {\n return 'a minute ago';\n }\n return `${lastUpdate} minutes ago`;\n };\n\n useEffect(() => {\n setLastUpdate(0);\n const update = setInterval(() => {\n setLastUpdate((p) => p + 1);\n }, 60000);\n return () => clearInterval(update);\n }, [loading]);\n\n return [refreshHover, setRefreshHover, getLastUpdatedLabel, resetLastUpdate];\n}\n\nexport function useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n\nexport function useLocalStorage(key, initialValue) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState(() => {\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key);\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n // If error also return initialValue\n console.log(error);\n return initialValue;\n }\n });\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue = (value) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n // Save state\n setStoredValue(valueToStore);\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n } catch (error) {\n // A more advanced implementation would handle the error case\n console.log(error);\n }\n };\n return [storedValue, setValue];\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport styled from 'styled-components';\nimport Media from 'react-media';\nimport capitalize from 'lodash/capitalize';\nimport {\n Tooltip,\n RegularText,\n StyledText,\n InfoIcon,\n QuestionCircleIcon,\n ResourcesList,\n Markdown\n} from 'boss-ui';\nimport { useAppContext, useScenarioContext } from '../../libs/context-lib';\nimport { removePlural } from '../../libs/utils-lib';\nimport { joinSpecsAndAllocationsData } from '../../libs/resource-lib';\nimport { getSrnGroupId } from '../../libs/event-lib';\nimport { getUserScenarioResources } from '../../libs/scenario-lib';\nimport { getAnswersStatus } from '../../libs/question-lib';\nimport CollapsableSection from '../CollapsableSection';\nimport ScenarioQuestions from '../questions/ScenarioQuestions';\nimport ScenarioStatusTable from './ScenarioStatusTable';\nimport MalloryMessage from '../MalloryMessage';\nimport Api from '../../api';\nimport { onError } from '../../libs/error-lib';\nimport ResourcesTable from '../ResourcesTable';\nimport config from '../../config';\n\nconst Container = styled(Box)`\n background-color: ${(props) => props.theme.color.card.classic.background.inactive};\n padding: ${(props) =>\n props.mobile\n ? props.theme.margin.xs\n : `${props.theme.margin.m} ${props.theme.margin.l} ${props.theme.margin.m} ${props.theme.margin.l}`};\n width: 100%;\n border: 1px solid ${(props) => props.theme.color.form.border.main};\n align-items: flex-start;\n flex-direction: column;\n`;\nContainer.displayName = 'Scenario-Container';\n\nconst API = new Api();\n\nexport default function Scenario() {\n const { user, event } = useAppContext();\n const { currentScenario, scenarioResources, scenarioQuestions, loadingScenario } =\n useScenarioContext();\n const [answersStatus, setAnswersStatus] = useState();\n const [userResources, setUserResources] = useState([]);\n const [loadingResources, setLoadingResources] = useState(false);\n const [showResources, setShowResources] = useState(false);\n\n useEffect(() => setAnswersStatus(getAnswersStatus(scenarioQuestions)), [scenarioQuestions]);\n\n useEffect(() => {\n const getSpecs = async (eventId) => {\n const groupId = getSrnGroupId(eventId);\n setLoadingResources(true);\n try {\n const [specs, allocations] = await Promise.all([\n API.get('events', `/groups/${groupId}/specs`),\n API.get('events', `/consumer/groups/${groupId}/allocations`),\n ]);\n if (specs && allocations) {\n setUserResources(joinSpecsAndAllocationsData(specs.specs, allocations.allocations));\n }\n } catch (e) {\n onError(e);\n } finally {\n setLoadingResources(false);\n }\n return [];\n };\n if (event.eventId) {\n getSpecs(event.eventId);\n }\n return () => API.abortCurrentRequest();\n }, [event]);\n\n const scenarioUserResources = useMemo(() => {\n let filteredResources = [];\n if (!scenarioResources || !scenarioResources.length) {\n return [];\n }\n if (config.enableLegacyResources) {\n if (user.userInTeam && !user.userInTeam.resources) {\n return [];\n }\n scenarioResources.forEach((resource) => {\n const userResource = user.userInTeam.resources.find((r) => r.name === resource.name);\n if (userResource) {\n filteredResources.push(userResource);\n }\n });\n } else {\n filteredResources = getUserScenarioResources(scenarioResources, userResources);\n }\n return filteredResources;\n }, [user.userInTeam, scenarioResources, userResources, currentScenario.scenarioId]);\n\n useEffect(() => {\n if (event.isEventEnded) {\n setShowResources(false);\n } else {\n setShowResources(true);\n }\n }, [event.isEventEnded]);\n\n if (!currentScenario) {\n return (\n <MalloryMessage message=\"This episode is not longer active, go back and keep playing!\" />\n );\n }\n\n return (\n <Media query=\"(max-width: 1000px)\">\n {(matches) => (\n <Container>\n <Box textAlign=\"left\">\n <RegularText mediumWeight medium fontSize=\"14px\">\n {capitalize(removePlural(currentScenario.scenarioLabel))} {currentScenario.idx}\n </RegularText>\n <Flex mb=\"20px\" mt=\"10px\">\n <StyledText light size=\"28px\">\n {capitalize(currentScenario.title)}\n </StyledText>\n </Flex>\n <CollapsableSection>\n <Markdown light md={currentScenario.description} />\n <Flex flexDirection={matches ? 'column' : 'row'} my=\"20px\">\n <Box width={matches ? 1 : 1 / 4}>\n <Flex mb=\"4px\">\n <RegularText fontSize=\"14px\" medium>\n Status\n </RegularText>\n </Flex>\n <ScenarioStatusTable loading={loadingScenario} score={answersStatus} />\n </Box>\n {showResources && (\n <Box\n width={matches ? 1 : 3 / 4}\n ml={matches ? 0 : '20px'}\n mt={matches ? '6px' : 0}\n >\n <Flex mb=\"10px\">\n <RegularText fontSize=\"14px\" mediumWeight>\n Resources\n </RegularText>\n <Flex ml=\"6px\" data-tip data-for=\"resources\">\n <QuestionCircleIcon size=\"20px\" />\n </Flex>\n <Tooltip id=\"resources\" place=\"right\">\n Use these resources to complete the scenario. In light green the\n username/password to login to the server.\n </Tooltip>\n </Flex>\n <Tooltip id=\"resources\" place=\"right\">\n Use these resources to complete the scenario. In light green the\n username/password to login to the server.\n </Tooltip>\n {config.enableLegacyResources ? (\n <ResourcesTable\n ignoreTooltip\n loading={loadingScenario}\n resources={scenarioUserResources}\n errorMsg={currentScenario.scenarioError}\n />\n ) : (\n <ResourcesList\n loading={loadingResources || loadingScenario}\n resources={scenarioUserResources}\n />\n )}\n </Box>\n )}\n </Flex>\n </CollapsableSection>\n <Flex mt=\"20px\">\n <RegularText mediumWeight fontSize=\"24px\">\n Questions\n </RegularText>\n <Flex ml=\"auto\" data-tip data-for=\"questions\">\n <InfoIcon />\n <Tooltip id=\"questions\" place=\"bottom\">\n <RegularText color=\"#81a2be\" mediumWeight fontSize=\"12px\">\n Tips and Tricks\n </RegularText>\n <li>\n Answers are case insensitive! e.g. "Elite Hacker" == "eLite\n haCKer"\n </li>\n <li>Leading and trailing whitespace in your answer is stripped away.</li>\n <li>\n We strive to make the answers be short, concise, and easy to enter. If you find\n youself entering very long answers with complex spacing and punctuation, you are\n probably not on the right track.\n </li>\n <li>\n Some questions contain free hints about the formatting of the answer. Use them!\n </li>\n </Tooltip>\n </Flex>\n </Flex>\n <ScenarioQuestions />\n </Box>\n </Container>\n )}\n </Media>\n );\n}\n","import { API } from 'aws-amplify';\nimport { ERROR_NAMES } from './libs/error-lib';\nimport { sendWarning } from './libs/utils-lib';\n\nexport const BANNED_USER_CODE = 403;\nclass Api {\n constructor() {\n this.apiRequestPendingPromises = [];\n }\n\n async apiRequest(method, params) {\n let response;\n try {\n const rq = API[method](...params);\n const promiseIdx = this.apiRequestPendingPromises.push(rq);\n response = await rq;\n this.apiRequestPendingPromises.splice(promiseIdx, 1);\n } catch (e) {\n if (API.isCancel(e)) {\n throw new Error(ERROR_NAMES.ABORTED_REQUEST);\n }\n if (\n e.response &&\n e.response.status === 403 &&\n !(e.response.data && e.response.data.statusCode === BANNED_USER_CODE)\n ) {\n sendWarning('User session expired');\n window.history.pushState(null, '/login');\n throw new Error(ERROR_NAMES.SESSION_EXPIRED);\n }\n throw e;\n }\n return response;\n }\n\n get(...params) {\n return this.apiRequest('get', params);\n }\n\n del(...params) {\n return this.apiRequest('del', params);\n }\n\n put(...params) {\n return this.apiRequest('put', params);\n }\n\n post(...params) {\n return this.apiRequest('post', params);\n }\n\n patch(...params) {\n return this.apiRequest('patch', params);\n }\n\n abortCurrentRequest() {\n if (this.apiRequestPendingPromises.length) {\n this.apiRequestPendingPromises.forEach((requestPromise) => API.cancel(requestPromise));\n this.apiRequestPendingPromises = [];\n }\n }\n}\n\nexport default Api;\n","import compareAsc from 'date-fns/compareAsc';\nimport format from 'date-fns/format';\nimport { isDate } from 'lodash';\nimport differenceInMinutes from 'date-fns/differenceInMinutes';\nimport { getNewDate } from './utils-lib';\n\nconst MINUTES_IN_HOUR = 60;\nconst DAYS_IN_A_YEAR = 365;\nconst DAYS_IN_A_MONTH = 30;\nconst HOURS_IN_A_DAY = 24;\n\nexport const isTodayBetween = (start, end) => {\n if (!start || !end) {\n return false;\n }\n if (!isDate(start)) {\n start = new Date(start);\n }\n if (!isDate(end)) {\n end = new Date(end);\n }\n const today = getNewDate();\n if (compareAsc(start, today) === 1) {\n return false;\n }\n if (compareAsc(end, today) === -1) {\n return false;\n }\n return true;\n};\n\nexport const isTodayAfterThan = (myDate) => {\n const today = new Date();\n if (!isDate(myDate)) {\n myDate = new Date(myDate);\n }\n if (compareAsc(today, myDate) === -1) {\n return false;\n }\n return true;\n};\n\nexport const getDateComponents = (date) => {\n const d = new Date(date);\n const stringMonth = format(d, 'MMM');\n return {\n day: d.getDate(),\n month: d.getMonth() + 1,\n year: d.getFullYear(),\n stringMonth,\n };\n};\n\nexport const formatMinutes = (minutesDiff) => {\n return {\n minutes: minutesDiff % MINUTES_IN_HOUR,\n hour: Math.floor(minutesDiff / MINUTES_IN_HOUR),\n };\n};\n\nexport const getHourMinuteDifference = (start, end) => {\n if (!start || !end) {\n return false;\n }\n if (!isDate(start)) {\n start = new Date(start);\n }\n if (!isDate(end)) {\n end = new Date(end);\n }\n return formatMinutes(differenceInMinutes(start, end));\n};\n\nexport const getIntervalInDays = ({ years = 0, months = 0, days = 0, hours = 0 }) => {\n let accumulatedDays = days;\n if (years > 0) {\n accumulatedDays += DAYS_IN_A_YEAR * years;\n }\n if (months > 0) {\n accumulatedDays += DAYS_IN_A_MONTH * months;\n }\n if (hours > HOURS_IN_A_DAY / 2) {\n accumulatedDays += 1;\n }\n return accumulatedDays;\n};\n\nexport function getCurrentYear() {\n return new Date().getFullYear();\n}","import { BOTS_TYPE, EVENT_REGISTRATION_STATUS } from './constants';\nimport { isTodayBetween } from './dates-lib';\n\nexport const getEventShortName = (type) => {\n if (type === BOTS_TYPE.SOC) {\n return 'BOTS';\n }\n return 'BOO';\n};\n\nexport const isOnDemandEventInsidePlayWindow = (joinDate, duration) => {\n if (!joinDate || !duration) {\n return false;\n }\n const inProgressStartDate = new Date(joinDate);\n const inProgressEndDate = new Date(inProgressStartDate.getTime() + duration * 60000);\n return isTodayBetween(inProgressStartDate, inProgressEndDate);\n};\n\nexport const isNormalEventInsideActiveWindow = (\n activeStartDate,\n activeEndDate,\n registrationOpenDate,\n registrationCloseDate,\n registrationStatus\n) => {\n if (registrationStatus === EVENT_REGISTRATION_STATUS.CLOSED) {\n return false;\n }\n if (isTodayBetween(new Date(registrationOpenDate), new Date(registrationCloseDate))) {\n return isTodayBetween(new Date(activeStartDate), new Date(activeEndDate));\n }\n return false;\n};\n\nexport const getNoImageUrl = (type, size) => {\n if (type === BOTS_TYPE.SOC) {\n switch (size) {\n case 'large':\n return `${process.env.PUBLIC_URL}/bots/android-chrome-766x432.png`;\n case 'medium':\n return `${process.env.PUBLIC_URL}/bots/android-chrome-550x310.png`;\n default:\n return `${process.env.PUBLIC_URL}/bots/android-chrome-330x186.png`;\n }\n } else {\n switch (size) {\n case 'large':\n return `${process.env.PUBLIC_URL}/boo/android-chrome-766x432.png`;\n case 'medium':\n return `${process.env.PUBLIC_URL}/boo/android-chrome-550x310.png`;\n default:\n return `${process.env.PUBLIC_URL}/boo/android-chrome-330x186.png`;\n }\n }\n};\n\nexport const getSrnGroupId = (eventId) => {\n return `srn:group::${eventId}`;\n}\nexport const getConsumerGroupSrn = (eventId, userId) => {\n return `srn:group:${userId}:${eventId}`;\n}\nconst exportObj = { getEventShortName, getNoImageUrl, getSrnGroupId };\nexport default exportObj;\n","import { RESOURCE_TYPE } from './constants';\n\nexport const getResourceCreationBody = (form, resourceType) => {\n if (resourceType === RESOURCE_TYPE.CREDENTIALS) {\n return { username: form.username, password: form.password };\n }\n return { url: form.url };\n};\n\nexport const getResourceUpdateBody = (form, resourceType) => {\n if (resourceType === RESOURCE_TYPE.CREDENTIALS) {\n return { username: form.username, password: form.password };\n }\n return { url: form.url };\n};\n\nexport const joinSpecsAndAllocationsData = (specs = [], allocs = []) => {\n const tmpArr = [];\n const dependencyObj = {};\n for (let s = 0; s < specs.length; s++) {\n if (specs[s].requiredSpec && !dependencyObj[specs[s].requiredSpec.srn]) {\n // is a dependency resource\n dependencyObj[specs[s].requiredSpec.srn] = true;\n tmpArr.push({\n resourceSpecSrn: specs[s].requiredSpec.srn,\n name: specs[s].requiredSpec.title,\n type: specs[s].requiredSpec.type,\n url: '',\n user: '',\n password: '',\n isDependency: true,\n });\n }\n // if the spec is not a dependency resource, then we push the object\n if (!dependencyObj[specs[s].srn]) {\n const tmpObj = {\n resourceSpecSrn: specs[s].srn,\n name: specs[s].title,\n type: specs[s].type,\n };\n if (specs[s].requiredSpec) {\n tmpObj.resourceDependencyId = specs[s].requiredSpec.srn;\n }\n tmpArr.push(tmpObj);\n }\n }\n // check the allocations to assign the username, password or url field\n for (let a = 0; a < allocs.length; a++) {\n for (let i = 0; i < tmpArr.length; i++) {\n if (\n allocs[a].specSrn === tmpArr[i].resourceSpecSrn &&\n allocs[a].slot &&\n allocs[a].slot.resource\n ) {\n tmpArr[i].url = allocs[a].slot.resource.url;\n tmpArr[i].user = allocs[a].slot.resource.username;\n tmpArr[i].password = allocs[a].slot.resource.password;\n tmpArr[i].state = allocs[a].state;\n break;\n } else if (allocs[a].specSrn === tmpArr[i].resourceSpecSrn && allocs[a].state) {\n // we dont have the slot but only the state\n tmpArr[i].state = allocs[a].state;\n }\n }\n }\n return tmpArr;\n};","import { get } from 'lodash';\n\nexport function getScenariosNavigation(scenarios = []) {\n const pages = {};\n if (scenarios === null) {\n return pages;\n }\n scenarios.forEach((scenario, idx) => {\n pages[scenario.scenarioId] = {\n id: scenario.scenarioId,\n nextScenarioId: get(scenarios, `${[idx + 1]}.scenarioId`, null),\n prevScenarioId: get(scenarios, `${[idx - 1]}.scenarioId`, null),\n };\n });\n return pages;\n}\n\nexport function isScenarioPartOfEvent(scenarioId, scenarios = []) {\n if (!scenarioId || scenarioId === null || scenarios === null) {\n return false;\n }\n\n return scenarios.findIndex((s) => s.scenarioId === scenarioId) >= 0;\n}\n\nfunction getResourceAndDependency(resources, resource = {}) {\n let matchedResources = [];\n const matchedResource = resources.find((r) => r.resourceSpecSrn === resource.srn);\n if (matchedResource) {\n matchedResources.push(matchedResource);\n if (resource.requiredSpec) {\n matchedResources = matchedResources.concat(\n getResourceAndDependency(resources, resource.requiredSpec)\n );\n }\n }\n return matchedResources;\n}\n\nexport function getUserScenarioResources(scenarioResources, userResources = []) {\n let filteredResources = [];\n scenarioResources.forEach((resource) => {\n filteredResources = filteredResources.concat(getResourceAndDependency(userResources, resource));\n });\n return filteredResources;\n}\n\nexport default { getScenariosNavigation, isScenarioPartOfEvent, getUserScenarioResources };\n","export const TEAM_MEMBER_ROLE = { CAPTAIN: 'CAPTAIN', REGULAR: 'MEMBER' };\nexport const TEAM_VISIBILITY = { PUBLIC: 'PUBLIC', PRIVATE: 'PRIVATE' };\nexport const TEAM_ACCESSIBILITY = { OPEN: 'OPEN', CLOSED: 'CLOSED' };\nexport const USER_TEAM_STATE = {\n AVAILABLE: 'available',\n INVITED: 'invited',\n};\nexport const USER_INVITE_STATE = {\n PENDING: 'PENDING',\n ACCEPTED: 'ACCEPTED',\n CANCELLED: 'CANCELLED',\n REJECTED: 'REJECTED',\n};\nexport const USER_ACKSTATEMENT = {\n ACCEPTED: 'ACP',\n REJECTED: 'REJ',\n};\nexport const RESOURCE_URL_REGEXP =\n /(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})/g;\nexport const RESOURCE_CREDENTIALS_REGEXP =\n /(user: )[a-zA-Z0-9-]{2,29}, (password: )[a-zA-Z0-9]{2,29}/;\nexport const RESOURCE_TEXT_REGEXP = /^(?! )[a-zA-Z0-9-]{2,29}[^\\W]$/;\nexport const EMAIL_REGEXP =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nexport const EMAIL_MAX_IMPORT = 50;\nexport const RESOURCE_TYPE = {\n SERVER: 'server',\n URL: 'url',\n CREDENTIALS: 'credentials',\n};\nexport const RESOURCE_STATE = {\n ASSIGNED: 'ASSIGNED',\n UNASSIGNED: 'UNASSIGNED',\n PROVISIONING: 'PROVISIONING',\n};\n\nexport const TEAM_NAME_REGEXP = /^(?! )[a-zA-Z0-9 _]{2,29}[^\\W]$/;\nexport const CONFIRMATION_NUMBER_REGEXP = /^[0-9]{3,}$/;\nexport const DISPLAY_NAME_REGEXP = /^(?! )[a-zA-Z0-9 _]{2,29}[^\\W]$/;\nexport const EVENT_TYPE = {\n GAME: 'GAME',\n WORKSHOP: 'WORKSHOP',\n};\nexport const EVENT_DELIVERY = {\n ON_DEMAND: 'ON_DEMAND',\n NORMAL: 'NORMAL',\n};\nexport const EVENT_REGISTRATION_STATUS = {\n OPEN: 'OPEN',\n CLOSED: 'CLOSED',\n};\nexport const EVENT_ACCESS_TYPE = {\n RESTRICTED: 'RESTRICTED',\n};\nexport const BOTS_TYPE = {\n SOC: 'SOC',\n NOC: 'NOC',\n};\nexport const DEFAULT_BOX_BORDER_STYLE = { border: '1px solid #2C2C2C' };\nexport const SKELTELON_STYLE = {\n COLOR: '#202020',\n EFFECT: '#444',\n};\nexport const DEFAULT_BONUS_MULTIPLIER = 2;\nexport const SCENARIO_HINTS_STRATEGIES = {\n PURCHASE: 'PURCHASE',\n TIME: 'TIME',\n DEFAULT: 'TIME',\n};\nexport const EVENT_WORDING = {\n SCENARIO: {\n SOC: 'Scenarios',\n NOC: 'Episodes',\n },\n};\nexport const USER_ROLES = {\n ADMIN: 'ADMIN',\n SUPERADMIN: 'SUPERADMIN',\n PLAYER: 'PLAYER',\n};\nexport const NUMBERS = {\n ZERO: 0,\n ONE: 1,\n};\nexport const NAV_MOBILE_MAXWIDTH = '600px';\nexport const RESOURCES_COLORS = ['#61ADA1', '#81A2BE', '#E5C07B', '#A088A4'];\nexport const REMOVE_QUESTION_CONFIRMATION_DIALOG = 'Are you sure on removing this question?';\nexport const MAXLEN_BIGCARD_TEXT_COLLAPSE = 109;\nexport const DEFAULT_ON_DEMAND_EVENT_DURATION = 120;\nexport const ONE_MINUTE_MS = 60000;\nexport const SURVEY_QUESTIONS_TYPE = {\n JUST_OPTIONS: 'Just Options',\n OPTIONS_AND_TEXT: 'Options and text',\n NUMERIC_SCALE: 'Numeric scale [0-10]',\n SMILE_SCALE: 'Smiles scale [Sadness...Total joy]',\n JUST_TEXT: 'Just text',\n STAR_SCALE: 'Stars scale [1...5]',\n};\nexport const SURVEY_QUESTION_OPTION_OTHER = '-1';\nexport const MAX_INT32 = 0x7fffffff;\nexport const WS_SCENARIO_MESSAGES_TYPES = {\n ACTIVATE: 'SCENARIO_ACTIVATE_TASK',\n DEACTIVATE: 'SCENARIO_DEACTIVATE_TASK',\n};\nexport const DISPLAY_QUESTIONS_MODE = { GRID: 'GRID', LIST: 'LIST' };\nexport const DEFAULT_FORM_INPUT_TYPE = 'input';\nexport const INPUT_FORM_TYPE_TEXTAREA = 'textarea';\nexport const MENU_BAR_HEIGHT = 50;","import { formDataBody, sendWarning, parseJwt } from './utils-lib';\nimport { getMessageError } from './error-lib';\nimport config from '../config';\n\nfunction formatLoggedInUser(cognitoUser) {\n let user = {};\n try {\n // when app gets the authenticated user from local storage(refresh action), it gets the session in the token form\n if (cognitoUser.token) {\n const parsedToken = parseJwt(cognitoUser.token);\n user = {\n username: parsedToken['cognito:username'],\n attributes: { email: parsedToken.email },\n };\n } else {\n user = {\n username: cognitoUser.signInUserSession.idToken.payload['cognito:username'],\n attributes: { email: cognitoUser.signInUserSession.idToken.payload.email },\n };\n }\n } catch (e) {\n throw new Error('malformed cognito user');\n }\n return user;\n}\n\nasync function refreshSAMLTokens() {\n // eslint-disable-next-line no-console\n console.log('refreshing saml session');\n const bodyObject = {\n grant_type: 'refresh_token',\n client_id: config.cognito.saml.APP_CLIENT_ID,\n refresh_token: localStorage.getItem('rt'),\n };\n try {\n const tokenRq = await fetch(`https://${config.cognito.saml.DOMAIN}/oauth2/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',\n },\n body: formDataBody(bodyObject),\n });\n const tokens = await tokenRq.json();\n const { id_token, expires_in } = tokens;\n return {\n token: id_token,\n expires_at: expires_in * 1000 + new Date().getTime(), // the expiration timestamp\n };\n } catch (err) {\n sendWarning(`Refresh token Error ${getMessageError(err)}`, true);\n return null;\n }\n}\n\nexport { formatLoggedInUser, refreshSAMLTokens };\n","/**\n * THEMING SCHEMA:\n * For the new items the object pattern is:\n * [Component Name]: {\n * [css attribute / component sub part]: {\n * [characteristic]: value\n * }\n * }\n *\n * example 1:\n * checkbox: {\n * color: '#4caf50',\n * border: '#4caf50',\n * background: '#4caf50',\n * }\n *\n * example 2:\n * table: {\n * border: '#2C2C2C',\n * header: {\n * background: { inactive: '#2C2C2C', active: '#eeeeee' },\n * color: '#898989',\n * border: '#2C2C2C',\n * },\n * row: {\n * background: { inactive: '#212121', active: '#eeeeee' },\n * oddBackground: '#1D1D1D',\n * color: '#D0D0D0',\n * correct: '#81C784',\n * incorrect: '#E06C75',\n * captain: '#de935f',\n * },\n *},\n */\nconst color = {\n background: '#121212',\n toastNotification: {\n toast: {\n background: '#373737',\n boxShadow: '#00000040',\n },\n progressBar: {\n background: '#121212',\n },\n },\n nav: {\n background: '#1D1D1D',\n },\n dragDrop: {\n background: '#2C2C2C',\n border: { draggedOff: '#535353', draggedOn: '#E06C75' },\n color: '#A5D6A7'\n },\n skeleton: {\n color: '#202020',\n highlightColor: '#444',\n },\n notificationList: {\n container: {\n boxShadow: '#00000059',\n background: '#2C2C2C',\n border: '#81C784',\n },\n },\n navTitle: {\n color: '#d0d0d0',\n },\n navigationMenu: {\n background: { inactive: '#1d1d1d', active: '#2c2c2c' },\n color: {\n inactive: '#898989',\n active: '#66bb6a',\n danger: '#E06C75',\n },\n border: {\n inactive: '#898989',\n active: '#66bb6a',\n },\n hover: {\n inactive: '#9edba1',\n danger: '#E06C75',\n },\n },\n select: {\n control: {\n background: { inactive: '#2C2C2C', active: '#373737' },\n border: '#535353',\n color: '#A0A0A0',\n },\n option: {\n background: {\n inactive: '#2C2C2C',\n active: '#373737',\n },\n },\n menu: {\n background: '#2C2C2C',\n border: '#535353',\n color: '#A0A0A0',\n },\n singleValue: {\n color: '#A0A0A0',\n },\n },\n profile: {\n background: '#2C2C2C',\n border: '#81C784',\n },\n form: {\n background: '#1D1D1D',\n header: '#2C2C2C',\n border: {\n main: '#898989',\n modal: '#81C784',\n },\n legend: {\n color: '#898989',\n },\n },\n checkbox: {\n color: '#4caf50',\n border: '#4caf50',\n background: '#4caf50',\n },\n button: {\n regular: {\n accept: {\n disabled: {\n background: '#1D1D1D',\n color: '#535353',\n border: '#2C2C2C',\n },\n default: {\n border: '#66BB6A',\n color: '#66BB6A',\n background: '#2C2C2C',\n },\n hover: {\n background: '#373737',\n color: '#66BB6A',\n border: '#66BB6A',\n },\n },\n reject: {\n default: {\n border: '#A0A0A0',\n color: '#A0A0A0',\n background: '#2C2C2C',\n },\n hover: {\n background: '#373737',\n border: '#A0A0A0',\n color: '#A0A0A0',\n },\n },\n danger: {\n default: {\n border: '#E06C75',\n color: '#E06C75',\n background: '#2C2C2C',\n },\n hover: {\n background: '#373737',\n border: '#E06C75',\n color: '#E06C75',\n },\n },\n },\n unregular: {\n active: {\n default: {\n border: '#66BB6A',\n color: '#66BB6A',\n background: 'transparent',\n },\n hover: {\n background: '#373737',\n border: '#66BB6A',\n color: '#66BB6A',\n },\n },\n inactive: {\n default: {\n border: '#A0A0A0',\n color: '#A0A0A0',\n background: 'transparent',\n },\n hover: {\n background: '#373737',\n border: '#A0A0A0',\n color: '#A0A0A0',\n },\n },\n },\n small: {\n border: '#373737',\n background: 'transparent',\n },\n },\n input: {\n default: {\n border: '#535353',\n color: '#d0d0d0',\n background: '#2C2C2C',\n placeholderColor: '#898989',\n },\n focused: {\n border: '#81C784',\n background: '#2C2C2C',\n },\n hover: {\n border: '#535353',\n background: '#373737',\n },\n error: {\n border: '#E06C75',\n background: '#2C2C2C',\n },\n success: {\n border: '#66BB6A',\n background: '#2C2C2C',\n },\n },\n table: {\n border: '#2C2C2C',\n header: {\n background: { inactive: '#2C2C2C', active: '#eeeeee' },\n color: '#898989',\n border: '#2C2C2C',\n },\n row: {\n background: { inactive: '#212121', active: '#eeeeee' },\n oddBackground: '#1D1D1D',\n color: '#D0D0D0',\n correct: '#81C784',\n incorrect: '#E06C75',\n captain: '#de935f',\n },\n },\n text: {\n light: {\n color: '#D0D0D0',\n },\n regular: {\n color: '#A0A0A0',\n },\n medium: {\n color: '#898989',\n },\n dark: {\n color: '#535353',\n },\n active: {\n color: '#81C784',\n },\n floatingMessage: {\n active: '#A5D6A7',\n inactive: '#535353',\n },\n captain: { color: '#de935f' },\n default: { color: '#6C6C6C' },\n },\n tooltip: {\n textColor: '#d0d0d0',\n backgroundColor: '#2c2c2c',\n borderColor: '#81a2be',\n arrowColor: '#2c2c2c',\n },\n breadcrumb: {\n active: '#81c784',\n inactive: '#898989',\n },\n messageCard: { border: '#2C2C2C' },\n card: {\n classic: {\n border: {\n active: '#81C784',\n inactive: '#E5C07B',\n progress: '#45a647',\n inprogress: '#4CAF50',\n completed: '#a088a4',\n history: '#a088a4',\n },\n title: {\n active: '#81C784',\n inprogress: '#4CAF50',\n inactive: '#E5C07B',\n completed: '#a088a4',\n history: '#a088a4',\n },\n background: {\n inactive: '#1D1D1D',\n hover: '#2C2C2C',\n },\n description: '#D0D0D0',\n },\n restricted: {\n border: '#FFFFFF',\n title: '#FFFFFF',\n background: { inactive: '#1D1D1D', hover: '#2C2C2C' },\n description: '#898989',\n active: '#81C784',\n inactive: '#E5C07B',\n },\n },\n workshopAdditionalInfo: {\n server: '#61ADA1',\n credentials: '#A088A4',\n links: '#81A2BE',\n warning: '#E06C75',\n regular: '#A0A0A0',\n },\n question_card: {\n background: {\n inactive: '#1D1D1D',\n active: '#2C2C2C',\n },\n border: {\n pending: '#A0A0A0',\n correct: '#81C784',\n incorrect: '#E06C75',\n },\n color: {\n pending: '#A0A0A0',\n correct: '#81C784',\n incorrect: '#E06C75',\n guidance: '#81A2BE',\n hint: '#A088A4',\n },\n },\n boards: {\n top: {\n activeLight: '#A5D6A7',\n progressBar: '#81c784',\n },\n },\n team: {\n visibility: {\n public: '#A5D6A7'\n },\n access: {\n open: '#A5D6A7'\n } \n },\n};\n\nconst margin = {\n xs: '6px',\n s: '20px',\n m: '40px',\n l: '60px',\n};\n\nconst font = {\n family: 'Roboto Mono',\n};\n\nconst Theme = { color, font, margin };\nexport default Theme;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport Media from 'react-media';\nimport debounce from 'lodash/debounce';\nimport {\n Button,\n Checkbox,\n Form,\n FormLabel,\n FormLeyend,\n LinkedText,\n Modal,\n QuestionCircleIcon,\n StyledText,\n Tooltip,\n} from 'boss-ui';\nimport Api from '../../api';\nimport { FormInput, ScrolleableContainer, TermsConditions } from '../../components';\nimport { useFormFields } from '../../libs/hooks-lib';\nimport { useAppContext } from '../../libs/context-lib';\nimport { onError } from '../../libs/error-lib';\nimport { USER_ACKSTATEMENT, DISPLAY_NAME_REGEXP } from '../../libs/constants';\nimport { setUserHeaders } from '../../libs/utils-lib';\n\nconst API = new Api();\n\nexport default function FirstSignIn() {\n const [fields, handleFieldChange] = useFormFields({\n displayName: '',\n ack: false,\n });\n const [isLoading, setIsLoading] = useState(false);\n const [ackVisible, setAckVisible] = useState(false);\n const [ackScrolled, setAckScrolled] = useState(false);\n const [availableName, setNameAvailable] = useState(true);\n const [searchLoading, setSearchLoading] = useState(true);\n const { user, userSession } = useAppContext();\n const history = useHistory();\n const onCheckBoxChange = (e) => {\n handleFieldChange({\n target: {\n value: e.target.checked,\n id: e.target.id,\n },\n });\n };\n\n const validateForm = () =>\n availableName && fields.displayName.match(DISPLAY_NAME_REGEXP) && fields.ack;\n\n const checkDisplayName = async (name) => {\n try {\n const data = await API.get('users', '/users/check-displayname', {\n queryStringParameters: {\n q: name,\n },\n });\n setNameAvailable(data.user.available);\n } catch (e) {\n onError(e);\n setNameAvailable(false);\n } finally {\n setSearchLoading(false);\n }\n };\n\n const delayedSearch = useCallback(\n debounce((q) => checkDisplayName(q), 300),\n []\n );\n\n const onNameChange = (e) => {\n handleFieldChange(e);\n if (e.target.value.length > 2) {\n setSearchLoading(true);\n delayedSearch(e.target.value);\n }\n };\n\n const handleUserAttributesSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n try {\n const dynamoUser = await API.post('users', '/users', {\n body: {\n userName: user.username,\n displayName: fields.displayName,\n email: user.attributes.email,\n ackStatement: fields.ack ? USER_ACKSTATEMENT.ACCEPTED : USER_ACKSTATEMENT.REJECTED,\n },\n });\n userSession((u) => ({ ...u, dynamoUser: dynamoUser.user }));\n setUserHeaders({ dynamoUser: dynamoUser.user, ...user });\n history.push('/');\n } catch (err) {\n onError(err);\n setIsLoading(false);\n }\n };\n\n const handleAcceptACK = () => {\n setAckVisible(false);\n handleFieldChange({\n target: {\n value: true,\n id: 'ack',\n },\n });\n };\n\n useEffect(() => {\n setUserHeaders(user);\n if (user.dynamoUser) {\n history.push('/');\n }\n }, []);\n\n return (\n <>\n <Flex justifyContent=\"center\">\n <Box>\n <Flex justifyContent=\"center\" mt=\"100px\" mb=\"16px\">\n <StyledText size=\"24px\" medium>\n How do you want to be known?\n </StyledText>\n </Flex>\n <Form>\n <Flex>\n <Box py=\"40px\" px=\"60px\" width=\"412px\">\n {/* Box with relative position to get question mark stuck to the input */}\n <Box mb=\"20px\" style={{ position: 'relative' }}>\n <FormLabel>Display Name</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"Enter your nickname\"\n value={fields.displayName}\n onChange={onNameChange}\n id=\"displayName\"\n validate={fields.displayName}\n validating={searchLoading}\n available={availableName}\n pattern={DISPLAY_NAME_REGEXP}\n unavailableMessage=\"This name was already taken!\"\n invalidPatternMessage=\"From 3 to 30 length, spaces, a-z, 0-9 and _ allowed\"\n validMessage=\"Name is available\"\n />\n <Flex\n data-tip\n data-for=\"displayName\"\n style={{\n position: 'absolute',\n right: '-30px',\n top: '28px',\n }}\n >\n <QuestionCircleIcon />\n </Flex>\n <Tooltip id=\"displayName\">\n You must choose a display name to continue. Note that your display name may be\n visible to other participants so choose a name that protects your identity if\n remaining anonymous is important to you. (3 characters at least, alphanumerics,\n spaces and underscores allowed)\n </Tooltip>\n </Box>\n <Flex>\n <label>\n <Checkbox checked={fields.ack} onChange={onCheckBoxChange} id=\"ack\" />\n </label>\n <Box mb=\"20px\" ml=\"5px\">\n <FormLeyend size=\"12px\">\n I acknowledge the{' '}\n <LinkedText onClick={() => setAckVisible(true)}>\n Terms and Conditions\n </LinkedText>\n </FormLeyend>\n </Box>\n </Flex>\n <Button\n isLoading={isLoading || searchLoading}\n disabled={!validateForm()}\n onClick={handleUserAttributesSubmit}\n >\n OK\n </Button>\n </Box>\n </Flex>\n </Form>\n </Box>\n </Flex>\n {ackVisible && (\n <Flex>\n <Modal onBackgroundClick={() => setAckVisible(false)} margin=\"5% auto\">\n <Form>\n <Box maxWidth=\"600px\">\n <Flex justifyContent=\"center\" width=\"600px\" py=\"15px\" backgroundColor=\"#2C2C2C\">\n <FormLeyend size=\"20px\">Splunk Terms and Conditions</FormLeyend>\n </Flex>\n <ScrolleableContainer setScrolled={setAckScrolled}>\n <Flex py=\"12px\" px=\"8px\" width={1}>\n <TermsConditions />\n </Flex>\n </ScrolleableContainer>\n <Flex px=\"38px\" py=\"24px\" backgroundColor=\"#2C2C2C\">\n <Media query=\"(max-width: 40em)\">\n {(matches) => (\n <Flex ml=\"auto\" width={matches ? 1 : 1 / 2}>\n <Box ml=\"auto\" width={1 / 2}>\n <Button onClick={() => setAckVisible(false)} secondary>\n DECLINE\n </Button>\n </Box>\n <Box ml=\"20px\" width={1 / 2}>\n <Button onClick={handleAcceptACK} disabled={!ackScrolled}>\n ACKNOWLEDGE\n </Button>\n </Box>\n </Flex>\n )}\n </Media>\n </Flex>\n </Box>\n </Form>\n </Modal>\n </Flex>\n )}\n </>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { Auth } from 'aws-amplify';\nimport { useHistory } from 'react-router-dom';\nimport { Button, Form, FormLabel } from 'boss-ui';\nimport { FormInput } from './index';\nimport { useAppContext } from '../libs/context-lib';\nimport { useFormFields } from '../libs/hooks-lib';\nimport { onError } from '../libs/error-lib';\n\nexport default function VerifyEmailForm(props) {\n const [fields, handleFieldChange] = useFormFields({\n confirmationCode: '',\n });\n const [loading, setLoading] = useState(false);\n const { userSession } = useAppContext();\n const history = useHistory();\n async function handleSubmit(event) {\n event.preventDefault();\n try {\n setLoading(true);\n await Auth.confirmSignUp(props.email.toLowerCase(), fields.confirmationCode);\n const user = await Auth.signIn(props.email.toLowerCase(), props.password);\n userSession(user);\n history.push('/firstLogin');\n } catch (e) {\n if (e.code === 'UserNotConfirmedException') {\n setLoading(false);\n } else {\n onError(e);\n setLoading(false);\n }\n }\n }\n\n async function resendVerifyCode(event) {\n event.preventDefault();\n // resend the verification code\n try {\n setLoading(true);\n await Auth.resendSignUp(props.email);\n setLoading(false);\n } catch (e) {\n onError(e);\n setLoading(false);\n }\n }\n\n function validate() {\n return fields.confirmationCode.length > 0;\n }\n\n return (\n <Flex justifyContent=\"center\" align=\"center\" mt=\"100px\" mb=\"16px\">\n <Form onSubmit={handleSubmit}>\n <Box px=\"60px\" py=\"40px\">\n <Box mb=\"20px\">\n <FormLabel>Verification code</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"Enter the code\"\n value={fields.confirmationCode}\n id=\"confirmationCode\"\n onChange={handleFieldChange}\n />\n </Box>\n <Box mb=\"20px\">\n <Button isLoading={loading} onClick={resendVerifyCode} style={{ border: 0 }}>\n resend\n </Button>\n </Box>\n <Button type=\"submit\" isLoading={loading} disabled={!validate()}>\n Verify\n </Button>\n </Box>\n </Form>\n </Flex>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport { API, Auth } from 'aws-amplify';\nimport Media from 'react-media';\nimport {\n Button,\n Form,\n FormLabel,\n FormLeyend,\n LinkedText,\n StyledText,\n RegularText,\n BooIcon,\n BotsIcon,\n} from 'boss-ui';\nimport SplunkRum from '@splunk/otel-web';\nimport config from '../../config';\nimport { useAppContext } from '../../libs/context-lib';\nimport { onError } from '../../libs/error-lib';\nimport { useFormFields, useQuery } from '../../libs/hooks-lib';\nimport { FormInput } from '../../components';\nimport VerifyEmailForm from '../../components/VerifyEmailForm';\nimport { setUserHeaders } from '../../libs/utils-lib';\nimport { BOTS_TYPE } from '../../libs/constants';\nimport { getEventShortName } from '../../libs/event-lib';\n\nconst iconSize = 145;\n\nexport default function Login() {\n const [fields, handleFieldChange] = useFormFields({\n email: '',\n password: '',\n });\n const [loading, setLoading] = useState(false);\n const [showVerifyEmail, setShowVerifyEmail] = useState(false);\n const { userSession, appType } = useAppContext();\n const history = useHistory();\n const labelName = getEventShortName(appType);\n\n function validateForm() {\n return fields.email.length > 0 && fields.password.length > 0;\n }\n\n const setDynamoUser = async (cognitoUser) => {\n const registeredUser = await API.get('users', '/user');\n if (!registeredUser.user) {\n userSession(cognitoUser);\n throw new Error('UserNotFoundInDynamo');\n }\n userSession({ ...cognitoUser, dynamoUser: registeredUser.user });\n setUserHeaders({ ...cognitoUser, dynamoUser: registeredUser.user });\n SplunkRum?.setGlobalAttributes({\n 'user.id': registeredUser.user.userId,\n 'user.email': registeredUser.user.email,\n 'user.username': registeredUser.user.displayName,\n });\n };\n\n async function handleSubmit(event) {\n event.preventDefault();\n try {\n setLoading(true);\n const cognitoUser = await Auth.signIn(fields.email.toLowerCase(), fields.password);\n await setDynamoUser(cognitoUser);\n } catch (e) {\n if (e.code === 'UserNotConfirmedException') {\n setShowVerifyEmail(true);\n } else if (e.message === 'UserNotFoundInDynamo') {\n history.push('/firstLogin');\n } else {\n setLoading(false);\n onError(e);\n }\n }\n }\n\n function renderConfirmationForm() {\n return <VerifyEmailForm email={fields.email} password={fields.password} />;\n }\n\n function FederatedLogin() {\n const query = useQuery();\n const internalRedirect = query.get('redirect');\n return (\n <Media\n queries={{\n s: '(max-width: 615px)',\n }}\n >\n {(screenSize) => (\n <Flex justifyContent=\"center\">\n <Flex width=\"100%\" flexDirection=\"column\" alignItems=\"center\">\n <Flex justifyContent=\"center\" mt=\"100px\" mb=\"20px\">\n <StyledText size=\"40px\" light>\n Welcome to {labelName}\n </StyledText>\n </Flex>\n <Flex\n flexDirection=\"column\"\n alignItems=\"center\"\n width={screenSize.s ? '90%' : '608px'}\n height={!screenSize.s && '225px'}\n style={{ border: '1px solid #373737' }}\n px={screenSize.s ? '10px' : '80px'}\n py=\"40px\"\n >\n <Flex pb=\"40px\">\n <RegularText style={{ color: '#d0d0d0', letterSpacing: '0px' }}>\n You’ll be redirected to Splunk’s general login page. Use your Splunk Username\n and Password to access {labelName}.\n </RegularText>\n </Flex>\n {!screenSize.s && (\n <Flex pb=\"40px\" style={{ position: 'absolute', transform: 'translateX(-303px)' }}>\n {appType === BOTS_TYPE.SOC ? (\n <BotsIcon size={iconSize} />\n ) : (\n <BooIcon size={iconSize} />\n )}\n </Flex>\n )}\n <Flex width={screenSize.s ? '80%' : '292px'}>\n <Button\n onClick={() =>\n window.location.assign(\n `${config.cognito.saml.IDP_LOGIN_URL}?identity_provider=${\n config.cognito.saml.IDP_NAME\n }&response_type=${config.cognito.saml.IDP_RESPONSE_TYPE}&client_id=${\n config.cognito.saml.APP_CLIENT_ID\n }&redirect_uri=${config.cognito.saml.REDIRECT_SIGN_IN}&scope=${\n config.cognito.saml.IDP_SCOPE\n }&state=${internalRedirect || '/'}`\n )\n }\n >\n GO TO SIGN IN\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n )}\n </Media>\n );\n }\n\n function renderForm() {\n return (\n <Flex justifyContent=\"center\">\n <Box>\n <Flex justifyContent=\"center\" mt=\"100px\" mb=\"16px\">\n <StyledText size=\"40px\" light>\n Sign In\n </StyledText>\n </Flex>\n <Form>\n <Flex>\n <Box py=\"40px\" px=\"60px\" width=\"412px\">\n <Box mb=\"20px\">\n <FormLabel>Email</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"Enter your email\"\n type=\"email\"\n value={fields.email}\n onChange={handleFieldChange}\n id=\"email\"\n />\n </Box>\n <Box mb=\"20px\">\n <FormLabel>Password</FormLabel>\n <FormInput\n placeholder=\"Enter your password\"\n id=\"password\"\n value={fields.password}\n onChange={handleFieldChange}\n type=\"password\"\n />\n </Box>\n <Box mb=\"20px\">\n <Button\n id=\"login-button\"\n isLoading={loading}\n disabled={!validateForm()}\n type=\"submit\"\n onClick={handleSubmit}\n >\n Login\n </Button>\n </Box>\n <Flex justifyContent=\"center\">\n <FormLeyend>\n <LinkedText onClick={() => history.push('/recovery')}>\n Forgot your password?\n </LinkedText>\n </FormLeyend>\n </Flex>\n </Box>\n </Flex>\n </Form>\n <Flex mt=\"20px\" justifyContent=\"center\">\n <FormLeyend size=\"14px\">\n Don’t have an account?{' '}\n <LinkedText onClick={() => history.push('/signup')}>SIGN UP</LinkedText>\n </FormLeyend>\n </Flex>\n </Box>\n </Flex>\n );\n }\n\n return config.cognito.SAML_LOGIN\n ? FederatedLogin()\n : showVerifyEmail\n ? renderConfirmationForm()\n : renderForm();\n}\n","import React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Auth } from 'aws-amplify';\nimport { Flex, Box } from 'reflexbox';\nimport { Button, StyledText, FormLabel, FormLeyend, Form, LinkedText } from 'boss-ui';\nimport { FormInput } from '../../components';\nimport { useFormFields } from '../../libs/hooks-lib';\nimport { onError } from '../../libs/error-lib';\nimport VerifyEmailForm from '../../components/VerifyEmailForm';\n\nexport default function Signup() {\n const [fields, handleFieldChange] = useFormFields({\n email: '',\n password: '',\n confirmPassword: '',\n });\n const history = useHistory();\n const [newUser, setNewUser] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n\n function validateForm() {\n return (\n fields.email.length > 0 &&\n fields.password.length > 7 &&\n fields.password === fields.confirmPassword\n );\n }\n\n async function handleSubmit(event) {\n event.preventDefault();\n setIsLoading(true);\n try {\n const newUser = await Auth.signUp({\n username: fields.email.toLowerCase(),\n password: fields.password,\n });\n setIsLoading(false);\n setNewUser(newUser);\n } catch (e) {\n onError(e);\n setIsLoading(false);\n }\n }\n\n function renderConfirmationForm() {\n return <VerifyEmailForm email={fields.email} password={fields.password} />;\n }\n\n function renderForm() {\n return (\n <Flex justifyContent=\"center\">\n <Box>\n <Flex justifyContent=\"center\" mt=\"100px\" mb=\"16px\">\n <StyledText size=\"40px\" light>\n Sign Up\n </StyledText>\n </Flex>\n <Form onSubmit={handleSubmit}>\n <Flex>\n <Box py=\"40px\" px=\"60px\" width=\"412px\">\n <Box mb=\"20px\">\n <FormLabel>Email</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"Enter your email\"\n type=\"email\"\n value={fields.email}\n onChange={handleFieldChange}\n id=\"email\"\n />\n </Box>\n <Box mb=\"20px\">\n <FormLabel>Password</FormLabel>\n <FormInput\n id=\"password\"\n placeholder=\"Enter a password\"\n type=\"password\"\n value={fields.password}\n onChange={handleFieldChange}\n />\n <FormLeyend>\n *At least 8 characters length 1 symbol, 1 number, 1 uppercase, 1 lowercase\n </FormLeyend>\n </Box>\n <Box mb=\"20px\">\n <FormLabel>Confirm Password</FormLabel>\n <FormInput\n id=\"confirmPassword\"\n placeholder=\"Re enter your password\"\n type=\"password\"\n value={fields.confirmPassword}\n onChange={handleFieldChange}\n />\n </Box>\n <Button isLoading={isLoading} disabled={!validateForm()} type=\"submit\">\n SIGN UP\n </Button>\n </Box>\n </Flex>\n </Form>\n <Flex justifyContent=\"center\" mt=\"20px\">\n <FormLeyend size=\"14px\">\n Already have an account?{' '}\n <LinkedText onClick={() => history.push('/login')}>SIGN IN</LinkedText>\n </FormLeyend>\n </Flex>\n </Box>\n </Flex>\n );\n }\n\n return <>{newUser === null ? renderForm() : renderConfirmationForm()}</>;\n}\n","import React, { useEffect } from 'react';\nimport { Auth, API } from 'aws-amplify';\nimport { useHistory } from 'react-router-dom';\nimport { Flex } from 'reflexbox';\nimport { LoaderIcon } from 'boss-ui';\nimport SplunkRum from '@splunk/otel-web';\nimport config from '../../config';\nimport { onError } from '../../libs/error-lib';\nimport { useQuery } from '../../libs/hooks-lib';\nimport { setUserHeaders, formDataBody } from '../../libs/utils-lib';\nimport { useAppContext } from '../../libs/context-lib';\nimport { formatLoggedInUser } from '../../libs/cognito-lib';\n\nconst bodyObject = {\n grant_type: 'authorization_code',\n code: null,\n client_id: config.cognito.saml.APP_CLIENT_ID,\n redirect_uri: config.cognito.saml.REDIRECT_SIGN_IN,\n};\n\nfunction LoginSuccess() {\n const { userSession, appType } = useAppContext();\n const history = useHistory();\n const query = useQuery();\n\n const setDynamoUser = async (cognitoUser) => {\n const registeredUser = await API.get('users', '/user');\n if (!registeredUser.user) {\n userSession(cognitoUser);\n throw new Error('UserNotFoundInDynamo');\n }\n userSession({ ...cognitoUser, dynamoUser: registeredUser.user });\n setUserHeaders({ ...cognitoUser, dynamoUser: registeredUser.user });\n SplunkRum?.setGlobalAttributes({\n 'user.id': registeredUser.user.userId,\n 'user.email': registeredUser.user.email,\n 'user.username': registeredUser.user.displayName,\n });\n };\n\n useEffect(() => {\n const validateUserSession = async () => {\n try {\n const authCode = query.get('code');\n const internalRedirect = query.get('state');\n if (!authCode) {\n throw new Error('Missing login session code');\n }\n bodyObject.code = authCode;\n const tokensRq = await fetch(`https://${config.cognito.saml.DOMAIN}/oauth2/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',\n },\n body: formDataBody(bodyObject),\n });\n const tokens = await tokensRq.json();\n const { id_token, refresh_token } = tokens;\n if (!id_token || !refresh_token) {\n throw new Error('Invalid Id or refresh token');\n }\n await Auth.federatedSignIn(\n `cognito-idp.${config.cognito.REGION}.amazonaws.com/${config.cognito.saml.USER_POOL_ID}`,\n {\n token: id_token,\n expires_at: 120 * 1000 + new Date().getTime(), // the expiration timestamp\n }\n );\n // this token will be used for refresh proccess\n localStorage.setItem('rt', refresh_token);\n // set user in the app state\n const loggedUser = formatLoggedInUser(await Auth.currentAuthenticatedUser());\n await setDynamoUser(loggedUser);\n history.push(internalRedirect);\n } catch (e) {\n if (e.message === 'UserNotFoundInDynamo') {\n history.push('/firstLogin');\n } else {\n onError(e);\n history.push('/login');\n }\n }\n };\n\n const setUserSession = async () => {\n try {\n // Check for user session before validating session by auth code\n const loggedUser = formatLoggedInUser(await Auth.currentAuthenticatedUser());\n await setDynamoUser(loggedUser);\n history.push('/');\n } catch (e) {\n if (e.message === 'UserNotFoundInDynamo') {\n history.push('/firstLogin');\n return;\n }\n validateUserSession();\n }\n };\n\n setUserSession();\n }, []);\n\n return (\n <Flex mt=\"15%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n}\nexport default LoginSuccess;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport debounce from 'lodash/debounce';\nimport get from 'lodash/get';\nimport { Button, Form, FormLabel, StyledText, Tooltip, QuestionCircleIcon, RegularText, ConfirmationModal } from 'boss-ui';\nimport Api from '../../api';\nimport { FormInput } from '../../components';\nimport { useFormFields } from '../../libs/hooks-lib';\nimport { useAppContext } from '../../libs/context-lib';\nimport { onError } from '../../libs/error-lib';\nimport { DISPLAY_NAME_REGEXP } from '../../libs/constants';\nimport { setUserHeaders } from '../../libs/utils-lib';\n\nconst API = new Api();\n\nexport default function Account() {\n const [fields, handleFieldChange] = useFormFields({\n displayName: '',\n });\n const [isLoading, setIsLoading] = useState(false);\n const [availableName, setNameAvailable] = useState(true);\n const { user, userSession } = useAppContext();\n const currentName = get(user, 'dynamoUser.displayName', '');\n const [searchLoading, setSearchLoading] = useState(true);\n const [confirmationModalVisible, setConfirmationModalVisible] = useState(false);\n\n const history = useHistory();\n const validateForm = () =>\n availableName &&\n fields.displayName.match(DISPLAY_NAME_REGEXP) &&\n currentName !== fields.displayName;\n\n const checkDisplayName = async (name) => {\n try {\n const data = await API.get('users', '/users/check-displayname', {\n queryStringParameters: {\n q: name,\n },\n });\n setNameAvailable(data.user.available);\n } catch (e) {\n onError(e);\n setNameAvailable(false);\n } finally {\n setSearchLoading(false);\n }\n };\n\n const delayedSearch = useCallback(\n debounce((q) => checkDisplayName(q), 300),\n []\n );\n\n const onNameChange = (e) => {\n handleFieldChange(e);\n if (e.target.value === currentName) {\n setSearchLoading(true);\n return;\n }\n if (e.target.value.length > 2) {\n setSearchLoading(true);\n delayedSearch(e.target.value);\n }\n };\n\n const handleUserAttributesSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n try {\n const editedUser = await API.patch('users', '/user', {\n body: {\n displayName: fields.displayName,\n },\n });\n userSession((u) => ({\n ...u,\n dynamoUser: {\n ...u.dynamoUser,\n displayName: editedUser.user.displayName,\n slug: editedUser.user.slug,\n },\n }));\n setUserHeaders({ dynamoUser: editedUser.user, ...user });\n history.push('/');\n } catch (err) {\n onError(err);\n setIsLoading(false);\n }\n };\n\n const deleteAccount = async () => {\n setConfirmationModalVisible(false);\n try {\n await API.del('users', `/user`);\n history.push('/logout');\n } catch (e) {\n onError(e);\n }\n };\n\n useEffect(() => {\n if (!user.dynamoUser) {\n history.push('/');\n }\n handleFieldChange({\n target: {\n value: currentName,\n id: 'displayName',\n },\n });\n }, []);\n\n return (\n <>\n <Flex justifyContent=\"center\">\n <Box>\n <Flex justifyContent=\"center\" mt=\"100px\" mb=\"16px\">\n <StyledText size=\"24px\" medium>\n Account Settings\n </StyledText>\n </Flex>\n <Form>\n <Flex>\n <Box py=\"40px\" px=\"60px\" width=\"412px\">\n {/* Box with relative position to get question mark stuck to the input */}\n <Box mb=\"20px\" style={{ position: 'relative' }}>\n <FormLabel>Display Name</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"User display name\"\n value={fields.displayName}\n onChange={onNameChange}\n id=\"displayName\"\n validate={fields.displayName}\n validating={searchLoading}\n available={availableName}\n pattern={DISPLAY_NAME_REGEXP}\n unavailableMessage=\"This name was already taken!\"\n invalidPatternMessage=\"From 3 to 30 length, spaces, a-z, 0-9 and _ allowed\"\n validMessage=\"Name is available\"\n />\n <Flex\n data-tip\n data-for=\"displayName\"\n style={{\n position: 'absolute',\n right: '-30px',\n top: '28px',\n }}\n >\n <QuestionCircleIcon />\n </Flex>\n <Tooltip id=\"displayName\">\n You must choose a display name to continue. Note that your display name may be\n visible to other participants so choose a name that protects your identity if\n remaining anonymous is important to you. (3 characters at least, alphanumerics,\n spaces and underscores allowed)\n </Tooltip>\n </Box>\n <Flex ml=\"auto\" width={1}>\n <Box width={1}>\n <Button\n onClick={handleUserAttributesSubmit}\n isLoading={isLoading || searchLoading}\n disabled={!validateForm()}\n >\n SAVE\n </Button>\n </Box>\n </Flex>\n <Flex ml=\"auto\" mt=\"10px\" width={1}>\n <Box width={1}>\n <Button onClick={() => setConfirmationModalVisible(true)} danger>\n DELETE ACCOUNT\n </Button>\n </Box>\n </Flex>\n </Box>\n </Flex>\n </Form>\n </Box>\n </Flex>\n {confirmationModalVisible && (\n <ConfirmationModal\n dangerDialog\n onCancel={() => setConfirmationModalVisible(false)}\n onAccept={deleteAccount}\n acceptLabel=\"DELETE\"\n >\n <RegularText>\n Are you sure you want to delete your account?\n <br />\n All your data will be deleted!.\n </RegularText>\n </ConfirmationModal>\n )}\n </>\n );\n}\n","import React from 'react';\nimport './NotFound.css';\n\nexport default function NotFound() {\n return (\n <div className=\"NotFound\">\n <h3>Sorry, page not found!</h3>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { Flex, Box } from 'reflexbox';\nimport { Auth } from 'aws-amplify';\nimport { useHistory } from 'react-router-dom';\nimport { Button, Form, FormLabel, FormLeyend, LinkedText } from 'boss-ui';\nimport { FormInput } from '../../components';\nimport { useFormFields } from '../../libs/hooks-lib';\nimport { onError } from '../../libs/error-lib';\n\nexport default function PasswordRecovery() {\n const [fields, setFields] = useFormFields({\n email: '',\n verificationCode: '',\n newPassword: '',\n newPasswordConfirmation: '',\n });\n const [isLoading, setLoading] = useState(false);\n const [codeSent, setCodeSent] = useState(false);\n const history = useHistory();\n\n async function handleSendRecoveryCode(e) {\n e.preventDefault();\n setLoading(true);\n try {\n await Auth.forgotPassword(fields.email);\n setCodeSent(true);\n } catch (e) {\n onError(e);\n } finally {\n setLoading(false);\n }\n }\n\n async function handleResetPassword(e) {\n e.preventDefault();\n setLoading(true);\n try {\n await Auth.forgotPasswordSubmit(fields.email, fields.verificationCode, fields.newPassword);\n history.push('/');\n } catch (e) {\n onError(e);\n setLoading(false);\n }\n }\n\n const validateNewPassword = () =>\n fields.verificationCode &&\n fields.newPassword.length > 7 &&\n fields.newPassword === fields.newPasswordConfirmation;\n\n function MailForm() {\n return (\n <Flex justifyContent=\"center\" align=\"center\" mt=\"100px\" mb=\"16px\">\n <Box>\n <Form onSubmit={handleSendRecoveryCode}>\n <Flex>\n <Box px=\"60px\" py=\"40px\" width=\"412px\">\n <Box mb=\"20px\">\n <FormLabel>Email</FormLabel>\n <FormInput\n autoFocus\n placeholder=\"Enter user email\"\n value={fields.email}\n id=\"email\"\n onChange={setFields}\n type=\"email\"\n />\n </Box>\n <Button type=\"submit\" isLoading={isLoading} disabled={fields.email.length < 5}>\n SEND RECOVERY CODE\n </Button>\n </Box>\n </Flex>\n </Form>\n <Flex justifyContent=\"center\" mt=\"20px\">\n <FormLeyend size=\"14px\">\n Go back to <LinkedText onClick={() => history.push('/login')}>SIGN IN</LinkedText>\n </FormLeyend>\n </Flex>\n </Box>\n </Flex>\n );\n }\n\n function NewPasswordForm() {\n return (\n <Flex justifyContent=\"center\" align=\"center\" mt=\"100px\" mb=\"16px\">\n <Box>\n <Form onSubmit={handleResetPassword}>\n <Flex>\n <Box px=\"60px\" py=\"40px\" width=\"412px\">\n <Box mb=\"20px\">\n <FormLabel>Code</FormLabel>\n <FormInput\n autoFocus\n id=\"verificationCode\"\n placeholder=\"Enter verification code\"\n value={fields.verificationCode}\n onChange={setFields}\n />\n </Box>\n <Box mb=\"20px\">\n <FormLabel>New Password</FormLabel>\n <FormInput\n id=\"newPassword\"\n placeholder=\"Enter new password\"\n value={fields.newPassword}\n onChange={setFields}\n type=\"password\"\n />\n <FormLeyend>\n *At least 8 characters length 1 symbol, 1 number, 1 uppercase, 1 lowercase\n </FormLeyend>\n </Box>\n <Box mb=\"20px\">\n <FormLabel>Confirm Password</FormLabel>\n <FormInput\n id=\"newPasswordConfirmation\"\n placeholder=\"Confirm password\"\n value={fields.newPasswordConfirmation}\n onChange={setFields}\n type=\"password\"\n />\n </Box>\n <Button type=\"submit\" isLoading={isLoading} disabled={!validateNewPassword()}>\n RESET PASSWORD\n </Button>\n </Box>\n </Flex>\n </Form>\n </Box>\n </Flex>\n );\n }\n\n return <>{codeSent ? NewPasswordForm() : MailForm()}</>;\n}\n","import React, { useEffect, useState } from 'react';\nimport { Box, Flex } from 'reflexbox';\nimport Media from 'react-media';\nimport get from 'lodash/get';\nimport { useHistory } from 'react-router-dom';\nimport Api from '../../api';\nimport { StyledText, Paginator } from 'boss-ui';\nimport { Card, CardSkeleton, ErrorBoundary, MalloryMessage } from '../../components';\nimport { useAppContext } from '../../libs/context-lib';\nimport { onError } from '../../libs/error-lib';\nimport { EVENT_TYPE, EVENT_ACCESS_TYPE } from '../../libs/constants';\nimport { useDynamoPaginator } from '../../libs/hooks-lib';\n\nconst EMPTY_LIST_MESSAGE = `Looks like you haven't completed any event or workshop.`;\n\nconst DEFAULT_PAGE_SIZE = 10;\nconst ZERO = 0;\nconst PAGE_STEP = 1;\n\nconst API = new Api();\n\nexport default function History() {\n const [loading, setLoadingHistory] = useState(true);\n const [historyEvents, setHistoryEvents] = useState([]);\n const { setEvent } = useAppContext();\n const [{ pages, currentPage }, paginate] = useDynamoPaginator();\n const history = useHistory();\n\n const getUserEvents = async (page = ZERO) => {\n setLoadingHistory(true);\n let lastEvaluatedKey;\n if (page > ZERO) {\n lastEvaluatedKey =\n page > currentPage\n ? pages[currentPage].nextPagePointer\n : pages[currentPage].lastPagePointer;\n }\n try {\n const rq = await API.get('users', '/user/events', {\n queryStringParameters: {\n pageSize: DEFAULT_PAGE_SIZE,\n ...(lastEvaluatedKey && {\n ...lastEvaluatedKey,\n }),\n },\n });\n setHistoryEvents(\n rq.events.map((w) => ({\n ...w,\n eventType: w.model === EVENT_TYPE.WORKSHOP ? EVENT_TYPE.WORKSHOP : EVENT_TYPE.GAME,\n }))\n );\n paginate(rq.pagination, page);\n setLoadingHistory(false);\n } catch (e) {\n onError(e);\n }\n };\n\n useEffect(() => {\n getUserEvents();\n return () => API.abortCurrentRequest();\n }, []);\n\n const onCardClicked = (event) => {\n setEvent(event);\n history.push(\n `/history/${\n event.eventType === EVENT_TYPE.WORKSHOP\n ? `${event.workshopId}/workshop`\n : `${event.eventId}/event`\n }`\n );\n };\n\n return (\n <Media\n queries={{\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n }}\n >\n {(matches) => (\n <Box mx={matches.m ? '20px' : '10%'} mt=\"60px\" mb=\"5%\" textAlign=\"left\">\n <Flex\n mb=\"30px\"\n alignItems=\"center\"\n mx=\"15px\"\n flexDirection={matches.s ? 'column-reverse' : 'row'}\n >\n <Flex alignSelf=\"start\">\n <StyledText light size=\"28px\">\n History\n </StyledText>\n </Flex>\n </Flex>\n <ErrorBoundary>\n {loading ? (\n <CardSkeleton style={{ marginLeft: '15px' }} />\n ) : (\n <Flex\n flexDirection=\"row\"\n justifyContent={matches.s ? 'center' : 'flex-start'}\n alignItems=\"flex-start\"\n flexWrap=\"wrap\"\n >\n {historyEvents.length === 0 ? (\n <Flex mx=\"15px\" width={1}>\n <MalloryMessage message={EMPTY_LIST_MESSAGE} />\n </Flex>\n ) : (\n <>\n {historyEvents.map((e, idx) => {\n const key = get(e, 'id', idx);\n const title = get(e, 'name');\n return (\n <Flex\n key={key}\n index={idx}\n style={{\n minWidth: '330px',\n padding: '15px',\n }}\n >\n <Card\n {...e}\n stats={e.participant && e.participant.stats ? e.participant.stats : {}}\n history\n showDate\n restricted={\n e.accessType && e.accessType === EVENT_ACCESS_TYPE.RESTRICTED\n }\n title={title}\n onCardClick={() => onCardClicked(e)}\n />\n </Flex>\n );\n })}\n <Flex width={1} pr=\"20px\" justifyContent=\"center\" mt=\"20px\">\n <Paginator\n isNext={pages[currentPage] && pages[currentPage].nextPagePointer}\n onNext={() => getUserEvents(currentPage + PAGE_STEP)}\n isPrev={currentPage > 0}\n onPrev={() => getUserEvents(currentPage - PAGE_STEP)}\n paginating={loading}\n backgroundColor=\"transparent\"\n />\n </Flex>\n </>\n )}\n </Flex>\n )}\n </ErrorBoundary>\n </Box>\n )}\n </Media>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport Media from 'react-media';\nimport { Flex, Box } from 'reflexbox';\nimport { Switch, useHistory } from 'react-router-dom';\nimport get from 'lodash/get';\nimport Api from '../../api';\nimport { onError } from '../../libs/error-lib';\nimport {\n AuthenticatedRoute,\n ConfirmationModal,\n Menu,\n Input,\n RegularText,\n StyledText,\n UnregularButton,\n} from 'boss-ui';\nimport {\n Card,\n CardSkeleton,\n ErrorBoundary,\n RestrictedEvents,\n ToggleButton,\n} from '../../components';\nimport { EVENT_TYPE, EVENT_DELIVERY } from '../../libs/constants';\nimport { useAppContext } from '../../libs/context-lib';\nimport { isOnDemandEventInsidePlayWindow } from '../../libs/event-lib';\nimport { scrollToHash } from '../../libs/utils-lib';\nimport History from '../History';\n\nconst EMPTY_LIST_MESSAGE = 'Coming soon...';\nconst MENU_ITEMS = [\n { path: '/', elementId: '#top', label: 'HOME', exact: true, id: 'menuLinkHome' },\n {\n path: { pathname: '/', hash: '#play-now' },\n label: 'PLAY NOW',\n exact: true,\n id: 'menuLinkHomePlayNow',\n },\n { path: { pathname: '/', hash: '#learn' }, label: 'LEARN', id: 'menuLinkLearn', exact: true },\n {\n path: { pathname: '/', hash: '#boss-events' },\n label: 'BOSS EVENTS',\n id: 'menuLinkEvents',\n exact: true,\n },\n {\n path: `/history`,\n label: 'HISTORY',\n id: 'menuLinkHistory',\n exact: true,\n },\n];\n\nconst API = new Api();\n\nexport default function Home() {\n const [loadingEvents, setLoadingEvents] = useState(true);\n const [loadingRestrictedEvents, setLoadingRestrictedEvents] = useState(true);\n const [loadingOnDemandEvents, setLoadingOnDemandEvents] = useState(true);\n const [onDemandEvents, setOnDemandEvents] = useState([]);\n const [loadingWorkshops, setLoadingWorkshops] = useState(true);\n const [filteredWorkshops, setFilteredWorkshops] = useState([]);\n const [filteredEvents, setFilteredEvents] = useState([]);\n const [filteredRestrictedEvents, setFilteredRestrictedEvents] = useState([]);\n const [ignoreType, setIgnoreType] = useState(false);\n const [hasUserScrolled, setHasUserScrolled] = useState(false);\n const [inviteCodeModalVisible, setInviteCodeModalVisible] = useState(false);\n const [inviteCodeValue, setInviteCodeValue] = useState('');\n const [loadingInviteCodeEvent, setLoadingInviteCodeEvent] = useState(false);\n const { appType, setEvent } = useAppContext();\n const history = useHistory();\n\n useEffect(() => {\n const getOnDemandEvents = async () => {\n setLoadingOnDemandEvents(true);\n try {\n const rq = await API.get('events', '/events', {\n queryStringParameters: { accessType: EVENT_DELIVERY.ON_DEMAND },\n });\n const eventsWithType = rq.events.map((e) => ({ ...e, eventType: EVENT_TYPE.GAME }));\n setOnDemandEvents(\n ignoreType ? eventsWithType : eventsWithType.filter((e) => e.type === appType)\n );\n } catch (e) {\n onError(e);\n } finally {\n setLoadingOnDemandEvents(false);\n }\n };\n getOnDemandEvents();\n }, [ignoreType]);\n\n useEffect(() => {\n const getRestrictedEvents = async () => {\n setLoadingRestrictedEvents(true);\n try {\n const rq = await API.get('events', '/events', {\n queryStringParameters: { accessType: 'RESTRICTED' },\n });\n const eventsWithType = rq.events.map((e) => ({ ...e, eventType: EVENT_TYPE.GAME }));\n setFilteredRestrictedEvents(\n ignoreType ? eventsWithType : eventsWithType.filter((e) => e.type === appType)\n );\n } catch (e) {\n onError(e);\n } finally {\n setLoadingRestrictedEvents(false);\n }\n };\n getRestrictedEvents();\n }, [ignoreType]);\n\n useEffect(() => {\n const getEvents = async () => {\n setLoadingEvents(true);\n try {\n const rq = await API.get('events', '/events');\n const eventsWithType = rq.events.map((e) => ({ ...e, eventType: EVENT_TYPE.GAME }));\n setFilteredEvents(\n ignoreType ? eventsWithType : eventsWithType.filter((e) => e.type === appType)\n );\n } catch (e) {\n onError(e);\n } finally {\n setLoadingEvents(false);\n }\n };\n getEvents();\n }, [ignoreType]);\n\n useEffect(() => {\n const getWorkshops = async () => {\n setLoadingWorkshops(true);\n try {\n const rq = await API.get('workshops', '/workshops');\n const workshopsWithType = rq.workshops.map((w) => ({\n ...w,\n eventType: EVENT_TYPE.WORKSHOP,\n }));\n setFilteredWorkshops(\n ignoreType ? workshopsWithType : workshopsWithType.filter((w) => w.type === appType)\n );\n } catch (e) {\n onError(e);\n } finally {\n setLoadingWorkshops(false);\n }\n };\n getWorkshops();\n }, [ignoreType]);\n\n const onCardClicked = (event) => {\n const enrolled = get(event, 'participant.enrolled', false);\n if (event.eventType === EVENT_TYPE.WORKSHOP) {\n setEvent({ ...event, eventId: event.workshopId });\n history.push(\n enrolled ? `/workshop/${event.workshopId}` : `/workshops/${event.workshopId}/detail`\n );\n return;\n }\n setEvent(event);\n if (event.delivery === EVENT_DELIVERY.ON_DEMAND) {\n // if event is still playable\n if (\n enrolled &&\n isOnDemandEventInsidePlayWindow(get(event, 'participant.joinDate'), event.duration)\n ) {\n history.push(`/event/${event.eventId}`);\n return;\n }\n // play again event\n history.push(`/event/${event.eventId}/detail`);\n return;\n }\n history.push(enrolled ? `/event/${event.eventId}` : `/event/${event.eventId}/detail`);\n };\n\n const onInviteCodeSubmit = async () => {\n try {\n setLoadingInviteCodeEvent(true);\n const { inviteCode } = await API.get('events', `/invite-codes/${inviteCodeValue}`);\n setLoadingInviteCodeEvent(false);\n history.push(`/event/${inviteCode.eventId}/detail?invite_code=${inviteCodeValue}`);\n } catch (e) {\n setLoadingInviteCodeEvent(false);\n onError(e);\n }\n };\n\n // hash auto scroll\n useEffect(() => {\n if (!(loadingRestrictedEvents || loadingEvents || loadingWorkshops || loadingOnDemandEvents)) {\n if (!hasUserScrolled) {\n scrollToHash(window.location);\n }\n }\n }, [\n loadingEvents,\n loadingOnDemandEvents,\n loadingWorkshops,\n loadingRestrictedEvents,\n hasUserScrolled,\n ]);\n\n // user scroll event listener control\n useEffect(() => {\n const onUserScrolled = () => setHasUserScrolled(true);\n window.addEventListener('scroll', onUserScrolled);\n window.addEventListener('menu-fired-scroll', onUserScrolled);\n return () => {\n window.removeEventListener('scroll', onUserScrolled);\n window.removeEventListener('menu-fired-scroll', onUserScrolled);\n };\n }, []);\n\n return (\n <>\n <div id=\"#top\" style={{ position: 'absolute', top: 0 }} />\n <Menu menuItems={MENU_ITEMS} />\n <Media\n queries={{\n xs: '(max-width: 500px)',\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n l: '(max-width: 1171px)',\n }}\n >\n {(matches) => (\n <>\n <Switch>\n <AuthenticatedRoute path=\"/\" exact>\n <>\n <Box mx=\"12%\" mt={matches.m ? '30px' : '60px'} mb=\"5%\" textAlign=\"left\">\n {/* display prop fixes margin issue with absolute elements in IOS */}\n <Flex alignItems=\"center\" style={{ display: 'inline-block' }}>\n <Flex\n justifyContent=\"center\"\n style={{\n position: 'absolute',\n top: matches.m ? '115px' : '145px',\n left: matches.m ? '12%' : '44%',\n }}\n >\n <UnregularButton onClick={() => setInviteCodeModalVisible(true)}>\n I have a code\n </UnregularButton>\n </Flex>\n <Flex\n style={{\n position: 'absolute',\n top: matches.m ? '120px' : '150px',\n right: matches.m ? '20px' : '12%',\n }}\n >\n <RegularText alignItems=\"flex-end\">\n Show All Events\n <ToggleButton\n isOn={ignoreType}\n onToggle={() => setIgnoreType((prev) => !prev)}\n />\n </RegularText>\n </Flex>\n </Flex>\n\n {/* vertical space for smaller screens padding */}\n <Flex mt={matches.m ? '10px' : '0px'} />\n\n {(filteredRestrictedEvents.length > 0 || loadingRestrictedEvents) && (\n <Flex\n className=\"Home-ContainerSpecialEvents\"\n flexDirection=\"column\"\n mb=\"50px\"\n >\n <Flex alignSelf=\"start\" mb=\"30px\" id=\"#private\">\n <StyledText light size=\"28px\">\n Private Events\n </StyledText>\n </Flex>\n <ErrorBoundary>\n <RestrictedEvents\n restrictedEvents={filteredRestrictedEvents}\n loadingRestrictedEvents={loadingRestrictedEvents}\n onCardClick={onCardClicked}\n />\n </ErrorBoundary>\n </Flex>\n )}\n\n <Flex mb=\"60px\" id=\"play-now\" flexDirection=\"column\">\n <Flex\n mb=\"30px\"\n alignItems=\"center\"\n flexDirection={matches.s ? 'column-reverse' : 'row'}\n >\n <Flex alignSelf=\"start\">\n <StyledText light size=\"28px\">\n Play Now\n </StyledText>\n </Flex>\n </Flex>\n <ErrorBoundary>\n {loadingOnDemandEvents ? (\n <CardSkeleton />\n ) : (\n <Flex\n flexDirection=\"row\"\n justifyContent={matches.s ? 'center' : 'flex-start'}\n alignItems=\"flex-start\"\n flexWrap=\"wrap\"\n className=\"Home-ContainerPlayNowEvents\"\n >\n {onDemandEvents.length === 0 ? (\n <Flex mx=\"15px\">\n <RegularText alignItems=\"center\" width=\"max-content\">\n {EMPTY_LIST_MESSAGE}\n </RegularText>\n </Flex>\n ) : (\n <>\n {onDemandEvents.map((e, idx) => {\n const key = get(e, 'scenarioId', idx);\n const title = get(e, 'name');\n const showDate = e && e.delivery === EVENT_DELIVERY.NORMAL;\n return (\n <Flex\n key={key}\n style={{\n minWidth: '330px',\n padding: '15px 30px 15px 0',\n }}\n className={`Home-CardFlex-${e.scenarioId}`}\n >\n <Card\n {...e}\n title={title}\n onCardClick={() => onCardClicked(e)}\n showDate={showDate}\n joinDate={get(e, 'participant.joinDate')}\n enrolled={get(e, 'participant.enrolled')}\n />\n </Flex>\n );\n })}\n </>\n )}\n </Flex>\n )}\n </ErrorBoundary>\n </Flex>\n\n <Flex mb=\"60px\" id=\"learn\" flexDirection=\"column\">\n <Flex\n mb=\"30px\"\n alignItems=\"center\"\n flexDirection={matches.s ? 'column-reverse' : 'row'}\n >\n <Flex alignSelf=\"start\">\n <StyledText light size=\"28px\">\n Learn\n </StyledText>\n </Flex>\n </Flex>\n <ErrorBoundary>\n {loadingWorkshops ? (\n <CardSkeleton />\n ) : (\n <Flex\n flexDirection=\"row\"\n justifyContent={matches.s ? 'center' : 'flex-start'}\n alignItems=\"flex-start\"\n flexWrap=\"wrap\"\n className=\"Home-ContainerLearnEvents\"\n >\n {filteredWorkshops.length === 0 ? (\n <Flex mx=\"15px\">\n <RegularText alignItems=\"center\" width=\"max-content\">\n {EMPTY_LIST_MESSAGE}\n </RegularText>\n </Flex>\n ) : (\n <>\n {filteredWorkshops.map((e, idx) => {\n const key = get(e, 'id', idx);\n const title = get(e, 'name');\n return (\n <Flex\n key={key}\n index={idx}\n style={{\n minWidth: '330px',\n padding: '15px 30px 15px 0',\n }}\n className={`Home-CardFlex-${e.id}`}\n >\n <Card\n {...e}\n stats={get(e, 'participant.stats')}\n title={title}\n onCardClick={() => onCardClicked(e)}\n enrolled={get(e, 'participant.enrolled')}\n />\n </Flex>\n );\n })}\n </>\n )}\n </Flex>\n )}\n </ErrorBoundary>\n </Flex>\n\n <Flex mb=\"60px\" id=\"boss-events\" flexDirection=\"column\">\n <Flex\n mb=\"30px\"\n alignItems=\"center\"\n flexDirection={matches.s ? 'column-reverse' : 'row'}\n >\n <Flex alignSelf=\"start\">\n <StyledText light size=\"28px\">\n Boss Events\n </StyledText>\n </Flex>\n </Flex>\n <ErrorBoundary>\n {loadingEvents ? (\n <CardSkeleton />\n ) : (\n <Flex\n flexDirection=\"row\"\n justifyContent={matches.s ? 'center' : 'flex-start'}\n alignItems=\"flex-start\"\n flexWrap=\"wrap\"\n className=\"Home-ContainerBossEvents\"\n >\n {filteredEvents.length === 0 ? (\n <Flex mx=\"15px\">\n <RegularText alignItems=\"center\" width=\"max-content\">\n {EMPTY_LIST_MESSAGE}\n </RegularText>\n </Flex>\n ) : (\n <>\n {filteredEvents.map((e, idx) => {\n const key = get(e, 'scenarioId', idx);\n const title = get(e, 'name');\n const showDate = e && e.delivery === EVENT_DELIVERY.NORMAL;\n return (\n <Flex\n key={key}\n style={{\n minWidth: '330px',\n padding: '15px 30px 15px 0',\n }}\n className={`Home-CardFlex-${e.scenarioId}`}\n >\n <Card\n {...e}\n title={title}\n onCardClick={() => onCardClicked(e)}\n showDate={showDate}\n enrolled={get(e, 'participant.enrolled')}\n />\n </Flex>\n );\n })}\n </>\n )}\n </Flex>\n )}\n </ErrorBoundary>\n </Flex>\n </Box>\n {inviteCodeModalVisible && (\n <ConfirmationModal\n acceptLabel=\"SUBMIT\"\n onCancel={() => setInviteCodeModalVisible(false)}\n onAccept={onInviteCodeSubmit}\n loading={loadingInviteCodeEvent}\n >\n <Box width=\"300px\">\n <RegularText light mediumWeight>\n Enter your code below to access the private event you were invited to.\n </RegularText>\n <Flex width={1} mt=\"16px\" mx=\"16px\">\n <Input\n height=\"25px\"\n style={{ width: '265px' }}\n placeholder=\"Enter Code\"\n value={inviteCodeValue}\n onChange={(e) => setInviteCodeValue(e.target.value)}\n />\n </Flex>\n </Box>\n </ConfirmationModal>\n )}\n </>\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/history\">\n <History />\n </AuthenticatedRoute>\n </Switch>\n </>\n )}\n </Media>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport const FEATURE_FLAG_ID_RESOURCE_ALLOCATION_V2 = 'RESOURCE_ALLOCATION_V2_FLAG';\nexport const FEATURE_FLAG_ID_HIDE_USER_SCORING = 'HIDE_USER_SCORING';\n\n\nexport const useGetFeatureFlag = (api, { featureFlagId }) => {\n const [loading, setLoading] = useState(true);\n const [flagConfig, setFlagConfig] = useState(null);\n useEffect(() => {\n async function fetchData() {\n const result = await getFeatureFlag(api, featureFlagId);\n console.log(result);\n setFlagConfig(result);\n setLoading(false);\n }\n\n fetchData().then();\n }, [api, featureFlagId]);\n return { loading, flagConfig };\n};\n\nconst assertFeatureFlagIdIsNotEmpty = (featureFlagId) => {\n if (!featureFlagId) {\n throw new Error('featureFlagId is required');\n }\n};\n\nexport const getFeatureFlag = async (api, featureFlagId) => {\n assertFeatureFlagIdIsNotEmpty(featureFlagId);\n return await api.get('events', `/admin/feature-flags/${featureFlagId}`);\n};\n\nexport const postFeatureFlag = async (api, { featureFlagId, configPayload }) => {\n assertFeatureFlagIdIsNotEmpty(featureFlagId);\n if (!configPayload || typeof configPayload !== 'object') {\n throw new Error('configPayload is required and must be an object');\n }\n return await api.post('events', `/admin/feature-flags/${featureFlagId}`, {\n body: configPayload\n });\n};\n\nexport const getResourceAllocationV2Flag = (api) => {\n return getFeatureFlag(api, FEATURE_FLAG_ID_RESOURCE_ALLOCATION_V2);\n};\n\nexport const useGetResourceAllocationV2Flag = (api) => {\n return useGetFeatureFlag(api, { featureFlagId: FEATURE_FLAG_ID_RESOURCE_ALLOCATION_V2 });\n};\n\nexport const shouldHideScoringForEventId = async (api, eventId) => {\n try {\n const resp = await getFeatureFlag(api, FEATURE_FLAG_ID_HIDE_USER_SCORING);\n const eventIdsToHide = resp?.hiddenForEventIds ?? [];\n return eventIdsToHide.includes(eventId);\n } catch (error) {\n console.error(error);\n return false;\n }\n}\n\nexport const useListAllEvents = (api, { pageSize = 200 } = {}) => {\n const [loading, setLoading] = useState(true);\n const [events, setEvents] = useState([]);\n useEffect(() => {\n async function fetchAllEvents() {\n let lastEvaluatedKey = {};\n const retrievedEvents = [];\n let paginationHasMore = true;\n while (paginationHasMore) {\n const result = await api.get('events', `/admin/events`, {\n queryStringParameters: {\n pageSize,\n ...lastEvaluatedKey\n }\n });\n retrievedEvents.push(...result.events);\n paginationHasMore = result?.pagination?.more || false;\n lastEvaluatedKey = result.pagination.LastEvaluatedKey;\n }\n return retrievedEvents;\n }\n\n fetchAllEvents().then(eventsFromApi => {\n setEvents(eventsFromApi);\n setLoading(false);\n });\n }, [api, pageSize]);\n return { loading, events };\n};","import React, { useEffect, useState, Suspense } from 'react';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\nimport { Flex } from 'reflexbox';\nimport { isEmpty } from 'lodash';\nimport Api from '../../api';\nimport { onError } from '../../libs/error-lib';\nimport { useAppContext } from '../../libs/context-lib';\nimport {\n LoaderIcon,\n Modal,\n CrossIcon,\n EventCredits,\n} from 'boss-ui';\nimport { EventMenu } from '../../components';\nimport { sendWarning } from '../../libs/utils-lib';\nimport { EVENT_DELIVERY, USER_ROLES } from '../../libs/constants';\nimport EventFloatingBox from '../../components/event/EventFloatingBox';\nimport { getEventShortName } from '../../libs/event-lib';\nimport { shouldHideScoringForEventId } from 'boss-ui/src/FeatureFlagApiClient';\n\nconst EventPlayer = React.lazy(() =>\n import('../EventPlayer').catch(() => {\n sendWarning('force reload by chunk error on EventPlayer', true);\n })\n);\n\nconst API = new Api();\n\nexport default function Event() {\n const { user, userSession, event, setNavTitle, setEvent, appType } = useAppContext();\n const [creditsModalVisible, setCreditsModalVisible] = useState(false);\n const [loadingUserInEvent, setLoadingUser] = useState(true);\n const [loadingEvent, setLoadingEvent] = useState(false);\n const history = useHistory();\n const routeMatch = useRouteMatch('/event/:eventId');\n const isAdmin = user.role === USER_ROLES.ADMIN;\n\n const eventId = routeMatch?.params?.eventId;\n const [hideScoring, setHideScoring] = useState(false);\n\n useEffect(() => {\n if(eventId){\n console.log(`Route event id: ${eventId}`);\n shouldHideScoringForEventId(API, eventId).then((resp) => {\n console.log(`Should hide scoring for event ${eventId}: ${resp}`);\n setHideScoring(resp);\n });\n }\n }, [eventId]);\n\n useEffect(() => {\n const getUserInEvent = async (eventId) => {\n setLoadingUser(true);\n try {\n const rq = await API.get('users', `/user/events/${eventId}`);\n userSession((userInSession) => ({\n ...userInSession,\n userInTeam: rq.team,\n role: rq.participant.role,\n }));\n // if user does not have a team in a normal event redirect to join team page\n if (rq.event && rq.event.delivery === EVENT_DELIVERY.NORMAL && isEmpty(rq.team)) {\n history.push(`/event/${eventId}/team/join`);\n }\n } catch (e) {\n onError(e);\n history.push('/');\n } finally {\n setLoadingUser(false);\n }\n };\n const getEventByPathId = async () => {\n setLoadingEvent(true);\n try {\n const { event, participant } = await API.get(\n 'events',\n `/events/${routeMatch.params.eventId}`\n );\n setEvent({ ...event, participant });\n setNavTitle(event.name);\n getUserInEvent(event.eventId);\n } catch (e) {\n onError(e);\n history.push('/');\n } finally {\n setLoadingEvent(false);\n }\n };\n\n if (event && event.scenarios) {\n getUserInEvent(event.eventId);\n setNavTitle(event.name);\n } else {\n getEventByPathId();\n }\n\n return () => {\n setNavTitle(null);\n userSession((u) => ({ ...u, userInTeam: undefined }));\n API.abortCurrentRequest();\n };\n }, []);\n\n if (loadingUserInEvent || loadingEvent) {\n return (\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n }\n\n const leaveEvent = async () => {\n history.push('/');\n };\n\n return (\n <Suspense\n fallback={\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n }\n >\n <EventMenu\n onLeaveEvent={leaveEvent}\n onShowCredits={() => setCreditsModalVisible(true)}\n hideScoring={hideScoring}\n />\n {creditsModalVisible && (\n <Modal\n onBackgroundClick={() => setCreditsModalVisible(false)}\n margin=\"5% auto 5% auto\"\n hideScroll\n >\n <Flex width={1} style={{ background: 'black' }}>\n <Flex\n p=\"4px\"\n ml=\"auto\"\n onClick={() => setCreditsModalVisible(false)}\n style={{ cursor: 'pointer' }}\n >\n <CrossIcon />\n </Flex>\n </Flex>\n <EventCredits contentUrl={event.eventCreditsMd} title={getEventShortName(event.type)} />\n </Modal>\n )}\n <EventFloatingBox isAdmin={isAdmin} hideScoring={hideScoring} />\n <EventPlayer hideScoring={hideScoring}/>\n </Suspense>\n );\n}\n","import React, { useEffect } from 'react';\nimport { Auth } from 'aws-amplify';\nimport { Flex } from 'reflexbox';\nimport { useHistory } from 'react-router-dom';\nimport { LoaderIcon } from 'boss-ui';\nimport { useAppContext } from '../../libs/context-lib';\nimport { deleteUserHeaders, sendWarning } from '../../libs/utils-lib';\nimport WebSocketClient from '../../components/websocket';\nimport { onError, getMessageError } from '../../libs/error-lib';\n\nexport default function Logout() {\n const { userSession, appType } = useAppContext();\n const history = useHistory();\n const wsClient = new WebSocketClient();\n\n useEffect(() => {\n const handleLogout = async () => {\n try {\n await Auth.signOut();\n userSession(null);\n deleteUserHeaders();\n wsClient.close();\n } catch (err) {\n onError(err);\n sendWarning(`logout Error ${getMessageError(err)}`);\n } finally {\n history.push('/login');\n }\n };\n handleLogout();\n }, []);\n\n return (\n <Flex mt=\"15%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n}\n","import React, { useEffect, useState, useMemo } from 'react';\nimport Media from 'react-media';\nimport { Flex, Box } from 'reflexbox';\nimport get from 'lodash/get';\nimport { useRouteMatch, useHistory, useLocation } from 'react-router-dom';\nimport Api from '../../api';\nimport { LoaderIcon, Menu, Breadcrumb } from 'boss-ui';\nimport { EventDetails } from '../../components';\nimport { useAppContext } from '../../libs/context-lib';\nimport { useQuery, useBreadcrumb } from '../../libs/hooks-lib';\nimport { onError } from '../../libs/error-lib';\nimport { EVENT_ACCESS_TYPE, EVENT_DELIVERY, EVENT_TYPE } from '../../libs/constants';\n\nconst API = new Api();\n\nexport default function Details() {\n const [loadingEvent, setLoadingEvent] = useState(true);\n const { setEvent, event, appType } = useAppContext();\n const eventRouteMatch = useRouteMatch('/event/:eventId/detail');\n const history = useHistory();\n const query = useQuery();\n const inviteCodeFromQuery = query.get('invite_code');\n const isOnDemand = event && event.delivery === EVENT_DELIVERY.ON_DEMAND;\n const isRestricted = event && event.accessType === EVENT_ACCESS_TYPE.RESTRICTED;\n const [breadcrumbs, setBreadcrumbs] = useBreadcrumb();\n const location = useLocation();\n\n const MENU_ITEMS = [\n ...(isRestricted\n ? [\n {\n path: `/event/${eventRouteMatch.params.eventId}/detail`,\n label: 'HOME',\n exact: true,\n id: 'menuLinkHome',\n },\n {\n path: { pathname: '/', hash: '#play-now' },\n label: 'PLAY NOW',\n id: 'menuLinkHomePlayNow',\n },\n { path: { pathname: '/', hash: '#learn' }, label: 'LEARN', id: 'menuLinkLearn' },\n {\n path: { pathname: '/', hash: '#boss-events' },\n label: 'BOSS EVENTS',\n id: 'menuLinkEvents',\n },\n ]\n : [\n {\n path: '/',\n label: 'HOME',\n exact: true,\n id: 'menuLinkHome',\n },\n {\n path: isOnDemand\n ? `/event/${eventRouteMatch.params.eventId}/detail`\n : { pathname: '/', hash: '#play-now' },\n label: 'PLAY NOW',\n id: 'menuLinkHomePlayNow',\n },\n { path: { pathname: '/', hash: '#learn' }, label: 'LEARN', id: 'menuLinkLearn' },\n {\n path: isOnDemand\n ? { pathname: '/', hash: '#boss-events' }\n : `/event/${eventRouteMatch.params.eventId}/detail`,\n label: 'BOSS EVENTS',\n id: 'menuLinkEvents',\n },\n ]),\n {\n path: `/history`,\n label: 'HISTORY',\n id: 'menuLinkHistory',\n },\n ];\n\n const routes = [\n {\n path: `/event/:eventId/detail`,\n name: get(event, 'name', 'Current event'),\n staticFather: isRestricted\n ? {\n name: 'Home',\n action: () => history.push('/'),\n }\n : isOnDemand\n ? {\n name: 'Play Now',\n action: () => history.push({ pathname: '/', hash: '#play-now' }),\n }\n : {\n name: 'BOSS Events',\n action: () => history.push({ pathname: '/', hash: '#boss-events' }),\n },\n },\n ];\n\n useEffect(() => {\n const getEvent = async (id) => {\n setLoadingEvent(true);\n try {\n const { event, participant } = await API.get('events', `/events/${id}`);\n setEvent({ ...event, participant });\n } catch (e) {\n onError(e);\n history.push('/');\n } finally {\n setLoadingEvent(false);\n }\n };\n\n if (event && event.eventId === eventRouteMatch.params.eventId) {\n setLoadingEvent(false);\n } else {\n getEvent(eventRouteMatch.params.eventId);\n }\n }, [eventRouteMatch.params.eventId]);\n\n useMemo(() => {\n setBreadcrumbs(routes, eventRouteMatch);\n }, [location, event]);\n\n if (loadingEvent) {\n return (\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n }\n\n return (\n <>\n <Menu menuItems={MENU_ITEMS} />\n <Media\n queries={{\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n }}\n >\n {(matches) => (\n <Flex justifyContent=\"center\" width={1}>\n <Box mx={matches.m ? '20px' : '10%'} mb=\"5%\" mt=\"30px\">\n <Flex my=\"30px\">\n <Breadcrumb crumbs={breadcrumbs} />\n </Flex>\n <EventDetails\n id={event.eventId}\n imageURL={event.imageURL}\n type={event.type}\n eventType={EVENT_TYPE.GAME}\n name={event.name}\n description={event.description}\n confirmationNumberRequired={event.confirmationNumberRequired}\n startDate={event.startDate}\n endDate={event.endDate}\n delivery={event.delivery}\n activeStartDate={event.activeStartDate}\n activeEndDate={event.activeEndDate}\n registrationStatus={event.registrationStatus}\n registrationOpenDate={event.registrationOpenDate}\n registrationClosedDate={event.registrationClosedDate}\n inviteCode={inviteCodeFromQuery}\n />\n </Box>\n </Flex>\n )}\n </Media>\n </>\n );\n}\n","import React, { useEffect, useState, useMemo } from 'react';\nimport Media from 'react-media';\nimport { Flex } from 'reflexbox';\nimport get from 'lodash/get';\nimport { useRouteMatch, useHistory, useLocation } from 'react-router-dom';\nimport Api from '../../api';\nimport { LoaderIcon, Menu, Breadcrumb } from 'boss-ui';\nimport { HistoryDetails } from '../../components';\nimport { useAppContext } from '../../libs/context-lib';\nimport { useBreadcrumb } from '../../libs/hooks-lib';\nimport { onError } from '../../libs/error-lib';\nimport { EVENT_TYPE, EVENT_ACCESS_TYPE } from '../../libs/constants';\n\nconst API = new Api();\n\nexport default function Details() {\n const location = useLocation();\n const [loadingEvent, setLoadingEvent] = useState(true);\n const { setEvent, event, appType } = useAppContext();\n const eventRouteMatch = useRouteMatch('/history/:itemId/event');\n const workshopRouteMatch = useRouteMatch('/history/:itemId/workshop');\n let historyRouteMatch = eventRouteMatch;\n let eventType = EVENT_TYPE.GAME;\n let linkType = 'event';\n\n if (!historyRouteMatch) {\n eventType = EVENT_TYPE.WORKSHOP;\n linkType = 'workshop';\n historyRouteMatch = workshopRouteMatch;\n }\n const history = useHistory();\n const [breadcrumbs, setBreadcrumbs] = useBreadcrumb();\n const match = useRouteMatch(location.pathname);\n\n const routes = [\n {\n path: `/history`,\n name: 'HISTORY',\n },\n {\n path: `/history/${historyRouteMatch.params.itemId}/${linkType}`,\n name: get(event, 'name', ''),\n },\n ];\n\n const MENU_ITEMS = [\n { path: '/', label: 'HOME', exact: true, id: 'menuLinkHome' },\n {\n path: { pathname: '/', hash: '#play-now' },\n label: 'PLAY NOW',\n id: 'menuLinkHomePlayNow',\n },\n { path: { pathname: '/', hash: '#learn' }, label: 'LEARN', id: 'menuLinkLearn' },\n {\n path: { pathname: '/', hash: '#boss-events' },\n label: 'BOSS EVENTS',\n id: 'menuLinkEvents',\n },\n {\n path: `/history/${historyRouteMatch.params.itemId}/${linkType}`,\n label: 'HISTORY',\n id: 'menuLinkHistory',\n },\n ];\n\n useMemo(() => {\n setBreadcrumbs(routes, match);\n }, [location, event]);\n\n useEffect(() => {\n const getEvent = async (id) => {\n setLoadingEvent(true);\n try {\n if (eventType === EVENT_TYPE.GAME) {\n const rq = await API.get('events', `/events/${id}`);\n setEvent(rq.event);\n } else {\n const rq = await API.get('workshops', `/workshops/${id}`);\n setEvent(rq.workshop);\n }\n } catch (e) {\n onError(e);\n history.push('/history');\n } finally {\n setLoadingEvent(false);\n }\n };\n\n if (event) {\n setLoadingEvent(false);\n } else {\n getEvent(historyRouteMatch.params.itemId);\n }\n }, [historyRouteMatch]);\n\n if (loadingEvent) {\n return (\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType}/>\n </Flex>\n );\n }\n\n return (\n <>\n <Menu menuItems={MENU_ITEMS} />\n <Media\n queries={{\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n }}\n >\n {(matches) => (\n <Flex width={1} justifyContent=\"center\">\n <Flex\n mx={matches.m ? '20px' : '10%'}\n mb=\"5%\"\n mt=\"30px\"\n justifyContent=\"center\"\n width=\"924px\"\n flexDirection=\"column\"\n >\n <Flex my=\"30px\" width={1 / 2}>\n <Breadcrumb crumbs={breadcrumbs} />\n </Flex>\n <HistoryDetails\n id={event.model === EVENT_TYPE.WORKSHOP ? event.workshopId : event.eventId}\n type={event.type}\n eventType={\n event.model === EVENT_TYPE.WORKSHOP ? EVENT_TYPE.WORKSHOP : EVENT_TYPE.GAME\n }\n name={event.name}\n description={event.description}\n startDate={event.startDate}\n delivery={event.delivery}\n isRestrictedEvent={event.accessType === EVENT_ACCESS_TYPE.RESTRICTED}\n duration={event.duration}\n scenarios={event.scenarios}\n scenariosScores={event.scenariosScores}\n globalTeamsCount={event.globalTeamsCount}\n />\n </Flex>\n </Flex>\n )}\n </Media>\n </>\n );\n}\n","import React, { useEffect, useState, useMemo } from 'react';\nimport Media from 'react-media';\nimport { Flex, Box } from 'reflexbox';\nimport get from 'lodash/get';\nimport { useRouteMatch, useHistory, useLocation } from 'react-router-dom';\nimport Api from '../../api';\nimport { LoaderIcon, Menu, Breadcrumb } from 'boss-ui';\nimport { EventDetails } from '../../components';\nimport { useAppContext } from '../../libs/context-lib';\nimport { useQuery, useBreadcrumb } from '../../libs/hooks-lib';\nimport { onError } from '../../libs/error-lib';\nimport { EVENT_TYPE } from '../../libs/constants';\n\nconst API = new Api();\n\nexport default function Details() {\n const [loadingEvent, setLoadingEvent] = useState(true);\n const { setEvent, event, appType } = useAppContext();\n const workshopRouteMatch = useRouteMatch('/workshops/:eventId/detail');\n const history = useHistory();\n const query = useQuery();\n const inviteCodeFromQuery = query.get('invite_code');\n const [breadcrumbs, setBreadcrumbs] = useBreadcrumb();\n const location = useLocation();\n\n const MENU_ITEMS = [\n { path: '/', label: 'HOME', exact: true, id: 'menuLinkHome' },\n {\n path: { pathname: '/', hash: '#play-now' },\n label: 'PLAY NOW',\n id: 'menuLinkHomePlayNow',\n },\n {\n path: `/workshops/${workshopRouteMatch.params.eventId}/detail`,\n label: 'LEARN',\n id: 'menuLinkLearn',\n },\n {\n path: { pathname: '/', hash: '#boss-events' },\n label: 'BOSS EVENTS',\n id: 'menuLinkEvents',\n },\n {\n path: `/history`,\n label: 'HISTORY',\n id: 'menuLinkHistory',\n },\n ];\n\n const routes = [\n {\n path: `/workshops/:eventId/detail`,\n name: get(event, 'name', 'Current workshop'),\n staticFather: {\n name: 'Learn',\n action: () => history.push({ pathname: '/', hash: '#learn' }),\n },\n },\n ];\n\n useEffect(() => {\n const getEvent = async (id) => {\n setLoadingEvent(true);\n try {\n const rq = await API.get('workshops', `/workshops/${id}`);\n setEvent(rq.workshop);\n } catch (e) {\n onError(e);\n history.push('/');\n } finally {\n setLoadingEvent(false);\n }\n };\n\n if (event) {\n setLoadingEvent(false);\n } else {\n getEvent(workshopRouteMatch.params.eventId);\n }\n }, [workshopRouteMatch]);\n\n useMemo(() => {\n setBreadcrumbs(routes, workshopRouteMatch);\n }, [location, event]);\n\n if (loadingEvent) {\n return (\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n }\n\n return (\n <>\n <Menu menuItems={MENU_ITEMS} />\n <Media\n queries={{\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n }}\n >\n {(matches) => (\n <Flex justifyContent=\"center\" width={1}>\n <Box mx={matches.m ? '20px' : '10%'} mb=\"5%\" mt=\"30px\">\n <Flex my=\"30px\">\n <Breadcrumb crumbs={breadcrumbs} />\n </Flex>\n <EventDetails\n id={event.workshopId}\n imageURL={event.imageURL}\n type={event.type}\n eventType={EVENT_TYPE.WORKSHOP}\n name={event.name}\n description={event.description}\n confirmationNumberRequired={event.confirmationNumberRequired}\n activeStartDate={event.activeStartDate}\n activeEndDate={event.activeEndDate}\n startDate={event.startDate}\n delivery={event.delivery}\n registrationStatus={event.registrationStatus}\n registrationOpenDate={event.registrationOpenDate}\n registrationClosedDate={event.registrationClosedDate}\n inviteCode={inviteCodeFromQuery}\n />\n </Box>\n </Flex>\n )}\n </Media>\n </>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport Media from 'react-media';\nimport { Flex, Box } from 'reflexbox';\nimport { useRouteMatch, useHistory } from 'react-router-dom';\nimport Api from '../../api';\nimport { LoaderIcon } from 'boss-ui';\nimport { Survey } from '../../components';\nimport { onError } from '../../libs/error-lib';\nimport { useQuery } from '../../libs/hooks-lib';\nimport { useAppContext } from '../../libs/context-lib';\n\nconst API = new Api();\n\nexport default function SurveyContainer() {\n const { appType } = useAppContext();\n const [loadingSurvey, setLoadingSurvey] = useState(true);\n const [showSurvey, setShowSurvey] = useState(false);\n const [survey, setSurvey] = useState(null);\n const surveyRouteMatch = useRouteMatch('/survey/:surveyId');\n const query = useQuery();\n const campaignId = query.get('cid');\n const viewMode = query.get('view');\n const history = useHistory();\n\n useEffect(() => {\n const getSurvey = async (id) => {\n setLoadingSurvey(true);\n try {\n const rq = await API.get('events', `/surveys/${id}`);\n setSurvey(rq.survey);\n setShowSurvey(true);\n } catch (e) {\n onError(e);\n history.push('/');\n } finally {\n setLoadingSurvey(false);\n }\n };\n\n getSurvey(surveyRouteMatch.params.surveyId);\n }, [surveyRouteMatch.params.surveyId]);\n\n if (loadingSurvey) {\n return (\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n }\n\n return (\n <>\n <Media\n queries={{\n s: '(max-width: 759px)',\n m: '(max-width: 900px)',\n }}\n >\n {(matches) => (\n <Flex justifyContent=\"center\" width={1}>\n <Box mx={matches.m ? '20px' : '10%'} mb=\"5%\" mt=\"30px\">\n {showSurvey && (\n <Flex mt=\"30px\">\n <Survey\n id={survey.surveyId}\n campaignId={campaignId}\n name={survey.name}\n description={survey.description}\n questions={survey.questions}\n onDismiss={() => setShowSurvey(false)}\n showOnDismiss={false}\n showTextIntro\n scrolled={viewMode === 'scroll'}\n />\n </Flex>\n )}\n </Box>\n </Flex>\n )}\n </Media>\n </>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport isUndefined from 'lodash/isUndefined';\nimport isNull from 'lodash/isNull';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { Flex } from 'reflexbox';\nimport Api from '../../api';\nimport { LoaderIcon, RegularText } from 'boss-ui';\nimport { onError } from '../../libs/error-lib';\nimport { getHashObjectInURL } from '../../libs/utils-lib';\nimport config from '../../config';\n\nconst API = new Api();\n\nexport default function DiscordJoinRedirection() {\n const [interval, setCallInterval] = useState(null);\n const [loadingText, setLoadingText] = useState('Getting discord user');\n const history = useHistory();\n const location = useLocation();\n\n useEffect(() => {\n const getDiscordUser = async () => {\n try {\n const { access_token, state } = getHashObjectInURL(location);\n const rq = await fetch(\n `${config.discord.DISCORD_API_URL}/${config.discord.GET_DISCORD_USER_PATH}`,\n {\n method: 'GET',\n withCredentials: true,\n credentials: 'include',\n headers: {\n Authorization: `Bearer ${access_token}`,\n 'Content-Type': 'application/json',\n },\n }\n );\n const discordUser = await rq.json();\n setLoadingText('Setting channel permissions');\n const { redirectPath, teamId, inviteUrl } = JSON.parse(decodeURIComponent(state));\n await API.post('teams', `/teams/${teamId}/join-discord`, {\n body: { discordUserId: discordUser.id, discordAccessToken: access_token },\n });\n window.open(inviteUrl, '_blank');\n history.push(`${redirectPath}`);\n } catch (e) {\n onError('Something went wrong');\n history.push('/');\n }\n };\n\n setCallInterval(\n setTimeout(() => {\n clearInterval(interval);\n getDiscordUser();\n }, 2000)\n );\n\n return () => {\n if (!isUndefined(interval) && !isNull(interval)) {\n clearInterval(interval);\n }\n };\n }, []);\n\n return (\n <Flex mt=\"15%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon />\n <Flex mt=\"20px\" alignItems=\"center\" justifyContent=\"center\">\n <RegularText>{loadingText}</RegularText>\n </Flex>\n </Flex>\n );\n}\n","import { USER_ROLES } from './constants';\n\nexport function getUserChanges(baseUser, newUser) {\n const changes = {};\n if (newUser.name !== baseUser.name) {\n changes.displayName = newUser.name;\n }\n if (newUser.isAdmin !== baseUser.isAdmin) {\n changes.role = newUser.isAdmin ? USER_ROLES.ADMIN : USER_ROLES.PLAYER;\n }\n return changes;\n}\n\nexport function getUserRoleInEvent(dynamoUser = {}, eventRole) {\n if (dynamoUser.role === USER_ROLES.SUPERADMIN) {\n return USER_ROLES.SUPERADMIN;\n }\n return eventRole;\n}\n\nexport function validateCognitoUserExists(user) {\n if (!user) {\n return false;\n }\n return true;\n}\n\nexport function validateDynamoUserExists(user) {\n if (!user || !user.dynamoUser) {\n return false;\n }\n return true;\n}\n\nexport function validateUserSession(user) {\n return validateCognitoUserExists(user) && validateDynamoUserExists(user);\n}\n","import React, { Suspense } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { Flex } from 'reflexbox';\nimport { UnauthenticatedRoute, AuthenticatedRoute, LoaderIcon } from 'boss-ui';\nimport FirstLogin from './containers/FirstSignIn';\nimport Login from './containers/Login';\nimport Signup from './containers/Signup';\nimport LoginSuccess from './containers/LoginSuccess';\nimport Account from './containers/Account';\nimport NotFound from './containers/NotFound';\nimport PasswordRecovery from './containers/PasswordRecovery';\nimport Home from './containers/Home';\nimport Event from './containers/Event';\nimport Logout from './containers/Logout';\nimport EventDetails from './containers/EventDetails';\nimport HistoryDetails from './containers/HistoryDetails';\nimport WorkshopDetails from './containers/WorkshopDetails';\nimport Survey from './containers/Survey';\nimport DiscordJoinRedirection from './containers/DiscordJoinRedirection';\nimport { sendWarning } from './libs/utils-lib';\nimport { useAppContext } from './libs/context-lib';\nimport {\n validateCognitoUserExists,\n validateUserSession,\n validateDynamoUserExists,\n} from './libs/user-lib';\nimport config from './config';\n\nconst Workshop = React.lazy(() =>\n import('./containers/Workshop').catch(() => {\n sendWarning('force reload by chunk error on Workshop', true);\n })\n);\n\nexport default function Routes() {\n const { user, appType } = useAppContext();\n const isUserSessionValid = () => validateUserSession(user);\n const isCognitoUserValid = () => validateCognitoUserExists(user);\n const isBossUserValid = () => validateDynamoUserExists(user);\n\n return (\n <Switch>\n <AuthenticatedRoute path=\"/event/:eventId?/detail\" exact validateSession={isUserSessionValid}>\n <EventDetails />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/event/:eventId?\" validateSession={isUserSessionValid}>\n <Event />\n </AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/workshops/:eventId?/detail\"\n validateSession={isUserSessionValid}\n exact\n >\n <WorkshopDetails />\n </AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/history/:eventId?/workshop\"\n validateSession={isUserSessionValid}\n exact\n >\n <HistoryDetails />\n </AuthenticatedRoute>\n <AuthenticatedRoute\n path=\"/history/:eventId?/event\"\n validateSession={isUserSessionValid}\n exact\n >\n <HistoryDetails />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/survey/:surveyId?\" exact>\n <Survey />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/workshop/:workshopId?\" validateSession={isUserSessionValid}>\n <Suspense\n fallback={\n <Flex mt=\"10%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n }\n >\n <Workshop />\n </Suspense>\n </AuthenticatedRoute>\n <AuthenticatedRoute validateSession={isCognitoUserValid} path=\"/firstLogin\">\n <FirstLogin />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/discordJoin\" validateSession={isUserSessionValid}>\n <DiscordJoinRedirection />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/account\" validateSession={isUserSessionValid}>\n <Account />\n </AuthenticatedRoute>\n <Route path=\"/successLogin\">\n <LoginSuccess />\n </Route>\n <UnauthenticatedRoute path=\"/login\" exact validateSession={isCognitoUserValid}>\n <Login />\n </UnauthenticatedRoute>\n {!config.cognito.SAML_LOGIN && (\n <UnauthenticatedRoute path=\"/signup\" exact validateSession={isCognitoUserValid}>\n <Signup />\n </UnauthenticatedRoute>\n )}\n <UnauthenticatedRoute path=\"/recovery\" exact validateSession={isCognitoUserValid}>\n <PasswordRecovery />\n </UnauthenticatedRoute>\n <AuthenticatedRoute path=\"/logout\" exact validateSession={isCognitoUserValid}>\n <Logout />\n </AuthenticatedRoute>\n <AuthenticatedRoute path=\"/\" validateSession={isCognitoUserValid}>\n <AuthenticatedRoute path=\"/\" validateSession={isBossUserValid} fallbackRoute=\"/firstLogin\">\n <Home />\n </AuthenticatedRoute>\n </AuthenticatedRoute>\n {/* Finally, catch all unmatched routes */}\n <Route>\n <NotFound />\n </Route>\n </Switch>\n );\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { ThemeProvider } from 'styled-components';\nimport { Auth, API } from 'aws-amplify';\nimport { Flex } from 'reflexbox';\nimport { LoaderIcon, Nav } from 'boss-ui';\nimport SplunkRum from '@splunk/otel-web';\nimport get from 'lodash/get';\nimport { ToastContainerNotification, NotificationsHandler, Footer } from './components';\nimport { AppContext } from './libs/context-lib';\nimport { formatLoggedInUser } from './libs/cognito-lib';\nimport Theme from './theme';\nimport Routes from './Routes';\nimport './index.css';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { setUserHeaders, getAppType } from './libs/utils-lib';\nimport { onError } from './libs/error-lib';\nimport { useQuery } from './libs/hooks-lib';\nimport { ALERTABLE_NOTIFICATIONS } from './libs/notifications-lib';\n\nfunction App() {\n const [user, userSession] = useState(null);\n const [event, setEvent] = useState(null);\n const [notifications, setNotifications] = useState([]);\n const [navTitle, setNavTitle] = useState(null);\n const [isAuthenticating, setIsAuthenticating] = useState(true);\n const history = useHistory();\n const { pathname, search } = useLocation();\n const appType = useMemo(() => getAppType(), []);\n const query = useQuery();\n const internalRedirect = query.get('redirect');\n\n const setDynamoUser = async (cognitoUser) => {\n try {\n const registeredUser = await API.get('users', '/user');\n if (!registeredUser.user) {\n userSession(cognitoUser);\n history.push('/firstLogin');\n return;\n }\n userSession({ ...cognitoUser, dynamoUser: registeredUser.user });\n setUserHeaders({ ...cognitoUser, dynamoUser: registeredUser.user });\n SplunkRum?.setGlobalAttributes({\n 'user.id': registeredUser.user.userId,\n 'user.email': registeredUser.user.email,\n 'user.username': registeredUser.user.displayName,\n });\n } catch (e) {\n onError(e);\n }\n };\n\n useEffect(() => {\n async function setLoggedInUser() {\n try {\n const loggedUser = formatLoggedInUser(await Auth.currentAuthenticatedUser());\n await setDynamoUser(loggedUser);\n } catch (e) {\n history.push(\n internalRedirect\n ? `/login?redirect=${internalRedirect}`\n : `/login?redirect=${pathname}${search}`\n );\n } finally {\n setIsAuthenticating(false);\n }\n }\n\n // avoid setting the user in app state if path is the saml idp redirection\n if (pathname !== '/successLogin') {\n setLoggedInUser();\n } else {\n setIsAuthenticating(false);\n }\n }, []);\n\n function handleLogout() {\n history.push('/logout');\n }\n\n if (isAuthenticating) {\n return (\n <Flex mt=\"15%\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\">\n <LoaderIcon appType={appType} />\n </Flex>\n );\n }\n\n const userDisplayName = get(user, 'dynamoUser.displayName');\n const userEmail = get(user, 'dynamoUser.email');\n const hideUserProfileActions = !user || !user.dynamoUser;\n\n // display list and remove new mark\n const onOpenNotifications = async () => {\n try {\n const notificationsRq = await API.get('users', '/user/notifications');\n const alertableNotifications = [];\n notificationsRq.notifications.forEach((n) => {\n if (ALERTABLE_NOTIFICATIONS.includes(n.notificationType)) {\n alertableNotifications.push(n);\n }\n });\n setNotifications(alertableNotifications);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n };\n\n // hide list and mark all unread notifications to read\n const onCloseNotifications = async () => {\n const notificationsPromises = notifications.map(async (n) => {\n if (n.read) {\n return n;\n }\n try {\n await API.patch('users', `/user/notifications/${n.createdAt}`, {\n body: { read: +new Date() },\n });\n return { ...n, read: true };\n } catch (e) {\n return n;\n }\n });\n const readedNotifications = await Promise.all(notificationsPromises);\n setNotifications(readedNotifications);\n };\n\n const onRemoveNotification = async (notification) => {\n try {\n const { createdAt } = notification;\n await API.del('users', `/user/notifications/${createdAt}`);\n setNotifications((notificationsBase) =>\n notificationsBase.filter((n) => n.createdAt !== createdAt)\n );\n } catch (e) {\n onError('Failed to remove notification');\n }\n };\n\n const onRemoveAllNotifications = async () => {\n const removeNotificationsPromises = [];\n notifications.forEach((n) => {\n try {\n removeNotificationsPromises.push(API.del('users', `/user/notifications/${n.createdAt}`));\n } catch (e) {\n onError('Failed to remove notification');\n }\n });\n await Promise.all(removeNotificationsPromises);\n setNotifications([]);\n };\n\n return (\n <div className=\"app-container\">\n <ThemeProvider theme={Theme}>\n <ToastContainerNotification\n position=\"top-right\"\n autoClose={5000}\n hideProgressBar={false}\n newestOnTop={false}\n closeOnClick\n pauseOnFocusLoss\n draggable\n pauseOnHover\n />\n <AppContext.Provider\n value={{\n user,\n userSession,\n event,\n setEvent,\n setNavTitle,\n appType,\n notifications,\n setNotifications,\n }}\n >\n <div className=\"app-header\">\n <Nav\n title={navTitle}\n appType={appType}\n onLogOut={handleLogout}\n userDisplayName={userDisplayName}\n userEmail={userEmail}\n userNotifications={notifications}\n onOpenNotifications={onOpenNotifications}\n onCloseNotifications={onCloseNotifications}\n loggedIn={user}\n hideUserSettings={hideUserProfileActions}\n hideUserNotifications={hideUserProfileActions}\n onRemoveNotification={onRemoveNotification}\n onRemoveAllNotifications={onRemoveAllNotifications}\n />\n </div>\n <NotificationsHandler />\n <Routes />\n <Footer/>\n </AppContext.Provider>\n </ThemeProvider>\n </div>\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Amplify from 'aws-amplify';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport config from './config';\nimport './index.css';\nimport App from './App';\nimport { refreshSAMLTokens } from './libs/cognito-lib';\nimport setupRum from './rum';\n\nconst version = require('../package.json').version;\n\nconst NO_HEADER_VALUE = 'not-set';\nsetupRum(config.rum);\n\nconst customHeaders = () => {\n const user = window.user || {\n email: NO_HEADER_VALUE,\n displayName: NO_HEADER_VALUE,\n userName: NO_HEADER_VALUE,\n };\n\n return {\n 'client-version': version,\n 'client-metadata': encodeURIComponent(\n JSON.stringify({\n email: user.email,\n displayName: user.displayName,\n userName: user.userName,\n })\n ),\n };\n};\n\nAmplify.configure({\n Auth: {\n mandatorySignIn: config.cognito.MANDATORY_SIGN_IN,\n region: config.cognito.REGION,\n ...(config.cognito.SAML_LOGIN\n ? {\n oauth: {\n domain: config.cognito.saml.DOMAIN,\n scope: config.cognito.saml.SCOPE,\n redirectSignIn: config.cognito.saml.REDIRECT_SIGN_IN,\n redirectSignOut: config.cognito.saml.REDIRECT_SIGN_OUT,\n responseType: config.cognito.saml.RESPONSE_TYPE,\n },\n userPoolId: config.cognito.saml.USER_POOL_ID,\n identityPoolId: config.cognito.saml.IDENTITY_POOL_ID,\n userPoolWebClientId: config.cognito.saml.APP_CLIENT_ID,\n refreshHandlers: {\n [`cognito-idp.${config.cognito.REGION}.amazonaws.com/${config.cognito.saml.USER_POOL_ID}`]:\n refreshSAMLTokens,\n },\n }\n : {\n userPoolId: config.cognito.USER_POOL_ID,\n identityPoolId: config.cognito.IDENTITY_POOL_ID,\n userPoolWebClientId: config.cognito.APP_CLIENT_ID,\n }),\n },\n API: {\n endpoints: [\n {\n name: 'events',\n endpoint: config.apiGateway.URL,\n region: config.apiGateway.REGION,\n custom_header: customHeaders,\n },\n {\n name: 'teams',\n endpoint: config.apiGateway.URL,\n region: config.apiGateway.REGION,\n custom_header: customHeaders,\n },\n {\n name: 'users',\n endpoint: config.apiGateway.URL,\n region: config.apiGateway.REGION,\n custom_header: customHeaders,\n },\n {\n name: 'resources',\n endpoint: config.apiGateway.URL,\n region: config.apiGateway.REGION,\n custom_header: customHeaders,\n },\n {\n name: 'workshops',\n endpoint: config.apiGateway.URL,\n region: config.apiGateway.REGION,\n custom_header: customHeaders,\n },\n ],\n },\n});\n\nReactDOM.render(\n <Router>\n <App />\n </Router>,\n document.getElementById('root')\n);\n","import SplunkRum from '@splunk/otel-web';\n\nexport default function rumConfig(config) {\n SplunkRum.init({\n applicationName: config.applicationName,\n beaconUrl: config.beaconUrl,\n rumAccessToken: config.rumAccessToken,\n version: config.version,\n deploymentEnvironment: config.deploymentEnvironment,\n });\n}\n","import EventEmitter from 'events';\nimport forEach from 'lodash/forEach';\nimport { signRequest } from '../../libs/utils-lib';\n\nexport const WEB_SOCKET_STATUS = {\n OPEN: 'OPEN', // connection is open\n CLOSED: 'CLOSED', // connection was closed by client or server\n PENDING: 'PENDING', // connection is not open but the instance is ready\n RECONNECTING: 'RECONNECTING', // connection is about to be open\n};\nconst API_GATEWAY_SIGNATURE_ACTION = 'execute-api';\nconst NORMAL_WEB_SOCKET_CLOSE_CODE = 1000;\nconst ABNORMAL_WEB_SOCKET_CLOSE_CODE = 1006;\nconst DEFAULT_RECONNECTION_TIME = 10000;\nconst SEND_REINTENT_MAX_ATTEMPTS = 10;\nconst SEND_REINTENT_INTERVAL_TIME = 500;\nclass WebSocketClient extends EventEmitter {\n constructor(props = {}) {\n const { customMessageEvents = [], autoReconnectInterval = DEFAULT_RECONNECTION_TIME } = props;\n if (!WebSocketClient.instance) {\n super();\n this.retryCount = 1;\n this.autoReconnectIntervalBase = autoReconnectInterval; // ms\n this.state = WEB_SOCKET_STATUS.PENDING;\n this.customMessageEvents = customMessageEvents;\n this.channelsSubscriptions = {};\n WebSocketClient.instance = this;\n } else {\n WebSocketClient.instance.customMessageEvents =\n WebSocketClient.instance.customMessageEvents.concat(customMessageEvents);\n WebSocketClient.instance.autoReconnectIntervalBase = autoReconnectInterval;\n WebSocketClient.instance.retryCount = 1;\n }\n return WebSocketClient.instance;\n }\n\n async open({ url, method = 'GET', channels = {}, authenticateRq = false }) {\n if (this.state === WEB_SOCKET_STATUS.OPEN || this.state === WEB_SOCKET_STATUS.RECONNECTING) {\n // eslint-disable-next-line no-console\n console.log('ws already open');\n throw new Error('ws already open');\n }\n this.url = url;\n\n let connectionRequest;\n if (authenticateRq) {\n connectionRequest = await signRequest({ url, method }, API_GATEWAY_SIGNATURE_ACTION);\n } else {\n connectionRequest = url;\n }\n this.instance = new WebSocket(connectionRequest);\n\n this.instance.onopen = () => {\n // eslint-disable-next-line no-console\n console.log('WS opened');\n this.state = WEB_SOCKET_STATUS.OPEN;\n this.retryCount = 1;\n forEach(channels, (subscriptionMessage, channelKey) => {\n this.subscribe({ channelKey, subscriptionMessage });\n });\n };\n\n this.instance.onmessage = (e, flags) => {\n if (typeof e.data === 'string') {\n const data = JSON.parse(e.data);\n if (data.notificationType && this.customMessageEvents.includes(data.notificationType)) {\n this.emit(data.notificationType, data);\n } else {\n this.emit('message', { data });\n }\n }\n };\n\n this.instance.onclose = (e) => {\n this.state = WEB_SOCKET_STATUS.CLOSED;\n // eslint-disable-next-line no-console\n console.log('WS closed', e);\n switch (e.code) {\n case NORMAL_WEB_SOCKET_CLOSE_CODE:\n break;\n case ABNORMAL_WEB_SOCKET_CLOSE_CODE:\n // Abnormal closure\n this.retryCount++;\n this.reconnect(e);\n break;\n default:\n this.reconnect(e);\n break;\n }\n };\n\n this.instance.onerror = (e) => {\n // eslint-disable-next-line no-console\n console.error('WS error', e);\n };\n }\n\n /**\n * Use this just for cases when the listener and the customMessageEvent has to be cleaned.\n * If you use for clean up you need to use addListener for add the listener and the customMessageEvent.\n * Do not use the constructor customMessageEvents param in this case\n * @param {*} event: notificationType string\n * @param {*} listener: event handler function\n */\n clearListener(event, listener) {\n this.removeListener(event, listener);\n this.customMessageEvents = this.customMessageEvents.filter(\n (messageEvent) => messageEvent !== event\n );\n }\n\n /**\n * Use this just for cases when the listener and the customMessageEvent has to be added.\n * If you use for adding on useEffect you need to use clearListener for removing the listener and the customMessageEvent.\n * Do not use the constructor customMessageEvents param in this case\n * @param {*} event: notificationType string\n * @param {*} listener: event handler function\n */\n addListener(event, listener) {\n this.on(event, listener);\n this.customMessageEvents = this.customMessageEvents.concat([event]);\n }\n\n waitForOpenConnection() {\n return new Promise((resolve, reject) => {\n let currentAttempt = 0;\n const interval = setInterval(() => {\n if (currentAttempt > SEND_REINTENT_MAX_ATTEMPTS - 1) {\n clearInterval(interval);\n reject(new Error('Maximum number of attempts exceeded'));\n } else if (this.state === WEB_SOCKET_STATUS.OPEN) {\n clearInterval(interval);\n resolve();\n }\n currentAttempt++;\n }, SEND_REINTENT_INTERVAL_TIME);\n });\n }\n\n async send(data, option) {\n if (this.state !== WEB_SOCKET_STATUS.OPEN) {\n try {\n await this.waitForOpenConnection();\n } catch (e) {\n throw new Error('Web socket is not opened, notifications can not be send');\n }\n }\n this.instance.send(JSON.stringify(data), option);\n }\n\n close() {\n if (this.state === WEB_SOCKET_STATUS.OPEN) {\n this.instance.close(NORMAL_WEB_SOCKET_CLOSE_CODE);\n this.state = WEB_SOCKET_STATUS.CLOSED;\n }\n }\n\n async subscribe({ channelKey, subscriptionMessage }) {\n if (!channelKey) {\n throw new Error('channelKey is mandatory');\n }\n if (this.channelsSubscriptions[channelKey]) {\n console.log(`Already subscribed to ${channelKey}`);\n return;\n }\n try {\n await this.send({ action: 'subscribeChannel', channel: channelKey, ...subscriptionMessage });\n this.channelsSubscriptions[channelKey] = subscriptionMessage;\n } catch (e) {\n console.error(\n `Error on channel subscription, channelKey: ${channelKey} subscriptionMessage: ${subscriptionMessage} error: ${JSON.stringify(\n e\n )}`\n );\n }\n }\n\n async unsubscribe({ channelKey, unsubscriptionMessage }) {\n if (!channelKey) {\n throw new Error('channelKey is mandatory');\n }\n if (!this.channelsSubscriptions[channelKey]) {\n console.log(`Not subscribed to ${channelKey}`);\n return;\n }\n try {\n await this.send({\n action: 'unsubscribeChannel',\n channel: channelKey,\n ...unsubscriptionMessage,\n });\n delete this.channelsSubscriptions[channelKey];\n } catch (e) {\n console.error(\n `Error on channel unsubscription, channelKey: ${channelKey} unsubscriptionMessage: ${unsubscriptionMessage} error: ${JSON.stringify(\n e\n )}`\n );\n }\n }\n\n reconnect(e) {\n this.state = WEB_SOCKET_STATUS.RECONNECTING;\n // eslint-disable-next-line no-console\n console.log(\n `WS retry in ${this.autoReconnectIntervalBase * this.retryCount}ms`,\n JSON.stringify(e)\n );\n const that = this;\n const channelsSubscriptions = that.channelsSubscriptions;\n that.channelsSubscriptions = {};\n setTimeout(function () {\n // eslint-disable-next-line no-console\n console.log('WS reconnecting...', channelsSubscriptions);\n that.state = WEB_SOCKET_STATUS.PENDING;\n that.open({\n url: that.url,\n channels: channelsSubscriptions,\n authenticateRq: process.env.REACT_APP_STAGE !== 'test',\n });\n }, this.autoReconnectIntervalBase * this.retryCount);\n }\n}\n\nexport default WebSocketClient;\n","import isEmpty from 'lodash/isEmpty';\nimport get from 'lodash/get';\nimport { EVENT_QUESTION_STATUS } from 'boss-ui';\n\nexport function updateQuestionsWithAnswer(question, answerResponse) {\n return {\n question: question.question,\n answer: answerResponse.answer,\n total: answerResponse.total,\n };\n}\n/**\n * @param {Array} questions: array of questions\n * @param {object} updatedQuestion: updated question\n * @param {String} id: question id of the question to update\n * @param {Function} helper: function that takes the question from the first param and the updated from the second as parameters and creates a new object\n */\nexport function updateQuestionBy(questions, updatedQuestion, id, helper = () => updatedQuestion) {\n const newQuestionArray = [];\n questions.forEach((question) => {\n if (question.question.question_id !== id) {\n newQuestionArray.push(question);\n return;\n }\n const updated = helper(question, updatedQuestion);\n if (updated) {\n newQuestionArray.push(updated);\n }\n });\n return newQuestionArray;\n}\n\nexport function updateQuestionByWS(previousQuestion, updatedQuestion) {\n const answer = get(updatedQuestion, 'answer', {});\n if (isEmpty(answer)) {\n return updatedQuestion;\n }\n return {\n ...updatedQuestion,\n answer: { ...answer, isWebSocketAnswer: true },\n };\n}\n\nexport function getAnswersStatus(questions) {\n return questions.reduce(\n (score, question) => {\n if (isEmpty(question.answer)) {\n return {\n ...score,\n unanswered: score.unanswered + 1,\n total: score.total + 1,\n };\n }\n if (question.answer.state === EVENT_QUESTION_STATUS.INCORRECT) {\n return {\n ...score,\n incorrect: score.incorrect + 1,\n total: score.total + 1,\n };\n }\n return {\n ...score,\n correct: score.correct + 1,\n total: score.total + 1,\n };\n },\n {\n unanswered: 0,\n incorrect: 0,\n correct: 0,\n total: 0,\n }\n );\n}\n"],"sourceRoot":""}